hopenpgp-tools 0.23.1 → 0.23.2
raw patch · 17 files changed
+11072/−821 lines, 17 filesdep ~basedep ~hOpenPGP
Dependency ranges changed: base, hOpenPGP
Files
- HOpenPGP/Tools/Armor.hs +9/−10
- HOpenPGP/Tools/Common.hs +79/−58
- HOpenPGP/Tools/HKP.hs +78/−45
- HOpenPGP/Tools/Lexer.x +6/−0
- HOpenPGP/Tools/Parser.y +7/−1
- HOpenPGP/Tools/TKUtils.hs +58/−43
- dist/build/hkt/hkt-tmp/HOpenPGP/Tools/Lexer.hs +1577/−0
- dist/build/hkt/hkt-tmp/HOpenPGP/Tools/Parser.hs +1615/−0
- dist/build/hop/hop-tmp/HOpenPGP/Tools/Lexer.hs +1577/−0
- dist/build/hop/hop-tmp/HOpenPGP/Tools/Parser.hs +1615/−0
- dist/build/hot/hot-tmp/HOpenPGP/Tools/Lexer.hs +1577/−0
- dist/build/hot/hot-tmp/HOpenPGP/Tools/Parser.hs +1615/−0
- hkt.hs +417/−243
- hokey.hs +643/−309
- hop.hs +13/−13
- hopenpgp-tools.cabal +8/−8
- hot.hs +178/−91
HOpenPGP/Tools/Armor.hs view
@@ -1,7 +1,7 @@ {-# LANGUAGE RecordWildCards #-} -- Armor.hs: hOpenPGP-tools common ASCII de-Armor function--- Copyright © 2012-2019 Clint Adams+-- Copyright © 2012-2020 Clint Adams -- -- vim: softtabstop=4:shiftwidth=4:expandtab --@@ -17,10 +17,9 @@ -- -- You should have received a copy of the GNU Affero General Public License -- along with this program. If not, see <http://www.gnu.org/licenses/>.--module HOpenPGP.Tools.Armor (- doDeArmor-) where+module HOpenPGP.Tools.Armor+ ( doDeArmor+ ) where import qualified Codec.Encryption.OpenPGP.ASCIIArmor as AA import Codec.Encryption.OpenPGP.ASCIIArmor.Types (Armor(..))@@ -29,11 +28,11 @@ import Data.Conduit ((.|), runConduitRes) import qualified Data.Conduit.Binary as CB import qualified Data.Conduit.List as CL-import System.IO (stderr, stdin, hPutStrLn)+import System.IO (hPutStrLn, stderr, stdin) doDeArmor :: IO () doDeArmor = do- a <- runConduitRes $ CB.sourceHandle stdin .| CL.consume- case AA.decode (B.concat a) of- Left e -> hPutStrLn stderr $ "Failure to decode ASCII Armor:" ++ e- Right msgs -> BL.putStr $ BL.concat (map (\(Armor _ _ bs) -> bs) msgs)+ a <- runConduitRes $ CB.sourceHandle stdin .| CL.consume+ case AA.decode (B.concat a) of+ Left e -> hPutStrLn stderr $ "Failure to decode ASCII Armor:" ++ e+ Right msgs -> BL.putStr $ BL.concat (map (\(Armor _ _ bs) -> bs) msgs)
HOpenPGP/Tools/Common.hs view
@@ -1,5 +1,5 @@ -- Common.hs: hOpenPGP-tools common functions--- Copyright © 2012-2019 Clint Adams+-- Copyright © 2012-2020 Clint Adams -- -- vim: softtabstop=4:shiftwidth=4:expandtab --@@ -15,9 +15,8 @@ -- -- You should have received a copy of the GNU Affero General Public License -- along with this program. If not, see <http://www.gnu.org/licenses/>.--module HOpenPGP.Tools.Common (- banner+module HOpenPGP.Tools.Common+ ( banner , versioner , warranty , prependAuto@@ -46,54 +45,65 @@ , spGetSigType , spGetPKAlgo , spGetHashAlgo+ , spGetSCT , maybeR-) where+ ) where -import Paths_hopenpgp_tools (version) import Data.Version (showVersion)+import Paths_hopenpgp_tools (version) import Codec.Encryption.OpenPGP.Fingerprint (eightOctetKeyID, fingerprint)+import Codec.Encryption.OpenPGP.SignatureQualities (sigCT) import Codec.Encryption.OpenPGP.Types import Control.Lens ((^..)) import Data.Binary (put) import Data.Binary.Put (runPut) import qualified Data.ByteString.Lazy as BL import Data.Data.Lens (biplate)-import Data.Monoid ((<>)) import Data.Text (Text) import qualified Data.Text as T+import Data.Text.Prettyprint.Doc (Doc, (<+>), hardline, pretty) import Options.Applicative.Builder (auto, help, hidden, infoOption, long, short) import Options.Applicative.Types (Parser, ReadM(..))-import Data.Text.Prettyprint.Doc (Doc, (<+>), hardline, pretty) --- hmm ---import Data.Maybe (fromMaybe, mapMaybe) import Codec.Encryption.OpenPGP.KeyInfo (pubkeySize) import Control.Error.Util (hush)-import Control.Monad.Trans.Reader (ask, withReader, reader, Reader, runReader, ReaderT, local)-+import Control.Monad.Trans.Reader+ ( Reader+ , ReaderT+ , ask+ , local+ , reader+ , runReader+ , withReader+ )+-- hmm --+import Data.Maybe (fromMaybe, mapMaybe) banner :: String -> Doc ann {-# INLINE banner #-}-banner name = pretty name <+> pretty "(hopenpgp-tools)" <+> pretty (showVersion version) <> hardline- <> pretty "Copyright (C) 2012-2019 Clint Adams"+banner name =+ pretty name <+>+ pretty "(hopenpgp-tools)" <+>+ pretty (showVersion version) <>+ hardline <> pretty "Copyright (C) 2012-2020 Clint Adams" warranty :: String -> Doc ann {-# INLINE warranty #-}-warranty name = pretty name <+> pretty "comes with ABSOLUTELY NO WARRANTY." <+>- pretty "This is free software, and you are welcome to redistribute it" <+>- pretty "under certain conditions."+warranty name =+ pretty name <+>+ pretty "comes with ABSOLUTELY NO WARRANTY." <+>+ pretty "This is free software, and you are welcome to redistribute it" <+>+ pretty "under certain conditions." versioner :: String -> Parser (a -> a) {-# INLINE versioner #-}-versioner name = infoOption (name ++ " (hopenpgp-tools) " ++ showVersion version) $- long "version"- <> short 'V'- <> help "Show version information"- <> hidden+versioner name =+ infoOption (name ++ " (hopenpgp-tools) " ++ showVersion version) $+ long "version" <> short 'V' <> help "Show version information" <> hidden prependAuto :: Read a => String -> ReadM a-prependAuto s = ReadM (local (s++) (unReadM auto))+prependAuto s = ReadM (local (s ++) (unReadM auto)) keyMatchesFingerprint :: Bool -> TK -> TwentyOctetFingerprint -> Bool keyMatchesFingerprint = keyMatchesPKPred fingerprint@@ -105,19 +115,22 @@ keyMatchesExactUIDString uidstr = elem uidstr . map fst . _tkUIDs keyMatchesUIDSubString :: Text -> TK -> Bool-keyMatchesUIDSubString uidstr = any (T.toLower uidstr `T.isInfixOf`) . map (T.toLower . fst) . _tkUIDs+keyMatchesUIDSubString uidstr =+ any (T.toLower uidstr `T.isInfixOf`) . map (T.toLower . fst) . _tkUIDs keyMatchesPKPred :: Eq a => (PKPayload -> a) -> Bool -> TK -> a -> Bool keyMatchesPKPred p False = (==) . p . fst . _tkKey keyMatchesPKPred p True = \tk v -> elem v (map p (tk ^.. biplate)) - -- The following should probably be moved elsewhere tkUsingPKP :: Reader PKPayload a -> Reader TK a tkUsingPKP = withReader (fst . _tkKey) pkpGetPKVersion :: PKPayload -> Integer-pkpGetPKVersion t = if _keyVersion t == DeprecatedV3 then 3 else 4+pkpGetPKVersion t =+ if _keyVersion t == DeprecatedV3+ then 3+ else 4 pkpGetPKAlgo :: PKPayload -> Integer pkpGetPKAlgo = fromIntegral . fromFVal . _pkalgo@@ -139,12 +152,16 @@ tkGetSubs :: TK -> [PKPayload] tkGetSubs = mapMaybe (grabPKP . fst) . _tkSubs- where- grabPKP (PublicSubkeyPkt p) = Just p- grabPKP (SecretSubkeyPkt p _) = Just p- grabPKP _ = Nothing+ where+ grabPKP (PublicSubkeyPkt p) = Just p+ grabPKP (SecretSubkeyPkt p _) = Just p+ grabPKP _ = Nothing -anyOrAll :: (Monad m, Monad m1) => ((a1 -> c) -> a -> ReaderT a m b) -> (m1 a1 -> c) -> ReaderT a m b+anyOrAll ::+ (Monad m, Monad m1)+ => ((a1 -> c) -> a -> ReaderT a m b)+ -> (m1 a1 -> c)+ -> ReaderT a m b anyOrAll aa op = ask >>= aa (op . return) anyReader :: Reader a Bool -> Reader [a] Bool@@ -154,55 +171,59 @@ oGetTag = fromIntegral . pktTag oGetLength :: Pkt -> Integer-oGetLength = fromIntegral . BL.length . runPut . put -- FIXME: this should be a length that makes sense+oGetLength = fromIntegral . BL.length . runPut . put -- FIXME: this should be a length that makes sense spGetSigVersion :: Pkt -> Maybe Integer spGetSigVersion (SignaturePkt s) = Just (sigVersion s)- where- sigVersion SigV3{} = 3- sigVersion SigV4{} = 4- sigVersion (SigVOther v _) = fromIntegral v+ where+ sigVersion SigV3 {} = 3+ sigVersion SigV4 {} = 4+ sigVersion (SigVOther v _) = fromIntegral v spGetSigVersion _ = Nothing spGetSigType :: Pkt -> Maybe Integer spGetSigType (SignaturePkt s) = fmap (fromIntegral . fromFVal) (sigType s)- where -- FIXME: deduplicate this and hOpenPGP .Internal- sigType :: SignaturePayload -> Maybe SigType- sigType (SigV3 st _ _ _ _ _ _) = Just st- sigType (SigV4 st _ _ _ _ _ _) = Just st- sigType _ = Nothing -- this includes v2 sigs, which don't seem to be specified in the RFCs but exist in the wild+ -- FIXME: deduplicate this and hOpenPGP .Internal+ where+ sigType :: SignaturePayload -> Maybe SigType+ sigType (SigV3 st _ _ _ _ _ _) = Just st+ sigType (SigV4 st _ _ _ _ _ _) = Just st+ sigType _ = Nothing -- this includes v2 sigs, which don't seem to be specified in the RFCs but exist in the wild spGetSigType _ = Nothing spGetPKAlgo :: Pkt -> Maybe Integer spGetPKAlgo (SignaturePkt s) = fmap (fromIntegral . fromFVal) (sigPKA s)- where- sigPKA (SigV3 _ _ _ pka _ _ _) = Just pka- sigPKA (SigV4 _ pka _ _ _ _ _) = Just pka- sigPKA _ = Nothing -- this includes v2 sigs, which don't seem to be specified in the RFCs but exist in the wild+ where+ sigPKA (SigV3 _ _ _ pka _ _ _) = Just pka+ sigPKA (SigV4 _ pka _ _ _ _ _) = Just pka+ sigPKA _ = Nothing -- this includes v2 sigs, which don't seem to be specified in the RFCs but exist in the wild spGetPKAlgo _ = Nothing spGetHashAlgo :: Pkt -> Maybe Integer spGetHashAlgo (SignaturePkt s) = fmap (fromIntegral . fromFVal) (sigHA s)- where- sigHA (SigV3 _ _ _ _ ha _ _) = Just ha- sigHA (SigV4 _ _ ha _ _ _ _) = Just ha- sigHA _ = Nothing -- this includes v2 sigs, which don't seem to be specified in the RFCs but exist in the wild+ where+ sigHA (SigV3 _ _ _ _ ha _ _) = Just ha+ sigHA (SigV4 _ _ ha _ _ _ _) = Just ha+ sigHA _ = Nothing -- this includes v2 sigs, which don't seem to be specified in the RFCs but exist in the wild spGetHashAlgo _ = Nothing +spGetSCT :: Pkt -> Maybe Integer+spGetSCT (SignaturePkt s) = fmap fromIntegral (sigCT s)+ pUsingPKP :: Reader (Maybe PKPayload) a -> Reader Pkt a pUsingPKP = withReader grabPayload- where- grabPayload (SecretKeyPkt p _) = Just p- grabPayload (PublicKeyPkt p) = Just p- grabPayload (SecretSubkeyPkt p _) = Just p- grabPayload (PublicSubkeyPkt p) = Just p- grabPayload _ = Nothing+ where+ grabPayload (SecretKeyPkt p _) = Just p+ grabPayload (PublicKeyPkt p) = Just p+ grabPayload (SecretSubkeyPkt p _) = Just p+ grabPayload (PublicSubkeyPkt p) = Just p+ grabPayload _ = Nothing pUsingSP :: Reader (Maybe SignaturePayload) a -> Reader Pkt a pUsingSP = withReader grabPayload- where- grabPayload (SignaturePkt s ) = Just s- grabPayload _ = Nothing+ where+ grabPayload (SignaturePkt s) = Just s+ grabPayload _ = Nothing maybeR :: a -> Reader r a -> Reader (Maybe r) a maybeR x r = reader (maybe x (runReader r))
HOpenPGP/Tools/HKP.hs view
@@ -1,5 +1,5 @@ -- HKP.hs: hOpenPGP key tool--- Copyright © 2016-2019 Clint Adams+-- Copyright © 2016-2020 Clint Adams -- -- vim: softtabstop=4:shiftwidth=4:expandtab --@@ -15,78 +15,111 @@ -- -- You should have received a copy of the GNU Affero General Public License -- along with this program. If not, see <http://www.gnu.org/licenses/>.- {-# LANGUAGE OverloadedStrings #-} -module HOpenPGP.Tools.HKP (- fetchKeys+module HOpenPGP.Tools.HKP+ ( fetchKeys , FetchValidationMethod(..) , rearmorKeys-) where+ ) where -import HOpenPGP.Tools.TKUtils (processTK) import qualified Codec.Encryption.OpenPGP.ASCIIArmor as AA-import Codec.Encryption.OpenPGP.ASCIIArmor.Types (Armor(Armor), ArmorType(ArmorPublicKeyBlock))+import Codec.Encryption.OpenPGP.ASCIIArmor.Types+ ( Armor(Armor)+ , ArmorType(ArmorPublicKeyBlock)+ ) import Codec.Encryption.OpenPGP.Fingerprint (fingerprint)-import Codec.Encryption.OpenPGP.Types (Block(..), TK(..), TwentyOctetFingerprint)+import Codec.Encryption.OpenPGP.Types+ ( Block(..)+ , TK(..)+ , TwentyOctetFingerprint+ ) import Control.Applicative (liftA2) import Control.Arrow ((&&&)) import Control.Lens ((^..)) import Control.Monad.IO.Class (liftIO) import Control.Monad.Trans.Except (ExceptT(..), throwE) import Data.Binary (get, put)+import Data.Binary.Put (runPut)+import qualified Data.ByteString as B import qualified Data.ByteString.Char8 as BC8+import qualified Data.ByteString.Lazy as BL import Data.Conduit ((.|), runConduitRes) import qualified Data.Conduit.Binary as CB+import qualified Data.Conduit.List as CL import Data.Conduit.OpenPGP.Keyring (conduitToTKsDropping) import Data.Conduit.Serialization.Binary (conduitGet)-import qualified Data.Conduit.List as CL-import Data.Binary.Put (runPut)-import qualified Data.ByteString as B-import qualified Data.ByteString.Lazy as BL import Data.Data.Lens (biplate) import Data.Either (rights) import Data.Monoid ((<>), mempty)+import Data.Text.Prettyprint.Doc (pretty) import Data.Time.Clock.POSIX (getPOSIXTime)-import Network.HTTP.Client (httpLbs, newManager, parseUrlThrow, Response(..), setQueryString)+import HOpenPGP.Tools.TKUtils (processTK)+import Network.HTTP.Client+ ( Response(..)+ , httpLbs+ , newManager+ , parseUrlThrow+ , setQueryString+ ) import Network.HTTP.Client.TLS (tlsManagerSettings) import Network.HTTP.Types.Status (ok200)-import Data.Text.Prettyprint.Doc (pretty) -data FetchValidationMethod = MatchPrimaryKeyFingerprint | MatchPrimaryOrAnySubkeyFingerprint | AnySelfSigned- deriving (Bounded, Enum, Eq, Read, Show)+data FetchValidationMethod+ = MatchPrimaryKeyFingerprint+ | MatchPrimaryOrAnySubkeyFingerprint+ | AnySelfSigned+ deriving (Bounded, Enum, Eq, Read, Show) -fetchKeys :: String -> FetchValidationMethod -> TwentyOctetFingerprint -> ExceptT String IO [TK]+fetchKeys ::+ String+ -> FetchValidationMethod+ -> TwentyOctetFingerprint+ -> ExceptT String IO [TK] fetchKeys ks fvm q = do- manager <- liftIO $ newManager tlsManagerSettings-- request <- liftIO $ parseUrlThrow (ks <> basereq)- let newreq = setQueryString (newqs q) request- response <- liftIO $ httpLbs newreq manager-- processedKeys <- if responseStatus response == ok200 then validateKeys (responseBody response) else throwE ("HTTP status: " ++ show (responseStatus response))- return $ map fst $ filter (fvp fvm . fst . _tkKey . snd) processedKeys- where- fvp MatchPrimaryKeyFingerprint k = fingerprint k == q- fvp MatchPrimaryOrAnySubkeyFingerprint k = any (\k -> fingerprint k == q) (k^.. biplate)- fvp AnySelfSigned k = True- basereq = "/pks/lookup"- newqs q = [- ("op", Just "get")- , ("options", Just "mr")- , ("exact", Just "on")- , ("search", Just (BC8.pack ("0x" <> show (pretty q)))) -- FIXME: butter- ]+ manager <- liftIO $ newManager tlsManagerSettings+ request <- liftIO $ parseUrlThrow (ks <> basereq)+ let newreq = setQueryString (newqs q) request+ response <- liftIO $ httpLbs newreq manager+ processedKeys <-+ if responseStatus response == ok200+ then validateKeys (responseBody response)+ else throwE ("HTTP status: " ++ show (responseStatus response))+ return $ map fst $ filter (fvp fvm . fst . _tkKey . snd) processedKeys+ where+ fvp MatchPrimaryKeyFingerprint k = fingerprint k == q+ fvp MatchPrimaryOrAnySubkeyFingerprint k =+ any (\k -> fingerprint k == q) (k ^.. biplate)+ fvp AnySelfSigned k = True+ basereq = "/pks/lookup"+ newqs q =+ [ ("op", Just "get")+ , ("options", Just "mr")+ , ("exact", Just "on")+ , ("search", Just (BC8.pack ("0x" <> show (pretty q)))) -- FIXME: butter+ ] -validateKeys :: BL.ByteString -> ExceptT String IO [(TK,TK)] -- FIXME: conduit fail+validateKeys :: BL.ByteString -> ExceptT String IO [(TK, TK)] -- FIXME: conduit fail validateKeys larmors = do- bytestrings <- ExceptT $ return $ fmap (mconcat . map armorToBS) (AA.decodeLazy larmors)- keys <- liftIO . runConduitRes $ CB.sourceLbs bytestrings .| conduitGet get .| conduitToTKsDropping .| CL.consume- cpt <- liftIO getPOSIXTime- return . rights $ map (uncurry (liftA2 (,)) . (pure &&& processTK (Just cpt))) keys- where- armorToBS (Armor ArmorPublicKeyBlock _ bs) = bs- armorToBS _ = mempty+ bytestrings <-+ ExceptT $ return $ fmap (mconcat . map armorToBS) (AA.decodeLazy larmors)+ keys <-+ liftIO . runConduitRes $+ CB.sourceLbs bytestrings .| conduitGet get .| conduitToTKsDropping .|+ CL.consume+ cpt <- liftIO getPOSIXTime+ return . rights $+ map (uncurry (liftA2 (,)) . (pure &&& processTK (Just cpt))) keys+ where+ armorToBS (Armor ArmorPublicKeyBlock _ bs) = bs+ armorToBS _ = mempty rearmorKeys :: [TK] -> B.ByteString-rearmorKeys keys = if null keys then mempty else AA.encode . return . Armor ArmorPublicKeyBlock [("Comment", "filtered by hokey")] . runPut . put . Block $ keys+rearmorKeys keys =+ if null keys+ then mempty+ else AA.encode .+ return .+ Armor ArmorPublicKeyBlock [("Comment", "filtered by hokey")] .+ runPut . put . Block $+ keys
HOpenPGP/Tools/Lexer.x view
@@ -33,6 +33,7 @@ any { lex' TokenAny } every { lex' TokenEvery } not { lex' TokenNot }+ now { lex' TokenNow } one { lex' TokenOne } or { lex' TokenOr } subkey { lex' TokenSubkey }@@ -85,6 +86,7 @@ timestamp { lex' TokenTimestamp } fingerprint { lex' TokenFingerprint } keyid { lex' TokenKeyID }+ [Ss]ig[Cc]reation[Tt]ime { lex' TokenSigCreationTime } $hexdigit{9}$hexdigit{9}$hexdigit{9}$hexdigit{9}$hexdigit{4} { lex (TokenFpr . read) } 0x$hexdigit{9}$hexdigit{9}$hexdigit{9}$hexdigit{9}$hexdigit{4} { lex (TokenFpr . read . drop 2) } $hexdigit{8}$hexdigit{8} { lex (TokenLongID . Right . read) }@@ -97,9 +99,12 @@ { data Token = TokenTag+ | TokenAfter | TokenAnd | TokenAny+ | TokenBefore | TokenNot+ | TokenNow | TokenOr | TokenInt Integer | TokenEq@@ -156,6 +161,7 @@ | TokenStr String | TokenA | TokenSubkey+ | TokenSigCreationTime deriving (Eq,Show) alexEOF = return TokenEOF
HOpenPGP/Tools/Parser.y view
@@ -3,7 +3,7 @@ module HOpenPGP.Tools.Parser( parseTKExp, parsePExp ) where import Codec.Encryption.OpenPGP.Types -- import Data.Conduit.OpenPGP.Filter (Expr(..), UPredicate(..), UOp(..), OVar(..), OValue(..), SPVar(..), SPValue(..), PKPVar(..), PKPValue(..))-import HOpenPGP.Tools.Common (pkpGetPKVersion, pkpGetPKAlgo, pkpGetKeysize, pkpGetTimestamp, pkpGetFingerprint, pkpGetEOKI, tkUsingPKP, tkGetUIDs, tkGetSubs, anyOrAll, anyReader, oGetTag, oGetLength, spGetSigVersion, spGetSigType, spGetPKAlgo, spGetHashAlgo, pUsingPKP, pUsingSP, maybeR)+import HOpenPGP.Tools.Common (pkpGetPKVersion, pkpGetPKAlgo, pkpGetKeysize, pkpGetTimestamp, pkpGetFingerprint, pkpGetEOKI, tkUsingPKP, tkGetUIDs, tkGetSubs, anyOrAll, anyReader, oGetTag, oGetLength, spGetSigVersion, spGetSigType, spGetPKAlgo, spGetHashAlgo, spGetSCT, pUsingPKP, pUsingSP, maybeR) import HOpenPGP.Tools.Lexer @@ -32,6 +32,7 @@ contains { TokenContains } every { TokenEvery } not { TokenNot }+ now { TokenNow } of { TokenOf } one { TokenOne } or { TokenOr }@@ -80,6 +81,7 @@ timestamp { TokenTimestamp } fingerprint { TokenFingerprint } keyid { TokenKeyID }+ sigcreationtime { TokenSigCreationTime } fpr { TokenFpr $$ } longid { TokenLongID $$ } length { TokenLength }@@ -148,6 +150,7 @@ | sigtype SIOp Ssigtypes { $2 (reader spGetSigType) (return (Just $3)) } | sigpkalgo SIOp Spkalgos { $2 (reader spGetPKAlgo) (return (Just $3)) } | hashalgo SIOp Shashalgos { $2 (reader spGetHashAlgo) (return (Just $3)) }+ | sigcreationtime SIOp Stimespec { $2 (reader spGetSCT) (return (Just $3)) } SIOp : '=' { liftA2 (==) } | '<' { liftA2 (<) }@@ -185,6 +188,9 @@ | sha512 { fromIntegral (fromFVal SHA512) } | sha224 { fromIntegral (fromFVal SHA224) } | int { fromIntegral $1 }++Stimespec : now { 0 }+ | int { fromIntegral $1 } { lexwrap :: (Token -> Alex a) -> Alex a
HOpenPGP/Tools/TKUtils.hs view
@@ -1,5 +1,5 @@ -- TKUtils.hs: hOpenPGP-tools TK-related common functions--- Copyright © 2013-2019 Clint Adams+-- Copyright © 2013-2020 Clint Adams -- -- vim: softtabstop=4:shiftwidth=4:expandtab --@@ -15,57 +15,72 @@ -- -- You should have received a copy of the GNU Affero General Public License -- along with this program. If not, see <http://www.gnu.org/licenses/>.--module HOpenPGP.Tools.TKUtils (- processTK-) where+module HOpenPGP.Tools.TKUtils+ ( processTK+ ) where import Codec.Encryption.OpenPGP.Fingerprint (eightOctetKeyID, fingerprint)-import Codec.Encryption.OpenPGP.Signatures (verifyTKWith, verifySigWith, verifyAgainstKeys)+import Codec.Encryption.OpenPGP.Signatures+ ( verifyAgainstKeys+ , verifySigWith+ , verifyTKWith+ ) import Codec.Encryption.OpenPGP.Types-import Control.Error.Util (hush) import Control.Arrow (second)+import Control.Error.Util (hush) import Control.Lens ((^.), _1) import Data.List (sortOn)-import Data.Maybe (mapMaybe, listToMaybe)+import Data.Maybe (listToMaybe, mapMaybe) import Data.Ord (Down(..))-import Data.Time.Clock.POSIX (posixSecondsToUTCTime, POSIXTime)+import Data.Time.Clock.POSIX (POSIXTime, posixSecondsToUTCTime) -- should this fail or should verifyTKWith fail if there are no self-sigs?- processTK :: Maybe POSIXTime -> TK -> Either String TK-processTK mpt key = verifyTKWith (verifySigWith (verifyAgainstKeys [key])) (fmap posixSecondsToUTCTime mpt) . stripOlderSigs . stripOtherSigs $ key- where- stripOtherSigs tk = tk {- _tkUIDs = map (second alleged) (_tkUIDs tk)- , _tkUAts = map (second alleged) (_tkUAts tk)+processTK mpt key =+ verifyTKWith+ (verifySigWith (verifyAgainstKeys [key]))+ (fmap posixSecondsToUTCTime mpt) .+ stripOlderSigs .+ stripOtherSigs $+ key+ where+ stripOtherSigs tk =+ tk+ { _tkUIDs = map (second alleged) (_tkUIDs tk)+ , _tkUAts = map (second alleged) (_tkUAts tk) }- stripOlderSigs tk = tk {- _tkUIDs = map (second newest) (_tkUIDs tk)- , _tkUAts = map (second newest) (_tkUAts tk)+ stripOlderSigs tk =+ tk+ { _tkUIDs = map (second newest) (_tkUIDs tk)+ , _tkUAts = map (second newest) (_tkUAts tk) }- newest = take 1 . sortOn (Down . take 1 . sigcts) -- FIXME: this is terrible- sigcts (SigV4 _ _ _ xs _ _ _) = map (\(SigSubPacket _ (SigCreationTime x)) -> x) $ filter isCT xs- pkp = key^.tkKey._1- alleged = filter (\x -> assI x || assIFP x)- isCT (SigSubPacket _ (SigCreationTime _)) = True- isCT _ = False- sigissuer (SigVOther 2 _) = Nothing- sigissuer SigV3{} = Nothing- sigissuer (SigV4 _ _ _ ys xs _ _) = listToMaybe . mapMaybe (getIssuer . _sspPayload) $ (ys++xs) -- FIXME: what should this be if there are multiple matches?- sigissuer (SigVOther _ _) = error "We're in the future." -- FIXME- sigissuerfp (SigV4 _ _ _ ys xs _ _) = listToMaybe . mapMaybe (getIssuerFP . _sspPayload) $ (ys++xs) -- FIXME: what should this be if there are multiple matches?- sigissuerfp _ = Nothing- eoki- | pkp^.keyVersion == V4 = hush . eightOctetKeyID $ pkp- | pkp^.keyVersion == DeprecatedV3 && elem (pkp^.pkalgo) [RSA,DeprecatedRSASignOnly] = hush . eightOctetKeyID $ pkp- | otherwise = Nothing- fp- | pkp^.keyVersion == V4 = Just . fingerprint $ pkp- | otherwise = Nothing- getIssuer (Issuer i) = Just i- getIssuer _ = Nothing- getIssuerFP (IssuerFingerprint 4 i) = Just i- getIssuerFP _ = Nothing- assI x = ((==) <$> sigissuer x <*> eoki) == Just True- assIFP x = ((==) <$> sigissuerfp x <*> fp) == Just True+ newest = take 1 . sortOn (Down . take 1 . sigcts) -- FIXME: this is terrible+ sigcts (SigV4 _ _ _ xs _ _ _) =+ map (\(SigSubPacket _ (SigCreationTime x)) -> x) $ filter isCT xs+ pkp = key ^. tkKey . _1+ alleged = filter (\x -> assI x || assIFP x)+ isCT (SigSubPacket _ (SigCreationTime _)) = True+ isCT _ = False+ sigissuer (SigVOther 2 _) = Nothing+ sigissuer SigV3 {} = Nothing+ sigissuer (SigV4 _ _ _ ys xs _ _) =+ listToMaybe . mapMaybe (getIssuer . _sspPayload) $ (ys ++ xs) -- FIXME: what should this be if there are multiple matches?+ sigissuer (SigVOther _ _) = error "We're in the future." -- FIXME+ sigissuerfp (SigV4 _ _ _ ys xs _ _) =+ listToMaybe . mapMaybe (getIssuerFP . _sspPayload) $ (ys ++ xs) -- FIXME: what should this be if there are multiple matches?+ sigissuerfp _ = Nothing+ eoki+ | pkp ^. keyVersion == V4 = hush . eightOctetKeyID $ pkp+ | pkp ^. keyVersion == DeprecatedV3 &&+ elem (pkp ^. pkalgo) [RSA, DeprecatedRSASignOnly] =+ hush . eightOctetKeyID $ pkp+ | otherwise = Nothing+ fp+ | pkp ^. keyVersion == V4 = Just . fingerprint $ pkp+ | otherwise = Nothing+ getIssuer (Issuer i) = Just i+ getIssuer _ = Nothing+ getIssuerFP (IssuerFingerprint 4 i) = Just i+ getIssuerFP _ = Nothing+ assI x = ((==) <$> sigissuer x <*> eoki) == Just True+ assIFP x = ((==) <$> sigissuerfp x <*> fp) == Just True
+ dist/build/hkt/hkt-tmp/HOpenPGP/Tools/Lexer.hs view
@@ -0,0 +1,1577 @@+{-# OPTIONS_GHC -fno-warn-unused-binds -fno-warn-missing-signatures #-}+{-# LANGUAGE CPP,MagicHash #-}+{-# LINE 1 "HOpenPGP/Tools/Lexer.x" #-}++{-# OPTIONS -w #-}+module HOpenPGP.Tools.Lexer+( alexEOF+, alexSetInput+, alexGetInput+, alexError+, alexScan+, ignorePendingBytes+, alexGetStartCode+, runAlex+, Alex(..)+, Token(..)+, AlexReturn(..)+, AlexPosn(..)+) where++import Prelude hiding (lex)+import Numeric (readHex)+import Codec.Encryption.OpenPGP.Types (TwentyOctetFingerprint(..), EightOctetKeyId(..))+++#if __GLASGOW_HASKELL__ >= 603+#include "ghcconfig.h"+#elif defined(__GLASGOW_HASKELL__)+#include "config.h"+#endif+#if __GLASGOW_HASKELL__ >= 503+import Data.Array+#else+import Array+#endif+#if __GLASGOW_HASKELL__ >= 503+import Data.Array.Base (unsafeAt)+import GHC.Exts+#else+import GlaExts+#endif+{-# 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.+++import Control.Applicative as App (Applicative (..))+++import Data.Word (Word8)+++++++++++++++++import Data.Char (ord)+import qualified Data.Bits++-- | Encode a Haskell String to a list of Word8 values, in UTF8 format.+utf8Encode :: Char -> [Word8]+utf8Encode = uncurry (:) . utf8Encode'++utf8Encode' :: Char -> (Word8, [Word8])+utf8Encode' c = case go (ord c) of+ (x, xs) -> (fromIntegral x, map fromIntegral xs)+ where+ go oc+ | oc <= 0x7f = ( oc+ , [+ ])++ | oc <= 0x7ff = ( 0xc0 + (oc `Data.Bits.shiftR` 6)+ , [0x80 + oc Data.Bits..&. 0x3f+ ])++ | oc <= 0xffff = ( 0xe0 + (oc `Data.Bits.shiftR` 12)+ , [0x80 + ((oc `Data.Bits.shiftR` 6) Data.Bits..&. 0x3f)+ , 0x80 + oc Data.Bits..&. 0x3f+ ])+ | otherwise = ( 0xf0 + (oc `Data.Bits.shiftR` 18)+ , [0x80 + ((oc `Data.Bits.shiftR` 12) Data.Bits..&. 0x3f)+ , 0x80 + ((oc `Data.Bits.shiftR` 6) Data.Bits..&. 0x3f)+ , 0x80 + oc Data.Bits..&. 0x3f+ ])++++type Byte = Word8++-- -----------------------------------------------------------------------------+-- The input type+++type AlexInput = (AlexPosn, -- current position,+ Char, -- previous char+ [Byte], -- pending bytes on current char+ String) -- current input string++ignorePendingBytes :: AlexInput -> AlexInput+ignorePendingBytes (p,c,_ps,s) = (p,c,[],s)++alexInputPrevChar :: AlexInput -> Char+alexInputPrevChar (_p,c,_bs,_s) = c++alexGetByte :: AlexInput -> Maybe (Byte,AlexInput)+alexGetByte (p,c,(b:bs),s) = Just (b,(p,c,bs,s))+alexGetByte (_,_,[],[]) = Nothing+alexGetByte (p,_,[],(c:s)) = let p' = alexMove p c+ in case utf8Encode' c of+ (b, bs) -> p' `seq` Just (b, (p', c, bs, s))++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-- -----------------------------------------------------------------------------+-- 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+alex_tab_size-((c-1) `mod` alex_tab_size))+alexMove (AlexPn a l _) '\n' = AlexPn (a+1) (l+1) 1+alexMove (AlexPn a l c) _ = AlexPn (a+1) l (c+1)+++-- -----------------------------------------------------------------------------+-- Monad (default and with ByteString input)+++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_bytes :: [Byte],++++++ alex_scd :: !Int -- the current startcode++++ }++-- Compile with -funbox-strict-fields for best results!+++runAlex :: String -> Alex a -> Either String a+runAlex input__ (Alex f)+ = case f (AlexState {alex_bytes = [],++++++ alex_pos = alexStartPos,+ alex_inp = input__,+ alex_chr = '\n',++++ alex_scd = 0}) of Left msg -> Left msg+ Right ( _, a ) -> Right a++newtype Alex a = Alex { unAlex :: AlexState -> Either String (AlexState, a) }++instance Functor Alex where+ fmap f a = Alex $ \s -> case unAlex a s of+ Left msg -> Left msg+ Right (s', a') -> Right (s', f a')++instance Applicative Alex where+ pure a = Alex $ \s -> Right (s, a)+ fa <*> a = Alex $ \s -> case unAlex fa s of+ Left msg -> Left msg+ Right (s', f) -> case unAlex a s' of+ Left msg -> Left msg+ Right (s'', b) -> Right (s'', f b)++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 = App.pure++alexGetInput :: Alex AlexInput+alexGetInput++ = Alex $ \s@AlexState{alex_pos=pos,alex_chr=c,alex_bytes=bs,alex_inp=inp__} ->+ Right (s, (pos,c,bs,inp__))++++++alexSetInput :: AlexInput -> Alex ()++alexSetInput (pos,c,bs,inp__)+ = Alex $ \s -> case s{alex_pos=pos,alex_chr=c,alex_bytes=bs,alex_inp=inp__} of++++++++ state__@(AlexState{}) -> Right (state__, ())++alexError :: String -> Alex a+alexError message = Alex $ const $ 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 ((AlexPn _ line column),_,_,_) -> alexError $ "lexical error at line " ++ (show line) ++ ", column " ++ (show column)+ AlexSkip inp__' _len -> do+ alexSetInput inp__'+ alexMonadScan++ AlexToken inp__' len action -> do++++ alexSetInput inp__'+ action (ignorePendingBytes inp__) len++-- -----------------------------------------------------------------------------+-- Useful token actions+++type AlexAction result = AlexInput -> Int -> Alex 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 :: (AlexInput -> Int -> token) -> AlexAction token++++token t input__ len = return (t input__ len)++++-- -----------------------------------------------------------------------------+-- Basic wrapper+++++++++++++++++++++++++-- -----------------------------------------------------------------------------+-- Basic wrapper, ByteString version+++++++++++++++++++++++++++++++++-- -----------------------------------------------------------------------------+-- Posn wrapper++-- Adds text positions to the basic model.++++++++++++++-- -----------------------------------------------------------------------------+-- Posn wrapper, ByteString version+++++++++++++++-- -----------------------------------------------------------------------------+-- GScan wrapper++-- For compatibility with previous versions of Alex, and because we can.+++++++++++++++alex_tab_size :: Int+alex_tab_size = 8+alex_base :: AlexAddr+alex_base = AlexA#+ "\xf8\xff\xff\xff\x8d\xff\xff\xff\xa2\xff\xff\xff\x8f\xff\xff\xff\xa3\xff\xff\xff\x96\xff\xff\xff\x98\xff\xff\xff\xa7\xff\xff\xff\x9e\xff\xff\xff\x9f\xff\xff\xff\xa0\xff\xff\xff\xd1\xff\xff\xff\xd2\xff\xff\xff\xd6\xff\xff\xff\x97\xff\xff\xff\xac\xff\xff\xff\xad\xff\xff\xff\xae\xff\xff\xff\x9d\xff\xff\xff\xb2\xff\xff\xff\xb4\xff\xff\xff\xb5\xff\xff\xff\xb6\xff\xff\xff\xe9\xff\xff\xff\xf1\xff\xff\xff\xc5\xff\xff\xff\xba\xff\xff\xff\xc0\xff\xff\xff\xb8\xff\xff\xff\xdc\xff\xff\xff\xe5\xff\xff\xff\xd3\xff\xff\xff\xd5\xff\xff\xff\xe0\xff\xff\xff\xe2\xff\xff\xff\xe8\xff\xff\xff\x0e\x00\x00\x00\xef\xff\xff\xff\xea\xff\xff\xff\xeb\xff\xff\xff\xec\xff\xff\xff\xed\xff\xff\xff\xf9\xff\xff\xff\x05\x00\x00\x00\x06\x00\x00\x00\x11\x00\x00\x00\x23\x00\x00\x00\x38\x00\x00\x00\x03\x00\x00\x00\x1f\x00\x00\x00\x07\x00\x00\x00\x10\x00\x00\x00\x08\x00\x00\x00\x15\x00\x00\x00\x0f\x00\x00\x00\x12\x00\x00\x00\x13\x00\x00\x00\x01\x00\x00\x00\x0c\x00\x00\x00\x1c\x00\x00\x00\x19\x00\x00\x00\x14\x00\x00\x00\x1a\x00\x00\x00\x1b\x00\x00\x00\x1d\x00\x00\x00\x20\x00\x00\x00\x31\x00\x00\x00\x33\x00\x00\x00\x3c\x00\x00\x00\x36\x00\x00\x00\x37\x00\x00\x00\x39\x00\x00\x00\x3a\x00\x00\x00\x5a\x00\x00\x00\x45\x00\x00\x00\x26\x00\x00\x00\x29\x00\x00\x00\x32\x00\x00\x00\x2b\x00\x00\x00\x1e\x00\x00\x00\x2c\x00\x00\x00\x2f\x00\x00\x00\x21\x00\x00\x00\x3b\x00\x00\x00\x25\x00\x00\x00\x27\x00\x00\x00\xee\x00\x00\x00\xef\x00\x00\x00\xf0\x00\x00\x00\xf1\x00\x00\x00\x3d\x00\x00\x00\xf2\x00\x00\x00\xf3\x00\x00\x00\xf4\x00\x00\x00\xf5\x00\x00\x00\x34\x00\x00\x00\x3e\x00\x00\x00\xf8\x00\x00\x00\x43\x00\x00\x00\xe6\x00\x00\x00\x44\x00\x00\x00\xcc\x00\x00\x00\x9b\x01\x00\x00\x9c\x01\x00\x00\xe9\x00\x00\x00\xf6\x00\x00\x00\x3f\x00\x00\x00\x40\x00\x00\x00\x41\x00\x00\x00\xd5\x00\x00\x00\x2a\x00\x00\x00\x2e\x00\x00\x00\x30\x00\x00\x00\xce\x00\x00\x00\xf7\x00\x00\x00\xd7\x00\x00\x00\xcb\x00\x00\x00\xda\x00\x00\x00\xdb\x00\x00\x00\xcf\x00\x00\x00\xe0\x00\x00\x00\xdc\x00\x00\x00\xe2\x00\x00\x00\xdd\x00\x00\x00\xde\x00\x00\x00\x99\x01\x00\x00\xdf\x00\x00\x00\xe1\x00\x00\x00\xe3\x00\x00\x00\xe8\x00\x00\x00\xa4\x01\x00\x00\xf9\x00\x00\x00\xe4\x00\x00\x00\xea\x00\x00\x00\xeb\x00\x00\x00\xec\x00\x00\x00\xd8\x00\x00\x00\xfa\x00\x00\x00\x28\x00\x00\x00\xed\x00\x00\x00\xfb\x00\x00\x00\x81\x01\x00\x00\x82\x01\x00\x00\xfe\x00\x00\x00\xfc\x00\x00\x00\x79\x01\x00\x00\x01\x01\x00\x00\x8c\x01\x00\x00\x8d\x01\x00\x00\x7c\x01\x00\x00\x89\x01\x00\x00\x88\x01\x00\x00\x8a\x01\x00\x00\x8b\x01\x00\x00\x8f\x01\x00\x00\x92\x01\x00\x00\x93\x01\x00\x00\x94\x01\x00\x00\x96\x01\x00\x00\x8e\x01\x00\x00\x95\x01\x00\x00\x85\x01\x00\x00\x98\x01\x00\x00\x90\x01\x00\x00\x9d\x01\x00\x00\xa0\x01\x00\x00\x91\x01\x00\x00\x97\x01\x00\x00\x9a\x01\x00\x00\x9e\x01\x00\x00\x9f\x01\x00\x00\xa7\x01\x00\x00\xac\x01\x00\x00\xad\x01\x00\x00\xaf\x01\x00\x00\xb0\x01\x00\x00\xb1\x01\x00\x00\xae\x01\x00\x00\xb7\x01\x00\x00\xb2\x01\x00\x00\xa1\x01\x00\x00\xa3\x01\x00\x00\xb3\x01\x00\x00\xb8\x01\x00\x00\xa2\x01\x00\x00\xb4\x01\x00\x00\xe7\x00\x00\x00\xb5\x01\x00\x00\xbe\x01\x00\x00\xb6\x01\x00\x00\xb9\x01\x00\x00\xba\x01\x00\x00\xbb\x01\x00\x00\xc1\x01\x00\x00\xc2\x01\x00\x00\xce\x01\x00\x00\xd1\x01\x00\x00\xbc\x01\x00\x00\xbf\x01\x00\x00\xbd\x01\x00\x00\xc0\x01\x00\x00\xc3\x01\x00\x00\xe4\x01\x00\x00\xe5\x01\x00\x00\xc4\x01\x00\x00\xc6\x01\x00\x00\xc9\x01\x00\x00\xc7\x01\x00\x00\xca\x01\x00\x00\xc8\x01\x00\x00\xd2\x01\x00\x00\xcf\x01\x00\x00\xd3\x01\x00\x00\xcb\x01\x00\x00\xd8\x01\x00\x00\xd0\x01\x00\x00\xd5\x01\x00\x00\xd6\x01\x00\x00\xd7\x01\x00\x00\xc5\x01\x00\x00\xcc\x01\x00\x00\xda\x01\x00\x00\xd4\x01\x00\x00\xdb\x01\x00\x00\xd9\x01\x00\x00\xe0\x01\x00\x00\xe1\x01\x00\x00\xe2\x01\x00\x00\xe3\x01\x00\x00\xe6\x01\x00\x00\xe7\x01\x00\x00\xea\x01\x00\x00\xeb\x01\x00\x00\xe8\x01\x00\x00\xee\x01\x00\x00\xf3\x01\x00\x00\xec\x01\x00\x00\xed\x01\x00\x00\xde\x01\x00\x00\x00\x00\x00\x00\xdc\x01\x00\x00\x88\x02\x00\x00\xef\x01\x00\x00\xdf\x01\x00\x00\xf2\x01\x00\x00\x99\x02\x00\x00\xf4\x01\x00\x00\xf5\x01\x00\x00\xf7\x01\x00\x00\xf8\x01\x00\x00\xf0\x01\x00\x00\x8a\x02\x00\x00\xf9\x01\x00\x00\x9c\x02\x00\x00\x9d\x02\x00\x00\xfb\x01\x00\x00\x00\x00\x00\x00\x55\x02\x00\x00\x9a\x02\x00\x00\x0d\x03\x00\x00\xf6\x01\x00\x00\xfc\x01\x00\x00\xfd\x01\x00\x00\x83\x03\x00\x00\x43\x03\x00\x00\x00\x00\x00\x00\x73\x02\x00\x00\x6f\x02\x00\x00\x6a\x02\x00\x00\xa1\x02\x00\x00\x32\x02\x00\x00\xfe\x01\x00\x00\xa2\x02\x00\x00\x75\x02\x00\x00\x76\x02\x00\x00\x77\x02\x00\x00\x78\x02\x00\x00\x7d\x02\x00\x00\x7a\x02\x00\x00\x7c\x02\x00\x00\x7f\x02\x00\x00\x85\x02\x00\x00\x89\x02\x00\x00\x82\x02\x00\x00\x39\x04\x00\x00\x14\x04\x00\x00\x92\x02\x00\x00\x83\x02\x00\x00\x8b\x02\x00\x00\x90\x02\x00\x00\xc5\x02\x00\x00\xc8\x02\x00\x00\xcd\x02\x00\x00\xce\x02\x00\x00\xd7\x02\x00\x00\x94\x02\x00\x00\x95\x02\x00\x00\x9e\x02\x00\x00\xe2\x02\x00\x00\xe3\x02\x00\x00\xec\x02\x00\x00\xeb\x02\x00\x00\xed\x02\x00\x00\xf4\x02\x00\x00\xe8\x02\x00\x00\xf9\x02\x00\x00\x5e\x03\x00\x00\x2c\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x21\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x09\x05\x00\x00\x20\x05\x00\x00\x46\x05\x00\x00\x5d\x05\x00\x00\x83\x05\x00\x00\x9a\x05\x00\x00\xc0\x05\x00\x00\xd7\x05\x00\x00\xfd\x05\x00\x00\x14\x06\x00\x00\x3a\x06\x00\x00\x51\x06\x00\x00\x77\x06\x00\x00\x8e\x06\x00\x00\xb4\x06\x00\x00\xcb\x06\x00\x00\xf1\x06\x00\x00\x09\x07\x00\x00\x2f\x07\x00\x00\x46\x07\x00\x00\x6c\x07\x00\x00\x83\x07\x00\x00\xa9\x07\x00\x00\xc0\x07\x00\x00\xe6\x07\x00\x00\xfd\x07\x00\x00\x23\x08\x00\x00\x3a\x08\x00\x00\x60\x08\x00\x00\x77\x08\x00\x00\x9d\x08\x00\x00\xb4\x08\x00\x00\xda\x08\x00\x00\xf1\x08\x00\x00\x17\x09\x00\x00\x2e\x09\x00\x00\x54\x09\x00\x00\x6b\x09\x00\x00\x91\x09\x00\x00\xa8\x09\x00\x00\xce\x09\x00\x00\xe5\x09\x00\x00\x0b\x0a\x00\x00\x22\x0a\x00\x00\x48\x0a\x00\x00\x5f\x0a\x00\x00\x85\x0a\x00\x00\x9c\x0a\x00\x00\xe3\x0a\x00\x00\xfa\x0a\x00\x00\x20\x0b\x00\x00\x37\x0b\x00\x00\x5d\x0b\x00\x00\x74\x0b\x00\x00\x9a\x0b\x00\x00\xb1\x0b\x00\x00\xd7\x0b\x00\x00\xee\x0b\x00\x00\x28\x0c\x00\x00\x3f\x0c\x00\x00\x76\x0c\x00\x00\x8d\x0c\x00\x00\xb3\x0c\x00\x00\xca\x0c\x00\x00\xf0\x0c\x00\x00\x16\x0d\x00\x00\x2d\x0d\x00\x00\x64\x0d\x00\x00\x7b\x0d\x00\x00\xa1\x0d\x00\x00\xb8\x0d\x00\x00\xde\x0d\x00\x00\xf5\x0d\x00\x00\x1b\x0e\x00\x00\x32\x0e\x00\x00\x58\x0e\x00\x00\x6f\x0e\x00\x00\x95\x0e\x00\x00\xac\x0e\x00\x00\xd2\x0e\x00\x00\xe9\x0e\x00\x00\x0f\x0f\x00\x00\x26\x0f\x00\x00\x4c\x0f\x00\x00\x63\x0f\x00\x00\x89\x0f\x00\x00\xa0\x0f\x00\x00\xc6\x0f\x00\x00\xdd\x0f\x00\x00\x03\x10\x00\x00\x1a\x10\x00\x00\x40\x10\x00\x00\x57\x10\x00\x00\x7d\x10\x00\x00\x94\x10\x00\x00\xcd\x10\x00\x00\xe6\x10\x00\x00\x1d\x11\x00\x00\x34\x11\x00\x00\x5a\x11\x00\x00\x71\x11\x00\x00\x97\x11\x00\x00\xae\x11\x00\x00\xd4\x11\x00\x00\xeb\x11\x00\x00\x11\x12\x00\x00\x28\x12\x00\x00\x4e\x12\x00\x00\x65\x12\x00\x00\x8b\x12\x00\x00\xa2\x12\x00\x00\xc8\x12\x00\x00\xdf\x12\x00\x00\x05\x13\x00\x00\x1c\x13\x00\x00\x42\x13\x00\x00\x59\x13\x00\x00\x7f\x13\x00\x00\x96\x13\x00\x00\xbc\x13\x00\x00\xd3\x13\x00\x00\xf9\x13\x00\x00\x10\x14\x00\x00\x36\x14\x00\x00\x4d\x14\x00\x00\x73\x14\x00\x00\x8a\x14\x00\x00\xb0\x14\x00\x00\xc7\x14\x00\x00\xed\x14\x00\x00\x04\x15\x00\x00\x2a\x15\x00\x00\x41\x15\x00\x00\x67\x15\x00\x00\x7e\x15\x00\x00\x71\x15\x00\x00"#++alex_table :: AlexAddr+alex_table = AlexA#+ "\x00\x00\x32\x01\x32\x01\x32\x01\x32\x01\x32\x01\x36\x01\x39\x01\x3b\x01\x40\x01\x3c\x01\x45\x01\x48\x01\x49\x01\x4a\x01\x4b\x01\x52\x01\x54\x01\x4c\x01\x4d\x01\x59\x01\x5a\x01\x5b\x01\x4f\x01\x32\x01\x5c\x01\x1c\x01\x5d\x01\x5e\x01\x5f\x01\x60\x01\x68\x01\x43\x01\x44\x01\x61\x01\x2e\x00\x0e\x01\x6d\x01\x2f\x00\x30\x01\x7e\x01\x7d\x01\x7d\x01\x7d\x01\x7d\x01\x7d\x01\x7d\x01\x7d\x01\x7d\x01\x7d\x01\x4c\x01\x4d\x01\x41\x01\x3f\x01\x42\x01\x4f\x01\x67\x01\xab\x01\xa7\x01\xa9\x01\xcc\x01\x9c\x01\xab\x01\xa0\x00\x85\x00\x03\x00\x2e\x01\xb7\x00\x2d\x01\x10\x01\x04\x00\x08\x00\x66\x00\x09\x00\x24\x00\x03\x01\xab\x00\x4a\x00\x8b\x00\x0a\x00\x2c\x01\x12\x00\x18\x00\x10\x00\x11\x00\x22\x01\x13\x00\xd6\x00\x25\x01\x33\x01\xa7\x01\xa8\x01\xcc\x01\x9d\x01\xaa\x01\xa0\x00\x85\x00\x0b\x00\x14\x00\x62\x00\x73\x00\x10\x01\x1c\x00\x2f\x01\x67\x00\x23\x01\x24\x00\x02\x01\x1e\x00\x4a\x00\x15\x00\x16\x00\x20\x01\xae\x00\x18\x00\x1d\x00\x1b\x00\x1b\x01\x1a\x01\xd6\x00\x19\x01\x25\x00\x18\x01\x1f\x00\x20\x00\x17\x01\x16\x01\x14\x01\x13\x01\x0b\x00\x12\x01\x15\x01\x26\x00\x11\x01\x27\x00\x28\x00\x1e\x01\x29\x00\x2a\x00\x0f\x01\x2b\x00\x2c\x00\x0d\x01\x0c\x01\x0b\x01\xae\x00\x4b\x00\x30\x00\x0a\x01\x32\x00\x35\x00\x31\x00\x37\x00\xf9\x00\x38\x00\x42\x00\x36\x00\xf8\x00\x3a\x00\xf7\x00\xfa\x00\x7d\x00\x5c\x00\x5b\x00\x26\x00\x43\x00\x27\x00\x28\x00\x4f\x00\x29\x00\x2a\x00\xfd\x00\x2b\x00\x2c\x00\x0d\x01\x07\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x06\x01\x06\x01\x05\x01\x04\x01\xfe\x00\x58\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x44\x00\x5e\x00\xf6\x00\xf4\x00\x5a\x00\xf3\x00\xed\x00\xec\x00\xea\x00\xeb\x00\xe9\x00\xf5\x00\x6b\x00\xe8\x00\xe7\x00\x6e\x00\x71\x00\x6f\x00\x77\x00\x70\x00\x7a\x00\x78\x00\x06\x01\x06\x01\x05\x01\x04\x01\xe4\x00\x58\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x44\x00\x83\x00\xe1\x00\xbe\x00\x5a\x00\x74\x00\xde\x00\xdf\x00\xdd\x00\xda\x00\xe0\x00\xf5\x00\x75\x00\x51\x00\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x56\x00\x56\x00\xe6\x00\x72\x00\x84\x00\x86\x00\x87\x00\xd9\x00\xd8\x00\xd7\x00\x8c\x00\xd5\x00\x92\x00\xd4\x00\xd3\x00\x93\x00\x94\x00\xd1\x00\x97\x00\x95\x00\xcf\x00\xcd\x00\x9e\x00\xd0\x00\x9d\x00\x9a\x00\xce\x00\xce\x00\xad\x00\xbf\x00\xa2\x00\xb3\x00\x56\x00\x57\x00\xe6\x00\x72\x00\xa1\x00\xa1\x00\x9b\x00\xbb\x00\xbb\x00\x9c\x00\xa6\x00\xa8\x00\xa9\x00\xcb\x00\xc9\x00\xc8\x00\xc7\x00\xca\x00\xc1\x00\xac\x00\xb2\x00\xc5\x00\xc4\x00\xb5\x00\xb9\x00\xbd\x00\xb0\x00\xb8\x00\xad\x00\xae\x00\xb1\x00\xb3\x00\x99\x00\x98\x00\x82\x00\x7c\x00\xba\x00\xb6\x00\xb4\x00\x00\x00\xaa\x00\xc3\x00\x7b\x00\xa7\x00\x96\x00\xa5\x00\x26\x01\x90\x00\xa4\x00\xaf\x00\x8e\x00\xa3\x00\xd2\x00\x91\x00\x8d\x00\xdb\x00\x8a\x00\x89\x00\xb0\x00\xdc\x00\xe2\x00\xae\x00\x81\x00\x6a\x00\x99\x00\x98\x00\x82\x00\x80\x00\x7f\x00\x7e\x00\x79\x00\xe5\x00\x6c\x00\x6d\x00\xee\x00\xf1\x00\x53\x00\x4d\x00\x5d\x00\x61\x00\xf2\x00\xaf\x00\x60\x00\x5f\x00\xfb\x00\x59\x00\x3d\x00\x34\x00\x55\x00\x54\x00\x4c\x00\x4e\x00\x23\x00\x47\x00\x48\x00\x46\x00\x45\x00\x3b\x00\x22\x00\x21\x00\x24\x01\x01\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x50\x00\x49\x00\x3c\x00\xc6\x00\xc6\x00\x1f\x01\x2d\x00\x21\x01\x1a\x00\x19\x00\x17\x00\x27\x01\x28\x01\x29\x01\x2a\x01\x0f\x00\x68\x00\x68\x00\x0e\x00\x07\x00\x39\x00\x39\x00\x2b\x01\x06\x00\x01\x00\x05\x00\x6c\x01\x6b\x01\x69\x01\x66\x01\x65\x01\x6a\x01\x50\x00\x49\x00\x3c\x00\xc6\x00\xc6\x00\x64\x01\x2d\x00\x65\x00\x63\x01\x19\x00\x17\x00\x62\x01\x58\x01\x57\x01\xbc\x00\xbc\x00\x68\x00\x68\x00\x8f\x00\xff\x00\x39\x00\x39\x00\x56\x01\x76\x00\x08\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2d\x00\x55\x01\x53\x01\x4e\x01\x47\x01\x3d\x01\x46\x01\x37\x01\x34\x01\x3e\x01\x38\x01\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x3a\x01\x32\x01\x32\x01\x32\x01\x32\x01\x32\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x35\x01\x00\x00\x00\x00\x2d\x00\x64\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x32\x01\x00\x00\x00\x00\x8f\x00\xc2\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xd7\x01\xd7\x01\xd7\x01\xd7\x01\xd7\x01\xd7\x01\xd7\x01\xd7\x01\xd7\x01\xd7\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2c\x00\x00\x00\xd7\x01\xd7\x01\xd7\x01\xd7\x01\xd7\x01\xd7\x01\xf5\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x98\x00\x00\x00\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\x2c\x00\x00\x00\xd7\x01\xd7\x01\xd7\x01\xd7\x01\xd7\x01\xd7\x01\xaf\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x98\x00\x00\x00\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x31\x01\xaf\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x07\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x08\x01\x51\x00\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x01\x01\x63\x00\xef\x00\xef\x00\xef\x00\xf0\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x9e\x01\x9e\x01\x9e\x01\x9e\x01\x9e\x01\x9e\x01\x9e\x01\x9e\x01\x9e\x01\x9e\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9e\x01\x9e\x01\x9e\x01\x9e\x01\x9e\x01\x9e\x01\x74\x01\x74\x01\x74\x01\x74\x01\x74\x01\x74\x01\x74\x01\x74\x01\x74\x01\x74\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9e\x01\x9e\x01\x9e\x01\x9e\x01\x9e\x01\x9e\x01\x00\x00\x00\x00\x00\x00\x9e\x01\x9e\x01\x9e\x01\x9e\x01\x9e\x01\x9e\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xce\x01\xce\x01\xce\x01\xce\x01\xce\x01\xce\x01\xce\x01\xce\x01\xce\x01\xce\x01\x00\x00\x9e\x01\x9e\x01\x9e\x01\x9e\x01\x9e\x01\x9e\x01\xce\x01\xce\x01\xce\x01\xce\x01\xce\x01\xce\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x00\x00\x00\x00\x00\x00\xce\x01\xce\x01\xce\x01\xce\x01\xce\x01\xce\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x75\x01\x75\x01\x75\x01\x75\x01\x75\x01\x75\x01\x75\x01\x75\x01\x75\x01\x75\x01\x00\x00\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\xcf\x01\xcf\x01\xcf\x01\xcf\x01\xcf\x01\xcf\x01\xcf\x01\xcf\x01\xcf\x01\xcf\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xcf\x01\xcf\x01\xcf\x01\xcf\x01\xcf\x01\xcf\x01\x00\x00\x00\x00\x00\x00\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x74\x01\x74\x01\x74\x01\x74\x01\x74\x01\x74\x01\x74\x01\x74\x01\x74\x01\x74\x01\x00\x00\xcf\x01\xcf\x01\xcf\x01\xcf\x01\xcf\x01\xcf\x01\x9e\x01\x9e\x01\x9e\x01\x9e\x01\x9e\x01\x9e\x01\x76\x01\x76\x01\x76\x01\x76\x01\x76\x01\x76\x01\x76\x01\x76\x01\x76\x01\x76\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa0\x01\xa0\x01\xa0\x01\xa0\x01\xa0\x01\xa0\x01\x00\x00\x00\x00\x00\x00\x9e\x01\x9e\x01\x9e\x01\x9e\x01\x9e\x01\x9e\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x77\x01\x77\x01\x77\x01\x77\x01\x77\x01\x77\x01\x77\x01\x77\x01\x77\x01\x77\x01\x00\x00\xa0\x01\xa0\x01\xa0\x01\xa0\x01\xa0\x01\xa0\x01\xa1\x01\xa1\x01\xa1\x01\xa1\x01\xa1\x01\xa1\x01\x78\x01\x78\x01\x78\x01\x78\x01\x78\x01\x78\x01\x78\x01\x78\x01\x78\x01\x78\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa2\x01\xa2\x01\xa2\x01\xa2\x01\xa2\x01\xa2\x01\x00\x00\x00\x00\x00\x00\xa1\x01\xa1\x01\xa1\x01\xa1\x01\xa1\x01\xa1\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x79\x01\x79\x01\x79\x01\x79\x01\x79\x01\x79\x01\x79\x01\x79\x01\x79\x01\x79\x01\x00\x00\xa2\x01\xa2\x01\xa2\x01\xa2\x01\xa2\x01\xa2\x01\xa3\x01\xa3\x01\xa3\x01\xa3\x01\xa3\x01\xa3\x01\x7a\x01\x7a\x01\x7a\x01\x7a\x01\x7a\x01\x7a\x01\x7a\x01\x7a\x01\x7a\x01\x7a\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa4\x01\xa4\x01\xa4\x01\xa4\x01\xa4\x01\xa4\x01\x00\x00\x00\x00\x00\x00\xa3\x01\xa3\x01\xa3\x01\xa3\x01\xa3\x01\xa3\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7b\x01\x7b\x01\x7b\x01\x7b\x01\x7b\x01\x7b\x01\x7b\x01\x7b\x01\x7b\x01\x7b\x01\x00\x00\xa4\x01\xa4\x01\xa4\x01\xa4\x01\xa4\x01\xa4\x01\xa5\x01\xa5\x01\xa5\x01\xa5\x01\xa5\x01\xa5\x01\x7c\x01\x7c\x01\x7c\x01\x7c\x01\x7c\x01\x7c\x01\x7c\x01\x7c\x01\x7c\x01\x7c\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa6\x01\xa6\x01\xa6\x01\xa6\x01\xa6\x01\xa6\x01\x00\x00\x00\x00\x00\x00\xa5\x01\xa5\x01\xa5\x01\xa5\x01\xa5\x01\xa5\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x01\x7f\x01\x7f\x01\x7f\x01\x7f\x01\x7f\x01\x7f\x01\x7f\x01\x7f\x01\x7f\x01\x00\x00\xa6\x01\xa6\x01\xa6\x01\xa6\x01\xa6\x01\xa6\x01\xac\x01\xac\x01\xac\x01\xac\x01\xac\x01\xac\x01\x80\x01\x80\x01\x80\x01\x80\x01\x80\x01\x80\x01\x80\x01\x80\x01\x80\x01\x80\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\x00\x00\x00\x00\x00\x00\xac\x01\xac\x01\xac\x01\xac\x01\xac\x01\xac\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x01\x80\x01\x80\x01\x80\x01\x80\x01\x80\x01\x80\x01\x80\x01\x80\x01\x80\x01\x00\x00\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\x00\x00\x81\x01\x81\x01\x81\x01\x81\x01\x81\x01\x81\x01\x81\x01\x81\x01\x81\x01\x81\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb0\x01\xb0\x01\xb0\x01\xb0\x01\xb0\x01\xb0\x01\x00\x00\x00\x00\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x82\x01\x82\x01\x82\x01\x82\x01\x82\x01\x82\x01\x82\x01\x82\x01\x82\x01\x82\x01\x1d\x01\xb0\x01\xb0\x01\xb0\x01\xb0\x01\xb0\x01\xb0\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb2\x01\xb2\x01\xb2\x01\xb2\x01\xb2\x01\xb2\x01\x00\x00\x00\x00\x00\x00\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x00\x00\xb2\x01\xb2\x01\xb2\x01\xb2\x01\xb2\x01\xb2\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\x85\x01\x85\x01\x85\x01\x85\x01\x85\x01\x85\x01\x85\x01\x85\x01\x85\x01\x85\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb4\x01\xb4\x01\xb4\x01\xb4\x01\xb4\x01\xb4\x01\x00\x00\x00\x00\x00\x00\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x86\x01\x86\x01\x86\x01\x86\x01\x86\x01\x86\x01\x86\x01\x86\x01\x86\x01\x86\x01\x00\x00\xb4\x01\xb4\x01\xb4\x01\xb4\x01\xb4\x01\xb4\x01\xb5\x01\xb5\x01\xb5\x01\xb5\x01\xb5\x01\xb5\x01\x87\x01\x87\x01\x87\x01\x87\x01\x87\x01\x87\x01\x87\x01\x87\x01\x87\x01\x87\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb6\x01\xb6\x01\xb6\x01\xb6\x01\xb6\x01\xb6\x01\x00\x00\x00\x00\x00\x00\xb5\x01\xb5\x01\xb5\x01\xb5\x01\xb5\x01\xb5\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x88\x01\x88\x01\x88\x01\x88\x01\x88\x01\x88\x01\x88\x01\x88\x01\x88\x01\x88\x01\x00\x00\xb6\x01\xb6\x01\xb6\x01\xb6\x01\xb6\x01\xb6\x01\xb7\x01\xb7\x01\xb7\x01\xb7\x01\xb7\x01\xb7\x01\x89\x01\x89\x01\x89\x01\x89\x01\x89\x01\x89\x01\x89\x01\x89\x01\x89\x01\x89\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb8\x01\xb8\x01\xb8\x01\xb8\x01\xb8\x01\xb8\x01\x00\x00\x00\x00\x00\x00\xb7\x01\xb7\x01\xb7\x01\xb7\x01\xb7\x01\xb7\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x00\x00\xb8\x01\xb8\x01\xb8\x01\xb8\x01\xb8\x01\xb8\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\x8b\x01\x8b\x01\x8b\x01\x8b\x01\x8b\x01\x8b\x01\x8b\x01\x8b\x01\x8b\x01\x8b\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xba\x01\xba\x01\xba\x01\xba\x01\xba\x01\xba\x01\x00\x00\x00\x00\x00\x00\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8c\x01\x8c\x01\x8c\x01\x8c\x01\x8c\x01\x8c\x01\x8c\x01\x8c\x01\x8c\x01\x8c\x01\x00\x00\xba\x01\xba\x01\xba\x01\xba\x01\xba\x01\xba\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\x00\x00\x00\x00\x00\x00\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x00\x00\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\x00\x00\x00\x00\x00\x00\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x90\x01\x90\x01\x90\x01\x90\x01\x90\x01\x90\x01\x90\x01\x90\x01\x90\x01\x90\x01\x00\x00\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc0\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x01\x00\x00\x00\x00\x00\x00\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x92\x01\x92\x01\x92\x01\x92\x01\x92\x01\x92\x01\x92\x01\x92\x01\x92\x01\x92\x01\x00\x00\xc0\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x01\xc1\x01\xc1\x01\xc1\x01\xc1\x01\xc1\x01\xc1\x01\x93\x01\x93\x01\x93\x01\x93\x01\x93\x01\x93\x01\x93\x01\x93\x01\x93\x01\x93\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc2\x01\xc2\x01\xc2\x01\xc2\x01\xc2\x01\xc2\x01\x00\x00\x00\x00\x00\x00\xc1\x01\xc1\x01\xc1\x01\xc1\x01\xc1\x01\xc1\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x94\x01\x94\x01\x94\x01\x94\x01\x94\x01\x94\x01\x94\x01\x94\x01\x94\x01\x94\x01\x00\x00\xc2\x01\xc2\x01\xc2\x01\xc2\x01\xc2\x01\xc2\x01\xc3\x01\xc3\x01\xc3\x01\xc3\x01\xc3\x01\xc3\x01\x95\x01\x95\x01\x95\x01\x95\x01\x95\x01\x95\x01\x95\x01\x95\x01\x95\x01\x95\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc4\x01\xc4\x01\xc4\x01\xc4\x01\xc4\x01\xc4\x01\x00\x00\x00\x00\x00\x00\xc3\x01\xc3\x01\xc3\x01\xc3\x01\xc3\x01\xc3\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x96\x01\x96\x01\x96\x01\x96\x01\x96\x01\x96\x01\x96\x01\x96\x01\x96\x01\x96\x01\x00\x00\xc4\x01\xc4\x01\xc4\x01\xc4\x01\xc4\x01\xc4\x01\xc5\x01\xc5\x01\xc5\x01\xc5\x01\xc5\x01\xc5\x01\x97\x01\x97\x01\x97\x01\x97\x01\x97\x01\x97\x01\x97\x01\x97\x01\x97\x01\x97\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc6\x01\xc6\x01\xc6\x01\xc6\x01\xc6\x01\xc6\x01\x00\x00\x00\x00\x00\x00\xc5\x01\xc5\x01\xc5\x01\xc5\x01\xc5\x01\xc5\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x98\x01\x98\x01\x98\x01\x98\x01\x98\x01\x98\x01\x98\x01\x98\x01\x98\x01\x98\x01\x00\x00\xc6\x01\xc6\x01\xc6\x01\xc6\x01\xc6\x01\xc6\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\x99\x01\x99\x01\x99\x01\x99\x01\x99\x01\x99\x01\x99\x01\x99\x01\x99\x01\x99\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc8\x01\xc8\x01\xc8\x01\xc8\x01\xc8\x01\xc8\x01\x00\x00\x00\x00\x00\x00\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9a\x01\x9a\x01\x9a\x01\x9a\x01\x9a\x01\x9a\x01\x9a\x01\x9a\x01\x9a\x01\x9a\x01\x00\x00\xc8\x01\xc8\x01\xc8\x01\xc8\x01\xc8\x01\xc8\x01\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\x00\x00\x00\x00\x00\x00\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x01\x72\x01\x72\x01\x72\x01\x72\x01\x72\x01\x72\x01\x72\x01\x72\x01\x72\x01\x00\x00\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\x71\x01\x71\x01\x71\x01\x71\x01\x71\x01\x71\x01\x6f\x01\x6f\x01\x6f\x01\x6f\x01\x6f\x01\x6f\x01\x6f\x01\x6f\x01\x6f\x01\x6f\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6e\x01\x6e\x01\x6e\x01\x6e\x01\x6e\x01\x6e\x01\x00\x00\x00\x00\x00\x00\x71\x01\x71\x01\x71\x01\x71\x01\x71\x01\x71\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\x00\x00\x6e\x01\x6e\x01\x6e\x01\x6e\x01\x6e\x01\x6e\x01\xae\x01\xae\x01\xc9\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xae\x01\xae\x01\xc9\x01\xae\x01\xae\x01\xae\x01\x00\x00\x00\x00\x00\x00\xae\x01\xae\x01\xc9\x01\xae\x01\xae\x01\xae\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x69\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xae\x01\xae\x01\xc9\x01\xae\x01\xae\x01\xae\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x69\x00\x00\x00\x00\x00\x00\x00\x00\x00\x52\x00\x00\x00\x00\x00\x00\x00\x00\x00\x33\x00\x9e\x01\x9e\x01\x9e\x01\x9e\x01\x9e\x01\x9e\x01\x9e\x01\x9e\x01\x9e\x01\x9e\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9e\x01\x9e\x01\x9e\x01\x9e\x01\x9e\x01\x9e\x01\xa0\x01\xa0\x01\xa0\x01\xa0\x01\xa0\x01\xa0\x01\xa0\x01\xa0\x01\xa0\x01\xa0\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa0\x01\xa0\x01\xa0\x01\xa0\x01\xa0\x01\xa0\x01\x00\x00\x00\x00\x00\x00\x9e\x01\x9e\x01\x9e\x01\x9e\x01\x9e\x01\x9e\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa1\x01\xa1\x01\xa1\x01\xa1\x01\xa1\x01\xa1\x01\xa1\x01\xa1\x01\xa1\x01\xa1\x01\x00\x00\xa0\x01\xa0\x01\xa0\x01\xa0\x01\xa0\x01\xa0\x01\xa1\x01\xa1\x01\xa1\x01\xa1\x01\xa1\x01\xa1\x01\xa2\x01\xa2\x01\xa2\x01\xa2\x01\xa2\x01\xa2\x01\xa2\x01\xa2\x01\xa2\x01\xa2\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa2\x01\xa2\x01\xa2\x01\xa2\x01\xa2\x01\xa2\x01\x00\x00\x00\x00\x00\x00\xa1\x01\xa1\x01\xa1\x01\xa1\x01\xa1\x01\xa1\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa3\x01\xa3\x01\xa3\x01\xa3\x01\xa3\x01\xa3\x01\xa3\x01\xa3\x01\xa3\x01\xa3\x01\x00\x00\xa2\x01\xa2\x01\xa2\x01\xa2\x01\xa2\x01\xa2\x01\xa3\x01\xa3\x01\xa3\x01\xa3\x01\xa3\x01\xa3\x01\xa4\x01\xa4\x01\xa4\x01\xa4\x01\xa4\x01\xa4\x01\xa4\x01\xa4\x01\xa4\x01\xa4\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa4\x01\xa4\x01\xa4\x01\xa4\x01\xa4\x01\xa4\x01\x00\x00\x00\x00\x00\x00\xa3\x01\xa3\x01\xa3\x01\xa3\x01\xa3\x01\xa3\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa5\x01\xa5\x01\xa5\x01\xa5\x01\xa5\x01\xa5\x01\xa5\x01\xa5\x01\xa5\x01\xa5\x01\x00\x00\xa4\x01\xa4\x01\xa4\x01\xa4\x01\xa4\x01\xa4\x01\xa5\x01\xa5\x01\xa5\x01\xa5\x01\xa5\x01\xa5\x01\xa6\x01\xa6\x01\xa6\x01\xa6\x01\xa6\x01\xa6\x01\xa6\x01\xa6\x01\xa6\x01\xa6\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa6\x01\xa6\x01\xa6\x01\xa6\x01\xa6\x01\xa6\x01\x00\x00\x00\x00\x00\x00\xa5\x01\xa5\x01\xa5\x01\xa5\x01\xa5\x01\xa5\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xac\x01\xac\x01\xac\x01\xac\x01\xac\x01\xac\x01\xac\x01\xac\x01\xac\x01\xac\x01\x00\x00\xa6\x01\xa6\x01\xa6\x01\xa6\x01\xa6\x01\xa6\x01\xac\x01\xac\x01\xac\x01\xac\x01\xac\x01\xac\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\x00\x00\x00\x00\x00\x00\xac\x01\xac\x01\xac\x01\xac\x01\xac\x01\xac\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\x00\x00\x00\x00\xfc\x00\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\x00\x00\x00\x00\x00\x00\xad\x01\xae\x01\xae\x01\xae\x01\xaf\x01\xae\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe3\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xad\x01\xae\x01\xae\x01\xae\x01\xaf\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\x00\x00\x00\x00\x00\x00\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\x00\x00\x00\x00\xcc\x00\x00\x00\x00\x00\x00\x00\xb0\x01\xb0\x01\xb0\x01\xb0\x01\xb0\x01\xb0\x01\xb0\x01\xb0\x01\xb0\x01\xb0\x01\x00\x00\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xb0\x01\xb0\x01\xb0\x01\xb0\x01\xb0\x01\xb0\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\x00\x00\x00\x00\x00\x00\xb0\x01\xb0\x01\xb0\x01\xb0\x01\xb0\x01\xb0\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\x00\x00\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\x00\x00\x9f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x88\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\x00\x00\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb2\x01\xb2\x01\xb2\x01\xb2\x01\xb2\x01\xb2\x01\xb2\x01\xb2\x01\xb2\x01\xb2\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb2\x01\xb2\x01\xb2\x01\xb2\x01\xb2\x01\xb2\x01\x00\x00\x00\x00\x00\x00\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb2\x01\xb2\x01\xb2\x01\xb2\x01\xb2\x01\xb2\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb4\x01\xb4\x01\xb4\x01\xb4\x01\xb4\x01\xb4\x01\xb4\x01\xb4\x01\xb4\x01\xb4\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb4\x01\xb4\x01\xb4\x01\xb4\x01\xb4\x01\xb4\x01\x00\x00\x00\x00\x00\x00\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb5\x01\xb5\x01\xb5\x01\xb5\x01\xb5\x01\xb5\x01\xb5\x01\xb5\x01\xb5\x01\xb5\x01\x00\x00\xb4\x01\xb4\x01\xb4\x01\xb4\x01\xb4\x01\xb4\x01\xb5\x01\xb5\x01\xb5\x01\xb5\x01\xb5\x01\xb5\x01\xb6\x01\xb6\x01\xb6\x01\xb6\x01\xb6\x01\xb6\x01\xb6\x01\xb6\x01\xb6\x01\xb6\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb6\x01\xb6\x01\xb6\x01\xb6\x01\xb6\x01\xb6\x01\x00\x00\x00\x00\x00\x00\xb5\x01\xb5\x01\xb5\x01\xb5\x01\xb5\x01\xb5\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb7\x01\xb7\x01\xb7\x01\xb7\x01\xb7\x01\xb7\x01\xb7\x01\xb7\x01\xb7\x01\xb7\x01\x00\x00\xb6\x01\xb6\x01\xb6\x01\xb6\x01\xb6\x01\xb6\x01\xb7\x01\xb7\x01\xb7\x01\xb7\x01\xb7\x01\xb7\x01\xb8\x01\xb8\x01\xb8\x01\xb8\x01\xb8\x01\xb8\x01\xb8\x01\xb8\x01\xb8\x01\xb8\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb8\x01\xb8\x01\xb8\x01\xb8\x01\xb8\x01\xb8\x01\x00\x00\x00\x00\x00\x00\xb7\x01\xb7\x01\xb7\x01\xb7\x01\xb7\x01\xb7\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\x00\x00\xb8\x01\xb8\x01\xb8\x01\xb8\x01\xb8\x01\xb8\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xba\x01\xba\x01\xba\x01\xba\x01\xba\x01\xba\x01\xba\x01\xba\x01\xba\x01\xba\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xba\x01\xba\x01\xba\x01\xba\x01\xba\x01\xba\x01\x00\x00\x00\x00\x00\x00\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\x00\x00\xba\x01\xba\x01\xba\x01\xba\x01\xba\x01\xba\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\x00\x00\x00\x00\x00\x00\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\x00\x00\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\x00\x00\x00\x00\x00\x00\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\x00\x00\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc0\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x01\x00\x00\x00\x00\x00\x00\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x01\xc1\x01\xc1\x01\xc1\x01\xc1\x01\xc1\x01\xc1\x01\xc1\x01\xc1\x01\xc1\x01\x00\x00\xc0\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x01\xc1\x01\xc1\x01\xc1\x01\xc1\x01\xc1\x01\xc1\x01\xc2\x01\xc2\x01\xc2\x01\xc2\x01\xc2\x01\xc2\x01\xc2\x01\xc2\x01\xc2\x01\xc2\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc2\x01\xc2\x01\xc2\x01\xc2\x01\xc2\x01\xc2\x01\x00\x00\x00\x00\x00\x00\xc1\x01\xc1\x01\xc1\x01\xc1\x01\xc1\x01\xc1\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc3\x01\xc3\x01\xc3\x01\xc3\x01\xc3\x01\xc3\x01\xc3\x01\xc3\x01\xc3\x01\xc3\x01\x00\x00\xc2\x01\xc2\x01\xc2\x01\xc2\x01\xc2\x01\xc2\x01\xc3\x01\xc3\x01\xc3\x01\xc3\x01\xc3\x01\xc3\x01\xc4\x01\xc4\x01\xc4\x01\xc4\x01\xc4\x01\xc4\x01\xc4\x01\xc4\x01\xc4\x01\xc4\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc4\x01\xc4\x01\xc4\x01\xc4\x01\xc4\x01\xc4\x01\x00\x00\x00\x00\x00\x00\xc3\x01\xc3\x01\xc3\x01\xc3\x01\xc3\x01\xc3\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc5\x01\xc5\x01\xc5\x01\xc5\x01\xc5\x01\xc5\x01\xc5\x01\xc5\x01\xc5\x01\xc5\x01\x00\x00\xc4\x01\xc4\x01\xc4\x01\xc4\x01\xc4\x01\xc4\x01\xc5\x01\xc5\x01\xc5\x01\xc5\x01\xc5\x01\xc5\x01\xc6\x01\xc6\x01\xc6\x01\xc6\x01\xc6\x01\xc6\x01\xc6\x01\xc6\x01\xc6\x01\xc6\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc6\x01\xc6\x01\xc6\x01\xc6\x01\xc6\x01\xc6\x01\x00\x00\x00\x00\x00\x00\xc5\x01\xc5\x01\xc5\x01\xc5\x01\xc5\x01\xc5\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\x00\x00\xc6\x01\xc6\x01\xc6\x01\xc6\x01\xc6\x01\xc6\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc8\x01\xc8\x01\xc8\x01\xc8\x01\xc8\x01\xc8\x01\xc8\x01\xc8\x01\xc8\x01\xc8\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc8\x01\xc8\x01\xc8\x01\xc8\x01\xc8\x01\xc8\x01\x00\x00\x00\x00\x00\x00\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\x00\x00\xc8\x01\xc8\x01\xc8\x01\xc8\x01\xc8\x01\xc8\x01\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\x00\x00\x00\x00\x00\x00\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\x00\x00\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xb1\x01\xb1\x01\xb1\x01\xcd\x01\xb1\x01\xb1\x01\x71\x01\x71\x01\x71\x01\x71\x01\x71\x01\x71\x01\x71\x01\x71\x01\x71\x01\x71\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x71\x01\x71\x01\x71\x01\x71\x01\x71\x01\x71\x01\x00\x00\x00\x00\x00\x00\xb1\x01\xb1\x01\xb1\x01\xcd\x01\xb1\x01\xb1\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6e\x01\x6e\x01\x6e\x01\x6e\x01\x6e\x01\x6e\x01\x6e\x01\x6e\x01\x6e\x01\x6e\x01\x00\x00\x71\x01\x71\x01\x71\x01\x71\x01\x71\x01\x71\x01\x6e\x01\x6e\x01\x6e\x01\x6e\x01\x6e\x01\x6e\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\x00\x00\x51\x01\x00\x00\x6e\x01\x6e\x01\x6e\x01\x6e\x01\x6e\x01\x6e\x01\x00\x00\x00\x00\x00\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\x00\x00\x51\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\x00\x00\x50\x01\xce\x01\xce\x01\xce\x01\xce\x01\xce\x01\xce\x01\xce\x01\xce\x01\xce\x01\xce\x01\x0d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xce\x01\xce\x01\xce\x01\xce\x01\xce\x01\xce\x01\x00\x00\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\x00\x00\x50\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xce\x01\xce\x01\xce\x01\xce\x01\xce\x01\xce\x01\xd0\x01\xd0\x01\xd0\x01\xd0\x01\xd0\x01\xd0\x01\xd0\x01\xd0\x01\xd0\x01\xd0\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd0\x01\xd0\x01\xd0\x01\xd0\x01\xd0\x01\xd0\x01\xd1\x01\xd1\x01\xd1\x01\xd1\x01\xd1\x01\xd1\x01\xd1\x01\xd1\x01\xd1\x01\xd1\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd1\x01\xd1\x01\xd1\x01\xd1\x01\xd1\x01\xd1\x01\x00\x00\x00\x00\x00\x00\xd0\x01\xd0\x01\xd0\x01\xd0\x01\xd0\x01\xd0\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\x00\x00\xd1\x01\xd1\x01\xd1\x01\xd1\x01\xd1\x01\xd1\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd3\x01\xd3\x01\xd3\x01\xd3\x01\xd3\x01\xd3\x01\xd3\x01\xd3\x01\xd3\x01\xd3\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd3\x01\xd3\x01\xd3\x01\xd3\x01\xd3\x01\xd3\x01\x00\x00\x00\x00\x00\x00\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd4\x01\xd4\x01\xd4\x01\xd4\x01\xd4\x01\xd4\x01\xd4\x01\xd4\x01\xd4\x01\xd4\x01\x00\x00\xd3\x01\xd3\x01\xd3\x01\xd3\x01\xd3\x01\xd3\x01\xd4\x01\xd4\x01\xd4\x01\xd4\x01\xd4\x01\xd4\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\x00\x00\x00\x00\x00\x00\xd4\x01\xd4\x01\xd4\x01\xd4\x01\xd4\x01\xd4\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd6\x01\xd6\x01\xd6\x01\xd6\x01\xd6\x01\xd6\x01\xd6\x01\xd6\x01\xd6\x01\xd6\x01\x00\x00\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd6\x01\xd6\x01\xd6\x01\xd6\x01\xd6\x01\xd6\x01\xd8\x01\xd8\x01\xd8\x01\xd8\x01\xd8\x01\xd8\x01\xd8\x01\xd8\x01\xd8\x01\xd8\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd8\x01\xd8\x01\xd8\x01\xd8\x01\xd8\x01\xd8\x01\x00\x00\x00\x00\x00\x00\xd6\x01\xd6\x01\xd6\x01\xd6\x01\xd6\x01\xd6\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd9\x01\xd9\x01\xd9\x01\xd9\x01\xd9\x01\xd9\x01\xd9\x01\xd9\x01\xd9\x01\xd9\x01\x00\x00\xd8\x01\xd8\x01\xd8\x01\xd8\x01\xd8\x01\xd8\x01\xd9\x01\xd9\x01\xd9\x01\xd9\x01\xd9\x01\xd9\x01\xda\x01\xda\x01\xda\x01\xda\x01\xda\x01\xda\x01\xda\x01\xda\x01\xda\x01\xda\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xda\x01\xda\x01\xda\x01\xda\x01\xda\x01\xda\x01\x00\x00\x00\x00\x00\x00\xd9\x01\xd9\x01\xd9\x01\xd9\x01\xd9\x01\xd9\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xda\x01\xda\x01\xda\x01\xda\x01\xda\x01\xda\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdc\x01\xdc\x01\xdc\x01\xdc\x01\xdc\x01\xdc\x01\xdc\x01\xdc\x01\xdc\x01\xdc\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdc\x01\xdc\x01\xdc\x01\xdc\x01\xdc\x01\xdc\x01\x00\x00\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdd\x01\xdd\x01\xdd\x01\xdd\x01\xdd\x01\xdd\x01\xdd\x01\xdd\x01\xdd\x01\xdd\x01\x00\x00\xdc\x01\xdc\x01\xdc\x01\xdc\x01\xdc\x01\xdc\x01\xdd\x01\xdd\x01\xdd\x01\xdd\x01\xdd\x01\xdd\x01\xde\x01\xde\x01\xde\x01\xde\x01\xde\x01\xde\x01\xde\x01\xde\x01\xde\x01\xde\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xde\x01\xde\x01\xde\x01\xde\x01\xde\x01\xde\x01\x00\x00\x00\x00\x00\x00\xdd\x01\xdd\x01\xdd\x01\xdd\x01\xdd\x01\xdd\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdf\x01\xdf\x01\xdf\x01\xdf\x01\xdf\x01\xdf\x01\xdf\x01\xdf\x01\xdf\x01\xdf\x01\x00\x00\xde\x01\xde\x01\xde\x01\xde\x01\xde\x01\xde\x01\xdf\x01\xdf\x01\xdf\x01\xdf\x01\xdf\x01\xdf\x01\xe0\x01\xe0\x01\xe0\x01\xe0\x01\xe0\x01\xe0\x01\xe0\x01\xe0\x01\xe0\x01\xe0\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe0\x01\xe0\x01\xe0\x01\xe0\x01\xe0\x01\xe0\x01\x00\x00\x00\x00\x00\x00\xdf\x01\xdf\x01\xdf\x01\xdf\x01\xdf\x01\xdf\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe1\x01\xe1\x01\xe1\x01\xe1\x01\xe1\x01\xe1\x01\xe1\x01\xe1\x01\xe1\x01\xe1\x01\x00\x00\xe0\x01\xe0\x01\xe0\x01\xe0\x01\xe0\x01\xe0\x01\xe1\x01\xe1\x01\xe1\x01\xe1\x01\xe1\x01\xe1\x01\xe2\x01\xe2\x01\xe2\x01\xe2\x01\xe2\x01\xe2\x01\xe2\x01\xe2\x01\xe2\x01\xe2\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe2\x01\xe2\x01\xe2\x01\xe2\x01\xe2\x01\xe2\x01\x00\x00\x00\x00\x00\x00\xe1\x01\xe1\x01\xe1\x01\xe1\x01\xe1\x01\xe1\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe3\x01\xe3\x01\xe3\x01\xe3\x01\xe3\x01\xe3\x01\xe3\x01\xe3\x01\xe3\x01\xe3\x01\x00\x00\xe2\x01\xe2\x01\xe2\x01\xe2\x01\xe2\x01\xe2\x01\xe3\x01\xe3\x01\xe3\x01\xe3\x01\xe3\x01\xe3\x01\xe4\x01\xe4\x01\xe4\x01\xe4\x01\xe4\x01\xe4\x01\xe4\x01\xe4\x01\xe4\x01\xe4\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe4\x01\xe4\x01\xe4\x01\xe4\x01\xe4\x01\xe4\x01\x00\x00\x00\x00\x00\x00\xe3\x01\xe3\x01\xe3\x01\xe3\x01\xe3\x01\xe3\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe5\x01\xe5\x01\xe5\x01\xe5\x01\xe5\x01\xe5\x01\xe5\x01\xe5\x01\xe5\x01\xe5\x01\x00\x00\xe4\x01\xe4\x01\xe4\x01\xe4\x01\xe4\x01\xe4\x01\xe5\x01\xe5\x01\xe5\x01\xe5\x01\xe5\x01\xe5\x01\xe6\x01\xe6\x01\xe6\x01\xe6\x01\xe6\x01\xe6\x01\xe6\x01\xe6\x01\xe6\x01\xe6\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe6\x01\xe6\x01\xe6\x01\xe6\x01\xe6\x01\xe6\x01\x00\x00\x00\x00\x00\x00\xe5\x01\xe5\x01\xe5\x01\xe5\x01\xe5\x01\xe5\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe7\x01\xe7\x01\xe7\x01\xe7\x01\xe7\x01\xe7\x01\xe7\x01\xe7\x01\xe7\x01\xe7\x01\x00\x00\xe6\x01\xe6\x01\xe6\x01\xe6\x01\xe6\x01\xe6\x01\xe7\x01\xe7\x01\xe7\x01\xe7\x01\xe7\x01\xe7\x01\xe8\x01\xe8\x01\xe8\x01\xe8\x01\xe8\x01\xe8\x01\xe8\x01\xe8\x01\xe8\x01\xe8\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe8\x01\xe8\x01\xe8\x01\xe8\x01\xe8\x01\xe8\x01\x00\x00\x00\x00\x00\x00\xe7\x01\xe7\x01\xe7\x01\xe7\x01\xe7\x01\xe7\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe9\x01\xe9\x01\xe9\x01\xe9\x01\xe9\x01\xe9\x01\xe9\x01\xe9\x01\xe9\x01\xe9\x01\x00\x00\xe8\x01\xe8\x01\xe8\x01\xe8\x01\xe8\x01\xe8\x01\xe9\x01\xe9\x01\xe9\x01\xe9\x01\xe9\x01\xe9\x01\xea\x01\xea\x01\xea\x01\xea\x01\xea\x01\xea\x01\xea\x01\xea\x01\xea\x01\xea\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xea\x01\xea\x01\xea\x01\xea\x01\xea\x01\xea\x01\x00\x00\x00\x00\x00\x00\xe9\x01\xe9\x01\xe9\x01\xe9\x01\xe9\x01\xe9\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xeb\x01\xeb\x01\xeb\x01\xeb\x01\xeb\x01\xeb\x01\xeb\x01\xeb\x01\xeb\x01\xeb\x01\x00\x00\xea\x01\xea\x01\xea\x01\xea\x01\xea\x01\xea\x01\xeb\x01\xeb\x01\xeb\x01\xeb\x01\xeb\x01\xeb\x01\xec\x01\xec\x01\xec\x01\xec\x01\xec\x01\xec\x01\xec\x01\xec\x01\xec\x01\xec\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xec\x01\xec\x01\xec\x01\xec\x01\xec\x01\xec\x01\x00\x00\x00\x00\x00\x00\xeb\x01\xeb\x01\xeb\x01\xeb\x01\xeb\x01\xeb\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xed\x01\xed\x01\xed\x01\xed\x01\xed\x01\xed\x01\xed\x01\xed\x01\xed\x01\xed\x01\x00\x00\xec\x01\xec\x01\xec\x01\xec\x01\xec\x01\xec\x01\xed\x01\xed\x01\xed\x01\xed\x01\xed\x01\xed\x01\xee\x01\xee\x01\xee\x01\xee\x01\xee\x01\xee\x01\xee\x01\xee\x01\xee\x01\xee\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xee\x01\xee\x01\xee\x01\xee\x01\xee\x01\xee\x01\x00\x00\x00\x00\x00\x00\xed\x01\xed\x01\xed\x01\xed\x01\xed\x01\xed\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xef\x01\xef\x01\xef\x01\xef\x01\xef\x01\xef\x01\xef\x01\xef\x01\xef\x01\xef\x01\x00\x00\xee\x01\xee\x01\xee\x01\xee\x01\xee\x01\xee\x01\xef\x01\xef\x01\xef\x01\xef\x01\xef\x01\xef\x01\xf0\x01\xf0\x01\xf0\x01\xf0\x01\xf0\x01\xf0\x01\xf0\x01\xf0\x01\xf0\x01\xf0\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf0\x01\xf0\x01\xf0\x01\xf0\x01\xf0\x01\xf0\x01\x00\x00\x00\x00\x00\x00\xef\x01\xef\x01\xef\x01\xef\x01\xef\x01\xef\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf1\x01\xf1\x01\xf1\x01\xf1\x01\xf1\x01\xf1\x01\xf1\x01\xf1\x01\xf1\x01\xf1\x01\x00\x00\xf0\x01\xf0\x01\xf0\x01\xf0\x01\xf0\x01\xf0\x01\xf1\x01\xf1\x01\xf1\x01\xf1\x01\xf1\x01\xf1\x01\xf2\x01\xf2\x01\xf2\x01\xf2\x01\xf2\x01\xf2\x01\xf2\x01\xf2\x01\xf2\x01\xf2\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf2\x01\xf2\x01\xf2\x01\xf2\x01\xf2\x01\xf2\x01\x00\x00\x00\x00\x00\x00\xf1\x01\xf1\x01\xf1\x01\xf1\x01\xf1\x01\xf1\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf3\x01\xf3\x01\xf3\x01\xf3\x01\xf3\x01\xf3\x01\xf3\x01\xf3\x01\xf3\x01\xf3\x01\x00\x00\xf2\x01\xf2\x01\xf2\x01\xf2\x01\xf2\x01\xf2\x01\xf3\x01\xf3\x01\xf3\x01\xf3\x01\xf3\x01\xf3\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\x00\x00\x00\x00\x00\x00\xf3\x01\xf3\x01\xf3\x01\xf3\x01\xf3\x01\xf3\x01\x00\x00\x00\x00\xf5\x01\x00\x00\x00\x00\x00\x00\x73\x01\x73\x01\x73\x01\x73\x01\x73\x01\x73\x01\x73\x01\x73\x01\x73\x01\x73\x01\x00\x00\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\x73\x01\x73\x01\x73\x01\x73\x01\x73\x01\x73\x01\x70\x01\x70\x01\x70\x01\x70\x01\x70\x01\x70\x01\x70\x01\x70\x01\x70\x01\x70\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x70\x01\x70\x01\x70\x01\x70\x01\x70\x01\x70\x01\x00\x00\x00\x00\x00\x00\x73\x01\x73\x01\x73\x01\x73\x01\x73\x01\x73\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x70\x01\x70\x01\x70\x01\x70\x01\x70\x01\x70\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x07\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x08\x01\x51\x00\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x01\x01\x63\x00\xef\x00\xef\x00\xef\x00\xf0\x00\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"#++alex_check :: AlexAddr+alex_check = AlexA#+ "\xff\xff\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x79\x00\x65\x00\x79\x00\x73\x00\x67\x00\x73\x00\x65\x00\x6f\x00\x6f\x00\x6f\x00\x79\x00\x65\x00\x41\x00\x41\x00\x67\x00\x67\x00\x79\x00\x41\x00\x20\x00\x67\x00\x22\x00\x67\x00\x67\x00\x67\x00\x35\x00\x65\x00\x28\x00\x29\x00\x31\x00\x32\x00\x33\x00\x65\x00\x35\x00\x6f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x61\x00\x61\x00\x3c\x00\x3d\x00\x3e\x00\x61\x00\x73\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x65\x00\x6f\x00\x4b\x00\x6f\x00\x4d\x00\x61\x00\x67\x00\x50\x00\x67\x00\x52\x00\x53\x00\x54\x00\x55\x00\x69\x00\x67\x00\x61\x00\x65\x00\x41\x00\x69\x00\x69\x00\x32\x00\x69\x00\x49\x00\x35\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x53\x00\x69\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x31\x00\x72\x00\x73\x00\x74\x00\x75\x00\x69\x00\x69\x00\x6d\x00\x52\x00\x61\x00\x6b\x00\x6d\x00\x65\x00\x61\x00\x69\x00\x69\x00\x6d\x00\x79\x00\x69\x00\x69\x00\x61\x00\x65\x00\x65\x00\x65\x00\x73\x00\x65\x00\x6f\x00\x53\x00\x65\x00\x53\x00\x4b\x00\x69\x00\x53\x00\x53\x00\x31\x00\x53\x00\x53\x00\x49\x00\x69\x00\x67\x00\x72\x00\x73\x00\x61\x00\x69\x00\x69\x00\x75\x00\x79\x00\x73\x00\x6f\x00\x73\x00\x67\x00\x61\x00\x6f\x00\x61\x00\x6f\x00\x61\x00\x79\x00\x61\x00\x63\x00\x73\x00\x67\x00\x73\x00\x6b\x00\x65\x00\x73\x00\x73\x00\x67\x00\x73\x00\x73\x00\x69\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x41\x00\x41\x00\x41\x00\x41\x00\x67\x00\x4b\x00\x43\x00\x43\x00\x43\x00\x43\x00\x41\x00\x65\x00\x6d\x00\x65\x00\x47\x00\x73\x00\x65\x00\x65\x00\x61\x00\x73\x00\x61\x00\x4d\x00\x69\x00\x69\x00\x69\x00\x69\x00\x61\x00\x69\x00\x61\x00\x69\x00\x75\x00\x63\x00\x61\x00\x61\x00\x61\x00\x61\x00\x6f\x00\x6b\x00\x63\x00\x63\x00\x63\x00\x63\x00\x61\x00\x6d\x00\x6f\x00\x75\x00\x67\x00\x65\x00\x61\x00\x65\x00\x65\x00\x61\x00\x69\x00\x6d\x00\x76\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x4b\x00\x4b\x00\x4f\x00\x45\x00\x69\x00\x69\x00\x73\x00\x61\x00\x61\x00\x73\x00\x67\x00\x69\x00\x63\x00\x69\x00\x69\x00\x63\x00\x63\x00\x61\x00\x73\x00\x65\x00\x65\x00\x63\x00\x65\x00\x6f\x00\x6d\x00\x6f\x00\x65\x00\x65\x00\x4b\x00\x61\x00\x65\x00\x44\x00\x6b\x00\x6b\x00\x6f\x00\x65\x00\x6f\x00\x6f\x00\x6f\x00\x72\x00\x72\x00\x6f\x00\x69\x00\x65\x00\x65\x00\x79\x00\x65\x00\x65\x00\x65\x00\x79\x00\x65\x00\x6b\x00\x79\x00\x69\x00\x79\x00\x65\x00\x69\x00\x61\x00\x52\x00\x6d\x00\x6b\x00\x52\x00\x62\x00\x64\x00\x42\x00\x42\x00\x50\x00\x64\x00\x74\x00\x72\x00\x72\x00\xff\xff\x72\x00\x74\x00\x64\x00\x72\x00\x6e\x00\x76\x00\x36\x00\x6e\x00\x76\x00\x52\x00\x6e\x00\x76\x00\x74\x00\x72\x00\x74\x00\x6e\x00\x6c\x00\x74\x00\x72\x00\x6e\x00\x6e\x00\x72\x00\x74\x00\x64\x00\x62\x00\x62\x00\x70\x00\x74\x00\x74\x00\x74\x00\x72\x00\x72\x00\x6e\x00\x76\x00\x6e\x00\x6e\x00\x74\x00\x74\x00\x6c\x00\x6e\x00\x70\x00\x72\x00\x6e\x00\x6e\x00\x6c\x00\x68\x00\x6c\x00\x62\x00\x72\x00\x72\x00\x6e\x00\x72\x00\x6c\x00\x6e\x00\x70\x00\x6e\x00\x6e\x00\x6e\x00\x6c\x00\x6c\x00\x38\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x54\x00\x44\x00\x54\x00\x43\x00\x43\x00\x6e\x00\x48\x00\x74\x00\x7a\x00\x44\x00\x44\x00\x72\x00\x72\x00\x72\x00\x72\x00\x6e\x00\x50\x00\x50\x00\x72\x00\x70\x00\x54\x00\x54\x00\x78\x00\x6e\x00\x72\x00\x6c\x00\x64\x00\x74\x00\x68\x00\x34\x00\x32\x00\x70\x00\x74\x00\x64\x00\x74\x00\x63\x00\x63\x00\x34\x00\x68\x00\x69\x00\x36\x00\x64\x00\x64\x00\x30\x00\x74\x00\x74\x00\x6e\x00\x6e\x00\x70\x00\x70\x00\x74\x00\x75\x00\x74\x00\x74\x00\x74\x00\x76\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x48\x00\x74\x00\x74\x00\x6c\x00\x6e\x00\x66\x00\x6e\x00\x74\x00\x64\x00\x3d\x00\x77\x00\xff\xff\xff\xff\x6e\x00\xff\xff\xff\xff\xff\xff\x72\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x79\x00\xff\xff\xff\xff\x68\x00\x69\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\x74\x00\x75\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x0a\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\x53\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\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\x42\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x73\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x52\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\x62\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\x6e\x00\x72\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\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\xff\xff\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\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\xff\xff\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\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x78\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\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\xff\xff\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x6c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x6c\x00\xff\xff\xff\xff\xff\xff\xff\xff\x71\x00\xff\xff\xff\xff\xff\xff\xff\xff\x76\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\xff\xff\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\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\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\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\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\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\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\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\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\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\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\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\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\xff\xff\xff\xff\x69\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\xff\xff\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\x6f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\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\xff\xff\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\xff\xff\xff\xff\x69\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\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\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\xff\xff\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\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\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\xff\xff\x6e\x00\xff\xff\xff\xff\xff\xff\xff\xff\x73\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\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\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\xff\xff\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\xff\xff\xff\xff\x72\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\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\xff\xff\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\x48\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\xff\xff\xff\xff\xff\xff\x53\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\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\xff\xff\x68\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x73\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\xff\xff\x48\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x53\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\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\xff\xff\x68\x00\xff\xff\xff\xff\xff\xff\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\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\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\xff\xff\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\x0a\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\xff\xff\xff\xff\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\xff\xff\xff\xff\x22\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\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\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\xff\xff\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\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"#++alex_deflt :: AlexAddr+alex_deflt = AlexA#+ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x01\x00\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x09\x01\x09\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x01\x1c\x01\x1c\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x01"#++alex_accept = listArray (0 :: Int, 501)+ [ AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccSkip+ , AlexAcc 194+ , AlexAcc 193+ , AlexAcc 192+ , AlexAcc 191+ , AlexAcc 190+ , AlexAcc 189+ , AlexAcc 188+ , AlexAcc 187+ , AlexAcc 186+ , AlexAcc 185+ , AlexAcc 184+ , AlexAcc 183+ , AlexAcc 182+ , AlexAcc 181+ , AlexAcc 180+ , AlexAcc 179+ , AlexAcc 178+ , AlexAcc 177+ , AlexAcc 176+ , AlexAcc 175+ , AlexAcc 174+ , AlexAcc 173+ , AlexAcc 172+ , AlexAcc 171+ , AlexAcc 170+ , AlexAcc 169+ , AlexAcc 168+ , AlexAcc 167+ , AlexAcc 166+ , AlexAcc 165+ , AlexAcc 164+ , AlexAcc 163+ , AlexAcc 162+ , AlexAcc 161+ , AlexAcc 160+ , AlexAcc 159+ , AlexAcc 158+ , AlexAcc 157+ , AlexAcc 156+ , AlexAcc 155+ , AlexAcc 154+ , AlexAcc 153+ , AlexAcc 152+ , AlexAcc 151+ , AlexAcc 150+ , AlexAcc 149+ , AlexAcc 148+ , AlexAcc 147+ , AlexAcc 146+ , AlexAcc 145+ , AlexAcc 144+ , AlexAcc 143+ , AlexAcc 142+ , AlexAcc 141+ , AlexAcc 140+ , AlexAcc 139+ , AlexAcc 138+ , AlexAcc 137+ , AlexAcc 136+ , AlexAcc 135+ , AlexAcc 134+ , AlexAcc 133+ , AlexAcc 132+ , AlexAcc 131+ , AlexAcc 130+ , AlexAcc 129+ , AlexAcc 128+ , AlexAcc 127+ , AlexAcc 126+ , AlexAcc 125+ , AlexAcc 124+ , AlexAcc 123+ , AlexAcc 122+ , AlexAcc 121+ , AlexAcc 120+ , AlexAcc 119+ , AlexAcc 118+ , AlexAcc 117+ , AlexAcc 116+ , AlexAcc 115+ , AlexAcc 114+ , AlexAcc 113+ , AlexAcc 112+ , AlexAcc 111+ , AlexAcc 110+ , AlexAcc 109+ , AlexAcc 108+ , AlexAcc 107+ , AlexAcc 106+ , AlexAcc 105+ , AlexAcc 104+ , AlexAcc 103+ , AlexAcc 102+ , AlexAcc 101+ , AlexAcc 100+ , AlexAcc 99+ , AlexAcc 98+ , AlexAcc 97+ , AlexAcc 96+ , AlexAcc 95+ , AlexAcc 94+ , AlexAcc 93+ , AlexAcc 92+ , AlexAcc 91+ , AlexAcc 90+ , AlexAcc 89+ , AlexAcc 88+ , AlexAcc 87+ , AlexAcc 86+ , AlexAcc 85+ , AlexAcc 84+ , AlexAcc 83+ , AlexAcc 82+ , AlexAcc 81+ , AlexAcc 80+ , AlexAcc 79+ , AlexAcc 78+ , AlexAcc 77+ , AlexAcc 76+ , AlexAcc 75+ , AlexAcc 74+ , AlexAcc 73+ , AlexAcc 72+ , AlexAcc 71+ , AlexAcc 70+ , AlexAcc 69+ , AlexAcc 68+ , AlexAcc 67+ , AlexAcc 66+ , AlexAcc 65+ , AlexAcc 64+ , AlexAcc 63+ , AlexAcc 62+ , AlexAcc 61+ , AlexAcc 60+ , AlexAcc 59+ , AlexAcc 58+ , AlexAcc 57+ , AlexAcc 56+ , AlexAcc 55+ , AlexAcc 54+ , AlexAcc 53+ , AlexAcc 52+ , AlexAcc 51+ , AlexAcc 50+ , AlexAcc 49+ , AlexAcc 48+ , AlexAcc 47+ , AlexAcc 46+ , AlexAcc 45+ , AlexAcc 44+ , AlexAcc 43+ , AlexAcc 42+ , AlexAcc 41+ , AlexAcc 40+ , AlexAcc 39+ , AlexAcc 38+ , AlexAcc 37+ , AlexAcc 36+ , AlexAcc 35+ , AlexAcc 34+ , AlexAcc 33+ , AlexAcc 32+ , AlexAcc 31+ , AlexAcc 30+ , AlexAcc 29+ , AlexAcc 28+ , AlexAcc 27+ , AlexAcc 26+ , AlexAcc 25+ , AlexAcc 24+ , AlexAcc 23+ , AlexAcc 22+ , AlexAcc 21+ , AlexAcc 20+ , AlexAcc 19+ , AlexAcc 18+ , AlexAcc 17+ , AlexAcc 16+ , AlexAcc 15+ , AlexAcc 14+ , AlexAcc 13+ , AlexAcc 12+ , AlexAcc 11+ , AlexAcc 10+ , AlexAcc 9+ , AlexAcc 8+ , AlexAcc 7+ , AlexAcc 6+ , AlexAcc 5+ , AlexAcc 4+ , AlexAcc 3+ , AlexAcc 2+ , AlexAcc 1+ , AlexAcc 0+ ]++alex_actions = array (0 :: Int, 195)+ [ (194,alex_action_1)+ , (193,alex_action_2)+ , (192,alex_action_3)+ , (191,alex_action_4)+ , (190,alex_action_5)+ , (189,alex_action_6)+ , (188,alex_action_7)+ , (187,alex_action_8)+ , (186,alex_action_9)+ , (185,alex_action_10)+ , (184,alex_action_11)+ , (183,alex_action_12)+ , (182,alex_action_13)+ , (181,alex_action_14)+ , (180,alex_action_15)+ , (179,alex_action_16)+ , (178,alex_action_17)+ , (177,alex_action_18)+ , (176,alex_action_19)+ , (175,alex_action_20)+ , (174,alex_action_21)+ , (173,alex_action_22)+ , (172,alex_action_23)+ , (171,alex_action_24)+ , (170,alex_action_25)+ , (169,alex_action_26)+ , (168,alex_action_27)+ , (167,alex_action_28)+ , (166,alex_action_29)+ , (165,alex_action_30)+ , (164,alex_action_31)+ , (163,alex_action_32)+ , (162,alex_action_33)+ , (161,alex_action_34)+ , (160,alex_action_35)+ , (159,alex_action_36)+ , (158,alex_action_37)+ , (157,alex_action_38)+ , (156,alex_action_39)+ , (155,alex_action_40)+ , (154,alex_action_41)+ , (153,alex_action_42)+ , (152,alex_action_43)+ , (151,alex_action_44)+ , (150,alex_action_45)+ , (149,alex_action_46)+ , (148,alex_action_47)+ , (147,alex_action_48)+ , (146,alex_action_49)+ , (145,alex_action_50)+ , (144,alex_action_51)+ , (143,alex_action_52)+ , (142,alex_action_53)+ , (141,alex_action_54)+ , (140,alex_action_55)+ , (139,alex_action_56)+ , (138,alex_action_57)+ , (137,alex_action_58)+ , (136,alex_action_59)+ , (135,alex_action_60)+ , (134,alex_action_60)+ , (133,alex_action_61)+ , (132,alex_action_62)+ , (131,alex_action_62)+ , (130,alex_action_63)+ , (129,alex_action_64)+ , (128,alex_action_64)+ , (127,alex_action_64)+ , (126,alex_action_64)+ , (125,alex_action_64)+ , (124,alex_action_64)+ , (123,alex_action_64)+ , (122,alex_action_64)+ , (121,alex_action_64)+ , (120,alex_action_64)+ , (119,alex_action_64)+ , (118,alex_action_64)+ , (117,alex_action_64)+ , (116,alex_action_64)+ , (115,alex_action_64)+ , (114,alex_action_64)+ , (113,alex_action_64)+ , (112,alex_action_64)+ , (111,alex_action_64)+ , (110,alex_action_64)+ , (109,alex_action_64)+ , (108,alex_action_64)+ , (107,alex_action_64)+ , (106,alex_action_64)+ , (105,alex_action_64)+ , (104,alex_action_64)+ , (103,alex_action_64)+ , (102,alex_action_64)+ , (101,alex_action_64)+ , (100,alex_action_64)+ , (99,alex_action_64)+ , (98,alex_action_64)+ , (97,alex_action_64)+ , (96,alex_action_64)+ , (95,alex_action_64)+ , (94,alex_action_64)+ , (93,alex_action_64)+ , (92,alex_action_64)+ , (91,alex_action_64)+ , (90,alex_action_64)+ , (89,alex_action_65)+ , (88,alex_action_65)+ , (87,alex_action_65)+ , (86,alex_action_65)+ , (85,alex_action_65)+ , (84,alex_action_65)+ , (83,alex_action_65)+ , (82,alex_action_65)+ , (81,alex_action_65)+ , (80,alex_action_65)+ , (79,alex_action_65)+ , (78,alex_action_65)+ , (77,alex_action_65)+ , (76,alex_action_65)+ , (75,alex_action_65)+ , (74,alex_action_65)+ , (73,alex_action_65)+ , (72,alex_action_65)+ , (71,alex_action_65)+ , (70,alex_action_65)+ , (69,alex_action_65)+ , (68,alex_action_65)+ , (67,alex_action_65)+ , (66,alex_action_65)+ , (65,alex_action_65)+ , (64,alex_action_65)+ , (63,alex_action_65)+ , (62,alex_action_65)+ , (61,alex_action_65)+ , (60,alex_action_65)+ , (59,alex_action_65)+ , (58,alex_action_65)+ , (57,alex_action_65)+ , (56,alex_action_65)+ , (55,alex_action_65)+ , (54,alex_action_65)+ , (53,alex_action_65)+ , (52,alex_action_65)+ , (51,alex_action_65)+ , (50,alex_action_65)+ , (49,alex_action_65)+ , (48,alex_action_65)+ , (47,alex_action_65)+ , (46,alex_action_65)+ , (45,alex_action_65)+ , (44,alex_action_65)+ , (43,alex_action_65)+ , (42,alex_action_65)+ , (41,alex_action_65)+ , (40,alex_action_65)+ , (39,alex_action_66)+ , (38,alex_action_66)+ , (37,alex_action_66)+ , (36,alex_action_66)+ , (35,alex_action_66)+ , (34,alex_action_66)+ , (33,alex_action_66)+ , (32,alex_action_66)+ , (31,alex_action_66)+ , (30,alex_action_66)+ , (29,alex_action_66)+ , (28,alex_action_66)+ , (27,alex_action_66)+ , (26,alex_action_66)+ , (25,alex_action_66)+ , (24,alex_action_66)+ , (23,alex_action_66)+ , (22,alex_action_66)+ , (21,alex_action_66)+ , (20,alex_action_66)+ , (19,alex_action_66)+ , (18,alex_action_66)+ , (17,alex_action_66)+ , (16,alex_action_66)+ , (15,alex_action_66)+ , (14,alex_action_66)+ , (13,alex_action_66)+ , (12,alex_action_66)+ , (11,alex_action_66)+ , (10,alex_action_66)+ , (9,alex_action_66)+ , (8,alex_action_66)+ , (7,alex_action_66)+ , (6,alex_action_66)+ , (5,alex_action_66)+ , (4,alex_action_66)+ , (3,alex_action_66)+ , (2,alex_action_66)+ , (1,alex_action_66)+ , (0,alex_action_67)+ ]++{-# LINE 99 "HOpenPGP/Tools/Lexer.x" #-}++data Token+ = TokenTag+ | TokenAfter+ | TokenAnd+ | TokenAny+ | TokenBefore+ | TokenNot+ | TokenNow+ | TokenOr+ | TokenInt Integer+ | TokenEq+ | TokenLt+ | TokenGt+ | TokenLParen+ | TokenRParen+ | TokenEOF+ | TokenPKVersion+ | TokenSigVersion+ | TokenSigType+ | TokenPKAlgo+ | TokenSigPKAlgo+ | TokenHashAlgo+ | TokenRSA+ | TokenDSA+ | TokenElgamal+ | TokenECDSA+ | TokenECDH+ | TokenDH+ | TokenBinary+ | TokenCanonicalText+ | TokenStandalone+ | TokenGenericCert+ | TokenPersonaCert+ | TokenCasualCert+ | TokenPositiveCert+ | TokenSubkeyBindingSig+ | TokenPrimaryKeyBindingSig+ | TokenSignatureDirectlyOnAKey+ | TokenKeyRevocationSig+ | TokenSubkeyRevocationSig+ | TokenCertRevocationSig+ | TokenTimestampSig+ | TokenMD5+ | TokenSHA1+ | TokenRIPEMD160+ | TokenSHA256+ | TokenSHA384+ | TokenSHA512+ | TokenSHA224+ | TokenKeysize+ | TokenTimestamp+ | TokenFingerprint+ | TokenKeyID+ | TokenFpr TwentyOctetFingerprint+ | TokenLongID (Either String EightOctetKeyId)+ | TokenLength+ | TokenEvery+ | TokenOne+ | TokenOf+ | TokenContains+ | TokenUids+ | TokenStr String+ | TokenA+ | TokenSubkey+ | TokenSigCreationTime+ deriving (Eq,Show)++alexEOF = return TokenEOF++lex :: (String -> a) -> AlexAction a+lex f = \(_,_,_,s) i -> return (f (take i s))++lex' :: a -> AlexAction a+lex' = lex . const+++alex_action_1 = lex' TokenA +alex_action_2 = lex' TokenAnd +alex_action_3 = lex' TokenAny +alex_action_4 = lex' TokenEvery +alex_action_5 = lex' TokenNot +alex_action_6 = lex' TokenNow +alex_action_7 = lex' TokenOne +alex_action_8 = lex' TokenOr +alex_action_9 = lex' TokenSubkey +alex_action_10 = lex' TokenTag +alex_action_11 = lex' TokenOf +alex_action_12 = lex' TokenEq +alex_action_13 = lex' TokenEq +alex_action_14 = lex' TokenEq +alex_action_15 = lex' TokenLt +alex_action_16 = lex' TokenGt +alex_action_17 = lex' TokenLParen +alex_action_18 = lex' TokenRParen +alex_action_19 = lex' TokenContains +alex_action_20 = lex' TokenPKVersion +alex_action_21 = lex' TokenSigVersion +alex_action_22 = lex' TokenSigType +alex_action_23 = lex' TokenPKAlgo +alex_action_24 = lex' TokenSigPKAlgo +alex_action_25 = lex' TokenHashAlgo +alex_action_26 = lex' TokenRSA +alex_action_27 = lex' TokenDSA +alex_action_28 = lex' TokenElgamal +alex_action_29 = lex' TokenECDSA +alex_action_30 = lex' TokenECDH +alex_action_31 = lex' TokenDH +alex_action_32 = lex' TokenBinary +alex_action_33 = lex' TokenCanonicalText +alex_action_34 = lex' TokenStandalone +alex_action_35 = lex' TokenGenericCert +alex_action_36 = lex' TokenPersonaCert +alex_action_37 = lex' TokenCasualCert +alex_action_38 = lex' TokenPositiveCert +alex_action_39 = lex' TokenSubkeyBindingSig +alex_action_40 = lex' TokenPrimaryKeyBindingSig +alex_action_41 = lex' TokenSignatureDirectlyOnAKey +alex_action_42 = lex' TokenKeyRevocationSig +alex_action_43 = lex' TokenSubkeyRevocationSig +alex_action_44 = lex' TokenCertRevocationSig +alex_action_45 = lex' TokenTimestampSig +alex_action_46 = lex' TokenMD5 +alex_action_47 = lex' TokenSHA1 +alex_action_48 = lex' TokenRIPEMD160 +alex_action_49 = lex' TokenSHA256 +alex_action_50 = lex' TokenSHA384 +alex_action_51 = lex' TokenSHA512 +alex_action_52 = lex' TokenSHA224 +alex_action_53 = lex' TokenUids +alex_action_54 = lex' TokenKeysize +alex_action_55 = lex' TokenLength +alex_action_56 = lex' TokenTimestamp +alex_action_57 = lex' TokenFingerprint +alex_action_58 = lex' TokenKeyID +alex_action_59 = lex' TokenSigCreationTime +alex_action_60 = lex (TokenFpr . read) +alex_action_61 = lex (TokenFpr . read . drop 2) +alex_action_62 = lex (TokenLongID . Right . read) +alex_action_63 = lex (TokenLongID . Right . read . drop 2) +alex_action_64 = lex (TokenInt . fromIntegral . read) +alex_action_65 = lex (TokenInt . fromIntegral . fst . head . readHex) +alex_action_66 = lex (TokenInt . fromIntegral . fst . head . readHex . drop 2) +alex_action_67 = lex (TokenStr . ((zipWith const . drop 1) <*> (drop 2))) +{-# 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++++++++++++++++++-- Do not remove this comment. Required to fix CPP parsing when using GCC and a clang-compiled alex.+#if __GLASGOW_HASKELL__ > 706+#define GTE(n,m) (tagToEnum# (n >=# m))+#define EQ(n,m) (tagToEnum# (n ==# m))+#else+#define GTE(n,m) (n >=# m)+#define EQ(n,m) (n ==# m)+#endif++++++++++++++++++++data AlexAddr = AlexA# Addr#+-- Do not remove this comment. Required to fix CPP parsing when using GCC and a clang-compiled alex.+#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 alexGetByte input__ of+ Nothing ->++++ AlexEOF+ Just _ ->++++ AlexError input__'++ (AlexLastSkip input__'' len, _) ->++++ AlexSkip input__'' len++ (AlexLastAcc k input__''' len, _) ->++++ AlexToken input__''' len (alex_actions ! 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 alexGetByte input__ of+ Nothing -> (new_acc, input__)+ Just (c, new_input) ->++++ case fromIntegral c of { (I# (ord_c)) ->+ let+ base = alexIndexInt32OffAddr alex_base s+ offset = (base +# ord_c)+ check = alexIndexInt16OffAddr alex_check offset++ new_s = if GTE(offset,0#) && EQ(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 (if c < 0x80 || c >= 0xC0 then (len +# 1#) else len)+ -- note that the length is increased ONLY if this is the 1st byte in a char encoding)+ new_input new_s new_acc+ }+ where+ check_accs (AlexAccNone) = last_acc+ check_accs (AlexAcc a ) = AlexLastAcc a input__ (I# (len))+ check_accs (AlexAccSkip) = AlexLastSkip input__ (I# (len))++++++++++++++data AlexLastAcc+ = AlexNone+ | AlexLastAcc !Int !AlexInput !Int+ | AlexLastSkip !AlexInput !Int++data AlexAcc user+ = AlexAccNone+ | AlexAcc Int+ | AlexAccSkip+++++++++++++++++++++++++++++
+ dist/build/hkt/hkt-tmp/HOpenPGP/Tools/Parser.hs view
@@ -0,0 +1,1615 @@+{-# OPTIONS_GHC -w #-}+{-# OPTIONS -XMagicHash -XBangPatterns -XTypeSynonymInstances -XFlexibleInstances -cpp #-}+#if __GLASGOW_HASKELL__ >= 710+{-# OPTIONS_GHC -XPartialTypeSignatures #-}+#endif+{-# OPTIONS -w #-}+module HOpenPGP.Tools.Parser( parseTKExp, parsePExp ) where+import Codec.Encryption.OpenPGP.Types+-- import Data.Conduit.OpenPGP.Filter (Expr(..), UPredicate(..), UOp(..), OVar(..), OValue(..), SPVar(..), SPValue(..), PKPVar(..), PKPValue(..))+import HOpenPGP.Tools.Common (pkpGetPKVersion, pkpGetPKAlgo, pkpGetKeysize, pkpGetTimestamp, pkpGetFingerprint, pkpGetEOKI, tkUsingPKP, tkGetUIDs, tkGetSubs, anyOrAll, anyReader, oGetTag, oGetLength, spGetSigVersion, spGetSigType, spGetPKAlgo, spGetHashAlgo, spGetSCT, pUsingPKP, pUsingSP, maybeR)++import HOpenPGP.Tools.Lexer++import Control.Applicative (liftA2)+import Codec.Encryption.OpenPGP.Fingerprint (eightOctetKeyID, fingerprint)+import Codec.Encryption.OpenPGP.KeyInfo (pubkeySize)+import Control.Error.Util (hush)+import Control.Monad.Loops (allM, anyM)+import Control.Monad.Trans.Reader (ask, reader, Reader, withReader)+import Data.List (isInfixOf)+import qualified Data.Text as T+import Data.Text.Prettyprint.Doc (pretty)+import qualified Data.Array as Happy_Data_Array+import qualified Data.Bits as Bits+import qualified GHC.Exts as Happy_GHC_Exts+import Control.Applicative(Applicative(..))+import Control.Monad (ap)++-- parser produced by Happy Version 1.19.12++newtype HappyAbsSyn t5 t6 t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22 = HappyAbsSyn HappyAny+#if __GLASGOW_HASKELL__ >= 607+type HappyAny = Happy_GHC_Exts.Any+#else+type HappyAny = forall a . a+#endif+happyIn5 :: t5 -> (HappyAbsSyn t5 t6 t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22)+happyIn5 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn5 #-}+happyOut5 :: (HappyAbsSyn t5 t6 t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22) -> t5+happyOut5 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut5 #-}+happyIn6 :: t6 -> (HappyAbsSyn t5 t6 t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22)+happyIn6 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn6 #-}+happyOut6 :: (HappyAbsSyn t5 t6 t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22) -> t6+happyOut6 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut6 #-}+happyIn7 :: t7 -> (HappyAbsSyn t5 t6 t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22)+happyIn7 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn7 #-}+happyOut7 :: (HappyAbsSyn t5 t6 t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22) -> t7+happyOut7 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut7 #-}+happyIn8 :: t8 -> (HappyAbsSyn t5 t6 t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22)+happyIn8 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn8 #-}+happyOut8 :: (HappyAbsSyn t5 t6 t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22) -> t8+happyOut8 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut8 #-}+happyIn9 :: t9 -> (HappyAbsSyn t5 t6 t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22)+happyIn9 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn9 #-}+happyOut9 :: (HappyAbsSyn t5 t6 t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22) -> t9+happyOut9 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut9 #-}+happyIn10 :: t10 -> (HappyAbsSyn t5 t6 t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22)+happyIn10 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn10 #-}+happyOut10 :: (HappyAbsSyn t5 t6 t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22) -> t10+happyOut10 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut10 #-}+happyIn11 :: t11 -> (HappyAbsSyn t5 t6 t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22)+happyIn11 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn11 #-}+happyOut11 :: (HappyAbsSyn t5 t6 t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22) -> t11+happyOut11 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut11 #-}+happyIn12 :: t12 -> (HappyAbsSyn t5 t6 t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22)+happyIn12 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn12 #-}+happyOut12 :: (HappyAbsSyn t5 t6 t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22) -> t12+happyOut12 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut12 #-}+happyIn13 :: t13 -> (HappyAbsSyn t5 t6 t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22)+happyIn13 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn13 #-}+happyOut13 :: (HappyAbsSyn t5 t6 t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22) -> t13+happyOut13 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut13 #-}+happyIn14 :: t14 -> (HappyAbsSyn t5 t6 t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22)+happyIn14 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn14 #-}+happyOut14 :: (HappyAbsSyn t5 t6 t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22) -> t14+happyOut14 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut14 #-}+happyIn15 :: t15 -> (HappyAbsSyn t5 t6 t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22)+happyIn15 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn15 #-}+happyOut15 :: (HappyAbsSyn t5 t6 t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22) -> t15+happyOut15 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut15 #-}+happyIn16 :: t16 -> (HappyAbsSyn t5 t6 t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22)+happyIn16 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn16 #-}+happyOut16 :: (HappyAbsSyn t5 t6 t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22) -> t16+happyOut16 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut16 #-}+happyIn17 :: t17 -> (HappyAbsSyn t5 t6 t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22)+happyIn17 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn17 #-}+happyOut17 :: (HappyAbsSyn t5 t6 t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22) -> t17+happyOut17 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut17 #-}+happyIn18 :: t18 -> (HappyAbsSyn t5 t6 t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22)+happyIn18 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn18 #-}+happyOut18 :: (HappyAbsSyn t5 t6 t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22) -> t18+happyOut18 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut18 #-}+happyIn19 :: t19 -> (HappyAbsSyn t5 t6 t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22)+happyIn19 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn19 #-}+happyOut19 :: (HappyAbsSyn t5 t6 t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22) -> t19+happyOut19 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut19 #-}+happyIn20 :: t20 -> (HappyAbsSyn t5 t6 t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22)+happyIn20 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn20 #-}+happyOut20 :: (HappyAbsSyn t5 t6 t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22) -> t20+happyOut20 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut20 #-}+happyIn21 :: t21 -> (HappyAbsSyn t5 t6 t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22)+happyIn21 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn21 #-}+happyOut21 :: (HappyAbsSyn t5 t6 t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22) -> t21+happyOut21 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut21 #-}+happyIn22 :: t22 -> (HappyAbsSyn t5 t6 t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22)+happyIn22 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn22 #-}+happyOut22 :: (HappyAbsSyn t5 t6 t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22) -> t22+happyOut22 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut22 #-}+happyInTok :: (Token) -> (HappyAbsSyn t5 t6 t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22)+happyInTok x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyInTok #-}+happyOutTok :: (HappyAbsSyn t5 t6 t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22) -> (Token)+happyOutTok x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOutTok #-}+++happyExpList :: HappyAddr+happyExpList = HappyA# "\x00\x00\x40\x0d\x00\x09\x00\x00\x00\x1e\x00\x00\x00\x90\x20\xf0\x03\x00\x00\xe0\x13\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x90\x20\xf0\x03\x00\x00\xe0\x13\x00\x00\x00\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x20\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd4\x00\x90\x00\x00\x00\xe0\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x09\x00\x00\x00\x1e\x00\x00\x00\xd4\x00\x90\x00\x00\x00\xe0\x01\x00\x00\x40\x0d\x00\x09\x00\x00\x00\x1e\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\xfc\x01\x00\x00\x00\x00\x40\x00\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x04\xc0\x0f\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\xff\x3f\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x09\x02\x3f\x00\x00\x00\x3e\x01\x00\x00\x90\x20\xf0\x03\x00\x00\xe0\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x02\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x02\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"#++{-# NOINLINE happyExpListPerState #-}+happyExpListPerState st =+ token_strs_expected+ where token_strs = ["error","%dummy","%start_parseTK","%start_parseP","Exp","PExp","TExp","PIOp","PSOp","AATOp","Ppkalgos","Pfingerprint","Plongid","CFExp","OExp","OIOp","SPExp","SIOp","Ssigtypes","Spkalgos","Shashalgos","Stimespec","a","and","any","contains","every","not","now","of","one","or","subkey","tag","int","'='","'<'","'>'","'('","')'","pkversion","sigversion","sigtype","pkalgo","sigpkalgo","hashalgo","rsa","dsa","elgamal","ecdsa","ecdh","dh","binary","canonicaltext","standalone","genericcert","personacert","casualcert","positivecert","subkeybindingsig","primarykeybindingsig","signaturedirectlyonakey","keyrevocationsig","subkeyrevocationsig","certrevocationsig","timestampsig","md5","sha1","ripemd160","sha256","sha384","sha512","sha224","keysize","timestamp","fingerprint","keyid","sigcreationtime","fpr","longid","length","str","uids","%eof"]+ bit_start = st * 84+ bit_end = (st + 1) * 84+ read_bit = readArrayBit happyExpList+ bits = map read_bit [bit_start..bit_end - 1]+ bits_indexed = zip bits [0..83]+ token_strs_expected = concatMap f bits_indexed+ f (False, _) = []+ f (True, nr) = [token_strs !! nr]++happyActOffsets :: HappyAddr+happyActOffsets = HappyA# "\x14\x00\x0c\x00\x05\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x0c\x00\x4f\x00\x65\x00\x69\x00\x69\x00\x74\x00\x77\x00\x77\x00\x7a\x00\x7a\x00\xfe\xff\xfe\xff\x7d\x00\x80\x00\x01\x00\x00\x00\x00\x00\x06\x00\xfc\xff\x0b\x00\x14\x00\x04\x00\x0e\x00\xca\xff\x21\x00\xf7\xff\x14\x00\x14\x00\x2a\x00\x00\x00\x00\x00\x00\x00\x55\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x28\x00\x2e\x00\x00\x00\x00\x00\x00\x00\x38\x00\x03\x00\x4d\x00\x53\x00\x2d\x00\x57\x00\x58\x00\x6f\x00\x3c\x00\x0c\x00\x0c\x00\x3c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\xfb\xff\x2b\x00\x43\x00\x2b\x00\x61\x00\x00\x00\x00\x00\x2b\x00\x62\x00\x00\x00\x63\x00\x00\x00\x00\x00\x00\x00"#++happyGotoOffsets :: HappyAddr+happyGotoOffsets = HappyA# "\x91\x00\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1c\x00\x95\x00\x9e\x00\x96\x00\x98\x00\x9f\x00\x99\x00\x9b\x00\xa1\x00\xa4\x00\xa5\x00\xa6\x00\xa0\x00\xa3\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x94\x00\x00\x00\x00\x00\x00\x00\x00\x00\xaa\x00\x97\x00\x9a\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa2\x00\x00\x00\x00\x00\x00\x00\xa7\x00\x00\x00\x00\x00\xa9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9c\x00\xa8\x00\xab\x00\xac\x00\x00\x00\x00\x00\x00\x00\x00\x00\x71\x00\x75\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xad\x00\x00\x00\xaf\x00\x00\x00\x00\x00\x00\x00\xb0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"#++happyAdjustOffset :: Happy_GHC_Exts.Int# -> Happy_GHC_Exts.Int#+happyAdjustOffset off = off++happyDefActions :: HappyAddr+happyDefActions = HappyA# "\x00\x00\x00\x00\x00\x00\x00\x00\xd7\xff\x00\x00\xd9\xff\xd8\xff\xdd\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\xf9\xff\xf8\xff\x00\x00\xfd\xff\x00\x00\x00\x00\xfc\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd4\xff\xd3\xff\xd2\xff\x00\x00\xcc\xff\xcb\xff\xca\xff\x00\x00\xe9\xff\xea\xff\x00\x00\x00\x00\xed\xff\xec\xff\xeb\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdc\xff\x00\x00\x00\x00\xda\xff\xdb\xff\xd6\xff\xf7\xff\xd1\xff\xd0\xff\xbb\xff\xc9\xff\xc8\xff\xc7\xff\xc6\xff\xc5\xff\xc4\xff\xc3\xff\xc2\xff\xc1\xff\xc0\xff\xbf\xff\xbe\xff\xbd\xff\xbc\xff\xf6\xff\xe0\xff\xe6\xff\xe5\xff\xe4\xff\xe3\xff\xe2\xff\xe1\xff\xcf\xff\xb4\xff\xba\xff\xb9\xff\xb8\xff\xb7\xff\xb6\xff\xb5\xff\xce\xff\xac\xff\xb3\xff\xb2\xff\xb1\xff\xb0\xff\xaf\xff\xae\xff\xad\xff\xf5\xff\xf4\xff\xf3\xff\xdf\xff\xf2\xff\xde\xff\xcd\xff\xab\xff\xaa\xff\xd5\xff\xfa\xff\xfb\xff\xee\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe7\xff\xe8\xff\x00\x00\x00\x00\xef\xff\x00\x00\xf1\xff\xf0\xff"#++happyCheck :: HappyAddr+happyCheck = HappyA# "\xff\xff\x02\x00\x04\x00\x02\x00\x08\x00\x09\x00\x02\x00\x3d\x00\x03\x00\x0a\x00\x13\x00\x0a\x00\x0e\x00\x16\x00\x0a\x00\x03\x00\x0d\x00\x0b\x00\x06\x00\x01\x00\x09\x00\x01\x00\x08\x00\x03\x00\x0c\x00\x05\x00\x06\x00\x09\x00\x0a\x00\x01\x00\x0c\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x09\x00\x0a\x00\x13\x00\x0c\x00\x08\x00\x16\x00\x34\x00\x35\x00\x36\x00\x37\x00\x04\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x0d\x00\x3d\x00\x0e\x00\x0d\x00\x0d\x00\x3a\x00\x3e\x00\x02\x00\x3e\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x0d\x00\x0a\x00\x3b\x00\x34\x00\x35\x00\x36\x00\x37\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x0d\x00\x02\x00\x07\x00\x0e\x00\x0f\x00\x10\x00\x0d\x00\x39\x00\x0d\x00\x0a\x00\x0d\x00\x0d\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x01\x00\x0e\x00\x0f\x00\x10\x00\x01\x00\x0e\x00\x0f\x00\x10\x00\x09\x00\x0a\x00\x0d\x00\x0c\x00\x09\x00\x0a\x00\x3d\x00\x0c\x00\x0e\x00\x0f\x00\x10\x00\x0e\x00\x0f\x00\x10\x00\x0e\x00\x0f\x00\x10\x00\x0e\x00\x0f\x00\x10\x00\x0e\x00\x0f\x00\x10\x00\x00\x00\x01\x00\x02\x00\x00\x00\x01\x00\x02\x00\x00\x00\x01\x00\x02\x00\x00\x00\x01\x00\x02\x00\x3c\x00\x3c\x00\x3c\x00\x0b\x00\x03\x00\x03\x00\x0d\x00\x03\x00\x0d\x00\x0d\x00\x03\x00\x0d\x00\x04\x00\x04\x00\x01\x00\x10\x00\x0d\x00\x0b\x00\x08\x00\x07\x00\x06\x00\x05\x00\x11\x00\x05\x00\x05\x00\xff\xff\x0f\x00\xff\xff\xff\xff\x0e\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"#++happyTable :: HappyAddr+happyTable = HappyA# "\x00\x00\x3f\x00\x2f\x00\x24\x00\x21\x00\x22\x00\x24\x00\x7d\x00\x04\x00\x40\x00\x0c\x00\x25\x00\x30\x00\x0f\x00\x25\x00\x09\x00\x67\x00\x23\x00\x0a\x00\x04\x00\x20\x00\x1b\x00\x7e\x00\x1c\x00\x0b\x00\x1d\x00\x1e\x00\x05\x00\x06\x00\x04\x00\x07\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x3d\x00\x06\x00\x0c\x00\x07\x00\x7c\x00\x0f\x00\x12\x00\x13\x00\x14\x00\x15\x00\x81\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x78\x00\x83\x00\x82\x00\x47\x00\x70\x00\x74\x00\xff\xff\x3f\x00\xff\xff\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x6f\x00\x40\x00\x17\x00\x12\x00\x13\x00\x14\x00\x15\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\x5f\x00\x24\x00\x76\x00\x27\x00\x28\x00\x29\x00\x57\x00\x72\x00\x77\x00\x25\x00\x45\x00\x44\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x04\x00\x33\x00\x34\x00\x35\x00\x04\x00\x2b\x00\x2c\x00\x2d\x00\x41\x00\x06\x00\x43\x00\x07\x00\x40\x00\x06\x00\x7f\x00\x07\x00\x33\x00\x34\x00\x35\x00\x2b\x00\x2c\x00\x2d\x00\x33\x00\x34\x00\x35\x00\x2b\x00\x2c\x00\x2d\x00\x27\x00\x28\x00\x29\x00\x17\x00\x18\x00\x19\x00\x1e\x00\x18\x00\x19\x00\x79\x00\x18\x00\x19\x00\x78\x00\x18\x00\x19\x00\x85\x00\x88\x00\x87\x00\x3c\x00\x3b\x00\x38\x00\x3a\x00\x35\x00\x39\x00\x37\x00\x31\x00\x36\x00\x30\x00\x2d\x00\x7a\x00\x65\x00\x29\x00\x25\x00\x72\x00\x70\x00\x55\x00\x7f\x00\x74\x00\x85\x00\x83\x00\x00\x00\x5d\x00\x00\x00\x00\x00\x45\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"#++happyReduceArr = Happy_Data_Array.array (2, 85) [+ (2 , happyReduce_2),+ (3 , happyReduce_3),+ (4 , happyReduce_4),+ (5 , happyReduce_5),+ (6 , happyReduce_6),+ (7 , happyReduce_7),+ (8 , happyReduce_8),+ (9 , happyReduce_9),+ (10 , happyReduce_10),+ (11 , happyReduce_11),+ (12 , happyReduce_12),+ (13 , happyReduce_13),+ (14 , happyReduce_14),+ (15 , happyReduce_15),+ (16 , happyReduce_16),+ (17 , happyReduce_17),+ (18 , happyReduce_18),+ (19 , happyReduce_19),+ (20 , happyReduce_20),+ (21 , happyReduce_21),+ (22 , happyReduce_22),+ (23 , happyReduce_23),+ (24 , happyReduce_24),+ (25 , happyReduce_25),+ (26 , happyReduce_26),+ (27 , happyReduce_27),+ (28 , happyReduce_28),+ (29 , happyReduce_29),+ (30 , happyReduce_30),+ (31 , happyReduce_31),+ (32 , happyReduce_32),+ (33 , happyReduce_33),+ (34 , happyReduce_34),+ (35 , happyReduce_35),+ (36 , happyReduce_36),+ (37 , happyReduce_37),+ (38 , happyReduce_38),+ (39 , happyReduce_39),+ (40 , happyReduce_40),+ (41 , happyReduce_41),+ (42 , happyReduce_42),+ (43 , happyReduce_43),+ (44 , happyReduce_44),+ (45 , happyReduce_45),+ (46 , happyReduce_46),+ (47 , happyReduce_47),+ (48 , happyReduce_48),+ (49 , happyReduce_49),+ (50 , happyReduce_50),+ (51 , happyReduce_51),+ (52 , happyReduce_52),+ (53 , happyReduce_53),+ (54 , happyReduce_54),+ (55 , happyReduce_55),+ (56 , happyReduce_56),+ (57 , happyReduce_57),+ (58 , happyReduce_58),+ (59 , happyReduce_59),+ (60 , happyReduce_60),+ (61 , happyReduce_61),+ (62 , happyReduce_62),+ (63 , happyReduce_63),+ (64 , happyReduce_64),+ (65 , happyReduce_65),+ (66 , happyReduce_66),+ (67 , happyReduce_67),+ (68 , happyReduce_68),+ (69 , happyReduce_69),+ (70 , happyReduce_70),+ (71 , happyReduce_71),+ (72 , happyReduce_72),+ (73 , happyReduce_73),+ (74 , happyReduce_74),+ (75 , happyReduce_75),+ (76 , happyReduce_76),+ (77 , happyReduce_77),+ (78 , happyReduce_78),+ (79 , happyReduce_79),+ (80 , happyReduce_80),+ (81 , happyReduce_81),+ (82 , happyReduce_82),+ (83 , happyReduce_83),+ (84 , happyReduce_84),+ (85 , happyReduce_85)+ ]++happy_n_terms = 63 :: Int+happy_n_nonterms = 18 :: Int++#if __GLASGOW_HASKELL__ >= 710+happyReduce_2 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_2 = happySpecReduce_1 0# happyReduction_2+happyReduction_2 happy_x_1+ = happyIn5+ (return True+ )++#if __GLASGOW_HASKELL__ >= 710+happyReduce_3 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_3 = happySpecReduce_2 0# happyReduction_3+happyReduction_3 happy_x_2+ happy_x_1+ = case happyOut5 happy_x_2 of { happy_var_2 -> + happyIn5+ (fmap not happy_var_2+ )}++#if __GLASGOW_HASKELL__ >= 710+happyReduce_4 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_4 = happySpecReduce_3 0# happyReduction_4+happyReduction_4 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut5 happy_x_1 of { happy_var_1 -> + case happyOut5 happy_x_3 of { happy_var_3 -> + happyIn5+ (liftA2 (&&) happy_var_1 happy_var_3+ )}}++#if __GLASGOW_HASKELL__ >= 710+happyReduce_5 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_5 = happySpecReduce_3 0# happyReduction_5+happyReduction_5 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut5 happy_x_1 of { happy_var_1 -> + case happyOut5 happy_x_3 of { happy_var_3 -> + happyIn5+ (liftA2 (||) happy_var_1 happy_var_3+ )}}++#if __GLASGOW_HASKELL__ >= 710+happyReduce_6 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_6 = happySpecReduce_1 0# happyReduction_6+happyReduction_6 happy_x_1+ = case happyOut6 happy_x_1 of { happy_var_1 -> + happyIn5+ (tkUsingPKP happy_var_1+ )}++#if __GLASGOW_HASKELL__ >= 710+happyReduce_7 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_7 = happySpecReduce_1 0# happyReduction_7+happyReduction_7 happy_x_1+ = case happyOut7 happy_x_1 of { happy_var_1 -> + happyIn5+ (happy_var_1+ )}++#if __GLASGOW_HASKELL__ >= 710+happyReduce_8 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_8 = happySpecReduce_3 1# happyReduction_8+happyReduction_8 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut8 happy_x_2 of { happy_var_2 -> + case happyOutTok happy_x_3 of { (TokenInt happy_var_3) -> + happyIn6+ (happy_var_2 (reader pkpGetPKVersion) (return happy_var_3)+ )}}++#if __GLASGOW_HASKELL__ >= 710+happyReduce_9 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_9 = happySpecReduce_3 1# happyReduction_9+happyReduction_9 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut8 happy_x_2 of { happy_var_2 -> + case happyOut11 happy_x_3 of { happy_var_3 -> + happyIn6+ (happy_var_2 (reader pkpGetPKAlgo) (return happy_var_3)+ )}}++#if __GLASGOW_HASKELL__ >= 710+happyReduce_10 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_10 = happySpecReduce_3 1# happyReduction_10+happyReduction_10 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut8 happy_x_2 of { happy_var_2 -> + case happyOutTok happy_x_3 of { (TokenInt happy_var_3) -> + happyIn6+ (happy_var_2 (reader pkpGetKeysize) (return happy_var_3)+ )}}++#if __GLASGOW_HASKELL__ >= 710+happyReduce_11 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_11 = happySpecReduce_3 1# happyReduction_11+happyReduction_11 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut8 happy_x_2 of { happy_var_2 -> + case happyOutTok happy_x_3 of { (TokenInt happy_var_3) -> + happyIn6+ (happy_var_2 (reader pkpGetTimestamp) (return happy_var_3)+ )}}++#if __GLASGOW_HASKELL__ >= 710+happyReduce_12 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_12 = happySpecReduce_3 1# happyReduction_12+happyReduction_12 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut9 happy_x_2 of { happy_var_2 -> + case happyOut12 happy_x_3 of { happy_var_3 -> + happyIn6+ (happy_var_2 (reader (show . pretty . pkpGetFingerprint)) (return happy_var_3)+ )}}++#if __GLASGOW_HASKELL__ >= 710+happyReduce_13 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_13 = happySpecReduce_3 1# happyReduction_13+happyReduction_13 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut9 happy_x_2 of { happy_var_2 -> + case happyOut13 happy_x_3 of { happy_var_3 -> + happyIn6+ (happy_var_2 (reader pkpGetEOKI) (return happy_var_3)+ )}}++#if __GLASGOW_HASKELL__ >= 710+happyReduce_14 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_14 = happyReduce 6# 2# happyReduction_14+happyReduction_14 (happy_x_6 `HappyStk`+ happy_x_5 `HappyStk`+ happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOut10 happy_x_5 of { happy_var_5 -> + case happyOutTok happy_x_6 of { (TokenStr happy_var_6) -> + happyIn7+ (withReader tkGetUIDs (anyOrAll allM (happy_var_5 (return (T.pack happy_var_6))))+ ) `HappyStk` happyRest}}++#if __GLASGOW_HASKELL__ >= 710+happyReduce_15 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_15 = happyReduce 6# 2# happyReduction_15+happyReduction_15 (happy_x_6 `HappyStk`+ happy_x_5 `HappyStk`+ happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOut10 happy_x_5 of { happy_var_5 -> + case happyOutTok happy_x_6 of { (TokenStr happy_var_6) -> + happyIn7+ (withReader tkGetUIDs (anyOrAll anyM (happy_var_5 (return (T.pack happy_var_6))))+ ) `HappyStk` happyRest}}++#if __GLASGOW_HASKELL__ >= 710+happyReduce_16 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_16 = happyReduce 5# 2# happyReduction_16+happyReduction_16 (happy_x_5 `HappyStk`+ happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOut10 happy_x_4 of { happy_var_4 -> + case happyOutTok happy_x_5 of { (TokenStr happy_var_5) -> + happyIn7+ (withReader tkGetUIDs (anyOrAll anyM (happy_var_4 (return (T.pack happy_var_5))))+ ) `HappyStk` happyRest}}++#if __GLASGOW_HASKELL__ >= 710+happyReduce_17 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_17 = happySpecReduce_3 2# happyReduction_17+happyReduction_17 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut6 happy_x_3 of { happy_var_3 -> + happyIn7+ (withReader tkGetSubs (anyReader happy_var_3)+ )}++#if __GLASGOW_HASKELL__ >= 710+happyReduce_18 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_18 = happySpecReduce_1 3# happyReduction_18+happyReduction_18 happy_x_1+ = happyIn8+ (liftA2 (==)+ )++#if __GLASGOW_HASKELL__ >= 710+happyReduce_19 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_19 = happySpecReduce_1 3# happyReduction_19+happyReduction_19 happy_x_1+ = happyIn8+ (liftA2 (<)+ )++#if __GLASGOW_HASKELL__ >= 710+happyReduce_20 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_20 = happySpecReduce_1 3# happyReduction_20+happyReduction_20 happy_x_1+ = happyIn8+ (liftA2 (>)+ )++#if __GLASGOW_HASKELL__ >= 710+happyReduce_21 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_21 = happySpecReduce_1 4# happyReduction_21+happyReduction_21 happy_x_1+ = happyIn9+ (liftA2 (==)+ )++#if __GLASGOW_HASKELL__ >= 710+happyReduce_22 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_22 = happySpecReduce_1 4# happyReduction_22+happyReduction_22 happy_x_1+ = happyIn9+ (liftA2 (flip isInfixOf)+ )++#if __GLASGOW_HASKELL__ >= 710+happyReduce_23 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_23 = happySpecReduce_1 5# happyReduction_23+happyReduction_23 happy_x_1+ = happyIn10+ (liftA2 (==)+ )++#if __GLASGOW_HASKELL__ >= 710+happyReduce_24 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_24 = happySpecReduce_1 5# happyReduction_24+happyReduction_24 happy_x_1+ = happyIn10+ (liftA2 T.isInfixOf+ )++#if __GLASGOW_HASKELL__ >= 710+happyReduce_25 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_25 = happySpecReduce_1 6# happyReduction_25+happyReduction_25 happy_x_1+ = happyIn11+ (fromIntegral (fromFVal RSA)+ )++#if __GLASGOW_HASKELL__ >= 710+happyReduce_26 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_26 = happySpecReduce_1 6# happyReduction_26+happyReduction_26 happy_x_1+ = happyIn11+ (fromIntegral (fromFVal DSA)+ )++#if __GLASGOW_HASKELL__ >= 710+happyReduce_27 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_27 = happySpecReduce_1 6# happyReduction_27+happyReduction_27 happy_x_1+ = happyIn11+ (fromIntegral (fromFVal ElgamalEncryptOnly)+ )++#if __GLASGOW_HASKELL__ >= 710+happyReduce_28 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_28 = happySpecReduce_1 6# happyReduction_28+happyReduction_28 happy_x_1+ = happyIn11+ (fromIntegral (fromFVal ECDSA)+ )++#if __GLASGOW_HASKELL__ >= 710+happyReduce_29 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_29 = happySpecReduce_1 6# happyReduction_29+happyReduction_29 happy_x_1+ = happyIn11+ (fromIntegral (fromFVal ECDH)+ )++#if __GLASGOW_HASKELL__ >= 710+happyReduce_30 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_30 = happySpecReduce_1 6# happyReduction_30+happyReduction_30 happy_x_1+ = happyIn11+ (fromIntegral (fromFVal DH)+ )++#if __GLASGOW_HASKELL__ >= 710+happyReduce_31 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_31 = happySpecReduce_1 6# happyReduction_31+happyReduction_31 happy_x_1+ = case happyOutTok happy_x_1 of { (TokenInt happy_var_1) -> + happyIn11+ (fromIntegral happy_var_1+ )}++#if __GLASGOW_HASKELL__ >= 710+happyReduce_32 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_32 = happySpecReduce_1 7# happyReduction_32+happyReduction_32 happy_x_1+ = case happyOutTok happy_x_1 of { (TokenFpr happy_var_1) -> + happyIn12+ ((show . pretty) happy_var_1+ )}++#if __GLASGOW_HASKELL__ >= 710+happyReduce_33 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_33 = happySpecReduce_1 8# happyReduction_33+happyReduction_33 happy_x_1+ = case happyOutTok happy_x_1 of { (TokenLongID happy_var_1) -> + happyIn13+ (either (const "BROKEN") show happy_var_1+ )}++#if __GLASGOW_HASKELL__ >= 710+happyReduce_34 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_34 = happySpecReduce_1 9# happyReduction_34+happyReduction_34 happy_x_1+ = happyIn14+ (return True+ )++#if __GLASGOW_HASKELL__ >= 710+happyReduce_35 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_35 = happySpecReduce_2 9# happyReduction_35+happyReduction_35 happy_x_2+ happy_x_1+ = case happyOut14 happy_x_2 of { happy_var_2 -> + happyIn14+ (fmap not happy_var_2+ )}++#if __GLASGOW_HASKELL__ >= 710+happyReduce_36 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_36 = happySpecReduce_3 9# happyReduction_36+happyReduction_36 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut14 happy_x_1 of { happy_var_1 -> + case happyOut14 happy_x_3 of { happy_var_3 -> + happyIn14+ (liftA2 (&&) happy_var_1 happy_var_3+ )}}++#if __GLASGOW_HASKELL__ >= 710+happyReduce_37 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_37 = happySpecReduce_3 9# happyReduction_37+happyReduction_37 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut14 happy_x_1 of { happy_var_1 -> + case happyOut14 happy_x_3 of { happy_var_3 -> + happyIn14+ (liftA2 (||) happy_var_1 happy_var_3+ )}}++#if __GLASGOW_HASKELL__ >= 710+happyReduce_38 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_38 = happySpecReduce_1 9# happyReduction_38+happyReduction_38 happy_x_1+ = case happyOut15 happy_x_1 of { happy_var_1 -> + happyIn14+ (happy_var_1+ )}++#if __GLASGOW_HASKELL__ >= 710+happyReduce_39 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_39 = happySpecReduce_1 9# happyReduction_39+happyReduction_39 happy_x_1+ = case happyOut17 happy_x_1 of { happy_var_1 -> + happyIn14+ (happy_var_1+ )}++#if __GLASGOW_HASKELL__ >= 710+happyReduce_40 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_40 = happySpecReduce_1 9# happyReduction_40+happyReduction_40 happy_x_1+ = case happyOut6 happy_x_1 of { happy_var_1 -> + happyIn14+ (pUsingPKP (maybeR True happy_var_1)+ )}++#if __GLASGOW_HASKELL__ >= 710+happyReduce_41 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_41 = happySpecReduce_3 10# happyReduction_41+happyReduction_41 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut16 happy_x_2 of { happy_var_2 -> + case happyOutTok happy_x_3 of { (TokenInt happy_var_3) -> + happyIn15+ (happy_var_2 (reader oGetTag) (return happy_var_3)+ )}}++#if __GLASGOW_HASKELL__ >= 710+happyReduce_42 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_42 = happySpecReduce_3 10# happyReduction_42+happyReduction_42 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut16 happy_x_2 of { happy_var_2 -> + case happyOutTok happy_x_3 of { (TokenInt happy_var_3) -> + happyIn15+ (happy_var_2 (reader oGetLength) (return happy_var_3)+ )}}++#if __GLASGOW_HASKELL__ >= 710+happyReduce_43 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_43 = happySpecReduce_1 11# happyReduction_43+happyReduction_43 happy_x_1+ = happyIn16+ (liftA2 (==)+ )++#if __GLASGOW_HASKELL__ >= 710+happyReduce_44 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_44 = happySpecReduce_1 11# happyReduction_44+happyReduction_44 happy_x_1+ = happyIn16+ (liftA2 (<)+ )++#if __GLASGOW_HASKELL__ >= 710+happyReduce_45 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_45 = happySpecReduce_1 11# happyReduction_45+happyReduction_45 happy_x_1+ = happyIn16+ (liftA2 (>)+ )++#if __GLASGOW_HASKELL__ >= 710+happyReduce_46 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_46 = happySpecReduce_3 12# happyReduction_46+happyReduction_46 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut18 happy_x_2 of { happy_var_2 -> + case happyOutTok happy_x_3 of { (TokenInt happy_var_3) -> + happyIn17+ (happy_var_2 (reader spGetSigVersion) (return (Just happy_var_3))+ )}}++#if __GLASGOW_HASKELL__ >= 710+happyReduce_47 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_47 = happySpecReduce_3 12# happyReduction_47+happyReduction_47 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut18 happy_x_2 of { happy_var_2 -> + case happyOut19 happy_x_3 of { happy_var_3 -> + happyIn17+ (happy_var_2 (reader spGetSigType) (return (Just happy_var_3))+ )}}++#if __GLASGOW_HASKELL__ >= 710+happyReduce_48 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_48 = happySpecReduce_3 12# happyReduction_48+happyReduction_48 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut18 happy_x_2 of { happy_var_2 -> + case happyOut20 happy_x_3 of { happy_var_3 -> + happyIn17+ (happy_var_2 (reader spGetPKAlgo) (return (Just happy_var_3))+ )}}++#if __GLASGOW_HASKELL__ >= 710+happyReduce_49 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_49 = happySpecReduce_3 12# happyReduction_49+happyReduction_49 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut18 happy_x_2 of { happy_var_2 -> + case happyOut21 happy_x_3 of { happy_var_3 -> + happyIn17+ (happy_var_2 (reader spGetHashAlgo) (return (Just happy_var_3))+ )}}++#if __GLASGOW_HASKELL__ >= 710+happyReduce_50 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_50 = happySpecReduce_3 12# happyReduction_50+happyReduction_50 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut18 happy_x_2 of { happy_var_2 -> + case happyOut22 happy_x_3 of { happy_var_3 -> + happyIn17+ (happy_var_2 (reader spGetSCT) (return (Just happy_var_3))+ )}}++#if __GLASGOW_HASKELL__ >= 710+happyReduce_51 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_51 = happySpecReduce_1 13# happyReduction_51+happyReduction_51 happy_x_1+ = happyIn18+ (liftA2 (==)+ )++#if __GLASGOW_HASKELL__ >= 710+happyReduce_52 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_52 = happySpecReduce_1 13# happyReduction_52+happyReduction_52 happy_x_1+ = happyIn18+ (liftA2 (<)+ )++#if __GLASGOW_HASKELL__ >= 710+happyReduce_53 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_53 = happySpecReduce_1 13# happyReduction_53+happyReduction_53 happy_x_1+ = happyIn18+ (liftA2 (>)+ )++#if __GLASGOW_HASKELL__ >= 710+happyReduce_54 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_54 = happySpecReduce_1 14# happyReduction_54+happyReduction_54 happy_x_1+ = happyIn19+ (fromIntegral (fromFVal BinarySig)+ )++#if __GLASGOW_HASKELL__ >= 710+happyReduce_55 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_55 = happySpecReduce_1 14# happyReduction_55+happyReduction_55 happy_x_1+ = happyIn19+ (fromIntegral (fromFVal CanonicalTextSig)+ )++#if __GLASGOW_HASKELL__ >= 710+happyReduce_56 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_56 = happySpecReduce_1 14# happyReduction_56+happyReduction_56 happy_x_1+ = happyIn19+ (fromIntegral (fromFVal StandaloneSig)+ )++#if __GLASGOW_HASKELL__ >= 710+happyReduce_57 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_57 = happySpecReduce_1 14# happyReduction_57+happyReduction_57 happy_x_1+ = happyIn19+ (fromIntegral (fromFVal GenericCert)+ )++#if __GLASGOW_HASKELL__ >= 710+happyReduce_58 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_58 = happySpecReduce_1 14# happyReduction_58+happyReduction_58 happy_x_1+ = happyIn19+ (fromIntegral (fromFVal PersonaCert)+ )++#if __GLASGOW_HASKELL__ >= 710+happyReduce_59 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_59 = happySpecReduce_1 14# happyReduction_59+happyReduction_59 happy_x_1+ = happyIn19+ (fromIntegral (fromFVal CasualCert)+ )++#if __GLASGOW_HASKELL__ >= 710+happyReduce_60 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_60 = happySpecReduce_1 14# happyReduction_60+happyReduction_60 happy_x_1+ = happyIn19+ (fromIntegral (fromFVal PositiveCert)+ )++#if __GLASGOW_HASKELL__ >= 710+happyReduce_61 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_61 = happySpecReduce_1 14# happyReduction_61+happyReduction_61 happy_x_1+ = happyIn19+ (fromIntegral (fromFVal SubkeyBindingSig)+ )++#if __GLASGOW_HASKELL__ >= 710+happyReduce_62 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_62 = happySpecReduce_1 14# happyReduction_62+happyReduction_62 happy_x_1+ = happyIn19+ (fromIntegral (fromFVal PrimaryKeyBindingSig)+ )++#if __GLASGOW_HASKELL__ >= 710+happyReduce_63 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_63 = happySpecReduce_1 14# happyReduction_63+happyReduction_63 happy_x_1+ = happyIn19+ (fromIntegral (fromFVal SignatureDirectlyOnAKey)+ )++#if __GLASGOW_HASKELL__ >= 710+happyReduce_64 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_64 = happySpecReduce_1 14# happyReduction_64+happyReduction_64 happy_x_1+ = happyIn19+ (fromIntegral (fromFVal KeyRevocationSig)+ )++#if __GLASGOW_HASKELL__ >= 710+happyReduce_65 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_65 = happySpecReduce_1 14# happyReduction_65+happyReduction_65 happy_x_1+ = happyIn19+ (fromIntegral (fromFVal SubkeyRevocationSig)+ )++#if __GLASGOW_HASKELL__ >= 710+happyReduce_66 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_66 = happySpecReduce_1 14# happyReduction_66+happyReduction_66 happy_x_1+ = happyIn19+ (fromIntegral (fromFVal CertRevocationSig)+ )++#if __GLASGOW_HASKELL__ >= 710+happyReduce_67 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_67 = happySpecReduce_1 14# happyReduction_67+happyReduction_67 happy_x_1+ = happyIn19+ (fromIntegral (fromFVal TimestampSig)+ )++#if __GLASGOW_HASKELL__ >= 710+happyReduce_68 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_68 = happySpecReduce_1 14# happyReduction_68+happyReduction_68 happy_x_1+ = case happyOutTok happy_x_1 of { (TokenInt happy_var_1) -> + happyIn19+ (fromIntegral happy_var_1+ )}++#if __GLASGOW_HASKELL__ >= 710+happyReduce_69 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_69 = happySpecReduce_1 15# happyReduction_69+happyReduction_69 happy_x_1+ = happyIn20+ (fromIntegral (fromFVal RSA)+ )++#if __GLASGOW_HASKELL__ >= 710+happyReduce_70 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_70 = happySpecReduce_1 15# happyReduction_70+happyReduction_70 happy_x_1+ = happyIn20+ (fromIntegral (fromFVal DSA)+ )++#if __GLASGOW_HASKELL__ >= 710+happyReduce_71 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_71 = happySpecReduce_1 15# happyReduction_71+happyReduction_71 happy_x_1+ = happyIn20+ (fromIntegral (fromFVal ElgamalEncryptOnly)+ )++#if __GLASGOW_HASKELL__ >= 710+happyReduce_72 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_72 = happySpecReduce_1 15# happyReduction_72+happyReduction_72 happy_x_1+ = happyIn20+ (fromIntegral (fromFVal ECDSA)+ )++#if __GLASGOW_HASKELL__ >= 710+happyReduce_73 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_73 = happySpecReduce_1 15# happyReduction_73+happyReduction_73 happy_x_1+ = happyIn20+ (fromIntegral (fromFVal ECDH)+ )++#if __GLASGOW_HASKELL__ >= 710+happyReduce_74 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_74 = happySpecReduce_1 15# happyReduction_74+happyReduction_74 happy_x_1+ = happyIn20+ (fromIntegral (fromFVal DH)+ )++#if __GLASGOW_HASKELL__ >= 710+happyReduce_75 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_75 = happySpecReduce_1 15# happyReduction_75+happyReduction_75 happy_x_1+ = case happyOutTok happy_x_1 of { (TokenInt happy_var_1) -> + happyIn20+ (fromIntegral happy_var_1+ )}++#if __GLASGOW_HASKELL__ >= 710+happyReduce_76 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_76 = happySpecReduce_1 16# happyReduction_76+happyReduction_76 happy_x_1+ = happyIn21+ (fromIntegral (fromFVal DeprecatedMD5)+ )++#if __GLASGOW_HASKELL__ >= 710+happyReduce_77 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_77 = happySpecReduce_1 16# happyReduction_77+happyReduction_77 happy_x_1+ = happyIn21+ (fromIntegral (fromFVal SHA1)+ )++#if __GLASGOW_HASKELL__ >= 710+happyReduce_78 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_78 = happySpecReduce_1 16# happyReduction_78+happyReduction_78 happy_x_1+ = happyIn21+ (fromIntegral (fromFVal RIPEMD160)+ )++#if __GLASGOW_HASKELL__ >= 710+happyReduce_79 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_79 = happySpecReduce_1 16# happyReduction_79+happyReduction_79 happy_x_1+ = happyIn21+ (fromIntegral (fromFVal SHA256)+ )++#if __GLASGOW_HASKELL__ >= 710+happyReduce_80 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_80 = happySpecReduce_1 16# happyReduction_80+happyReduction_80 happy_x_1+ = happyIn21+ (fromIntegral (fromFVal SHA384)+ )++#if __GLASGOW_HASKELL__ >= 710+happyReduce_81 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_81 = happySpecReduce_1 16# happyReduction_81+happyReduction_81 happy_x_1+ = happyIn21+ (fromIntegral (fromFVal SHA512)+ )++#if __GLASGOW_HASKELL__ >= 710+happyReduce_82 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_82 = happySpecReduce_1 16# happyReduction_82+happyReduction_82 happy_x_1+ = happyIn21+ (fromIntegral (fromFVal SHA224)+ )++#if __GLASGOW_HASKELL__ >= 710+happyReduce_83 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_83 = happySpecReduce_1 16# happyReduction_83+happyReduction_83 happy_x_1+ = case happyOutTok happy_x_1 of { (TokenInt happy_var_1) -> + happyIn21+ (fromIntegral happy_var_1+ )}++#if __GLASGOW_HASKELL__ >= 710+happyReduce_84 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_84 = happySpecReduce_1 17# happyReduction_84+happyReduction_84 happy_x_1+ = happyIn22+ (0+ )++#if __GLASGOW_HASKELL__ >= 710+happyReduce_85 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_85 = happySpecReduce_1 17# happyReduction_85+happyReduction_85 happy_x_1+ = case happyOutTok happy_x_1 of { (TokenInt happy_var_1) -> + happyIn22+ (fromIntegral happy_var_1+ )}++happyNewToken action sts stk+ = lexwrap(\tk -> + let cont i = happyDoAction i tk action sts stk in+ case tk of {+ TokenEOF -> happyDoAction 62# tk action sts stk;+ TokenA -> cont 1#;+ TokenAnd -> cont 2#;+ TokenAny -> cont 3#;+ TokenContains -> cont 4#;+ TokenEvery -> cont 5#;+ TokenNot -> cont 6#;+ TokenNow -> cont 7#;+ TokenOf -> cont 8#;+ TokenOne -> cont 9#;+ TokenOr -> cont 10#;+ TokenSubkey -> cont 11#;+ TokenTag -> cont 12#;+ TokenInt happy_dollar_dollar -> cont 13#;+ TokenEq -> cont 14#;+ TokenLt -> cont 15#;+ TokenGt -> cont 16#;+ TokenLParen -> cont 17#;+ TokenRParen -> cont 18#;+ TokenPKVersion -> cont 19#;+ TokenSigVersion -> cont 20#;+ TokenSigType -> cont 21#;+ TokenPKAlgo -> cont 22#;+ TokenSigPKAlgo -> cont 23#;+ TokenHashAlgo -> cont 24#;+ TokenRSA -> cont 25#;+ TokenDSA -> cont 26#;+ TokenElgamal -> cont 27#;+ TokenECDSA -> cont 28#;+ TokenECDH -> cont 29#;+ TokenDH -> cont 30#;+ TokenBinary -> cont 31#;+ TokenCanonicalText -> cont 32#;+ TokenStandalone -> cont 33#;+ TokenGenericCert -> cont 34#;+ TokenPersonaCert -> cont 35#;+ TokenCasualCert -> cont 36#;+ TokenPositiveCert -> cont 37#;+ TokenSubkeyBindingSig -> cont 38#;+ TokenPrimaryKeyBindingSig -> cont 39#;+ TokenSignatureDirectlyOnAKey -> cont 40#;+ TokenKeyRevocationSig -> cont 41#;+ TokenSubkeyRevocationSig -> cont 42#;+ TokenCertRevocationSig -> cont 43#;+ TokenTimestampSig -> cont 44#;+ TokenMD5 -> cont 45#;+ TokenSHA1 -> cont 46#;+ TokenRIPEMD160 -> cont 47#;+ TokenSHA256 -> cont 48#;+ TokenSHA384 -> cont 49#;+ TokenSHA512 -> cont 50#;+ TokenSHA224 -> cont 51#;+ TokenKeysize -> cont 52#;+ TokenTimestamp -> cont 53#;+ TokenFingerprint -> cont 54#;+ TokenKeyID -> cont 55#;+ TokenSigCreationTime -> cont 56#;+ TokenFpr happy_dollar_dollar -> cont 57#;+ TokenLongID happy_dollar_dollar -> cont 58#;+ TokenLength -> cont 59#;+ TokenStr happy_dollar_dollar -> cont 60#;+ TokenUids -> cont 61#;+ _ -> happyError' (tk, [])+ })++happyError_ explist 62# tk = happyError' (tk, explist)+happyError_ explist _ tk = happyError' (tk, explist)++happyThen :: () => Alex a -> (a -> Alex b) -> Alex b+happyThen = (>>=)+happyReturn :: () => a -> Alex a+happyReturn = (return)+#if __GLASGOW_HASKELL__ >= 710+happyParse :: () => Happy_GHC_Exts.Int# -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)++happyNewToken :: () => Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)++happyDoAction :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)++happyReduceArr :: () => Happy_Data_Array.Array Int (Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _))++#endif+happyThen1 :: () => Alex a -> (a -> Alex b) -> Alex b+happyThen1 = happyThen+happyReturn1 :: () => a -> Alex a+happyReturn1 = happyReturn+happyError' :: () => ((Token), [String]) -> Alex a+happyError' tk = (\(tokens, _) -> happyError tokens) tk+parseTK = happySomeParser where+ happySomeParser = happyThen (happyParse 0#) (\x -> happyReturn (let {x' = happyOut5 x} in x'))++parseP = happySomeParser where+ happySomeParser = happyThen (happyParse 1#) (\x -> happyReturn (let {x' = happyOut14 x} in x'))++happySeq = happyDontSeq+++lexwrap :: (Token -> Alex a) -> Alex a+lexwrap cont = do+ t <- alexMonadScan'+ cont t++alexMonadScan' = do+ inp <- alexGetInput+ sc <- alexGetStartCode+ case alexScan inp sc of+ AlexEOF -> alexEOF+ AlexError (pos, _, _, _) -> alexError (show pos)+ AlexSkip inp' len -> do+ alexSetInput inp'+ alexMonadScan'+ AlexToken inp' len action -> do+ alexSetInput inp'+ action (ignorePendingBytes inp) len++getPosn :: Alex (Int,Int)+getPosn = do+ (AlexPn _ l c,_,_,_) <- alexGetInput+ return (l,c)++happyError :: Token -> Alex a+happyError t = do+ (l,c) <- getPosn+ error (show l ++ ":" ++ show c ++ ": Parse error on Token: " ++ show t ++ "\n")++parseTKExp :: String -> Either String (Reader TK Bool)+parseTKExp s = runAlex s parseTK++parsePExp :: String -> Either String (Reader Pkt Bool)+parsePExp s = runAlex s parseP+{-# LINE 1 "templates/GenericTemplate.hs" #-}+-- $Id: GenericTemplate.hs,v 1.26 2005/01/14 14:47:22 simonmar Exp $++++++++++++++-- Do not remove this comment. Required to fix CPP parsing when using GCC and a clang-compiled alex.+#if __GLASGOW_HASKELL__ > 706+#define LT(n,m) ((Happy_GHC_Exts.tagToEnum# (n Happy_GHC_Exts.<# m)) :: Bool)+#define GTE(n,m) ((Happy_GHC_Exts.tagToEnum# (n Happy_GHC_Exts.>=# m)) :: Bool)+#define EQ(n,m) ((Happy_GHC_Exts.tagToEnum# (n Happy_GHC_Exts.==# m)) :: Bool)+#else+#define LT(n,m) (n Happy_GHC_Exts.<# m)+#define GTE(n,m) (n Happy_GHC_Exts.>=# m)+#define EQ(n,m) (n Happy_GHC_Exts.==# m)+#endif++++++++++++++++++++data Happy_IntList = HappyCons Happy_GHC_Exts.Int# Happy_IntList+++++++++++++++++++++++++++++++++++++++++infixr 9 `HappyStk`+data HappyStk a = HappyStk a (HappyStk a)++-----------------------------------------------------------------------------+-- starting the parse++happyParse start_state = happyNewToken start_state notHappyAtAll notHappyAtAll++-----------------------------------------------------------------------------+-- Accepting the parse++-- If the current token is ERROR_TOK, it means we've just accepted a partial+-- parse (a %partial parser). We must ignore the saved token on the top of+-- the stack in this case.+happyAccept 0# tk st sts (_ `HappyStk` ans `HappyStk` _) =+ happyReturn1 ans+happyAccept j tk st sts (HappyStk ans _) = + (happyTcHack j (happyTcHack st)) (happyReturn1 ans)++-----------------------------------------------------------------------------+-- Arrays only: do the next action++++happyDoAction i tk st+ = {- nothing -}+ case action of+ 0# -> {- nothing -}+ happyFail (happyExpListPerState ((Happy_GHC_Exts.I# (st)) :: Int)) i tk st+ -1# -> {- nothing -}+ happyAccept i tk st+ n | LT(n,(0# :: Happy_GHC_Exts.Int#)) -> {- nothing -}+ (happyReduceArr Happy_Data_Array.! rule) i tk st+ where rule = (Happy_GHC_Exts.I# ((Happy_GHC_Exts.negateInt# ((n Happy_GHC_Exts.+# (1# :: Happy_GHC_Exts.Int#))))))+ n -> {- nothing -}+ happyShift new_state i tk st+ where new_state = (n Happy_GHC_Exts.-# (1# :: Happy_GHC_Exts.Int#))+ where off = happyAdjustOffset (indexShortOffAddr happyActOffsets st)+ off_i = (off Happy_GHC_Exts.+# i)+ check = if GTE(off_i,(0# :: Happy_GHC_Exts.Int#))+ then EQ(indexShortOffAddr happyCheck off_i, i)+ else False+ action+ | check = indexShortOffAddr happyTable off_i+ | otherwise = indexShortOffAddr happyDefActions st+++++indexShortOffAddr (HappyA# arr) off =+ Happy_GHC_Exts.narrow16Int# i+ where+ i = Happy_GHC_Exts.word2Int# (Happy_GHC_Exts.or# (Happy_GHC_Exts.uncheckedShiftL# high 8#) low)+ high = Happy_GHC_Exts.int2Word# (Happy_GHC_Exts.ord# (Happy_GHC_Exts.indexCharOffAddr# arr (off' Happy_GHC_Exts.+# 1#)))+ low = Happy_GHC_Exts.int2Word# (Happy_GHC_Exts.ord# (Happy_GHC_Exts.indexCharOffAddr# arr off'))+ off' = off Happy_GHC_Exts.*# 2#+++++{-# INLINE happyLt #-}+happyLt x y = LT(x,y)+++readArrayBit arr bit =+ Bits.testBit (Happy_GHC_Exts.I# (indexShortOffAddr arr ((unbox_int bit) `Happy_GHC_Exts.iShiftRA#` 4#))) (bit `mod` 16)+ where unbox_int (Happy_GHC_Exts.I# x) = x+++++++data HappyAddr = HappyA# Happy_GHC_Exts.Addr#+++-----------------------------------------------------------------------------+-- HappyState data type (not arrays)++++++++++++++-----------------------------------------------------------------------------+-- Shifting a token++happyShift new_state 0# tk st sts stk@(x `HappyStk` _) =+ let i = (case Happy_GHC_Exts.unsafeCoerce# x of { (Happy_GHC_Exts.I# (i)) -> i }) in+-- trace "shifting the error token" $+ happyDoAction i tk new_state (HappyCons (st) (sts)) (stk)++happyShift new_state i tk st sts stk =+ happyNewToken new_state (HappyCons (st) (sts)) ((happyInTok (tk))`HappyStk`stk)++-- happyReduce is specialised for the common cases.++happySpecReduce_0 i fn 0# tk st sts stk+ = happyFail [] 0# tk st sts stk+happySpecReduce_0 nt fn j tk st@((action)) sts stk+ = happyGoto nt j tk st (HappyCons (st) (sts)) (fn `HappyStk` stk)++happySpecReduce_1 i fn 0# tk st sts stk+ = happyFail [] 0# tk st sts stk+happySpecReduce_1 nt fn j tk _ sts@((HappyCons (st@(action)) (_))) (v1`HappyStk`stk')+ = let r = fn v1 in+ happySeq r (happyGoto nt j tk st sts (r `HappyStk` stk'))++happySpecReduce_2 i fn 0# tk st sts stk+ = happyFail [] 0# tk st sts stk+happySpecReduce_2 nt fn j tk _ (HappyCons (_) (sts@((HappyCons (st@(action)) (_))))) (v1`HappyStk`v2`HappyStk`stk')+ = let r = fn v1 v2 in+ happySeq r (happyGoto nt j tk st sts (r `HappyStk` stk'))++happySpecReduce_3 i fn 0# tk st sts stk+ = happyFail [] 0# tk st sts stk+happySpecReduce_3 nt fn j tk _ (HappyCons (_) ((HappyCons (_) (sts@((HappyCons (st@(action)) (_))))))) (v1`HappyStk`v2`HappyStk`v3`HappyStk`stk')+ = let r = fn v1 v2 v3 in+ happySeq r (happyGoto nt j tk st sts (r `HappyStk` stk'))++happyReduce k i fn 0# tk st sts stk+ = happyFail [] 0# tk st sts stk+happyReduce k nt fn j tk st sts stk+ = case happyDrop (k Happy_GHC_Exts.-# (1# :: Happy_GHC_Exts.Int#)) sts of+ sts1@((HappyCons (st1@(action)) (_))) ->+ let r = fn stk in -- it doesn't hurt to always seq here...+ happyDoSeq r (happyGoto nt j tk st1 sts1 r)++happyMonadReduce k nt fn 0# tk st sts stk+ = happyFail [] 0# tk st sts stk+happyMonadReduce k nt fn j tk st sts stk =+ case happyDrop k (HappyCons (st) (sts)) of+ sts1@((HappyCons (st1@(action)) (_))) ->+ let drop_stk = happyDropStk k stk in+ happyThen1 (fn stk tk) (\r -> happyGoto nt j tk st1 sts1 (r `HappyStk` drop_stk))++happyMonad2Reduce k nt fn 0# tk st sts stk+ = happyFail [] 0# tk st sts stk+happyMonad2Reduce k nt fn j tk st sts stk =+ case happyDrop k (HappyCons (st) (sts)) of+ sts1@((HappyCons (st1@(action)) (_))) ->+ let drop_stk = happyDropStk k stk++ off = happyAdjustOffset (indexShortOffAddr happyGotoOffsets st1)+ off_i = (off Happy_GHC_Exts.+# nt)+ new_state = indexShortOffAddr happyTable off_i+++++ in+ happyThen1 (fn stk tk) (\r -> happyNewToken new_state sts1 (r `HappyStk` drop_stk))++happyDrop 0# l = l+happyDrop n (HappyCons (_) (t)) = happyDrop (n Happy_GHC_Exts.-# (1# :: Happy_GHC_Exts.Int#)) t++happyDropStk 0# l = l+happyDropStk n (x `HappyStk` xs) = happyDropStk (n Happy_GHC_Exts.-# (1#::Happy_GHC_Exts.Int#)) xs++-----------------------------------------------------------------------------+-- Moving to a new state after a reduction+++happyGoto nt j tk st = + {- nothing -}+ happyDoAction j tk new_state+ where off = happyAdjustOffset (indexShortOffAddr happyGotoOffsets st)+ off_i = (off Happy_GHC_Exts.+# nt)+ new_state = indexShortOffAddr happyTable off_i+++++-----------------------------------------------------------------------------+-- Error recovery (ERROR_TOK is the error token)++-- parse error if we are in recovery and we fail again+happyFail explist 0# tk old_st _ stk@(x `HappyStk` _) =+ let i = (case Happy_GHC_Exts.unsafeCoerce# x of { (Happy_GHC_Exts.I# (i)) -> i }) in+-- trace "failing" $ + happyError_ explist i tk++{- We don't need state discarding for our restricted implementation of+ "error". In fact, it can cause some bogus parses, so I've disabled it+ for now --SDM++-- discard a state+happyFail ERROR_TOK tk old_st CONS(HAPPYSTATE(action),sts) + (saved_tok `HappyStk` _ `HappyStk` stk) =+-- trace ("discarding state, depth " ++ show (length stk)) $+ DO_ACTION(action,ERROR_TOK,tk,sts,(saved_tok`HappyStk`stk))+-}++-- Enter error recovery: generate an error token,+-- save the old token and carry on.+happyFail explist i tk (action) sts stk =+-- trace "entering error recovery" $+ happyDoAction 0# tk action sts ((Happy_GHC_Exts.unsafeCoerce# (Happy_GHC_Exts.I# (i))) `HappyStk` stk)++-- Internal happy errors:++notHappyAtAll :: a+notHappyAtAll = error "Internal Happy error\n"++-----------------------------------------------------------------------------+-- Hack to get the typechecker to accept our action functions+++happyTcHack :: Happy_GHC_Exts.Int# -> a -> a+happyTcHack x y = y+{-# INLINE happyTcHack #-}+++-----------------------------------------------------------------------------+-- Seq-ing. If the --strict flag is given, then Happy emits +-- happySeq = happyDoSeq+-- otherwise it emits+-- happySeq = happyDontSeq++happyDoSeq, happyDontSeq :: a -> b -> b+happyDoSeq a b = a `seq` b+happyDontSeq a b = b++-----------------------------------------------------------------------------+-- Don't inline any functions from the template. GHC has a nasty habit+-- of deciding to inline happyGoto everywhere, which increases the size of+-- the generated parser quite a bit.+++{-# NOINLINE happyDoAction #-}+{-# NOINLINE happyTable #-}+{-# NOINLINE happyCheck #-}+{-# NOINLINE happyActOffsets #-}+{-# NOINLINE happyGotoOffsets #-}+{-# NOINLINE happyDefActions #-}++{-# NOINLINE happyShift #-}+{-# NOINLINE happySpecReduce_0 #-}+{-# NOINLINE happySpecReduce_1 #-}+{-# NOINLINE happySpecReduce_2 #-}+{-# NOINLINE happySpecReduce_3 #-}+{-# NOINLINE happyReduce #-}+{-# NOINLINE happyMonadReduce #-}+{-# NOINLINE happyGoto #-}+{-# NOINLINE happyFail #-}++-- end of Happy Template.
+ dist/build/hop/hop-tmp/HOpenPGP/Tools/Lexer.hs view
@@ -0,0 +1,1577 @@+{-# OPTIONS_GHC -fno-warn-unused-binds -fno-warn-missing-signatures #-}+{-# LANGUAGE CPP,MagicHash #-}+{-# LINE 1 "HOpenPGP/Tools/Lexer.x" #-}++{-# OPTIONS -w #-}+module HOpenPGP.Tools.Lexer+( alexEOF+, alexSetInput+, alexGetInput+, alexError+, alexScan+, ignorePendingBytes+, alexGetStartCode+, runAlex+, Alex(..)+, Token(..)+, AlexReturn(..)+, AlexPosn(..)+) where++import Prelude hiding (lex)+import Numeric (readHex)+import Codec.Encryption.OpenPGP.Types (TwentyOctetFingerprint(..), EightOctetKeyId(..))+++#if __GLASGOW_HASKELL__ >= 603+#include "ghcconfig.h"+#elif defined(__GLASGOW_HASKELL__)+#include "config.h"+#endif+#if __GLASGOW_HASKELL__ >= 503+import Data.Array+#else+import Array+#endif+#if __GLASGOW_HASKELL__ >= 503+import Data.Array.Base (unsafeAt)+import GHC.Exts+#else+import GlaExts+#endif+{-# 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.+++import Control.Applicative as App (Applicative (..))+++import Data.Word (Word8)+++++++++++++++++import Data.Char (ord)+import qualified Data.Bits++-- | Encode a Haskell String to a list of Word8 values, in UTF8 format.+utf8Encode :: Char -> [Word8]+utf8Encode = uncurry (:) . utf8Encode'++utf8Encode' :: Char -> (Word8, [Word8])+utf8Encode' c = case go (ord c) of+ (x, xs) -> (fromIntegral x, map fromIntegral xs)+ where+ go oc+ | oc <= 0x7f = ( oc+ , [+ ])++ | oc <= 0x7ff = ( 0xc0 + (oc `Data.Bits.shiftR` 6)+ , [0x80 + oc Data.Bits..&. 0x3f+ ])++ | oc <= 0xffff = ( 0xe0 + (oc `Data.Bits.shiftR` 12)+ , [0x80 + ((oc `Data.Bits.shiftR` 6) Data.Bits..&. 0x3f)+ , 0x80 + oc Data.Bits..&. 0x3f+ ])+ | otherwise = ( 0xf0 + (oc `Data.Bits.shiftR` 18)+ , [0x80 + ((oc `Data.Bits.shiftR` 12) Data.Bits..&. 0x3f)+ , 0x80 + ((oc `Data.Bits.shiftR` 6) Data.Bits..&. 0x3f)+ , 0x80 + oc Data.Bits..&. 0x3f+ ])++++type Byte = Word8++-- -----------------------------------------------------------------------------+-- The input type+++type AlexInput = (AlexPosn, -- current position,+ Char, -- previous char+ [Byte], -- pending bytes on current char+ String) -- current input string++ignorePendingBytes :: AlexInput -> AlexInput+ignorePendingBytes (p,c,_ps,s) = (p,c,[],s)++alexInputPrevChar :: AlexInput -> Char+alexInputPrevChar (_p,c,_bs,_s) = c++alexGetByte :: AlexInput -> Maybe (Byte,AlexInput)+alexGetByte (p,c,(b:bs),s) = Just (b,(p,c,bs,s))+alexGetByte (_,_,[],[]) = Nothing+alexGetByte (p,_,[],(c:s)) = let p' = alexMove p c+ in case utf8Encode' c of+ (b, bs) -> p' `seq` Just (b, (p', c, bs, s))++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-- -----------------------------------------------------------------------------+-- 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+alex_tab_size-((c-1) `mod` alex_tab_size))+alexMove (AlexPn a l _) '\n' = AlexPn (a+1) (l+1) 1+alexMove (AlexPn a l c) _ = AlexPn (a+1) l (c+1)+++-- -----------------------------------------------------------------------------+-- Monad (default and with ByteString input)+++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_bytes :: [Byte],++++++ alex_scd :: !Int -- the current startcode++++ }++-- Compile with -funbox-strict-fields for best results!+++runAlex :: String -> Alex a -> Either String a+runAlex input__ (Alex f)+ = case f (AlexState {alex_bytes = [],++++++ alex_pos = alexStartPos,+ alex_inp = input__,+ alex_chr = '\n',++++ alex_scd = 0}) of Left msg -> Left msg+ Right ( _, a ) -> Right a++newtype Alex a = Alex { unAlex :: AlexState -> Either String (AlexState, a) }++instance Functor Alex where+ fmap f a = Alex $ \s -> case unAlex a s of+ Left msg -> Left msg+ Right (s', a') -> Right (s', f a')++instance Applicative Alex where+ pure a = Alex $ \s -> Right (s, a)+ fa <*> a = Alex $ \s -> case unAlex fa s of+ Left msg -> Left msg+ Right (s', f) -> case unAlex a s' of+ Left msg -> Left msg+ Right (s'', b) -> Right (s'', f b)++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 = App.pure++alexGetInput :: Alex AlexInput+alexGetInput++ = Alex $ \s@AlexState{alex_pos=pos,alex_chr=c,alex_bytes=bs,alex_inp=inp__} ->+ Right (s, (pos,c,bs,inp__))++++++alexSetInput :: AlexInput -> Alex ()++alexSetInput (pos,c,bs,inp__)+ = Alex $ \s -> case s{alex_pos=pos,alex_chr=c,alex_bytes=bs,alex_inp=inp__} of++++++++ state__@(AlexState{}) -> Right (state__, ())++alexError :: String -> Alex a+alexError message = Alex $ const $ 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 ((AlexPn _ line column),_,_,_) -> alexError $ "lexical error at line " ++ (show line) ++ ", column " ++ (show column)+ AlexSkip inp__' _len -> do+ alexSetInput inp__'+ alexMonadScan++ AlexToken inp__' len action -> do++++ alexSetInput inp__'+ action (ignorePendingBytes inp__) len++-- -----------------------------------------------------------------------------+-- Useful token actions+++type AlexAction result = AlexInput -> Int -> Alex 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 :: (AlexInput -> Int -> token) -> AlexAction token++++token t input__ len = return (t input__ len)++++-- -----------------------------------------------------------------------------+-- Basic wrapper+++++++++++++++++++++++++-- -----------------------------------------------------------------------------+-- Basic wrapper, ByteString version+++++++++++++++++++++++++++++++++-- -----------------------------------------------------------------------------+-- Posn wrapper++-- Adds text positions to the basic model.++++++++++++++-- -----------------------------------------------------------------------------+-- Posn wrapper, ByteString version+++++++++++++++-- -----------------------------------------------------------------------------+-- GScan wrapper++-- For compatibility with previous versions of Alex, and because we can.+++++++++++++++alex_tab_size :: Int+alex_tab_size = 8+alex_base :: AlexAddr+alex_base = AlexA#+ "\xf8\xff\xff\xff\x8d\xff\xff\xff\xa2\xff\xff\xff\x8f\xff\xff\xff\xa3\xff\xff\xff\x96\xff\xff\xff\x98\xff\xff\xff\xa7\xff\xff\xff\x9e\xff\xff\xff\x9f\xff\xff\xff\xa0\xff\xff\xff\xd1\xff\xff\xff\xd2\xff\xff\xff\xd6\xff\xff\xff\x97\xff\xff\xff\xac\xff\xff\xff\xad\xff\xff\xff\xae\xff\xff\xff\x9d\xff\xff\xff\xb2\xff\xff\xff\xb4\xff\xff\xff\xb5\xff\xff\xff\xb6\xff\xff\xff\xe9\xff\xff\xff\xf1\xff\xff\xff\xc5\xff\xff\xff\xba\xff\xff\xff\xc0\xff\xff\xff\xb8\xff\xff\xff\xdc\xff\xff\xff\xe5\xff\xff\xff\xd3\xff\xff\xff\xd5\xff\xff\xff\xe0\xff\xff\xff\xe2\xff\xff\xff\xe8\xff\xff\xff\x0e\x00\x00\x00\xef\xff\xff\xff\xea\xff\xff\xff\xeb\xff\xff\xff\xec\xff\xff\xff\xed\xff\xff\xff\xf9\xff\xff\xff\x05\x00\x00\x00\x06\x00\x00\x00\x11\x00\x00\x00\x23\x00\x00\x00\x38\x00\x00\x00\x03\x00\x00\x00\x1f\x00\x00\x00\x07\x00\x00\x00\x10\x00\x00\x00\x08\x00\x00\x00\x15\x00\x00\x00\x0f\x00\x00\x00\x12\x00\x00\x00\x13\x00\x00\x00\x01\x00\x00\x00\x0c\x00\x00\x00\x1c\x00\x00\x00\x19\x00\x00\x00\x14\x00\x00\x00\x1a\x00\x00\x00\x1b\x00\x00\x00\x1d\x00\x00\x00\x20\x00\x00\x00\x31\x00\x00\x00\x33\x00\x00\x00\x3c\x00\x00\x00\x36\x00\x00\x00\x37\x00\x00\x00\x39\x00\x00\x00\x3a\x00\x00\x00\x5a\x00\x00\x00\x45\x00\x00\x00\x26\x00\x00\x00\x29\x00\x00\x00\x32\x00\x00\x00\x2b\x00\x00\x00\x1e\x00\x00\x00\x2c\x00\x00\x00\x2f\x00\x00\x00\x21\x00\x00\x00\x3b\x00\x00\x00\x25\x00\x00\x00\x27\x00\x00\x00\xee\x00\x00\x00\xef\x00\x00\x00\xf0\x00\x00\x00\xf1\x00\x00\x00\x3d\x00\x00\x00\xf2\x00\x00\x00\xf3\x00\x00\x00\xf4\x00\x00\x00\xf5\x00\x00\x00\x34\x00\x00\x00\x3e\x00\x00\x00\xf8\x00\x00\x00\x43\x00\x00\x00\xe6\x00\x00\x00\x44\x00\x00\x00\xcc\x00\x00\x00\x9b\x01\x00\x00\x9c\x01\x00\x00\xe9\x00\x00\x00\xf6\x00\x00\x00\x3f\x00\x00\x00\x40\x00\x00\x00\x41\x00\x00\x00\xd5\x00\x00\x00\x2a\x00\x00\x00\x2e\x00\x00\x00\x30\x00\x00\x00\xce\x00\x00\x00\xf7\x00\x00\x00\xd7\x00\x00\x00\xcb\x00\x00\x00\xda\x00\x00\x00\xdb\x00\x00\x00\xcf\x00\x00\x00\xe0\x00\x00\x00\xdc\x00\x00\x00\xe2\x00\x00\x00\xdd\x00\x00\x00\xde\x00\x00\x00\x99\x01\x00\x00\xdf\x00\x00\x00\xe1\x00\x00\x00\xe3\x00\x00\x00\xe8\x00\x00\x00\xa4\x01\x00\x00\xf9\x00\x00\x00\xe4\x00\x00\x00\xea\x00\x00\x00\xeb\x00\x00\x00\xec\x00\x00\x00\xd8\x00\x00\x00\xfa\x00\x00\x00\x28\x00\x00\x00\xed\x00\x00\x00\xfb\x00\x00\x00\x81\x01\x00\x00\x82\x01\x00\x00\xfe\x00\x00\x00\xfc\x00\x00\x00\x79\x01\x00\x00\x01\x01\x00\x00\x8c\x01\x00\x00\x8d\x01\x00\x00\x7c\x01\x00\x00\x89\x01\x00\x00\x88\x01\x00\x00\x8a\x01\x00\x00\x8b\x01\x00\x00\x8f\x01\x00\x00\x92\x01\x00\x00\x93\x01\x00\x00\x94\x01\x00\x00\x96\x01\x00\x00\x8e\x01\x00\x00\x95\x01\x00\x00\x85\x01\x00\x00\x98\x01\x00\x00\x90\x01\x00\x00\x9d\x01\x00\x00\xa0\x01\x00\x00\x91\x01\x00\x00\x97\x01\x00\x00\x9a\x01\x00\x00\x9e\x01\x00\x00\x9f\x01\x00\x00\xa7\x01\x00\x00\xac\x01\x00\x00\xad\x01\x00\x00\xaf\x01\x00\x00\xb0\x01\x00\x00\xb1\x01\x00\x00\xae\x01\x00\x00\xb7\x01\x00\x00\xb2\x01\x00\x00\xa1\x01\x00\x00\xa3\x01\x00\x00\xb3\x01\x00\x00\xb8\x01\x00\x00\xa2\x01\x00\x00\xb4\x01\x00\x00\xe7\x00\x00\x00\xb5\x01\x00\x00\xbe\x01\x00\x00\xb6\x01\x00\x00\xb9\x01\x00\x00\xba\x01\x00\x00\xbb\x01\x00\x00\xc1\x01\x00\x00\xc2\x01\x00\x00\xce\x01\x00\x00\xd1\x01\x00\x00\xbc\x01\x00\x00\xbf\x01\x00\x00\xbd\x01\x00\x00\xc0\x01\x00\x00\xc3\x01\x00\x00\xe4\x01\x00\x00\xe5\x01\x00\x00\xc4\x01\x00\x00\xc6\x01\x00\x00\xc9\x01\x00\x00\xc7\x01\x00\x00\xca\x01\x00\x00\xc8\x01\x00\x00\xd2\x01\x00\x00\xcf\x01\x00\x00\xd3\x01\x00\x00\xcb\x01\x00\x00\xd8\x01\x00\x00\xd0\x01\x00\x00\xd5\x01\x00\x00\xd6\x01\x00\x00\xd7\x01\x00\x00\xc5\x01\x00\x00\xcc\x01\x00\x00\xda\x01\x00\x00\xd4\x01\x00\x00\xdb\x01\x00\x00\xd9\x01\x00\x00\xe0\x01\x00\x00\xe1\x01\x00\x00\xe2\x01\x00\x00\xe3\x01\x00\x00\xe6\x01\x00\x00\xe7\x01\x00\x00\xea\x01\x00\x00\xeb\x01\x00\x00\xe8\x01\x00\x00\xee\x01\x00\x00\xf3\x01\x00\x00\xec\x01\x00\x00\xed\x01\x00\x00\xde\x01\x00\x00\x00\x00\x00\x00\xdc\x01\x00\x00\x88\x02\x00\x00\xef\x01\x00\x00\xdf\x01\x00\x00\xf2\x01\x00\x00\x99\x02\x00\x00\xf4\x01\x00\x00\xf5\x01\x00\x00\xf7\x01\x00\x00\xf8\x01\x00\x00\xf0\x01\x00\x00\x8a\x02\x00\x00\xf9\x01\x00\x00\x9c\x02\x00\x00\x9d\x02\x00\x00\xfb\x01\x00\x00\x00\x00\x00\x00\x55\x02\x00\x00\x9a\x02\x00\x00\x0d\x03\x00\x00\xf6\x01\x00\x00\xfc\x01\x00\x00\xfd\x01\x00\x00\x83\x03\x00\x00\x43\x03\x00\x00\x00\x00\x00\x00\x73\x02\x00\x00\x6f\x02\x00\x00\x6a\x02\x00\x00\xa1\x02\x00\x00\x32\x02\x00\x00\xfe\x01\x00\x00\xa2\x02\x00\x00\x75\x02\x00\x00\x76\x02\x00\x00\x77\x02\x00\x00\x78\x02\x00\x00\x7d\x02\x00\x00\x7a\x02\x00\x00\x7c\x02\x00\x00\x7f\x02\x00\x00\x85\x02\x00\x00\x89\x02\x00\x00\x82\x02\x00\x00\x39\x04\x00\x00\x14\x04\x00\x00\x92\x02\x00\x00\x83\x02\x00\x00\x8b\x02\x00\x00\x90\x02\x00\x00\xc5\x02\x00\x00\xc8\x02\x00\x00\xcd\x02\x00\x00\xce\x02\x00\x00\xd7\x02\x00\x00\x94\x02\x00\x00\x95\x02\x00\x00\x9e\x02\x00\x00\xe2\x02\x00\x00\xe3\x02\x00\x00\xec\x02\x00\x00\xeb\x02\x00\x00\xed\x02\x00\x00\xf4\x02\x00\x00\xe8\x02\x00\x00\xf9\x02\x00\x00\x5e\x03\x00\x00\x2c\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x21\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x09\x05\x00\x00\x20\x05\x00\x00\x46\x05\x00\x00\x5d\x05\x00\x00\x83\x05\x00\x00\x9a\x05\x00\x00\xc0\x05\x00\x00\xd7\x05\x00\x00\xfd\x05\x00\x00\x14\x06\x00\x00\x3a\x06\x00\x00\x51\x06\x00\x00\x77\x06\x00\x00\x8e\x06\x00\x00\xb4\x06\x00\x00\xcb\x06\x00\x00\xf1\x06\x00\x00\x09\x07\x00\x00\x2f\x07\x00\x00\x46\x07\x00\x00\x6c\x07\x00\x00\x83\x07\x00\x00\xa9\x07\x00\x00\xc0\x07\x00\x00\xe6\x07\x00\x00\xfd\x07\x00\x00\x23\x08\x00\x00\x3a\x08\x00\x00\x60\x08\x00\x00\x77\x08\x00\x00\x9d\x08\x00\x00\xb4\x08\x00\x00\xda\x08\x00\x00\xf1\x08\x00\x00\x17\x09\x00\x00\x2e\x09\x00\x00\x54\x09\x00\x00\x6b\x09\x00\x00\x91\x09\x00\x00\xa8\x09\x00\x00\xce\x09\x00\x00\xe5\x09\x00\x00\x0b\x0a\x00\x00\x22\x0a\x00\x00\x48\x0a\x00\x00\x5f\x0a\x00\x00\x85\x0a\x00\x00\x9c\x0a\x00\x00\xe3\x0a\x00\x00\xfa\x0a\x00\x00\x20\x0b\x00\x00\x37\x0b\x00\x00\x5d\x0b\x00\x00\x74\x0b\x00\x00\x9a\x0b\x00\x00\xb1\x0b\x00\x00\xd7\x0b\x00\x00\xee\x0b\x00\x00\x28\x0c\x00\x00\x3f\x0c\x00\x00\x76\x0c\x00\x00\x8d\x0c\x00\x00\xb3\x0c\x00\x00\xca\x0c\x00\x00\xf0\x0c\x00\x00\x16\x0d\x00\x00\x2d\x0d\x00\x00\x64\x0d\x00\x00\x7b\x0d\x00\x00\xa1\x0d\x00\x00\xb8\x0d\x00\x00\xde\x0d\x00\x00\xf5\x0d\x00\x00\x1b\x0e\x00\x00\x32\x0e\x00\x00\x58\x0e\x00\x00\x6f\x0e\x00\x00\x95\x0e\x00\x00\xac\x0e\x00\x00\xd2\x0e\x00\x00\xe9\x0e\x00\x00\x0f\x0f\x00\x00\x26\x0f\x00\x00\x4c\x0f\x00\x00\x63\x0f\x00\x00\x89\x0f\x00\x00\xa0\x0f\x00\x00\xc6\x0f\x00\x00\xdd\x0f\x00\x00\x03\x10\x00\x00\x1a\x10\x00\x00\x40\x10\x00\x00\x57\x10\x00\x00\x7d\x10\x00\x00\x94\x10\x00\x00\xcd\x10\x00\x00\xe6\x10\x00\x00\x1d\x11\x00\x00\x34\x11\x00\x00\x5a\x11\x00\x00\x71\x11\x00\x00\x97\x11\x00\x00\xae\x11\x00\x00\xd4\x11\x00\x00\xeb\x11\x00\x00\x11\x12\x00\x00\x28\x12\x00\x00\x4e\x12\x00\x00\x65\x12\x00\x00\x8b\x12\x00\x00\xa2\x12\x00\x00\xc8\x12\x00\x00\xdf\x12\x00\x00\x05\x13\x00\x00\x1c\x13\x00\x00\x42\x13\x00\x00\x59\x13\x00\x00\x7f\x13\x00\x00\x96\x13\x00\x00\xbc\x13\x00\x00\xd3\x13\x00\x00\xf9\x13\x00\x00\x10\x14\x00\x00\x36\x14\x00\x00\x4d\x14\x00\x00\x73\x14\x00\x00\x8a\x14\x00\x00\xb0\x14\x00\x00\xc7\x14\x00\x00\xed\x14\x00\x00\x04\x15\x00\x00\x2a\x15\x00\x00\x41\x15\x00\x00\x67\x15\x00\x00\x7e\x15\x00\x00\x71\x15\x00\x00"#++alex_table :: AlexAddr+alex_table = AlexA#+ "\x00\x00\x32\x01\x32\x01\x32\x01\x32\x01\x32\x01\x36\x01\x39\x01\x3b\x01\x40\x01\x3c\x01\x45\x01\x48\x01\x49\x01\x4a\x01\x4b\x01\x52\x01\x54\x01\x4c\x01\x4d\x01\x59\x01\x5a\x01\x5b\x01\x4f\x01\x32\x01\x5c\x01\x1c\x01\x5d\x01\x5e\x01\x5f\x01\x60\x01\x68\x01\x43\x01\x44\x01\x61\x01\x2e\x00\x0e\x01\x6d\x01\x2f\x00\x30\x01\x7e\x01\x7d\x01\x7d\x01\x7d\x01\x7d\x01\x7d\x01\x7d\x01\x7d\x01\x7d\x01\x7d\x01\x4c\x01\x4d\x01\x41\x01\x3f\x01\x42\x01\x4f\x01\x67\x01\xab\x01\xa7\x01\xa9\x01\xcc\x01\x9c\x01\xab\x01\xa0\x00\x85\x00\x03\x00\x2e\x01\xb7\x00\x2d\x01\x10\x01\x04\x00\x08\x00\x66\x00\x09\x00\x24\x00\x03\x01\xab\x00\x4a\x00\x8b\x00\x0a\x00\x2c\x01\x12\x00\x18\x00\x10\x00\x11\x00\x22\x01\x13\x00\xd6\x00\x25\x01\x33\x01\xa7\x01\xa8\x01\xcc\x01\x9d\x01\xaa\x01\xa0\x00\x85\x00\x0b\x00\x14\x00\x62\x00\x73\x00\x10\x01\x1c\x00\x2f\x01\x67\x00\x23\x01\x24\x00\x02\x01\x1e\x00\x4a\x00\x15\x00\x16\x00\x20\x01\xae\x00\x18\x00\x1d\x00\x1b\x00\x1b\x01\x1a\x01\xd6\x00\x19\x01\x25\x00\x18\x01\x1f\x00\x20\x00\x17\x01\x16\x01\x14\x01\x13\x01\x0b\x00\x12\x01\x15\x01\x26\x00\x11\x01\x27\x00\x28\x00\x1e\x01\x29\x00\x2a\x00\x0f\x01\x2b\x00\x2c\x00\x0d\x01\x0c\x01\x0b\x01\xae\x00\x4b\x00\x30\x00\x0a\x01\x32\x00\x35\x00\x31\x00\x37\x00\xf9\x00\x38\x00\x42\x00\x36\x00\xf8\x00\x3a\x00\xf7\x00\xfa\x00\x7d\x00\x5c\x00\x5b\x00\x26\x00\x43\x00\x27\x00\x28\x00\x4f\x00\x29\x00\x2a\x00\xfd\x00\x2b\x00\x2c\x00\x0d\x01\x07\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x06\x01\x06\x01\x05\x01\x04\x01\xfe\x00\x58\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x44\x00\x5e\x00\xf6\x00\xf4\x00\x5a\x00\xf3\x00\xed\x00\xec\x00\xea\x00\xeb\x00\xe9\x00\xf5\x00\x6b\x00\xe8\x00\xe7\x00\x6e\x00\x71\x00\x6f\x00\x77\x00\x70\x00\x7a\x00\x78\x00\x06\x01\x06\x01\x05\x01\x04\x01\xe4\x00\x58\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x44\x00\x83\x00\xe1\x00\xbe\x00\x5a\x00\x74\x00\xde\x00\xdf\x00\xdd\x00\xda\x00\xe0\x00\xf5\x00\x75\x00\x51\x00\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x56\x00\x56\x00\xe6\x00\x72\x00\x84\x00\x86\x00\x87\x00\xd9\x00\xd8\x00\xd7\x00\x8c\x00\xd5\x00\x92\x00\xd4\x00\xd3\x00\x93\x00\x94\x00\xd1\x00\x97\x00\x95\x00\xcf\x00\xcd\x00\x9e\x00\xd0\x00\x9d\x00\x9a\x00\xce\x00\xce\x00\xad\x00\xbf\x00\xa2\x00\xb3\x00\x56\x00\x57\x00\xe6\x00\x72\x00\xa1\x00\xa1\x00\x9b\x00\xbb\x00\xbb\x00\x9c\x00\xa6\x00\xa8\x00\xa9\x00\xcb\x00\xc9\x00\xc8\x00\xc7\x00\xca\x00\xc1\x00\xac\x00\xb2\x00\xc5\x00\xc4\x00\xb5\x00\xb9\x00\xbd\x00\xb0\x00\xb8\x00\xad\x00\xae\x00\xb1\x00\xb3\x00\x99\x00\x98\x00\x82\x00\x7c\x00\xba\x00\xb6\x00\xb4\x00\x00\x00\xaa\x00\xc3\x00\x7b\x00\xa7\x00\x96\x00\xa5\x00\x26\x01\x90\x00\xa4\x00\xaf\x00\x8e\x00\xa3\x00\xd2\x00\x91\x00\x8d\x00\xdb\x00\x8a\x00\x89\x00\xb0\x00\xdc\x00\xe2\x00\xae\x00\x81\x00\x6a\x00\x99\x00\x98\x00\x82\x00\x80\x00\x7f\x00\x7e\x00\x79\x00\xe5\x00\x6c\x00\x6d\x00\xee\x00\xf1\x00\x53\x00\x4d\x00\x5d\x00\x61\x00\xf2\x00\xaf\x00\x60\x00\x5f\x00\xfb\x00\x59\x00\x3d\x00\x34\x00\x55\x00\x54\x00\x4c\x00\x4e\x00\x23\x00\x47\x00\x48\x00\x46\x00\x45\x00\x3b\x00\x22\x00\x21\x00\x24\x01\x01\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x50\x00\x49\x00\x3c\x00\xc6\x00\xc6\x00\x1f\x01\x2d\x00\x21\x01\x1a\x00\x19\x00\x17\x00\x27\x01\x28\x01\x29\x01\x2a\x01\x0f\x00\x68\x00\x68\x00\x0e\x00\x07\x00\x39\x00\x39\x00\x2b\x01\x06\x00\x01\x00\x05\x00\x6c\x01\x6b\x01\x69\x01\x66\x01\x65\x01\x6a\x01\x50\x00\x49\x00\x3c\x00\xc6\x00\xc6\x00\x64\x01\x2d\x00\x65\x00\x63\x01\x19\x00\x17\x00\x62\x01\x58\x01\x57\x01\xbc\x00\xbc\x00\x68\x00\x68\x00\x8f\x00\xff\x00\x39\x00\x39\x00\x56\x01\x76\x00\x08\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2d\x00\x55\x01\x53\x01\x4e\x01\x47\x01\x3d\x01\x46\x01\x37\x01\x34\x01\x3e\x01\x38\x01\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x3a\x01\x32\x01\x32\x01\x32\x01\x32\x01\x32\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x35\x01\x00\x00\x00\x00\x2d\x00\x64\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x32\x01\x00\x00\x00\x00\x8f\x00\xc2\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xd7\x01\xd7\x01\xd7\x01\xd7\x01\xd7\x01\xd7\x01\xd7\x01\xd7\x01\xd7\x01\xd7\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2c\x00\x00\x00\xd7\x01\xd7\x01\xd7\x01\xd7\x01\xd7\x01\xd7\x01\xf5\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x98\x00\x00\x00\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\x2c\x00\x00\x00\xd7\x01\xd7\x01\xd7\x01\xd7\x01\xd7\x01\xd7\x01\xaf\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x98\x00\x00\x00\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x31\x01\xaf\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x07\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x08\x01\x51\x00\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x01\x01\x63\x00\xef\x00\xef\x00\xef\x00\xf0\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x9e\x01\x9e\x01\x9e\x01\x9e\x01\x9e\x01\x9e\x01\x9e\x01\x9e\x01\x9e\x01\x9e\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9e\x01\x9e\x01\x9e\x01\x9e\x01\x9e\x01\x9e\x01\x74\x01\x74\x01\x74\x01\x74\x01\x74\x01\x74\x01\x74\x01\x74\x01\x74\x01\x74\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9e\x01\x9e\x01\x9e\x01\x9e\x01\x9e\x01\x9e\x01\x00\x00\x00\x00\x00\x00\x9e\x01\x9e\x01\x9e\x01\x9e\x01\x9e\x01\x9e\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xce\x01\xce\x01\xce\x01\xce\x01\xce\x01\xce\x01\xce\x01\xce\x01\xce\x01\xce\x01\x00\x00\x9e\x01\x9e\x01\x9e\x01\x9e\x01\x9e\x01\x9e\x01\xce\x01\xce\x01\xce\x01\xce\x01\xce\x01\xce\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x00\x00\x00\x00\x00\x00\xce\x01\xce\x01\xce\x01\xce\x01\xce\x01\xce\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x75\x01\x75\x01\x75\x01\x75\x01\x75\x01\x75\x01\x75\x01\x75\x01\x75\x01\x75\x01\x00\x00\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\xcf\x01\xcf\x01\xcf\x01\xcf\x01\xcf\x01\xcf\x01\xcf\x01\xcf\x01\xcf\x01\xcf\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xcf\x01\xcf\x01\xcf\x01\xcf\x01\xcf\x01\xcf\x01\x00\x00\x00\x00\x00\x00\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x74\x01\x74\x01\x74\x01\x74\x01\x74\x01\x74\x01\x74\x01\x74\x01\x74\x01\x74\x01\x00\x00\xcf\x01\xcf\x01\xcf\x01\xcf\x01\xcf\x01\xcf\x01\x9e\x01\x9e\x01\x9e\x01\x9e\x01\x9e\x01\x9e\x01\x76\x01\x76\x01\x76\x01\x76\x01\x76\x01\x76\x01\x76\x01\x76\x01\x76\x01\x76\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa0\x01\xa0\x01\xa0\x01\xa0\x01\xa0\x01\xa0\x01\x00\x00\x00\x00\x00\x00\x9e\x01\x9e\x01\x9e\x01\x9e\x01\x9e\x01\x9e\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x77\x01\x77\x01\x77\x01\x77\x01\x77\x01\x77\x01\x77\x01\x77\x01\x77\x01\x77\x01\x00\x00\xa0\x01\xa0\x01\xa0\x01\xa0\x01\xa0\x01\xa0\x01\xa1\x01\xa1\x01\xa1\x01\xa1\x01\xa1\x01\xa1\x01\x78\x01\x78\x01\x78\x01\x78\x01\x78\x01\x78\x01\x78\x01\x78\x01\x78\x01\x78\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa2\x01\xa2\x01\xa2\x01\xa2\x01\xa2\x01\xa2\x01\x00\x00\x00\x00\x00\x00\xa1\x01\xa1\x01\xa1\x01\xa1\x01\xa1\x01\xa1\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x79\x01\x79\x01\x79\x01\x79\x01\x79\x01\x79\x01\x79\x01\x79\x01\x79\x01\x79\x01\x00\x00\xa2\x01\xa2\x01\xa2\x01\xa2\x01\xa2\x01\xa2\x01\xa3\x01\xa3\x01\xa3\x01\xa3\x01\xa3\x01\xa3\x01\x7a\x01\x7a\x01\x7a\x01\x7a\x01\x7a\x01\x7a\x01\x7a\x01\x7a\x01\x7a\x01\x7a\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa4\x01\xa4\x01\xa4\x01\xa4\x01\xa4\x01\xa4\x01\x00\x00\x00\x00\x00\x00\xa3\x01\xa3\x01\xa3\x01\xa3\x01\xa3\x01\xa3\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7b\x01\x7b\x01\x7b\x01\x7b\x01\x7b\x01\x7b\x01\x7b\x01\x7b\x01\x7b\x01\x7b\x01\x00\x00\xa4\x01\xa4\x01\xa4\x01\xa4\x01\xa4\x01\xa4\x01\xa5\x01\xa5\x01\xa5\x01\xa5\x01\xa5\x01\xa5\x01\x7c\x01\x7c\x01\x7c\x01\x7c\x01\x7c\x01\x7c\x01\x7c\x01\x7c\x01\x7c\x01\x7c\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa6\x01\xa6\x01\xa6\x01\xa6\x01\xa6\x01\xa6\x01\x00\x00\x00\x00\x00\x00\xa5\x01\xa5\x01\xa5\x01\xa5\x01\xa5\x01\xa5\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x01\x7f\x01\x7f\x01\x7f\x01\x7f\x01\x7f\x01\x7f\x01\x7f\x01\x7f\x01\x7f\x01\x00\x00\xa6\x01\xa6\x01\xa6\x01\xa6\x01\xa6\x01\xa6\x01\xac\x01\xac\x01\xac\x01\xac\x01\xac\x01\xac\x01\x80\x01\x80\x01\x80\x01\x80\x01\x80\x01\x80\x01\x80\x01\x80\x01\x80\x01\x80\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\x00\x00\x00\x00\x00\x00\xac\x01\xac\x01\xac\x01\xac\x01\xac\x01\xac\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x01\x80\x01\x80\x01\x80\x01\x80\x01\x80\x01\x80\x01\x80\x01\x80\x01\x80\x01\x00\x00\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\x00\x00\x81\x01\x81\x01\x81\x01\x81\x01\x81\x01\x81\x01\x81\x01\x81\x01\x81\x01\x81\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb0\x01\xb0\x01\xb0\x01\xb0\x01\xb0\x01\xb0\x01\x00\x00\x00\x00\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x82\x01\x82\x01\x82\x01\x82\x01\x82\x01\x82\x01\x82\x01\x82\x01\x82\x01\x82\x01\x1d\x01\xb0\x01\xb0\x01\xb0\x01\xb0\x01\xb0\x01\xb0\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb2\x01\xb2\x01\xb2\x01\xb2\x01\xb2\x01\xb2\x01\x00\x00\x00\x00\x00\x00\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x00\x00\xb2\x01\xb2\x01\xb2\x01\xb2\x01\xb2\x01\xb2\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\x85\x01\x85\x01\x85\x01\x85\x01\x85\x01\x85\x01\x85\x01\x85\x01\x85\x01\x85\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb4\x01\xb4\x01\xb4\x01\xb4\x01\xb4\x01\xb4\x01\x00\x00\x00\x00\x00\x00\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x86\x01\x86\x01\x86\x01\x86\x01\x86\x01\x86\x01\x86\x01\x86\x01\x86\x01\x86\x01\x00\x00\xb4\x01\xb4\x01\xb4\x01\xb4\x01\xb4\x01\xb4\x01\xb5\x01\xb5\x01\xb5\x01\xb5\x01\xb5\x01\xb5\x01\x87\x01\x87\x01\x87\x01\x87\x01\x87\x01\x87\x01\x87\x01\x87\x01\x87\x01\x87\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb6\x01\xb6\x01\xb6\x01\xb6\x01\xb6\x01\xb6\x01\x00\x00\x00\x00\x00\x00\xb5\x01\xb5\x01\xb5\x01\xb5\x01\xb5\x01\xb5\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x88\x01\x88\x01\x88\x01\x88\x01\x88\x01\x88\x01\x88\x01\x88\x01\x88\x01\x88\x01\x00\x00\xb6\x01\xb6\x01\xb6\x01\xb6\x01\xb6\x01\xb6\x01\xb7\x01\xb7\x01\xb7\x01\xb7\x01\xb7\x01\xb7\x01\x89\x01\x89\x01\x89\x01\x89\x01\x89\x01\x89\x01\x89\x01\x89\x01\x89\x01\x89\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb8\x01\xb8\x01\xb8\x01\xb8\x01\xb8\x01\xb8\x01\x00\x00\x00\x00\x00\x00\xb7\x01\xb7\x01\xb7\x01\xb7\x01\xb7\x01\xb7\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x00\x00\xb8\x01\xb8\x01\xb8\x01\xb8\x01\xb8\x01\xb8\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\x8b\x01\x8b\x01\x8b\x01\x8b\x01\x8b\x01\x8b\x01\x8b\x01\x8b\x01\x8b\x01\x8b\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xba\x01\xba\x01\xba\x01\xba\x01\xba\x01\xba\x01\x00\x00\x00\x00\x00\x00\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8c\x01\x8c\x01\x8c\x01\x8c\x01\x8c\x01\x8c\x01\x8c\x01\x8c\x01\x8c\x01\x8c\x01\x00\x00\xba\x01\xba\x01\xba\x01\xba\x01\xba\x01\xba\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\x00\x00\x00\x00\x00\x00\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x00\x00\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\x00\x00\x00\x00\x00\x00\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x90\x01\x90\x01\x90\x01\x90\x01\x90\x01\x90\x01\x90\x01\x90\x01\x90\x01\x90\x01\x00\x00\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc0\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x01\x00\x00\x00\x00\x00\x00\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x92\x01\x92\x01\x92\x01\x92\x01\x92\x01\x92\x01\x92\x01\x92\x01\x92\x01\x92\x01\x00\x00\xc0\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x01\xc1\x01\xc1\x01\xc1\x01\xc1\x01\xc1\x01\xc1\x01\x93\x01\x93\x01\x93\x01\x93\x01\x93\x01\x93\x01\x93\x01\x93\x01\x93\x01\x93\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc2\x01\xc2\x01\xc2\x01\xc2\x01\xc2\x01\xc2\x01\x00\x00\x00\x00\x00\x00\xc1\x01\xc1\x01\xc1\x01\xc1\x01\xc1\x01\xc1\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x94\x01\x94\x01\x94\x01\x94\x01\x94\x01\x94\x01\x94\x01\x94\x01\x94\x01\x94\x01\x00\x00\xc2\x01\xc2\x01\xc2\x01\xc2\x01\xc2\x01\xc2\x01\xc3\x01\xc3\x01\xc3\x01\xc3\x01\xc3\x01\xc3\x01\x95\x01\x95\x01\x95\x01\x95\x01\x95\x01\x95\x01\x95\x01\x95\x01\x95\x01\x95\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc4\x01\xc4\x01\xc4\x01\xc4\x01\xc4\x01\xc4\x01\x00\x00\x00\x00\x00\x00\xc3\x01\xc3\x01\xc3\x01\xc3\x01\xc3\x01\xc3\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x96\x01\x96\x01\x96\x01\x96\x01\x96\x01\x96\x01\x96\x01\x96\x01\x96\x01\x96\x01\x00\x00\xc4\x01\xc4\x01\xc4\x01\xc4\x01\xc4\x01\xc4\x01\xc5\x01\xc5\x01\xc5\x01\xc5\x01\xc5\x01\xc5\x01\x97\x01\x97\x01\x97\x01\x97\x01\x97\x01\x97\x01\x97\x01\x97\x01\x97\x01\x97\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc6\x01\xc6\x01\xc6\x01\xc6\x01\xc6\x01\xc6\x01\x00\x00\x00\x00\x00\x00\xc5\x01\xc5\x01\xc5\x01\xc5\x01\xc5\x01\xc5\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x98\x01\x98\x01\x98\x01\x98\x01\x98\x01\x98\x01\x98\x01\x98\x01\x98\x01\x98\x01\x00\x00\xc6\x01\xc6\x01\xc6\x01\xc6\x01\xc6\x01\xc6\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\x99\x01\x99\x01\x99\x01\x99\x01\x99\x01\x99\x01\x99\x01\x99\x01\x99\x01\x99\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc8\x01\xc8\x01\xc8\x01\xc8\x01\xc8\x01\xc8\x01\x00\x00\x00\x00\x00\x00\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9a\x01\x9a\x01\x9a\x01\x9a\x01\x9a\x01\x9a\x01\x9a\x01\x9a\x01\x9a\x01\x9a\x01\x00\x00\xc8\x01\xc8\x01\xc8\x01\xc8\x01\xc8\x01\xc8\x01\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\x00\x00\x00\x00\x00\x00\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x01\x72\x01\x72\x01\x72\x01\x72\x01\x72\x01\x72\x01\x72\x01\x72\x01\x72\x01\x00\x00\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\x71\x01\x71\x01\x71\x01\x71\x01\x71\x01\x71\x01\x6f\x01\x6f\x01\x6f\x01\x6f\x01\x6f\x01\x6f\x01\x6f\x01\x6f\x01\x6f\x01\x6f\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6e\x01\x6e\x01\x6e\x01\x6e\x01\x6e\x01\x6e\x01\x00\x00\x00\x00\x00\x00\x71\x01\x71\x01\x71\x01\x71\x01\x71\x01\x71\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\x00\x00\x6e\x01\x6e\x01\x6e\x01\x6e\x01\x6e\x01\x6e\x01\xae\x01\xae\x01\xc9\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xae\x01\xae\x01\xc9\x01\xae\x01\xae\x01\xae\x01\x00\x00\x00\x00\x00\x00\xae\x01\xae\x01\xc9\x01\xae\x01\xae\x01\xae\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x69\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xae\x01\xae\x01\xc9\x01\xae\x01\xae\x01\xae\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x69\x00\x00\x00\x00\x00\x00\x00\x00\x00\x52\x00\x00\x00\x00\x00\x00\x00\x00\x00\x33\x00\x9e\x01\x9e\x01\x9e\x01\x9e\x01\x9e\x01\x9e\x01\x9e\x01\x9e\x01\x9e\x01\x9e\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9e\x01\x9e\x01\x9e\x01\x9e\x01\x9e\x01\x9e\x01\xa0\x01\xa0\x01\xa0\x01\xa0\x01\xa0\x01\xa0\x01\xa0\x01\xa0\x01\xa0\x01\xa0\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa0\x01\xa0\x01\xa0\x01\xa0\x01\xa0\x01\xa0\x01\x00\x00\x00\x00\x00\x00\x9e\x01\x9e\x01\x9e\x01\x9e\x01\x9e\x01\x9e\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa1\x01\xa1\x01\xa1\x01\xa1\x01\xa1\x01\xa1\x01\xa1\x01\xa1\x01\xa1\x01\xa1\x01\x00\x00\xa0\x01\xa0\x01\xa0\x01\xa0\x01\xa0\x01\xa0\x01\xa1\x01\xa1\x01\xa1\x01\xa1\x01\xa1\x01\xa1\x01\xa2\x01\xa2\x01\xa2\x01\xa2\x01\xa2\x01\xa2\x01\xa2\x01\xa2\x01\xa2\x01\xa2\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa2\x01\xa2\x01\xa2\x01\xa2\x01\xa2\x01\xa2\x01\x00\x00\x00\x00\x00\x00\xa1\x01\xa1\x01\xa1\x01\xa1\x01\xa1\x01\xa1\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa3\x01\xa3\x01\xa3\x01\xa3\x01\xa3\x01\xa3\x01\xa3\x01\xa3\x01\xa3\x01\xa3\x01\x00\x00\xa2\x01\xa2\x01\xa2\x01\xa2\x01\xa2\x01\xa2\x01\xa3\x01\xa3\x01\xa3\x01\xa3\x01\xa3\x01\xa3\x01\xa4\x01\xa4\x01\xa4\x01\xa4\x01\xa4\x01\xa4\x01\xa4\x01\xa4\x01\xa4\x01\xa4\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa4\x01\xa4\x01\xa4\x01\xa4\x01\xa4\x01\xa4\x01\x00\x00\x00\x00\x00\x00\xa3\x01\xa3\x01\xa3\x01\xa3\x01\xa3\x01\xa3\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa5\x01\xa5\x01\xa5\x01\xa5\x01\xa5\x01\xa5\x01\xa5\x01\xa5\x01\xa5\x01\xa5\x01\x00\x00\xa4\x01\xa4\x01\xa4\x01\xa4\x01\xa4\x01\xa4\x01\xa5\x01\xa5\x01\xa5\x01\xa5\x01\xa5\x01\xa5\x01\xa6\x01\xa6\x01\xa6\x01\xa6\x01\xa6\x01\xa6\x01\xa6\x01\xa6\x01\xa6\x01\xa6\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa6\x01\xa6\x01\xa6\x01\xa6\x01\xa6\x01\xa6\x01\x00\x00\x00\x00\x00\x00\xa5\x01\xa5\x01\xa5\x01\xa5\x01\xa5\x01\xa5\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xac\x01\xac\x01\xac\x01\xac\x01\xac\x01\xac\x01\xac\x01\xac\x01\xac\x01\xac\x01\x00\x00\xa6\x01\xa6\x01\xa6\x01\xa6\x01\xa6\x01\xa6\x01\xac\x01\xac\x01\xac\x01\xac\x01\xac\x01\xac\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\x00\x00\x00\x00\x00\x00\xac\x01\xac\x01\xac\x01\xac\x01\xac\x01\xac\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\x00\x00\x00\x00\xfc\x00\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\x00\x00\x00\x00\x00\x00\xad\x01\xae\x01\xae\x01\xae\x01\xaf\x01\xae\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe3\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xad\x01\xae\x01\xae\x01\xae\x01\xaf\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\x00\x00\x00\x00\x00\x00\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\x00\x00\x00\x00\xcc\x00\x00\x00\x00\x00\x00\x00\xb0\x01\xb0\x01\xb0\x01\xb0\x01\xb0\x01\xb0\x01\xb0\x01\xb0\x01\xb0\x01\xb0\x01\x00\x00\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xb0\x01\xb0\x01\xb0\x01\xb0\x01\xb0\x01\xb0\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\x00\x00\x00\x00\x00\x00\xb0\x01\xb0\x01\xb0\x01\xb0\x01\xb0\x01\xb0\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\x00\x00\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\x00\x00\x9f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x88\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\x00\x00\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb2\x01\xb2\x01\xb2\x01\xb2\x01\xb2\x01\xb2\x01\xb2\x01\xb2\x01\xb2\x01\xb2\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb2\x01\xb2\x01\xb2\x01\xb2\x01\xb2\x01\xb2\x01\x00\x00\x00\x00\x00\x00\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb2\x01\xb2\x01\xb2\x01\xb2\x01\xb2\x01\xb2\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb4\x01\xb4\x01\xb4\x01\xb4\x01\xb4\x01\xb4\x01\xb4\x01\xb4\x01\xb4\x01\xb4\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb4\x01\xb4\x01\xb4\x01\xb4\x01\xb4\x01\xb4\x01\x00\x00\x00\x00\x00\x00\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb5\x01\xb5\x01\xb5\x01\xb5\x01\xb5\x01\xb5\x01\xb5\x01\xb5\x01\xb5\x01\xb5\x01\x00\x00\xb4\x01\xb4\x01\xb4\x01\xb4\x01\xb4\x01\xb4\x01\xb5\x01\xb5\x01\xb5\x01\xb5\x01\xb5\x01\xb5\x01\xb6\x01\xb6\x01\xb6\x01\xb6\x01\xb6\x01\xb6\x01\xb6\x01\xb6\x01\xb6\x01\xb6\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb6\x01\xb6\x01\xb6\x01\xb6\x01\xb6\x01\xb6\x01\x00\x00\x00\x00\x00\x00\xb5\x01\xb5\x01\xb5\x01\xb5\x01\xb5\x01\xb5\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb7\x01\xb7\x01\xb7\x01\xb7\x01\xb7\x01\xb7\x01\xb7\x01\xb7\x01\xb7\x01\xb7\x01\x00\x00\xb6\x01\xb6\x01\xb6\x01\xb6\x01\xb6\x01\xb6\x01\xb7\x01\xb7\x01\xb7\x01\xb7\x01\xb7\x01\xb7\x01\xb8\x01\xb8\x01\xb8\x01\xb8\x01\xb8\x01\xb8\x01\xb8\x01\xb8\x01\xb8\x01\xb8\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb8\x01\xb8\x01\xb8\x01\xb8\x01\xb8\x01\xb8\x01\x00\x00\x00\x00\x00\x00\xb7\x01\xb7\x01\xb7\x01\xb7\x01\xb7\x01\xb7\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\x00\x00\xb8\x01\xb8\x01\xb8\x01\xb8\x01\xb8\x01\xb8\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xba\x01\xba\x01\xba\x01\xba\x01\xba\x01\xba\x01\xba\x01\xba\x01\xba\x01\xba\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xba\x01\xba\x01\xba\x01\xba\x01\xba\x01\xba\x01\x00\x00\x00\x00\x00\x00\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\x00\x00\xba\x01\xba\x01\xba\x01\xba\x01\xba\x01\xba\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\x00\x00\x00\x00\x00\x00\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\x00\x00\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\x00\x00\x00\x00\x00\x00\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\x00\x00\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc0\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x01\x00\x00\x00\x00\x00\x00\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x01\xc1\x01\xc1\x01\xc1\x01\xc1\x01\xc1\x01\xc1\x01\xc1\x01\xc1\x01\xc1\x01\x00\x00\xc0\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x01\xc1\x01\xc1\x01\xc1\x01\xc1\x01\xc1\x01\xc1\x01\xc2\x01\xc2\x01\xc2\x01\xc2\x01\xc2\x01\xc2\x01\xc2\x01\xc2\x01\xc2\x01\xc2\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc2\x01\xc2\x01\xc2\x01\xc2\x01\xc2\x01\xc2\x01\x00\x00\x00\x00\x00\x00\xc1\x01\xc1\x01\xc1\x01\xc1\x01\xc1\x01\xc1\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc3\x01\xc3\x01\xc3\x01\xc3\x01\xc3\x01\xc3\x01\xc3\x01\xc3\x01\xc3\x01\xc3\x01\x00\x00\xc2\x01\xc2\x01\xc2\x01\xc2\x01\xc2\x01\xc2\x01\xc3\x01\xc3\x01\xc3\x01\xc3\x01\xc3\x01\xc3\x01\xc4\x01\xc4\x01\xc4\x01\xc4\x01\xc4\x01\xc4\x01\xc4\x01\xc4\x01\xc4\x01\xc4\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc4\x01\xc4\x01\xc4\x01\xc4\x01\xc4\x01\xc4\x01\x00\x00\x00\x00\x00\x00\xc3\x01\xc3\x01\xc3\x01\xc3\x01\xc3\x01\xc3\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc5\x01\xc5\x01\xc5\x01\xc5\x01\xc5\x01\xc5\x01\xc5\x01\xc5\x01\xc5\x01\xc5\x01\x00\x00\xc4\x01\xc4\x01\xc4\x01\xc4\x01\xc4\x01\xc4\x01\xc5\x01\xc5\x01\xc5\x01\xc5\x01\xc5\x01\xc5\x01\xc6\x01\xc6\x01\xc6\x01\xc6\x01\xc6\x01\xc6\x01\xc6\x01\xc6\x01\xc6\x01\xc6\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc6\x01\xc6\x01\xc6\x01\xc6\x01\xc6\x01\xc6\x01\x00\x00\x00\x00\x00\x00\xc5\x01\xc5\x01\xc5\x01\xc5\x01\xc5\x01\xc5\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\x00\x00\xc6\x01\xc6\x01\xc6\x01\xc6\x01\xc6\x01\xc6\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc8\x01\xc8\x01\xc8\x01\xc8\x01\xc8\x01\xc8\x01\xc8\x01\xc8\x01\xc8\x01\xc8\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc8\x01\xc8\x01\xc8\x01\xc8\x01\xc8\x01\xc8\x01\x00\x00\x00\x00\x00\x00\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\x00\x00\xc8\x01\xc8\x01\xc8\x01\xc8\x01\xc8\x01\xc8\x01\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\x00\x00\x00\x00\x00\x00\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\x00\x00\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xb1\x01\xb1\x01\xb1\x01\xcd\x01\xb1\x01\xb1\x01\x71\x01\x71\x01\x71\x01\x71\x01\x71\x01\x71\x01\x71\x01\x71\x01\x71\x01\x71\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x71\x01\x71\x01\x71\x01\x71\x01\x71\x01\x71\x01\x00\x00\x00\x00\x00\x00\xb1\x01\xb1\x01\xb1\x01\xcd\x01\xb1\x01\xb1\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6e\x01\x6e\x01\x6e\x01\x6e\x01\x6e\x01\x6e\x01\x6e\x01\x6e\x01\x6e\x01\x6e\x01\x00\x00\x71\x01\x71\x01\x71\x01\x71\x01\x71\x01\x71\x01\x6e\x01\x6e\x01\x6e\x01\x6e\x01\x6e\x01\x6e\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\x00\x00\x51\x01\x00\x00\x6e\x01\x6e\x01\x6e\x01\x6e\x01\x6e\x01\x6e\x01\x00\x00\x00\x00\x00\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\x00\x00\x51\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\x00\x00\x50\x01\xce\x01\xce\x01\xce\x01\xce\x01\xce\x01\xce\x01\xce\x01\xce\x01\xce\x01\xce\x01\x0d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xce\x01\xce\x01\xce\x01\xce\x01\xce\x01\xce\x01\x00\x00\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\x00\x00\x50\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xce\x01\xce\x01\xce\x01\xce\x01\xce\x01\xce\x01\xd0\x01\xd0\x01\xd0\x01\xd0\x01\xd0\x01\xd0\x01\xd0\x01\xd0\x01\xd0\x01\xd0\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd0\x01\xd0\x01\xd0\x01\xd0\x01\xd0\x01\xd0\x01\xd1\x01\xd1\x01\xd1\x01\xd1\x01\xd1\x01\xd1\x01\xd1\x01\xd1\x01\xd1\x01\xd1\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd1\x01\xd1\x01\xd1\x01\xd1\x01\xd1\x01\xd1\x01\x00\x00\x00\x00\x00\x00\xd0\x01\xd0\x01\xd0\x01\xd0\x01\xd0\x01\xd0\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\x00\x00\xd1\x01\xd1\x01\xd1\x01\xd1\x01\xd1\x01\xd1\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd3\x01\xd3\x01\xd3\x01\xd3\x01\xd3\x01\xd3\x01\xd3\x01\xd3\x01\xd3\x01\xd3\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd3\x01\xd3\x01\xd3\x01\xd3\x01\xd3\x01\xd3\x01\x00\x00\x00\x00\x00\x00\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd4\x01\xd4\x01\xd4\x01\xd4\x01\xd4\x01\xd4\x01\xd4\x01\xd4\x01\xd4\x01\xd4\x01\x00\x00\xd3\x01\xd3\x01\xd3\x01\xd3\x01\xd3\x01\xd3\x01\xd4\x01\xd4\x01\xd4\x01\xd4\x01\xd4\x01\xd4\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\x00\x00\x00\x00\x00\x00\xd4\x01\xd4\x01\xd4\x01\xd4\x01\xd4\x01\xd4\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd6\x01\xd6\x01\xd6\x01\xd6\x01\xd6\x01\xd6\x01\xd6\x01\xd6\x01\xd6\x01\xd6\x01\x00\x00\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd6\x01\xd6\x01\xd6\x01\xd6\x01\xd6\x01\xd6\x01\xd8\x01\xd8\x01\xd8\x01\xd8\x01\xd8\x01\xd8\x01\xd8\x01\xd8\x01\xd8\x01\xd8\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd8\x01\xd8\x01\xd8\x01\xd8\x01\xd8\x01\xd8\x01\x00\x00\x00\x00\x00\x00\xd6\x01\xd6\x01\xd6\x01\xd6\x01\xd6\x01\xd6\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd9\x01\xd9\x01\xd9\x01\xd9\x01\xd9\x01\xd9\x01\xd9\x01\xd9\x01\xd9\x01\xd9\x01\x00\x00\xd8\x01\xd8\x01\xd8\x01\xd8\x01\xd8\x01\xd8\x01\xd9\x01\xd9\x01\xd9\x01\xd9\x01\xd9\x01\xd9\x01\xda\x01\xda\x01\xda\x01\xda\x01\xda\x01\xda\x01\xda\x01\xda\x01\xda\x01\xda\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xda\x01\xda\x01\xda\x01\xda\x01\xda\x01\xda\x01\x00\x00\x00\x00\x00\x00\xd9\x01\xd9\x01\xd9\x01\xd9\x01\xd9\x01\xd9\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xda\x01\xda\x01\xda\x01\xda\x01\xda\x01\xda\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdc\x01\xdc\x01\xdc\x01\xdc\x01\xdc\x01\xdc\x01\xdc\x01\xdc\x01\xdc\x01\xdc\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdc\x01\xdc\x01\xdc\x01\xdc\x01\xdc\x01\xdc\x01\x00\x00\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdd\x01\xdd\x01\xdd\x01\xdd\x01\xdd\x01\xdd\x01\xdd\x01\xdd\x01\xdd\x01\xdd\x01\x00\x00\xdc\x01\xdc\x01\xdc\x01\xdc\x01\xdc\x01\xdc\x01\xdd\x01\xdd\x01\xdd\x01\xdd\x01\xdd\x01\xdd\x01\xde\x01\xde\x01\xde\x01\xde\x01\xde\x01\xde\x01\xde\x01\xde\x01\xde\x01\xde\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xde\x01\xde\x01\xde\x01\xde\x01\xde\x01\xde\x01\x00\x00\x00\x00\x00\x00\xdd\x01\xdd\x01\xdd\x01\xdd\x01\xdd\x01\xdd\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdf\x01\xdf\x01\xdf\x01\xdf\x01\xdf\x01\xdf\x01\xdf\x01\xdf\x01\xdf\x01\xdf\x01\x00\x00\xde\x01\xde\x01\xde\x01\xde\x01\xde\x01\xde\x01\xdf\x01\xdf\x01\xdf\x01\xdf\x01\xdf\x01\xdf\x01\xe0\x01\xe0\x01\xe0\x01\xe0\x01\xe0\x01\xe0\x01\xe0\x01\xe0\x01\xe0\x01\xe0\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe0\x01\xe0\x01\xe0\x01\xe0\x01\xe0\x01\xe0\x01\x00\x00\x00\x00\x00\x00\xdf\x01\xdf\x01\xdf\x01\xdf\x01\xdf\x01\xdf\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe1\x01\xe1\x01\xe1\x01\xe1\x01\xe1\x01\xe1\x01\xe1\x01\xe1\x01\xe1\x01\xe1\x01\x00\x00\xe0\x01\xe0\x01\xe0\x01\xe0\x01\xe0\x01\xe0\x01\xe1\x01\xe1\x01\xe1\x01\xe1\x01\xe1\x01\xe1\x01\xe2\x01\xe2\x01\xe2\x01\xe2\x01\xe2\x01\xe2\x01\xe2\x01\xe2\x01\xe2\x01\xe2\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe2\x01\xe2\x01\xe2\x01\xe2\x01\xe2\x01\xe2\x01\x00\x00\x00\x00\x00\x00\xe1\x01\xe1\x01\xe1\x01\xe1\x01\xe1\x01\xe1\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe3\x01\xe3\x01\xe3\x01\xe3\x01\xe3\x01\xe3\x01\xe3\x01\xe3\x01\xe3\x01\xe3\x01\x00\x00\xe2\x01\xe2\x01\xe2\x01\xe2\x01\xe2\x01\xe2\x01\xe3\x01\xe3\x01\xe3\x01\xe3\x01\xe3\x01\xe3\x01\xe4\x01\xe4\x01\xe4\x01\xe4\x01\xe4\x01\xe4\x01\xe4\x01\xe4\x01\xe4\x01\xe4\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe4\x01\xe4\x01\xe4\x01\xe4\x01\xe4\x01\xe4\x01\x00\x00\x00\x00\x00\x00\xe3\x01\xe3\x01\xe3\x01\xe3\x01\xe3\x01\xe3\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe5\x01\xe5\x01\xe5\x01\xe5\x01\xe5\x01\xe5\x01\xe5\x01\xe5\x01\xe5\x01\xe5\x01\x00\x00\xe4\x01\xe4\x01\xe4\x01\xe4\x01\xe4\x01\xe4\x01\xe5\x01\xe5\x01\xe5\x01\xe5\x01\xe5\x01\xe5\x01\xe6\x01\xe6\x01\xe6\x01\xe6\x01\xe6\x01\xe6\x01\xe6\x01\xe6\x01\xe6\x01\xe6\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe6\x01\xe6\x01\xe6\x01\xe6\x01\xe6\x01\xe6\x01\x00\x00\x00\x00\x00\x00\xe5\x01\xe5\x01\xe5\x01\xe5\x01\xe5\x01\xe5\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe7\x01\xe7\x01\xe7\x01\xe7\x01\xe7\x01\xe7\x01\xe7\x01\xe7\x01\xe7\x01\xe7\x01\x00\x00\xe6\x01\xe6\x01\xe6\x01\xe6\x01\xe6\x01\xe6\x01\xe7\x01\xe7\x01\xe7\x01\xe7\x01\xe7\x01\xe7\x01\xe8\x01\xe8\x01\xe8\x01\xe8\x01\xe8\x01\xe8\x01\xe8\x01\xe8\x01\xe8\x01\xe8\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe8\x01\xe8\x01\xe8\x01\xe8\x01\xe8\x01\xe8\x01\x00\x00\x00\x00\x00\x00\xe7\x01\xe7\x01\xe7\x01\xe7\x01\xe7\x01\xe7\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe9\x01\xe9\x01\xe9\x01\xe9\x01\xe9\x01\xe9\x01\xe9\x01\xe9\x01\xe9\x01\xe9\x01\x00\x00\xe8\x01\xe8\x01\xe8\x01\xe8\x01\xe8\x01\xe8\x01\xe9\x01\xe9\x01\xe9\x01\xe9\x01\xe9\x01\xe9\x01\xea\x01\xea\x01\xea\x01\xea\x01\xea\x01\xea\x01\xea\x01\xea\x01\xea\x01\xea\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xea\x01\xea\x01\xea\x01\xea\x01\xea\x01\xea\x01\x00\x00\x00\x00\x00\x00\xe9\x01\xe9\x01\xe9\x01\xe9\x01\xe9\x01\xe9\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xeb\x01\xeb\x01\xeb\x01\xeb\x01\xeb\x01\xeb\x01\xeb\x01\xeb\x01\xeb\x01\xeb\x01\x00\x00\xea\x01\xea\x01\xea\x01\xea\x01\xea\x01\xea\x01\xeb\x01\xeb\x01\xeb\x01\xeb\x01\xeb\x01\xeb\x01\xec\x01\xec\x01\xec\x01\xec\x01\xec\x01\xec\x01\xec\x01\xec\x01\xec\x01\xec\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xec\x01\xec\x01\xec\x01\xec\x01\xec\x01\xec\x01\x00\x00\x00\x00\x00\x00\xeb\x01\xeb\x01\xeb\x01\xeb\x01\xeb\x01\xeb\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xed\x01\xed\x01\xed\x01\xed\x01\xed\x01\xed\x01\xed\x01\xed\x01\xed\x01\xed\x01\x00\x00\xec\x01\xec\x01\xec\x01\xec\x01\xec\x01\xec\x01\xed\x01\xed\x01\xed\x01\xed\x01\xed\x01\xed\x01\xee\x01\xee\x01\xee\x01\xee\x01\xee\x01\xee\x01\xee\x01\xee\x01\xee\x01\xee\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xee\x01\xee\x01\xee\x01\xee\x01\xee\x01\xee\x01\x00\x00\x00\x00\x00\x00\xed\x01\xed\x01\xed\x01\xed\x01\xed\x01\xed\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xef\x01\xef\x01\xef\x01\xef\x01\xef\x01\xef\x01\xef\x01\xef\x01\xef\x01\xef\x01\x00\x00\xee\x01\xee\x01\xee\x01\xee\x01\xee\x01\xee\x01\xef\x01\xef\x01\xef\x01\xef\x01\xef\x01\xef\x01\xf0\x01\xf0\x01\xf0\x01\xf0\x01\xf0\x01\xf0\x01\xf0\x01\xf0\x01\xf0\x01\xf0\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf0\x01\xf0\x01\xf0\x01\xf0\x01\xf0\x01\xf0\x01\x00\x00\x00\x00\x00\x00\xef\x01\xef\x01\xef\x01\xef\x01\xef\x01\xef\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf1\x01\xf1\x01\xf1\x01\xf1\x01\xf1\x01\xf1\x01\xf1\x01\xf1\x01\xf1\x01\xf1\x01\x00\x00\xf0\x01\xf0\x01\xf0\x01\xf0\x01\xf0\x01\xf0\x01\xf1\x01\xf1\x01\xf1\x01\xf1\x01\xf1\x01\xf1\x01\xf2\x01\xf2\x01\xf2\x01\xf2\x01\xf2\x01\xf2\x01\xf2\x01\xf2\x01\xf2\x01\xf2\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf2\x01\xf2\x01\xf2\x01\xf2\x01\xf2\x01\xf2\x01\x00\x00\x00\x00\x00\x00\xf1\x01\xf1\x01\xf1\x01\xf1\x01\xf1\x01\xf1\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf3\x01\xf3\x01\xf3\x01\xf3\x01\xf3\x01\xf3\x01\xf3\x01\xf3\x01\xf3\x01\xf3\x01\x00\x00\xf2\x01\xf2\x01\xf2\x01\xf2\x01\xf2\x01\xf2\x01\xf3\x01\xf3\x01\xf3\x01\xf3\x01\xf3\x01\xf3\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\x00\x00\x00\x00\x00\x00\xf3\x01\xf3\x01\xf3\x01\xf3\x01\xf3\x01\xf3\x01\x00\x00\x00\x00\xf5\x01\x00\x00\x00\x00\x00\x00\x73\x01\x73\x01\x73\x01\x73\x01\x73\x01\x73\x01\x73\x01\x73\x01\x73\x01\x73\x01\x00\x00\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\x73\x01\x73\x01\x73\x01\x73\x01\x73\x01\x73\x01\x70\x01\x70\x01\x70\x01\x70\x01\x70\x01\x70\x01\x70\x01\x70\x01\x70\x01\x70\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x70\x01\x70\x01\x70\x01\x70\x01\x70\x01\x70\x01\x00\x00\x00\x00\x00\x00\x73\x01\x73\x01\x73\x01\x73\x01\x73\x01\x73\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x70\x01\x70\x01\x70\x01\x70\x01\x70\x01\x70\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x07\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x08\x01\x51\x00\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x01\x01\x63\x00\xef\x00\xef\x00\xef\x00\xf0\x00\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"#++alex_check :: AlexAddr+alex_check = AlexA#+ "\xff\xff\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x79\x00\x65\x00\x79\x00\x73\x00\x67\x00\x73\x00\x65\x00\x6f\x00\x6f\x00\x6f\x00\x79\x00\x65\x00\x41\x00\x41\x00\x67\x00\x67\x00\x79\x00\x41\x00\x20\x00\x67\x00\x22\x00\x67\x00\x67\x00\x67\x00\x35\x00\x65\x00\x28\x00\x29\x00\x31\x00\x32\x00\x33\x00\x65\x00\x35\x00\x6f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x61\x00\x61\x00\x3c\x00\x3d\x00\x3e\x00\x61\x00\x73\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x65\x00\x6f\x00\x4b\x00\x6f\x00\x4d\x00\x61\x00\x67\x00\x50\x00\x67\x00\x52\x00\x53\x00\x54\x00\x55\x00\x69\x00\x67\x00\x61\x00\x65\x00\x41\x00\x69\x00\x69\x00\x32\x00\x69\x00\x49\x00\x35\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x53\x00\x69\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x31\x00\x72\x00\x73\x00\x74\x00\x75\x00\x69\x00\x69\x00\x6d\x00\x52\x00\x61\x00\x6b\x00\x6d\x00\x65\x00\x61\x00\x69\x00\x69\x00\x6d\x00\x79\x00\x69\x00\x69\x00\x61\x00\x65\x00\x65\x00\x65\x00\x73\x00\x65\x00\x6f\x00\x53\x00\x65\x00\x53\x00\x4b\x00\x69\x00\x53\x00\x53\x00\x31\x00\x53\x00\x53\x00\x49\x00\x69\x00\x67\x00\x72\x00\x73\x00\x61\x00\x69\x00\x69\x00\x75\x00\x79\x00\x73\x00\x6f\x00\x73\x00\x67\x00\x61\x00\x6f\x00\x61\x00\x6f\x00\x61\x00\x79\x00\x61\x00\x63\x00\x73\x00\x67\x00\x73\x00\x6b\x00\x65\x00\x73\x00\x73\x00\x67\x00\x73\x00\x73\x00\x69\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x41\x00\x41\x00\x41\x00\x41\x00\x67\x00\x4b\x00\x43\x00\x43\x00\x43\x00\x43\x00\x41\x00\x65\x00\x6d\x00\x65\x00\x47\x00\x73\x00\x65\x00\x65\x00\x61\x00\x73\x00\x61\x00\x4d\x00\x69\x00\x69\x00\x69\x00\x69\x00\x61\x00\x69\x00\x61\x00\x69\x00\x75\x00\x63\x00\x61\x00\x61\x00\x61\x00\x61\x00\x6f\x00\x6b\x00\x63\x00\x63\x00\x63\x00\x63\x00\x61\x00\x6d\x00\x6f\x00\x75\x00\x67\x00\x65\x00\x61\x00\x65\x00\x65\x00\x61\x00\x69\x00\x6d\x00\x76\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x4b\x00\x4b\x00\x4f\x00\x45\x00\x69\x00\x69\x00\x73\x00\x61\x00\x61\x00\x73\x00\x67\x00\x69\x00\x63\x00\x69\x00\x69\x00\x63\x00\x63\x00\x61\x00\x73\x00\x65\x00\x65\x00\x63\x00\x65\x00\x6f\x00\x6d\x00\x6f\x00\x65\x00\x65\x00\x4b\x00\x61\x00\x65\x00\x44\x00\x6b\x00\x6b\x00\x6f\x00\x65\x00\x6f\x00\x6f\x00\x6f\x00\x72\x00\x72\x00\x6f\x00\x69\x00\x65\x00\x65\x00\x79\x00\x65\x00\x65\x00\x65\x00\x79\x00\x65\x00\x6b\x00\x79\x00\x69\x00\x79\x00\x65\x00\x69\x00\x61\x00\x52\x00\x6d\x00\x6b\x00\x52\x00\x62\x00\x64\x00\x42\x00\x42\x00\x50\x00\x64\x00\x74\x00\x72\x00\x72\x00\xff\xff\x72\x00\x74\x00\x64\x00\x72\x00\x6e\x00\x76\x00\x36\x00\x6e\x00\x76\x00\x52\x00\x6e\x00\x76\x00\x74\x00\x72\x00\x74\x00\x6e\x00\x6c\x00\x74\x00\x72\x00\x6e\x00\x6e\x00\x72\x00\x74\x00\x64\x00\x62\x00\x62\x00\x70\x00\x74\x00\x74\x00\x74\x00\x72\x00\x72\x00\x6e\x00\x76\x00\x6e\x00\x6e\x00\x74\x00\x74\x00\x6c\x00\x6e\x00\x70\x00\x72\x00\x6e\x00\x6e\x00\x6c\x00\x68\x00\x6c\x00\x62\x00\x72\x00\x72\x00\x6e\x00\x72\x00\x6c\x00\x6e\x00\x70\x00\x6e\x00\x6e\x00\x6e\x00\x6c\x00\x6c\x00\x38\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x54\x00\x44\x00\x54\x00\x43\x00\x43\x00\x6e\x00\x48\x00\x74\x00\x7a\x00\x44\x00\x44\x00\x72\x00\x72\x00\x72\x00\x72\x00\x6e\x00\x50\x00\x50\x00\x72\x00\x70\x00\x54\x00\x54\x00\x78\x00\x6e\x00\x72\x00\x6c\x00\x64\x00\x74\x00\x68\x00\x34\x00\x32\x00\x70\x00\x74\x00\x64\x00\x74\x00\x63\x00\x63\x00\x34\x00\x68\x00\x69\x00\x36\x00\x64\x00\x64\x00\x30\x00\x74\x00\x74\x00\x6e\x00\x6e\x00\x70\x00\x70\x00\x74\x00\x75\x00\x74\x00\x74\x00\x74\x00\x76\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x48\x00\x74\x00\x74\x00\x6c\x00\x6e\x00\x66\x00\x6e\x00\x74\x00\x64\x00\x3d\x00\x77\x00\xff\xff\xff\xff\x6e\x00\xff\xff\xff\xff\xff\xff\x72\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x79\x00\xff\xff\xff\xff\x68\x00\x69\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\x74\x00\x75\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x0a\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\x53\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\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\x42\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x73\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x52\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\x62\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\x6e\x00\x72\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\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\xff\xff\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\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\xff\xff\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\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x78\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\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\xff\xff\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x6c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x6c\x00\xff\xff\xff\xff\xff\xff\xff\xff\x71\x00\xff\xff\xff\xff\xff\xff\xff\xff\x76\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\xff\xff\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\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\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\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\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\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\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\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\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\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\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\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\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\xff\xff\xff\xff\x69\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\xff\xff\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\x6f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\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\xff\xff\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\xff\xff\xff\xff\x69\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\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\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\xff\xff\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\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\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\xff\xff\x6e\x00\xff\xff\xff\xff\xff\xff\xff\xff\x73\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\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\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\xff\xff\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\xff\xff\xff\xff\x72\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\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\xff\xff\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\x48\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\xff\xff\xff\xff\xff\xff\x53\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\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\xff\xff\x68\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x73\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\xff\xff\x48\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x53\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\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\xff\xff\x68\x00\xff\xff\xff\xff\xff\xff\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\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\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\xff\xff\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\x0a\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\xff\xff\xff\xff\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\xff\xff\xff\xff\x22\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\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\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\xff\xff\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\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"#++alex_deflt :: AlexAddr+alex_deflt = AlexA#+ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x01\x00\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x09\x01\x09\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x01\x1c\x01\x1c\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x01"#++alex_accept = listArray (0 :: Int, 501)+ [ AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccSkip+ , AlexAcc 194+ , AlexAcc 193+ , AlexAcc 192+ , AlexAcc 191+ , AlexAcc 190+ , AlexAcc 189+ , AlexAcc 188+ , AlexAcc 187+ , AlexAcc 186+ , AlexAcc 185+ , AlexAcc 184+ , AlexAcc 183+ , AlexAcc 182+ , AlexAcc 181+ , AlexAcc 180+ , AlexAcc 179+ , AlexAcc 178+ , AlexAcc 177+ , AlexAcc 176+ , AlexAcc 175+ , AlexAcc 174+ , AlexAcc 173+ , AlexAcc 172+ , AlexAcc 171+ , AlexAcc 170+ , AlexAcc 169+ , AlexAcc 168+ , AlexAcc 167+ , AlexAcc 166+ , AlexAcc 165+ , AlexAcc 164+ , AlexAcc 163+ , AlexAcc 162+ , AlexAcc 161+ , AlexAcc 160+ , AlexAcc 159+ , AlexAcc 158+ , AlexAcc 157+ , AlexAcc 156+ , AlexAcc 155+ , AlexAcc 154+ , AlexAcc 153+ , AlexAcc 152+ , AlexAcc 151+ , AlexAcc 150+ , AlexAcc 149+ , AlexAcc 148+ , AlexAcc 147+ , AlexAcc 146+ , AlexAcc 145+ , AlexAcc 144+ , AlexAcc 143+ , AlexAcc 142+ , AlexAcc 141+ , AlexAcc 140+ , AlexAcc 139+ , AlexAcc 138+ , AlexAcc 137+ , AlexAcc 136+ , AlexAcc 135+ , AlexAcc 134+ , AlexAcc 133+ , AlexAcc 132+ , AlexAcc 131+ , AlexAcc 130+ , AlexAcc 129+ , AlexAcc 128+ , AlexAcc 127+ , AlexAcc 126+ , AlexAcc 125+ , AlexAcc 124+ , AlexAcc 123+ , AlexAcc 122+ , AlexAcc 121+ , AlexAcc 120+ , AlexAcc 119+ , AlexAcc 118+ , AlexAcc 117+ , AlexAcc 116+ , AlexAcc 115+ , AlexAcc 114+ , AlexAcc 113+ , AlexAcc 112+ , AlexAcc 111+ , AlexAcc 110+ , AlexAcc 109+ , AlexAcc 108+ , AlexAcc 107+ , AlexAcc 106+ , AlexAcc 105+ , AlexAcc 104+ , AlexAcc 103+ , AlexAcc 102+ , AlexAcc 101+ , AlexAcc 100+ , AlexAcc 99+ , AlexAcc 98+ , AlexAcc 97+ , AlexAcc 96+ , AlexAcc 95+ , AlexAcc 94+ , AlexAcc 93+ , AlexAcc 92+ , AlexAcc 91+ , AlexAcc 90+ , AlexAcc 89+ , AlexAcc 88+ , AlexAcc 87+ , AlexAcc 86+ , AlexAcc 85+ , AlexAcc 84+ , AlexAcc 83+ , AlexAcc 82+ , AlexAcc 81+ , AlexAcc 80+ , AlexAcc 79+ , AlexAcc 78+ , AlexAcc 77+ , AlexAcc 76+ , AlexAcc 75+ , AlexAcc 74+ , AlexAcc 73+ , AlexAcc 72+ , AlexAcc 71+ , AlexAcc 70+ , AlexAcc 69+ , AlexAcc 68+ , AlexAcc 67+ , AlexAcc 66+ , AlexAcc 65+ , AlexAcc 64+ , AlexAcc 63+ , AlexAcc 62+ , AlexAcc 61+ , AlexAcc 60+ , AlexAcc 59+ , AlexAcc 58+ , AlexAcc 57+ , AlexAcc 56+ , AlexAcc 55+ , AlexAcc 54+ , AlexAcc 53+ , AlexAcc 52+ , AlexAcc 51+ , AlexAcc 50+ , AlexAcc 49+ , AlexAcc 48+ , AlexAcc 47+ , AlexAcc 46+ , AlexAcc 45+ , AlexAcc 44+ , AlexAcc 43+ , AlexAcc 42+ , AlexAcc 41+ , AlexAcc 40+ , AlexAcc 39+ , AlexAcc 38+ , AlexAcc 37+ , AlexAcc 36+ , AlexAcc 35+ , AlexAcc 34+ , AlexAcc 33+ , AlexAcc 32+ , AlexAcc 31+ , AlexAcc 30+ , AlexAcc 29+ , AlexAcc 28+ , AlexAcc 27+ , AlexAcc 26+ , AlexAcc 25+ , AlexAcc 24+ , AlexAcc 23+ , AlexAcc 22+ , AlexAcc 21+ , AlexAcc 20+ , AlexAcc 19+ , AlexAcc 18+ , AlexAcc 17+ , AlexAcc 16+ , AlexAcc 15+ , AlexAcc 14+ , AlexAcc 13+ , AlexAcc 12+ , AlexAcc 11+ , AlexAcc 10+ , AlexAcc 9+ , AlexAcc 8+ , AlexAcc 7+ , AlexAcc 6+ , AlexAcc 5+ , AlexAcc 4+ , AlexAcc 3+ , AlexAcc 2+ , AlexAcc 1+ , AlexAcc 0+ ]++alex_actions = array (0 :: Int, 195)+ [ (194,alex_action_1)+ , (193,alex_action_2)+ , (192,alex_action_3)+ , (191,alex_action_4)+ , (190,alex_action_5)+ , (189,alex_action_6)+ , (188,alex_action_7)+ , (187,alex_action_8)+ , (186,alex_action_9)+ , (185,alex_action_10)+ , (184,alex_action_11)+ , (183,alex_action_12)+ , (182,alex_action_13)+ , (181,alex_action_14)+ , (180,alex_action_15)+ , (179,alex_action_16)+ , (178,alex_action_17)+ , (177,alex_action_18)+ , (176,alex_action_19)+ , (175,alex_action_20)+ , (174,alex_action_21)+ , (173,alex_action_22)+ , (172,alex_action_23)+ , (171,alex_action_24)+ , (170,alex_action_25)+ , (169,alex_action_26)+ , (168,alex_action_27)+ , (167,alex_action_28)+ , (166,alex_action_29)+ , (165,alex_action_30)+ , (164,alex_action_31)+ , (163,alex_action_32)+ , (162,alex_action_33)+ , (161,alex_action_34)+ , (160,alex_action_35)+ , (159,alex_action_36)+ , (158,alex_action_37)+ , (157,alex_action_38)+ , (156,alex_action_39)+ , (155,alex_action_40)+ , (154,alex_action_41)+ , (153,alex_action_42)+ , (152,alex_action_43)+ , (151,alex_action_44)+ , (150,alex_action_45)+ , (149,alex_action_46)+ , (148,alex_action_47)+ , (147,alex_action_48)+ , (146,alex_action_49)+ , (145,alex_action_50)+ , (144,alex_action_51)+ , (143,alex_action_52)+ , (142,alex_action_53)+ , (141,alex_action_54)+ , (140,alex_action_55)+ , (139,alex_action_56)+ , (138,alex_action_57)+ , (137,alex_action_58)+ , (136,alex_action_59)+ , (135,alex_action_60)+ , (134,alex_action_60)+ , (133,alex_action_61)+ , (132,alex_action_62)+ , (131,alex_action_62)+ , (130,alex_action_63)+ , (129,alex_action_64)+ , (128,alex_action_64)+ , (127,alex_action_64)+ , (126,alex_action_64)+ , (125,alex_action_64)+ , (124,alex_action_64)+ , (123,alex_action_64)+ , (122,alex_action_64)+ , (121,alex_action_64)+ , (120,alex_action_64)+ , (119,alex_action_64)+ , (118,alex_action_64)+ , (117,alex_action_64)+ , (116,alex_action_64)+ , (115,alex_action_64)+ , (114,alex_action_64)+ , (113,alex_action_64)+ , (112,alex_action_64)+ , (111,alex_action_64)+ , (110,alex_action_64)+ , (109,alex_action_64)+ , (108,alex_action_64)+ , (107,alex_action_64)+ , (106,alex_action_64)+ , (105,alex_action_64)+ , (104,alex_action_64)+ , (103,alex_action_64)+ , (102,alex_action_64)+ , (101,alex_action_64)+ , (100,alex_action_64)+ , (99,alex_action_64)+ , (98,alex_action_64)+ , (97,alex_action_64)+ , (96,alex_action_64)+ , (95,alex_action_64)+ , (94,alex_action_64)+ , (93,alex_action_64)+ , (92,alex_action_64)+ , (91,alex_action_64)+ , (90,alex_action_64)+ , (89,alex_action_65)+ , (88,alex_action_65)+ , (87,alex_action_65)+ , (86,alex_action_65)+ , (85,alex_action_65)+ , (84,alex_action_65)+ , (83,alex_action_65)+ , (82,alex_action_65)+ , (81,alex_action_65)+ , (80,alex_action_65)+ , (79,alex_action_65)+ , (78,alex_action_65)+ , (77,alex_action_65)+ , (76,alex_action_65)+ , (75,alex_action_65)+ , (74,alex_action_65)+ , (73,alex_action_65)+ , (72,alex_action_65)+ , (71,alex_action_65)+ , (70,alex_action_65)+ , (69,alex_action_65)+ , (68,alex_action_65)+ , (67,alex_action_65)+ , (66,alex_action_65)+ , (65,alex_action_65)+ , (64,alex_action_65)+ , (63,alex_action_65)+ , (62,alex_action_65)+ , (61,alex_action_65)+ , (60,alex_action_65)+ , (59,alex_action_65)+ , (58,alex_action_65)+ , (57,alex_action_65)+ , (56,alex_action_65)+ , (55,alex_action_65)+ , (54,alex_action_65)+ , (53,alex_action_65)+ , (52,alex_action_65)+ , (51,alex_action_65)+ , (50,alex_action_65)+ , (49,alex_action_65)+ , (48,alex_action_65)+ , (47,alex_action_65)+ , (46,alex_action_65)+ , (45,alex_action_65)+ , (44,alex_action_65)+ , (43,alex_action_65)+ , (42,alex_action_65)+ , (41,alex_action_65)+ , (40,alex_action_65)+ , (39,alex_action_66)+ , (38,alex_action_66)+ , (37,alex_action_66)+ , (36,alex_action_66)+ , (35,alex_action_66)+ , (34,alex_action_66)+ , (33,alex_action_66)+ , (32,alex_action_66)+ , (31,alex_action_66)+ , (30,alex_action_66)+ , (29,alex_action_66)+ , (28,alex_action_66)+ , (27,alex_action_66)+ , (26,alex_action_66)+ , (25,alex_action_66)+ , (24,alex_action_66)+ , (23,alex_action_66)+ , (22,alex_action_66)+ , (21,alex_action_66)+ , (20,alex_action_66)+ , (19,alex_action_66)+ , (18,alex_action_66)+ , (17,alex_action_66)+ , (16,alex_action_66)+ , (15,alex_action_66)+ , (14,alex_action_66)+ , (13,alex_action_66)+ , (12,alex_action_66)+ , (11,alex_action_66)+ , (10,alex_action_66)+ , (9,alex_action_66)+ , (8,alex_action_66)+ , (7,alex_action_66)+ , (6,alex_action_66)+ , (5,alex_action_66)+ , (4,alex_action_66)+ , (3,alex_action_66)+ , (2,alex_action_66)+ , (1,alex_action_66)+ , (0,alex_action_67)+ ]++{-# LINE 99 "HOpenPGP/Tools/Lexer.x" #-}++data Token+ = TokenTag+ | TokenAfter+ | TokenAnd+ | TokenAny+ | TokenBefore+ | TokenNot+ | TokenNow+ | TokenOr+ | TokenInt Integer+ | TokenEq+ | TokenLt+ | TokenGt+ | TokenLParen+ | TokenRParen+ | TokenEOF+ | TokenPKVersion+ | TokenSigVersion+ | TokenSigType+ | TokenPKAlgo+ | TokenSigPKAlgo+ | TokenHashAlgo+ | TokenRSA+ | TokenDSA+ | TokenElgamal+ | TokenECDSA+ | TokenECDH+ | TokenDH+ | TokenBinary+ | TokenCanonicalText+ | TokenStandalone+ | TokenGenericCert+ | TokenPersonaCert+ | TokenCasualCert+ | TokenPositiveCert+ | TokenSubkeyBindingSig+ | TokenPrimaryKeyBindingSig+ | TokenSignatureDirectlyOnAKey+ | TokenKeyRevocationSig+ | TokenSubkeyRevocationSig+ | TokenCertRevocationSig+ | TokenTimestampSig+ | TokenMD5+ | TokenSHA1+ | TokenRIPEMD160+ | TokenSHA256+ | TokenSHA384+ | TokenSHA512+ | TokenSHA224+ | TokenKeysize+ | TokenTimestamp+ | TokenFingerprint+ | TokenKeyID+ | TokenFpr TwentyOctetFingerprint+ | TokenLongID (Either String EightOctetKeyId)+ | TokenLength+ | TokenEvery+ | TokenOne+ | TokenOf+ | TokenContains+ | TokenUids+ | TokenStr String+ | TokenA+ | TokenSubkey+ | TokenSigCreationTime+ deriving (Eq,Show)++alexEOF = return TokenEOF++lex :: (String -> a) -> AlexAction a+lex f = \(_,_,_,s) i -> return (f (take i s))++lex' :: a -> AlexAction a+lex' = lex . const+++alex_action_1 = lex' TokenA +alex_action_2 = lex' TokenAnd +alex_action_3 = lex' TokenAny +alex_action_4 = lex' TokenEvery +alex_action_5 = lex' TokenNot +alex_action_6 = lex' TokenNow +alex_action_7 = lex' TokenOne +alex_action_8 = lex' TokenOr +alex_action_9 = lex' TokenSubkey +alex_action_10 = lex' TokenTag +alex_action_11 = lex' TokenOf +alex_action_12 = lex' TokenEq +alex_action_13 = lex' TokenEq +alex_action_14 = lex' TokenEq +alex_action_15 = lex' TokenLt +alex_action_16 = lex' TokenGt +alex_action_17 = lex' TokenLParen +alex_action_18 = lex' TokenRParen +alex_action_19 = lex' TokenContains +alex_action_20 = lex' TokenPKVersion +alex_action_21 = lex' TokenSigVersion +alex_action_22 = lex' TokenSigType +alex_action_23 = lex' TokenPKAlgo +alex_action_24 = lex' TokenSigPKAlgo +alex_action_25 = lex' TokenHashAlgo +alex_action_26 = lex' TokenRSA +alex_action_27 = lex' TokenDSA +alex_action_28 = lex' TokenElgamal +alex_action_29 = lex' TokenECDSA +alex_action_30 = lex' TokenECDH +alex_action_31 = lex' TokenDH +alex_action_32 = lex' TokenBinary +alex_action_33 = lex' TokenCanonicalText +alex_action_34 = lex' TokenStandalone +alex_action_35 = lex' TokenGenericCert +alex_action_36 = lex' TokenPersonaCert +alex_action_37 = lex' TokenCasualCert +alex_action_38 = lex' TokenPositiveCert +alex_action_39 = lex' TokenSubkeyBindingSig +alex_action_40 = lex' TokenPrimaryKeyBindingSig +alex_action_41 = lex' TokenSignatureDirectlyOnAKey +alex_action_42 = lex' TokenKeyRevocationSig +alex_action_43 = lex' TokenSubkeyRevocationSig +alex_action_44 = lex' TokenCertRevocationSig +alex_action_45 = lex' TokenTimestampSig +alex_action_46 = lex' TokenMD5 +alex_action_47 = lex' TokenSHA1 +alex_action_48 = lex' TokenRIPEMD160 +alex_action_49 = lex' TokenSHA256 +alex_action_50 = lex' TokenSHA384 +alex_action_51 = lex' TokenSHA512 +alex_action_52 = lex' TokenSHA224 +alex_action_53 = lex' TokenUids +alex_action_54 = lex' TokenKeysize +alex_action_55 = lex' TokenLength +alex_action_56 = lex' TokenTimestamp +alex_action_57 = lex' TokenFingerprint +alex_action_58 = lex' TokenKeyID +alex_action_59 = lex' TokenSigCreationTime +alex_action_60 = lex (TokenFpr . read) +alex_action_61 = lex (TokenFpr . read . drop 2) +alex_action_62 = lex (TokenLongID . Right . read) +alex_action_63 = lex (TokenLongID . Right . read . drop 2) +alex_action_64 = lex (TokenInt . fromIntegral . read) +alex_action_65 = lex (TokenInt . fromIntegral . fst . head . readHex) +alex_action_66 = lex (TokenInt . fromIntegral . fst . head . readHex . drop 2) +alex_action_67 = lex (TokenStr . ((zipWith const . drop 1) <*> (drop 2))) +{-# 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++++++++++++++++++-- Do not remove this comment. Required to fix CPP parsing when using GCC and a clang-compiled alex.+#if __GLASGOW_HASKELL__ > 706+#define GTE(n,m) (tagToEnum# (n >=# m))+#define EQ(n,m) (tagToEnum# (n ==# m))+#else+#define GTE(n,m) (n >=# m)+#define EQ(n,m) (n ==# m)+#endif++++++++++++++++++++data AlexAddr = AlexA# Addr#+-- Do not remove this comment. Required to fix CPP parsing when using GCC and a clang-compiled alex.+#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 alexGetByte input__ of+ Nothing ->++++ AlexEOF+ Just _ ->++++ AlexError input__'++ (AlexLastSkip input__'' len, _) ->++++ AlexSkip input__'' len++ (AlexLastAcc k input__''' len, _) ->++++ AlexToken input__''' len (alex_actions ! 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 alexGetByte input__ of+ Nothing -> (new_acc, input__)+ Just (c, new_input) ->++++ case fromIntegral c of { (I# (ord_c)) ->+ let+ base = alexIndexInt32OffAddr alex_base s+ offset = (base +# ord_c)+ check = alexIndexInt16OffAddr alex_check offset++ new_s = if GTE(offset,0#) && EQ(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 (if c < 0x80 || c >= 0xC0 then (len +# 1#) else len)+ -- note that the length is increased ONLY if this is the 1st byte in a char encoding)+ new_input new_s new_acc+ }+ where+ check_accs (AlexAccNone) = last_acc+ check_accs (AlexAcc a ) = AlexLastAcc a input__ (I# (len))+ check_accs (AlexAccSkip) = AlexLastSkip input__ (I# (len))++++++++++++++data AlexLastAcc+ = AlexNone+ | AlexLastAcc !Int !AlexInput !Int+ | AlexLastSkip !AlexInput !Int++data AlexAcc user+ = AlexAccNone+ | AlexAcc Int+ | AlexAccSkip+++++++++++++++++++++++++++++
+ dist/build/hop/hop-tmp/HOpenPGP/Tools/Parser.hs view
@@ -0,0 +1,1615 @@+{-# OPTIONS_GHC -w #-}+{-# OPTIONS -XMagicHash -XBangPatterns -XTypeSynonymInstances -XFlexibleInstances -cpp #-}+#if __GLASGOW_HASKELL__ >= 710+{-# OPTIONS_GHC -XPartialTypeSignatures #-}+#endif+{-# OPTIONS -w #-}+module HOpenPGP.Tools.Parser( parseTKExp, parsePExp ) where+import Codec.Encryption.OpenPGP.Types+-- import Data.Conduit.OpenPGP.Filter (Expr(..), UPredicate(..), UOp(..), OVar(..), OValue(..), SPVar(..), SPValue(..), PKPVar(..), PKPValue(..))+import HOpenPGP.Tools.Common (pkpGetPKVersion, pkpGetPKAlgo, pkpGetKeysize, pkpGetTimestamp, pkpGetFingerprint, pkpGetEOKI, tkUsingPKP, tkGetUIDs, tkGetSubs, anyOrAll, anyReader, oGetTag, oGetLength, spGetSigVersion, spGetSigType, spGetPKAlgo, spGetHashAlgo, spGetSCT, pUsingPKP, pUsingSP, maybeR)++import HOpenPGP.Tools.Lexer++import Control.Applicative (liftA2)+import Codec.Encryption.OpenPGP.Fingerprint (eightOctetKeyID, fingerprint)+import Codec.Encryption.OpenPGP.KeyInfo (pubkeySize)+import Control.Error.Util (hush)+import Control.Monad.Loops (allM, anyM)+import Control.Monad.Trans.Reader (ask, reader, Reader, withReader)+import Data.List (isInfixOf)+import qualified Data.Text as T+import Data.Text.Prettyprint.Doc (pretty)+import qualified Data.Array as Happy_Data_Array+import qualified Data.Bits as Bits+import qualified GHC.Exts as Happy_GHC_Exts+import Control.Applicative(Applicative(..))+import Control.Monad (ap)++-- parser produced by Happy Version 1.19.12++newtype HappyAbsSyn t5 t6 t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22 = HappyAbsSyn HappyAny+#if __GLASGOW_HASKELL__ >= 607+type HappyAny = Happy_GHC_Exts.Any+#else+type HappyAny = forall a . a+#endif+happyIn5 :: t5 -> (HappyAbsSyn t5 t6 t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22)+happyIn5 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn5 #-}+happyOut5 :: (HappyAbsSyn t5 t6 t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22) -> t5+happyOut5 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut5 #-}+happyIn6 :: t6 -> (HappyAbsSyn t5 t6 t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22)+happyIn6 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn6 #-}+happyOut6 :: (HappyAbsSyn t5 t6 t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22) -> t6+happyOut6 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut6 #-}+happyIn7 :: t7 -> (HappyAbsSyn t5 t6 t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22)+happyIn7 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn7 #-}+happyOut7 :: (HappyAbsSyn t5 t6 t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22) -> t7+happyOut7 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut7 #-}+happyIn8 :: t8 -> (HappyAbsSyn t5 t6 t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22)+happyIn8 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn8 #-}+happyOut8 :: (HappyAbsSyn t5 t6 t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22) -> t8+happyOut8 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut8 #-}+happyIn9 :: t9 -> (HappyAbsSyn t5 t6 t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22)+happyIn9 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn9 #-}+happyOut9 :: (HappyAbsSyn t5 t6 t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22) -> t9+happyOut9 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut9 #-}+happyIn10 :: t10 -> (HappyAbsSyn t5 t6 t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22)+happyIn10 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn10 #-}+happyOut10 :: (HappyAbsSyn t5 t6 t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22) -> t10+happyOut10 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut10 #-}+happyIn11 :: t11 -> (HappyAbsSyn t5 t6 t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22)+happyIn11 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn11 #-}+happyOut11 :: (HappyAbsSyn t5 t6 t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22) -> t11+happyOut11 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut11 #-}+happyIn12 :: t12 -> (HappyAbsSyn t5 t6 t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22)+happyIn12 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn12 #-}+happyOut12 :: (HappyAbsSyn t5 t6 t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22) -> t12+happyOut12 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut12 #-}+happyIn13 :: t13 -> (HappyAbsSyn t5 t6 t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22)+happyIn13 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn13 #-}+happyOut13 :: (HappyAbsSyn t5 t6 t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22) -> t13+happyOut13 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut13 #-}+happyIn14 :: t14 -> (HappyAbsSyn t5 t6 t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22)+happyIn14 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn14 #-}+happyOut14 :: (HappyAbsSyn t5 t6 t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22) -> t14+happyOut14 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut14 #-}+happyIn15 :: t15 -> (HappyAbsSyn t5 t6 t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22)+happyIn15 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn15 #-}+happyOut15 :: (HappyAbsSyn t5 t6 t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22) -> t15+happyOut15 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut15 #-}+happyIn16 :: t16 -> (HappyAbsSyn t5 t6 t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22)+happyIn16 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn16 #-}+happyOut16 :: (HappyAbsSyn t5 t6 t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22) -> t16+happyOut16 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut16 #-}+happyIn17 :: t17 -> (HappyAbsSyn t5 t6 t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22)+happyIn17 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn17 #-}+happyOut17 :: (HappyAbsSyn t5 t6 t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22) -> t17+happyOut17 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut17 #-}+happyIn18 :: t18 -> (HappyAbsSyn t5 t6 t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22)+happyIn18 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn18 #-}+happyOut18 :: (HappyAbsSyn t5 t6 t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22) -> t18+happyOut18 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut18 #-}+happyIn19 :: t19 -> (HappyAbsSyn t5 t6 t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22)+happyIn19 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn19 #-}+happyOut19 :: (HappyAbsSyn t5 t6 t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22) -> t19+happyOut19 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut19 #-}+happyIn20 :: t20 -> (HappyAbsSyn t5 t6 t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22)+happyIn20 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn20 #-}+happyOut20 :: (HappyAbsSyn t5 t6 t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22) -> t20+happyOut20 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut20 #-}+happyIn21 :: t21 -> (HappyAbsSyn t5 t6 t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22)+happyIn21 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn21 #-}+happyOut21 :: (HappyAbsSyn t5 t6 t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22) -> t21+happyOut21 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut21 #-}+happyIn22 :: t22 -> (HappyAbsSyn t5 t6 t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22)+happyIn22 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn22 #-}+happyOut22 :: (HappyAbsSyn t5 t6 t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22) -> t22+happyOut22 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut22 #-}+happyInTok :: (Token) -> (HappyAbsSyn t5 t6 t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22)+happyInTok x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyInTok #-}+happyOutTok :: (HappyAbsSyn t5 t6 t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22) -> (Token)+happyOutTok x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOutTok #-}+++happyExpList :: HappyAddr+happyExpList = HappyA# "\x00\x00\x40\x0d\x00\x09\x00\x00\x00\x1e\x00\x00\x00\x90\x20\xf0\x03\x00\x00\xe0\x13\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x90\x20\xf0\x03\x00\x00\xe0\x13\x00\x00\x00\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x20\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd4\x00\x90\x00\x00\x00\xe0\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x09\x00\x00\x00\x1e\x00\x00\x00\xd4\x00\x90\x00\x00\x00\xe0\x01\x00\x00\x40\x0d\x00\x09\x00\x00\x00\x1e\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\xfc\x01\x00\x00\x00\x00\x40\x00\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x04\xc0\x0f\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\xff\x3f\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x09\x02\x3f\x00\x00\x00\x3e\x01\x00\x00\x90\x20\xf0\x03\x00\x00\xe0\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x02\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x02\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"#++{-# NOINLINE happyExpListPerState #-}+happyExpListPerState st =+ token_strs_expected+ where token_strs = ["error","%dummy","%start_parseTK","%start_parseP","Exp","PExp","TExp","PIOp","PSOp","AATOp","Ppkalgos","Pfingerprint","Plongid","CFExp","OExp","OIOp","SPExp","SIOp","Ssigtypes","Spkalgos","Shashalgos","Stimespec","a","and","any","contains","every","not","now","of","one","or","subkey","tag","int","'='","'<'","'>'","'('","')'","pkversion","sigversion","sigtype","pkalgo","sigpkalgo","hashalgo","rsa","dsa","elgamal","ecdsa","ecdh","dh","binary","canonicaltext","standalone","genericcert","personacert","casualcert","positivecert","subkeybindingsig","primarykeybindingsig","signaturedirectlyonakey","keyrevocationsig","subkeyrevocationsig","certrevocationsig","timestampsig","md5","sha1","ripemd160","sha256","sha384","sha512","sha224","keysize","timestamp","fingerprint","keyid","sigcreationtime","fpr","longid","length","str","uids","%eof"]+ bit_start = st * 84+ bit_end = (st + 1) * 84+ read_bit = readArrayBit happyExpList+ bits = map read_bit [bit_start..bit_end - 1]+ bits_indexed = zip bits [0..83]+ token_strs_expected = concatMap f bits_indexed+ f (False, _) = []+ f (True, nr) = [token_strs !! nr]++happyActOffsets :: HappyAddr+happyActOffsets = HappyA# "\x14\x00\x0c\x00\x05\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x0c\x00\x4f\x00\x65\x00\x69\x00\x69\x00\x74\x00\x77\x00\x77\x00\x7a\x00\x7a\x00\xfe\xff\xfe\xff\x7d\x00\x80\x00\x01\x00\x00\x00\x00\x00\x06\x00\xfc\xff\x0b\x00\x14\x00\x04\x00\x0e\x00\xca\xff\x21\x00\xf7\xff\x14\x00\x14\x00\x2a\x00\x00\x00\x00\x00\x00\x00\x55\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x28\x00\x2e\x00\x00\x00\x00\x00\x00\x00\x38\x00\x03\x00\x4d\x00\x53\x00\x2d\x00\x57\x00\x58\x00\x6f\x00\x3c\x00\x0c\x00\x0c\x00\x3c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\xfb\xff\x2b\x00\x43\x00\x2b\x00\x61\x00\x00\x00\x00\x00\x2b\x00\x62\x00\x00\x00\x63\x00\x00\x00\x00\x00\x00\x00"#++happyGotoOffsets :: HappyAddr+happyGotoOffsets = HappyA# "\x91\x00\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1c\x00\x95\x00\x9e\x00\x96\x00\x98\x00\x9f\x00\x99\x00\x9b\x00\xa1\x00\xa4\x00\xa5\x00\xa6\x00\xa0\x00\xa3\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x94\x00\x00\x00\x00\x00\x00\x00\x00\x00\xaa\x00\x97\x00\x9a\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa2\x00\x00\x00\x00\x00\x00\x00\xa7\x00\x00\x00\x00\x00\xa9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9c\x00\xa8\x00\xab\x00\xac\x00\x00\x00\x00\x00\x00\x00\x00\x00\x71\x00\x75\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xad\x00\x00\x00\xaf\x00\x00\x00\x00\x00\x00\x00\xb0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"#++happyAdjustOffset :: Happy_GHC_Exts.Int# -> Happy_GHC_Exts.Int#+happyAdjustOffset off = off++happyDefActions :: HappyAddr+happyDefActions = HappyA# "\x00\x00\x00\x00\x00\x00\x00\x00\xd7\xff\x00\x00\xd9\xff\xd8\xff\xdd\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\xf9\xff\xf8\xff\x00\x00\xfd\xff\x00\x00\x00\x00\xfc\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd4\xff\xd3\xff\xd2\xff\x00\x00\xcc\xff\xcb\xff\xca\xff\x00\x00\xe9\xff\xea\xff\x00\x00\x00\x00\xed\xff\xec\xff\xeb\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdc\xff\x00\x00\x00\x00\xda\xff\xdb\xff\xd6\xff\xf7\xff\xd1\xff\xd0\xff\xbb\xff\xc9\xff\xc8\xff\xc7\xff\xc6\xff\xc5\xff\xc4\xff\xc3\xff\xc2\xff\xc1\xff\xc0\xff\xbf\xff\xbe\xff\xbd\xff\xbc\xff\xf6\xff\xe0\xff\xe6\xff\xe5\xff\xe4\xff\xe3\xff\xe2\xff\xe1\xff\xcf\xff\xb4\xff\xba\xff\xb9\xff\xb8\xff\xb7\xff\xb6\xff\xb5\xff\xce\xff\xac\xff\xb3\xff\xb2\xff\xb1\xff\xb0\xff\xaf\xff\xae\xff\xad\xff\xf5\xff\xf4\xff\xf3\xff\xdf\xff\xf2\xff\xde\xff\xcd\xff\xab\xff\xaa\xff\xd5\xff\xfa\xff\xfb\xff\xee\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe7\xff\xe8\xff\x00\x00\x00\x00\xef\xff\x00\x00\xf1\xff\xf0\xff"#++happyCheck :: HappyAddr+happyCheck = HappyA# "\xff\xff\x02\x00\x04\x00\x02\x00\x08\x00\x09\x00\x02\x00\x3d\x00\x03\x00\x0a\x00\x13\x00\x0a\x00\x0e\x00\x16\x00\x0a\x00\x03\x00\x0d\x00\x0b\x00\x06\x00\x01\x00\x09\x00\x01\x00\x08\x00\x03\x00\x0c\x00\x05\x00\x06\x00\x09\x00\x0a\x00\x01\x00\x0c\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x09\x00\x0a\x00\x13\x00\x0c\x00\x08\x00\x16\x00\x34\x00\x35\x00\x36\x00\x37\x00\x04\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x0d\x00\x3d\x00\x0e\x00\x0d\x00\x0d\x00\x3a\x00\x3e\x00\x02\x00\x3e\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x0d\x00\x0a\x00\x3b\x00\x34\x00\x35\x00\x36\x00\x37\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x0d\x00\x02\x00\x07\x00\x0e\x00\x0f\x00\x10\x00\x0d\x00\x39\x00\x0d\x00\x0a\x00\x0d\x00\x0d\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x01\x00\x0e\x00\x0f\x00\x10\x00\x01\x00\x0e\x00\x0f\x00\x10\x00\x09\x00\x0a\x00\x0d\x00\x0c\x00\x09\x00\x0a\x00\x3d\x00\x0c\x00\x0e\x00\x0f\x00\x10\x00\x0e\x00\x0f\x00\x10\x00\x0e\x00\x0f\x00\x10\x00\x0e\x00\x0f\x00\x10\x00\x0e\x00\x0f\x00\x10\x00\x00\x00\x01\x00\x02\x00\x00\x00\x01\x00\x02\x00\x00\x00\x01\x00\x02\x00\x00\x00\x01\x00\x02\x00\x3c\x00\x3c\x00\x3c\x00\x0b\x00\x03\x00\x03\x00\x0d\x00\x03\x00\x0d\x00\x0d\x00\x03\x00\x0d\x00\x04\x00\x04\x00\x01\x00\x10\x00\x0d\x00\x0b\x00\x08\x00\x07\x00\x06\x00\x05\x00\x11\x00\x05\x00\x05\x00\xff\xff\x0f\x00\xff\xff\xff\xff\x0e\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"#++happyTable :: HappyAddr+happyTable = HappyA# "\x00\x00\x3f\x00\x2f\x00\x24\x00\x21\x00\x22\x00\x24\x00\x7d\x00\x04\x00\x40\x00\x0c\x00\x25\x00\x30\x00\x0f\x00\x25\x00\x09\x00\x67\x00\x23\x00\x0a\x00\x04\x00\x20\x00\x1b\x00\x7e\x00\x1c\x00\x0b\x00\x1d\x00\x1e\x00\x05\x00\x06\x00\x04\x00\x07\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x3d\x00\x06\x00\x0c\x00\x07\x00\x7c\x00\x0f\x00\x12\x00\x13\x00\x14\x00\x15\x00\x81\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x78\x00\x83\x00\x82\x00\x47\x00\x70\x00\x74\x00\xff\xff\x3f\x00\xff\xff\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x6f\x00\x40\x00\x17\x00\x12\x00\x13\x00\x14\x00\x15\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\x5f\x00\x24\x00\x76\x00\x27\x00\x28\x00\x29\x00\x57\x00\x72\x00\x77\x00\x25\x00\x45\x00\x44\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x04\x00\x33\x00\x34\x00\x35\x00\x04\x00\x2b\x00\x2c\x00\x2d\x00\x41\x00\x06\x00\x43\x00\x07\x00\x40\x00\x06\x00\x7f\x00\x07\x00\x33\x00\x34\x00\x35\x00\x2b\x00\x2c\x00\x2d\x00\x33\x00\x34\x00\x35\x00\x2b\x00\x2c\x00\x2d\x00\x27\x00\x28\x00\x29\x00\x17\x00\x18\x00\x19\x00\x1e\x00\x18\x00\x19\x00\x79\x00\x18\x00\x19\x00\x78\x00\x18\x00\x19\x00\x85\x00\x88\x00\x87\x00\x3c\x00\x3b\x00\x38\x00\x3a\x00\x35\x00\x39\x00\x37\x00\x31\x00\x36\x00\x30\x00\x2d\x00\x7a\x00\x65\x00\x29\x00\x25\x00\x72\x00\x70\x00\x55\x00\x7f\x00\x74\x00\x85\x00\x83\x00\x00\x00\x5d\x00\x00\x00\x00\x00\x45\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"#++happyReduceArr = Happy_Data_Array.array (2, 85) [+ (2 , happyReduce_2),+ (3 , happyReduce_3),+ (4 , happyReduce_4),+ (5 , happyReduce_5),+ (6 , happyReduce_6),+ (7 , happyReduce_7),+ (8 , happyReduce_8),+ (9 , happyReduce_9),+ (10 , happyReduce_10),+ (11 , happyReduce_11),+ (12 , happyReduce_12),+ (13 , happyReduce_13),+ (14 , happyReduce_14),+ (15 , happyReduce_15),+ (16 , happyReduce_16),+ (17 , happyReduce_17),+ (18 , happyReduce_18),+ (19 , happyReduce_19),+ (20 , happyReduce_20),+ (21 , happyReduce_21),+ (22 , happyReduce_22),+ (23 , happyReduce_23),+ (24 , happyReduce_24),+ (25 , happyReduce_25),+ (26 , happyReduce_26),+ (27 , happyReduce_27),+ (28 , happyReduce_28),+ (29 , happyReduce_29),+ (30 , happyReduce_30),+ (31 , happyReduce_31),+ (32 , happyReduce_32),+ (33 , happyReduce_33),+ (34 , happyReduce_34),+ (35 , happyReduce_35),+ (36 , happyReduce_36),+ (37 , happyReduce_37),+ (38 , happyReduce_38),+ (39 , happyReduce_39),+ (40 , happyReduce_40),+ (41 , happyReduce_41),+ (42 , happyReduce_42),+ (43 , happyReduce_43),+ (44 , happyReduce_44),+ (45 , happyReduce_45),+ (46 , happyReduce_46),+ (47 , happyReduce_47),+ (48 , happyReduce_48),+ (49 , happyReduce_49),+ (50 , happyReduce_50),+ (51 , happyReduce_51),+ (52 , happyReduce_52),+ (53 , happyReduce_53),+ (54 , happyReduce_54),+ (55 , happyReduce_55),+ (56 , happyReduce_56),+ (57 , happyReduce_57),+ (58 , happyReduce_58),+ (59 , happyReduce_59),+ (60 , happyReduce_60),+ (61 , happyReduce_61),+ (62 , happyReduce_62),+ (63 , happyReduce_63),+ (64 , happyReduce_64),+ (65 , happyReduce_65),+ (66 , happyReduce_66),+ (67 , happyReduce_67),+ (68 , happyReduce_68),+ (69 , happyReduce_69),+ (70 , happyReduce_70),+ (71 , happyReduce_71),+ (72 , happyReduce_72),+ (73 , happyReduce_73),+ (74 , happyReduce_74),+ (75 , happyReduce_75),+ (76 , happyReduce_76),+ (77 , happyReduce_77),+ (78 , happyReduce_78),+ (79 , happyReduce_79),+ (80 , happyReduce_80),+ (81 , happyReduce_81),+ (82 , happyReduce_82),+ (83 , happyReduce_83),+ (84 , happyReduce_84),+ (85 , happyReduce_85)+ ]++happy_n_terms = 63 :: Int+happy_n_nonterms = 18 :: Int++#if __GLASGOW_HASKELL__ >= 710+happyReduce_2 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_2 = happySpecReduce_1 0# happyReduction_2+happyReduction_2 happy_x_1+ = happyIn5+ (return True+ )++#if __GLASGOW_HASKELL__ >= 710+happyReduce_3 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_3 = happySpecReduce_2 0# happyReduction_3+happyReduction_3 happy_x_2+ happy_x_1+ = case happyOut5 happy_x_2 of { happy_var_2 -> + happyIn5+ (fmap not happy_var_2+ )}++#if __GLASGOW_HASKELL__ >= 710+happyReduce_4 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_4 = happySpecReduce_3 0# happyReduction_4+happyReduction_4 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut5 happy_x_1 of { happy_var_1 -> + case happyOut5 happy_x_3 of { happy_var_3 -> + happyIn5+ (liftA2 (&&) happy_var_1 happy_var_3+ )}}++#if __GLASGOW_HASKELL__ >= 710+happyReduce_5 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_5 = happySpecReduce_3 0# happyReduction_5+happyReduction_5 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut5 happy_x_1 of { happy_var_1 -> + case happyOut5 happy_x_3 of { happy_var_3 -> + happyIn5+ (liftA2 (||) happy_var_1 happy_var_3+ )}}++#if __GLASGOW_HASKELL__ >= 710+happyReduce_6 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_6 = happySpecReduce_1 0# happyReduction_6+happyReduction_6 happy_x_1+ = case happyOut6 happy_x_1 of { happy_var_1 -> + happyIn5+ (tkUsingPKP happy_var_1+ )}++#if __GLASGOW_HASKELL__ >= 710+happyReduce_7 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_7 = happySpecReduce_1 0# happyReduction_7+happyReduction_7 happy_x_1+ = case happyOut7 happy_x_1 of { happy_var_1 -> + happyIn5+ (happy_var_1+ )}++#if __GLASGOW_HASKELL__ >= 710+happyReduce_8 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_8 = happySpecReduce_3 1# happyReduction_8+happyReduction_8 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut8 happy_x_2 of { happy_var_2 -> + case happyOutTok happy_x_3 of { (TokenInt happy_var_3) -> + happyIn6+ (happy_var_2 (reader pkpGetPKVersion) (return happy_var_3)+ )}}++#if __GLASGOW_HASKELL__ >= 710+happyReduce_9 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_9 = happySpecReduce_3 1# happyReduction_9+happyReduction_9 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut8 happy_x_2 of { happy_var_2 -> + case happyOut11 happy_x_3 of { happy_var_3 -> + happyIn6+ (happy_var_2 (reader pkpGetPKAlgo) (return happy_var_3)+ )}}++#if __GLASGOW_HASKELL__ >= 710+happyReduce_10 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_10 = happySpecReduce_3 1# happyReduction_10+happyReduction_10 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut8 happy_x_2 of { happy_var_2 -> + case happyOutTok happy_x_3 of { (TokenInt happy_var_3) -> + happyIn6+ (happy_var_2 (reader pkpGetKeysize) (return happy_var_3)+ )}}++#if __GLASGOW_HASKELL__ >= 710+happyReduce_11 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_11 = happySpecReduce_3 1# happyReduction_11+happyReduction_11 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut8 happy_x_2 of { happy_var_2 -> + case happyOutTok happy_x_3 of { (TokenInt happy_var_3) -> + happyIn6+ (happy_var_2 (reader pkpGetTimestamp) (return happy_var_3)+ )}}++#if __GLASGOW_HASKELL__ >= 710+happyReduce_12 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_12 = happySpecReduce_3 1# happyReduction_12+happyReduction_12 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut9 happy_x_2 of { happy_var_2 -> + case happyOut12 happy_x_3 of { happy_var_3 -> + happyIn6+ (happy_var_2 (reader (show . pretty . pkpGetFingerprint)) (return happy_var_3)+ )}}++#if __GLASGOW_HASKELL__ >= 710+happyReduce_13 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_13 = happySpecReduce_3 1# happyReduction_13+happyReduction_13 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut9 happy_x_2 of { happy_var_2 -> + case happyOut13 happy_x_3 of { happy_var_3 -> + happyIn6+ (happy_var_2 (reader pkpGetEOKI) (return happy_var_3)+ )}}++#if __GLASGOW_HASKELL__ >= 710+happyReduce_14 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_14 = happyReduce 6# 2# happyReduction_14+happyReduction_14 (happy_x_6 `HappyStk`+ happy_x_5 `HappyStk`+ happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOut10 happy_x_5 of { happy_var_5 -> + case happyOutTok happy_x_6 of { (TokenStr happy_var_6) -> + happyIn7+ (withReader tkGetUIDs (anyOrAll allM (happy_var_5 (return (T.pack happy_var_6))))+ ) `HappyStk` happyRest}}++#if __GLASGOW_HASKELL__ >= 710+happyReduce_15 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_15 = happyReduce 6# 2# happyReduction_15+happyReduction_15 (happy_x_6 `HappyStk`+ happy_x_5 `HappyStk`+ happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOut10 happy_x_5 of { happy_var_5 -> + case happyOutTok happy_x_6 of { (TokenStr happy_var_6) -> + happyIn7+ (withReader tkGetUIDs (anyOrAll anyM (happy_var_5 (return (T.pack happy_var_6))))+ ) `HappyStk` happyRest}}++#if __GLASGOW_HASKELL__ >= 710+happyReduce_16 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_16 = happyReduce 5# 2# happyReduction_16+happyReduction_16 (happy_x_5 `HappyStk`+ happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOut10 happy_x_4 of { happy_var_4 -> + case happyOutTok happy_x_5 of { (TokenStr happy_var_5) -> + happyIn7+ (withReader tkGetUIDs (anyOrAll anyM (happy_var_4 (return (T.pack happy_var_5))))+ ) `HappyStk` happyRest}}++#if __GLASGOW_HASKELL__ >= 710+happyReduce_17 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_17 = happySpecReduce_3 2# happyReduction_17+happyReduction_17 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut6 happy_x_3 of { happy_var_3 -> + happyIn7+ (withReader tkGetSubs (anyReader happy_var_3)+ )}++#if __GLASGOW_HASKELL__ >= 710+happyReduce_18 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_18 = happySpecReduce_1 3# happyReduction_18+happyReduction_18 happy_x_1+ = happyIn8+ (liftA2 (==)+ )++#if __GLASGOW_HASKELL__ >= 710+happyReduce_19 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_19 = happySpecReduce_1 3# happyReduction_19+happyReduction_19 happy_x_1+ = happyIn8+ (liftA2 (<)+ )++#if __GLASGOW_HASKELL__ >= 710+happyReduce_20 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_20 = happySpecReduce_1 3# happyReduction_20+happyReduction_20 happy_x_1+ = happyIn8+ (liftA2 (>)+ )++#if __GLASGOW_HASKELL__ >= 710+happyReduce_21 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_21 = happySpecReduce_1 4# happyReduction_21+happyReduction_21 happy_x_1+ = happyIn9+ (liftA2 (==)+ )++#if __GLASGOW_HASKELL__ >= 710+happyReduce_22 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_22 = happySpecReduce_1 4# happyReduction_22+happyReduction_22 happy_x_1+ = happyIn9+ (liftA2 (flip isInfixOf)+ )++#if __GLASGOW_HASKELL__ >= 710+happyReduce_23 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_23 = happySpecReduce_1 5# happyReduction_23+happyReduction_23 happy_x_1+ = happyIn10+ (liftA2 (==)+ )++#if __GLASGOW_HASKELL__ >= 710+happyReduce_24 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_24 = happySpecReduce_1 5# happyReduction_24+happyReduction_24 happy_x_1+ = happyIn10+ (liftA2 T.isInfixOf+ )++#if __GLASGOW_HASKELL__ >= 710+happyReduce_25 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_25 = happySpecReduce_1 6# happyReduction_25+happyReduction_25 happy_x_1+ = happyIn11+ (fromIntegral (fromFVal RSA)+ )++#if __GLASGOW_HASKELL__ >= 710+happyReduce_26 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_26 = happySpecReduce_1 6# happyReduction_26+happyReduction_26 happy_x_1+ = happyIn11+ (fromIntegral (fromFVal DSA)+ )++#if __GLASGOW_HASKELL__ >= 710+happyReduce_27 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_27 = happySpecReduce_1 6# happyReduction_27+happyReduction_27 happy_x_1+ = happyIn11+ (fromIntegral (fromFVal ElgamalEncryptOnly)+ )++#if __GLASGOW_HASKELL__ >= 710+happyReduce_28 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_28 = happySpecReduce_1 6# happyReduction_28+happyReduction_28 happy_x_1+ = happyIn11+ (fromIntegral (fromFVal ECDSA)+ )++#if __GLASGOW_HASKELL__ >= 710+happyReduce_29 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_29 = happySpecReduce_1 6# happyReduction_29+happyReduction_29 happy_x_1+ = happyIn11+ (fromIntegral (fromFVal ECDH)+ )++#if __GLASGOW_HASKELL__ >= 710+happyReduce_30 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_30 = happySpecReduce_1 6# happyReduction_30+happyReduction_30 happy_x_1+ = happyIn11+ (fromIntegral (fromFVal DH)+ )++#if __GLASGOW_HASKELL__ >= 710+happyReduce_31 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_31 = happySpecReduce_1 6# happyReduction_31+happyReduction_31 happy_x_1+ = case happyOutTok happy_x_1 of { (TokenInt happy_var_1) -> + happyIn11+ (fromIntegral happy_var_1+ )}++#if __GLASGOW_HASKELL__ >= 710+happyReduce_32 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_32 = happySpecReduce_1 7# happyReduction_32+happyReduction_32 happy_x_1+ = case happyOutTok happy_x_1 of { (TokenFpr happy_var_1) -> + happyIn12+ ((show . pretty) happy_var_1+ )}++#if __GLASGOW_HASKELL__ >= 710+happyReduce_33 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_33 = happySpecReduce_1 8# happyReduction_33+happyReduction_33 happy_x_1+ = case happyOutTok happy_x_1 of { (TokenLongID happy_var_1) -> + happyIn13+ (either (const "BROKEN") show happy_var_1+ )}++#if __GLASGOW_HASKELL__ >= 710+happyReduce_34 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_34 = happySpecReduce_1 9# happyReduction_34+happyReduction_34 happy_x_1+ = happyIn14+ (return True+ )++#if __GLASGOW_HASKELL__ >= 710+happyReduce_35 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_35 = happySpecReduce_2 9# happyReduction_35+happyReduction_35 happy_x_2+ happy_x_1+ = case happyOut14 happy_x_2 of { happy_var_2 -> + happyIn14+ (fmap not happy_var_2+ )}++#if __GLASGOW_HASKELL__ >= 710+happyReduce_36 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_36 = happySpecReduce_3 9# happyReduction_36+happyReduction_36 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut14 happy_x_1 of { happy_var_1 -> + case happyOut14 happy_x_3 of { happy_var_3 -> + happyIn14+ (liftA2 (&&) happy_var_1 happy_var_3+ )}}++#if __GLASGOW_HASKELL__ >= 710+happyReduce_37 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_37 = happySpecReduce_3 9# happyReduction_37+happyReduction_37 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut14 happy_x_1 of { happy_var_1 -> + case happyOut14 happy_x_3 of { happy_var_3 -> + happyIn14+ (liftA2 (||) happy_var_1 happy_var_3+ )}}++#if __GLASGOW_HASKELL__ >= 710+happyReduce_38 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_38 = happySpecReduce_1 9# happyReduction_38+happyReduction_38 happy_x_1+ = case happyOut15 happy_x_1 of { happy_var_1 -> + happyIn14+ (happy_var_1+ )}++#if __GLASGOW_HASKELL__ >= 710+happyReduce_39 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_39 = happySpecReduce_1 9# happyReduction_39+happyReduction_39 happy_x_1+ = case happyOut17 happy_x_1 of { happy_var_1 -> + happyIn14+ (happy_var_1+ )}++#if __GLASGOW_HASKELL__ >= 710+happyReduce_40 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_40 = happySpecReduce_1 9# happyReduction_40+happyReduction_40 happy_x_1+ = case happyOut6 happy_x_1 of { happy_var_1 -> + happyIn14+ (pUsingPKP (maybeR True happy_var_1)+ )}++#if __GLASGOW_HASKELL__ >= 710+happyReduce_41 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_41 = happySpecReduce_3 10# happyReduction_41+happyReduction_41 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut16 happy_x_2 of { happy_var_2 -> + case happyOutTok happy_x_3 of { (TokenInt happy_var_3) -> + happyIn15+ (happy_var_2 (reader oGetTag) (return happy_var_3)+ )}}++#if __GLASGOW_HASKELL__ >= 710+happyReduce_42 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_42 = happySpecReduce_3 10# happyReduction_42+happyReduction_42 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut16 happy_x_2 of { happy_var_2 -> + case happyOutTok happy_x_3 of { (TokenInt happy_var_3) -> + happyIn15+ (happy_var_2 (reader oGetLength) (return happy_var_3)+ )}}++#if __GLASGOW_HASKELL__ >= 710+happyReduce_43 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_43 = happySpecReduce_1 11# happyReduction_43+happyReduction_43 happy_x_1+ = happyIn16+ (liftA2 (==)+ )++#if __GLASGOW_HASKELL__ >= 710+happyReduce_44 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_44 = happySpecReduce_1 11# happyReduction_44+happyReduction_44 happy_x_1+ = happyIn16+ (liftA2 (<)+ )++#if __GLASGOW_HASKELL__ >= 710+happyReduce_45 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_45 = happySpecReduce_1 11# happyReduction_45+happyReduction_45 happy_x_1+ = happyIn16+ (liftA2 (>)+ )++#if __GLASGOW_HASKELL__ >= 710+happyReduce_46 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_46 = happySpecReduce_3 12# happyReduction_46+happyReduction_46 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut18 happy_x_2 of { happy_var_2 -> + case happyOutTok happy_x_3 of { (TokenInt happy_var_3) -> + happyIn17+ (happy_var_2 (reader spGetSigVersion) (return (Just happy_var_3))+ )}}++#if __GLASGOW_HASKELL__ >= 710+happyReduce_47 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_47 = happySpecReduce_3 12# happyReduction_47+happyReduction_47 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut18 happy_x_2 of { happy_var_2 -> + case happyOut19 happy_x_3 of { happy_var_3 -> + happyIn17+ (happy_var_2 (reader spGetSigType) (return (Just happy_var_3))+ )}}++#if __GLASGOW_HASKELL__ >= 710+happyReduce_48 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_48 = happySpecReduce_3 12# happyReduction_48+happyReduction_48 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut18 happy_x_2 of { happy_var_2 -> + case happyOut20 happy_x_3 of { happy_var_3 -> + happyIn17+ (happy_var_2 (reader spGetPKAlgo) (return (Just happy_var_3))+ )}}++#if __GLASGOW_HASKELL__ >= 710+happyReduce_49 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_49 = happySpecReduce_3 12# happyReduction_49+happyReduction_49 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut18 happy_x_2 of { happy_var_2 -> + case happyOut21 happy_x_3 of { happy_var_3 -> + happyIn17+ (happy_var_2 (reader spGetHashAlgo) (return (Just happy_var_3))+ )}}++#if __GLASGOW_HASKELL__ >= 710+happyReduce_50 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_50 = happySpecReduce_3 12# happyReduction_50+happyReduction_50 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut18 happy_x_2 of { happy_var_2 -> + case happyOut22 happy_x_3 of { happy_var_3 -> + happyIn17+ (happy_var_2 (reader spGetSCT) (return (Just happy_var_3))+ )}}++#if __GLASGOW_HASKELL__ >= 710+happyReduce_51 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_51 = happySpecReduce_1 13# happyReduction_51+happyReduction_51 happy_x_1+ = happyIn18+ (liftA2 (==)+ )++#if __GLASGOW_HASKELL__ >= 710+happyReduce_52 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_52 = happySpecReduce_1 13# happyReduction_52+happyReduction_52 happy_x_1+ = happyIn18+ (liftA2 (<)+ )++#if __GLASGOW_HASKELL__ >= 710+happyReduce_53 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_53 = happySpecReduce_1 13# happyReduction_53+happyReduction_53 happy_x_1+ = happyIn18+ (liftA2 (>)+ )++#if __GLASGOW_HASKELL__ >= 710+happyReduce_54 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_54 = happySpecReduce_1 14# happyReduction_54+happyReduction_54 happy_x_1+ = happyIn19+ (fromIntegral (fromFVal BinarySig)+ )++#if __GLASGOW_HASKELL__ >= 710+happyReduce_55 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_55 = happySpecReduce_1 14# happyReduction_55+happyReduction_55 happy_x_1+ = happyIn19+ (fromIntegral (fromFVal CanonicalTextSig)+ )++#if __GLASGOW_HASKELL__ >= 710+happyReduce_56 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_56 = happySpecReduce_1 14# happyReduction_56+happyReduction_56 happy_x_1+ = happyIn19+ (fromIntegral (fromFVal StandaloneSig)+ )++#if __GLASGOW_HASKELL__ >= 710+happyReduce_57 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_57 = happySpecReduce_1 14# happyReduction_57+happyReduction_57 happy_x_1+ = happyIn19+ (fromIntegral (fromFVal GenericCert)+ )++#if __GLASGOW_HASKELL__ >= 710+happyReduce_58 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_58 = happySpecReduce_1 14# happyReduction_58+happyReduction_58 happy_x_1+ = happyIn19+ (fromIntegral (fromFVal PersonaCert)+ )++#if __GLASGOW_HASKELL__ >= 710+happyReduce_59 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_59 = happySpecReduce_1 14# happyReduction_59+happyReduction_59 happy_x_1+ = happyIn19+ (fromIntegral (fromFVal CasualCert)+ )++#if __GLASGOW_HASKELL__ >= 710+happyReduce_60 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_60 = happySpecReduce_1 14# happyReduction_60+happyReduction_60 happy_x_1+ = happyIn19+ (fromIntegral (fromFVal PositiveCert)+ )++#if __GLASGOW_HASKELL__ >= 710+happyReduce_61 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_61 = happySpecReduce_1 14# happyReduction_61+happyReduction_61 happy_x_1+ = happyIn19+ (fromIntegral (fromFVal SubkeyBindingSig)+ )++#if __GLASGOW_HASKELL__ >= 710+happyReduce_62 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_62 = happySpecReduce_1 14# happyReduction_62+happyReduction_62 happy_x_1+ = happyIn19+ (fromIntegral (fromFVal PrimaryKeyBindingSig)+ )++#if __GLASGOW_HASKELL__ >= 710+happyReduce_63 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_63 = happySpecReduce_1 14# happyReduction_63+happyReduction_63 happy_x_1+ = happyIn19+ (fromIntegral (fromFVal SignatureDirectlyOnAKey)+ )++#if __GLASGOW_HASKELL__ >= 710+happyReduce_64 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_64 = happySpecReduce_1 14# happyReduction_64+happyReduction_64 happy_x_1+ = happyIn19+ (fromIntegral (fromFVal KeyRevocationSig)+ )++#if __GLASGOW_HASKELL__ >= 710+happyReduce_65 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_65 = happySpecReduce_1 14# happyReduction_65+happyReduction_65 happy_x_1+ = happyIn19+ (fromIntegral (fromFVal SubkeyRevocationSig)+ )++#if __GLASGOW_HASKELL__ >= 710+happyReduce_66 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_66 = happySpecReduce_1 14# happyReduction_66+happyReduction_66 happy_x_1+ = happyIn19+ (fromIntegral (fromFVal CertRevocationSig)+ )++#if __GLASGOW_HASKELL__ >= 710+happyReduce_67 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_67 = happySpecReduce_1 14# happyReduction_67+happyReduction_67 happy_x_1+ = happyIn19+ (fromIntegral (fromFVal TimestampSig)+ )++#if __GLASGOW_HASKELL__ >= 710+happyReduce_68 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_68 = happySpecReduce_1 14# happyReduction_68+happyReduction_68 happy_x_1+ = case happyOutTok happy_x_1 of { (TokenInt happy_var_1) -> + happyIn19+ (fromIntegral happy_var_1+ )}++#if __GLASGOW_HASKELL__ >= 710+happyReduce_69 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_69 = happySpecReduce_1 15# happyReduction_69+happyReduction_69 happy_x_1+ = happyIn20+ (fromIntegral (fromFVal RSA)+ )++#if __GLASGOW_HASKELL__ >= 710+happyReduce_70 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_70 = happySpecReduce_1 15# happyReduction_70+happyReduction_70 happy_x_1+ = happyIn20+ (fromIntegral (fromFVal DSA)+ )++#if __GLASGOW_HASKELL__ >= 710+happyReduce_71 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_71 = happySpecReduce_1 15# happyReduction_71+happyReduction_71 happy_x_1+ = happyIn20+ (fromIntegral (fromFVal ElgamalEncryptOnly)+ )++#if __GLASGOW_HASKELL__ >= 710+happyReduce_72 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_72 = happySpecReduce_1 15# happyReduction_72+happyReduction_72 happy_x_1+ = happyIn20+ (fromIntegral (fromFVal ECDSA)+ )++#if __GLASGOW_HASKELL__ >= 710+happyReduce_73 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_73 = happySpecReduce_1 15# happyReduction_73+happyReduction_73 happy_x_1+ = happyIn20+ (fromIntegral (fromFVal ECDH)+ )++#if __GLASGOW_HASKELL__ >= 710+happyReduce_74 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_74 = happySpecReduce_1 15# happyReduction_74+happyReduction_74 happy_x_1+ = happyIn20+ (fromIntegral (fromFVal DH)+ )++#if __GLASGOW_HASKELL__ >= 710+happyReduce_75 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_75 = happySpecReduce_1 15# happyReduction_75+happyReduction_75 happy_x_1+ = case happyOutTok happy_x_1 of { (TokenInt happy_var_1) -> + happyIn20+ (fromIntegral happy_var_1+ )}++#if __GLASGOW_HASKELL__ >= 710+happyReduce_76 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_76 = happySpecReduce_1 16# happyReduction_76+happyReduction_76 happy_x_1+ = happyIn21+ (fromIntegral (fromFVal DeprecatedMD5)+ )++#if __GLASGOW_HASKELL__ >= 710+happyReduce_77 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_77 = happySpecReduce_1 16# happyReduction_77+happyReduction_77 happy_x_1+ = happyIn21+ (fromIntegral (fromFVal SHA1)+ )++#if __GLASGOW_HASKELL__ >= 710+happyReduce_78 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_78 = happySpecReduce_1 16# happyReduction_78+happyReduction_78 happy_x_1+ = happyIn21+ (fromIntegral (fromFVal RIPEMD160)+ )++#if __GLASGOW_HASKELL__ >= 710+happyReduce_79 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_79 = happySpecReduce_1 16# happyReduction_79+happyReduction_79 happy_x_1+ = happyIn21+ (fromIntegral (fromFVal SHA256)+ )++#if __GLASGOW_HASKELL__ >= 710+happyReduce_80 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_80 = happySpecReduce_1 16# happyReduction_80+happyReduction_80 happy_x_1+ = happyIn21+ (fromIntegral (fromFVal SHA384)+ )++#if __GLASGOW_HASKELL__ >= 710+happyReduce_81 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_81 = happySpecReduce_1 16# happyReduction_81+happyReduction_81 happy_x_1+ = happyIn21+ (fromIntegral (fromFVal SHA512)+ )++#if __GLASGOW_HASKELL__ >= 710+happyReduce_82 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_82 = happySpecReduce_1 16# happyReduction_82+happyReduction_82 happy_x_1+ = happyIn21+ (fromIntegral (fromFVal SHA224)+ )++#if __GLASGOW_HASKELL__ >= 710+happyReduce_83 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_83 = happySpecReduce_1 16# happyReduction_83+happyReduction_83 happy_x_1+ = case happyOutTok happy_x_1 of { (TokenInt happy_var_1) -> + happyIn21+ (fromIntegral happy_var_1+ )}++#if __GLASGOW_HASKELL__ >= 710+happyReduce_84 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_84 = happySpecReduce_1 17# happyReduction_84+happyReduction_84 happy_x_1+ = happyIn22+ (0+ )++#if __GLASGOW_HASKELL__ >= 710+happyReduce_85 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_85 = happySpecReduce_1 17# happyReduction_85+happyReduction_85 happy_x_1+ = case happyOutTok happy_x_1 of { (TokenInt happy_var_1) -> + happyIn22+ (fromIntegral happy_var_1+ )}++happyNewToken action sts stk+ = lexwrap(\tk -> + let cont i = happyDoAction i tk action sts stk in+ case tk of {+ TokenEOF -> happyDoAction 62# tk action sts stk;+ TokenA -> cont 1#;+ TokenAnd -> cont 2#;+ TokenAny -> cont 3#;+ TokenContains -> cont 4#;+ TokenEvery -> cont 5#;+ TokenNot -> cont 6#;+ TokenNow -> cont 7#;+ TokenOf -> cont 8#;+ TokenOne -> cont 9#;+ TokenOr -> cont 10#;+ TokenSubkey -> cont 11#;+ TokenTag -> cont 12#;+ TokenInt happy_dollar_dollar -> cont 13#;+ TokenEq -> cont 14#;+ TokenLt -> cont 15#;+ TokenGt -> cont 16#;+ TokenLParen -> cont 17#;+ TokenRParen -> cont 18#;+ TokenPKVersion -> cont 19#;+ TokenSigVersion -> cont 20#;+ TokenSigType -> cont 21#;+ TokenPKAlgo -> cont 22#;+ TokenSigPKAlgo -> cont 23#;+ TokenHashAlgo -> cont 24#;+ TokenRSA -> cont 25#;+ TokenDSA -> cont 26#;+ TokenElgamal -> cont 27#;+ TokenECDSA -> cont 28#;+ TokenECDH -> cont 29#;+ TokenDH -> cont 30#;+ TokenBinary -> cont 31#;+ TokenCanonicalText -> cont 32#;+ TokenStandalone -> cont 33#;+ TokenGenericCert -> cont 34#;+ TokenPersonaCert -> cont 35#;+ TokenCasualCert -> cont 36#;+ TokenPositiveCert -> cont 37#;+ TokenSubkeyBindingSig -> cont 38#;+ TokenPrimaryKeyBindingSig -> cont 39#;+ TokenSignatureDirectlyOnAKey -> cont 40#;+ TokenKeyRevocationSig -> cont 41#;+ TokenSubkeyRevocationSig -> cont 42#;+ TokenCertRevocationSig -> cont 43#;+ TokenTimestampSig -> cont 44#;+ TokenMD5 -> cont 45#;+ TokenSHA1 -> cont 46#;+ TokenRIPEMD160 -> cont 47#;+ TokenSHA256 -> cont 48#;+ TokenSHA384 -> cont 49#;+ TokenSHA512 -> cont 50#;+ TokenSHA224 -> cont 51#;+ TokenKeysize -> cont 52#;+ TokenTimestamp -> cont 53#;+ TokenFingerprint -> cont 54#;+ TokenKeyID -> cont 55#;+ TokenSigCreationTime -> cont 56#;+ TokenFpr happy_dollar_dollar -> cont 57#;+ TokenLongID happy_dollar_dollar -> cont 58#;+ TokenLength -> cont 59#;+ TokenStr happy_dollar_dollar -> cont 60#;+ TokenUids -> cont 61#;+ _ -> happyError' (tk, [])+ })++happyError_ explist 62# tk = happyError' (tk, explist)+happyError_ explist _ tk = happyError' (tk, explist)++happyThen :: () => Alex a -> (a -> Alex b) -> Alex b+happyThen = (>>=)+happyReturn :: () => a -> Alex a+happyReturn = (return)+#if __GLASGOW_HASKELL__ >= 710+happyParse :: () => Happy_GHC_Exts.Int# -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)++happyNewToken :: () => Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)++happyDoAction :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)++happyReduceArr :: () => Happy_Data_Array.Array Int (Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _))++#endif+happyThen1 :: () => Alex a -> (a -> Alex b) -> Alex b+happyThen1 = happyThen+happyReturn1 :: () => a -> Alex a+happyReturn1 = happyReturn+happyError' :: () => ((Token), [String]) -> Alex a+happyError' tk = (\(tokens, _) -> happyError tokens) tk+parseTK = happySomeParser where+ happySomeParser = happyThen (happyParse 0#) (\x -> happyReturn (let {x' = happyOut5 x} in x'))++parseP = happySomeParser where+ happySomeParser = happyThen (happyParse 1#) (\x -> happyReturn (let {x' = happyOut14 x} in x'))++happySeq = happyDontSeq+++lexwrap :: (Token -> Alex a) -> Alex a+lexwrap cont = do+ t <- alexMonadScan'+ cont t++alexMonadScan' = do+ inp <- alexGetInput+ sc <- alexGetStartCode+ case alexScan inp sc of+ AlexEOF -> alexEOF+ AlexError (pos, _, _, _) -> alexError (show pos)+ AlexSkip inp' len -> do+ alexSetInput inp'+ alexMonadScan'+ AlexToken inp' len action -> do+ alexSetInput inp'+ action (ignorePendingBytes inp) len++getPosn :: Alex (Int,Int)+getPosn = do+ (AlexPn _ l c,_,_,_) <- alexGetInput+ return (l,c)++happyError :: Token -> Alex a+happyError t = do+ (l,c) <- getPosn+ error (show l ++ ":" ++ show c ++ ": Parse error on Token: " ++ show t ++ "\n")++parseTKExp :: String -> Either String (Reader TK Bool)+parseTKExp s = runAlex s parseTK++parsePExp :: String -> Either String (Reader Pkt Bool)+parsePExp s = runAlex s parseP+{-# LINE 1 "templates/GenericTemplate.hs" #-}+-- $Id: GenericTemplate.hs,v 1.26 2005/01/14 14:47:22 simonmar Exp $++++++++++++++-- Do not remove this comment. Required to fix CPP parsing when using GCC and a clang-compiled alex.+#if __GLASGOW_HASKELL__ > 706+#define LT(n,m) ((Happy_GHC_Exts.tagToEnum# (n Happy_GHC_Exts.<# m)) :: Bool)+#define GTE(n,m) ((Happy_GHC_Exts.tagToEnum# (n Happy_GHC_Exts.>=# m)) :: Bool)+#define EQ(n,m) ((Happy_GHC_Exts.tagToEnum# (n Happy_GHC_Exts.==# m)) :: Bool)+#else+#define LT(n,m) (n Happy_GHC_Exts.<# m)+#define GTE(n,m) (n Happy_GHC_Exts.>=# m)+#define EQ(n,m) (n Happy_GHC_Exts.==# m)+#endif++++++++++++++++++++data Happy_IntList = HappyCons Happy_GHC_Exts.Int# Happy_IntList+++++++++++++++++++++++++++++++++++++++++infixr 9 `HappyStk`+data HappyStk a = HappyStk a (HappyStk a)++-----------------------------------------------------------------------------+-- starting the parse++happyParse start_state = happyNewToken start_state notHappyAtAll notHappyAtAll++-----------------------------------------------------------------------------+-- Accepting the parse++-- If the current token is ERROR_TOK, it means we've just accepted a partial+-- parse (a %partial parser). We must ignore the saved token on the top of+-- the stack in this case.+happyAccept 0# tk st sts (_ `HappyStk` ans `HappyStk` _) =+ happyReturn1 ans+happyAccept j tk st sts (HappyStk ans _) = + (happyTcHack j (happyTcHack st)) (happyReturn1 ans)++-----------------------------------------------------------------------------+-- Arrays only: do the next action++++happyDoAction i tk st+ = {- nothing -}+ case action of+ 0# -> {- nothing -}+ happyFail (happyExpListPerState ((Happy_GHC_Exts.I# (st)) :: Int)) i tk st+ -1# -> {- nothing -}+ happyAccept i tk st+ n | LT(n,(0# :: Happy_GHC_Exts.Int#)) -> {- nothing -}+ (happyReduceArr Happy_Data_Array.! rule) i tk st+ where rule = (Happy_GHC_Exts.I# ((Happy_GHC_Exts.negateInt# ((n Happy_GHC_Exts.+# (1# :: Happy_GHC_Exts.Int#))))))+ n -> {- nothing -}+ happyShift new_state i tk st+ where new_state = (n Happy_GHC_Exts.-# (1# :: Happy_GHC_Exts.Int#))+ where off = happyAdjustOffset (indexShortOffAddr happyActOffsets st)+ off_i = (off Happy_GHC_Exts.+# i)+ check = if GTE(off_i,(0# :: Happy_GHC_Exts.Int#))+ then EQ(indexShortOffAddr happyCheck off_i, i)+ else False+ action+ | check = indexShortOffAddr happyTable off_i+ | otherwise = indexShortOffAddr happyDefActions st+++++indexShortOffAddr (HappyA# arr) off =+ Happy_GHC_Exts.narrow16Int# i+ where+ i = Happy_GHC_Exts.word2Int# (Happy_GHC_Exts.or# (Happy_GHC_Exts.uncheckedShiftL# high 8#) low)+ high = Happy_GHC_Exts.int2Word# (Happy_GHC_Exts.ord# (Happy_GHC_Exts.indexCharOffAddr# arr (off' Happy_GHC_Exts.+# 1#)))+ low = Happy_GHC_Exts.int2Word# (Happy_GHC_Exts.ord# (Happy_GHC_Exts.indexCharOffAddr# arr off'))+ off' = off Happy_GHC_Exts.*# 2#+++++{-# INLINE happyLt #-}+happyLt x y = LT(x,y)+++readArrayBit arr bit =+ Bits.testBit (Happy_GHC_Exts.I# (indexShortOffAddr arr ((unbox_int bit) `Happy_GHC_Exts.iShiftRA#` 4#))) (bit `mod` 16)+ where unbox_int (Happy_GHC_Exts.I# x) = x+++++++data HappyAddr = HappyA# Happy_GHC_Exts.Addr#+++-----------------------------------------------------------------------------+-- HappyState data type (not arrays)++++++++++++++-----------------------------------------------------------------------------+-- Shifting a token++happyShift new_state 0# tk st sts stk@(x `HappyStk` _) =+ let i = (case Happy_GHC_Exts.unsafeCoerce# x of { (Happy_GHC_Exts.I# (i)) -> i }) in+-- trace "shifting the error token" $+ happyDoAction i tk new_state (HappyCons (st) (sts)) (stk)++happyShift new_state i tk st sts stk =+ happyNewToken new_state (HappyCons (st) (sts)) ((happyInTok (tk))`HappyStk`stk)++-- happyReduce is specialised for the common cases.++happySpecReduce_0 i fn 0# tk st sts stk+ = happyFail [] 0# tk st sts stk+happySpecReduce_0 nt fn j tk st@((action)) sts stk+ = happyGoto nt j tk st (HappyCons (st) (sts)) (fn `HappyStk` stk)++happySpecReduce_1 i fn 0# tk st sts stk+ = happyFail [] 0# tk st sts stk+happySpecReduce_1 nt fn j tk _ sts@((HappyCons (st@(action)) (_))) (v1`HappyStk`stk')+ = let r = fn v1 in+ happySeq r (happyGoto nt j tk st sts (r `HappyStk` stk'))++happySpecReduce_2 i fn 0# tk st sts stk+ = happyFail [] 0# tk st sts stk+happySpecReduce_2 nt fn j tk _ (HappyCons (_) (sts@((HappyCons (st@(action)) (_))))) (v1`HappyStk`v2`HappyStk`stk')+ = let r = fn v1 v2 in+ happySeq r (happyGoto nt j tk st sts (r `HappyStk` stk'))++happySpecReduce_3 i fn 0# tk st sts stk+ = happyFail [] 0# tk st sts stk+happySpecReduce_3 nt fn j tk _ (HappyCons (_) ((HappyCons (_) (sts@((HappyCons (st@(action)) (_))))))) (v1`HappyStk`v2`HappyStk`v3`HappyStk`stk')+ = let r = fn v1 v2 v3 in+ happySeq r (happyGoto nt j tk st sts (r `HappyStk` stk'))++happyReduce k i fn 0# tk st sts stk+ = happyFail [] 0# tk st sts stk+happyReduce k nt fn j tk st sts stk+ = case happyDrop (k Happy_GHC_Exts.-# (1# :: Happy_GHC_Exts.Int#)) sts of+ sts1@((HappyCons (st1@(action)) (_))) ->+ let r = fn stk in -- it doesn't hurt to always seq here...+ happyDoSeq r (happyGoto nt j tk st1 sts1 r)++happyMonadReduce k nt fn 0# tk st sts stk+ = happyFail [] 0# tk st sts stk+happyMonadReduce k nt fn j tk st sts stk =+ case happyDrop k (HappyCons (st) (sts)) of+ sts1@((HappyCons (st1@(action)) (_))) ->+ let drop_stk = happyDropStk k stk in+ happyThen1 (fn stk tk) (\r -> happyGoto nt j tk st1 sts1 (r `HappyStk` drop_stk))++happyMonad2Reduce k nt fn 0# tk st sts stk+ = happyFail [] 0# tk st sts stk+happyMonad2Reduce k nt fn j tk st sts stk =+ case happyDrop k (HappyCons (st) (sts)) of+ sts1@((HappyCons (st1@(action)) (_))) ->+ let drop_stk = happyDropStk k stk++ off = happyAdjustOffset (indexShortOffAddr happyGotoOffsets st1)+ off_i = (off Happy_GHC_Exts.+# nt)+ new_state = indexShortOffAddr happyTable off_i+++++ in+ happyThen1 (fn stk tk) (\r -> happyNewToken new_state sts1 (r `HappyStk` drop_stk))++happyDrop 0# l = l+happyDrop n (HappyCons (_) (t)) = happyDrop (n Happy_GHC_Exts.-# (1# :: Happy_GHC_Exts.Int#)) t++happyDropStk 0# l = l+happyDropStk n (x `HappyStk` xs) = happyDropStk (n Happy_GHC_Exts.-# (1#::Happy_GHC_Exts.Int#)) xs++-----------------------------------------------------------------------------+-- Moving to a new state after a reduction+++happyGoto nt j tk st = + {- nothing -}+ happyDoAction j tk new_state+ where off = happyAdjustOffset (indexShortOffAddr happyGotoOffsets st)+ off_i = (off Happy_GHC_Exts.+# nt)+ new_state = indexShortOffAddr happyTable off_i+++++-----------------------------------------------------------------------------+-- Error recovery (ERROR_TOK is the error token)++-- parse error if we are in recovery and we fail again+happyFail explist 0# tk old_st _ stk@(x `HappyStk` _) =+ let i = (case Happy_GHC_Exts.unsafeCoerce# x of { (Happy_GHC_Exts.I# (i)) -> i }) in+-- trace "failing" $ + happyError_ explist i tk++{- We don't need state discarding for our restricted implementation of+ "error". In fact, it can cause some bogus parses, so I've disabled it+ for now --SDM++-- discard a state+happyFail ERROR_TOK tk old_st CONS(HAPPYSTATE(action),sts) + (saved_tok `HappyStk` _ `HappyStk` stk) =+-- trace ("discarding state, depth " ++ show (length stk)) $+ DO_ACTION(action,ERROR_TOK,tk,sts,(saved_tok`HappyStk`stk))+-}++-- Enter error recovery: generate an error token,+-- save the old token and carry on.+happyFail explist i tk (action) sts stk =+-- trace "entering error recovery" $+ happyDoAction 0# tk action sts ((Happy_GHC_Exts.unsafeCoerce# (Happy_GHC_Exts.I# (i))) `HappyStk` stk)++-- Internal happy errors:++notHappyAtAll :: a+notHappyAtAll = error "Internal Happy error\n"++-----------------------------------------------------------------------------+-- Hack to get the typechecker to accept our action functions+++happyTcHack :: Happy_GHC_Exts.Int# -> a -> a+happyTcHack x y = y+{-# INLINE happyTcHack #-}+++-----------------------------------------------------------------------------+-- Seq-ing. If the --strict flag is given, then Happy emits +-- happySeq = happyDoSeq+-- otherwise it emits+-- happySeq = happyDontSeq++happyDoSeq, happyDontSeq :: a -> b -> b+happyDoSeq a b = a `seq` b+happyDontSeq a b = b++-----------------------------------------------------------------------------+-- Don't inline any functions from the template. GHC has a nasty habit+-- of deciding to inline happyGoto everywhere, which increases the size of+-- the generated parser quite a bit.+++{-# NOINLINE happyDoAction #-}+{-# NOINLINE happyTable #-}+{-# NOINLINE happyCheck #-}+{-# NOINLINE happyActOffsets #-}+{-# NOINLINE happyGotoOffsets #-}+{-# NOINLINE happyDefActions #-}++{-# NOINLINE happyShift #-}+{-# NOINLINE happySpecReduce_0 #-}+{-# NOINLINE happySpecReduce_1 #-}+{-# NOINLINE happySpecReduce_2 #-}+{-# NOINLINE happySpecReduce_3 #-}+{-# NOINLINE happyReduce #-}+{-# NOINLINE happyMonadReduce #-}+{-# NOINLINE happyGoto #-}+{-# NOINLINE happyFail #-}++-- end of Happy Template.
+ dist/build/hot/hot-tmp/HOpenPGP/Tools/Lexer.hs view
@@ -0,0 +1,1577 @@+{-# OPTIONS_GHC -fno-warn-unused-binds -fno-warn-missing-signatures #-}+{-# LANGUAGE CPP,MagicHash #-}+{-# LINE 1 "HOpenPGP/Tools/Lexer.x" #-}++{-# OPTIONS -w #-}+module HOpenPGP.Tools.Lexer+( alexEOF+, alexSetInput+, alexGetInput+, alexError+, alexScan+, ignorePendingBytes+, alexGetStartCode+, runAlex+, Alex(..)+, Token(..)+, AlexReturn(..)+, AlexPosn(..)+) where++import Prelude hiding (lex)+import Numeric (readHex)+import Codec.Encryption.OpenPGP.Types (TwentyOctetFingerprint(..), EightOctetKeyId(..))+++#if __GLASGOW_HASKELL__ >= 603+#include "ghcconfig.h"+#elif defined(__GLASGOW_HASKELL__)+#include "config.h"+#endif+#if __GLASGOW_HASKELL__ >= 503+import Data.Array+#else+import Array+#endif+#if __GLASGOW_HASKELL__ >= 503+import Data.Array.Base (unsafeAt)+import GHC.Exts+#else+import GlaExts+#endif+{-# 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.+++import Control.Applicative as App (Applicative (..))+++import Data.Word (Word8)+++++++++++++++++import Data.Char (ord)+import qualified Data.Bits++-- | Encode a Haskell String to a list of Word8 values, in UTF8 format.+utf8Encode :: Char -> [Word8]+utf8Encode = uncurry (:) . utf8Encode'++utf8Encode' :: Char -> (Word8, [Word8])+utf8Encode' c = case go (ord c) of+ (x, xs) -> (fromIntegral x, map fromIntegral xs)+ where+ go oc+ | oc <= 0x7f = ( oc+ , [+ ])++ | oc <= 0x7ff = ( 0xc0 + (oc `Data.Bits.shiftR` 6)+ , [0x80 + oc Data.Bits..&. 0x3f+ ])++ | oc <= 0xffff = ( 0xe0 + (oc `Data.Bits.shiftR` 12)+ , [0x80 + ((oc `Data.Bits.shiftR` 6) Data.Bits..&. 0x3f)+ , 0x80 + oc Data.Bits..&. 0x3f+ ])+ | otherwise = ( 0xf0 + (oc `Data.Bits.shiftR` 18)+ , [0x80 + ((oc `Data.Bits.shiftR` 12) Data.Bits..&. 0x3f)+ , 0x80 + ((oc `Data.Bits.shiftR` 6) Data.Bits..&. 0x3f)+ , 0x80 + oc Data.Bits..&. 0x3f+ ])++++type Byte = Word8++-- -----------------------------------------------------------------------------+-- The input type+++type AlexInput = (AlexPosn, -- current position,+ Char, -- previous char+ [Byte], -- pending bytes on current char+ String) -- current input string++ignorePendingBytes :: AlexInput -> AlexInput+ignorePendingBytes (p,c,_ps,s) = (p,c,[],s)++alexInputPrevChar :: AlexInput -> Char+alexInputPrevChar (_p,c,_bs,_s) = c++alexGetByte :: AlexInput -> Maybe (Byte,AlexInput)+alexGetByte (p,c,(b:bs),s) = Just (b,(p,c,bs,s))+alexGetByte (_,_,[],[]) = Nothing+alexGetByte (p,_,[],(c:s)) = let p' = alexMove p c+ in case utf8Encode' c of+ (b, bs) -> p' `seq` Just (b, (p', c, bs, s))++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-- -----------------------------------------------------------------------------+-- 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+alex_tab_size-((c-1) `mod` alex_tab_size))+alexMove (AlexPn a l _) '\n' = AlexPn (a+1) (l+1) 1+alexMove (AlexPn a l c) _ = AlexPn (a+1) l (c+1)+++-- -----------------------------------------------------------------------------+-- Monad (default and with ByteString input)+++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_bytes :: [Byte],++++++ alex_scd :: !Int -- the current startcode++++ }++-- Compile with -funbox-strict-fields for best results!+++runAlex :: String -> Alex a -> Either String a+runAlex input__ (Alex f)+ = case f (AlexState {alex_bytes = [],++++++ alex_pos = alexStartPos,+ alex_inp = input__,+ alex_chr = '\n',++++ alex_scd = 0}) of Left msg -> Left msg+ Right ( _, a ) -> Right a++newtype Alex a = Alex { unAlex :: AlexState -> Either String (AlexState, a) }++instance Functor Alex where+ fmap f a = Alex $ \s -> case unAlex a s of+ Left msg -> Left msg+ Right (s', a') -> Right (s', f a')++instance Applicative Alex where+ pure a = Alex $ \s -> Right (s, a)+ fa <*> a = Alex $ \s -> case unAlex fa s of+ Left msg -> Left msg+ Right (s', f) -> case unAlex a s' of+ Left msg -> Left msg+ Right (s'', b) -> Right (s'', f b)++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 = App.pure++alexGetInput :: Alex AlexInput+alexGetInput++ = Alex $ \s@AlexState{alex_pos=pos,alex_chr=c,alex_bytes=bs,alex_inp=inp__} ->+ Right (s, (pos,c,bs,inp__))++++++alexSetInput :: AlexInput -> Alex ()++alexSetInput (pos,c,bs,inp__)+ = Alex $ \s -> case s{alex_pos=pos,alex_chr=c,alex_bytes=bs,alex_inp=inp__} of++++++++ state__@(AlexState{}) -> Right (state__, ())++alexError :: String -> Alex a+alexError message = Alex $ const $ 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 ((AlexPn _ line column),_,_,_) -> alexError $ "lexical error at line " ++ (show line) ++ ", column " ++ (show column)+ AlexSkip inp__' _len -> do+ alexSetInput inp__'+ alexMonadScan++ AlexToken inp__' len action -> do++++ alexSetInput inp__'+ action (ignorePendingBytes inp__) len++-- -----------------------------------------------------------------------------+-- Useful token actions+++type AlexAction result = AlexInput -> Int -> Alex 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 :: (AlexInput -> Int -> token) -> AlexAction token++++token t input__ len = return (t input__ len)++++-- -----------------------------------------------------------------------------+-- Basic wrapper+++++++++++++++++++++++++-- -----------------------------------------------------------------------------+-- Basic wrapper, ByteString version+++++++++++++++++++++++++++++++++-- -----------------------------------------------------------------------------+-- Posn wrapper++-- Adds text positions to the basic model.++++++++++++++-- -----------------------------------------------------------------------------+-- Posn wrapper, ByteString version+++++++++++++++-- -----------------------------------------------------------------------------+-- GScan wrapper++-- For compatibility with previous versions of Alex, and because we can.+++++++++++++++alex_tab_size :: Int+alex_tab_size = 8+alex_base :: AlexAddr+alex_base = AlexA#+ "\xf8\xff\xff\xff\x8d\xff\xff\xff\xa2\xff\xff\xff\x8f\xff\xff\xff\xa3\xff\xff\xff\x96\xff\xff\xff\x98\xff\xff\xff\xa7\xff\xff\xff\x9e\xff\xff\xff\x9f\xff\xff\xff\xa0\xff\xff\xff\xd1\xff\xff\xff\xd2\xff\xff\xff\xd6\xff\xff\xff\x97\xff\xff\xff\xac\xff\xff\xff\xad\xff\xff\xff\xae\xff\xff\xff\x9d\xff\xff\xff\xb2\xff\xff\xff\xb4\xff\xff\xff\xb5\xff\xff\xff\xb6\xff\xff\xff\xe9\xff\xff\xff\xf1\xff\xff\xff\xc5\xff\xff\xff\xba\xff\xff\xff\xc0\xff\xff\xff\xb8\xff\xff\xff\xdc\xff\xff\xff\xe5\xff\xff\xff\xd3\xff\xff\xff\xd5\xff\xff\xff\xe0\xff\xff\xff\xe2\xff\xff\xff\xe8\xff\xff\xff\x0e\x00\x00\x00\xef\xff\xff\xff\xea\xff\xff\xff\xeb\xff\xff\xff\xec\xff\xff\xff\xed\xff\xff\xff\xf9\xff\xff\xff\x05\x00\x00\x00\x06\x00\x00\x00\x11\x00\x00\x00\x23\x00\x00\x00\x38\x00\x00\x00\x03\x00\x00\x00\x1f\x00\x00\x00\x07\x00\x00\x00\x10\x00\x00\x00\x08\x00\x00\x00\x15\x00\x00\x00\x0f\x00\x00\x00\x12\x00\x00\x00\x13\x00\x00\x00\x01\x00\x00\x00\x0c\x00\x00\x00\x1c\x00\x00\x00\x19\x00\x00\x00\x14\x00\x00\x00\x1a\x00\x00\x00\x1b\x00\x00\x00\x1d\x00\x00\x00\x20\x00\x00\x00\x31\x00\x00\x00\x33\x00\x00\x00\x3c\x00\x00\x00\x36\x00\x00\x00\x37\x00\x00\x00\x39\x00\x00\x00\x3a\x00\x00\x00\x5a\x00\x00\x00\x45\x00\x00\x00\x26\x00\x00\x00\x29\x00\x00\x00\x32\x00\x00\x00\x2b\x00\x00\x00\x1e\x00\x00\x00\x2c\x00\x00\x00\x2f\x00\x00\x00\x21\x00\x00\x00\x3b\x00\x00\x00\x25\x00\x00\x00\x27\x00\x00\x00\xee\x00\x00\x00\xef\x00\x00\x00\xf0\x00\x00\x00\xf1\x00\x00\x00\x3d\x00\x00\x00\xf2\x00\x00\x00\xf3\x00\x00\x00\xf4\x00\x00\x00\xf5\x00\x00\x00\x34\x00\x00\x00\x3e\x00\x00\x00\xf8\x00\x00\x00\x43\x00\x00\x00\xe6\x00\x00\x00\x44\x00\x00\x00\xcc\x00\x00\x00\x9b\x01\x00\x00\x9c\x01\x00\x00\xe9\x00\x00\x00\xf6\x00\x00\x00\x3f\x00\x00\x00\x40\x00\x00\x00\x41\x00\x00\x00\xd5\x00\x00\x00\x2a\x00\x00\x00\x2e\x00\x00\x00\x30\x00\x00\x00\xce\x00\x00\x00\xf7\x00\x00\x00\xd7\x00\x00\x00\xcb\x00\x00\x00\xda\x00\x00\x00\xdb\x00\x00\x00\xcf\x00\x00\x00\xe0\x00\x00\x00\xdc\x00\x00\x00\xe2\x00\x00\x00\xdd\x00\x00\x00\xde\x00\x00\x00\x99\x01\x00\x00\xdf\x00\x00\x00\xe1\x00\x00\x00\xe3\x00\x00\x00\xe8\x00\x00\x00\xa4\x01\x00\x00\xf9\x00\x00\x00\xe4\x00\x00\x00\xea\x00\x00\x00\xeb\x00\x00\x00\xec\x00\x00\x00\xd8\x00\x00\x00\xfa\x00\x00\x00\x28\x00\x00\x00\xed\x00\x00\x00\xfb\x00\x00\x00\x81\x01\x00\x00\x82\x01\x00\x00\xfe\x00\x00\x00\xfc\x00\x00\x00\x79\x01\x00\x00\x01\x01\x00\x00\x8c\x01\x00\x00\x8d\x01\x00\x00\x7c\x01\x00\x00\x89\x01\x00\x00\x88\x01\x00\x00\x8a\x01\x00\x00\x8b\x01\x00\x00\x8f\x01\x00\x00\x92\x01\x00\x00\x93\x01\x00\x00\x94\x01\x00\x00\x96\x01\x00\x00\x8e\x01\x00\x00\x95\x01\x00\x00\x85\x01\x00\x00\x98\x01\x00\x00\x90\x01\x00\x00\x9d\x01\x00\x00\xa0\x01\x00\x00\x91\x01\x00\x00\x97\x01\x00\x00\x9a\x01\x00\x00\x9e\x01\x00\x00\x9f\x01\x00\x00\xa7\x01\x00\x00\xac\x01\x00\x00\xad\x01\x00\x00\xaf\x01\x00\x00\xb0\x01\x00\x00\xb1\x01\x00\x00\xae\x01\x00\x00\xb7\x01\x00\x00\xb2\x01\x00\x00\xa1\x01\x00\x00\xa3\x01\x00\x00\xb3\x01\x00\x00\xb8\x01\x00\x00\xa2\x01\x00\x00\xb4\x01\x00\x00\xe7\x00\x00\x00\xb5\x01\x00\x00\xbe\x01\x00\x00\xb6\x01\x00\x00\xb9\x01\x00\x00\xba\x01\x00\x00\xbb\x01\x00\x00\xc1\x01\x00\x00\xc2\x01\x00\x00\xce\x01\x00\x00\xd1\x01\x00\x00\xbc\x01\x00\x00\xbf\x01\x00\x00\xbd\x01\x00\x00\xc0\x01\x00\x00\xc3\x01\x00\x00\xe4\x01\x00\x00\xe5\x01\x00\x00\xc4\x01\x00\x00\xc6\x01\x00\x00\xc9\x01\x00\x00\xc7\x01\x00\x00\xca\x01\x00\x00\xc8\x01\x00\x00\xd2\x01\x00\x00\xcf\x01\x00\x00\xd3\x01\x00\x00\xcb\x01\x00\x00\xd8\x01\x00\x00\xd0\x01\x00\x00\xd5\x01\x00\x00\xd6\x01\x00\x00\xd7\x01\x00\x00\xc5\x01\x00\x00\xcc\x01\x00\x00\xda\x01\x00\x00\xd4\x01\x00\x00\xdb\x01\x00\x00\xd9\x01\x00\x00\xe0\x01\x00\x00\xe1\x01\x00\x00\xe2\x01\x00\x00\xe3\x01\x00\x00\xe6\x01\x00\x00\xe7\x01\x00\x00\xea\x01\x00\x00\xeb\x01\x00\x00\xe8\x01\x00\x00\xee\x01\x00\x00\xf3\x01\x00\x00\xec\x01\x00\x00\xed\x01\x00\x00\xde\x01\x00\x00\x00\x00\x00\x00\xdc\x01\x00\x00\x88\x02\x00\x00\xef\x01\x00\x00\xdf\x01\x00\x00\xf2\x01\x00\x00\x99\x02\x00\x00\xf4\x01\x00\x00\xf5\x01\x00\x00\xf7\x01\x00\x00\xf8\x01\x00\x00\xf0\x01\x00\x00\x8a\x02\x00\x00\xf9\x01\x00\x00\x9c\x02\x00\x00\x9d\x02\x00\x00\xfb\x01\x00\x00\x00\x00\x00\x00\x55\x02\x00\x00\x9a\x02\x00\x00\x0d\x03\x00\x00\xf6\x01\x00\x00\xfc\x01\x00\x00\xfd\x01\x00\x00\x83\x03\x00\x00\x43\x03\x00\x00\x00\x00\x00\x00\x73\x02\x00\x00\x6f\x02\x00\x00\x6a\x02\x00\x00\xa1\x02\x00\x00\x32\x02\x00\x00\xfe\x01\x00\x00\xa2\x02\x00\x00\x75\x02\x00\x00\x76\x02\x00\x00\x77\x02\x00\x00\x78\x02\x00\x00\x7d\x02\x00\x00\x7a\x02\x00\x00\x7c\x02\x00\x00\x7f\x02\x00\x00\x85\x02\x00\x00\x89\x02\x00\x00\x82\x02\x00\x00\x39\x04\x00\x00\x14\x04\x00\x00\x92\x02\x00\x00\x83\x02\x00\x00\x8b\x02\x00\x00\x90\x02\x00\x00\xc5\x02\x00\x00\xc8\x02\x00\x00\xcd\x02\x00\x00\xce\x02\x00\x00\xd7\x02\x00\x00\x94\x02\x00\x00\x95\x02\x00\x00\x9e\x02\x00\x00\xe2\x02\x00\x00\xe3\x02\x00\x00\xec\x02\x00\x00\xeb\x02\x00\x00\xed\x02\x00\x00\xf4\x02\x00\x00\xe8\x02\x00\x00\xf9\x02\x00\x00\x5e\x03\x00\x00\x2c\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x21\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x09\x05\x00\x00\x20\x05\x00\x00\x46\x05\x00\x00\x5d\x05\x00\x00\x83\x05\x00\x00\x9a\x05\x00\x00\xc0\x05\x00\x00\xd7\x05\x00\x00\xfd\x05\x00\x00\x14\x06\x00\x00\x3a\x06\x00\x00\x51\x06\x00\x00\x77\x06\x00\x00\x8e\x06\x00\x00\xb4\x06\x00\x00\xcb\x06\x00\x00\xf1\x06\x00\x00\x09\x07\x00\x00\x2f\x07\x00\x00\x46\x07\x00\x00\x6c\x07\x00\x00\x83\x07\x00\x00\xa9\x07\x00\x00\xc0\x07\x00\x00\xe6\x07\x00\x00\xfd\x07\x00\x00\x23\x08\x00\x00\x3a\x08\x00\x00\x60\x08\x00\x00\x77\x08\x00\x00\x9d\x08\x00\x00\xb4\x08\x00\x00\xda\x08\x00\x00\xf1\x08\x00\x00\x17\x09\x00\x00\x2e\x09\x00\x00\x54\x09\x00\x00\x6b\x09\x00\x00\x91\x09\x00\x00\xa8\x09\x00\x00\xce\x09\x00\x00\xe5\x09\x00\x00\x0b\x0a\x00\x00\x22\x0a\x00\x00\x48\x0a\x00\x00\x5f\x0a\x00\x00\x85\x0a\x00\x00\x9c\x0a\x00\x00\xe3\x0a\x00\x00\xfa\x0a\x00\x00\x20\x0b\x00\x00\x37\x0b\x00\x00\x5d\x0b\x00\x00\x74\x0b\x00\x00\x9a\x0b\x00\x00\xb1\x0b\x00\x00\xd7\x0b\x00\x00\xee\x0b\x00\x00\x28\x0c\x00\x00\x3f\x0c\x00\x00\x76\x0c\x00\x00\x8d\x0c\x00\x00\xb3\x0c\x00\x00\xca\x0c\x00\x00\xf0\x0c\x00\x00\x16\x0d\x00\x00\x2d\x0d\x00\x00\x64\x0d\x00\x00\x7b\x0d\x00\x00\xa1\x0d\x00\x00\xb8\x0d\x00\x00\xde\x0d\x00\x00\xf5\x0d\x00\x00\x1b\x0e\x00\x00\x32\x0e\x00\x00\x58\x0e\x00\x00\x6f\x0e\x00\x00\x95\x0e\x00\x00\xac\x0e\x00\x00\xd2\x0e\x00\x00\xe9\x0e\x00\x00\x0f\x0f\x00\x00\x26\x0f\x00\x00\x4c\x0f\x00\x00\x63\x0f\x00\x00\x89\x0f\x00\x00\xa0\x0f\x00\x00\xc6\x0f\x00\x00\xdd\x0f\x00\x00\x03\x10\x00\x00\x1a\x10\x00\x00\x40\x10\x00\x00\x57\x10\x00\x00\x7d\x10\x00\x00\x94\x10\x00\x00\xcd\x10\x00\x00\xe6\x10\x00\x00\x1d\x11\x00\x00\x34\x11\x00\x00\x5a\x11\x00\x00\x71\x11\x00\x00\x97\x11\x00\x00\xae\x11\x00\x00\xd4\x11\x00\x00\xeb\x11\x00\x00\x11\x12\x00\x00\x28\x12\x00\x00\x4e\x12\x00\x00\x65\x12\x00\x00\x8b\x12\x00\x00\xa2\x12\x00\x00\xc8\x12\x00\x00\xdf\x12\x00\x00\x05\x13\x00\x00\x1c\x13\x00\x00\x42\x13\x00\x00\x59\x13\x00\x00\x7f\x13\x00\x00\x96\x13\x00\x00\xbc\x13\x00\x00\xd3\x13\x00\x00\xf9\x13\x00\x00\x10\x14\x00\x00\x36\x14\x00\x00\x4d\x14\x00\x00\x73\x14\x00\x00\x8a\x14\x00\x00\xb0\x14\x00\x00\xc7\x14\x00\x00\xed\x14\x00\x00\x04\x15\x00\x00\x2a\x15\x00\x00\x41\x15\x00\x00\x67\x15\x00\x00\x7e\x15\x00\x00\x71\x15\x00\x00"#++alex_table :: AlexAddr+alex_table = AlexA#+ "\x00\x00\x32\x01\x32\x01\x32\x01\x32\x01\x32\x01\x36\x01\x39\x01\x3b\x01\x40\x01\x3c\x01\x45\x01\x48\x01\x49\x01\x4a\x01\x4b\x01\x52\x01\x54\x01\x4c\x01\x4d\x01\x59\x01\x5a\x01\x5b\x01\x4f\x01\x32\x01\x5c\x01\x1c\x01\x5d\x01\x5e\x01\x5f\x01\x60\x01\x68\x01\x43\x01\x44\x01\x61\x01\x2e\x00\x0e\x01\x6d\x01\x2f\x00\x30\x01\x7e\x01\x7d\x01\x7d\x01\x7d\x01\x7d\x01\x7d\x01\x7d\x01\x7d\x01\x7d\x01\x7d\x01\x4c\x01\x4d\x01\x41\x01\x3f\x01\x42\x01\x4f\x01\x67\x01\xab\x01\xa7\x01\xa9\x01\xcc\x01\x9c\x01\xab\x01\xa0\x00\x85\x00\x03\x00\x2e\x01\xb7\x00\x2d\x01\x10\x01\x04\x00\x08\x00\x66\x00\x09\x00\x24\x00\x03\x01\xab\x00\x4a\x00\x8b\x00\x0a\x00\x2c\x01\x12\x00\x18\x00\x10\x00\x11\x00\x22\x01\x13\x00\xd6\x00\x25\x01\x33\x01\xa7\x01\xa8\x01\xcc\x01\x9d\x01\xaa\x01\xa0\x00\x85\x00\x0b\x00\x14\x00\x62\x00\x73\x00\x10\x01\x1c\x00\x2f\x01\x67\x00\x23\x01\x24\x00\x02\x01\x1e\x00\x4a\x00\x15\x00\x16\x00\x20\x01\xae\x00\x18\x00\x1d\x00\x1b\x00\x1b\x01\x1a\x01\xd6\x00\x19\x01\x25\x00\x18\x01\x1f\x00\x20\x00\x17\x01\x16\x01\x14\x01\x13\x01\x0b\x00\x12\x01\x15\x01\x26\x00\x11\x01\x27\x00\x28\x00\x1e\x01\x29\x00\x2a\x00\x0f\x01\x2b\x00\x2c\x00\x0d\x01\x0c\x01\x0b\x01\xae\x00\x4b\x00\x30\x00\x0a\x01\x32\x00\x35\x00\x31\x00\x37\x00\xf9\x00\x38\x00\x42\x00\x36\x00\xf8\x00\x3a\x00\xf7\x00\xfa\x00\x7d\x00\x5c\x00\x5b\x00\x26\x00\x43\x00\x27\x00\x28\x00\x4f\x00\x29\x00\x2a\x00\xfd\x00\x2b\x00\x2c\x00\x0d\x01\x07\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x06\x01\x06\x01\x05\x01\x04\x01\xfe\x00\x58\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x44\x00\x5e\x00\xf6\x00\xf4\x00\x5a\x00\xf3\x00\xed\x00\xec\x00\xea\x00\xeb\x00\xe9\x00\xf5\x00\x6b\x00\xe8\x00\xe7\x00\x6e\x00\x71\x00\x6f\x00\x77\x00\x70\x00\x7a\x00\x78\x00\x06\x01\x06\x01\x05\x01\x04\x01\xe4\x00\x58\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x44\x00\x83\x00\xe1\x00\xbe\x00\x5a\x00\x74\x00\xde\x00\xdf\x00\xdd\x00\xda\x00\xe0\x00\xf5\x00\x75\x00\x51\x00\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x56\x00\x56\x00\xe6\x00\x72\x00\x84\x00\x86\x00\x87\x00\xd9\x00\xd8\x00\xd7\x00\x8c\x00\xd5\x00\x92\x00\xd4\x00\xd3\x00\x93\x00\x94\x00\xd1\x00\x97\x00\x95\x00\xcf\x00\xcd\x00\x9e\x00\xd0\x00\x9d\x00\x9a\x00\xce\x00\xce\x00\xad\x00\xbf\x00\xa2\x00\xb3\x00\x56\x00\x57\x00\xe6\x00\x72\x00\xa1\x00\xa1\x00\x9b\x00\xbb\x00\xbb\x00\x9c\x00\xa6\x00\xa8\x00\xa9\x00\xcb\x00\xc9\x00\xc8\x00\xc7\x00\xca\x00\xc1\x00\xac\x00\xb2\x00\xc5\x00\xc4\x00\xb5\x00\xb9\x00\xbd\x00\xb0\x00\xb8\x00\xad\x00\xae\x00\xb1\x00\xb3\x00\x99\x00\x98\x00\x82\x00\x7c\x00\xba\x00\xb6\x00\xb4\x00\x00\x00\xaa\x00\xc3\x00\x7b\x00\xa7\x00\x96\x00\xa5\x00\x26\x01\x90\x00\xa4\x00\xaf\x00\x8e\x00\xa3\x00\xd2\x00\x91\x00\x8d\x00\xdb\x00\x8a\x00\x89\x00\xb0\x00\xdc\x00\xe2\x00\xae\x00\x81\x00\x6a\x00\x99\x00\x98\x00\x82\x00\x80\x00\x7f\x00\x7e\x00\x79\x00\xe5\x00\x6c\x00\x6d\x00\xee\x00\xf1\x00\x53\x00\x4d\x00\x5d\x00\x61\x00\xf2\x00\xaf\x00\x60\x00\x5f\x00\xfb\x00\x59\x00\x3d\x00\x34\x00\x55\x00\x54\x00\x4c\x00\x4e\x00\x23\x00\x47\x00\x48\x00\x46\x00\x45\x00\x3b\x00\x22\x00\x21\x00\x24\x01\x01\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x50\x00\x49\x00\x3c\x00\xc6\x00\xc6\x00\x1f\x01\x2d\x00\x21\x01\x1a\x00\x19\x00\x17\x00\x27\x01\x28\x01\x29\x01\x2a\x01\x0f\x00\x68\x00\x68\x00\x0e\x00\x07\x00\x39\x00\x39\x00\x2b\x01\x06\x00\x01\x00\x05\x00\x6c\x01\x6b\x01\x69\x01\x66\x01\x65\x01\x6a\x01\x50\x00\x49\x00\x3c\x00\xc6\x00\xc6\x00\x64\x01\x2d\x00\x65\x00\x63\x01\x19\x00\x17\x00\x62\x01\x58\x01\x57\x01\xbc\x00\xbc\x00\x68\x00\x68\x00\x8f\x00\xff\x00\x39\x00\x39\x00\x56\x01\x76\x00\x08\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2d\x00\x55\x01\x53\x01\x4e\x01\x47\x01\x3d\x01\x46\x01\x37\x01\x34\x01\x3e\x01\x38\x01\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x3a\x01\x32\x01\x32\x01\x32\x01\x32\x01\x32\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x35\x01\x00\x00\x00\x00\x2d\x00\x64\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x32\x01\x00\x00\x00\x00\x8f\x00\xc2\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xd7\x01\xd7\x01\xd7\x01\xd7\x01\xd7\x01\xd7\x01\xd7\x01\xd7\x01\xd7\x01\xd7\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2c\x00\x00\x00\xd7\x01\xd7\x01\xd7\x01\xd7\x01\xd7\x01\xd7\x01\xf5\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x98\x00\x00\x00\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\x2c\x00\x00\x00\xd7\x01\xd7\x01\xd7\x01\xd7\x01\xd7\x01\xd7\x01\xaf\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x98\x00\x00\x00\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x31\x01\xaf\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x07\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x08\x01\x51\x00\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x01\x01\x63\x00\xef\x00\xef\x00\xef\x00\xf0\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x9e\x01\x9e\x01\x9e\x01\x9e\x01\x9e\x01\x9e\x01\x9e\x01\x9e\x01\x9e\x01\x9e\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9e\x01\x9e\x01\x9e\x01\x9e\x01\x9e\x01\x9e\x01\x74\x01\x74\x01\x74\x01\x74\x01\x74\x01\x74\x01\x74\x01\x74\x01\x74\x01\x74\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9e\x01\x9e\x01\x9e\x01\x9e\x01\x9e\x01\x9e\x01\x00\x00\x00\x00\x00\x00\x9e\x01\x9e\x01\x9e\x01\x9e\x01\x9e\x01\x9e\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xce\x01\xce\x01\xce\x01\xce\x01\xce\x01\xce\x01\xce\x01\xce\x01\xce\x01\xce\x01\x00\x00\x9e\x01\x9e\x01\x9e\x01\x9e\x01\x9e\x01\x9e\x01\xce\x01\xce\x01\xce\x01\xce\x01\xce\x01\xce\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x00\x00\x00\x00\x00\x00\xce\x01\xce\x01\xce\x01\xce\x01\xce\x01\xce\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x75\x01\x75\x01\x75\x01\x75\x01\x75\x01\x75\x01\x75\x01\x75\x01\x75\x01\x75\x01\x00\x00\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\xcf\x01\xcf\x01\xcf\x01\xcf\x01\xcf\x01\xcf\x01\xcf\x01\xcf\x01\xcf\x01\xcf\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xcf\x01\xcf\x01\xcf\x01\xcf\x01\xcf\x01\xcf\x01\x00\x00\x00\x00\x00\x00\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x9f\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x74\x01\x74\x01\x74\x01\x74\x01\x74\x01\x74\x01\x74\x01\x74\x01\x74\x01\x74\x01\x00\x00\xcf\x01\xcf\x01\xcf\x01\xcf\x01\xcf\x01\xcf\x01\x9e\x01\x9e\x01\x9e\x01\x9e\x01\x9e\x01\x9e\x01\x76\x01\x76\x01\x76\x01\x76\x01\x76\x01\x76\x01\x76\x01\x76\x01\x76\x01\x76\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa0\x01\xa0\x01\xa0\x01\xa0\x01\xa0\x01\xa0\x01\x00\x00\x00\x00\x00\x00\x9e\x01\x9e\x01\x9e\x01\x9e\x01\x9e\x01\x9e\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x77\x01\x77\x01\x77\x01\x77\x01\x77\x01\x77\x01\x77\x01\x77\x01\x77\x01\x77\x01\x00\x00\xa0\x01\xa0\x01\xa0\x01\xa0\x01\xa0\x01\xa0\x01\xa1\x01\xa1\x01\xa1\x01\xa1\x01\xa1\x01\xa1\x01\x78\x01\x78\x01\x78\x01\x78\x01\x78\x01\x78\x01\x78\x01\x78\x01\x78\x01\x78\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa2\x01\xa2\x01\xa2\x01\xa2\x01\xa2\x01\xa2\x01\x00\x00\x00\x00\x00\x00\xa1\x01\xa1\x01\xa1\x01\xa1\x01\xa1\x01\xa1\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x79\x01\x79\x01\x79\x01\x79\x01\x79\x01\x79\x01\x79\x01\x79\x01\x79\x01\x79\x01\x00\x00\xa2\x01\xa2\x01\xa2\x01\xa2\x01\xa2\x01\xa2\x01\xa3\x01\xa3\x01\xa3\x01\xa3\x01\xa3\x01\xa3\x01\x7a\x01\x7a\x01\x7a\x01\x7a\x01\x7a\x01\x7a\x01\x7a\x01\x7a\x01\x7a\x01\x7a\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa4\x01\xa4\x01\xa4\x01\xa4\x01\xa4\x01\xa4\x01\x00\x00\x00\x00\x00\x00\xa3\x01\xa3\x01\xa3\x01\xa3\x01\xa3\x01\xa3\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7b\x01\x7b\x01\x7b\x01\x7b\x01\x7b\x01\x7b\x01\x7b\x01\x7b\x01\x7b\x01\x7b\x01\x00\x00\xa4\x01\xa4\x01\xa4\x01\xa4\x01\xa4\x01\xa4\x01\xa5\x01\xa5\x01\xa5\x01\xa5\x01\xa5\x01\xa5\x01\x7c\x01\x7c\x01\x7c\x01\x7c\x01\x7c\x01\x7c\x01\x7c\x01\x7c\x01\x7c\x01\x7c\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa6\x01\xa6\x01\xa6\x01\xa6\x01\xa6\x01\xa6\x01\x00\x00\x00\x00\x00\x00\xa5\x01\xa5\x01\xa5\x01\xa5\x01\xa5\x01\xa5\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x01\x7f\x01\x7f\x01\x7f\x01\x7f\x01\x7f\x01\x7f\x01\x7f\x01\x7f\x01\x7f\x01\x00\x00\xa6\x01\xa6\x01\xa6\x01\xa6\x01\xa6\x01\xa6\x01\xac\x01\xac\x01\xac\x01\xac\x01\xac\x01\xac\x01\x80\x01\x80\x01\x80\x01\x80\x01\x80\x01\x80\x01\x80\x01\x80\x01\x80\x01\x80\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\x00\x00\x00\x00\x00\x00\xac\x01\xac\x01\xac\x01\xac\x01\xac\x01\xac\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x01\x80\x01\x80\x01\x80\x01\x80\x01\x80\x01\x80\x01\x80\x01\x80\x01\x80\x01\x00\x00\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\x00\x00\x81\x01\x81\x01\x81\x01\x81\x01\x81\x01\x81\x01\x81\x01\x81\x01\x81\x01\x81\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb0\x01\xb0\x01\xb0\x01\xb0\x01\xb0\x01\xb0\x01\x00\x00\x00\x00\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x82\x01\x82\x01\x82\x01\x82\x01\x82\x01\x82\x01\x82\x01\x82\x01\x82\x01\x82\x01\x1d\x01\xb0\x01\xb0\x01\xb0\x01\xb0\x01\xb0\x01\xb0\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb2\x01\xb2\x01\xb2\x01\xb2\x01\xb2\x01\xb2\x01\x00\x00\x00\x00\x00\x00\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x00\x00\xb2\x01\xb2\x01\xb2\x01\xb2\x01\xb2\x01\xb2\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\x85\x01\x85\x01\x85\x01\x85\x01\x85\x01\x85\x01\x85\x01\x85\x01\x85\x01\x85\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb4\x01\xb4\x01\xb4\x01\xb4\x01\xb4\x01\xb4\x01\x00\x00\x00\x00\x00\x00\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x86\x01\x86\x01\x86\x01\x86\x01\x86\x01\x86\x01\x86\x01\x86\x01\x86\x01\x86\x01\x00\x00\xb4\x01\xb4\x01\xb4\x01\xb4\x01\xb4\x01\xb4\x01\xb5\x01\xb5\x01\xb5\x01\xb5\x01\xb5\x01\xb5\x01\x87\x01\x87\x01\x87\x01\x87\x01\x87\x01\x87\x01\x87\x01\x87\x01\x87\x01\x87\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb6\x01\xb6\x01\xb6\x01\xb6\x01\xb6\x01\xb6\x01\x00\x00\x00\x00\x00\x00\xb5\x01\xb5\x01\xb5\x01\xb5\x01\xb5\x01\xb5\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x88\x01\x88\x01\x88\x01\x88\x01\x88\x01\x88\x01\x88\x01\x88\x01\x88\x01\x88\x01\x00\x00\xb6\x01\xb6\x01\xb6\x01\xb6\x01\xb6\x01\xb6\x01\xb7\x01\xb7\x01\xb7\x01\xb7\x01\xb7\x01\xb7\x01\x89\x01\x89\x01\x89\x01\x89\x01\x89\x01\x89\x01\x89\x01\x89\x01\x89\x01\x89\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb8\x01\xb8\x01\xb8\x01\xb8\x01\xb8\x01\xb8\x01\x00\x00\x00\x00\x00\x00\xb7\x01\xb7\x01\xb7\x01\xb7\x01\xb7\x01\xb7\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x00\x00\xb8\x01\xb8\x01\xb8\x01\xb8\x01\xb8\x01\xb8\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\x8b\x01\x8b\x01\x8b\x01\x8b\x01\x8b\x01\x8b\x01\x8b\x01\x8b\x01\x8b\x01\x8b\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xba\x01\xba\x01\xba\x01\xba\x01\xba\x01\xba\x01\x00\x00\x00\x00\x00\x00\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8c\x01\x8c\x01\x8c\x01\x8c\x01\x8c\x01\x8c\x01\x8c\x01\x8c\x01\x8c\x01\x8c\x01\x00\x00\xba\x01\xba\x01\xba\x01\xba\x01\xba\x01\xba\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\x00\x00\x00\x00\x00\x00\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x00\x00\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\x00\x00\x00\x00\x00\x00\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x90\x01\x90\x01\x90\x01\x90\x01\x90\x01\x90\x01\x90\x01\x90\x01\x90\x01\x90\x01\x00\x00\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x91\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc0\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x01\x00\x00\x00\x00\x00\x00\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x92\x01\x92\x01\x92\x01\x92\x01\x92\x01\x92\x01\x92\x01\x92\x01\x92\x01\x92\x01\x00\x00\xc0\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x01\xc1\x01\xc1\x01\xc1\x01\xc1\x01\xc1\x01\xc1\x01\x93\x01\x93\x01\x93\x01\x93\x01\x93\x01\x93\x01\x93\x01\x93\x01\x93\x01\x93\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc2\x01\xc2\x01\xc2\x01\xc2\x01\xc2\x01\xc2\x01\x00\x00\x00\x00\x00\x00\xc1\x01\xc1\x01\xc1\x01\xc1\x01\xc1\x01\xc1\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x94\x01\x94\x01\x94\x01\x94\x01\x94\x01\x94\x01\x94\x01\x94\x01\x94\x01\x94\x01\x00\x00\xc2\x01\xc2\x01\xc2\x01\xc2\x01\xc2\x01\xc2\x01\xc3\x01\xc3\x01\xc3\x01\xc3\x01\xc3\x01\xc3\x01\x95\x01\x95\x01\x95\x01\x95\x01\x95\x01\x95\x01\x95\x01\x95\x01\x95\x01\x95\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc4\x01\xc4\x01\xc4\x01\xc4\x01\xc4\x01\xc4\x01\x00\x00\x00\x00\x00\x00\xc3\x01\xc3\x01\xc3\x01\xc3\x01\xc3\x01\xc3\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x96\x01\x96\x01\x96\x01\x96\x01\x96\x01\x96\x01\x96\x01\x96\x01\x96\x01\x96\x01\x00\x00\xc4\x01\xc4\x01\xc4\x01\xc4\x01\xc4\x01\xc4\x01\xc5\x01\xc5\x01\xc5\x01\xc5\x01\xc5\x01\xc5\x01\x97\x01\x97\x01\x97\x01\x97\x01\x97\x01\x97\x01\x97\x01\x97\x01\x97\x01\x97\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc6\x01\xc6\x01\xc6\x01\xc6\x01\xc6\x01\xc6\x01\x00\x00\x00\x00\x00\x00\xc5\x01\xc5\x01\xc5\x01\xc5\x01\xc5\x01\xc5\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x98\x01\x98\x01\x98\x01\x98\x01\x98\x01\x98\x01\x98\x01\x98\x01\x98\x01\x98\x01\x00\x00\xc6\x01\xc6\x01\xc6\x01\xc6\x01\xc6\x01\xc6\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\x99\x01\x99\x01\x99\x01\x99\x01\x99\x01\x99\x01\x99\x01\x99\x01\x99\x01\x99\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc8\x01\xc8\x01\xc8\x01\xc8\x01\xc8\x01\xc8\x01\x00\x00\x00\x00\x00\x00\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9a\x01\x9a\x01\x9a\x01\x9a\x01\x9a\x01\x9a\x01\x9a\x01\x9a\x01\x9a\x01\x9a\x01\x00\x00\xc8\x01\xc8\x01\xc8\x01\xc8\x01\xc8\x01\xc8\x01\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\x00\x00\x00\x00\x00\x00\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x01\x72\x01\x72\x01\x72\x01\x72\x01\x72\x01\x72\x01\x72\x01\x72\x01\x72\x01\x00\x00\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\x71\x01\x71\x01\x71\x01\x71\x01\x71\x01\x71\x01\x6f\x01\x6f\x01\x6f\x01\x6f\x01\x6f\x01\x6f\x01\x6f\x01\x6f\x01\x6f\x01\x6f\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6e\x01\x6e\x01\x6e\x01\x6e\x01\x6e\x01\x6e\x01\x00\x00\x00\x00\x00\x00\x71\x01\x71\x01\x71\x01\x71\x01\x71\x01\x71\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\x00\x00\x6e\x01\x6e\x01\x6e\x01\x6e\x01\x6e\x01\x6e\x01\xae\x01\xae\x01\xc9\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xae\x01\xae\x01\xc9\x01\xae\x01\xae\x01\xae\x01\x00\x00\x00\x00\x00\x00\xae\x01\xae\x01\xc9\x01\xae\x01\xae\x01\xae\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x69\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xae\x01\xae\x01\xc9\x01\xae\x01\xae\x01\xae\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x69\x00\x00\x00\x00\x00\x00\x00\x00\x00\x52\x00\x00\x00\x00\x00\x00\x00\x00\x00\x33\x00\x9e\x01\x9e\x01\x9e\x01\x9e\x01\x9e\x01\x9e\x01\x9e\x01\x9e\x01\x9e\x01\x9e\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9e\x01\x9e\x01\x9e\x01\x9e\x01\x9e\x01\x9e\x01\xa0\x01\xa0\x01\xa0\x01\xa0\x01\xa0\x01\xa0\x01\xa0\x01\xa0\x01\xa0\x01\xa0\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa0\x01\xa0\x01\xa0\x01\xa0\x01\xa0\x01\xa0\x01\x00\x00\x00\x00\x00\x00\x9e\x01\x9e\x01\x9e\x01\x9e\x01\x9e\x01\x9e\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa1\x01\xa1\x01\xa1\x01\xa1\x01\xa1\x01\xa1\x01\xa1\x01\xa1\x01\xa1\x01\xa1\x01\x00\x00\xa0\x01\xa0\x01\xa0\x01\xa0\x01\xa0\x01\xa0\x01\xa1\x01\xa1\x01\xa1\x01\xa1\x01\xa1\x01\xa1\x01\xa2\x01\xa2\x01\xa2\x01\xa2\x01\xa2\x01\xa2\x01\xa2\x01\xa2\x01\xa2\x01\xa2\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa2\x01\xa2\x01\xa2\x01\xa2\x01\xa2\x01\xa2\x01\x00\x00\x00\x00\x00\x00\xa1\x01\xa1\x01\xa1\x01\xa1\x01\xa1\x01\xa1\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa3\x01\xa3\x01\xa3\x01\xa3\x01\xa3\x01\xa3\x01\xa3\x01\xa3\x01\xa3\x01\xa3\x01\x00\x00\xa2\x01\xa2\x01\xa2\x01\xa2\x01\xa2\x01\xa2\x01\xa3\x01\xa3\x01\xa3\x01\xa3\x01\xa3\x01\xa3\x01\xa4\x01\xa4\x01\xa4\x01\xa4\x01\xa4\x01\xa4\x01\xa4\x01\xa4\x01\xa4\x01\xa4\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa4\x01\xa4\x01\xa4\x01\xa4\x01\xa4\x01\xa4\x01\x00\x00\x00\x00\x00\x00\xa3\x01\xa3\x01\xa3\x01\xa3\x01\xa3\x01\xa3\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa5\x01\xa5\x01\xa5\x01\xa5\x01\xa5\x01\xa5\x01\xa5\x01\xa5\x01\xa5\x01\xa5\x01\x00\x00\xa4\x01\xa4\x01\xa4\x01\xa4\x01\xa4\x01\xa4\x01\xa5\x01\xa5\x01\xa5\x01\xa5\x01\xa5\x01\xa5\x01\xa6\x01\xa6\x01\xa6\x01\xa6\x01\xa6\x01\xa6\x01\xa6\x01\xa6\x01\xa6\x01\xa6\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa6\x01\xa6\x01\xa6\x01\xa6\x01\xa6\x01\xa6\x01\x00\x00\x00\x00\x00\x00\xa5\x01\xa5\x01\xa5\x01\xa5\x01\xa5\x01\xa5\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xac\x01\xac\x01\xac\x01\xac\x01\xac\x01\xac\x01\xac\x01\xac\x01\xac\x01\xac\x01\x00\x00\xa6\x01\xa6\x01\xa6\x01\xa6\x01\xa6\x01\xa6\x01\xac\x01\xac\x01\xac\x01\xac\x01\xac\x01\xac\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\x00\x00\x00\x00\x00\x00\xac\x01\xac\x01\xac\x01\xac\x01\xac\x01\xac\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\x00\x00\x00\x00\xfc\x00\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\x00\x00\x00\x00\x00\x00\xad\x01\xae\x01\xae\x01\xae\x01\xaf\x01\xae\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe3\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xad\x01\xae\x01\xae\x01\xae\x01\xaf\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\x00\x00\x00\x00\x00\x00\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\x00\x00\x00\x00\xcc\x00\x00\x00\x00\x00\x00\x00\xb0\x01\xb0\x01\xb0\x01\xb0\x01\xb0\x01\xb0\x01\xb0\x01\xb0\x01\xb0\x01\xb0\x01\x00\x00\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xb0\x01\xb0\x01\xb0\x01\xb0\x01\xb0\x01\xb0\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\x00\x00\x00\x00\x00\x00\xb0\x01\xb0\x01\xb0\x01\xb0\x01\xb0\x01\xb0\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\x00\x00\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\x00\x00\x9f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x88\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\x00\x00\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb2\x01\xb2\x01\xb2\x01\xb2\x01\xb2\x01\xb2\x01\xb2\x01\xb2\x01\xb2\x01\xb2\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb2\x01\xb2\x01\xb2\x01\xb2\x01\xb2\x01\xb2\x01\x00\x00\x00\x00\x00\x00\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb2\x01\xb2\x01\xb2\x01\xb2\x01\xb2\x01\xb2\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb4\x01\xb4\x01\xb4\x01\xb4\x01\xb4\x01\xb4\x01\xb4\x01\xb4\x01\xb4\x01\xb4\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb4\x01\xb4\x01\xb4\x01\xb4\x01\xb4\x01\xb4\x01\x00\x00\x00\x00\x00\x00\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb5\x01\xb5\x01\xb5\x01\xb5\x01\xb5\x01\xb5\x01\xb5\x01\xb5\x01\xb5\x01\xb5\x01\x00\x00\xb4\x01\xb4\x01\xb4\x01\xb4\x01\xb4\x01\xb4\x01\xb5\x01\xb5\x01\xb5\x01\xb5\x01\xb5\x01\xb5\x01\xb6\x01\xb6\x01\xb6\x01\xb6\x01\xb6\x01\xb6\x01\xb6\x01\xb6\x01\xb6\x01\xb6\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb6\x01\xb6\x01\xb6\x01\xb6\x01\xb6\x01\xb6\x01\x00\x00\x00\x00\x00\x00\xb5\x01\xb5\x01\xb5\x01\xb5\x01\xb5\x01\xb5\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb7\x01\xb7\x01\xb7\x01\xb7\x01\xb7\x01\xb7\x01\xb7\x01\xb7\x01\xb7\x01\xb7\x01\x00\x00\xb6\x01\xb6\x01\xb6\x01\xb6\x01\xb6\x01\xb6\x01\xb7\x01\xb7\x01\xb7\x01\xb7\x01\xb7\x01\xb7\x01\xb8\x01\xb8\x01\xb8\x01\xb8\x01\xb8\x01\xb8\x01\xb8\x01\xb8\x01\xb8\x01\xb8\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb8\x01\xb8\x01\xb8\x01\xb8\x01\xb8\x01\xb8\x01\x00\x00\x00\x00\x00\x00\xb7\x01\xb7\x01\xb7\x01\xb7\x01\xb7\x01\xb7\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\x00\x00\xb8\x01\xb8\x01\xb8\x01\xb8\x01\xb8\x01\xb8\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xba\x01\xba\x01\xba\x01\xba\x01\xba\x01\xba\x01\xba\x01\xba\x01\xba\x01\xba\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xba\x01\xba\x01\xba\x01\xba\x01\xba\x01\xba\x01\x00\x00\x00\x00\x00\x00\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\x00\x00\xba\x01\xba\x01\xba\x01\xba\x01\xba\x01\xba\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\x00\x00\x00\x00\x00\x00\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\x00\x00\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\x00\x00\x00\x00\x00\x00\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\x00\x00\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc0\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x01\x00\x00\x00\x00\x00\x00\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x01\xc1\x01\xc1\x01\xc1\x01\xc1\x01\xc1\x01\xc1\x01\xc1\x01\xc1\x01\xc1\x01\x00\x00\xc0\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x01\xc0\x01\xc1\x01\xc1\x01\xc1\x01\xc1\x01\xc1\x01\xc1\x01\xc2\x01\xc2\x01\xc2\x01\xc2\x01\xc2\x01\xc2\x01\xc2\x01\xc2\x01\xc2\x01\xc2\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc2\x01\xc2\x01\xc2\x01\xc2\x01\xc2\x01\xc2\x01\x00\x00\x00\x00\x00\x00\xc1\x01\xc1\x01\xc1\x01\xc1\x01\xc1\x01\xc1\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc3\x01\xc3\x01\xc3\x01\xc3\x01\xc3\x01\xc3\x01\xc3\x01\xc3\x01\xc3\x01\xc3\x01\x00\x00\xc2\x01\xc2\x01\xc2\x01\xc2\x01\xc2\x01\xc2\x01\xc3\x01\xc3\x01\xc3\x01\xc3\x01\xc3\x01\xc3\x01\xc4\x01\xc4\x01\xc4\x01\xc4\x01\xc4\x01\xc4\x01\xc4\x01\xc4\x01\xc4\x01\xc4\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc4\x01\xc4\x01\xc4\x01\xc4\x01\xc4\x01\xc4\x01\x00\x00\x00\x00\x00\x00\xc3\x01\xc3\x01\xc3\x01\xc3\x01\xc3\x01\xc3\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc5\x01\xc5\x01\xc5\x01\xc5\x01\xc5\x01\xc5\x01\xc5\x01\xc5\x01\xc5\x01\xc5\x01\x00\x00\xc4\x01\xc4\x01\xc4\x01\xc4\x01\xc4\x01\xc4\x01\xc5\x01\xc5\x01\xc5\x01\xc5\x01\xc5\x01\xc5\x01\xc6\x01\xc6\x01\xc6\x01\xc6\x01\xc6\x01\xc6\x01\xc6\x01\xc6\x01\xc6\x01\xc6\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc6\x01\xc6\x01\xc6\x01\xc6\x01\xc6\x01\xc6\x01\x00\x00\x00\x00\x00\x00\xc5\x01\xc5\x01\xc5\x01\xc5\x01\xc5\x01\xc5\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\x00\x00\xc6\x01\xc6\x01\xc6\x01\xc6\x01\xc6\x01\xc6\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc8\x01\xc8\x01\xc8\x01\xc8\x01\xc8\x01\xc8\x01\xc8\x01\xc8\x01\xc8\x01\xc8\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc8\x01\xc8\x01\xc8\x01\xc8\x01\xc8\x01\xc8\x01\x00\x00\x00\x00\x00\x00\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\x00\x00\xc8\x01\xc8\x01\xc8\x01\xc8\x01\xc8\x01\xc8\x01\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\x00\x00\x00\x00\x00\x00\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\xb1\x01\x00\x00\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xb1\x01\xb1\x01\xb1\x01\xcd\x01\xb1\x01\xb1\x01\x71\x01\x71\x01\x71\x01\x71\x01\x71\x01\x71\x01\x71\x01\x71\x01\x71\x01\x71\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x71\x01\x71\x01\x71\x01\x71\x01\x71\x01\x71\x01\x00\x00\x00\x00\x00\x00\xb1\x01\xb1\x01\xb1\x01\xcd\x01\xb1\x01\xb1\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6e\x01\x6e\x01\x6e\x01\x6e\x01\x6e\x01\x6e\x01\x6e\x01\x6e\x01\x6e\x01\x6e\x01\x00\x00\x71\x01\x71\x01\x71\x01\x71\x01\x71\x01\x71\x01\x6e\x01\x6e\x01\x6e\x01\x6e\x01\x6e\x01\x6e\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\x00\x00\x51\x01\x00\x00\x6e\x01\x6e\x01\x6e\x01\x6e\x01\x6e\x01\x6e\x01\x00\x00\x00\x00\x00\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\xae\x01\x00\x00\x51\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\x00\x00\x50\x01\xce\x01\xce\x01\xce\x01\xce\x01\xce\x01\xce\x01\xce\x01\xce\x01\xce\x01\xce\x01\x0d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xce\x01\xce\x01\xce\x01\xce\x01\xce\x01\xce\x01\x00\x00\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\xb3\x01\x00\x00\x50\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xce\x01\xce\x01\xce\x01\xce\x01\xce\x01\xce\x01\xd0\x01\xd0\x01\xd0\x01\xd0\x01\xd0\x01\xd0\x01\xd0\x01\xd0\x01\xd0\x01\xd0\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd0\x01\xd0\x01\xd0\x01\xd0\x01\xd0\x01\xd0\x01\xd1\x01\xd1\x01\xd1\x01\xd1\x01\xd1\x01\xd1\x01\xd1\x01\xd1\x01\xd1\x01\xd1\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd1\x01\xd1\x01\xd1\x01\xd1\x01\xd1\x01\xd1\x01\x00\x00\x00\x00\x00\x00\xd0\x01\xd0\x01\xd0\x01\xd0\x01\xd0\x01\xd0\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\x00\x00\xd1\x01\xd1\x01\xd1\x01\xd1\x01\xd1\x01\xd1\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd3\x01\xd3\x01\xd3\x01\xd3\x01\xd3\x01\xd3\x01\xd3\x01\xd3\x01\xd3\x01\xd3\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd3\x01\xd3\x01\xd3\x01\xd3\x01\xd3\x01\xd3\x01\x00\x00\x00\x00\x00\x00\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd4\x01\xd4\x01\xd4\x01\xd4\x01\xd4\x01\xd4\x01\xd4\x01\xd4\x01\xd4\x01\xd4\x01\x00\x00\xd3\x01\xd3\x01\xd3\x01\xd3\x01\xd3\x01\xd3\x01\xd4\x01\xd4\x01\xd4\x01\xd4\x01\xd4\x01\xd4\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\x00\x00\x00\x00\x00\x00\xd4\x01\xd4\x01\xd4\x01\xd4\x01\xd4\x01\xd4\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd6\x01\xd6\x01\xd6\x01\xd6\x01\xd6\x01\xd6\x01\xd6\x01\xd6\x01\xd6\x01\xd6\x01\x00\x00\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd6\x01\xd6\x01\xd6\x01\xd6\x01\xd6\x01\xd6\x01\xd8\x01\xd8\x01\xd8\x01\xd8\x01\xd8\x01\xd8\x01\xd8\x01\xd8\x01\xd8\x01\xd8\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd8\x01\xd8\x01\xd8\x01\xd8\x01\xd8\x01\xd8\x01\x00\x00\x00\x00\x00\x00\xd6\x01\xd6\x01\xd6\x01\xd6\x01\xd6\x01\xd6\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd9\x01\xd9\x01\xd9\x01\xd9\x01\xd9\x01\xd9\x01\xd9\x01\xd9\x01\xd9\x01\xd9\x01\x00\x00\xd8\x01\xd8\x01\xd8\x01\xd8\x01\xd8\x01\xd8\x01\xd9\x01\xd9\x01\xd9\x01\xd9\x01\xd9\x01\xd9\x01\xda\x01\xda\x01\xda\x01\xda\x01\xda\x01\xda\x01\xda\x01\xda\x01\xda\x01\xda\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xda\x01\xda\x01\xda\x01\xda\x01\xda\x01\xda\x01\x00\x00\x00\x00\x00\x00\xd9\x01\xd9\x01\xd9\x01\xd9\x01\xd9\x01\xd9\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\xda\x01\xda\x01\xda\x01\xda\x01\xda\x01\xda\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdc\x01\xdc\x01\xdc\x01\xdc\x01\xdc\x01\xdc\x01\xdc\x01\xdc\x01\xdc\x01\xdc\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdc\x01\xdc\x01\xdc\x01\xdc\x01\xdc\x01\xdc\x01\x00\x00\x00\x00\x00\x00\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\xdb\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdd\x01\xdd\x01\xdd\x01\xdd\x01\xdd\x01\xdd\x01\xdd\x01\xdd\x01\xdd\x01\xdd\x01\x00\x00\xdc\x01\xdc\x01\xdc\x01\xdc\x01\xdc\x01\xdc\x01\xdd\x01\xdd\x01\xdd\x01\xdd\x01\xdd\x01\xdd\x01\xde\x01\xde\x01\xde\x01\xde\x01\xde\x01\xde\x01\xde\x01\xde\x01\xde\x01\xde\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xde\x01\xde\x01\xde\x01\xde\x01\xde\x01\xde\x01\x00\x00\x00\x00\x00\x00\xdd\x01\xdd\x01\xdd\x01\xdd\x01\xdd\x01\xdd\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdf\x01\xdf\x01\xdf\x01\xdf\x01\xdf\x01\xdf\x01\xdf\x01\xdf\x01\xdf\x01\xdf\x01\x00\x00\xde\x01\xde\x01\xde\x01\xde\x01\xde\x01\xde\x01\xdf\x01\xdf\x01\xdf\x01\xdf\x01\xdf\x01\xdf\x01\xe0\x01\xe0\x01\xe0\x01\xe0\x01\xe0\x01\xe0\x01\xe0\x01\xe0\x01\xe0\x01\xe0\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe0\x01\xe0\x01\xe0\x01\xe0\x01\xe0\x01\xe0\x01\x00\x00\x00\x00\x00\x00\xdf\x01\xdf\x01\xdf\x01\xdf\x01\xdf\x01\xdf\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe1\x01\xe1\x01\xe1\x01\xe1\x01\xe1\x01\xe1\x01\xe1\x01\xe1\x01\xe1\x01\xe1\x01\x00\x00\xe0\x01\xe0\x01\xe0\x01\xe0\x01\xe0\x01\xe0\x01\xe1\x01\xe1\x01\xe1\x01\xe1\x01\xe1\x01\xe1\x01\xe2\x01\xe2\x01\xe2\x01\xe2\x01\xe2\x01\xe2\x01\xe2\x01\xe2\x01\xe2\x01\xe2\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe2\x01\xe2\x01\xe2\x01\xe2\x01\xe2\x01\xe2\x01\x00\x00\x00\x00\x00\x00\xe1\x01\xe1\x01\xe1\x01\xe1\x01\xe1\x01\xe1\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe3\x01\xe3\x01\xe3\x01\xe3\x01\xe3\x01\xe3\x01\xe3\x01\xe3\x01\xe3\x01\xe3\x01\x00\x00\xe2\x01\xe2\x01\xe2\x01\xe2\x01\xe2\x01\xe2\x01\xe3\x01\xe3\x01\xe3\x01\xe3\x01\xe3\x01\xe3\x01\xe4\x01\xe4\x01\xe4\x01\xe4\x01\xe4\x01\xe4\x01\xe4\x01\xe4\x01\xe4\x01\xe4\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe4\x01\xe4\x01\xe4\x01\xe4\x01\xe4\x01\xe4\x01\x00\x00\x00\x00\x00\x00\xe3\x01\xe3\x01\xe3\x01\xe3\x01\xe3\x01\xe3\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe5\x01\xe5\x01\xe5\x01\xe5\x01\xe5\x01\xe5\x01\xe5\x01\xe5\x01\xe5\x01\xe5\x01\x00\x00\xe4\x01\xe4\x01\xe4\x01\xe4\x01\xe4\x01\xe4\x01\xe5\x01\xe5\x01\xe5\x01\xe5\x01\xe5\x01\xe5\x01\xe6\x01\xe6\x01\xe6\x01\xe6\x01\xe6\x01\xe6\x01\xe6\x01\xe6\x01\xe6\x01\xe6\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe6\x01\xe6\x01\xe6\x01\xe6\x01\xe6\x01\xe6\x01\x00\x00\x00\x00\x00\x00\xe5\x01\xe5\x01\xe5\x01\xe5\x01\xe5\x01\xe5\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe7\x01\xe7\x01\xe7\x01\xe7\x01\xe7\x01\xe7\x01\xe7\x01\xe7\x01\xe7\x01\xe7\x01\x00\x00\xe6\x01\xe6\x01\xe6\x01\xe6\x01\xe6\x01\xe6\x01\xe7\x01\xe7\x01\xe7\x01\xe7\x01\xe7\x01\xe7\x01\xe8\x01\xe8\x01\xe8\x01\xe8\x01\xe8\x01\xe8\x01\xe8\x01\xe8\x01\xe8\x01\xe8\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe8\x01\xe8\x01\xe8\x01\xe8\x01\xe8\x01\xe8\x01\x00\x00\x00\x00\x00\x00\xe7\x01\xe7\x01\xe7\x01\xe7\x01\xe7\x01\xe7\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe9\x01\xe9\x01\xe9\x01\xe9\x01\xe9\x01\xe9\x01\xe9\x01\xe9\x01\xe9\x01\xe9\x01\x00\x00\xe8\x01\xe8\x01\xe8\x01\xe8\x01\xe8\x01\xe8\x01\xe9\x01\xe9\x01\xe9\x01\xe9\x01\xe9\x01\xe9\x01\xea\x01\xea\x01\xea\x01\xea\x01\xea\x01\xea\x01\xea\x01\xea\x01\xea\x01\xea\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xea\x01\xea\x01\xea\x01\xea\x01\xea\x01\xea\x01\x00\x00\x00\x00\x00\x00\xe9\x01\xe9\x01\xe9\x01\xe9\x01\xe9\x01\xe9\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xeb\x01\xeb\x01\xeb\x01\xeb\x01\xeb\x01\xeb\x01\xeb\x01\xeb\x01\xeb\x01\xeb\x01\x00\x00\xea\x01\xea\x01\xea\x01\xea\x01\xea\x01\xea\x01\xeb\x01\xeb\x01\xeb\x01\xeb\x01\xeb\x01\xeb\x01\xec\x01\xec\x01\xec\x01\xec\x01\xec\x01\xec\x01\xec\x01\xec\x01\xec\x01\xec\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xec\x01\xec\x01\xec\x01\xec\x01\xec\x01\xec\x01\x00\x00\x00\x00\x00\x00\xeb\x01\xeb\x01\xeb\x01\xeb\x01\xeb\x01\xeb\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xed\x01\xed\x01\xed\x01\xed\x01\xed\x01\xed\x01\xed\x01\xed\x01\xed\x01\xed\x01\x00\x00\xec\x01\xec\x01\xec\x01\xec\x01\xec\x01\xec\x01\xed\x01\xed\x01\xed\x01\xed\x01\xed\x01\xed\x01\xee\x01\xee\x01\xee\x01\xee\x01\xee\x01\xee\x01\xee\x01\xee\x01\xee\x01\xee\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xee\x01\xee\x01\xee\x01\xee\x01\xee\x01\xee\x01\x00\x00\x00\x00\x00\x00\xed\x01\xed\x01\xed\x01\xed\x01\xed\x01\xed\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xef\x01\xef\x01\xef\x01\xef\x01\xef\x01\xef\x01\xef\x01\xef\x01\xef\x01\xef\x01\x00\x00\xee\x01\xee\x01\xee\x01\xee\x01\xee\x01\xee\x01\xef\x01\xef\x01\xef\x01\xef\x01\xef\x01\xef\x01\xf0\x01\xf0\x01\xf0\x01\xf0\x01\xf0\x01\xf0\x01\xf0\x01\xf0\x01\xf0\x01\xf0\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf0\x01\xf0\x01\xf0\x01\xf0\x01\xf0\x01\xf0\x01\x00\x00\x00\x00\x00\x00\xef\x01\xef\x01\xef\x01\xef\x01\xef\x01\xef\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf1\x01\xf1\x01\xf1\x01\xf1\x01\xf1\x01\xf1\x01\xf1\x01\xf1\x01\xf1\x01\xf1\x01\x00\x00\xf0\x01\xf0\x01\xf0\x01\xf0\x01\xf0\x01\xf0\x01\xf1\x01\xf1\x01\xf1\x01\xf1\x01\xf1\x01\xf1\x01\xf2\x01\xf2\x01\xf2\x01\xf2\x01\xf2\x01\xf2\x01\xf2\x01\xf2\x01\xf2\x01\xf2\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf2\x01\xf2\x01\xf2\x01\xf2\x01\xf2\x01\xf2\x01\x00\x00\x00\x00\x00\x00\xf1\x01\xf1\x01\xf1\x01\xf1\x01\xf1\x01\xf1\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf3\x01\xf3\x01\xf3\x01\xf3\x01\xf3\x01\xf3\x01\xf3\x01\xf3\x01\xf3\x01\xf3\x01\x00\x00\xf2\x01\xf2\x01\xf2\x01\xf2\x01\xf2\x01\xf2\x01\xf3\x01\xf3\x01\xf3\x01\xf3\x01\xf3\x01\xf3\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\x00\x00\x00\x00\x00\x00\xf3\x01\xf3\x01\xf3\x01\xf3\x01\xf3\x01\xf3\x01\x00\x00\x00\x00\xf5\x01\x00\x00\x00\x00\x00\x00\x73\x01\x73\x01\x73\x01\x73\x01\x73\x01\x73\x01\x73\x01\x73\x01\x73\x01\x73\x01\x00\x00\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\xf4\x01\x73\x01\x73\x01\x73\x01\x73\x01\x73\x01\x73\x01\x70\x01\x70\x01\x70\x01\x70\x01\x70\x01\x70\x01\x70\x01\x70\x01\x70\x01\x70\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x70\x01\x70\x01\x70\x01\x70\x01\x70\x01\x70\x01\x00\x00\x00\x00\x00\x00\x73\x01\x73\x01\x73\x01\x73\x01\x73\x01\x73\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x70\x01\x70\x01\x70\x01\x70\x01\x70\x01\x70\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x07\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x09\x01\x08\x01\x51\x00\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x01\x01\x63\x00\xef\x00\xef\x00\xef\x00\xf0\x00\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"#++alex_check :: AlexAddr+alex_check = AlexA#+ "\xff\xff\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x79\x00\x65\x00\x79\x00\x73\x00\x67\x00\x73\x00\x65\x00\x6f\x00\x6f\x00\x6f\x00\x79\x00\x65\x00\x41\x00\x41\x00\x67\x00\x67\x00\x79\x00\x41\x00\x20\x00\x67\x00\x22\x00\x67\x00\x67\x00\x67\x00\x35\x00\x65\x00\x28\x00\x29\x00\x31\x00\x32\x00\x33\x00\x65\x00\x35\x00\x6f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x61\x00\x61\x00\x3c\x00\x3d\x00\x3e\x00\x61\x00\x73\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x65\x00\x6f\x00\x4b\x00\x6f\x00\x4d\x00\x61\x00\x67\x00\x50\x00\x67\x00\x52\x00\x53\x00\x54\x00\x55\x00\x69\x00\x67\x00\x61\x00\x65\x00\x41\x00\x69\x00\x69\x00\x32\x00\x69\x00\x49\x00\x35\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x53\x00\x69\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x31\x00\x72\x00\x73\x00\x74\x00\x75\x00\x69\x00\x69\x00\x6d\x00\x52\x00\x61\x00\x6b\x00\x6d\x00\x65\x00\x61\x00\x69\x00\x69\x00\x6d\x00\x79\x00\x69\x00\x69\x00\x61\x00\x65\x00\x65\x00\x65\x00\x73\x00\x65\x00\x6f\x00\x53\x00\x65\x00\x53\x00\x4b\x00\x69\x00\x53\x00\x53\x00\x31\x00\x53\x00\x53\x00\x49\x00\x69\x00\x67\x00\x72\x00\x73\x00\x61\x00\x69\x00\x69\x00\x75\x00\x79\x00\x73\x00\x6f\x00\x73\x00\x67\x00\x61\x00\x6f\x00\x61\x00\x6f\x00\x61\x00\x79\x00\x61\x00\x63\x00\x73\x00\x67\x00\x73\x00\x6b\x00\x65\x00\x73\x00\x73\x00\x67\x00\x73\x00\x73\x00\x69\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x41\x00\x41\x00\x41\x00\x41\x00\x67\x00\x4b\x00\x43\x00\x43\x00\x43\x00\x43\x00\x41\x00\x65\x00\x6d\x00\x65\x00\x47\x00\x73\x00\x65\x00\x65\x00\x61\x00\x73\x00\x61\x00\x4d\x00\x69\x00\x69\x00\x69\x00\x69\x00\x61\x00\x69\x00\x61\x00\x69\x00\x75\x00\x63\x00\x61\x00\x61\x00\x61\x00\x61\x00\x6f\x00\x6b\x00\x63\x00\x63\x00\x63\x00\x63\x00\x61\x00\x6d\x00\x6f\x00\x75\x00\x67\x00\x65\x00\x61\x00\x65\x00\x65\x00\x61\x00\x69\x00\x6d\x00\x76\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x4b\x00\x4b\x00\x4f\x00\x45\x00\x69\x00\x69\x00\x73\x00\x61\x00\x61\x00\x73\x00\x67\x00\x69\x00\x63\x00\x69\x00\x69\x00\x63\x00\x63\x00\x61\x00\x73\x00\x65\x00\x65\x00\x63\x00\x65\x00\x6f\x00\x6d\x00\x6f\x00\x65\x00\x65\x00\x4b\x00\x61\x00\x65\x00\x44\x00\x6b\x00\x6b\x00\x6f\x00\x65\x00\x6f\x00\x6f\x00\x6f\x00\x72\x00\x72\x00\x6f\x00\x69\x00\x65\x00\x65\x00\x79\x00\x65\x00\x65\x00\x65\x00\x79\x00\x65\x00\x6b\x00\x79\x00\x69\x00\x79\x00\x65\x00\x69\x00\x61\x00\x52\x00\x6d\x00\x6b\x00\x52\x00\x62\x00\x64\x00\x42\x00\x42\x00\x50\x00\x64\x00\x74\x00\x72\x00\x72\x00\xff\xff\x72\x00\x74\x00\x64\x00\x72\x00\x6e\x00\x76\x00\x36\x00\x6e\x00\x76\x00\x52\x00\x6e\x00\x76\x00\x74\x00\x72\x00\x74\x00\x6e\x00\x6c\x00\x74\x00\x72\x00\x6e\x00\x6e\x00\x72\x00\x74\x00\x64\x00\x62\x00\x62\x00\x70\x00\x74\x00\x74\x00\x74\x00\x72\x00\x72\x00\x6e\x00\x76\x00\x6e\x00\x6e\x00\x74\x00\x74\x00\x6c\x00\x6e\x00\x70\x00\x72\x00\x6e\x00\x6e\x00\x6c\x00\x68\x00\x6c\x00\x62\x00\x72\x00\x72\x00\x6e\x00\x72\x00\x6c\x00\x6e\x00\x70\x00\x6e\x00\x6e\x00\x6e\x00\x6c\x00\x6c\x00\x38\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x54\x00\x44\x00\x54\x00\x43\x00\x43\x00\x6e\x00\x48\x00\x74\x00\x7a\x00\x44\x00\x44\x00\x72\x00\x72\x00\x72\x00\x72\x00\x6e\x00\x50\x00\x50\x00\x72\x00\x70\x00\x54\x00\x54\x00\x78\x00\x6e\x00\x72\x00\x6c\x00\x64\x00\x74\x00\x68\x00\x34\x00\x32\x00\x70\x00\x74\x00\x64\x00\x74\x00\x63\x00\x63\x00\x34\x00\x68\x00\x69\x00\x36\x00\x64\x00\x64\x00\x30\x00\x74\x00\x74\x00\x6e\x00\x6e\x00\x70\x00\x70\x00\x74\x00\x75\x00\x74\x00\x74\x00\x74\x00\x76\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x48\x00\x74\x00\x74\x00\x6c\x00\x6e\x00\x66\x00\x6e\x00\x74\x00\x64\x00\x3d\x00\x77\x00\xff\xff\xff\xff\x6e\x00\xff\xff\xff\xff\xff\xff\x72\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x79\x00\xff\xff\xff\xff\x68\x00\x69\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\x74\x00\x75\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x0a\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\x53\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\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\x42\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x73\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x52\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\x62\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\x6e\x00\x72\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\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\xff\xff\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\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\xff\xff\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\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x78\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\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\xff\xff\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x6c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x6c\x00\xff\xff\xff\xff\xff\xff\xff\xff\x71\x00\xff\xff\xff\xff\xff\xff\xff\xff\x76\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\xff\xff\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\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\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\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\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\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\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\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\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\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\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\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\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\xff\xff\xff\xff\x69\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\xff\xff\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\x6f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\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\xff\xff\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\xff\xff\xff\xff\x69\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\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\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\xff\xff\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\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\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\xff\xff\x6e\x00\xff\xff\xff\xff\xff\xff\xff\xff\x73\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\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\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\xff\xff\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\xff\xff\xff\xff\x72\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\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\xff\xff\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\x48\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\xff\xff\xff\xff\xff\xff\x53\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\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\xff\xff\x68\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x73\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\xff\xff\x48\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x53\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\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\xff\xff\x68\x00\xff\xff\xff\xff\xff\xff\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\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\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\xff\xff\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\x0a\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\xff\xff\xff\xff\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\xff\xff\xff\xff\x22\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\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\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\xff\xff\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\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"#++alex_deflt :: AlexAddr+alex_deflt = AlexA#+ "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x01\x00\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x09\x01\x09\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x01\x1c\x01\x1c\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x01"#++alex_accept = listArray (0 :: Int, 501)+ [ AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccNone+ , AlexAccSkip+ , AlexAcc 194+ , AlexAcc 193+ , AlexAcc 192+ , AlexAcc 191+ , AlexAcc 190+ , AlexAcc 189+ , AlexAcc 188+ , AlexAcc 187+ , AlexAcc 186+ , AlexAcc 185+ , AlexAcc 184+ , AlexAcc 183+ , AlexAcc 182+ , AlexAcc 181+ , AlexAcc 180+ , AlexAcc 179+ , AlexAcc 178+ , AlexAcc 177+ , AlexAcc 176+ , AlexAcc 175+ , AlexAcc 174+ , AlexAcc 173+ , AlexAcc 172+ , AlexAcc 171+ , AlexAcc 170+ , AlexAcc 169+ , AlexAcc 168+ , AlexAcc 167+ , AlexAcc 166+ , AlexAcc 165+ , AlexAcc 164+ , AlexAcc 163+ , AlexAcc 162+ , AlexAcc 161+ , AlexAcc 160+ , AlexAcc 159+ , AlexAcc 158+ , AlexAcc 157+ , AlexAcc 156+ , AlexAcc 155+ , AlexAcc 154+ , AlexAcc 153+ , AlexAcc 152+ , AlexAcc 151+ , AlexAcc 150+ , AlexAcc 149+ , AlexAcc 148+ , AlexAcc 147+ , AlexAcc 146+ , AlexAcc 145+ , AlexAcc 144+ , AlexAcc 143+ , AlexAcc 142+ , AlexAcc 141+ , AlexAcc 140+ , AlexAcc 139+ , AlexAcc 138+ , AlexAcc 137+ , AlexAcc 136+ , AlexAcc 135+ , AlexAcc 134+ , AlexAcc 133+ , AlexAcc 132+ , AlexAcc 131+ , AlexAcc 130+ , AlexAcc 129+ , AlexAcc 128+ , AlexAcc 127+ , AlexAcc 126+ , AlexAcc 125+ , AlexAcc 124+ , AlexAcc 123+ , AlexAcc 122+ , AlexAcc 121+ , AlexAcc 120+ , AlexAcc 119+ , AlexAcc 118+ , AlexAcc 117+ , AlexAcc 116+ , AlexAcc 115+ , AlexAcc 114+ , AlexAcc 113+ , AlexAcc 112+ , AlexAcc 111+ , AlexAcc 110+ , AlexAcc 109+ , AlexAcc 108+ , AlexAcc 107+ , AlexAcc 106+ , AlexAcc 105+ , AlexAcc 104+ , AlexAcc 103+ , AlexAcc 102+ , AlexAcc 101+ , AlexAcc 100+ , AlexAcc 99+ , AlexAcc 98+ , AlexAcc 97+ , AlexAcc 96+ , AlexAcc 95+ , AlexAcc 94+ , AlexAcc 93+ , AlexAcc 92+ , AlexAcc 91+ , AlexAcc 90+ , AlexAcc 89+ , AlexAcc 88+ , AlexAcc 87+ , AlexAcc 86+ , AlexAcc 85+ , AlexAcc 84+ , AlexAcc 83+ , AlexAcc 82+ , AlexAcc 81+ , AlexAcc 80+ , AlexAcc 79+ , AlexAcc 78+ , AlexAcc 77+ , AlexAcc 76+ , AlexAcc 75+ , AlexAcc 74+ , AlexAcc 73+ , AlexAcc 72+ , AlexAcc 71+ , AlexAcc 70+ , AlexAcc 69+ , AlexAcc 68+ , AlexAcc 67+ , AlexAcc 66+ , AlexAcc 65+ , AlexAcc 64+ , AlexAcc 63+ , AlexAcc 62+ , AlexAcc 61+ , AlexAcc 60+ , AlexAcc 59+ , AlexAcc 58+ , AlexAcc 57+ , AlexAcc 56+ , AlexAcc 55+ , AlexAcc 54+ , AlexAcc 53+ , AlexAcc 52+ , AlexAcc 51+ , AlexAcc 50+ , AlexAcc 49+ , AlexAcc 48+ , AlexAcc 47+ , AlexAcc 46+ , AlexAcc 45+ , AlexAcc 44+ , AlexAcc 43+ , AlexAcc 42+ , AlexAcc 41+ , AlexAcc 40+ , AlexAcc 39+ , AlexAcc 38+ , AlexAcc 37+ , AlexAcc 36+ , AlexAcc 35+ , AlexAcc 34+ , AlexAcc 33+ , AlexAcc 32+ , AlexAcc 31+ , AlexAcc 30+ , AlexAcc 29+ , AlexAcc 28+ , AlexAcc 27+ , AlexAcc 26+ , AlexAcc 25+ , AlexAcc 24+ , AlexAcc 23+ , AlexAcc 22+ , AlexAcc 21+ , AlexAcc 20+ , AlexAcc 19+ , AlexAcc 18+ , AlexAcc 17+ , AlexAcc 16+ , AlexAcc 15+ , AlexAcc 14+ , AlexAcc 13+ , AlexAcc 12+ , AlexAcc 11+ , AlexAcc 10+ , AlexAcc 9+ , AlexAcc 8+ , AlexAcc 7+ , AlexAcc 6+ , AlexAcc 5+ , AlexAcc 4+ , AlexAcc 3+ , AlexAcc 2+ , AlexAcc 1+ , AlexAcc 0+ ]++alex_actions = array (0 :: Int, 195)+ [ (194,alex_action_1)+ , (193,alex_action_2)+ , (192,alex_action_3)+ , (191,alex_action_4)+ , (190,alex_action_5)+ , (189,alex_action_6)+ , (188,alex_action_7)+ , (187,alex_action_8)+ , (186,alex_action_9)+ , (185,alex_action_10)+ , (184,alex_action_11)+ , (183,alex_action_12)+ , (182,alex_action_13)+ , (181,alex_action_14)+ , (180,alex_action_15)+ , (179,alex_action_16)+ , (178,alex_action_17)+ , (177,alex_action_18)+ , (176,alex_action_19)+ , (175,alex_action_20)+ , (174,alex_action_21)+ , (173,alex_action_22)+ , (172,alex_action_23)+ , (171,alex_action_24)+ , (170,alex_action_25)+ , (169,alex_action_26)+ , (168,alex_action_27)+ , (167,alex_action_28)+ , (166,alex_action_29)+ , (165,alex_action_30)+ , (164,alex_action_31)+ , (163,alex_action_32)+ , (162,alex_action_33)+ , (161,alex_action_34)+ , (160,alex_action_35)+ , (159,alex_action_36)+ , (158,alex_action_37)+ , (157,alex_action_38)+ , (156,alex_action_39)+ , (155,alex_action_40)+ , (154,alex_action_41)+ , (153,alex_action_42)+ , (152,alex_action_43)+ , (151,alex_action_44)+ , (150,alex_action_45)+ , (149,alex_action_46)+ , (148,alex_action_47)+ , (147,alex_action_48)+ , (146,alex_action_49)+ , (145,alex_action_50)+ , (144,alex_action_51)+ , (143,alex_action_52)+ , (142,alex_action_53)+ , (141,alex_action_54)+ , (140,alex_action_55)+ , (139,alex_action_56)+ , (138,alex_action_57)+ , (137,alex_action_58)+ , (136,alex_action_59)+ , (135,alex_action_60)+ , (134,alex_action_60)+ , (133,alex_action_61)+ , (132,alex_action_62)+ , (131,alex_action_62)+ , (130,alex_action_63)+ , (129,alex_action_64)+ , (128,alex_action_64)+ , (127,alex_action_64)+ , (126,alex_action_64)+ , (125,alex_action_64)+ , (124,alex_action_64)+ , (123,alex_action_64)+ , (122,alex_action_64)+ , (121,alex_action_64)+ , (120,alex_action_64)+ , (119,alex_action_64)+ , (118,alex_action_64)+ , (117,alex_action_64)+ , (116,alex_action_64)+ , (115,alex_action_64)+ , (114,alex_action_64)+ , (113,alex_action_64)+ , (112,alex_action_64)+ , (111,alex_action_64)+ , (110,alex_action_64)+ , (109,alex_action_64)+ , (108,alex_action_64)+ , (107,alex_action_64)+ , (106,alex_action_64)+ , (105,alex_action_64)+ , (104,alex_action_64)+ , (103,alex_action_64)+ , (102,alex_action_64)+ , (101,alex_action_64)+ , (100,alex_action_64)+ , (99,alex_action_64)+ , (98,alex_action_64)+ , (97,alex_action_64)+ , (96,alex_action_64)+ , (95,alex_action_64)+ , (94,alex_action_64)+ , (93,alex_action_64)+ , (92,alex_action_64)+ , (91,alex_action_64)+ , (90,alex_action_64)+ , (89,alex_action_65)+ , (88,alex_action_65)+ , (87,alex_action_65)+ , (86,alex_action_65)+ , (85,alex_action_65)+ , (84,alex_action_65)+ , (83,alex_action_65)+ , (82,alex_action_65)+ , (81,alex_action_65)+ , (80,alex_action_65)+ , (79,alex_action_65)+ , (78,alex_action_65)+ , (77,alex_action_65)+ , (76,alex_action_65)+ , (75,alex_action_65)+ , (74,alex_action_65)+ , (73,alex_action_65)+ , (72,alex_action_65)+ , (71,alex_action_65)+ , (70,alex_action_65)+ , (69,alex_action_65)+ , (68,alex_action_65)+ , (67,alex_action_65)+ , (66,alex_action_65)+ , (65,alex_action_65)+ , (64,alex_action_65)+ , (63,alex_action_65)+ , (62,alex_action_65)+ , (61,alex_action_65)+ , (60,alex_action_65)+ , (59,alex_action_65)+ , (58,alex_action_65)+ , (57,alex_action_65)+ , (56,alex_action_65)+ , (55,alex_action_65)+ , (54,alex_action_65)+ , (53,alex_action_65)+ , (52,alex_action_65)+ , (51,alex_action_65)+ , (50,alex_action_65)+ , (49,alex_action_65)+ , (48,alex_action_65)+ , (47,alex_action_65)+ , (46,alex_action_65)+ , (45,alex_action_65)+ , (44,alex_action_65)+ , (43,alex_action_65)+ , (42,alex_action_65)+ , (41,alex_action_65)+ , (40,alex_action_65)+ , (39,alex_action_66)+ , (38,alex_action_66)+ , (37,alex_action_66)+ , (36,alex_action_66)+ , (35,alex_action_66)+ , (34,alex_action_66)+ , (33,alex_action_66)+ , (32,alex_action_66)+ , (31,alex_action_66)+ , (30,alex_action_66)+ , (29,alex_action_66)+ , (28,alex_action_66)+ , (27,alex_action_66)+ , (26,alex_action_66)+ , (25,alex_action_66)+ , (24,alex_action_66)+ , (23,alex_action_66)+ , (22,alex_action_66)+ , (21,alex_action_66)+ , (20,alex_action_66)+ , (19,alex_action_66)+ , (18,alex_action_66)+ , (17,alex_action_66)+ , (16,alex_action_66)+ , (15,alex_action_66)+ , (14,alex_action_66)+ , (13,alex_action_66)+ , (12,alex_action_66)+ , (11,alex_action_66)+ , (10,alex_action_66)+ , (9,alex_action_66)+ , (8,alex_action_66)+ , (7,alex_action_66)+ , (6,alex_action_66)+ , (5,alex_action_66)+ , (4,alex_action_66)+ , (3,alex_action_66)+ , (2,alex_action_66)+ , (1,alex_action_66)+ , (0,alex_action_67)+ ]++{-# LINE 99 "HOpenPGP/Tools/Lexer.x" #-}++data Token+ = TokenTag+ | TokenAfter+ | TokenAnd+ | TokenAny+ | TokenBefore+ | TokenNot+ | TokenNow+ | TokenOr+ | TokenInt Integer+ | TokenEq+ | TokenLt+ | TokenGt+ | TokenLParen+ | TokenRParen+ | TokenEOF+ | TokenPKVersion+ | TokenSigVersion+ | TokenSigType+ | TokenPKAlgo+ | TokenSigPKAlgo+ | TokenHashAlgo+ | TokenRSA+ | TokenDSA+ | TokenElgamal+ | TokenECDSA+ | TokenECDH+ | TokenDH+ | TokenBinary+ | TokenCanonicalText+ | TokenStandalone+ | TokenGenericCert+ | TokenPersonaCert+ | TokenCasualCert+ | TokenPositiveCert+ | TokenSubkeyBindingSig+ | TokenPrimaryKeyBindingSig+ | TokenSignatureDirectlyOnAKey+ | TokenKeyRevocationSig+ | TokenSubkeyRevocationSig+ | TokenCertRevocationSig+ | TokenTimestampSig+ | TokenMD5+ | TokenSHA1+ | TokenRIPEMD160+ | TokenSHA256+ | TokenSHA384+ | TokenSHA512+ | TokenSHA224+ | TokenKeysize+ | TokenTimestamp+ | TokenFingerprint+ | TokenKeyID+ | TokenFpr TwentyOctetFingerprint+ | TokenLongID (Either String EightOctetKeyId)+ | TokenLength+ | TokenEvery+ | TokenOne+ | TokenOf+ | TokenContains+ | TokenUids+ | TokenStr String+ | TokenA+ | TokenSubkey+ | TokenSigCreationTime+ deriving (Eq,Show)++alexEOF = return TokenEOF++lex :: (String -> a) -> AlexAction a+lex f = \(_,_,_,s) i -> return (f (take i s))++lex' :: a -> AlexAction a+lex' = lex . const+++alex_action_1 = lex' TokenA +alex_action_2 = lex' TokenAnd +alex_action_3 = lex' TokenAny +alex_action_4 = lex' TokenEvery +alex_action_5 = lex' TokenNot +alex_action_6 = lex' TokenNow +alex_action_7 = lex' TokenOne +alex_action_8 = lex' TokenOr +alex_action_9 = lex' TokenSubkey +alex_action_10 = lex' TokenTag +alex_action_11 = lex' TokenOf +alex_action_12 = lex' TokenEq +alex_action_13 = lex' TokenEq +alex_action_14 = lex' TokenEq +alex_action_15 = lex' TokenLt +alex_action_16 = lex' TokenGt +alex_action_17 = lex' TokenLParen +alex_action_18 = lex' TokenRParen +alex_action_19 = lex' TokenContains +alex_action_20 = lex' TokenPKVersion +alex_action_21 = lex' TokenSigVersion +alex_action_22 = lex' TokenSigType +alex_action_23 = lex' TokenPKAlgo +alex_action_24 = lex' TokenSigPKAlgo +alex_action_25 = lex' TokenHashAlgo +alex_action_26 = lex' TokenRSA +alex_action_27 = lex' TokenDSA +alex_action_28 = lex' TokenElgamal +alex_action_29 = lex' TokenECDSA +alex_action_30 = lex' TokenECDH +alex_action_31 = lex' TokenDH +alex_action_32 = lex' TokenBinary +alex_action_33 = lex' TokenCanonicalText +alex_action_34 = lex' TokenStandalone +alex_action_35 = lex' TokenGenericCert +alex_action_36 = lex' TokenPersonaCert +alex_action_37 = lex' TokenCasualCert +alex_action_38 = lex' TokenPositiveCert +alex_action_39 = lex' TokenSubkeyBindingSig +alex_action_40 = lex' TokenPrimaryKeyBindingSig +alex_action_41 = lex' TokenSignatureDirectlyOnAKey +alex_action_42 = lex' TokenKeyRevocationSig +alex_action_43 = lex' TokenSubkeyRevocationSig +alex_action_44 = lex' TokenCertRevocationSig +alex_action_45 = lex' TokenTimestampSig +alex_action_46 = lex' TokenMD5 +alex_action_47 = lex' TokenSHA1 +alex_action_48 = lex' TokenRIPEMD160 +alex_action_49 = lex' TokenSHA256 +alex_action_50 = lex' TokenSHA384 +alex_action_51 = lex' TokenSHA512 +alex_action_52 = lex' TokenSHA224 +alex_action_53 = lex' TokenUids +alex_action_54 = lex' TokenKeysize +alex_action_55 = lex' TokenLength +alex_action_56 = lex' TokenTimestamp +alex_action_57 = lex' TokenFingerprint +alex_action_58 = lex' TokenKeyID +alex_action_59 = lex' TokenSigCreationTime +alex_action_60 = lex (TokenFpr . read) +alex_action_61 = lex (TokenFpr . read . drop 2) +alex_action_62 = lex (TokenLongID . Right . read) +alex_action_63 = lex (TokenLongID . Right . read . drop 2) +alex_action_64 = lex (TokenInt . fromIntegral . read) +alex_action_65 = lex (TokenInt . fromIntegral . fst . head . readHex) +alex_action_66 = lex (TokenInt . fromIntegral . fst . head . readHex . drop 2) +alex_action_67 = lex (TokenStr . ((zipWith const . drop 1) <*> (drop 2))) +{-# 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++++++++++++++++++-- Do not remove this comment. Required to fix CPP parsing when using GCC and a clang-compiled alex.+#if __GLASGOW_HASKELL__ > 706+#define GTE(n,m) (tagToEnum# (n >=# m))+#define EQ(n,m) (tagToEnum# (n ==# m))+#else+#define GTE(n,m) (n >=# m)+#define EQ(n,m) (n ==# m)+#endif++++++++++++++++++++data AlexAddr = AlexA# Addr#+-- Do not remove this comment. Required to fix CPP parsing when using GCC and a clang-compiled alex.+#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 alexGetByte input__ of+ Nothing ->++++ AlexEOF+ Just _ ->++++ AlexError input__'++ (AlexLastSkip input__'' len, _) ->++++ AlexSkip input__'' len++ (AlexLastAcc k input__''' len, _) ->++++ AlexToken input__''' len (alex_actions ! 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 alexGetByte input__ of+ Nothing -> (new_acc, input__)+ Just (c, new_input) ->++++ case fromIntegral c of { (I# (ord_c)) ->+ let+ base = alexIndexInt32OffAddr alex_base s+ offset = (base +# ord_c)+ check = alexIndexInt16OffAddr alex_check offset++ new_s = if GTE(offset,0#) && EQ(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 (if c < 0x80 || c >= 0xC0 then (len +# 1#) else len)+ -- note that the length is increased ONLY if this is the 1st byte in a char encoding)+ new_input new_s new_acc+ }+ where+ check_accs (AlexAccNone) = last_acc+ check_accs (AlexAcc a ) = AlexLastAcc a input__ (I# (len))+ check_accs (AlexAccSkip) = AlexLastSkip input__ (I# (len))++++++++++++++data AlexLastAcc+ = AlexNone+ | AlexLastAcc !Int !AlexInput !Int+ | AlexLastSkip !AlexInput !Int++data AlexAcc user+ = AlexAccNone+ | AlexAcc Int+ | AlexAccSkip+++++++++++++++++++++++++++++
+ dist/build/hot/hot-tmp/HOpenPGP/Tools/Parser.hs view
@@ -0,0 +1,1615 @@+{-# OPTIONS_GHC -w #-}+{-# OPTIONS -XMagicHash -XBangPatterns -XTypeSynonymInstances -XFlexibleInstances -cpp #-}+#if __GLASGOW_HASKELL__ >= 710+{-# OPTIONS_GHC -XPartialTypeSignatures #-}+#endif+{-# OPTIONS -w #-}+module HOpenPGP.Tools.Parser( parseTKExp, parsePExp ) where+import Codec.Encryption.OpenPGP.Types+-- import Data.Conduit.OpenPGP.Filter (Expr(..), UPredicate(..), UOp(..), OVar(..), OValue(..), SPVar(..), SPValue(..), PKPVar(..), PKPValue(..))+import HOpenPGP.Tools.Common (pkpGetPKVersion, pkpGetPKAlgo, pkpGetKeysize, pkpGetTimestamp, pkpGetFingerprint, pkpGetEOKI, tkUsingPKP, tkGetUIDs, tkGetSubs, anyOrAll, anyReader, oGetTag, oGetLength, spGetSigVersion, spGetSigType, spGetPKAlgo, spGetHashAlgo, spGetSCT, pUsingPKP, pUsingSP, maybeR)++import HOpenPGP.Tools.Lexer++import Control.Applicative (liftA2)+import Codec.Encryption.OpenPGP.Fingerprint (eightOctetKeyID, fingerprint)+import Codec.Encryption.OpenPGP.KeyInfo (pubkeySize)+import Control.Error.Util (hush)+import Control.Monad.Loops (allM, anyM)+import Control.Monad.Trans.Reader (ask, reader, Reader, withReader)+import Data.List (isInfixOf)+import qualified Data.Text as T+import Data.Text.Prettyprint.Doc (pretty)+import qualified Data.Array as Happy_Data_Array+import qualified Data.Bits as Bits+import qualified GHC.Exts as Happy_GHC_Exts+import Control.Applicative(Applicative(..))+import Control.Monad (ap)++-- parser produced by Happy Version 1.19.12++newtype HappyAbsSyn t5 t6 t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22 = HappyAbsSyn HappyAny+#if __GLASGOW_HASKELL__ >= 607+type HappyAny = Happy_GHC_Exts.Any+#else+type HappyAny = forall a . a+#endif+happyIn5 :: t5 -> (HappyAbsSyn t5 t6 t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22)+happyIn5 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn5 #-}+happyOut5 :: (HappyAbsSyn t5 t6 t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22) -> t5+happyOut5 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut5 #-}+happyIn6 :: t6 -> (HappyAbsSyn t5 t6 t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22)+happyIn6 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn6 #-}+happyOut6 :: (HappyAbsSyn t5 t6 t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22) -> t6+happyOut6 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut6 #-}+happyIn7 :: t7 -> (HappyAbsSyn t5 t6 t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22)+happyIn7 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn7 #-}+happyOut7 :: (HappyAbsSyn t5 t6 t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22) -> t7+happyOut7 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut7 #-}+happyIn8 :: t8 -> (HappyAbsSyn t5 t6 t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22)+happyIn8 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn8 #-}+happyOut8 :: (HappyAbsSyn t5 t6 t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22) -> t8+happyOut8 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut8 #-}+happyIn9 :: t9 -> (HappyAbsSyn t5 t6 t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22)+happyIn9 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn9 #-}+happyOut9 :: (HappyAbsSyn t5 t6 t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22) -> t9+happyOut9 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut9 #-}+happyIn10 :: t10 -> (HappyAbsSyn t5 t6 t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22)+happyIn10 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn10 #-}+happyOut10 :: (HappyAbsSyn t5 t6 t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22) -> t10+happyOut10 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut10 #-}+happyIn11 :: t11 -> (HappyAbsSyn t5 t6 t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22)+happyIn11 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn11 #-}+happyOut11 :: (HappyAbsSyn t5 t6 t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22) -> t11+happyOut11 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut11 #-}+happyIn12 :: t12 -> (HappyAbsSyn t5 t6 t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22)+happyIn12 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn12 #-}+happyOut12 :: (HappyAbsSyn t5 t6 t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22) -> t12+happyOut12 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut12 #-}+happyIn13 :: t13 -> (HappyAbsSyn t5 t6 t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22)+happyIn13 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn13 #-}+happyOut13 :: (HappyAbsSyn t5 t6 t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22) -> t13+happyOut13 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut13 #-}+happyIn14 :: t14 -> (HappyAbsSyn t5 t6 t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22)+happyIn14 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn14 #-}+happyOut14 :: (HappyAbsSyn t5 t6 t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22) -> t14+happyOut14 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut14 #-}+happyIn15 :: t15 -> (HappyAbsSyn t5 t6 t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22)+happyIn15 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn15 #-}+happyOut15 :: (HappyAbsSyn t5 t6 t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22) -> t15+happyOut15 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut15 #-}+happyIn16 :: t16 -> (HappyAbsSyn t5 t6 t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22)+happyIn16 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn16 #-}+happyOut16 :: (HappyAbsSyn t5 t6 t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22) -> t16+happyOut16 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut16 #-}+happyIn17 :: t17 -> (HappyAbsSyn t5 t6 t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22)+happyIn17 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn17 #-}+happyOut17 :: (HappyAbsSyn t5 t6 t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22) -> t17+happyOut17 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut17 #-}+happyIn18 :: t18 -> (HappyAbsSyn t5 t6 t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22)+happyIn18 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn18 #-}+happyOut18 :: (HappyAbsSyn t5 t6 t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22) -> t18+happyOut18 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut18 #-}+happyIn19 :: t19 -> (HappyAbsSyn t5 t6 t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22)+happyIn19 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn19 #-}+happyOut19 :: (HappyAbsSyn t5 t6 t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22) -> t19+happyOut19 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut19 #-}+happyIn20 :: t20 -> (HappyAbsSyn t5 t6 t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22)+happyIn20 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn20 #-}+happyOut20 :: (HappyAbsSyn t5 t6 t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22) -> t20+happyOut20 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut20 #-}+happyIn21 :: t21 -> (HappyAbsSyn t5 t6 t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22)+happyIn21 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn21 #-}+happyOut21 :: (HappyAbsSyn t5 t6 t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22) -> t21+happyOut21 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut21 #-}+happyIn22 :: t22 -> (HappyAbsSyn t5 t6 t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22)+happyIn22 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn22 #-}+happyOut22 :: (HappyAbsSyn t5 t6 t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22) -> t22+happyOut22 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut22 #-}+happyInTok :: (Token) -> (HappyAbsSyn t5 t6 t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22)+happyInTok x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyInTok #-}+happyOutTok :: (HappyAbsSyn t5 t6 t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22) -> (Token)+happyOutTok x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOutTok #-}+++happyExpList :: HappyAddr+happyExpList = HappyA# "\x00\x00\x40\x0d\x00\x09\x00\x00\x00\x1e\x00\x00\x00\x90\x20\xf0\x03\x00\x00\xe0\x13\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x90\x20\xf0\x03\x00\x00\xe0\x13\x00\x00\x00\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x20\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd4\x00\x90\x00\x00\x00\xe0\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x09\x00\x00\x00\x1e\x00\x00\x00\xd4\x00\x90\x00\x00\x00\xe0\x01\x00\x00\x40\x0d\x00\x09\x00\x00\x00\x1e\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\xfc\x01\x00\x00\x00\x00\x40\x00\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x04\xc0\x0f\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\xff\x3f\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x09\x02\x3f\x00\x00\x00\x3e\x01\x00\x00\x90\x20\xf0\x03\x00\x00\xe0\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x02\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x02\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"#++{-# NOINLINE happyExpListPerState #-}+happyExpListPerState st =+ token_strs_expected+ where token_strs = ["error","%dummy","%start_parseTK","%start_parseP","Exp","PExp","TExp","PIOp","PSOp","AATOp","Ppkalgos","Pfingerprint","Plongid","CFExp","OExp","OIOp","SPExp","SIOp","Ssigtypes","Spkalgos","Shashalgos","Stimespec","a","and","any","contains","every","not","now","of","one","or","subkey","tag","int","'='","'<'","'>'","'('","')'","pkversion","sigversion","sigtype","pkalgo","sigpkalgo","hashalgo","rsa","dsa","elgamal","ecdsa","ecdh","dh","binary","canonicaltext","standalone","genericcert","personacert","casualcert","positivecert","subkeybindingsig","primarykeybindingsig","signaturedirectlyonakey","keyrevocationsig","subkeyrevocationsig","certrevocationsig","timestampsig","md5","sha1","ripemd160","sha256","sha384","sha512","sha224","keysize","timestamp","fingerprint","keyid","sigcreationtime","fpr","longid","length","str","uids","%eof"]+ bit_start = st * 84+ bit_end = (st + 1) * 84+ read_bit = readArrayBit happyExpList+ bits = map read_bit [bit_start..bit_end - 1]+ bits_indexed = zip bits [0..83]+ token_strs_expected = concatMap f bits_indexed+ f (False, _) = []+ f (True, nr) = [token_strs !! nr]++happyActOffsets :: HappyAddr+happyActOffsets = HappyA# "\x14\x00\x0c\x00\x05\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x0c\x00\x4f\x00\x65\x00\x69\x00\x69\x00\x74\x00\x77\x00\x77\x00\x7a\x00\x7a\x00\xfe\xff\xfe\xff\x7d\x00\x80\x00\x01\x00\x00\x00\x00\x00\x06\x00\xfc\xff\x0b\x00\x14\x00\x04\x00\x0e\x00\xca\xff\x21\x00\xf7\xff\x14\x00\x14\x00\x2a\x00\x00\x00\x00\x00\x00\x00\x55\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x28\x00\x2e\x00\x00\x00\x00\x00\x00\x00\x38\x00\x03\x00\x4d\x00\x53\x00\x2d\x00\x57\x00\x58\x00\x6f\x00\x3c\x00\x0c\x00\x0c\x00\x3c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\xfb\xff\x2b\x00\x43\x00\x2b\x00\x61\x00\x00\x00\x00\x00\x2b\x00\x62\x00\x00\x00\x63\x00\x00\x00\x00\x00\x00\x00"#++happyGotoOffsets :: HappyAddr+happyGotoOffsets = HappyA# "\x91\x00\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1c\x00\x95\x00\x9e\x00\x96\x00\x98\x00\x9f\x00\x99\x00\x9b\x00\xa1\x00\xa4\x00\xa5\x00\xa6\x00\xa0\x00\xa3\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x94\x00\x00\x00\x00\x00\x00\x00\x00\x00\xaa\x00\x97\x00\x9a\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa2\x00\x00\x00\x00\x00\x00\x00\xa7\x00\x00\x00\x00\x00\xa9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9c\x00\xa8\x00\xab\x00\xac\x00\x00\x00\x00\x00\x00\x00\x00\x00\x71\x00\x75\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xad\x00\x00\x00\xaf\x00\x00\x00\x00\x00\x00\x00\xb0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"#++happyAdjustOffset :: Happy_GHC_Exts.Int# -> Happy_GHC_Exts.Int#+happyAdjustOffset off = off++happyDefActions :: HappyAddr+happyDefActions = HappyA# "\x00\x00\x00\x00\x00\x00\x00\x00\xd7\xff\x00\x00\xd9\xff\xd8\xff\xdd\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\xf9\xff\xf8\xff\x00\x00\xfd\xff\x00\x00\x00\x00\xfc\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd4\xff\xd3\xff\xd2\xff\x00\x00\xcc\xff\xcb\xff\xca\xff\x00\x00\xe9\xff\xea\xff\x00\x00\x00\x00\xed\xff\xec\xff\xeb\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdc\xff\x00\x00\x00\x00\xda\xff\xdb\xff\xd6\xff\xf7\xff\xd1\xff\xd0\xff\xbb\xff\xc9\xff\xc8\xff\xc7\xff\xc6\xff\xc5\xff\xc4\xff\xc3\xff\xc2\xff\xc1\xff\xc0\xff\xbf\xff\xbe\xff\xbd\xff\xbc\xff\xf6\xff\xe0\xff\xe6\xff\xe5\xff\xe4\xff\xe3\xff\xe2\xff\xe1\xff\xcf\xff\xb4\xff\xba\xff\xb9\xff\xb8\xff\xb7\xff\xb6\xff\xb5\xff\xce\xff\xac\xff\xb3\xff\xb2\xff\xb1\xff\xb0\xff\xaf\xff\xae\xff\xad\xff\xf5\xff\xf4\xff\xf3\xff\xdf\xff\xf2\xff\xde\xff\xcd\xff\xab\xff\xaa\xff\xd5\xff\xfa\xff\xfb\xff\xee\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe7\xff\xe8\xff\x00\x00\x00\x00\xef\xff\x00\x00\xf1\xff\xf0\xff"#++happyCheck :: HappyAddr+happyCheck = HappyA# "\xff\xff\x02\x00\x04\x00\x02\x00\x08\x00\x09\x00\x02\x00\x3d\x00\x03\x00\x0a\x00\x13\x00\x0a\x00\x0e\x00\x16\x00\x0a\x00\x03\x00\x0d\x00\x0b\x00\x06\x00\x01\x00\x09\x00\x01\x00\x08\x00\x03\x00\x0c\x00\x05\x00\x06\x00\x09\x00\x0a\x00\x01\x00\x0c\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x09\x00\x0a\x00\x13\x00\x0c\x00\x08\x00\x16\x00\x34\x00\x35\x00\x36\x00\x37\x00\x04\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x0d\x00\x3d\x00\x0e\x00\x0d\x00\x0d\x00\x3a\x00\x3e\x00\x02\x00\x3e\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x0d\x00\x0a\x00\x3b\x00\x34\x00\x35\x00\x36\x00\x37\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x0d\x00\x02\x00\x07\x00\x0e\x00\x0f\x00\x10\x00\x0d\x00\x39\x00\x0d\x00\x0a\x00\x0d\x00\x0d\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x01\x00\x0e\x00\x0f\x00\x10\x00\x01\x00\x0e\x00\x0f\x00\x10\x00\x09\x00\x0a\x00\x0d\x00\x0c\x00\x09\x00\x0a\x00\x3d\x00\x0c\x00\x0e\x00\x0f\x00\x10\x00\x0e\x00\x0f\x00\x10\x00\x0e\x00\x0f\x00\x10\x00\x0e\x00\x0f\x00\x10\x00\x0e\x00\x0f\x00\x10\x00\x00\x00\x01\x00\x02\x00\x00\x00\x01\x00\x02\x00\x00\x00\x01\x00\x02\x00\x00\x00\x01\x00\x02\x00\x3c\x00\x3c\x00\x3c\x00\x0b\x00\x03\x00\x03\x00\x0d\x00\x03\x00\x0d\x00\x0d\x00\x03\x00\x0d\x00\x04\x00\x04\x00\x01\x00\x10\x00\x0d\x00\x0b\x00\x08\x00\x07\x00\x06\x00\x05\x00\x11\x00\x05\x00\x05\x00\xff\xff\x0f\x00\xff\xff\xff\xff\x0e\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"#++happyTable :: HappyAddr+happyTable = HappyA# "\x00\x00\x3f\x00\x2f\x00\x24\x00\x21\x00\x22\x00\x24\x00\x7d\x00\x04\x00\x40\x00\x0c\x00\x25\x00\x30\x00\x0f\x00\x25\x00\x09\x00\x67\x00\x23\x00\x0a\x00\x04\x00\x20\x00\x1b\x00\x7e\x00\x1c\x00\x0b\x00\x1d\x00\x1e\x00\x05\x00\x06\x00\x04\x00\x07\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x3d\x00\x06\x00\x0c\x00\x07\x00\x7c\x00\x0f\x00\x12\x00\x13\x00\x14\x00\x15\x00\x81\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x78\x00\x83\x00\x82\x00\x47\x00\x70\x00\x74\x00\xff\xff\x3f\x00\xff\xff\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x6f\x00\x40\x00\x17\x00\x12\x00\x13\x00\x14\x00\x15\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\x5f\x00\x24\x00\x76\x00\x27\x00\x28\x00\x29\x00\x57\x00\x72\x00\x77\x00\x25\x00\x45\x00\x44\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x04\x00\x33\x00\x34\x00\x35\x00\x04\x00\x2b\x00\x2c\x00\x2d\x00\x41\x00\x06\x00\x43\x00\x07\x00\x40\x00\x06\x00\x7f\x00\x07\x00\x33\x00\x34\x00\x35\x00\x2b\x00\x2c\x00\x2d\x00\x33\x00\x34\x00\x35\x00\x2b\x00\x2c\x00\x2d\x00\x27\x00\x28\x00\x29\x00\x17\x00\x18\x00\x19\x00\x1e\x00\x18\x00\x19\x00\x79\x00\x18\x00\x19\x00\x78\x00\x18\x00\x19\x00\x85\x00\x88\x00\x87\x00\x3c\x00\x3b\x00\x38\x00\x3a\x00\x35\x00\x39\x00\x37\x00\x31\x00\x36\x00\x30\x00\x2d\x00\x7a\x00\x65\x00\x29\x00\x25\x00\x72\x00\x70\x00\x55\x00\x7f\x00\x74\x00\x85\x00\x83\x00\x00\x00\x5d\x00\x00\x00\x00\x00\x45\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"#++happyReduceArr = Happy_Data_Array.array (2, 85) [+ (2 , happyReduce_2),+ (3 , happyReduce_3),+ (4 , happyReduce_4),+ (5 , happyReduce_5),+ (6 , happyReduce_6),+ (7 , happyReduce_7),+ (8 , happyReduce_8),+ (9 , happyReduce_9),+ (10 , happyReduce_10),+ (11 , happyReduce_11),+ (12 , happyReduce_12),+ (13 , happyReduce_13),+ (14 , happyReduce_14),+ (15 , happyReduce_15),+ (16 , happyReduce_16),+ (17 , happyReduce_17),+ (18 , happyReduce_18),+ (19 , happyReduce_19),+ (20 , happyReduce_20),+ (21 , happyReduce_21),+ (22 , happyReduce_22),+ (23 , happyReduce_23),+ (24 , happyReduce_24),+ (25 , happyReduce_25),+ (26 , happyReduce_26),+ (27 , happyReduce_27),+ (28 , happyReduce_28),+ (29 , happyReduce_29),+ (30 , happyReduce_30),+ (31 , happyReduce_31),+ (32 , happyReduce_32),+ (33 , happyReduce_33),+ (34 , happyReduce_34),+ (35 , happyReduce_35),+ (36 , happyReduce_36),+ (37 , happyReduce_37),+ (38 , happyReduce_38),+ (39 , happyReduce_39),+ (40 , happyReduce_40),+ (41 , happyReduce_41),+ (42 , happyReduce_42),+ (43 , happyReduce_43),+ (44 , happyReduce_44),+ (45 , happyReduce_45),+ (46 , happyReduce_46),+ (47 , happyReduce_47),+ (48 , happyReduce_48),+ (49 , happyReduce_49),+ (50 , happyReduce_50),+ (51 , happyReduce_51),+ (52 , happyReduce_52),+ (53 , happyReduce_53),+ (54 , happyReduce_54),+ (55 , happyReduce_55),+ (56 , happyReduce_56),+ (57 , happyReduce_57),+ (58 , happyReduce_58),+ (59 , happyReduce_59),+ (60 , happyReduce_60),+ (61 , happyReduce_61),+ (62 , happyReduce_62),+ (63 , happyReduce_63),+ (64 , happyReduce_64),+ (65 , happyReduce_65),+ (66 , happyReduce_66),+ (67 , happyReduce_67),+ (68 , happyReduce_68),+ (69 , happyReduce_69),+ (70 , happyReduce_70),+ (71 , happyReduce_71),+ (72 , happyReduce_72),+ (73 , happyReduce_73),+ (74 , happyReduce_74),+ (75 , happyReduce_75),+ (76 , happyReduce_76),+ (77 , happyReduce_77),+ (78 , happyReduce_78),+ (79 , happyReduce_79),+ (80 , happyReduce_80),+ (81 , happyReduce_81),+ (82 , happyReduce_82),+ (83 , happyReduce_83),+ (84 , happyReduce_84),+ (85 , happyReduce_85)+ ]++happy_n_terms = 63 :: Int+happy_n_nonterms = 18 :: Int++#if __GLASGOW_HASKELL__ >= 710+happyReduce_2 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_2 = happySpecReduce_1 0# happyReduction_2+happyReduction_2 happy_x_1+ = happyIn5+ (return True+ )++#if __GLASGOW_HASKELL__ >= 710+happyReduce_3 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_3 = happySpecReduce_2 0# happyReduction_3+happyReduction_3 happy_x_2+ happy_x_1+ = case happyOut5 happy_x_2 of { happy_var_2 -> + happyIn5+ (fmap not happy_var_2+ )}++#if __GLASGOW_HASKELL__ >= 710+happyReduce_4 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_4 = happySpecReduce_3 0# happyReduction_4+happyReduction_4 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut5 happy_x_1 of { happy_var_1 -> + case happyOut5 happy_x_3 of { happy_var_3 -> + happyIn5+ (liftA2 (&&) happy_var_1 happy_var_3+ )}}++#if __GLASGOW_HASKELL__ >= 710+happyReduce_5 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_5 = happySpecReduce_3 0# happyReduction_5+happyReduction_5 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut5 happy_x_1 of { happy_var_1 -> + case happyOut5 happy_x_3 of { happy_var_3 -> + happyIn5+ (liftA2 (||) happy_var_1 happy_var_3+ )}}++#if __GLASGOW_HASKELL__ >= 710+happyReduce_6 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_6 = happySpecReduce_1 0# happyReduction_6+happyReduction_6 happy_x_1+ = case happyOut6 happy_x_1 of { happy_var_1 -> + happyIn5+ (tkUsingPKP happy_var_1+ )}++#if __GLASGOW_HASKELL__ >= 710+happyReduce_7 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_7 = happySpecReduce_1 0# happyReduction_7+happyReduction_7 happy_x_1+ = case happyOut7 happy_x_1 of { happy_var_1 -> + happyIn5+ (happy_var_1+ )}++#if __GLASGOW_HASKELL__ >= 710+happyReduce_8 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_8 = happySpecReduce_3 1# happyReduction_8+happyReduction_8 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut8 happy_x_2 of { happy_var_2 -> + case happyOutTok happy_x_3 of { (TokenInt happy_var_3) -> + happyIn6+ (happy_var_2 (reader pkpGetPKVersion) (return happy_var_3)+ )}}++#if __GLASGOW_HASKELL__ >= 710+happyReduce_9 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_9 = happySpecReduce_3 1# happyReduction_9+happyReduction_9 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut8 happy_x_2 of { happy_var_2 -> + case happyOut11 happy_x_3 of { happy_var_3 -> + happyIn6+ (happy_var_2 (reader pkpGetPKAlgo) (return happy_var_3)+ )}}++#if __GLASGOW_HASKELL__ >= 710+happyReduce_10 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_10 = happySpecReduce_3 1# happyReduction_10+happyReduction_10 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut8 happy_x_2 of { happy_var_2 -> + case happyOutTok happy_x_3 of { (TokenInt happy_var_3) -> + happyIn6+ (happy_var_2 (reader pkpGetKeysize) (return happy_var_3)+ )}}++#if __GLASGOW_HASKELL__ >= 710+happyReduce_11 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_11 = happySpecReduce_3 1# happyReduction_11+happyReduction_11 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut8 happy_x_2 of { happy_var_2 -> + case happyOutTok happy_x_3 of { (TokenInt happy_var_3) -> + happyIn6+ (happy_var_2 (reader pkpGetTimestamp) (return happy_var_3)+ )}}++#if __GLASGOW_HASKELL__ >= 710+happyReduce_12 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_12 = happySpecReduce_3 1# happyReduction_12+happyReduction_12 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut9 happy_x_2 of { happy_var_2 -> + case happyOut12 happy_x_3 of { happy_var_3 -> + happyIn6+ (happy_var_2 (reader (show . pretty . pkpGetFingerprint)) (return happy_var_3)+ )}}++#if __GLASGOW_HASKELL__ >= 710+happyReduce_13 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_13 = happySpecReduce_3 1# happyReduction_13+happyReduction_13 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut9 happy_x_2 of { happy_var_2 -> + case happyOut13 happy_x_3 of { happy_var_3 -> + happyIn6+ (happy_var_2 (reader pkpGetEOKI) (return happy_var_3)+ )}}++#if __GLASGOW_HASKELL__ >= 710+happyReduce_14 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_14 = happyReduce 6# 2# happyReduction_14+happyReduction_14 (happy_x_6 `HappyStk`+ happy_x_5 `HappyStk`+ happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOut10 happy_x_5 of { happy_var_5 -> + case happyOutTok happy_x_6 of { (TokenStr happy_var_6) -> + happyIn7+ (withReader tkGetUIDs (anyOrAll allM (happy_var_5 (return (T.pack happy_var_6))))+ ) `HappyStk` happyRest}}++#if __GLASGOW_HASKELL__ >= 710+happyReduce_15 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_15 = happyReduce 6# 2# happyReduction_15+happyReduction_15 (happy_x_6 `HappyStk`+ happy_x_5 `HappyStk`+ happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOut10 happy_x_5 of { happy_var_5 -> + case happyOutTok happy_x_6 of { (TokenStr happy_var_6) -> + happyIn7+ (withReader tkGetUIDs (anyOrAll anyM (happy_var_5 (return (T.pack happy_var_6))))+ ) `HappyStk` happyRest}}++#if __GLASGOW_HASKELL__ >= 710+happyReduce_16 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_16 = happyReduce 5# 2# happyReduction_16+happyReduction_16 (happy_x_5 `HappyStk`+ happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOut10 happy_x_4 of { happy_var_4 -> + case happyOutTok happy_x_5 of { (TokenStr happy_var_5) -> + happyIn7+ (withReader tkGetUIDs (anyOrAll anyM (happy_var_4 (return (T.pack happy_var_5))))+ ) `HappyStk` happyRest}}++#if __GLASGOW_HASKELL__ >= 710+happyReduce_17 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_17 = happySpecReduce_3 2# happyReduction_17+happyReduction_17 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut6 happy_x_3 of { happy_var_3 -> + happyIn7+ (withReader tkGetSubs (anyReader happy_var_3)+ )}++#if __GLASGOW_HASKELL__ >= 710+happyReduce_18 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_18 = happySpecReduce_1 3# happyReduction_18+happyReduction_18 happy_x_1+ = happyIn8+ (liftA2 (==)+ )++#if __GLASGOW_HASKELL__ >= 710+happyReduce_19 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_19 = happySpecReduce_1 3# happyReduction_19+happyReduction_19 happy_x_1+ = happyIn8+ (liftA2 (<)+ )++#if __GLASGOW_HASKELL__ >= 710+happyReduce_20 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_20 = happySpecReduce_1 3# happyReduction_20+happyReduction_20 happy_x_1+ = happyIn8+ (liftA2 (>)+ )++#if __GLASGOW_HASKELL__ >= 710+happyReduce_21 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_21 = happySpecReduce_1 4# happyReduction_21+happyReduction_21 happy_x_1+ = happyIn9+ (liftA2 (==)+ )++#if __GLASGOW_HASKELL__ >= 710+happyReduce_22 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_22 = happySpecReduce_1 4# happyReduction_22+happyReduction_22 happy_x_1+ = happyIn9+ (liftA2 (flip isInfixOf)+ )++#if __GLASGOW_HASKELL__ >= 710+happyReduce_23 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_23 = happySpecReduce_1 5# happyReduction_23+happyReduction_23 happy_x_1+ = happyIn10+ (liftA2 (==)+ )++#if __GLASGOW_HASKELL__ >= 710+happyReduce_24 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_24 = happySpecReduce_1 5# happyReduction_24+happyReduction_24 happy_x_1+ = happyIn10+ (liftA2 T.isInfixOf+ )++#if __GLASGOW_HASKELL__ >= 710+happyReduce_25 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_25 = happySpecReduce_1 6# happyReduction_25+happyReduction_25 happy_x_1+ = happyIn11+ (fromIntegral (fromFVal RSA)+ )++#if __GLASGOW_HASKELL__ >= 710+happyReduce_26 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_26 = happySpecReduce_1 6# happyReduction_26+happyReduction_26 happy_x_1+ = happyIn11+ (fromIntegral (fromFVal DSA)+ )++#if __GLASGOW_HASKELL__ >= 710+happyReduce_27 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_27 = happySpecReduce_1 6# happyReduction_27+happyReduction_27 happy_x_1+ = happyIn11+ (fromIntegral (fromFVal ElgamalEncryptOnly)+ )++#if __GLASGOW_HASKELL__ >= 710+happyReduce_28 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_28 = happySpecReduce_1 6# happyReduction_28+happyReduction_28 happy_x_1+ = happyIn11+ (fromIntegral (fromFVal ECDSA)+ )++#if __GLASGOW_HASKELL__ >= 710+happyReduce_29 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_29 = happySpecReduce_1 6# happyReduction_29+happyReduction_29 happy_x_1+ = happyIn11+ (fromIntegral (fromFVal ECDH)+ )++#if __GLASGOW_HASKELL__ >= 710+happyReduce_30 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_30 = happySpecReduce_1 6# happyReduction_30+happyReduction_30 happy_x_1+ = happyIn11+ (fromIntegral (fromFVal DH)+ )++#if __GLASGOW_HASKELL__ >= 710+happyReduce_31 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_31 = happySpecReduce_1 6# happyReduction_31+happyReduction_31 happy_x_1+ = case happyOutTok happy_x_1 of { (TokenInt happy_var_1) -> + happyIn11+ (fromIntegral happy_var_1+ )}++#if __GLASGOW_HASKELL__ >= 710+happyReduce_32 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_32 = happySpecReduce_1 7# happyReduction_32+happyReduction_32 happy_x_1+ = case happyOutTok happy_x_1 of { (TokenFpr happy_var_1) -> + happyIn12+ ((show . pretty) happy_var_1+ )}++#if __GLASGOW_HASKELL__ >= 710+happyReduce_33 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_33 = happySpecReduce_1 8# happyReduction_33+happyReduction_33 happy_x_1+ = case happyOutTok happy_x_1 of { (TokenLongID happy_var_1) -> + happyIn13+ (either (const "BROKEN") show happy_var_1+ )}++#if __GLASGOW_HASKELL__ >= 710+happyReduce_34 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_34 = happySpecReduce_1 9# happyReduction_34+happyReduction_34 happy_x_1+ = happyIn14+ (return True+ )++#if __GLASGOW_HASKELL__ >= 710+happyReduce_35 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_35 = happySpecReduce_2 9# happyReduction_35+happyReduction_35 happy_x_2+ happy_x_1+ = case happyOut14 happy_x_2 of { happy_var_2 -> + happyIn14+ (fmap not happy_var_2+ )}++#if __GLASGOW_HASKELL__ >= 710+happyReduce_36 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_36 = happySpecReduce_3 9# happyReduction_36+happyReduction_36 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut14 happy_x_1 of { happy_var_1 -> + case happyOut14 happy_x_3 of { happy_var_3 -> + happyIn14+ (liftA2 (&&) happy_var_1 happy_var_3+ )}}++#if __GLASGOW_HASKELL__ >= 710+happyReduce_37 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_37 = happySpecReduce_3 9# happyReduction_37+happyReduction_37 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut14 happy_x_1 of { happy_var_1 -> + case happyOut14 happy_x_3 of { happy_var_3 -> + happyIn14+ (liftA2 (||) happy_var_1 happy_var_3+ )}}++#if __GLASGOW_HASKELL__ >= 710+happyReduce_38 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_38 = happySpecReduce_1 9# happyReduction_38+happyReduction_38 happy_x_1+ = case happyOut15 happy_x_1 of { happy_var_1 -> + happyIn14+ (happy_var_1+ )}++#if __GLASGOW_HASKELL__ >= 710+happyReduce_39 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_39 = happySpecReduce_1 9# happyReduction_39+happyReduction_39 happy_x_1+ = case happyOut17 happy_x_1 of { happy_var_1 -> + happyIn14+ (happy_var_1+ )}++#if __GLASGOW_HASKELL__ >= 710+happyReduce_40 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_40 = happySpecReduce_1 9# happyReduction_40+happyReduction_40 happy_x_1+ = case happyOut6 happy_x_1 of { happy_var_1 -> + happyIn14+ (pUsingPKP (maybeR True happy_var_1)+ )}++#if __GLASGOW_HASKELL__ >= 710+happyReduce_41 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_41 = happySpecReduce_3 10# happyReduction_41+happyReduction_41 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut16 happy_x_2 of { happy_var_2 -> + case happyOutTok happy_x_3 of { (TokenInt happy_var_3) -> + happyIn15+ (happy_var_2 (reader oGetTag) (return happy_var_3)+ )}}++#if __GLASGOW_HASKELL__ >= 710+happyReduce_42 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_42 = happySpecReduce_3 10# happyReduction_42+happyReduction_42 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut16 happy_x_2 of { happy_var_2 -> + case happyOutTok happy_x_3 of { (TokenInt happy_var_3) -> + happyIn15+ (happy_var_2 (reader oGetLength) (return happy_var_3)+ )}}++#if __GLASGOW_HASKELL__ >= 710+happyReduce_43 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_43 = happySpecReduce_1 11# happyReduction_43+happyReduction_43 happy_x_1+ = happyIn16+ (liftA2 (==)+ )++#if __GLASGOW_HASKELL__ >= 710+happyReduce_44 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_44 = happySpecReduce_1 11# happyReduction_44+happyReduction_44 happy_x_1+ = happyIn16+ (liftA2 (<)+ )++#if __GLASGOW_HASKELL__ >= 710+happyReduce_45 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_45 = happySpecReduce_1 11# happyReduction_45+happyReduction_45 happy_x_1+ = happyIn16+ (liftA2 (>)+ )++#if __GLASGOW_HASKELL__ >= 710+happyReduce_46 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_46 = happySpecReduce_3 12# happyReduction_46+happyReduction_46 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut18 happy_x_2 of { happy_var_2 -> + case happyOutTok happy_x_3 of { (TokenInt happy_var_3) -> + happyIn17+ (happy_var_2 (reader spGetSigVersion) (return (Just happy_var_3))+ )}}++#if __GLASGOW_HASKELL__ >= 710+happyReduce_47 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_47 = happySpecReduce_3 12# happyReduction_47+happyReduction_47 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut18 happy_x_2 of { happy_var_2 -> + case happyOut19 happy_x_3 of { happy_var_3 -> + happyIn17+ (happy_var_2 (reader spGetSigType) (return (Just happy_var_3))+ )}}++#if __GLASGOW_HASKELL__ >= 710+happyReduce_48 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_48 = happySpecReduce_3 12# happyReduction_48+happyReduction_48 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut18 happy_x_2 of { happy_var_2 -> + case happyOut20 happy_x_3 of { happy_var_3 -> + happyIn17+ (happy_var_2 (reader spGetPKAlgo) (return (Just happy_var_3))+ )}}++#if __GLASGOW_HASKELL__ >= 710+happyReduce_49 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_49 = happySpecReduce_3 12# happyReduction_49+happyReduction_49 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut18 happy_x_2 of { happy_var_2 -> + case happyOut21 happy_x_3 of { happy_var_3 -> + happyIn17+ (happy_var_2 (reader spGetHashAlgo) (return (Just happy_var_3))+ )}}++#if __GLASGOW_HASKELL__ >= 710+happyReduce_50 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_50 = happySpecReduce_3 12# happyReduction_50+happyReduction_50 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut18 happy_x_2 of { happy_var_2 -> + case happyOut22 happy_x_3 of { happy_var_3 -> + happyIn17+ (happy_var_2 (reader spGetSCT) (return (Just happy_var_3))+ )}}++#if __GLASGOW_HASKELL__ >= 710+happyReduce_51 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_51 = happySpecReduce_1 13# happyReduction_51+happyReduction_51 happy_x_1+ = happyIn18+ (liftA2 (==)+ )++#if __GLASGOW_HASKELL__ >= 710+happyReduce_52 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_52 = happySpecReduce_1 13# happyReduction_52+happyReduction_52 happy_x_1+ = happyIn18+ (liftA2 (<)+ )++#if __GLASGOW_HASKELL__ >= 710+happyReduce_53 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_53 = happySpecReduce_1 13# happyReduction_53+happyReduction_53 happy_x_1+ = happyIn18+ (liftA2 (>)+ )++#if __GLASGOW_HASKELL__ >= 710+happyReduce_54 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_54 = happySpecReduce_1 14# happyReduction_54+happyReduction_54 happy_x_1+ = happyIn19+ (fromIntegral (fromFVal BinarySig)+ )++#if __GLASGOW_HASKELL__ >= 710+happyReduce_55 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_55 = happySpecReduce_1 14# happyReduction_55+happyReduction_55 happy_x_1+ = happyIn19+ (fromIntegral (fromFVal CanonicalTextSig)+ )++#if __GLASGOW_HASKELL__ >= 710+happyReduce_56 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_56 = happySpecReduce_1 14# happyReduction_56+happyReduction_56 happy_x_1+ = happyIn19+ (fromIntegral (fromFVal StandaloneSig)+ )++#if __GLASGOW_HASKELL__ >= 710+happyReduce_57 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_57 = happySpecReduce_1 14# happyReduction_57+happyReduction_57 happy_x_1+ = happyIn19+ (fromIntegral (fromFVal GenericCert)+ )++#if __GLASGOW_HASKELL__ >= 710+happyReduce_58 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_58 = happySpecReduce_1 14# happyReduction_58+happyReduction_58 happy_x_1+ = happyIn19+ (fromIntegral (fromFVal PersonaCert)+ )++#if __GLASGOW_HASKELL__ >= 710+happyReduce_59 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_59 = happySpecReduce_1 14# happyReduction_59+happyReduction_59 happy_x_1+ = happyIn19+ (fromIntegral (fromFVal CasualCert)+ )++#if __GLASGOW_HASKELL__ >= 710+happyReduce_60 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_60 = happySpecReduce_1 14# happyReduction_60+happyReduction_60 happy_x_1+ = happyIn19+ (fromIntegral (fromFVal PositiveCert)+ )++#if __GLASGOW_HASKELL__ >= 710+happyReduce_61 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_61 = happySpecReduce_1 14# happyReduction_61+happyReduction_61 happy_x_1+ = happyIn19+ (fromIntegral (fromFVal SubkeyBindingSig)+ )++#if __GLASGOW_HASKELL__ >= 710+happyReduce_62 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_62 = happySpecReduce_1 14# happyReduction_62+happyReduction_62 happy_x_1+ = happyIn19+ (fromIntegral (fromFVal PrimaryKeyBindingSig)+ )++#if __GLASGOW_HASKELL__ >= 710+happyReduce_63 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_63 = happySpecReduce_1 14# happyReduction_63+happyReduction_63 happy_x_1+ = happyIn19+ (fromIntegral (fromFVal SignatureDirectlyOnAKey)+ )++#if __GLASGOW_HASKELL__ >= 710+happyReduce_64 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_64 = happySpecReduce_1 14# happyReduction_64+happyReduction_64 happy_x_1+ = happyIn19+ (fromIntegral (fromFVal KeyRevocationSig)+ )++#if __GLASGOW_HASKELL__ >= 710+happyReduce_65 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_65 = happySpecReduce_1 14# happyReduction_65+happyReduction_65 happy_x_1+ = happyIn19+ (fromIntegral (fromFVal SubkeyRevocationSig)+ )++#if __GLASGOW_HASKELL__ >= 710+happyReduce_66 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_66 = happySpecReduce_1 14# happyReduction_66+happyReduction_66 happy_x_1+ = happyIn19+ (fromIntegral (fromFVal CertRevocationSig)+ )++#if __GLASGOW_HASKELL__ >= 710+happyReduce_67 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_67 = happySpecReduce_1 14# happyReduction_67+happyReduction_67 happy_x_1+ = happyIn19+ (fromIntegral (fromFVal TimestampSig)+ )++#if __GLASGOW_HASKELL__ >= 710+happyReduce_68 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_68 = happySpecReduce_1 14# happyReduction_68+happyReduction_68 happy_x_1+ = case happyOutTok happy_x_1 of { (TokenInt happy_var_1) -> + happyIn19+ (fromIntegral happy_var_1+ )}++#if __GLASGOW_HASKELL__ >= 710+happyReduce_69 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_69 = happySpecReduce_1 15# happyReduction_69+happyReduction_69 happy_x_1+ = happyIn20+ (fromIntegral (fromFVal RSA)+ )++#if __GLASGOW_HASKELL__ >= 710+happyReduce_70 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_70 = happySpecReduce_1 15# happyReduction_70+happyReduction_70 happy_x_1+ = happyIn20+ (fromIntegral (fromFVal DSA)+ )++#if __GLASGOW_HASKELL__ >= 710+happyReduce_71 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_71 = happySpecReduce_1 15# happyReduction_71+happyReduction_71 happy_x_1+ = happyIn20+ (fromIntegral (fromFVal ElgamalEncryptOnly)+ )++#if __GLASGOW_HASKELL__ >= 710+happyReduce_72 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_72 = happySpecReduce_1 15# happyReduction_72+happyReduction_72 happy_x_1+ = happyIn20+ (fromIntegral (fromFVal ECDSA)+ )++#if __GLASGOW_HASKELL__ >= 710+happyReduce_73 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_73 = happySpecReduce_1 15# happyReduction_73+happyReduction_73 happy_x_1+ = happyIn20+ (fromIntegral (fromFVal ECDH)+ )++#if __GLASGOW_HASKELL__ >= 710+happyReduce_74 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_74 = happySpecReduce_1 15# happyReduction_74+happyReduction_74 happy_x_1+ = happyIn20+ (fromIntegral (fromFVal DH)+ )++#if __GLASGOW_HASKELL__ >= 710+happyReduce_75 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_75 = happySpecReduce_1 15# happyReduction_75+happyReduction_75 happy_x_1+ = case happyOutTok happy_x_1 of { (TokenInt happy_var_1) -> + happyIn20+ (fromIntegral happy_var_1+ )}++#if __GLASGOW_HASKELL__ >= 710+happyReduce_76 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_76 = happySpecReduce_1 16# happyReduction_76+happyReduction_76 happy_x_1+ = happyIn21+ (fromIntegral (fromFVal DeprecatedMD5)+ )++#if __GLASGOW_HASKELL__ >= 710+happyReduce_77 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_77 = happySpecReduce_1 16# happyReduction_77+happyReduction_77 happy_x_1+ = happyIn21+ (fromIntegral (fromFVal SHA1)+ )++#if __GLASGOW_HASKELL__ >= 710+happyReduce_78 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_78 = happySpecReduce_1 16# happyReduction_78+happyReduction_78 happy_x_1+ = happyIn21+ (fromIntegral (fromFVal RIPEMD160)+ )++#if __GLASGOW_HASKELL__ >= 710+happyReduce_79 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_79 = happySpecReduce_1 16# happyReduction_79+happyReduction_79 happy_x_1+ = happyIn21+ (fromIntegral (fromFVal SHA256)+ )++#if __GLASGOW_HASKELL__ >= 710+happyReduce_80 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_80 = happySpecReduce_1 16# happyReduction_80+happyReduction_80 happy_x_1+ = happyIn21+ (fromIntegral (fromFVal SHA384)+ )++#if __GLASGOW_HASKELL__ >= 710+happyReduce_81 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_81 = happySpecReduce_1 16# happyReduction_81+happyReduction_81 happy_x_1+ = happyIn21+ (fromIntegral (fromFVal SHA512)+ )++#if __GLASGOW_HASKELL__ >= 710+happyReduce_82 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_82 = happySpecReduce_1 16# happyReduction_82+happyReduction_82 happy_x_1+ = happyIn21+ (fromIntegral (fromFVal SHA224)+ )++#if __GLASGOW_HASKELL__ >= 710+happyReduce_83 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_83 = happySpecReduce_1 16# happyReduction_83+happyReduction_83 happy_x_1+ = case happyOutTok happy_x_1 of { (TokenInt happy_var_1) -> + happyIn21+ (fromIntegral happy_var_1+ )}++#if __GLASGOW_HASKELL__ >= 710+happyReduce_84 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_84 = happySpecReduce_1 17# happyReduction_84+happyReduction_84 happy_x_1+ = happyIn22+ (0+ )++#if __GLASGOW_HASKELL__ >= 710+happyReduce_85 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)+#endif+happyReduce_85 = happySpecReduce_1 17# happyReduction_85+happyReduction_85 happy_x_1+ = case happyOutTok happy_x_1 of { (TokenInt happy_var_1) -> + happyIn22+ (fromIntegral happy_var_1+ )}++happyNewToken action sts stk+ = lexwrap(\tk -> + let cont i = happyDoAction i tk action sts stk in+ case tk of {+ TokenEOF -> happyDoAction 62# tk action sts stk;+ TokenA -> cont 1#;+ TokenAnd -> cont 2#;+ TokenAny -> cont 3#;+ TokenContains -> cont 4#;+ TokenEvery -> cont 5#;+ TokenNot -> cont 6#;+ TokenNow -> cont 7#;+ TokenOf -> cont 8#;+ TokenOne -> cont 9#;+ TokenOr -> cont 10#;+ TokenSubkey -> cont 11#;+ TokenTag -> cont 12#;+ TokenInt happy_dollar_dollar -> cont 13#;+ TokenEq -> cont 14#;+ TokenLt -> cont 15#;+ TokenGt -> cont 16#;+ TokenLParen -> cont 17#;+ TokenRParen -> cont 18#;+ TokenPKVersion -> cont 19#;+ TokenSigVersion -> cont 20#;+ TokenSigType -> cont 21#;+ TokenPKAlgo -> cont 22#;+ TokenSigPKAlgo -> cont 23#;+ TokenHashAlgo -> cont 24#;+ TokenRSA -> cont 25#;+ TokenDSA -> cont 26#;+ TokenElgamal -> cont 27#;+ TokenECDSA -> cont 28#;+ TokenECDH -> cont 29#;+ TokenDH -> cont 30#;+ TokenBinary -> cont 31#;+ TokenCanonicalText -> cont 32#;+ TokenStandalone -> cont 33#;+ TokenGenericCert -> cont 34#;+ TokenPersonaCert -> cont 35#;+ TokenCasualCert -> cont 36#;+ TokenPositiveCert -> cont 37#;+ TokenSubkeyBindingSig -> cont 38#;+ TokenPrimaryKeyBindingSig -> cont 39#;+ TokenSignatureDirectlyOnAKey -> cont 40#;+ TokenKeyRevocationSig -> cont 41#;+ TokenSubkeyRevocationSig -> cont 42#;+ TokenCertRevocationSig -> cont 43#;+ TokenTimestampSig -> cont 44#;+ TokenMD5 -> cont 45#;+ TokenSHA1 -> cont 46#;+ TokenRIPEMD160 -> cont 47#;+ TokenSHA256 -> cont 48#;+ TokenSHA384 -> cont 49#;+ TokenSHA512 -> cont 50#;+ TokenSHA224 -> cont 51#;+ TokenKeysize -> cont 52#;+ TokenTimestamp -> cont 53#;+ TokenFingerprint -> cont 54#;+ TokenKeyID -> cont 55#;+ TokenSigCreationTime -> cont 56#;+ TokenFpr happy_dollar_dollar -> cont 57#;+ TokenLongID happy_dollar_dollar -> cont 58#;+ TokenLength -> cont 59#;+ TokenStr happy_dollar_dollar -> cont 60#;+ TokenUids -> cont 61#;+ _ -> happyError' (tk, [])+ })++happyError_ explist 62# tk = happyError' (tk, explist)+happyError_ explist _ tk = happyError' (tk, explist)++happyThen :: () => Alex a -> (a -> Alex b) -> Alex b+happyThen = (>>=)+happyReturn :: () => a -> Alex a+happyReturn = (return)+#if __GLASGOW_HASKELL__ >= 710+happyParse :: () => Happy_GHC_Exts.Int# -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)++happyNewToken :: () => Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)++happyDoAction :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)++happyReduceArr :: () => Happy_Data_Array.Array Int (Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) -> Alex (HappyAbsSyn _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _))++#endif+happyThen1 :: () => Alex a -> (a -> Alex b) -> Alex b+happyThen1 = happyThen+happyReturn1 :: () => a -> Alex a+happyReturn1 = happyReturn+happyError' :: () => ((Token), [String]) -> Alex a+happyError' tk = (\(tokens, _) -> happyError tokens) tk+parseTK = happySomeParser where+ happySomeParser = happyThen (happyParse 0#) (\x -> happyReturn (let {x' = happyOut5 x} in x'))++parseP = happySomeParser where+ happySomeParser = happyThen (happyParse 1#) (\x -> happyReturn (let {x' = happyOut14 x} in x'))++happySeq = happyDontSeq+++lexwrap :: (Token -> Alex a) -> Alex a+lexwrap cont = do+ t <- alexMonadScan'+ cont t++alexMonadScan' = do+ inp <- alexGetInput+ sc <- alexGetStartCode+ case alexScan inp sc of+ AlexEOF -> alexEOF+ AlexError (pos, _, _, _) -> alexError (show pos)+ AlexSkip inp' len -> do+ alexSetInput inp'+ alexMonadScan'+ AlexToken inp' len action -> do+ alexSetInput inp'+ action (ignorePendingBytes inp) len++getPosn :: Alex (Int,Int)+getPosn = do+ (AlexPn _ l c,_,_,_) <- alexGetInput+ return (l,c)++happyError :: Token -> Alex a+happyError t = do+ (l,c) <- getPosn+ error (show l ++ ":" ++ show c ++ ": Parse error on Token: " ++ show t ++ "\n")++parseTKExp :: String -> Either String (Reader TK Bool)+parseTKExp s = runAlex s parseTK++parsePExp :: String -> Either String (Reader Pkt Bool)+parsePExp s = runAlex s parseP+{-# LINE 1 "templates/GenericTemplate.hs" #-}+-- $Id: GenericTemplate.hs,v 1.26 2005/01/14 14:47:22 simonmar Exp $++++++++++++++-- Do not remove this comment. Required to fix CPP parsing when using GCC and a clang-compiled alex.+#if __GLASGOW_HASKELL__ > 706+#define LT(n,m) ((Happy_GHC_Exts.tagToEnum# (n Happy_GHC_Exts.<# m)) :: Bool)+#define GTE(n,m) ((Happy_GHC_Exts.tagToEnum# (n Happy_GHC_Exts.>=# m)) :: Bool)+#define EQ(n,m) ((Happy_GHC_Exts.tagToEnum# (n Happy_GHC_Exts.==# m)) :: Bool)+#else+#define LT(n,m) (n Happy_GHC_Exts.<# m)+#define GTE(n,m) (n Happy_GHC_Exts.>=# m)+#define EQ(n,m) (n Happy_GHC_Exts.==# m)+#endif++++++++++++++++++++data Happy_IntList = HappyCons Happy_GHC_Exts.Int# Happy_IntList+++++++++++++++++++++++++++++++++++++++++infixr 9 `HappyStk`+data HappyStk a = HappyStk a (HappyStk a)++-----------------------------------------------------------------------------+-- starting the parse++happyParse start_state = happyNewToken start_state notHappyAtAll notHappyAtAll++-----------------------------------------------------------------------------+-- Accepting the parse++-- If the current token is ERROR_TOK, it means we've just accepted a partial+-- parse (a %partial parser). We must ignore the saved token on the top of+-- the stack in this case.+happyAccept 0# tk st sts (_ `HappyStk` ans `HappyStk` _) =+ happyReturn1 ans+happyAccept j tk st sts (HappyStk ans _) = + (happyTcHack j (happyTcHack st)) (happyReturn1 ans)++-----------------------------------------------------------------------------+-- Arrays only: do the next action++++happyDoAction i tk st+ = {- nothing -}+ case action of+ 0# -> {- nothing -}+ happyFail (happyExpListPerState ((Happy_GHC_Exts.I# (st)) :: Int)) i tk st+ -1# -> {- nothing -}+ happyAccept i tk st+ n | LT(n,(0# :: Happy_GHC_Exts.Int#)) -> {- nothing -}+ (happyReduceArr Happy_Data_Array.! rule) i tk st+ where rule = (Happy_GHC_Exts.I# ((Happy_GHC_Exts.negateInt# ((n Happy_GHC_Exts.+# (1# :: Happy_GHC_Exts.Int#))))))+ n -> {- nothing -}+ happyShift new_state i tk st+ where new_state = (n Happy_GHC_Exts.-# (1# :: Happy_GHC_Exts.Int#))+ where off = happyAdjustOffset (indexShortOffAddr happyActOffsets st)+ off_i = (off Happy_GHC_Exts.+# i)+ check = if GTE(off_i,(0# :: Happy_GHC_Exts.Int#))+ then EQ(indexShortOffAddr happyCheck off_i, i)+ else False+ action+ | check = indexShortOffAddr happyTable off_i+ | otherwise = indexShortOffAddr happyDefActions st+++++indexShortOffAddr (HappyA# arr) off =+ Happy_GHC_Exts.narrow16Int# i+ where+ i = Happy_GHC_Exts.word2Int# (Happy_GHC_Exts.or# (Happy_GHC_Exts.uncheckedShiftL# high 8#) low)+ high = Happy_GHC_Exts.int2Word# (Happy_GHC_Exts.ord# (Happy_GHC_Exts.indexCharOffAddr# arr (off' Happy_GHC_Exts.+# 1#)))+ low = Happy_GHC_Exts.int2Word# (Happy_GHC_Exts.ord# (Happy_GHC_Exts.indexCharOffAddr# arr off'))+ off' = off Happy_GHC_Exts.*# 2#+++++{-# INLINE happyLt #-}+happyLt x y = LT(x,y)+++readArrayBit arr bit =+ Bits.testBit (Happy_GHC_Exts.I# (indexShortOffAddr arr ((unbox_int bit) `Happy_GHC_Exts.iShiftRA#` 4#))) (bit `mod` 16)+ where unbox_int (Happy_GHC_Exts.I# x) = x+++++++data HappyAddr = HappyA# Happy_GHC_Exts.Addr#+++-----------------------------------------------------------------------------+-- HappyState data type (not arrays)++++++++++++++-----------------------------------------------------------------------------+-- Shifting a token++happyShift new_state 0# tk st sts stk@(x `HappyStk` _) =+ let i = (case Happy_GHC_Exts.unsafeCoerce# x of { (Happy_GHC_Exts.I# (i)) -> i }) in+-- trace "shifting the error token" $+ happyDoAction i tk new_state (HappyCons (st) (sts)) (stk)++happyShift new_state i tk st sts stk =+ happyNewToken new_state (HappyCons (st) (sts)) ((happyInTok (tk))`HappyStk`stk)++-- happyReduce is specialised for the common cases.++happySpecReduce_0 i fn 0# tk st sts stk+ = happyFail [] 0# tk st sts stk+happySpecReduce_0 nt fn j tk st@((action)) sts stk+ = happyGoto nt j tk st (HappyCons (st) (sts)) (fn `HappyStk` stk)++happySpecReduce_1 i fn 0# tk st sts stk+ = happyFail [] 0# tk st sts stk+happySpecReduce_1 nt fn j tk _ sts@((HappyCons (st@(action)) (_))) (v1`HappyStk`stk')+ = let r = fn v1 in+ happySeq r (happyGoto nt j tk st sts (r `HappyStk` stk'))++happySpecReduce_2 i fn 0# tk st sts stk+ = happyFail [] 0# tk st sts stk+happySpecReduce_2 nt fn j tk _ (HappyCons (_) (sts@((HappyCons (st@(action)) (_))))) (v1`HappyStk`v2`HappyStk`stk')+ = let r = fn v1 v2 in+ happySeq r (happyGoto nt j tk st sts (r `HappyStk` stk'))++happySpecReduce_3 i fn 0# tk st sts stk+ = happyFail [] 0# tk st sts stk+happySpecReduce_3 nt fn j tk _ (HappyCons (_) ((HappyCons (_) (sts@((HappyCons (st@(action)) (_))))))) (v1`HappyStk`v2`HappyStk`v3`HappyStk`stk')+ = let r = fn v1 v2 v3 in+ happySeq r (happyGoto nt j tk st sts (r `HappyStk` stk'))++happyReduce k i fn 0# tk st sts stk+ = happyFail [] 0# tk st sts stk+happyReduce k nt fn j tk st sts stk+ = case happyDrop (k Happy_GHC_Exts.-# (1# :: Happy_GHC_Exts.Int#)) sts of+ sts1@((HappyCons (st1@(action)) (_))) ->+ let r = fn stk in -- it doesn't hurt to always seq here...+ happyDoSeq r (happyGoto nt j tk st1 sts1 r)++happyMonadReduce k nt fn 0# tk st sts stk+ = happyFail [] 0# tk st sts stk+happyMonadReduce k nt fn j tk st sts stk =+ case happyDrop k (HappyCons (st) (sts)) of+ sts1@((HappyCons (st1@(action)) (_))) ->+ let drop_stk = happyDropStk k stk in+ happyThen1 (fn stk tk) (\r -> happyGoto nt j tk st1 sts1 (r `HappyStk` drop_stk))++happyMonad2Reduce k nt fn 0# tk st sts stk+ = happyFail [] 0# tk st sts stk+happyMonad2Reduce k nt fn j tk st sts stk =+ case happyDrop k (HappyCons (st) (sts)) of+ sts1@((HappyCons (st1@(action)) (_))) ->+ let drop_stk = happyDropStk k stk++ off = happyAdjustOffset (indexShortOffAddr happyGotoOffsets st1)+ off_i = (off Happy_GHC_Exts.+# nt)+ new_state = indexShortOffAddr happyTable off_i+++++ in+ happyThen1 (fn stk tk) (\r -> happyNewToken new_state sts1 (r `HappyStk` drop_stk))++happyDrop 0# l = l+happyDrop n (HappyCons (_) (t)) = happyDrop (n Happy_GHC_Exts.-# (1# :: Happy_GHC_Exts.Int#)) t++happyDropStk 0# l = l+happyDropStk n (x `HappyStk` xs) = happyDropStk (n Happy_GHC_Exts.-# (1#::Happy_GHC_Exts.Int#)) xs++-----------------------------------------------------------------------------+-- Moving to a new state after a reduction+++happyGoto nt j tk st = + {- nothing -}+ happyDoAction j tk new_state+ where off = happyAdjustOffset (indexShortOffAddr happyGotoOffsets st)+ off_i = (off Happy_GHC_Exts.+# nt)+ new_state = indexShortOffAddr happyTable off_i+++++-----------------------------------------------------------------------------+-- Error recovery (ERROR_TOK is the error token)++-- parse error if we are in recovery and we fail again+happyFail explist 0# tk old_st _ stk@(x `HappyStk` _) =+ let i = (case Happy_GHC_Exts.unsafeCoerce# x of { (Happy_GHC_Exts.I# (i)) -> i }) in+-- trace "failing" $ + happyError_ explist i tk++{- We don't need state discarding for our restricted implementation of+ "error". In fact, it can cause some bogus parses, so I've disabled it+ for now --SDM++-- discard a state+happyFail ERROR_TOK tk old_st CONS(HAPPYSTATE(action),sts) + (saved_tok `HappyStk` _ `HappyStk` stk) =+-- trace ("discarding state, depth " ++ show (length stk)) $+ DO_ACTION(action,ERROR_TOK,tk,sts,(saved_tok`HappyStk`stk))+-}++-- Enter error recovery: generate an error token,+-- save the old token and carry on.+happyFail explist i tk (action) sts stk =+-- trace "entering error recovery" $+ happyDoAction 0# tk action sts ((Happy_GHC_Exts.unsafeCoerce# (Happy_GHC_Exts.I# (i))) `HappyStk` stk)++-- Internal happy errors:++notHappyAtAll :: a+notHappyAtAll = error "Internal Happy error\n"++-----------------------------------------------------------------------------+-- Hack to get the typechecker to accept our action functions+++happyTcHack :: Happy_GHC_Exts.Int# -> a -> a+happyTcHack x y = y+{-# INLINE happyTcHack #-}+++-----------------------------------------------------------------------------+-- Seq-ing. If the --strict flag is given, then Happy emits +-- happySeq = happyDoSeq+-- otherwise it emits+-- happySeq = happyDontSeq++happyDoSeq, happyDontSeq :: a -> b -> b+happyDoSeq a b = a `seq` b+happyDontSeq a b = b++-----------------------------------------------------------------------------+-- Don't inline any functions from the template. GHC has a nasty habit+-- of deciding to inline happyGoto everywhere, which increases the size of+-- the generated parser quite a bit.+++{-# NOINLINE happyDoAction #-}+{-# NOINLINE happyTable #-}+{-# NOINLINE happyCheck #-}+{-# NOINLINE happyActOffsets #-}+{-# NOINLINE happyGotoOffsets #-}+{-# NOINLINE happyDefActions #-}++{-# NOINLINE happyShift #-}+{-# NOINLINE happySpecReduce_0 #-}+{-# NOINLINE happySpecReduce_1 #-}+{-# NOINLINE happySpecReduce_2 #-}+{-# NOINLINE happySpecReduce_3 #-}+{-# NOINLINE happyReduce #-}+{-# NOINLINE happyMonadReduce #-}+{-# NOINLINE happyGoto #-}+{-# NOINLINE happyFail #-}++-- end of Happy Template.
hkt.hs view
@@ -1,5 +1,5 @@ -- hkt.hs: hOpenPGP key tool--- Copyright © 2013-2019 Clint Adams+-- Copyright © 2013-2020 Clint Adams -- -- vim: softtabstop=4:shiftwidth=4:expandtab --@@ -15,48 +15,54 @@ -- -- You should have received a copy of the GNU Affero General Public License -- along with this program. If not, see <http://www.gnu.org/licenses/>.- {-# LANGUAGE DeriveGeneric #-} -import HOpenPGP.Tools.Common (banner, versioner, warranty, keyMatchesFingerprint, keyMatchesEightOctetKeyId, keyMatchesUIDSubString)-import HOpenPGP.Tools.Parser (parseTKExp)-import Codec.Encryption.OpenPGP.Fingerprint (fingerprint, eightOctetKeyID)-import Codec.Encryption.OpenPGP.KeyInfo (pubkeySize, pkalgoAbbrev)-import Codec.Encryption.OpenPGP.KeySelection (parseEightOctetKeyId, parseFingerprint)+import Codec.Encryption.OpenPGP.Fingerprint (eightOctetKeyID, fingerprint)+import Codec.Encryption.OpenPGP.KeyInfo (pkalgoAbbrev, pubkeySize)+import Codec.Encryption.OpenPGP.KeySelection+ ( parseEightOctetKeyId+ , parseFingerprint+ ) import Codec.Encryption.OpenPGP.Serialize ()-import Codec.Encryption.OpenPGP.Signatures (verifyTKWith, verifySigWith, verifyAgainstKeyring)+import Codec.Encryption.OpenPGP.Signatures+ ( verifyAgainstKeyring+ , verifySigWith+ , verifyTKWith+ ) import Codec.Encryption.OpenPGP.Types-import Control.Applicative (optional, (<|>))+import Control.Applicative ((<|>), optional) import Control.Arrow ((&&&))-import Control.Lens ((^.), _1, _2, (^..))+import Control.Lens ((^.), (^..), _1, _2) import Control.Monad.Trans.Resource (MonadResource, MonadThrow) import qualified Data.Aeson as A import Data.Binary (get, put) import Data.Binary.Put (runPut) import qualified Data.ByteString as B import qualified Data.ByteString.Lazy as BL-import Data.Conduit ((.|), ConduitM, runConduitRes)+import Data.Conduit (ConduitM, (.|), runConduitRes) import qualified Data.Conduit.Binary as CB import qualified Data.Conduit.List as CL-import Data.Conduit.OpenPGP.Filter (conduitTKFilter, FilterPredicates(RTKFilterPredicate))+import Data.Conduit.OpenPGP.Filter+ ( FilterPredicates(RTKFilterPredicate)+ , conduitTKFilter+ ) import Data.Conduit.OpenPGP.Keyring (conduitToTKsDropping, sinkKeyringMap) import Data.Conduit.Serialization.Binary (conduitGet) import Data.Data.Lens (biplate) import Data.Either (rights)-import qualified Data.IxSet.Typed as IxSet-import Data.Graph.Inductive.Graph (Graph(mkGraph), emap, Path, prettyPrint)+import Data.Graph.Inductive.Graph (Graph(mkGraph), Path, emap, prettyPrint) import Data.Graph.Inductive.PatriciaTree (Gr) import Data.Graph.Inductive.Query.SP (sp)-import Data.GraphViz (graphToDot, nonClusteredParams, GraphvizParams(..))+import Data.GraphViz (GraphvizParams(..), graphToDot, nonClusteredParams) import Data.GraphViz.Attributes (toLabel) import Data.GraphViz.Types (printDotGraph) import Data.HashMap.Lazy (HashMap) import qualified Data.HashMap.Lazy as HashMap+import qualified Data.IxSet.Typed as IxSet import Data.List (nub, sort) import Data.Map (Map) import qualified Data.Map as Map-import Data.Maybe (fromMaybe, mapMaybe, listToMaybe)-import Data.Monoid ((<>))+import Data.Maybe (fromMaybe, listToMaybe, mapMaybe) import Data.Text (Text) import qualified Data.Text as T import qualified Data.Text.Lazy.IO as TLIO@@ -64,307 +70,475 @@ import Data.Tuple (swap) import qualified Data.Yaml as Y import GHC.Generics+import HOpenPGP.Tools.Common+ ( banner+ , keyMatchesEightOctetKeyId+ , keyMatchesFingerprint+ , keyMatchesUIDSubString+ , versioner+ , warranty+ )+import HOpenPGP.Tools.Parser (parseTKExp) import System.Directory (getHomeDirectory) -import Options.Applicative.Builder (argument, auto, command, footerDoc, headerDoc, help, helpDoc, info, long, metavar, option, prefs, progDesc, showDefault, showHelpOnError, str, strOption, switch, value)+import Options.Applicative.Builder+ ( argument+ , auto+ , command+ , footerDoc+ , headerDoc+ , help+ , helpDoc+ , info+ , long+ , metavar+ , option+ , prefs+ , progDesc+ , showDefault+ , showHelpOnError+ , str+ , strOption+ , switch+ , value+ ) import Options.Applicative.Extra (customExecParser, helper, hsubparser) import Options.Applicative.Types (Parser) -import System.IO (Handle, hFlush, stderr, hSetBuffering, BufferMode(..))-import Data.Text.Prettyprint.Doc ((<+>), fillSep, hardline, list, pretty)-import Data.Text.Prettyprint.Doc.Render.Text (putDoc, hPutDoc) import Data.Text.Prettyprint.Convert.AnsiWlPprint (toAnsiWlPprint)+import Data.Text.Prettyprint.Doc ((<+>), fillSep, hardline, list, pretty)+import Data.Text.Prettyprint.Doc.Render.Text (hPutDoc, putDoc)+import System.IO (BufferMode(..), Handle, hFlush, hSetBuffering, stderr) -grabMatchingKeysConduit :: (MonadResource m, MonadThrow m) => FilePath -> Bool -> Text -> ConduitM () TK m ()-grabMatchingKeysConduit fp filt srch = CB.sourceFile fp .| conduitGet get .| conduitToTKsDropping .| (if filt then conduitTKFilter ufp else CL.filter matchAny)- where- matchAny tk = either (const False) id $ fmap (keyMatchesFingerprint True tk) efp <|> fmap (keyMatchesEightOctetKeyId True tk . Right) eeok <|> return (keyMatchesUIDSubString srch tk)- efp = parseFingerprint srch- eeok = parseEightOctetKeyId srch- ufp = RTKFilterPredicate (parseE srch)- parseE = either (error . ("filter parse error: " ++)) id . parseTKExp . T.unpack -- this should be more specialized+grabMatchingKeysConduit ::+ (MonadResource m, MonadThrow m)+ => FilePath+ -> Bool+ -> Text+ -> ConduitM () TK m ()+grabMatchingKeysConduit fp filt srch =+ CB.sourceFile fp .| conduitGet get .| conduitToTKsDropping .|+ (if filt+ then conduitTKFilter ufp+ else CL.filter matchAny)+ where+ matchAny tk =+ either (const False) id $ fmap (keyMatchesFingerprint True tk) efp <|>+ fmap (keyMatchesEightOctetKeyId True tk . Right) eeok <|>+ return (keyMatchesUIDSubString srch tk)+ efp = parseFingerprint srch+ eeok = parseEightOctetKeyId srch+ ufp = RTKFilterPredicate (parseE srch)+ parseE =+ either (error . ("filter parse error: " ++)) id . parseTKExp . T.unpack -- this should be more specialized grabMatchingKeys :: FilePath -> Bool -> Text -> IO [TK]-grabMatchingKeys fp filt srch = runConduitRes $ grabMatchingKeysConduit fp filt srch .| CL.consume+grabMatchingKeys fp filt srch =+ runConduitRes $ grabMatchingKeysConduit fp filt srch .| CL.consume grabMatchingKeysKeyring :: FilePath -> Bool -> Text -> IO Keyring-grabMatchingKeysKeyring fp filt srch = runConduitRes $ grabMatchingKeysConduit fp filt srch .| sinkKeyringMap+grabMatchingKeysKeyring fp filt srch =+ runConduitRes $ grabMatchingKeysConduit fp filt srch .| sinkKeyringMap -data Key = Key {- keysize :: Maybe Int- , keyalgo :: String- , keyalgoabbreviation :: String- , fpr :: String-} deriving Generic+data Key =+ Key+ { keysize :: Maybe Int+ , keyalgo :: String+ , keyalgoabbreviation :: String+ , fpr :: String+ }+ deriving (Generic) -data TKey = TKey {- publickey :: Key- , uids :: [Text]- , subkeys :: [Key]-} deriving Generic+data TKey =+ TKey+ { publickey :: Key+ , uids :: [Text]+ , subkeys :: [Key]+ }+ deriving (Generic) instance A.ToJSON Key+ instance A.ToJSON TKey tkToTKey :: TK -> TKey-tkToTKey tk = TKey {- publickey = mkey (tk^.tkKey._1)- , uids = tk^.tkUIDs^..traverse._1- , subkeys = map (mkey . \(PublicSubkeyPkt x,_) -> x) (tk^.tkSubs)-}- where- mkey = Key <$> either (const Nothing) Just . pubkeySize . _pubkey- <*> show . _pkalgo- <*> pkalgoAbbrev . _pkalgo- <*> show . pretty . fingerprint+tkToTKey tk =+ TKey+ { publickey = mkey (tk ^. tkKey . _1)+ , uids = tk ^. tkUIDs ^.. traverse . _1+ , subkeys = map (mkey . \(PublicSubkeyPkt x, _) -> x) (tk ^. tkSubs)+ }+ where+ mkey =+ Key <$> either (const Nothing) Just . pubkeySize . _pubkey <*> show .+ _pkalgo <*>+ pkalgoAbbrev .+ _pkalgo <*>+ show .+ pretty .+ fingerprint showTKey :: TKey -> IO ()-showTKey key = putDoc $- pretty "pub " <+> sizeabbrevkeyid (publickey key) <> hardline <>- mconcat (map (\x -> pretty "uid " <+> pretty (T.unpack x) <> hardline) (uids key)) <>- mconcat (map (\x -> pretty "sub " <+> sizeabbrevkeyid x <> hardline) (subkeys key)) <>- hardline- where- sizeabbrevkeyid k = pretty (maybe "unknown" show (keysize k)) <> pretty (keyalgoabbreviation k) <> pretty "/" <> pretty (fpr k)+showTKey key =+ putDoc $ pretty "pub " <+> sizeabbrevkeyid (publickey key) <> hardline <>+ mconcat+ (map+ (\x ->+ pretty "uid " <+> pretty (T.unpack x) <>+ hardline)+ (uids key)) <>+ mconcat+ (map (\x -> pretty "sub " <+> sizeabbrevkeyid x <> hardline) (subkeys key)) <>+ hardline+ where+ sizeabbrevkeyid k =+ pretty (maybe "unknown" show (keysize k)) <>+ pretty (keyalgoabbreviation k) <>+ pretty "/" <>+ pretty (fpr k) -data Options = Options {- keyring :: String- , graphOutputFormat :: GraphOutputFormat- , pathsOutputFormat :: PathsOutputFormat- , targetIsFilter :: Bool- , target1 :: String- , target2 :: String- , target3 :: String-}+data Options =+ Options+ { keyring :: String+ , graphOutputFormat :: GraphOutputFormat+ , pathsOutputFormat :: PathsOutputFormat+ , targetIsFilter :: Bool+ , target1 :: String+ , target2 :: String+ , target3 :: String+ } -data Command = CmdList Options | CmdExportPubkeys Options | CmdGraph Options | CmdFindPaths Options+data Command+ = CmdList Options+ | CmdExportPubkeys Options+ | CmdGraph Options+ | CmdFindPaths Options -data GraphOutputFormat = GraphViz | LossyPretty- deriving (Bounded, Enum, Eq, Read, Show)+data GraphOutputFormat+ = GraphViz+ | LossyPretty+ deriving (Bounded, Enum, Eq, Read, Show) -data PathsOutputFormat = Unstructured | JSON | YAML- deriving (Eq, Read, Show)+data PathsOutputFormat+ = Unstructured+ | JSON+ | YAML+ deriving (Eq, Read, Show) listO :: String -> Parser Options-listO homedir = Options- <$> strOption- ( long "keyring"- <> metavar "FILE"- <> help "file containing keyring" )- <*> pure GraphViz -- unused- <*> option auto- ( long "output-format"- <> metavar "FORMAT"- <> value Unstructured- <> showDefault- <> help "output format" )- <*> switch ( long "filter" <> help "treat target as filter" )- <*> (fromMaybe "" <$> optional (argument str ( metavar "TARGET" <> targetHelp )))- <*> pure ""- <*> pure ""- where- targetHelp = helpDoc . Just . toAnsiWlPprint $ pretty "target (which keys to output)*"+listO homedir =+ Options <$>+ strOption (long "keyring" <> metavar "FILE" <> help "file containing keyring") <*>+ pure GraphViz -- unused+ <*>+ option+ auto+ (long "output-format" <> metavar "FORMAT" <> value Unstructured <>+ showDefault <>+ help "output format") <*>+ switch (long "filter" <> help "treat target as filter") <*>+ (fromMaybe "" <$> optional (argument str (metavar "TARGET" <> targetHelp))) <*>+ pure "" <*>+ pure ""+ where+ targetHelp =+ helpDoc . Just . toAnsiWlPprint $ pretty "target (which keys to output)*" graphO :: String -> Parser Options-graphO homedir = Options- <$> strOption- ( long "keyring"- <> metavar "FILE"- <> help "file containing keyring" )- <*> option auto- ( long "output-format"- <> metavar "FORMAT"- <> value GraphViz- <> showDefault- <> ofhelp )- <*> pure Unstructured -- unused- <*> switch ( long "filter" <> help "treat target as filter" )- <*> (fromMaybe "" <$> optional (argument str ( metavar "TARGET" <> targetHelp )))- <*> pure ""- <*> pure ""- where- ofhelp = helpDoc . Just . toAnsiWlPprint $ pretty "output format" <> hardline <> list (map (pretty . show) ofchoices)- ofchoices = [minBound..maxBound] :: [GraphOutputFormat]- targetHelp = helpDoc . Just . toAnsiWlPprint $ pretty "target (which keys to graph)*"+graphO homedir =+ Options <$>+ strOption (long "keyring" <> metavar "FILE" <> help "file containing keyring") <*>+ option+ auto+ (long "output-format" <> metavar "FORMAT" <> value GraphViz <> showDefault <>+ ofhelp) <*>+ pure Unstructured -- unused+ <*>+ switch (long "filter" <> help "treat target as filter") <*>+ (fromMaybe "" <$> optional (argument str (metavar "TARGET" <> targetHelp))) <*>+ pure "" <*>+ pure ""+ where+ ofhelp =+ helpDoc . Just . toAnsiWlPprint $ pretty "output format" <> hardline <>+ list (map (pretty . show) ofchoices)+ ofchoices = [minBound .. maxBound] :: [GraphOutputFormat]+ targetHelp =+ helpDoc . Just . toAnsiWlPprint $ pretty "target (which keys to graph)*" findPathsO :: String -> Parser Options-findPathsO homedir = Options- <$> strOption- ( long "keyring"- <> metavar "FILE"- <> help "file containing keyring" )- <*> pure GraphViz -- unused- <*> option auto- ( long "output-format"- <> metavar "FORMAT"- <> value Unstructured- <> showDefault- <> help "output format" )- <*> switch ( long "filter" <> help "treat targets as filter" )- <*> argument str ( metavar "TARGET-SET" <> targetHelp )- <*> argument str ( metavar "FROM-KEYS" <> fromHelp )- <*> argument str ( metavar "TO-KEYS" <> toHelp )- where- targetHelp = helpDoc . Just . toAnsiWlPprint $ pretty "target (which keys to use in pathfinding)*"- fromHelp = helpDoc . Just . toAnsiWlPprint $ pretty "from (which keys to use for the source of paths)*"- toHelp = helpDoc . Just . toAnsiWlPprint $ pretty "to (which keys to use for the destinations of paths)*"+findPathsO homedir =+ Options <$>+ strOption (long "keyring" <> metavar "FILE" <> help "file containing keyring") <*>+ pure GraphViz -- unused+ <*>+ option+ auto+ (long "output-format" <> metavar "FORMAT" <> value Unstructured <>+ showDefault <>+ help "output format") <*>+ switch (long "filter" <> help "treat targets as filter") <*>+ argument str (metavar "TARGET-SET" <> targetHelp) <*>+ argument str (metavar "FROM-KEYS" <> fromHelp) <*>+ argument str (metavar "TO-KEYS" <> toHelp)+ where+ targetHelp =+ helpDoc . Just . toAnsiWlPprint $+ pretty "target (which keys to use in pathfinding)*"+ fromHelp =+ helpDoc . Just . toAnsiWlPprint $+ pretty "from (which keys to use for the source of paths)*"+ toHelp =+ helpDoc . Just . toAnsiWlPprint $+ pretty "to (which keys to use for the destinations of paths)*" dispatch :: Command -> IO () dispatch (CmdList o) = banner' stderr >> hFlush stderr >> doList o-dispatch (CmdExportPubkeys o) = banner' stderr >> hFlush stderr >> doExportPubkeys o+dispatch (CmdExportPubkeys o) =+ banner' stderr >> hFlush stderr >> doExportPubkeys o dispatch (CmdGraph o) = banner' stderr >> hFlush stderr >> doGraph o dispatch (CmdFindPaths o) = banner' stderr >> hFlush stderr >> doFindPaths o main :: IO () main = do- hSetBuffering stderr LineBuffering- homedir <- getHomeDirectory- customExecParser (prefs showHelpOnError)- (info (helper <*> versioner "hkt" <*> cmd homedir)- (headerDoc (Just (toAnsiWlPprint (banner "hkt")))- <> progDesc "hOpenPGP Keyring Tool"- <> footerDoc (Just (toAnsiWlPprint (warranty "hkt"))))) >>= dispatch+ hSetBuffering stderr LineBuffering+ homedir <- getHomeDirectory+ customExecParser+ (prefs showHelpOnError)+ (info+ (helper <*> versioner "hkt" <*> cmd homedir)+ (headerDoc (Just (toAnsiWlPprint (banner "hkt"))) <>+ progDesc "hOpenPGP Keyring Tool" <>+ footerDoc (Just (toAnsiWlPprint (warranty "hkt"))))) >>=+ dispatch cmd :: String -> Parser Command-cmd homedir = hsubparser- ( command "export-pubkeys" (info ( CmdExportPubkeys <$> listO homedir) ( progDesc "export matching keys to stdout" <> footerDoc (Just foot) ))- <> command "findpaths" (info ( CmdFindPaths <$> findPathsO homedir) ( progDesc "find short paths between keys" <> footerDoc (Just foot) ))- <> command "graph" (info ( CmdGraph <$> graphO homedir) ( progDesc "graph certifications" <> footerDoc (Just foot) ))- <> command "list" (info ( CmdList <$> listO homedir) ( progDesc "list matching keys" <> footerDoc (Just foot) ))- )- where- foot = toAnsiWlPprint $ hardline <> fillSep [- pretty "*if --filter is not specified, this must be"- , pretty "a fingerprint,"- , pretty "an eight-octet key ID,"- , pretty "or a substring of a UID (including an empty string)"]- <> hardline- <> fillSep [pretty "if --filter is specified, it must be"- , pretty "something in filter syntax (see source)."- ]+cmd homedir =+ hsubparser+ (command+ "export-pubkeys"+ (info+ (CmdExportPubkeys <$> listO homedir)+ (progDesc "export matching keys to stdout" <> footerDoc (Just foot))) <>+ command+ "findpaths"+ (info+ (CmdFindPaths <$> findPathsO homedir)+ (progDesc "find short paths between keys" <> footerDoc (Just foot))) <>+ command+ "graph"+ (info+ (CmdGraph <$> graphO homedir)+ (progDesc "graph certifications" <> footerDoc (Just foot))) <>+ command+ "list"+ (info+ (CmdList <$> listO homedir)+ (progDesc "list matching keys" <> footerDoc (Just foot))))+ where+ foot =+ toAnsiWlPprint $ hardline <>+ fillSep+ [ pretty "*if --filter is not specified, this must be"+ , pretty "a fingerprint,"+ , pretty "an eight-octet key ID,"+ , pretty "or a substring of a UID (including an empty string)"+ ] <>+ hardline <>+ fillSep+ [ pretty "if --filter is specified, it must be"+ , pretty "something in filter syntax (see source)."+ ] banner' :: Handle -> IO () banner' h = hPutDoc h (banner "hkt" <> hardline <> warranty "hkt" <> hardline) doList :: Options -> IO () doList o = do- let ttarget1 = T.pack . target1- keys' <- grabMatchingKeys (keyring o) (targetIsFilter o) (ttarget1 o)- let keys = map tkToTKey keys'- case pathsOutputFormat o of- Unstructured -> mapM_ showTKey keys- JSON -> BL.putStr . A.encode $ keys- YAML -> B.putStr . Y.encode $ keys- putStrLn ""+ let ttarget1 = T.pack . target1+ keys' <- grabMatchingKeys (keyring o) (targetIsFilter o) (ttarget1 o)+ let keys = map tkToTKey keys'+ case pathsOutputFormat o of+ Unstructured -> mapM_ showTKey keys+ JSON -> BL.putStr . A.encode $ keys+ YAML -> B.putStr . Y.encode $ keys+ putStrLn "" doExportPubkeys :: Options -> IO () doExportPubkeys o = do- let ttarget1 = T.pack . target1- keys <- grabMatchingKeys (keyring o) (targetIsFilter o) (ttarget1 o)- case pathsOutputFormat o of- Unstructured -> mapM_ (BL.putStr . putTK') keys- JSON -> BL.putStr . A.encode $ keys- YAML -> B.putStr . Y.encode $ keys- where- putTK' key = runPut $ do- put (PublicKey (key^.tkKey._1))- mapM_ (put . Signature) (_tkRevs key)- mapM_ putUid' (_tkUIDs key)- mapM_ putUat' (_tkUAts key)- mapM_ putSub' (_tkSubs key)- putUid' (u, sps) = put (UserId u) >> mapM_ (put . Signature) sps- putUat' (us, sps) = put (UserAttribute us) >> mapM_ (put . Signature) sps- putSub' (p, sps) = put p >> mapM_ (put . Signature) sps+ let ttarget1 = T.pack . target1+ keys <- grabMatchingKeys (keyring o) (targetIsFilter o) (ttarget1 o)+ case pathsOutputFormat o of+ Unstructured -> mapM_ (BL.putStr . putTK') keys+ JSON -> BL.putStr . A.encode $ keys+ YAML -> B.putStr . Y.encode $ keys+ where+ putTK' key =+ runPut $ do+ put (PublicKey (key ^. tkKey . _1))+ mapM_ (put . Signature) (_tkRevs key)+ mapM_ putUid' (_tkUIDs key)+ mapM_ putUat' (_tkUAts key)+ mapM_ putSub' (_tkSubs key)+ putUid' (u, sps) = put (UserId u) >> mapM_ (put . Signature) sps+ putUat' (us, sps) = put (UserAttribute us) >> mapM_ (put . Signature) sps+ putSub' (p, sps) = put p >> mapM_ (put . Signature) sps doGraph :: Options -> IO () doGraph o = do- let ttarget1 = T.pack . target1- cpt <- getPOSIXTime- kr <- grabMatchingKeysKeyring (keyring o) (targetIsFilter o) (ttarget1 o)- let g = buildKeyGraph ((buildMaps &&& id) (rights (map (verifyTKWith (verifySigWith (verifyAgainstKeyring kr)) (Just (posixSecondsToUTCTime cpt))) (IxSet.toList kr))))- case graphOutputFormat o of- LossyPretty -> prettyPrint g- GraphViz -> TLIO.putStrLn . printDotGraph . graphToDot nonClusteredLabeledNodesParams $ g- where- nonClusteredLabeledNodesParams = nonClusteredParams { fmtNode = \(_,l) -> [toLabel $ show (pretty l)] }+ let ttarget1 = T.pack . target1+ cpt <- getPOSIXTime+ kr <- grabMatchingKeysKeyring (keyring o) (targetIsFilter o) (ttarget1 o)+ let g =+ buildKeyGraph+ ((buildMaps &&& id)+ (rights+ (map+ (verifyTKWith+ (verifySigWith (verifyAgainstKeyring kr))+ (Just (posixSecondsToUTCTime cpt)))+ (IxSet.toList kr))))+ case graphOutputFormat o of+ LossyPretty -> prettyPrint g+ GraphViz ->+ TLIO.putStrLn . printDotGraph . graphToDot nonClusteredLabeledNodesParams $+ g+ where+ nonClusteredLabeledNodesParams =+ nonClusteredParams {fmtNode = \(_, l) -> [toLabel $ show (pretty l)]} buildMaps :: [TK] -> (KeyMaps, Int)-buildMaps = foldr mapsInsertions (KeyMaps HashMap.empty HashMap.empty HashMap.empty, 0)+buildMaps =+ foldr mapsInsertions (KeyMaps HashMap.empty HashMap.empty HashMap.empty, 0) -- FIXME: this presumes no keyID collisions in the input-data KeyMaps = KeyMaps {- _k2f :: HashMap EightOctetKeyId TwentyOctetFingerprint- , _f2i :: HashMap TwentyOctetFingerprint Int- , _i2f :: HashMap Int TwentyOctetFingerprint-}+data KeyMaps =+ KeyMaps+ { _k2f :: HashMap EightOctetKeyId TwentyOctetFingerprint+ , _f2i :: HashMap TwentyOctetFingerprint Int+ , _i2f :: HashMap Int TwentyOctetFingerprint+ } mapsInsertions :: TK -> (KeyMaps, Int) -> (KeyMaps, Int) mapsInsertions tk (KeyMaps k2f f2i i2f, i) =- let fp = fingerprint (tk^.tkKey._1)- keyids = rights . map eightOctetKeyID $ (tk ^.. biplate :: [PKPayload])- i' = i + 1- k2f' = foldr (\k m -> HashMap.insert k fp m) k2f keyids- f2i' = HashMap.insert fp i' f2i- i2f' = HashMap.insert i' fp i2f in (KeyMaps k2f' f2i' i2f', i')+ let fp = fingerprint (tk ^. tkKey . _1)+ keyids = rights . map eightOctetKeyID $ (tk ^.. biplate :: [PKPayload])+ i' = i + 1+ k2f' = foldr (\k m -> HashMap.insert k fp m) k2f keyids+ f2i' = HashMap.insert fp i' f2i+ i2f' = HashMap.insert i' fp i2f+ in (KeyMaps k2f' f2i' i2f', i') -buildKeyGraph :: ((KeyMaps, Int), [TK]) -> Gr TwentyOctetFingerprint HashAlgorithm+buildKeyGraph ::+ ((KeyMaps, Int), [TK]) -> Gr TwentyOctetFingerprint HashAlgorithm buildKeyGraph ((KeyMaps k2f f2i _, _), ks) = mkGraph nodes edges- where- nodes = map swap . HashMap.toList $ f2i- edges = filter (not . samesies) . nub . sort . concatMap tkToEdges $ ks- tkToEdges tk = map (\(ha, i) -> (source i, target tk, ha)) (mapMaybe (fakejoin . (hashAlgo &&& sigissuer)) (sigs tk))- target tk = fromMaybe (error "Epic fail") (HashMap.lookup (fingerprint (tk^.tkKey._1)) f2i)- source i = fromMaybe (-1) (HashMap.lookup i k2f >>= flip HashMap.lookup f2i)- fakejoin (x, y) = fmap ((,) x) y- sigs tk = concat ((tk^..tkUIDs.traverse._2) ++ (tk^..tkUAts.traverse._2))- samesies (x,y,_) = x == y+ where+ nodes = map swap . HashMap.toList $ f2i+ edges = filter (not . samesies) . nub . sort . concatMap tkToEdges $ ks+ tkToEdges tk =+ map+ (\(ha, i) -> (source i, target tk, ha))+ (mapMaybe (fakejoin . (hashAlgo &&& sigissuer)) (sigs tk))+ target tk =+ fromMaybe+ (error "Epic fail")+ (HashMap.lookup (fingerprint (tk ^. tkKey . _1)) f2i)+ source i = fromMaybe (-1) (HashMap.lookup i k2f >>= flip HashMap.lookup f2i)+ fakejoin (x, y) = fmap ((,) x) y+ sigs tk =+ concat+ ((tk ^.. tkUIDs . traverse . _2) ++ (tk ^.. tkUAts . traverse . _2))+ samesies (x, y, _) = x == y -data PaF = PaF {- certPaths :: [Path]- , keyFingerprints :: Map String TwentyOctetFingerprint-} deriving Generic+data PaF =+ PaF+ { certPaths :: [Path]+ , keyFingerprints :: Map String TwentyOctetFingerprint+ }+ deriving (Generic) instance A.ToJSON PaF doFindPaths :: Options -> IO () doFindPaths o = do- let ttarget1 = T.pack . target1- ttarget2 = T.pack . target2- ttarget3 = T.pack . target3- cpt <- getPOSIXTime- kr <- grabMatchingKeysKeyring (keyring o) (targetIsFilter o) (ttarget1 o)+ let ttarget1 = T.pack . target1+ ttarget2 = T.pack . target2+ ttarget3 = T.pack . target3+ cpt <- getPOSIXTime+ kr <- grabMatchingKeysKeyring (keyring o) (targetIsFilter o) (ttarget1 o) -- FIXME: seriously clean this up- keys1 <- runConduitRes $ CL.sourceList (IxSet.toList kr) .| (if filt then conduitTKFilter (ufpt (ttarget2 o)) else CL.filter (matchAny (ttarget2 o))) .| CL.consume- keys2 <- runConduitRes $ CL.sourceList (IxSet.toList kr) .| (if filt then conduitTKFilter (ufpt (ttarget3 o)) else CL.filter (matchAny (ttarget3 o))) .| CL.consume- let ((KeyMaps k2f f2i i2f, i), ks) = (buildMaps &&& id) (rights (map (verifyTKWith (verifySigWith (verifyAgainstKeyring kr)) (Just (posixSecondsToUTCTime cpt))) (IxSet.toList kr)))- keygraph = buildKeyGraph ((KeyMaps k2f f2i i2f, i), ks)- keysToIs = mapMaybe (\x -> HashMap.lookup (fingerprint (x^.tkKey._1)) f2i)- froms = keysToIs keys1- tos = keysToIs keys2- combos = froms >>= \f -> tos >>= \t -> return (f,t)- paths = map (\(x,y) -> fromMaybe [] (sp x y (emap (const (1.0 :: Double)) keygraph))) combos- paf = PaF paths (Map.fromList (mapMaybe (\x -> HashMap.lookup x i2f >>= \y -> return (show x,y)) (nub (sort (concat paths)))))- case pathsOutputFormat o of- Unstructured -> do -- FIXME: do something about this- putStrLn . unlines $ map (show . ((,) =<< length)) paths- putStrLn . unlines $ map (\x -> maybe (show x) show $ HashMap.lookup x i2f >>= \y -> return (x, pretty y)) (nub (sort (concat paths)))- JSON -> BL.putStr . A.encode $ paf- YAML -> B.putStr . Y.encode $ paf- putStrLn ""- where- filt = targetIsFilter o- matchAny srch tk = either (const False) id $ fmap (keyMatchesFingerprint True tk) (parseFingerprint srch) <|> fmap (keyMatchesEightOctetKeyId True tk . Right) (parseEightOctetKeyId srch) <|> return (keyMatchesUIDSubString srch tk)- ufpt srch = RTKFilterPredicate (parseE srch)- parseE e = either (error . ("filter parse error: "++)) id (parseTKExp (T.unpack e)) -- this should be more specialized+ keys1 <-+ runConduitRes $ CL.sourceList (IxSet.toList kr) .|+ (if filt+ then conduitTKFilter (ufpt (ttarget2 o))+ else CL.filter (matchAny (ttarget2 o))) .|+ CL.consume+ keys2 <-+ runConduitRes $ CL.sourceList (IxSet.toList kr) .|+ (if filt+ then conduitTKFilter (ufpt (ttarget3 o))+ else CL.filter (matchAny (ttarget3 o))) .|+ CL.consume+ let ((KeyMaps k2f f2i i2f, i), ks) =+ (buildMaps &&& id)+ (rights+ (map+ (verifyTKWith+ (verifySigWith (verifyAgainstKeyring kr))+ (Just (posixSecondsToUTCTime cpt)))+ (IxSet.toList kr)))+ keygraph = buildKeyGraph ((KeyMaps k2f f2i i2f, i), ks)+ keysToIs =+ mapMaybe (\x -> HashMap.lookup (fingerprint (x ^. tkKey . _1)) f2i)+ froms = keysToIs keys1+ tos = keysToIs keys2+ combos = froms >>= \f -> tos >>= \t -> return (f, t)+ paths =+ map+ (\(x, y) ->+ fromMaybe [] (sp x y (emap (const (1.0 :: Double)) keygraph)))+ combos+ paf =+ PaF+ paths+ (Map.fromList+ (mapMaybe+ (\x -> HashMap.lookup x i2f >>= \y -> return (show x, y))+ (nub (sort (concat paths)))))+ case pathsOutputFormat o of+ Unstructured -- FIXME: do something about this+ -> do+ putStrLn . unlines $ map (show . ((,) =<< length)) paths+ putStrLn . unlines $+ map+ (\x ->+ maybe (show x) show $ HashMap.lookup x i2f >>= \y ->+ return (x, pretty y))+ (nub (sort (concat paths)))+ JSON -> BL.putStr . A.encode $ paf+ YAML -> B.putStr . Y.encode $ paf+ putStrLn ""+ where+ filt = targetIsFilter o+ matchAny srch tk =+ either (const False) id $+ fmap (keyMatchesFingerprint True tk) (parseFingerprint srch) <|>+ fmap+ (keyMatchesEightOctetKeyId True tk . Right)+ (parseEightOctetKeyId srch) <|>+ return (keyMatchesUIDSubString srch tk)+ ufpt srch = RTKFilterPredicate (parseE srch)+ parseE e =+ either (error . ("filter parse error: " ++)) id (parseTKExp (T.unpack e)) -- this should be more specialized -- FIXME: deduplicate the following code sigissuer :: SignaturePayload -> Maybe EightOctetKeyId getIssuer :: SigSubPacketPayload -> Maybe EightOctetKeyId hashAlgo :: SignaturePayload -> HashAlgorithm- sigissuer (SigVOther 2 _) = Nothing sigissuer SigV3 {} = Nothing-sigissuer (SigV4 _ _ _ ys xs _ _) = listToMaybe . mapMaybe (getIssuer . _sspPayload) $ (ys++xs) -- FIXME: what should this be if there are multiple matches?+sigissuer (SigV4 _ _ _ ys xs _ _) =+ listToMaybe . mapMaybe (getIssuer . _sspPayload) $ (ys ++ xs) -- FIXME: what should this be if there are multiple matches? sigissuer (SigVOther _ _) = error "We're in the future." -- FIXME getIssuer (Issuer i) = Just i
hokey.hs view
@@ -1,5 +1,5 @@ -- hokey.hs: hOpenPGP key tool--- Copyright © 2013-2019 Clint Adams+-- Copyright © 2013-2020 Clint Adams -- -- vim: softtabstop=4:shiftwidth=4:expandtab --@@ -15,363 +15,679 @@ -- -- You should have received a copy of the GNU Affero General Public License -- along with this program. If not, see <http://www.gnu.org/licenses/>.--{-# LANGUAGE CPP #-} {-# LANGUAGE DeriveFunctor #-} {-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE FlexibleInstances #-} -import HOpenPGP.Tools.Common (banner, versioner, warranty)-import HOpenPGP.Tools.HKP (fetchKeys, FetchValidationMethod(..), rearmorKeys)-import HOpenPGP.Tools.TKUtils (processTK) import Codec.Encryption.OpenPGP.Expirations (getKeyExpirationTimesFromSignature)-import Codec.Encryption.OpenPGP.Fingerprint (fingerprint, eightOctetKeyID)-import Codec.Encryption.OpenPGP.KeyInfo (pubkeySize, pkalgoAbbrev)+import Codec.Encryption.OpenPGP.Fingerprint (eightOctetKeyID, fingerprint)+import Codec.Encryption.OpenPGP.KeyInfo (pkalgoAbbrev, pubkeySize) import Codec.Encryption.OpenPGP.KeySelection (parseFingerprint)-import Codec.Encryption.OpenPGP.Ontology (isCertRevocationSig, isCT, isKUF, isPHA, isPKBindingSig, isSKBindingSig)+import Codec.Encryption.OpenPGP.Ontology+ ( isCT+ , isCertRevocationSig+ , isKUF+ , isPHA+ , isPKBindingSig+ , isSKBindingSig+ ) import Codec.Encryption.OpenPGP.Serialize () import Codec.Encryption.OpenPGP.Types import Control.Arrow ((***)) import Control.Error.Util (hush)-import Control.Lens ((^.), (&), _1, _2, mapped, over)+import Control.Lens ((&), (^.), _1, _2, mapped, over) import Control.Monad.Trans.Except (runExceptT) import Control.Monad.Trans.Writer.Lazy (execWriter, tell) import qualified Crypto.Hash.SHA3 as SHA3 import qualified Data.Aeson as A import Data.Binary (get, put) import qualified Data.ByteString as B+import qualified Data.ByteString.Base16 as Base16 import qualified Data.ByteString.Char8 as BC8 import qualified Data.ByteString.Lazy as BL-import qualified Data.ByteString.Base16 as Base16 import Data.Conduit ((.|), runConduitRes) import qualified Data.Conduit.Binary as CB-import Data.Conduit.Serialization.Binary (conduitGet, conduitPut) import qualified Data.Conduit.List as CL import Data.Conduit.OpenPGP.Keyring (conduitToTKsDropping)+import Data.Conduit.Serialization.Binary (conduitGet, conduitPut) import Data.Foldable (find)-import Data.List (elemIndex, findIndex, nub, sort, sortOn, intercalate)+import Data.List (elemIndex, findIndex, intercalate, nub, sort, sortOn) import qualified Data.Map as Map-import Data.Maybe (fromMaybe, mapMaybe, listToMaybe)-#if !MIN_VERSION_base(4,9,0)-import Data.Monoid ((<>))-#else-import Data.Semigroup ((<>), Semigroup)-#endif+import Data.Maybe (fromMaybe, listToMaybe, mapMaybe) import Data.Ord (Down(..))+import Data.Semigroup (Semigroup, (<>)) import qualified Data.Set as Set import Data.Text (Text) import qualified Data.Text as T-import Data.Time.Clock.POSIX (getPOSIXTime, posixSecondsToUTCTime, POSIXTime)+import Data.Time.Clock.POSIX (POSIXTime, getPOSIXTime, posixSecondsToUTCTime) import Data.Time.Format (formatTime) import qualified Data.Yaml as Y import GHC.Generics+import HOpenPGP.Tools.Common (banner, versioner, warranty)+import HOpenPGP.Tools.HKP (FetchValidationMethod(..), fetchKeys, rearmorKeys)+import HOpenPGP.Tools.TKUtils (processTK) -import Options.Applicative.Builder (argument, auto, command, eitherReader, footerDoc, headerDoc, help, helpDoc, info, long, metavar, prefs, progDesc, showDefault, showHelpOnError, option, str, value)+import Options.Applicative.Builder+ ( argument+ , auto+ , command+ , eitherReader+ , footerDoc+ , headerDoc+ , help+ , helpDoc+ , info+ , long+ , metavar+ , option+ , prefs+ , progDesc+ , showDefault+ , showHelpOnError+ , str+ , value+ ) import Options.Applicative.Extra (customExecParser, helper, hsubparser) import Options.Applicative.Types (Parser) -import System.IO (Handle, hFlush, hPutStrLn, stderr, stdin, stdout, hSetBuffering, BufferMode(..)) import Data.Time.Locale.Compat (defaultTimeLocale)+import System.IO+ ( BufferMode(..)+ , Handle+ , hFlush+ , hPutStrLn+ , hSetBuffering+ , stderr+ , stdin+ , stdout+ ) -import Data.Text.Prettyprint.Doc (annotate, colon, flatAlt, hardline, indent, line, list, pretty, (<+>), Doc)-import qualified Data.Text.Prettyprint.Doc.Render.Terminal as PPA import Data.Text.Prettyprint.Convert.AnsiWlPprint (toAnsiWlPprint)+import Data.Text.Prettyprint.Doc+ ( Doc+ , (<+>)+ , annotate+ , colon+ , flatAlt+ , hardline+ , indent+ , line+ , list+ , pretty+ )+import qualified Data.Text.Prettyprint.Doc.Render.Terminal as PPA linebreak = flatAlt line mempty+ green = annotate (PPA.color PPA.Green)+ yellow = annotate (PPA.color PPA.Yellow)+ red = annotate (PPA.color PPA.Red) -data KAS = KAS {- pubkeyalgo :: Colored PubKeyAlgorithm- , pubkeysize :: Colored (Maybe Int)- , stringrep :: String-} deriving Generic+data KAS =+ KAS+ { pubkeyalgo :: Colored PubKeyAlgorithm+ , pubkeysize :: Colored (Maybe Int)+ , stringrep :: String+ }+ deriving (Generic) -data Color = Green | Yellow | Red+data Color+ = Green+ | Yellow+ | Red deriving (Eq, Generic, Ord) -data Colored a = Colored {- color :: Maybe Color- , explanation :: Maybe String- , val :: a-} deriving (Functor, Generic)+data Colored a =+ Colored+ { color :: Maybe Color+ , explanation :: Maybe String+ , val :: a+ }+ deriving (Functor, Generic) -newtype FakeMap a b = FakeMap { unFakeMap :: [(a, b)] }+newtype FakeMap a b =+ FakeMap+ { unFakeMap :: [(a, b)]+ } -data KeyReport = KeyReport {- keyStatus :: String- , keyFingerprint :: TwentyOctetFingerprint- , keyVer :: Colored KeyVersion- , keyCreationTime :: ThirtyTwoBitTimeStamp- , keyAlgorithmAndSize :: KAS- , keyUIDsAndUAts :: FakeMap Text (Colored UIDReport)- , keyBestOf :: Maybe UIDReport- , keySubkeys :: [SubkeyReport]- , keyHasEncryptionCapableSubkey :: Colored Bool-} deriving Generic+data KeyReport =+ KeyReport+ { keyStatus :: String+ , keyFingerprint :: TwentyOctetFingerprint+ , keyVer :: Colored KeyVersion+ , keyCreationTime :: ThirtyTwoBitTimeStamp+ , keyAlgorithmAndSize :: KAS+ , keyUIDsAndUAts :: FakeMap Text (Colored UIDReport)+ , keyBestOf :: Maybe UIDReport+ , keySubkeys :: [SubkeyReport]+ , keyHasEncryptionCapableSubkey :: Colored Bool+ }+ deriving (Generic) -data UIDReport = UIDReport {- uidSelfSigHashAlgorithms :: [Colored HashAlgorithm]- , uidPreferredHashAlgorithms :: [Colored [HashAlgorithm]]- , uidKeyExpirationTimes :: [Colored [ThirtyTwoBitDuration]]- , uidKeyUsageFlags :: [Colored (Set.Set KeyFlag)]- , uidRevocationStatus :: [RevocationStatus]-} deriving Generic+data UIDReport =+ UIDReport+ { uidSelfSigHashAlgorithms :: [Colored HashAlgorithm]+ , uidPreferredHashAlgorithms :: [Colored [HashAlgorithm]]+ , uidKeyExpirationTimes :: [Colored [ThirtyTwoBitDuration]]+ , uidKeyUsageFlags :: [Colored (Set.Set KeyFlag)]+ , uidRevocationStatus :: [RevocationStatus]+ }+ deriving (Generic) -data SubkeyReport = SubkeyReport {- skFingerprint :: Colored TwentyOctetFingerprint- , skVer :: Colored KeyVersion- , skCreationTime :: ThirtyTwoBitTimeStamp- , skAlgorithmAndSize :: KAS- , skBindingSigHashAlgorithms :: [Colored HashAlgorithm]- , skUsageFlags :: [Colored (Set.Set KeyFlag)]- , skCrossCerts :: CrossCertReport-} deriving Generic+data SubkeyReport =+ SubkeyReport+ { skFingerprint :: Colored TwentyOctetFingerprint+ , skVer :: Colored KeyVersion+ , skCreationTime :: ThirtyTwoBitTimeStamp+ , skAlgorithmAndSize :: KAS+ , skBindingSigHashAlgorithms :: [Colored HashAlgorithm]+ , skUsageFlags :: [Colored (Set.Set KeyFlag)]+ , skCrossCerts :: CrossCertReport+ }+ deriving (Generic) -data CrossCertReport = CrossCertReport {- ccPresent :: Colored Bool- , ccHashAlgorithms :: [Colored HashAlgorithm]-} deriving Generic+data CrossCertReport =+ CrossCertReport+ { ccPresent :: Colored Bool+ , ccHashAlgorithms :: [Colored HashAlgorithm]+ }+ deriving (Generic) -data RevocationStatus = RevocationStatus {- isRevoked :: Bool- , revocationCode :: String- , revocationReason :: Text-} deriving Generic+data RevocationStatus =+ RevocationStatus+ { isRevoked :: Bool+ , revocationCode :: String+ , revocationReason :: Text+ }+ deriving (Generic) instance A.ToJSON KAS+ instance A.ToJSON Color+ instance (A.ToJSON a) => A.ToJSON (Colored a)+ instance A.ToJSON KeyReport+ instance A.ToJSON UIDReport+ instance A.ToJSON SubkeyReport+ instance A.ToJSON CrossCertReport+ instance A.ToJSON b => A.ToJSON (FakeMap Text b) where- toJSON = A.toJSON . Map.fromList . unFakeMap+ toJSON = A.toJSON . Map.fromList . unFakeMap+ instance A.ToJSON RevocationStatus -#if MIN_VERSION_base(4,9,0) instance Semigroup UIDReport where- (<>) (UIDReport a b c d e) (UIDReport a' b' c' d' e') = UIDReport (a <> a') (b <> b') (c <> c') (d <> d') (e <> e')-#endif+ (<>) (UIDReport a b c d e) (UIDReport a' b' c' d' e') =+ UIDReport (a <> a') (b <> b') (c <> c') (d <> d') (e <> e') instance Monoid UIDReport where- mempty = UIDReport [] [] [] [] []-#if !MIN_VERSION_base(4,9,0)- mappend (UIDReport a b c d e) (UIDReport a' b' c' d' e') = UIDReport (a <> a') (b <> b') (c <> c') (d <> d') (e <> e')-#else- mappend = (<>)-#endif+ mempty = UIDReport [] [] [] [] []+ mappend = (<>) checkKey :: Maybe POSIXTime -> TK -> KeyReport-checkKey mpt key = (\x -> x { keyBestOf = populateBestOf x, keyHasEncryptionCapableSubkey = hasEncryptionCapableSubkey (concatMap skUsageFlags (keySubkeys x)) }) KeyReport {- keyStatus = either id (const "good") processedTK- , keyFingerprint = key^.tkKey._1 & fingerprint- , keyVer = key^.tkKey._1.keyVersion & colorizeKV- , keyCreationTime = key^.tkKey._1.timestamp- , keyAlgorithmAndSize = kasIt (key^.tkKey._1)- , keyUIDsAndUAts = FakeMap (map (\(x,y) -> (x, uidr (Just x) y)) (processedOrOrig^.tkUIDs) ++ map (uatspsToText *** uidr Nothing) (processedOrOrig^.tkUAts))- , keyBestOf = Nothing- , keySubkeys = map (checkSK (key^.tkKey._1 & fingerprint)) (key^.tkSubs)- , keyHasEncryptionCapableSubkey = Colored Nothing Nothing False-}- where- processedOrOrig = either (const key) id processedTK- processedTK = processTK mpt key- kasIt :: PKPayload -> KAS- kasIt pkp = KAS {- pubkeyalgo = pkp^.pkalgo & colorizePKA- , pubkeysize = pkp^.pubkey & colorizePKS . pubkeySize- , stringrep = (pkp^.pubkey & either (const "unknown") show . pubkeySize) ++ (pkp^.pkalgo & pkalgoAbbrev)- }- colorizeKV kv = uncurry Colored (if kv == V4 then (Just Green, Nothing) else (Just Red, Just "not a V4 key")) kv- colorizePKA pka = uncurry Colored (if pka == RSA then (Just Green, Nothing) else (Just Yellow, Just "not an RSA key")) pka- colorizePKS pks = uncurry Colored (colorizePKS' pks) (hush pks)- colorizePKS' (Right pks)- | pks >= 3072 = (Just Green, Nothing)- | pks >= 2048 = (Just Yellow, Just "Public key size between 2048 and 3072 bits")- | otherwise = (Just Red, Just "Public key size under 2048 bits")- colorizePKS' (Left _) = (Just Red, Just "public key algorithm not understood")- colorizePHAs x = uncurry Colored (if fSHA2Family x < ei DeprecatedMD5 x && fSHA2Family x < ei SHA1 x then (Just Green, Nothing) else (Just Red, Just "weak hash with higher preference")) x- fSHA2Family = fi (`elem` [SHA512,SHA384,SHA256,SHA224])- ei x y = fromMaybe maxBound (elemIndex x y)- fi x y = fromMaybe maxBound (findIndex x y)- colorizeKETs ct ts kes- | null kes = Colored (Just Red) (Just "no expiration set") kes- | any (\ke -> realToFrac ts + realToFrac ke < ct) kes = Colored (Just Red) (Just "expiration passed") kes- | any (\ke -> realToFrac ts + realToFrac ke > ct + (5*31557600)) kes = Colored (Just Yellow) (Just "expiration too far in future") kes- | otherwise = Colored (Just Green) Nothing kes- eoki pkp- | pkp^.keyVersion == V4 = hush . eightOctetKeyID $ pkp- | pkp^.keyVersion == DeprecatedV3 && elem (pkp^.pkalgo) [RSA,DeprecatedRSASignOnly] = hush . eightOctetKeyID $ pkp- | otherwise = Nothing- phas (SigV4 _ _ _ xs _ _ _) = colorizePHAs . concatMap (\(SigSubPacket _ (PreferredHashAlgorithms x)) -> x) $ filter isPHA xs- phas _ = Colored Nothing Nothing []- has = map (colorizeHA . hashAlgo) . alleged- colorizeHA ha = uncurry Colored (if ha `elem` [DeprecatedMD5, SHA1] then (Just Red, Just "weak hash algorithm") else (Nothing, Nothing)) ha- sigcts (SigV4 _ _ _ xs _ _ _) = map (\(SigSubPacket _ (SigCreationTime x)) -> x) $ filter isCT xs- alleged = filter (\x -> ((==) <$> sigissuer x <*> eoki (key^.tkKey._1)) == Just True)- uatspsToText = T.pack . uatspsToString- uatspsToString us = "<uat:[" ++ intercalate "," (map uaspToString us) ++ "]>"- uaspToString (ImageAttribute hdr d) = hdrToString hdr ++ ':':show (BL.length d) ++ ':':BC8.unpack (Base16.encode (SHA3.hashlazy 48 d))- uaspToString (OtherUASub t d) = "other-" ++ show t ++ ':':show (BL.length d) ++ ':':BC8.unpack (Base16.encode (SHA3.hashlazy 48 d))- hdrToString (ImageHV1 JPEG) = "jpeg"- hdrToString (ImageHV1 fmt) = "image-" ++ show (fromFVal fmt)- uidr Nothing sps = Colored Nothing Nothing (UIDReport (has sps)- (map phas sps)- (map (colorizeKETs (fromMaybe 0 mpt) (key^.tkKey._1.timestamp & unThirtyTwoBitTimeStamp) . getKeyExpirationTimesFromSignature) sps) -- should that be 0?- (kufs False sps)- (findRevocationReason sps))- uidr (Just u) sps = colorizeUID u (UIDReport (has sps)- (map phas sps)- (map (colorizeKETs (fromMaybe 0 mpt) (key^.tkKey._1.timestamp & unThirtyTwoBitTimeStamp) . getKeyExpirationTimesFromSignature) sps) -- should that be 0?- (kufs False sps)- (findRevocationReason sps))- populateBestOf krep = Just (UIDReport <$> best . uidSelfSigHashAlgorithms <*> best . uidPreferredHashAlgorithms <*> best . uidKeyExpirationTimes <*> best . uidKeyUsageFlags <*> pure [] $ mconcat (justTheUIDRs krep))- justTheUIDRs = map (decolorize . snd) . unFakeMap . keyUIDsAndUAts- best = take 1 . sortOn color- decolorize (Colored _ _ x) = x- colorizeUID u- | '(' `elem` T.unpack u = Colored (Just Yellow) (Just "parenthesis in uid") -- FIXME: be more discerning- | '<' `notElem` T.unpack u = Colored (Just Yellow) (Just "no left angle bracket in uid") -- FIXME: be more discerning- | otherwise = Colored Nothing Nothing- findRevocationReason = concatMap grabReasons . filter isCertRevocationSig- grabReasons (SigV4 CertRevocationSig _ _ has _ _ _) = mapMaybe (grabReasons' . _sspPayload) has- grabReasons _ = []- grabReasons' (ReasonForRevocation a b) = Just (RevocationStatus True (show a) b)- grabReasons' _ = Nothing- kufs s = map (colorizeKUFs s . (\(SigSubPacket _ (KeyFlags x)) -> x) . fromMaybe undefined . find isKUF . hasheds) . newestWith (any isKUF . hasheds)- colorizeKUFs False x = uncurry Colored (if (Set.member EncryptStorageKey x || Set.member EncryptCommunicationsKey x) && (Set.member SignDataKey x || Set.member CertifyKeysKey x) then (Just Yellow, Just "both signing & encryption") else (Just Green, Nothing)) x- colorizeKUFs True x = uncurry Colored (if Set.member CertifyKeysKey x then (Just Red, Just "certification-capable subkey") else (if (Set.member EncryptStorageKey x || Set.member EncryptCommunicationsKey x) && Set.member SignDataKey x then (Just Yellow, Just "both signing & encryption") else (Just Green, Nothing))) x- newestWith p = take 1 . sortOn (Down . take 1 . sigcts) . filter p -- FIXME: this is terrible- hasheds (SigV4 _ _ _ xs _ _ _) = xs- hasheds _ = []- checkSK :: TwentyOctetFingerprint -> (Pkt, [SignaturePayload]) -> SubkeyReport- checkSK pf (PublicSubkeyPkt pkp, sigs) = checkSK' pf pkp sigs- checkSK pf (SecretSubkeyPkt pkp _, sigs) = checkSK' pf pkp sigs- checkSK' pf pkp sigs = (\x -> x { skCrossCerts = ccr (map decolorize (skUsageFlags x)) sigs }) SubkeyReport {- skFingerprint = colorizeF pf (fingerprint pkp)- , skVer = colorizeKV (pkp^.keyVersion)- , skCreationTime = pkp^.timestamp- , skAlgorithmAndSize = kasIt pkp- , skBindingSigHashAlgorithms = has (filter isSKBindingSig sigs)- , skUsageFlags = kufs True (filter isSKBindingSig sigs)- , skCrossCerts = CrossCertReport (Colored Nothing Nothing False) []+checkKey mpt key =+ (\x ->+ x+ { keyBestOf = populateBestOf x+ , keyHasEncryptionCapableSubkey =+ hasEncryptionCapableSubkey (concatMap skUsageFlags (keySubkeys x))+ })+ KeyReport+ { keyStatus = either id (const "good") processedTK+ , keyFingerprint = key ^. tkKey . _1 & fingerprint+ , keyVer = key ^. tkKey . _1 . keyVersion & colorizeKV+ , keyCreationTime = key ^. tkKey . _1 . timestamp+ , keyAlgorithmAndSize = kasIt (key ^. tkKey . _1)+ , keyUIDsAndUAts =+ FakeMap+ (map (\(x, y) -> (x, uidr (Just x) y)) (processedOrOrig ^. tkUIDs) +++ map (uatspsToText *** uidr Nothing) (processedOrOrig ^. tkUAts))+ , keyBestOf = Nothing+ , keySubkeys =+ map (checkSK (key ^. tkKey . _1 & fingerprint)) (key ^. tkSubs)+ , keyHasEncryptionCapableSubkey = Colored Nothing Nothing False+ }+ where+ processedOrOrig = either (const key) id processedTK+ processedTK = processTK mpt key+ kasIt :: PKPayload -> KAS+ kasIt pkp =+ KAS+ { pubkeyalgo = pkp ^. pkalgo & colorizePKA+ , pubkeysize = pkp ^. pubkey & colorizePKS . pubkeySize+ , stringrep =+ (pkp ^. pubkey & either (const "unknown") show . pubkeySize) +++ (pkp ^. pkalgo & pkalgoAbbrev) }- hasEncryptionCapableSubkey skrs = if any ((\x -> Set.member EncryptStorageKey x || Set.member EncryptCommunicationsKey x) . decolorize) skrs then Colored (Just Green) Nothing True else Colored (Just Red) (Just "no encryption-capable subkey present") False- embeddedSigs = filter isPKBindingSig . concatMap getEmbeds . filter isSKBindingSig- getEmbeds (SigV4 _ _ _ _ xs _ _) = concatMap getEmbed xs- getEmbeds _ = []- getEmbed (SigSubPacket _ (EmbeddedSignature sp)) = [sp]- getEmbed _ = []- ccr kufs sigs = CrossCertReport (colorES kufs sigs) (map (colorizeHA . hashAlgo) sigs)- colorES kufs sigs = case (null (embeddedSigs sigs), any (Set.member SignDataKey) kufs, any (Set.member AuthKey) kufs) of- (True, True, True) -> Colored (Just Red) (Just "signing- and auth-capable subkey without cross-cert") False- (True, True, False) -> Colored (Just Red) (Just "signing-capable subkey without cross-cert") False- (True, False, True) -> Colored (Just Yellow) (Just "auth-capable subkey without cross-cert") False- (False, True, True) -> Colored (Just Green) Nothing True- (False, True, False) -> Colored (Just Green) Nothing True- (False, False, True) -> Colored (Just Green) Nothing True- (False, False, False) -> Colored Nothing Nothing True- (True, _, _) -> Colored Nothing Nothing False- colorizeF pf fp = uncurry Colored (if pf == fp then (Just Red, Just "subkey has same fingerprint as primary key") else (Just Green, Nothing)) fp+ colorizeKV kv =+ uncurry+ Colored+ (if kv == V4+ then (Just Green, Nothing)+ else (Just Red, Just "not a V4 key"))+ kv+ colorizePKA pka =+ uncurry+ Colored+ (if pka == RSA+ then (Just Green, Nothing)+ else (Just Yellow, Just "not an RSA key"))+ pka+ colorizePKS pks = uncurry Colored (colorizePKS' pks) (hush pks)+ colorizePKS' (Right pks)+ | pks >= 3072 = (Just Green, Nothing)+ | pks >= 2048 =+ (Just Yellow, Just "Public key size between 2048 and 3072 bits")+ | otherwise = (Just Red, Just "Public key size under 2048 bits")+ colorizePKS' (Left _) =+ (Just Red, Just "public key algorithm not understood")+ colorizePHAs x =+ uncurry+ Colored+ (if fSHA2Family x < ei DeprecatedMD5 x && fSHA2Family x < ei SHA1 x+ then (Just Green, Nothing)+ else (Just Red, Just "weak hash with higher preference"))+ x+ fSHA2Family = fi (`elem` [SHA512, SHA384, SHA256, SHA224])+ ei x y = fromMaybe maxBound (elemIndex x y)+ fi x y = fromMaybe maxBound (findIndex x y)+ colorizeKETs ct ts kes+ | null kes = Colored (Just Red) (Just "no expiration set") kes+ | any (\ke -> realToFrac ts + realToFrac ke < ct) kes =+ Colored (Just Red) (Just "expiration passed") kes+ | any (\ke -> realToFrac ts + realToFrac ke > ct + (5 * 31557600)) kes =+ Colored (Just Yellow) (Just "expiration too far in future") kes+ | otherwise = Colored (Just Green) Nothing kes+ eoki pkp+ | pkp ^. keyVersion == V4 = hush . eightOctetKeyID $ pkp+ | pkp ^. keyVersion == DeprecatedV3 &&+ elem (pkp ^. pkalgo) [RSA, DeprecatedRSASignOnly] =+ hush . eightOctetKeyID $ pkp+ | otherwise = Nothing+ phas (SigV4 _ _ _ xs _ _ _) =+ colorizePHAs .+ concatMap (\(SigSubPacket _ (PreferredHashAlgorithms x)) -> x) $+ filter isPHA xs+ phas _ = Colored Nothing Nothing []+ has = map (colorizeHA . hashAlgo) . alleged+ colorizeHA ha =+ uncurry+ Colored+ (if ha `elem` [DeprecatedMD5, SHA1]+ then (Just Red, Just "weak hash algorithm")+ else (Nothing, Nothing))+ ha+ sigcts (SigV4 _ _ _ xs _ _ _) =+ map (\(SigSubPacket _ (SigCreationTime x)) -> x) $ filter isCT xs+ alleged =+ filter+ (\x -> ((==) <$> sigissuer x <*> eoki (key ^. tkKey . _1)) == Just True)+ uatspsToText = T.pack . uatspsToString+ uatspsToString us =+ "<uat:[" ++ intercalate "," (map uaspToString us) ++ "]>"+ uaspToString (ImageAttribute hdr d) =+ hdrToString hdr ++ ':' : show (BL.length d) ++ ':' :+ BC8.unpack (Base16.encode (SHA3.hashlazy 48 d))+ uaspToString (OtherUASub t d) =+ "other-" ++ show t ++ ':' : show (BL.length d) ++ ':' :+ BC8.unpack (Base16.encode (SHA3.hashlazy 48 d))+ hdrToString (ImageHV1 JPEG) = "jpeg"+ hdrToString (ImageHV1 fmt) = "image-" ++ show (fromFVal fmt)+ uidr Nothing sps =+ Colored+ Nothing+ Nothing+ (UIDReport+ (has sps)+ (map phas sps)+ (map+ (colorizeKETs+ (fromMaybe 0 mpt)+ (key ^. tkKey . _1 . timestamp & unThirtyTwoBitTimeStamp) .+ getKeyExpirationTimesFromSignature)+ sps) -- should that be 0?+ (kufs False sps)+ (findRevocationReason sps))+ uidr (Just u) sps =+ colorizeUID+ u+ (UIDReport+ (has sps)+ (map phas sps)+ (map+ (colorizeKETs+ (fromMaybe 0 mpt)+ (key ^. tkKey . _1 . timestamp & unThirtyTwoBitTimeStamp) .+ getKeyExpirationTimesFromSignature)+ sps) -- should that be 0?+ (kufs False sps)+ (findRevocationReason sps))+ populateBestOf krep =+ Just+ (UIDReport <$> best . uidSelfSigHashAlgorithms <*> best .+ uidPreferredHashAlgorithms <*>+ best .+ uidKeyExpirationTimes <*>+ best .+ uidKeyUsageFlags <*>+ pure [] $+ mconcat (justTheUIDRs krep))+ justTheUIDRs = map (decolorize . snd) . unFakeMap . keyUIDsAndUAts+ best = take 1 . sortOn color+ decolorize (Colored _ _ x) = x+ colorizeUID u+ | '(' `elem` T.unpack u =+ Colored (Just Yellow) (Just "parenthesis in uid") -- FIXME: be more discerning+ | '<' `notElem` T.unpack u =+ Colored (Just Yellow) (Just "no left angle bracket in uid") -- FIXME: be more discerning+ | otherwise = Colored Nothing Nothing+ findRevocationReason = concatMap grabReasons . filter isCertRevocationSig+ grabReasons (SigV4 CertRevocationSig _ _ has _ _ _) =+ mapMaybe (grabReasons' . _sspPayload) has+ grabReasons _ = []+ grabReasons' (ReasonForRevocation a b) =+ Just (RevocationStatus True (show a) b)+ grabReasons' _ = Nothing+ kufs s =+ map+ (colorizeKUFs s . (\(SigSubPacket _ (KeyFlags x)) -> x) .+ fromMaybe undefined .+ find isKUF .+ hasheds) .+ newestWith (any isKUF . hasheds)+ colorizeKUFs False x =+ uncurry+ Colored+ (if (Set.member EncryptStorageKey x ||+ Set.member EncryptCommunicationsKey x) &&+ (Set.member SignDataKey x || Set.member CertifyKeysKey x)+ then (Just Yellow, Just "both signing & encryption")+ else (Just Green, Nothing))+ x+ colorizeKUFs True x =+ uncurry+ Colored+ (if Set.member CertifyKeysKey x+ then (Just Red, Just "certification-capable subkey")+ else (if (Set.member EncryptStorageKey x ||+ Set.member EncryptCommunicationsKey x) &&+ Set.member SignDataKey x+ then (Just Yellow, Just "both signing & encryption")+ else (Just Green, Nothing)))+ x+ newestWith p = take 1 . sortOn (Down . take 1 . sigcts) . filter p -- FIXME: this is terrible+ hasheds (SigV4 _ _ _ xs _ _ _) = xs+ hasheds _ = []+ checkSK ::+ TwentyOctetFingerprint -> (Pkt, [SignaturePayload]) -> SubkeyReport+ checkSK pf (PublicSubkeyPkt pkp, sigs) = checkSK' pf pkp sigs+ checkSK pf (SecretSubkeyPkt pkp _, sigs) = checkSK' pf pkp sigs+ checkSK' pf pkp sigs =+ (\x -> x {skCrossCerts = ccr (map decolorize (skUsageFlags x)) sigs})+ SubkeyReport+ { skFingerprint = colorizeF pf (fingerprint pkp)+ , skVer = colorizeKV (pkp ^. keyVersion)+ , skCreationTime = pkp ^. timestamp+ , skAlgorithmAndSize = kasIt pkp+ , skBindingSigHashAlgorithms = has (filter isSKBindingSig sigs)+ , skUsageFlags = kufs True (filter isSKBindingSig sigs)+ , skCrossCerts = CrossCertReport (Colored Nothing Nothing False) []+ }+ hasEncryptionCapableSubkey skrs =+ if any+ ((\x ->+ Set.member EncryptStorageKey x ||+ Set.member EncryptCommunicationsKey x) .+ decolorize)+ skrs+ then Colored (Just Green) Nothing True+ else Colored+ (Just Red)+ (Just "no encryption-capable subkey present")+ False+ embeddedSigs =+ filter isPKBindingSig . concatMap getEmbeds . filter isSKBindingSig+ getEmbeds (SigV4 _ _ _ _ xs _ _) = concatMap getEmbed xs+ getEmbeds _ = []+ getEmbed (SigSubPacket _ (EmbeddedSignature sp)) = [sp]+ getEmbed _ = []+ ccr kufs sigs =+ CrossCertReport (colorES kufs sigs) (map (colorizeHA . hashAlgo) sigs)+ colorES kufs sigs =+ case ( null (embeddedSigs sigs)+ , any (Set.member SignDataKey) kufs+ , any (Set.member AuthKey) kufs) of+ (True, True, True) ->+ Colored+ (Just Red)+ (Just "signing- and auth-capable subkey without cross-cert")+ False+ (True, True, False) ->+ Colored+ (Just Red)+ (Just "signing-capable subkey without cross-cert")+ False+ (True, False, True) ->+ Colored+ (Just Yellow)+ (Just "auth-capable subkey without cross-cert")+ False+ (False, True, True) -> Colored (Just Green) Nothing True+ (False, True, False) -> Colored (Just Green) Nothing True+ (False, False, True) -> Colored (Just Green) Nothing True+ (False, False, False) -> Colored Nothing Nothing True+ (True, _, _) -> Colored Nothing Nothing False+ colorizeF pf fp =+ uncurry+ Colored+ (if pf == fp+ then (Just Red, Just "subkey has same fingerprint as primary key")+ else (Just Green, Nothing))+ fp prettyKeyReport :: POSIXTime -> TK -> Doc PPA.AnsiStyle prettyKeyReport cpt key = do- let keyReport = checkKey (Just cpt) key- execWriter $ tell- ( linebreak <> pretty "Key has potential validity" <> colon <+> pretty (keyStatus keyReport)- <> linebreak <> pretty "Key has fingerprint" <> colon <+> pretty (SpacedFingerprint (keyFingerprint keyReport))- <> linebreak <> pretty "Checking to see if key is OpenPGPv4" <> colon <+> coloredToColor (pretty . show) (keyVer keyReport)- <> linebreak <> (\kas -> pretty "Checking to see if key is RSA or DSA (>= 2048-bit)" <> colon <+> coloredToColor pretty (pubkeyalgo kas) <+> coloredToColor (maybe (pretty "unknown") pretty) (pubkeysize kas)) (keyAlgorithmAndSize keyReport)- <> linebreak <> pretty "Checking user-ID- and user-attribute-related items" <> colon- <> mconcat (map (uidtrip (keyCreationTime keyReport) . gottabeabetterway) (unFakeMap (keyUIDsAndUAts keyReport)))- <> linebreak <> pretty "Checking subkeys" <> colon- <> linebreak <> indent 2 (pretty "one of the subkeys is encryption-capable" <> colon <+> coloredToColor pretty (keyHasEncryptionCapableSubkey keyReport))- <> mconcat (map subkeyrep (keySubkeys keyReport))- <> linebreak- )- where- coloredToColor f (Colored (Just Green) _ x) = green (f x)- coloredToColor f (Colored (Just Yellow) _ x) = yellow (f x)- coloredToColor f (Colored (Just Red) _ x) = red (f x)- coloredToColor f (Colored Nothing _ x) = f x- uidtrip ts (u, ur)- | null (uidRevocationStatus ur) = linebreak <> indent 2 (coloredToColor pretty (fmap T.unpack u)) <> colon- <> linebreak <> indent 4 (pretty "Self-sig hash algorithms" <> colon <+> (list . map (coloredToColor pretty) . uidSelfSigHashAlgorithms) ur)- <> linebreak <> indent 4 (pretty "Preferred hash algorithms" <> colon <+> mconcat (map (coloredToColor pretty) (uidPreferredHashAlgorithms ur)))- <> linebreak <> indent 4 (pretty "Key expiration times" <> colon <+> mconcat (map (coloredToColor list . fmap (map (pretty . keyExp ts))) (uidKeyExpirationTimes ur)))- <> linebreak <> indent 4 (pretty "Key usage flags" <> colon <+> (list . map (coloredToColor (pretty . Set.toList))) (uidKeyUsageFlags ur))- | otherwise = linebreak <> indent 2 (coloredToColor pretty (fmap T.unpack u)) <> colon <+> pretty "[revoked]"- <> linebreak <> indent 4 (pretty "Revocation code" <> colon <+> list (map (pretty . revocationCode) (uidRevocationStatus ur)))- <> linebreak <> indent 4 (pretty "Revocation reason" <> colon <+> list (map (pretty . T.unpack . revocationReason) (uidRevocationStatus ur)))- keyExp ts ke = (show . pretty) ke ++ " = " ++ formatTime defaultTimeLocale "%c" (posixSecondsToUTCTime (realToFrac ts + realToFrac ke))- gottabeabetterway (a, Colored x y z) = (Colored x y a, z)- subkeyrep skr = linebreak <> indent 2 (pretty "fpr" <> colon <+> coloredToColor pretty (fmap SpacedFingerprint (skFingerprint skr)))- <> linebreak <> indent 4 (pretty "version" <> colon <+> coloredToColor pretty (skVer skr))- <> linebreak <> indent 4 (pretty "timestamp" <> colon <+> pretty (skCreationTime skr))- <> linebreak <> indent 4 ((\kas -> pretty "algo/size" <> colon <+> coloredToColor pretty (pubkeyalgo kas) <+> coloredToColor (maybe (pretty "unknown") pretty) (pubkeysize kas)) (skAlgorithmAndSize skr))- <> linebreak <> indent 4 (pretty "binding sig hash algorithms" <> colon <+> (list . map (coloredToColor pretty) . skBindingSigHashAlgorithms) skr)- <> linebreak <> indent 4 (pretty "usage flags" <> colon <+> (list . map (coloredToColor (pretty . Set.toList))) (skUsageFlags skr))- <> linebreak <> indent 4 (pretty "embedded cross-cert" <> colon <+> (coloredToColor pretty . ccPresent . skCrossCerts) skr)- <> linebreak <> indent 4 (pretty "cross-cert hash algorithms" <> colon <+> (list . map (coloredToColor pretty) . ccHashAlgorithms . skCrossCerts) skr)+ let keyReport = checkKey (Just cpt) key+ execWriter $+ tell+ (linebreak <> pretty "Key has potential validity" <> colon <+>+ pretty (keyStatus keyReport) <>+ linebreak <>+ pretty "Key has fingerprint" <>+ colon <+>+ pretty (SpacedFingerprint (keyFingerprint keyReport)) <>+ linebreak <>+ pretty "Checking to see if key is OpenPGPv4" <>+ colon <+>+ coloredToColor (pretty . show) (keyVer keyReport) <>+ linebreak <>+ (\kas ->+ pretty "Checking to see if key is RSA or DSA (>= 2048-bit)" <> colon <+>+ coloredToColor pretty (pubkeyalgo kas) <+>+ coloredToColor (maybe (pretty "unknown") pretty) (pubkeysize kas))+ (keyAlgorithmAndSize keyReport) <>+ linebreak <>+ pretty "Checking user-ID- and user-attribute-related items" <>+ colon <>+ mconcat+ (map+ (uidtrip (keyCreationTime keyReport) . gottabeabetterway)+ (unFakeMap (keyUIDsAndUAts keyReport))) <>+ linebreak <>+ pretty "Checking subkeys" <>+ colon <>+ linebreak <>+ indent+ 2+ (pretty "one of the subkeys is encryption-capable" <> colon <+>+ coloredToColor pretty (keyHasEncryptionCapableSubkey keyReport)) <>+ mconcat (map subkeyrep (keySubkeys keyReport)) <>+ linebreak)+ where+ coloredToColor f (Colored (Just Green) _ x) = green (f x)+ coloredToColor f (Colored (Just Yellow) _ x) = yellow (f x)+ coloredToColor f (Colored (Just Red) _ x) = red (f x)+ coloredToColor f (Colored Nothing _ x) = f x+ uidtrip ts (u, ur)+ | null (uidRevocationStatus ur) =+ linebreak <> indent 2 (coloredToColor pretty (fmap T.unpack u)) <> colon <>+ linebreak <>+ indent+ 4+ (pretty "Self-sig hash algorithms" <> colon <+>+ (list . map (coloredToColor pretty) . uidSelfSigHashAlgorithms) ur) <>+ linebreak <>+ indent+ 4+ (pretty "Preferred hash algorithms" <> colon <+>+ mconcat (map (coloredToColor pretty) (uidPreferredHashAlgorithms ur))) <>+ linebreak <>+ indent+ 4+ (pretty "Key expiration times" <> colon <+>+ mconcat+ (map+ (coloredToColor list . fmap (map (pretty . keyExp ts)))+ (uidKeyExpirationTimes ur))) <>+ linebreak <>+ indent+ 4+ (pretty "Key usage flags" <> colon <+>+ (list . map (coloredToColor (pretty . Set.toList)))+ (uidKeyUsageFlags ur))+ | otherwise =+ linebreak <> indent 2 (coloredToColor pretty (fmap T.unpack u)) <> colon <+>+ pretty "[revoked]" <>+ linebreak <>+ indent+ 4+ (pretty "Revocation code" <> colon <+>+ list (map (pretty . revocationCode) (uidRevocationStatus ur))) <>+ linebreak <>+ indent+ 4+ (pretty "Revocation reason" <> colon <+>+ list+ (map+ (pretty . T.unpack . revocationReason)+ (uidRevocationStatus ur)))+ keyExp ts ke =+ (show . pretty) ke ++ " = " +++ formatTime+ defaultTimeLocale+ "%c"+ (posixSecondsToUTCTime (realToFrac ts + realToFrac ke))+ gottabeabetterway (a, Colored x y z) = (Colored x y a, z)+ subkeyrep skr =+ linebreak <>+ indent+ 2+ (pretty "fpr" <> colon <+>+ coloredToColor pretty (fmap SpacedFingerprint (skFingerprint skr))) <>+ linebreak <>+ indent 4 (pretty "version" <> colon <+> coloredToColor pretty (skVer skr)) <>+ linebreak <>+ indent 4 (pretty "timestamp" <> colon <+> pretty (skCreationTime skr)) <>+ linebreak <>+ indent+ 4+ ((\kas ->+ pretty "algo/size" <> colon <+>+ coloredToColor pretty (pubkeyalgo kas) <+>+ coloredToColor (maybe (pretty "unknown") pretty) (pubkeysize kas))+ (skAlgorithmAndSize skr)) <>+ linebreak <>+ indent+ 4+ (pretty "binding sig hash algorithms" <> colon <+>+ (list . map (coloredToColor pretty) . skBindingSigHashAlgorithms) skr) <>+ linebreak <>+ indent+ 4+ (pretty "usage flags" <> colon <+>+ (list . map (coloredToColor (pretty . Set.toList))) (skUsageFlags skr)) <>+ linebreak <>+ indent+ 4+ (pretty "embedded cross-cert" <> colon <+>+ (coloredToColor pretty . ccPresent . skCrossCerts) skr) <>+ linebreak <>+ indent+ 4+ (pretty "cross-cert hash algorithms" <> colon <+>+ (list . map (coloredToColor pretty) . ccHashAlgorithms . skCrossCerts)+ skr) jsonReport :: POSIXTime -> TK -> BL.ByteString jsonReport ps = A.encode . checkKey (Just ps) yamlReport :: POSIXTime -> TK -> B.ByteString-yamlReport ps = Y.encode . (:[]) . checkKey (Just ps)+yamlReport ps = Y.encode . (: []) . checkKey (Just ps) -data LintOutputFormat = Pretty | JSON | YAML- deriving (Bounded, Enum, Eq, Read, Show)+data LintOutputFormat+ = Pretty+ | JSON+ | YAML+ deriving (Bounded, Enum, Eq, Read, Show) -data LintOptions = LintOptions {- lintOutputFormat :: LintOutputFormat-}+data LintOptions =+ LintOptions+ { lintOutputFormat :: LintOutputFormat+ } -data FetchOptions = FetchOptions {- keyServer :: String- , fetchValidation :: FetchValidationMethod- , fetchQuery :: TwentyOctetFingerprint-}+data FetchOptions =+ FetchOptions+ { keyServer :: String+ , fetchValidation :: FetchValidationMethod+ , fetchQuery :: TwentyOctetFingerprint+ } -data Command = CmdLint LintOptions | CmdCanonicalize | CmdFetch FetchOptions+data Command+ = CmdLint LintOptions+ | CmdCanonicalize+ | CmdFetch FetchOptions lintO :: Parser LintOptions-lintO = LintOptions- <$> option auto- ( long "output-format"- <> metavar "FORMAT"- <> value Pretty- <> showDefault- <> ofHelp- )- where- ofHelp = helpDoc . Just . toAnsiWlPprint $ pretty "output format" <> hardline <> list (map (pretty . show) ofchoices)- ofchoices = [minBound..maxBound] :: [LintOutputFormat]+lintO =+ LintOptions <$>+ option+ auto+ (long "output-format" <> metavar "FORMAT" <> value Pretty <> showDefault <>+ ofHelp)+ where+ ofHelp =+ helpDoc . Just . toAnsiWlPprint $ pretty "output format" <> hardline <>+ list (map (pretty . show) ofchoices)+ ofchoices = [minBound .. maxBound] :: [LintOutputFormat] fetchO :: Parser FetchOptions-fetchO = FetchOptions- <$> option str- ( long "keyserver"- <> metavar "URL"- <> value "http://pool.sks-keyservers.net:11371"- <> showDefault- <> help "HKP server"- )- <*> option auto- ( long "validation-method"- <> metavar "METHOD"- <> value MatchPrimaryKeyFingerprint- <> showDefault- <> vmHelp- )- <*> argument (eitherReader strToFP) ( metavar "FINGERPRINT" )- where- vmHelp = helpDoc . Just . toAnsiWlPprint $ pretty "validation method" <> hardline <> list (map (pretty . show) vmchoices)- vmchoices = [minBound..maxBound] :: [FetchValidationMethod]- strToFP = parseFingerprint . T.pack+fetchO =+ FetchOptions <$>+ option+ str+ (long "keyserver" <> metavar "URL" <>+ value "http://pool.sks-keyservers.net:11371" <>+ showDefault <>+ help "HKP server") <*>+ option+ auto+ (long "validation-method" <> metavar "METHOD" <>+ value MatchPrimaryKeyFingerprint <>+ showDefault <>+ vmHelp) <*>+ argument (eitherReader strToFP) (metavar "FINGERPRINT")+ where+ vmHelp =+ helpDoc . Just . toAnsiWlPprint $ pretty "validation method" <> hardline <>+ list (map (pretty . show) vmchoices)+ vmchoices = [minBound .. maxBound] :: [FetchValidationMethod]+ strToFP = parseFingerprint . T.pack dispatch :: Command -> IO () dispatch (CmdFetch o) = banner' stderr >> hFlush stderr >> doFetch o@@ -380,60 +696,78 @@ main :: IO () main = do- hSetBuffering stderr LineBuffering- customExecParser (prefs showHelpOnError)- (info (helper <*> versioner "hokey" <*> cmd)- (headerDoc (Just (toAnsiWlPprint (banner "hokey")))- <> progDesc "hOpenPGP Key utility"- <> footerDoc (Just (toAnsiWlPprint (warranty "hokey"))))) >>= dispatch+ hSetBuffering stderr LineBuffering+ customExecParser+ (prefs showHelpOnError)+ (info+ (helper <*> versioner "hokey" <*> cmd)+ (headerDoc (Just (toAnsiWlPprint (banner "hokey"))) <>+ progDesc "hOpenPGP Key utility" <>+ footerDoc (Just (toAnsiWlPprint (warranty "hokey"))))) >>=+ dispatch cmd :: Parser Command-cmd = hsubparser- ( command "canonicalize" (info ( pure CmdCanonicalize) ( progDesc "arrange key components in a canonical ordering" ))- <> command "fetch" (info ( CmdFetch <$> fetchO) ( progDesc "fetch key(s) from keyserver" ))- <> command "lint" (info ( CmdLint <$> lintO) ( progDesc "check key(s) for 'best practices'" ))- )+cmd =+ hsubparser+ (command+ "canonicalize"+ (info+ (pure CmdCanonicalize)+ (progDesc "arrange key components in a canonical ordering")) <>+ command+ "fetch"+ (info (CmdFetch <$> fetchO) (progDesc "fetch key(s) from keyserver")) <>+ command+ "lint"+ (info (CmdLint <$> lintO) (progDesc "check key(s) for 'best practices'"))) doLint :: LintOptions -> IO () doLint o = do- cpt <- getPOSIXTime- keys <- runConduitRes $ CB.sourceHandle stdin .| conduitGet get .| conduitToTKsDropping .| CL.consume- output (lintOutputFormat o) cpt keys- where- output Pretty cpt = mapM_ (PPA.putDoc . prettyKeyReport cpt)- output JSON cpt = mapM_ (BL.putStr . flip BL.append (BL.singleton 0x0a) . jsonReport cpt)- output YAML cpt = mapM_ (B.putStr . yamlReport cpt)+ cpt <- getPOSIXTime+ keys <-+ runConduitRes $ CB.sourceHandle stdin .| conduitGet get .|+ conduitToTKsDropping .|+ CL.consume+ output (lintOutputFormat o) cpt keys+ where+ output Pretty cpt = mapM_ (PPA.putDoc . prettyKeyReport cpt)+ output JSON cpt =+ mapM_ (BL.putStr . flip BL.append (BL.singleton 0x0a) . jsonReport cpt)+ output YAML cpt = mapM_ (B.putStr . yamlReport cpt) doCanonicalize :: IO ()-doCanonicalize = runConduitRes $ CB.sourceHandle stdin .| conduitGet get .|- conduitToTKsDropping .| CL.map canonicalize .|- CL.map put .| conduitPut .| CB.sinkHandle stdout- where- canonicalize (TK k r ui ua s) = TK k- (sort r)- (indepthsort ui)- (indepthsort ua)- (indepthsort s)- indepthsort :: (Ord a, Ord b) => [(a,[b])] -> [(a,[b])]- indepthsort = nub . sort . over (mapped._2) sort+doCanonicalize =+ runConduitRes $ CB.sourceHandle stdin .| conduitGet get .|+ conduitToTKsDropping .|+ CL.map canonicalize .|+ CL.map put .|+ conduitPut .|+ CB.sinkHandle stdout+ where+ canonicalize (TK k r ui ua s) =+ TK k (sort r) (indepthsort ui) (indepthsort ua) (indepthsort s)+ indepthsort :: (Ord a, Ord b) => [(a, [b])] -> [(a, [b])]+ indepthsort = nub . sort . over (mapped . _2) sort doFetch :: FetchOptions -> IO () doFetch o = do- ekeys <- runExceptT $ fetchKeys (keyServer o) (fetchValidation o) (fetchQuery o)- case ekeys of- Left e -> hPutStrLn stderr $ "error fetching keys: " ++ e- Right ks -> B.putStr $ rearmorKeys ks+ ekeys <-+ runExceptT $ fetchKeys (keyServer o) (fetchValidation o) (fetchQuery o)+ case ekeys of+ Left e -> hPutStrLn stderr $ "error fetching keys: " ++ e+ Right ks -> B.putStr $ rearmorKeys ks banner' :: Handle -> IO ()-banner' h = PPA.hPutDoc h (banner "hokey" <> hardline <> warranty "hokey" <> hardline)+banner' h =+ PPA.hPutDoc h (banner "hokey" <> hardline <> warranty "hokey" <> hardline) sigissuer :: SignaturePayload -> Maybe EightOctetKeyId getIssuer :: SigSubPacketPayload -> Maybe EightOctetKeyId hashAlgo :: SignaturePayload -> HashAlgorithm- sigissuer (SigVOther 2 _) = Nothing-sigissuer SigV3{} = Nothing-sigissuer (SigV4 _ _ _ ys xs _ _) = listToMaybe . mapMaybe (getIssuer . _sspPayload) $ (ys++xs) -- FIXME: what should this be if there are multiple matches?+sigissuer SigV3 {} = Nothing+sigissuer (SigV4 _ _ _ ys xs _ _) =+ listToMaybe . mapMaybe (getIssuer . _sspPayload) $ (ys ++ xs) -- FIXME: what should this be if there are multiple matches? sigissuer (SigVOther _ _) = error "We're in the future." -- FIXME getIssuer (Issuer i) = Just i
hop.hs view
@@ -1,5 +1,5 @@ -- hop.hs: hOpenPGP-stateless OpenPGP (sop) tool--- Copyright © 2019 Clint Adams+-- Copyright © 2019-2020 Clint Adams -- -- vim: softtabstop=4:shiftwidth=4:expandtab --@@ -155,19 +155,19 @@ Options <$> some (strOption- (long "keyring" <> short 'k' <> metavar "FILE" <>- help "file containing keyring")) <*>+ (long "keyring" <>+ short 'k' <> metavar "FILE" <> help "file containing keyring")) <*> option auto- (long "output-format" <> metavar "FORMAT" <> value Unstructured <>- showDefault <>- help "output format") <*>+ (long "output-format" <>+ metavar "FORMAT" <>+ value Unstructured <> showDefault <> help "output format") <*> option auto- (long "signature-filter" <> metavar "SIGFILTER" <>+ (long "signature-filter" <>+ metavar "SIGFILTER" <> value "sigcreationtime < now" <>- showDefault <>- help "verify only signatures which match filter spec") <*>+ showDefault <> help "verify only signatures which match filter spec") <*> argument str (metavar "SIGNATURE" <> sigHelp) <*> argument str (metavar "BLOB" <> blobHelp) where@@ -297,8 +297,8 @@ where armortypeHelp = helpDoc . Just . toAnsiWlPprint $- pretty "ASCII armor type" <> softline <>- list (map (pretty . fst) armorTypes)+ pretty "ASCII armor type" <>+ softline <> list (map (pretty . fst) armorTypes) data ArmoringOptions = ArmoringOptions@@ -486,8 +486,8 @@ where astypeHelp = helpDoc . Just . toAnsiWlPprint $- pretty "what to treat the input as" <> softline <>- list (map (pretty . fst) asTypes)+ pretty "what to treat the input as" <>+ softline <> list (map (pretty . fst) asTypes) data SignOptions = SignOptions
hopenpgp-tools.cabal view
@@ -1,5 +1,5 @@ name: hopenpgp-tools-version: 0.23.1+version: 0.23.2 synopsis: hOpenPGP-based command-line tools description: command-line tools for performing some OpenPGP-related operations homepage: https://salsa.debian.org/clint/hOpenPGP-tools@@ -7,7 +7,7 @@ license-file: LICENSE author: Clint Adams maintainer: Clint Adams <clint@debian.org>-copyright: 2012-2019 Clint Adams+copyright: 2012-2020 Clint Adams category: Codec, Data build-type: Simple cabal-version: >=1.10@@ -19,7 +19,7 @@ , HOpenPGP.Tools.Common , HOpenPGP.Tools.Lexer , HOpenPGP.Tools.Parser- build-depends: base > 4.8 && < 5+ build-depends: base > 4.9 && < 5 , aeson , array , binary >= 0.6.4.0@@ -28,7 +28,7 @@ , conduit >= 1.2.8 , conduit-extra >= 1.1 , errors- , hOpenPGP >= 2.7 && < 3+ , hOpenPGP >= 2.9.5 && < 3 , lens , monad-loops , openpgp-asciiarmor >= 0.1@@ -48,7 +48,7 @@ other-modules: HOpenPGP.Tools.Common , HOpenPGP.Tools.HKP , HOpenPGP.Tools.TKUtils- build-depends: base > 4.8 && < 5+ build-depends: base > 4.9 && < 5 , aeson , base16-bytestring , binary >= 0.6.4.0@@ -86,7 +86,7 @@ other-modules: HOpenPGP.Tools.Common , HOpenPGP.Tools.Lexer , HOpenPGP.Tools.Parser- build-depends: base > 4.8 && < 5+ build-depends: base > 4.9 && < 5 , aeson , array , attoparsec >= 0.10.0.0@@ -125,7 +125,7 @@ , HOpenPGP.Tools.Common , HOpenPGP.Tools.Lexer , HOpenPGP.Tools.Parser- build-depends: base > 4.8 && < 5+ build-depends: base > 4.9 && < 5 , aeson , array , binary@@ -162,4 +162,4 @@ source-repository this type: git location: https://salsa.debian.org/clint/hopenpgp-tools.git- tag: hopenpgp-tools/0.23.1+ tag: hopenpgp-tools/0.23.2
hot.hs view
@@ -1,7 +1,31 @@ {-# LANGUAGE RecordWildCards #-} +import qualified Codec.Encryption.OpenPGP.ASCIIArmor as AA+import Codec.Encryption.OpenPGP.ASCIIArmor.Types (Armor(..), ArmorType(..))+import Codec.Encryption.OpenPGP.Serialize ()+import Codec.Encryption.OpenPGP.Types+import Control.Applicative (optional)+import Control.Error.Util (note)+import Control.Monad.IO.Class (MonadIO, liftIO)+import qualified Data.Aeson as A+import Data.Binary (get, put)+import Data.Binary.Get (Get)+import qualified Data.ByteString as B+import qualified Data.ByteString.Lazy as BL+import Data.Conduit (ConduitM, (.|), runConduitRes)+import qualified Data.Conduit.Binary as CB+import qualified Data.Conduit.List as CL+import Data.Conduit.OpenPGP.Filter+ ( FilterPredicates(RPFilterPredicate)+ , conduitPktFilter+ )+import Data.Conduit.Serialization.Binary (conduitGet, conduitPut)+import Data.Monoid ((<>))+import Data.Void (Void)+import qualified Data.Yaml as Y+import HOpenPGP.Tools.Armor (doDeArmor) -- hot.hs: hOpenPGP Tool--- Copyright © 2012-2019 Clint Adams+-- Copyright © 2012-2020 Clint Adams -- -- vim: softtabstop=4:shiftwidth=4:expandtab --@@ -17,55 +41,81 @@ -- -- You should have received a copy of the GNU Affero General Public License -- along with this program. If not, see <http://www.gnu.org/licenses/>.--import HOpenPGP.Tools.Common (banner, versioner, warranty, prependAuto)-import HOpenPGP.Tools.Armor (doDeArmor)+import HOpenPGP.Tools.Common (banner, prependAuto, versioner, warranty) import HOpenPGP.Tools.Parser (parsePExp)-import qualified Codec.Encryption.OpenPGP.ASCIIArmor as AA-import Codec.Encryption.OpenPGP.ASCIIArmor.Types (Armor(..), ArmorType(..))-import Codec.Encryption.OpenPGP.Serialize ()-import Codec.Encryption.OpenPGP.Types-import Control.Applicative (optional)-import Control.Error.Util (note)-import Control.Monad.IO.Class (MonadIO, liftIO)-import qualified Data.Aeson as A-import qualified Data.ByteString as B-import qualified Data.ByteString.Lazy as BL-import Data.Conduit ((.|), ConduitM, runConduitRes)-import Data.Conduit.Serialization.Binary (conduitGet, conduitPut)-import qualified Data.Conduit.Binary as CB-import qualified Data.Conduit.List as CL-import Data.Conduit.OpenPGP.Filter (conduitPktFilter, FilterPredicates(RPFilterPredicate))-import Data.Binary (get, put)-import Data.Binary.Get (Get)-import Data.Monoid ((<>))-import Data.Void (Void)-import qualified Data.Yaml as Y -import System.IO (stdin, stderr, stdout, Handle, hFlush, hSetBuffering, BufferMode(..))+import System.IO+ ( BufferMode(..)+ , Handle+ , hFlush+ , hSetBuffering+ , stderr+ , stdin+ , stdout+ ) -import Options.Applicative.Builder (argument, command, eitherReader, footerDoc, headerDoc, help, helpDoc, info, long, metavar, option, prefs, progDesc, showDefaultWith, showHelpOnError, str, strOption, value)+import Data.Text.Prettyprint.Convert.AnsiWlPprint (toAnsiWlPprint)+import Data.Text.Prettyprint.Doc+ ( Pretty+ , (<+>)+ , group+ , hardline+ , list+ , pretty+ , softline+ )+import Data.Text.Prettyprint.Doc.Render.Text (hPutDoc)+import Options.Applicative.Builder+ ( argument+ , command+ , eitherReader+ , footerDoc+ , headerDoc+ , help+ , helpDoc+ , info+ , long+ , metavar+ , option+ , prefs+ , progDesc+ , showDefaultWith+ , showHelpOnError+ , str+ , strOption+ , value+ ) import Options.Applicative.Extra (customExecParser, helper, hsubparser) import Options.Applicative.Types (Parser)-import Data.Text.Prettyprint.Doc ((<+>), group, hardline, list, Pretty, pretty, softline)-import Data.Text.Prettyprint.Doc.Render.Text (hPutDoc)-import Data.Text.Prettyprint.Convert.AnsiWlPprint (toAnsiWlPprint) -data Command = DumpC DumpOptions | DeArmorC | ArmorC ArmoringOptions | FilterC FilteringOptions+data Command+ = DumpC DumpOptions+ | DeArmorC+ | ArmorC ArmoringOptions+ | FilterC FilteringOptions -data DumpOptions = DumpOptions {- outputformat :: DumpOutputFormat-}+data DumpOptions =+ DumpOptions+ { outputformat :: DumpOutputFormat+ } -data FilteringOptions = FilteringOptions {- fExpression :: String-}+data FilteringOptions =+ FilteringOptions+ { fExpression :: String+ } -data DumpOutputFormat = DumpPretty | DumpJSON | DumpYAML | DumpShow- deriving (Bounded, Enum, Read, Show)+data DumpOutputFormat+ = DumpPretty+ | DumpJSON+ | DumpYAML+ | DumpShow+ deriving (Bounded, Enum, Read, Show) doDump :: DumpOptions -> IO ()-doDump DumpOptions{..} = runConduitRes $ CB.sourceHandle stdin .| conduitGet (get :: Get Pkt) .| case outputformat of+doDump DumpOptions {..} =+ runConduitRes $+ CB.sourceHandle stdin .| conduitGet (get :: Get Pkt) .|+ case outputformat of DumpPretty -> prettyPrinter DumpJSON -> jsonSink DumpYAML -> yamlSink@@ -76,7 +126,8 @@ printer = CL.mapM_ (liftIO . print) prettyPrinter :: (Pretty a, MonadIO m) => ConduitM a Void m ()-prettyPrinter = CL.mapM_ (liftIO . hPutDoc stdout . (<> hardline) . group . pretty)+prettyPrinter =+ CL.mapM_ (liftIO . hPutDoc stdout . (<> hardline) . group . pretty) jsonSink :: (A.ToJSON a, MonadIO m) => ConduitM a Void m () jsonSink = CL.mapM_ (liftIO . BL.putStr . flip BL.snoc 0x0a . A.encode)@@ -85,62 +136,85 @@ yamlSink = CL.mapM_ (liftIO . B.putStr . flip B.snoc 0x0a . Y.encode) doFilter :: FilteringOptions -> IO ()-doFilter fo = runConduitRes $ CB.sourceHandle stdin .| conduitGet (get :: Get Pkt) .| conduitPktFilter (parseExpressions fo) .| CL.map put .| conduitPut .| CB.sinkHandle stdout+doFilter fo =+ runConduitRes $+ CB.sourceHandle stdin .| conduitGet (get :: Get Pkt) .|+ conduitPktFilter (parseExpressions fo) .|+ CL.map put .|+ conduitPut .|+ CB.sinkHandle stdout doP :: Parser DumpOptions-doP = DumpOptions- <$> option (prependAuto "Dump")- ( long "output-format"- <> metavar "FORMAT"- <> value DumpPretty- <> showDefaultWith (drop 4 . show)- <> ofHelp )- where- ofHelp = helpDoc . Just . toAnsiWlPprint $ pretty "output format" <> hardline <> list (map (pretty . drop 4 . show) ofchoices)- ofchoices = [minBound..maxBound] :: [DumpOutputFormat]+doP =+ DumpOptions <$>+ option+ (prependAuto "Dump")+ (long "output-format" <>+ metavar "FORMAT" <>+ value DumpPretty <> showDefaultWith (drop 4 . show) <> ofHelp)+ where+ ofHelp =+ helpDoc . Just . toAnsiWlPprint $+ pretty "output format" <>+ hardline <> list (map (pretty . drop 4 . show) ofchoices)+ ofchoices = [minBound .. maxBound] :: [DumpOutputFormat] foP :: Parser FilteringOptions-foP = FilteringOptions- <$> argument str ( metavar "EXPRESSION" <> filterTargetHelp )- where- filterTargetHelp = helpDoc . Just . toAnsiWlPprint $ pretty "packet filter expression" <+> softline <> pretty "see source for current syntax"+foP =+ FilteringOptions <$> argument str (metavar "EXPRESSION" <> filterTargetHelp)+ where+ filterTargetHelp =+ helpDoc . Just . toAnsiWlPprint $+ pretty "packet filter expression" <+>+ softline <> pretty "see source for current syntax" dispatch :: Command -> IO () dispatch c = (banner' stderr >> hFlush stderr) >> dispatch' c- where- dispatch' (DumpC o) = doDump o- dispatch' DeArmorC = doDeArmor- dispatch' (ArmorC o) = doArmor o- dispatch' (FilterC o) = doFilter o+ where+ dispatch' (DumpC o) = doDump o+ dispatch' DeArmorC = doDeArmor+ dispatch' (ArmorC o) = doArmor o+ dispatch' (FilterC o) = doFilter o main :: IO () main = do- hSetBuffering stderr LineBuffering- customExecParser (prefs showHelpOnError)- (info (helper <*> versioner "hot" <*> cmd)- (headerDoc (Just (toAnsiWlPprint (banner "hot")))- <> progDesc "hOpenPGP OpenPGP-message Tool"- <> footerDoc (Just (toAnsiWlPprint (warranty "hot"))))) >>= dispatch+ hSetBuffering stderr LineBuffering+ customExecParser+ (prefs showHelpOnError)+ (info+ (helper <*> versioner "hot" <*> cmd)+ (headerDoc (Just (toAnsiWlPprint (banner "hot"))) <>+ progDesc "hOpenPGP OpenPGP-message Tool" <>+ footerDoc (Just (toAnsiWlPprint (warranty "hot"))))) >>=+ dispatch cmd :: Parser Command-cmd = hsubparser- ( command "armor" (info ( ArmorC <$> aoP ) ( progDesc "Armor stdin to stdout" ))- <> command "dearmor" (info ( pure DeArmorC ) ( progDesc "Dearmor stdin to stdout" ))- <> command "dump" (info ( DumpC <$> doP ) ( progDesc "Dump OpenPGP packets from stdin" ))- <> command "filter" (info ( FilterC <$> foP ) ( progDesc "Filter some packets from stdin to stdout" ))- )+cmd =+ hsubparser+ (command "armor" (info (ArmorC <$> aoP) (progDesc "Armor stdin to stdout")) <>+ command+ "dearmor"+ (info (pure DeArmorC) (progDesc "Dearmor stdin to stdout")) <>+ command+ "dump"+ (info (DumpC <$> doP) (progDesc "Dump OpenPGP packets from stdin")) <>+ command+ "filter"+ (info+ (FilterC <$> foP)+ (progDesc "Filter some packets from stdin to stdout"))) banner' :: Handle -> IO () banner' h = hPutDoc h (banner "hot" <> hardline <> warranty "hot" <> hardline) -parseExpressions :: FilteringOptions -> FilterPredicates-parseExpressions FilteringOptions{..} = RPFilterPredicate (parseE fExpression)- where- parseE e = either (error . ("filter parse error: "++)) id (parsePExp e)+parseExpressions :: FilteringOptions -> FilterPredicates r a+parseExpressions FilteringOptions {..} = RPFilterPredicate (parseE fExpression)+ where+ parseE e = either (error . ("filter parse error: " ++)) id (parsePExp e) armorTypes :: [(String, ArmorType)]-armorTypes = [- ("message", ArmorMessage)+armorTypes =+ [ ("message", ArmorMessage) , ("pubkeyblock", ArmorPublicKeyBlock) , ("privkeyblock", ArmorPrivateKeyBlock) , ("signature", ArmorSignature)@@ -150,19 +224,32 @@ armorTypeReader = note "unknown armor type" . flip lookup armorTypes aoP :: Parser ArmoringOptions-aoP = ArmoringOptions- <$> optional (strOption (long "comment" <> metavar "COMMENT" <> help "ASCII armor Comment field"))- <*> option (eitherReader armorTypeReader) (long "armor-type" <> metavar "ARMORTYPE" <> armortypeHelp)- where- armortypeHelp = helpDoc . Just . toAnsiWlPprint $ pretty "ASCII armor type" <> softline <> list (map (pretty . fst) armorTypes)+aoP =+ ArmoringOptions <$>+ optional+ (strOption+ (long "comment" <> metavar "COMMENT" <> help "ASCII armor Comment field")) <*>+ option+ (eitherReader armorTypeReader)+ (long "armor-type" <> metavar "ARMORTYPE" <> armortypeHelp)+ where+ armortypeHelp =+ helpDoc . Just . toAnsiWlPprint $+ pretty "ASCII armor type" <>+ softline <> list (map (pretty . fst) armorTypes) -data ArmoringOptions = ArmoringOptions {- comment :: Maybe String- , armortype :: ArmorType-}+data ArmoringOptions =+ ArmoringOptions+ { comment :: Maybe String+ , armortype :: ArmorType+ } doArmor :: ArmoringOptions -> IO ()-doArmor ArmoringOptions{..} = do- m <- runConduitRes $ CB.sourceHandle stdin .| CL.consume- let a = Armor armortype (maybe [] (\x -> [("Comment", x)]) comment) (BL.fromChunks m)- BL.putStr $ AA.encodeLazy [a]+doArmor ArmoringOptions {..} = do+ m <- runConduitRes $ CB.sourceHandle stdin .| CL.consume+ let a =+ Armor+ armortype+ (maybe [] (\x -> [("Comment", x)]) comment)+ (BL.fromChunks m)+ BL.putStr $ AA.encodeLazy [a]