packages feed

morte 1.4.2 → 1.5.0

raw patch · 33 files changed

+2616/−441 lines, 33 filesdep +QuickCheckdep +mtldep +tastydep −manageddep ~Earleydep ~transformersPVP ok

version bump matches the API change (PVP)

Dependencies added: QuickCheck, mtl, tasty, tasty-hunit, tasty-quickcheck

Dependencies removed: managed

Dependency ranges changed: Earley, transformers

API changes (from Hackage documentation)

- Morte.Core: type Context = [(Text, Expr X)]
+ Morte.Context: data Context a
+ Morte.Context: empty :: Context a
+ Morte.Context: insert :: Text -> a -> Context a -> Context a
+ Morte.Context: instance Control.DeepSeq.NFData a => Control.DeepSeq.NFData (Morte.Context.Context a)
+ Morte.Context: instance GHC.Base.Functor Morte.Context.Context
+ Morte.Context: lookup :: Text -> Int -> Context a -> Maybe a
+ Morte.Context: toList :: Context a -> [(Text, a)]
+ Morte.Core: data Context a
- Morte.Core: TypeError :: Context -> Expr X -> TypeMessage -> TypeError
+ Morte.Core: TypeError :: Context (Expr X) -> Expr X -> TypeMessage -> TypeError
- Morte.Core: [context] :: TypeError -> Context
+ Morte.Core: [context] :: TypeError -> Context (Expr X)
- Morte.Core: typeWith :: Context -> Expr X -> Either TypeError (Expr X)
+ Morte.Core: typeWith :: Context (Expr X) -> Expr X -> Either TypeError (Expr X)

Files

+ bench/Main.hs view
@@ -0,0 +1,45 @@+{-# LANGUAGE OverloadedStrings #-}++import Control.Exception (throwIO)+import Criterion.Main (Benchmark, defaultMain, env, bgroup, bench, nf)+import Filesystem.Path.CurrentOS (FilePath)+import Morte.Core (Expr, X)+import Paths_morte (getDataFileName)+import Prelude hiding (FilePath)++import qualified Data.Text.Lazy.IO         as Text+import qualified Filesystem.Path.CurrentOS as Filesystem+import qualified Morte.Core                as Morte+import qualified Morte.Import              as Morte+import qualified Morte.Parser              as Morte++readMorteFile :: FilePath -> IO (Expr X)+readMorteFile filename = do+    str <- getDataFileName (Filesystem.encodeString filename)+    text <- Text.readFile str+    case Morte.exprFromText text of+        Left  e    -> throwIO e+        Right expr -> Morte.load expr++main :: IO ()+main = defaultMain+    [ env srcEnv (\ ~(x0, x1, x2) ->+        bgroup "source"+            [ benchExpr "recursive.mt" x0+            , benchExpr "factorial.mt" x1+            , benchExpr "concat.mt" x2+            ] )+    ]+  where+    srcEnv = do+        x0 <- readMorteFile "bench/src/recursive.mt"+        x1 <- readMorteFile "bench/src/factorial.mt"+        x2 <- readMorteFile "bench/src/concat.mt"+        return (x0, x1, x2)++benchExpr :: FilePath -> Expr X -> Benchmark+benchExpr path expr = bgroup (Filesystem.encodeString path)+    [ bench "normalize" (nf Morte.normalize expr)+    , bench "equality"  (nf (expr ==)       expr)+    , bench "typeOf"    (nf Morte.typeOf    expr)+    ]
+ bench/src/concat.mt view
@@ -0,0 +1,1 @@+λ(strs : ∀(List : *) → ∀(Cons : ∀(head : ∀(B : *) → ∀(N : B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → B) → ∀(tail : List) → List) → ∀(Nil : List) → List) → strs (∀(B : *) → ∀(N : B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → B) (λ(n1 : ∀(B : *) → ∀(N : B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → B) → λ(n2 : ∀(B : *) → ∀(N : B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → ∀(C : B → B) → B) → λ(B : *) → λ(N : B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → n1 B (n2 B N C@255 C@254 C@253 C@252 C@251 C@250 C@249 C@248 C@247 C@246 C@245 C@244 C@243 C@242 C@241 C@240 C@239 C@238 C@237 C@236 C@235 C@234 C@233 C@232 C@231 C@230 C@229 C@228 C@227 C@226 C@225 C@224 C@223 C@222 C@221 C@220 C@219 C@218 C@217 C@216 C@215 C@214 C@213 C@212 C@211 C@210 C@209 C@208 C@207 C@206 C@205 C@204 C@203 C@202 C@201 C@200 C@199 C@198 C@197 C@196 C@195 C@194 C@193 C@192 C@191 C@190 C@189 C@188 C@187 C@186 C@185 C@184 C@183 C@182 C@181 C@180 C@179 C@178 C@177 C@176 C@175 C@174 C@173 C@172 C@171 C@170 C@169 C@168 C@167 C@166 C@165 C@164 C@163 C@162 C@161 C@160 C@159 C@158 C@157 C@156 C@155 C@154 C@153 C@152 C@151 C@150 C@149 C@148 C@147 C@146 C@145 C@144 C@143 C@142 C@141 C@140 C@139 C@138 C@137 C@136 C@135 C@134 C@133 C@132 C@131 C@130 C@129 C@128 C@127 C@126 C@125 C@124 C@123 C@122 C@121 C@120 C@119 C@118 C@117 C@116 C@115 C@114 C@113 C@112 C@111 C@110 C@109 C@108 C@107 C@106 C@105 C@104 C@103 C@102 C@101 C@100 C@99 C@98 C@97 C@96 C@95 C@94 C@93 C@92 C@91 C@90 C@89 C@88 C@87 C@86 C@85 C@84 C@83 C@82 C@81 C@80 C@79 C@78 C@77 C@76 C@75 C@74 C@73 C@72 C@71 C@70 C@69 C@68 C@67 C@66 C@65 C@64 C@63 C@62 C@61 C@60 C@59 C@58 C@57 C@56 C@55 C@54 C@53 C@52 C@51 C@50 C@49 C@48 C@47 C@46 C@45 C@44 C@43 C@42 C@41 C@40 C@39 C@38 C@37 C@36 C@35 C@34 C@33 C@32 C@31 C@30 C@29 C@28 C@27 C@26 C@25 C@24 C@23 C@22 C@21 C@20 C@19 C@18 C@17 C@16 C@15 C@14 C@13 C@12 C@11 C@10 C@9 C@8 C@7 C@6 C@5 C@4 C@3 C@2 C@1 C) C@255 C@254 C@253 C@252 C@251 C@250 C@249 C@248 C@247 C@246 C@245 C@244 C@243 C@242 C@241 C@240 C@239 C@238 C@237 C@236 C@235 C@234 C@233 C@232 C@231 C@230 C@229 C@228 C@227 C@226 C@225 C@224 C@223 C@222 C@221 C@220 C@219 C@218 C@217 C@216 C@215 C@214 C@213 C@212 C@211 C@210 C@209 C@208 C@207 C@206 C@205 C@204 C@203 C@202 C@201 C@200 C@199 C@198 C@197 C@196 C@195 C@194 C@193 C@192 C@191 C@190 C@189 C@188 C@187 C@186 C@185 C@184 C@183 C@182 C@181 C@180 C@179 C@178 C@177 C@176 C@175 C@174 C@173 C@172 C@171 C@170 C@169 C@168 C@167 C@166 C@165 C@164 C@163 C@162 C@161 C@160 C@159 C@158 C@157 C@156 C@155 C@154 C@153 C@152 C@151 C@150 C@149 C@148 C@147 C@146 C@145 C@144 C@143 C@142 C@141 C@140 C@139 C@138 C@137 C@136 C@135 C@134 C@133 C@132 C@131 C@130 C@129 C@128 C@127 C@126 C@125 C@124 C@123 C@122 C@121 C@120 C@119 C@118 C@117 C@116 C@115 C@114 C@113 C@112 C@111 C@110 C@109 C@108 C@107 C@106 C@105 C@104 C@103 C@102 C@101 C@100 C@99 C@98 C@97 C@96 C@95 C@94 C@93 C@92 C@91 C@90 C@89 C@88 C@87 C@86 C@85 C@84 C@83 C@82 C@81 C@80 C@79 C@78 C@77 C@76 C@75 C@74 C@73 C@72 C@71 C@70 C@69 C@68 C@67 C@66 C@65 C@64 C@63 C@62 C@61 C@60 C@59 C@58 C@57 C@56 C@55 C@54 C@53 C@52 C@51 C@50 C@49 C@48 C@47 C@46 C@45 C@44 C@43 C@42 C@41 C@40 C@39 C@38 C@37 C@36 C@35 C@34 C@33 C@32 C@31 C@30 C@29 C@28 C@27 C@26 C@25 C@24 C@23 C@22 C@21 C@20 C@19 C@18 C@17 C@16 C@15 C@14 C@13 C@12 C@11 C@10 C@9 C@8 C@7 C@6 C@5 C@4 C@3 C@2 C@1 C) (λ(B : *) → λ(N : B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → λ(C : B → B) → N)
+ bench/src/factorial.mt view
@@ -0,0 +1,99 @@+(  \(Nat : *)+-> \(Succ : Nat -> Nat)+-> \(Zero : Nat)+-> \(mult : Nat -> Nat -> Nat)+-> \(foldNat : Nat -> forall (r : *) -> (r -> r) -> r -> r)+-> \(Pair : * -> *)+-> \(_P    : forall (a : *) -> a -> a -> Pair a)+-> \(_fst  : forall (a : *) -> Pair a -> a)+-> \(_snd  : forall (a : *) -> Pair a -> a)+-> (  \(NPair : *)+   -> \(P : Nat -> Nat -> NPair)+   -> \(fst : NPair -> Nat)+   -> \(snd : NPair -> Nat)+   -> \(mi  : Nat)+   -> \(n : Nat)+   -> (  \(pfact : NPair -> NPair) +      -> snd (foldNat n NPair pfact (P Zero mi))+      )++      (  \(p : NPair)+      -> (\(sfp : Nat) -> P sfp (mult (snd p) sfp)) (Succ (fst p))+      )+   )++  -- NPair+  (Pair Nat)++  -- P+  (_P Nat)++  -- fst+  (_fst Nat)++  -- snd+  (_snd Nat)++  -- multiplicative identity+  (Succ Zero)++  -- 7+  (Succ (Succ (Succ (Succ (Succ (Succ (Succ Zero)))))))++)++-- Nat+(forall (nat : *) -> (nat -> nat) -> nat -> nat)++-- Succ data constructor+(  \(n : forall (nat : *) -> (nat -> nat) -> nat -> nat)+-> \(nat : *)+-> \(Succ : nat -> nat)+-> \(Zero : nat)+-> Succ (n nat Succ Zero)+)++-- Zero data constructor+(  \(nat : *)+-> \(Succ : nat -> nat)+-> \(Zero : nat)+-> Zero+)++-- mult+(  \(a : |~| (nat : *) -> (nat -> nat) -> nat -> nat)+-> \(b : forall (nat : *) -> (nat -> nat) -> nat -> nat)+-> \(nat : *)+-> \(Succ : nat -> nat)+-> \(Zero : nat)+-> (a nat) (b nat Succ) Zero+)++-- foldNat+(  \(n : forall (r : *) -> (r -> r) -> r -> r)+-> n+)++-- MonoPair+(\(a : *) -> forall (r : *) -> (a -> a -> r) -> r)++-- P+(  \(a : *)+-> \(va : a)+-> \(vb : a)+-> \(r : *)+-> \(Pair : a -> a -> r)+-> Pair va vb+)++-- fst+(  \(a : *)+-> \(p : forall (r : *) -> (a -> a -> r) -> r)+-> p a (\(x : a) -> \(_ : a) -> x)+)++-- snd+(  \(a : *)+-> \(p : forall (r : *) -> (a -> a -> r) -> r)+-> p a (\(_ : a) -> \(x : a) -> x)+)
+ bench/src/recursive.mt view
@@ -0,0 +1,186 @@+-- "Free" variables+(   \(String : *   )+->  \(U : *)+->  \(Unit : U)++    -- Simple prelude+->  (   \(Nat : *)+    ->  \(zero : Nat)+    ->  \(one : Nat)+    ->  \((+) : Nat -> Nat -> Nat)+    ->  \((*) : Nat -> Nat -> Nat)+    ->  \(foldNat : Nat -> forall (a : *) -> (a -> a) -> a -> a)+    ->  \(IO : * -> *)+    ->  \(return : forall (a : *) -> a -> IO a)+    ->  \((>>=)+        :   forall (a : *)+        ->  forall (b : *)+        ->  IO a+        ->  (a -> IO b)+        ->  IO b+        )+    ->  \(putStrLn : String -> IO U)+    ->  \(getLine : IO String)++        -- Derived functions+    ->  (   \((>>) : IO U -> IO U -> IO U)+        ->  \(two   : Nat)+        ->  \(three : Nat)+        ->  \(four  : Nat)+        ->  \(five  : Nat)+        ->  \(six   : Nat)+        ->  \(seven : Nat)+        ->  \(eight : Nat)+        ->  \(nine  : Nat)+        ->  \(ten   : Nat)+        ->  (   \(replicateM_ : Nat -> IO U -> IO U)+            ->  \(ninetynine : Nat)+            ->  replicateM_ ninetynine ((>>=) String U getLine putStrLn)+            )++            -- replicateM_+            (   \(n : Nat)+            ->  \(io : IO U)+            ->  foldNat n (IO U) ((>>) io) (return U Unit)+            )++            -- ninetynine+            ((+) ((*) nine ten) nine)+        )++        -- (>>)+        (   \(m : IO U)+        ->  \(n : IO U)+        ->  (>>=) U U m (\(_ : U) -> n)+        )++        -- two+        ((+) one one)++        -- three+        ((+) one ((+) one one))++        -- four+        ((+) one ((+) one ((+) one one)))++        -- five+        ((+) one ((+) one ((+) one ((+) one one))))++        -- six+        ((+) one ((+) one ((+) one ((+) one ((+) one one)))))++        -- seven+        ((+) one ((+) one ((+) one ((+) one ((+) one ((+) one one))))))++        -- eight+        ((+) one ((+) one ((+) one ((+) one ((+) one ((+) one ((+) one one)))))))+        -- nine+        ((+) one ((+) one ((+) one ((+) one ((+) one ((+) one ((+) one ((+) one one))))))))++        -- ten+        ((+) one ((+) one ((+) one ((+) one ((+) one ((+) one ((+) one ((+) one ((+) one one)))))))))+    )++    -- Nat+    (   forall (a : *)+    ->  (a -> a)+    ->  a+    ->  a+    )++    -- zero+    (   \(a : *)+    ->  \(Succ : a -> a)+    ->  \(Zero : a)+    ->  Zero+    )++    -- one+    (   \(a : *)+    ->  \(Succ : a -> a)+    ->  \(Zero : a)+    ->  Succ Zero+    )++    -- (+)+    (   \(m : forall (a : *) -> (a -> a) -> a -> a)+    ->  \(n : forall (a : *) -> (a -> a) -> a -> a)+    ->  \(a : *)+    ->  \(Succ : a -> a)+    ->  \(Zero : a)+    ->  m a Succ (n a Succ Zero)+    )++    -- (*)+    (   \(m : forall (a : *) -> (a -> a) -> a -> a)+    ->  \(n : forall (a : *) -> (a -> a) -> a -> a)+    ->  \(a : *)+    ->  \(Succ : a -> a)+    ->  \(Zero : a)+    ->  m a (n a Succ) Zero+    )++    -- foldNat+    (   \(n : forall (a : *) -> (a -> a) -> a -> a)+    ->  n+    )++    -- IO+    (   \(r : *)+    ->  forall (x : *)+    ->  (String -> x -> x)+    ->  ((String -> x) -> x)+    ->  (r -> x)+    ->  x+    )++    -- return+    (   \(a : *)+    ->  \(va : a)+    ->  \(x : *)+    ->  \(PutStrLn : String -> x -> x)+    ->  \(GetLine : (String -> x) -> x)+    ->  \(Return : a -> x)+    ->  Return va+    )++    -- (>>=)+    (   \(a : *)+    ->  \(b : *)+    ->  \(m : forall (x : *)+        ->  (String -> x -> x)+        ->  ((String -> x) -> x)+        ->  (a -> x)+        ->  x+        )+    ->  \(f : a+        ->  forall (x : *)+        -> (String -> x -> x)+        -> ((String -> x) -> x)+        -> (b -> x)+        -> x+        )+    ->  \(x : *)+    ->  \(PutStrLn : String -> x -> x)+    ->  \(GetLine : (String -> x) -> x)+    ->  \(Return : b -> x)+    ->  m x PutStrLn GetLine (\(va : a) -> f va x PutStrLn GetLine Return)+    )++    -- putStrLn+    (   \(str : String)+    ->  \(x : *)+    ->  \(PutStrLn : String -> x -> x  )+    ->  \(GetLine  : (String -> x) -> x)+    ->  \(Return   : U -> x)+    ->  PutStrLn str (Return Unit)+    )++    -- getLine+    (   \(x : *)+    ->  \(PutStrLn : String -> x -> x  )+    ->  \(GetLine  : (String -> x) -> x)+    ->  \(Return   : String -> x)+    -> GetLine Return+    )+)
− benchmarks/Bench.hs
@@ -1,59 +0,0 @@-module Main (main) where--import Morte.Core-import Morte.Import (load)-import Morte.Parser (ParseError, exprFromText)--import Control.Monad     (foldM)-import Criterion.Main    (Benchmark, defaultMain, env, bgroup, bench, nf)-import Data.Text.Lazy    (Text)-import qualified Data.Text.Lazy as T-import Data.Text.Lazy.IO (readFile, hPutStrLn)-import GHC.IO.Handle.FD  (stderr)-import Paths_morte       (getDataFileName)-import Prelude hiding    (readFile)--benchFilenames :: [String]-benchFilenames = [-      "recursive.mt"-    , "factorial.mt"-    ]--readMtFile :: String -> IO (String, Text)-readMtFile filename = do-    path   <- getDataFileName filename-    mtFile <- readFile path-    return (filename, mtFile)--partitionExpr-    :: ([(String, ParseError)],[(String, Expr X)])-    -> (String, Text)-    -> IO ([(String, ParseError)],[(String, Expr X)])-partitionExpr (pe, ps) (filename, contents) =-    case exprFromText contents of-        Left  perr -> return ((filename,perr):pe,ps)-        Right expr -> do-            expr' <- load expr-            return (pe,(filename,expr'):ps)--pprFileParseError :: (String, ParseError) -> Text-pprFileParseError (fn,pe) = T.unlines [T.pack fn, pretty pe]--srcEnv :: IO [(String, Expr X)]-srcEnv = do-    mtFiles <- mapM readMtFile benchFilenames-    (pe,ps) <- foldM partitionExpr ([],[]) mtFiles-    mapM_ (hPutStrLn stderr . pprFileParseError) pe-    return ps--main :: IO ()-main = defaultMain [-      env srcEnv $ bgroup "source" . map benchExpr-    ]--benchExpr :: (String, Expr X) -> Benchmark-benchExpr (tag,expr) = bgroup tag [-      bench "normalize" $ nf normalize expr-    , bench "equality"  $ nf (expr ==) expr-    , bench "typeOf"    $ nf typeOf    expr-    ]
− benchmarks/src/factorial.mt
@@ -1,99 +0,0 @@-(  \(Nat : *)--> \(Succ : Nat -> Nat)--> \(Zero : Nat)--> \(mult : Nat -> Nat -> Nat)--> \(foldNat : Nat -> forall (r : *) -> (r -> r) -> r -> r)--> \(Pair : * -> *)--> \(_P    : forall (a : *) -> a -> a -> Pair a)--> \(_fst  : forall (a : *) -> Pair a -> a)--> \(_snd  : forall (a : *) -> Pair a -> a)--> (  \(NPair : *)-   -> \(P : Nat -> Nat -> NPair)-   -> \(fst : NPair -> Nat)-   -> \(snd : NPair -> Nat)-   -> \(mi  : Nat)-   -> \(n : Nat)-   -> (  \(pfact : NPair -> NPair) -      -> snd (foldNat n NPair pfact (P Zero mi))-      )--      (  \(p : NPair)-      -> (\(sfp : Nat) -> P sfp (mult (snd p) sfp)) (Succ (fst p))-      )-   )--  -- NPair-  (Pair Nat)--  -- P-  (_P Nat)--  -- fst-  (_fst Nat)--  -- snd-  (_snd Nat)--  -- multiplicative identity-  (Succ Zero)--  -- 7-  (Succ (Succ (Succ (Succ (Succ (Succ (Succ Zero)))))))--)---- Nat-(forall (nat : *) -> (nat -> nat) -> nat -> nat)---- Succ data constructor-(  \(n : forall (nat : *) -> (nat -> nat) -> nat -> nat)--> \(nat : *)--> \(Succ : nat -> nat)--> \(Zero : nat)--> Succ (n nat Succ Zero)-)---- Zero data constructor-(  \(nat : *)--> \(Succ : nat -> nat)--> \(Zero : nat)--> Zero-)---- mult-(  \(a : |~| (nat : *) -> (nat -> nat) -> nat -> nat)--> \(b : forall (nat : *) -> (nat -> nat) -> nat -> nat)--> \(nat : *)--> \(Succ : nat -> nat)--> \(Zero : nat)--> (a nat) (b nat Succ) Zero-)---- foldNat-(  \(n : forall (r : *) -> (r -> r) -> r -> r)--> n-)---- MonoPair-(\(a : *) -> forall (r : *) -> (a -> a -> r) -> r)---- P-(  \(a : *)--> \(va : a)--> \(vb : a)--> \(r : *)--> \(Pair : a -> a -> r)--> Pair va vb-)---- fst-(  \(a : *)--> \(p : forall (r : *) -> (a -> a -> r) -> r)--> p a (\(x : a) -> \(_ : a) -> x)-)---- snd-(  \(a : *)--> \(p : forall (r : *) -> (a -> a -> r) -> r)--> p a (\(_ : a) -> \(x : a) -> x)-)
− benchmarks/src/recursive.mt
@@ -1,186 +0,0 @@--- "Free" variables-(   \(String : *   )-->  \(U : *)-->  \(Unit : U)--    -- Simple prelude-->  (   \(Nat : *)-    ->  \(zero : Nat)-    ->  \(one : Nat)-    ->  \((+) : Nat -> Nat -> Nat)-    ->  \((*) : Nat -> Nat -> Nat)-    ->  \(foldNat : Nat -> forall (a : *) -> (a -> a) -> a -> a)-    ->  \(IO : * -> *)-    ->  \(return : forall (a : *) -> a -> IO a)-    ->  \((>>=)-        :   forall (a : *)-        ->  forall (b : *)-        ->  IO a-        ->  (a -> IO b)-        ->  IO b-        )-    ->  \(putStrLn : String -> IO U)-    ->  \(getLine : IO String)--        -- Derived functions-    ->  (   \((>>) : IO U -> IO U -> IO U)-        ->  \(two   : Nat)-        ->  \(three : Nat)-        ->  \(four  : Nat)-        ->  \(five  : Nat)-        ->  \(six   : Nat)-        ->  \(seven : Nat)-        ->  \(eight : Nat)-        ->  \(nine  : Nat)-        ->  \(ten   : Nat)-        ->  (   \(replicateM_ : Nat -> IO U -> IO U)-            ->  \(ninetynine : Nat)-            ->  replicateM_ ninetynine ((>>=) String U getLine putStrLn)-            )--            -- replicateM_-            (   \(n : Nat)-            ->  \(io : IO U)-            ->  foldNat n (IO U) ((>>) io) (return U Unit)-            )--            -- ninetynine-            ((+) ((*) nine ten) nine)-        )--        -- (>>)-        (   \(m : IO U)-        ->  \(n : IO U)-        ->  (>>=) U U m (\(_ : U) -> n)-        )--        -- two-        ((+) one one)--        -- three-        ((+) one ((+) one one))--        -- four-        ((+) one ((+) one ((+) one one)))--        -- five-        ((+) one ((+) one ((+) one ((+) one one))))--        -- six-        ((+) one ((+) one ((+) one ((+) one ((+) one one)))))--        -- seven-        ((+) one ((+) one ((+) one ((+) one ((+) one ((+) one one))))))--        -- eight-        ((+) one ((+) one ((+) one ((+) one ((+) one ((+) one ((+) one one)))))))-        -- nine-        ((+) one ((+) one ((+) one ((+) one ((+) one ((+) one ((+) one ((+) one one))))))))--        -- ten-        ((+) one ((+) one ((+) one ((+) one ((+) one ((+) one ((+) one ((+) one ((+) one one)))))))))-    )--    -- Nat-    (   forall (a : *)-    ->  (a -> a)-    ->  a-    ->  a-    )--    -- zero-    (   \(a : *)-    ->  \(Succ : a -> a)-    ->  \(Zero : a)-    ->  Zero-    )--    -- one-    (   \(a : *)-    ->  \(Succ : a -> a)-    ->  \(Zero : a)-    ->  Succ Zero-    )--    -- (+)-    (   \(m : forall (a : *) -> (a -> a) -> a -> a)-    ->  \(n : forall (a : *) -> (a -> a) -> a -> a)-    ->  \(a : *)-    ->  \(Succ : a -> a)-    ->  \(Zero : a)-    ->  m a Succ (n a Succ Zero)-    )--    -- (*)-    (   \(m : forall (a : *) -> (a -> a) -> a -> a)-    ->  \(n : forall (a : *) -> (a -> a) -> a -> a)-    ->  \(a : *)-    ->  \(Succ : a -> a)-    ->  \(Zero : a)-    ->  m a (n a Succ) Zero-    )--    -- foldNat-    (   \(n : forall (a : *) -> (a -> a) -> a -> a)-    ->  n-    )--    -- IO-    (   \(r : *)-    ->  forall (x : *)-    ->  (String -> x -> x)-    ->  ((String -> x) -> x)-    ->  (r -> x)-    ->  x-    )--    -- return-    (   \(a : *)-    ->  \(va : a)-    ->  \(x : *)-    ->  \(PutStrLn : String -> x -> x)-    ->  \(GetLine : (String -> x) -> x)-    ->  \(Return : a -> x)-    ->  Return va-    )--    -- (>>=)-    (   \(a : *)-    ->  \(b : *)-    ->  \(m : forall (x : *)-        ->  (String -> x -> x)-        ->  ((String -> x) -> x)-        ->  (a -> x)-        ->  x-        )-    ->  \(f : a-        ->  forall (x : *)-        -> (String -> x -> x)-        -> ((String -> x) -> x)-        -> (b -> x)-        -> x-        )-    ->  \(x : *)-    ->  \(PutStrLn : String -> x -> x)-    ->  \(GetLine : (String -> x) -> x)-    ->  \(Return : b -> x)-    ->  m x PutStrLn GetLine (\(va : a) -> f va x PutStrLn GetLine Return)-    )--    -- putStrLn-    (   \(str : String)-    ->  \(x : *)-    ->  \(PutStrLn : String -> x -> x  )-    ->  \(GetLine  : (String -> x) -> x)-    ->  \(Return   : U -> x)-    ->  PutStrLn str (Return Unit)-    )--    -- getLine-    (   \(x : *)-    ->  \(PutStrLn : String -> x -> x  )-    ->  \(GetLine  : (String -> x) -> x)-    ->  \(Return   : String -> x)-    -> GetLine Return-    )-)
+ dist/build/Morte/Lexer.hs view
@@ -0,0 +1,420 @@+{-# LANGUAGE CPP,MagicHash #-}+{-# LINE 1 "src/Morte/Lexer.x" #-}++{-# LANGUAGE OverloadedStrings #-}++-- | Lexing logic for the Morte language+module Morte.Lexer (+    -- * Lexer+    lexExpr,++    -- * Types+    Token(..),+    Position(..),+    LocatedToken(..)+    ) where++import Control.Monad.Trans.State.Strict (State, get)+import Data.Bits (shiftR, (.&.))+import Data.Char (digitToInt, ord)+import Data.Text.Lazy (Text)+import qualified Data.Text.Lazy as Text+import Data.Word (Word8)+import Filesystem.Path.CurrentOS (FilePath)+import qualified Filesystem.Path.CurrentOS as Filesystem+import Lens.Micro.Mtl ((.=), (+=))+import Pipes (Producer, for, lift, yield)+import Prelude hiding (FilePath)+++#if __GLASGOW_HASKELL__ >= 603+#include "ghcconfig.h"+#elif defined(__GLASGOW_HASKELL__)+#include "config.h"+#endif+#if __GLASGOW_HASKELL__ >= 503+import Data.Array+import Data.Char (ord)+import Data.Array.Base (unsafeAt)+#else+import Array+import Char (ord)+#endif+#if __GLASGOW_HASKELL__ >= 503+import GHC.Exts+#else+import GlaExts+#endif+alex_base :: AlexAddr+alex_base = AlexA# "\xf8\xff\xff\xff\xd9\xff\xff\xff\x66\xff\xff\xff\x52\x00\x00\x00\x5b\x00\x00\x00\xdb\x00\x00\x00\x5b\x01\x00\x00\xdb\x01\x00\x00\x5b\x02\x00\x00\xdb\x02\x00\x00\x5b\x03\x00\x00\xdb\x03\x00\x00\x00\x00\x00\x00\x4c\x04\x00\x00\x00\x00\x00\x00\xbd\x04\x00\x00\x00\x00\x00\x00\x2e\x05\x00\x00\x00\x00\x00\x00\x9f\x05\x00\x00\x00\x00\x00\x00\xe0\x05\x00\x00\x00\x00\x00\x00\x21\x06\x00\x00\x00\x00\x00\x00\x62\x06\x00\x00\x8a\xff\xff\xff\x83\xff\xff\xff\x00\x00\x00\x00\xa3\x06\x00\x00\xa3\x07\x00\x00\x63\x07\x00\x00\x00\x00\x00\x00\x5a\x08\x00\x00\x5a\x09\x00\x00\xbb\x07\x00\x00\x00\x00\x00\x00\xda\x09\x00\x00\x9a\x09\x00\x00\x00\x00\x00\x00\x6c\xff\xff\xff\x8d\xff\xff\xff\x8e\xff\xff\xff\x7c\xff\xff\xff\x9a\x0a\x00\x00\x5a\x0a\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x50\x0b\x00\x00\x3a\x0b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3b\x0b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x0c\x00\x00\xe1\xff\xff\xff\x00\x00\x00\x00\x6b\x0c\x00\x00\xb6\x0c\x00\x00\x01\x0d\x00\x00\x00\x00\x00\x00\x4c\x0d\x00\x00\x97\x0d\x00\x00\xe2\x0d\x00\x00\x2d\x0e\x00\x00\x78\x0e\x00\x00\x53\x00\x00\x00\xea\x0e\x00\x00\xe1\x0f\x00\x00\xd8\x10\x00\x00\xcf\x11\x00\x00\xc6\x12\x00\x00\xbd\x13\x00\x00\xb4\x14\x00\x00\xab\x15\x00\x00\xa2\x16\x00\x00\x99\x17\x00\x00\x90\x18\x00\x00\x87\x19\x00\x00\x7e\x1a\x00\x00\x75\x1b\x00\x00"#++alex_table :: AlexAddr+alex_table = AlexA# "\x00\x00\x2f\x00\x30\x00\x2f\x00\x2f\x00\x2f\x00\x31\x00\x37\x00\x2a\x00\x2b\x00\x3a\x00\x29\x00\x3a\x00\x3a\x00\x39\x00\x2f\x00\x3a\x00\x2f\x00\x2f\x00\x2f\x00\x00\x00\x00\x00\x00\x00\x39\x00\x2f\x00\x02\x00\x00\x00\x21\x00\x00\x00\x00\x00\x00\x00\x00\x00\x32\x00\x33\x00\x35\x00\x00\x00\x00\x00\x01\x00\x2f\x00\x3d\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x34\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x36\x00\x42\x00\x3e\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x00\x00\x3c\x00\x00\x00\x00\x00\x42\x00\x00\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x40\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x03\x00\x1a\x00\x03\x00\x03\x00\x03\x00\x03\x00\x00\x00\x00\x00\x41\x00\x03\x00\x03\x00\x00\x00\x03\x00\x03\x00\x03\x00\x00\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x00\x00\x03\x00\x03\x00\x03\x00\x03\x00\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\x03\x00\x00\x00\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\x28\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1b\x00\x2c\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x25\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x22\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x1e\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x04\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x05\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x06\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x07\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x15\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\x17\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\x19\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\x1d\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\x1f\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\x23\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\x26\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x1e\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x1f\x00\x07\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x15\x00\x0b\x00\x0c\x00\x0c\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x03\x00\x00\x00\x03\x00\x03\x00\x03\x00\x03\x00\x00\x00\x00\x00\x00\x00\x03\x00\x03\x00\x00\x00\x03\x00\x03\x00\x03\x00\x00\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x00\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x00\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x03\x00\x00\x00\x03\x00\x00\x00\x42\x00\x00\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x03\x00\x00\x00\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2c\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2d\x00\x04\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1d\x00\x08\x00\x12\x00\x12\x00\x12\x00\x13\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x00\x00\x00\x00\x00\x00\x00\x00\x42\x00\x00\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x46\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x00\x00\x00\x00\x00\x00\x00\x00\x42\x00\x00\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x00\x00\x00\x00\x00\x00\x00\x00\x42\x00\x00\x00\x44\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x00\x00\x00\x00\x00\x00\x00\x00\x42\x00\x00\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x43\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x00\x00\x00\x00\x00\x00\x00\x00\x42\x00\x00\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x00\x00\x00\x00\x00\x00\x00\x00\x42\x00\x00\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x3f\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x00\x00\x00\x00\x00\x00\x00\x00\x42\x00\x00\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x45\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x00\x00\x00\x00\x00\x00\x00\x00\x42\x00\x00\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x3b\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x38\x00\x42\x00\x42\x00\x00\x00\x00\x00\x00\x00\x00\x00\x42\x00\x00\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x25\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x26\x00\x05\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x19\x00\x09\x00\x10\x00\x10\x00\x10\x00\x11\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x22\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x23\x00\x06\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x17\x00\x0a\x00\x0e\x00\x0e\x00\x0e\x00\x0f\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x55\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x1e\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x1f\x00\x07\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x15\x00\x0b\x00\x0c\x00\x0c\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x54\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x1e\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x1f\x00\x07\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x15\x00\x0b\x00\x0c\x00\x0c\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x1e\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x1f\x00\x07\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x15\x00\x0b\x00\x0c\x00\x0c\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x1e\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x1f\x00\x07\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x15\x00\x0b\x00\x0c\x00\x0c\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x1e\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x1f\x00\x07\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x15\x00\x0b\x00\x0c\x00\x0c\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x50\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\x1e\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x1f\x00\x07\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x15\x00\x0b\x00\x0c\x00\x0c\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x51\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\x1e\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x1f\x00\x07\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x15\x00\x0b\x00\x0c\x00\x0c\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x52\x00\x00\x00\x00\x00\x00\x00\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\x1e\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x1f\x00\x07\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x15\x00\x0b\x00\x0c\x00\x0c\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x53\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x1e\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x1f\x00\x07\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x15\x00\x0b\x00\x0c\x00\x0c\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x1e\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x1f\x00\x07\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x15\x00\x0b\x00\x0c\x00\x0c\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x22\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x23\x00\x06\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x17\x00\x0a\x00\x0e\x00\x0e\x00\x0e\x00\x0f\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x25\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x26\x00\x05\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x19\x00\x09\x00\x10\x00\x10\x00\x10\x00\x11\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"#++alex_check :: AlexAddr+alex_check = AlexA# "\xff\xff\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x2d\x00\xa1\x00\x7e\x00\x86\x00\x7c\x00\x88\x00\xa0\x00\x80\x00\x92\x00\x09\x00\x2f\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\x3e\x00\x20\x00\x96\x00\xff\xff\x23\x00\xff\xff\xff\xff\xff\xff\xff\xff\x28\x00\x29\x00\x2a\x00\xff\xff\xff\xff\x2d\x00\x20\x00\xbb\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\x5c\x00\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x21\x00\x7c\x00\x23\x00\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\x29\x00\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5c\x00\xff\xff\x5e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xce\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7c\x00\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe2\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\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\x68\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\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\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\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\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\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5c\x00\xff\xff\x5e\x00\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7c\x00\xff\xff\x7e\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\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\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x74\x00\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\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x74\x00\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\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x70\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3a\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\x73\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\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3a\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\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\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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"#++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\x14\x00\x14\x00\x16\x00\x16\x00\x18\x00\x18\x00\x1c\x00\x1c\x00\x20\x00\x20\x00\x24\x00\x24\x00\x27\x00\x27\x00\xff\xff\xff\xff\x2e\x00\x2e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x49\x00\x49\x00\x49\x00\x48\x00\x48\x00\x48\x00\xff\xff\xff\xff\xff\xff\xff\xff\x31\x00\x31\x00\x31\x00\xff\xff\xff\xff\x31\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\x48\x00\x49\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x4e\x00\x49\x00\x48\x00"#++alex_accept = listArray (0::Int,85) [AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,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 (alex_action_1),AlexAccSkip,AlexAcc (alex_action_3),AlexAcc (alex_action_4),AlexAcc (alex_action_5),AlexAcc (alex_action_6),AlexAcc (alex_action_7),AlexAcc (alex_action_8),AlexAcc (alex_action_8),AlexAcc (alex_action_9),AlexAcc (alex_action_10),AlexAcc (alex_action_10),AlexAcc (alex_action_11),AlexAcc (alex_action_11),AlexAcc (alex_action_12),AlexAcc (alex_action_12),AlexAcc (alex_action_12),AlexAcc (alex_action_12),AlexAcc (alex_action_12),AlexAcc (alex_action_12),AlexAcc (alex_action_12),AlexAcc (alex_action_12),AlexAcc (alex_action_12),AlexAcc (alex_action_13),AlexAcc (alex_action_14),AlexAcc (alex_action_15),AlexAcc (alex_action_16),AlexAcc (alex_action_16),AlexAcc (alex_action_16),AlexAcc (alex_action_16),AlexAcc (alex_action_16),AlexAcc (alex_action_16),AlexAcc (alex_action_16),AlexAcc (alex_action_16),AlexAcc (alex_action_16),AlexAcc (alex_action_16),AlexAcc (alex_action_16),AlexAcc (alex_action_16)]+{-# LINE 61 "src/Morte/Lexer.x" #-}+++toInt :: Text -> Int+toInt = Text.foldl' (\x c -> 10 * x + digitToInt c) 0++toUrl :: Text -> String+toUrl = Text.unpack . Text.drop 1++toFile :: Text -> FilePath+toFile = Filesystem.fromText . Text.toStrict . Text.drop 1++-- This was lifted almost intact from the @alex@ source code+encode :: Char -> (Word8, [Word8])+encode c = (fromIntegral h, map fromIntegral t)+  where+    (h, t) = go (ord c)++    go n+        | n <= 0x7f   = (n, [])+        | n <= 0x7ff  = (0xc0 + (n `shiftR` 6), [0x80 + n .&. 0x3f])+        | n <= 0xffff =+            (   0xe0 + (n `shiftR` 12)+            ,   [   0x80 + ((n `shiftR` 6) .&. 0x3f)+                ,   0x80 + n .&. 0x3f+                ]+            )+        | otherwise   =+            (   0xf0 + (n `shiftR` 18)+            ,   [   0x80 + ((n `shiftR` 12) .&. 0x3f)+                ,   0x80 + ((n `shiftR` 6) .&. 0x3f)+                ,   0x80 + n .&. 0x3f+                ]+            )++-- | The cursor's location while lexing the text+data Position = P+    { lineNo    :: {-# UNPACK #-} !Int+    , columnNo  :: {-# UNPACK #-} !Int+    } deriving (Show)++-- line :: Lens' Position Int+line :: Functor f => (Int -> f Int) -> Position -> f Position+line k (P l c) = fmap (\l' -> P l' c) (k l)++-- column :: Lens' Position Int+column :: Functor f => (Int -> f Int) -> Position -> f Position+column k (P l c) = fmap (\c' -> P l c') (k c)++{- @alex@ does not provide a `Text` wrapper, so the following code just modifies+   the code from their @basic@ wrapper to work with `Text`++   I could not get the @basic-bytestring@ wrapper to work; it does not correctly+   recognize Unicode regular expressions.+-}+data AlexInput = AlexInput+    { prevChar  :: Char+    , currBytes :: [Word8]+    , currInput :: Text+    }++alexGetByte :: AlexInput -> Maybe (Word8,AlexInput)+alexGetByte (AlexInput c bytes text) = case bytes of+    b:ytes -> Just (b, AlexInput c ytes text)+    []     -> case Text.uncons text of+        Nothing       -> Nothing+        Just (t, ext) -> case encode t of+            (b, ytes) -> Just (b, AlexInput t ytes ext)++alexInputPrevChar :: AlexInput -> Char+alexInputPrevChar = prevChar++{-| Convert a text representation of an expression into a stream of tokens++    `lexExpr` keeps track of position and returns the remainder of the input if+    lexing fails.+-}+lexExpr :: Text -> Producer LocatedToken (State Position) (Maybe Text)+lexExpr text = for (go (AlexInput '\n' [] text)) tag+  where+    tag token = do+        pos <- lift get+        yield (LocatedToken token pos)++    go input = case alexScan input 0 of+        AlexEOF                        -> return Nothing+        AlexError (AlexInput _ _ text) -> return (Just text)+        AlexSkip  input' len           -> do+            lift (column += len)+            go input'+        AlexToken input' len act       -> do+            act (Text.take (fromIntegral len) (currInput input))+            lift (column += len)+            go input'++-- | A `Token` augmented with `Position` information+data LocatedToken = LocatedToken+    { token    ::                !Token+    , position :: {-# UNPACK #-} !Position+    } deriving (Show)++-- | Token type, used to communicate between the lexer and parser+data Token+    = OpenParen+    | CloseParen+    | Colon+    | At+    | Star+    | Box+    | Arrow+    | Lambda+    | Pi+    | Label Text+    | Number Int+    | File FilePath+    | URL String+    | EOF+    deriving (Eq, Show)++alex_action_1 =  \_    -> lift (do+                                            line   += 1+                                            column .= 0 )                      +alex_action_3 =  \_    -> yield OpenParen             +alex_action_4 =  \_    -> yield CloseParen            +alex_action_5 =  \_    -> yield Colon                 +alex_action_6 =  \_    -> yield Star                  +alex_action_7 =  \_    -> yield At                    +alex_action_8 =  \_    -> yield Box                   +alex_action_9 =  \_    -> yield Arrow                 +alex_action_10 =  \_    -> yield Pi                    +alex_action_11 =  \_    -> yield Lambda                +alex_action_12 =  \text -> yield (Label text)          +alex_action_13 =  \text -> yield (Number (toInt text)) +alex_action_14 =  \text -> yield (URL (toUrl text))    +alex_action_15 =  \text -> yield (URL (toUrl text))    +alex_action_16 =  \text -> yield (File (toFile text))  +{-# LINE 1 "templates/GenericTemplate.hs" #-}+{-# LINE 1 "templates/GenericTemplate.hs" #-}+{-# LINE 1 "<command-line>" #-}++++++++# 1 "/usr/include/stdc-predef.h" 1 3 4++# 17 "/usr/include/stdc-predef.h" 3 4++++++++++++++++++++# 47 "/usr/include/stdc-predef.h" 3 4++# 59 "/usr/include/stdc-predef.h" 3 4+++++++++{-# LINE 7 "<command-line>" #-}+{-# LINE 1 "templates/GenericTemplate.hs" #-}+-- -----------------------------------------------------------------------------+-- ALEX TEMPLATE+--+-- This code is in the PUBLIC DOMAIN; you may copy it freely and use+-- it for any purpose whatsoever.++-- -----------------------------------------------------------------------------+-- INTERNALS and main scanner engine++{-# LINE 21 "templates/GenericTemplate.hs" #-}++++++-- 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+{-# LINE 51 "templates/GenericTemplate.hs" #-}+++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 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))+{-# LINE 198 "templates/GenericTemplate.hs" #-}++data AlexLastAcc a+  = AlexNone+  | AlexLastAcc a !AlexInput !Int+  | AlexLastSkip  !AlexInput !Int++instance Functor AlexLastAcc where+    fmap f AlexNone = AlexNone+    fmap f (AlexLastAcc x y z) = AlexLastAcc (f x) y z+    fmap f (AlexLastSkip x y) = AlexLastSkip x y++data AlexAcc a user+  = AlexAccNone+  | AlexAcc a+  | AlexAccSkip+{-# LINE 242 "templates/GenericTemplate.hs" #-}++-- used by wrappers+iUnbox (I# (i)) = i
exec/Main.hs view
@@ -2,6 +2,7 @@  import Control.Exception (Exception, throwIO) import Data.Monoid (mempty)+import Data.Traversable import qualified Data.Text.Lazy.IO as Text import Morte.Core (typeOf, pretty, normalize) import Morte.Parser (exprFromText)@@ -15,20 +16,85 @@ throws (Left  e) = throwIO e throws (Right r) = return r +data Mode = Default | Resolve | TypeCheck | Normalize++parser :: Parser Mode+parser+    =   subparser+        (   command "resolve"+            (info (helper <*> pure Resolve)+                (   fullDesc+                <>  header "morte resolve - Resolve Morte code"+                <>  progDesc "Transitively replace all remote paths and URLs \+                             \with the code that they refer to, reading the\+                             \program from standard input and writing the \+                             \fully resolved program to standard output."+                )+            )+        <>  metavar "resolve"+        )+    <|> subparser+        (   command "typecheck"+            (   info (helper <*> pure TypeCheck)+                (   fullDesc+                <>  header "morte typecheck - Type-check Morte code"+                <>  progDesc "Verify that Morte code is well-formed by \+                             \type-checking the program, reading the program \+                             \from standard input and writing the program's \+                             \inferred type to standard output."+                ) )+        <>  metavar "typecheck" )+    <|> subparser+        (   command "normalize"+            (   info (helper <*> pure Normalize)+                (   fullDesc+                <>  header "morte normalize - Normalize Morte code"+                <>  progDesc "Reduce Morte code to normal form using \+                             \β-reduction and η-reduction, reading the program \+                             \from standard input and writing the normalized \+                             \program to standard output."+                ) )+        <>  metavar "normalize"+        )+    <|> pure Default+ main :: IO () main = do-    execParser $ info (helper <*> pure ())+    mode <- execParser $ info (helper <*> parser)          (   fullDesc         <>  header "morte - A bare-bones calculus of constructions"-        <>  progDesc "Type-check and normalize a Morte program, reading the \-                     \program from standard input, writing the program's type \-                     \to standard error, and writing the normalized program to \-                     \standard output."+        <>  progDesc "Type-check, resolve, and normalize a Morte program, \+                     \reading the program from standard input, writing the \+                     \program's normalized type to standard error, and writing \+                     \the normalized program to standard output."         )-    inText   <- Text.getContents-    expr     <- throws (exprFromText inText)-    expr'    <- load expr-    typeExpr <- throws (typeOf expr')-    Text.hPutStrLn stderr (pretty (normalize typeExpr))-    Text.hPutStrLn stderr mempty-    Text.putStrLn (pretty (normalize expr'))+    case mode of+        Default -> do+            inText   <- Text.getContents+            expr     <- throws (exprFromText inText)+            expr'    <- load expr+            typeExpr <- throws (typeOf expr')+            Text.hPutStrLn stderr (pretty (normalize typeExpr))+            Text.hPutStrLn stderr mempty+            Text.putStrLn (pretty (normalize expr'))+        Resolve   -> do+            inText <- Text.getContents+            expr   <- throws (exprFromText inText)+            expr'  <- load expr+            Text.putStrLn (pretty expr')+        TypeCheck -> do+            inText <- Text.getContents+            expr   <- throws (exprFromText inText)+            case traverse (\_ -> Nothing) expr of+                Nothing    -> throwIO (userError+                    "`morte typecheck` cannot type-check a program containing \+                    \remote references.  Use `morte resolve` to resolve all \+                    \remote references or just use `morte` which combines \+                    \resolution, type-checking, and normalization." )+                Just expr' -> do+                    typeExpr <- throws (typeOf expr')+                    Text.putStrLn (pretty typeExpr)+        Normalize -> do+            inText <- Text.getContents+            expr   <- throws (exprFromText inText)+            Text.putStrLn (pretty (normalize expr))
morte.cabal view
@@ -1,5 +1,5 @@ Name: morte-Version: 1.4.2+Version: 1.5.0 Cabal-Version: >=1.8.0.2 Build-Type: Simple Tested-With: GHC == 7.6.3, GHC == 7.8.4, GHC == 7.10.2@@ -26,8 +26,7 @@     .     Read "Morte.Tutorial" to learn how to use this library Category: Compiler-Data-Dir: benchmarks/src-Data-Files: *.mt+Data-Files: bench/src/*.mt test/src/*.mt Source-Repository head     Type: git     Location: https://github.com/Gabriel439/Haskell-Morte-Library@@ -35,24 +34,24 @@ Library     Hs-Source-Dirs: src     Build-Depends:-        base               >= 4        && < 5    ,-        array              >= 0.4.0.0  && < 0.6  ,-        binary             >= 0.7.0.0  && < 0.8  ,-        containers         >= 0.5.0.0  && < 0.6  ,-        deepseq            >= 1.3.0    && < 1.5  ,-        Earley             >= 0.10.1.0 && < 0.11 ,-        http-client        >= 0.4.0    && < 0.5  ,-        http-client-tls    >= 0.2.0    && < 0.3  ,-        microlens          >= 0.2.0.0  && < 0.5  ,-        microlens-mtl      >= 0.1.3.1  && < 0.2  ,-        managed            >= 1.0.0    && < 1.1  ,-        pipes              >= 4.0.0    && < 4.2  ,-        system-filepath    >= 0.3.1    && < 0.5  ,-        system-fileio      >= 0.2.1    && < 0.4  ,-        text               >= 0.11.1.0 && < 1.3  ,-        text-format                       < 0.4  ,-        transformers       >= 0.2.0.0  && < 0.5+        base                 >= 4        && < 5   ,+        array                >= 0.4.0.0  && < 0.6 ,+        binary               >= 0.7.0.0  && < 0.8 ,+        containers           >= 0.5.0.0  && < 0.6 ,+        deepseq              >= 1.3.0    && < 1.5 ,+        Earley               >= 0.10.1.0 && < 0.12,+        http-client          >= 0.4.0    && < 0.5 ,+        http-client-tls      >= 0.2.0    && < 0.3 ,+        microlens            >= 0.2.0.0  && < 0.5 ,+        microlens-mtl        >= 0.1.3.1  && < 0.2 ,+        pipes                >= 4.0.0    && < 4.2 ,+        system-filepath      >= 0.3.1    && < 0.5 ,+        system-fileio        >= 0.2.1    && < 0.4 ,+        text                 >= 0.11.1.0 && < 1.3 ,+        text-format                         < 0.4 ,+        transformers         >= 0.2.0.0  && < 0.6     Exposed-Modules:+        Morte.Context,         Morte.Core,         Morte.Import,         Morte.Lexer,@@ -70,14 +69,31 @@         optparse-applicative                < 0.13 ,         text                 >= 0.11.1.0 && < 1.3 -Benchmark benchmarks-    Type:           exitcode-stdio-1.0-    HS-Source-Dirs: benchmarks-    Main-Is:        Bench.hs-    GHC-Options:    -O2 -Wall+Benchmark bench+    Type: exitcode-stdio-1.0+    HS-Source-Dirs: bench+    Main-Is: Main.hs+    GHC-Options: -O2 -Wall+    Build-Depends:+        base            >= 4        && < 5  ,+        criterion       >= 1.0.0.1  && < 1.2,+        morte                               ,+        system-filepath >= 0.3.1    && < 0.5,+        text            >= 0.11.1.0 && < 1.3 +Test-Suite test+    Type:           exitcode-stdio-1.0+    HS-Source-Dirs: test+    Main-Is:        Main.hs+    GHC-Options:    -O2 -Wall      Build-Depends:-        base      >= 4        && < 5  ,-        criterion >= 1.0.0.1  && < 1.2,-        morte                         ,-        text      >= 0.11.1.0 && < 1.3+        base             >= 4        && < 5   ,+        mtl              >= 2.2      && < 2.3 ,+        QuickCheck       >= 2.8.1    && < 2.9 ,+        system-filepath  >= 0.3.1    && < 0.5 ,+        tasty            >= 0.11     && < 0.12,+        tasty-hunit      >= 0.9      && < 0.10,+        tasty-quickcheck >= 0.8.4    && < 0.9 ,+        transformers     >= 0.2.0.0  && < 0.6 ,+        morte                                 ,+        text             >= 0.11.1.0 && < 1.3
+ src/Morte/Context.hs view
@@ -0,0 +1,58 @@+{-# LANGUAGE GeneralizedNewtypeDeriving #-}+{-# LANGUAGE DeriveFunctor              #-}++-- | All `Context`-related operations++module Morte.Context (+    -- * Context+      Context+    , empty+    , insert+    , lookup+    , toList+    ) where++import Control.DeepSeq (NFData)+import Data.Text.Lazy (Text)+import Prelude hiding (lookup)++{-| Bound variable names and their types++    Variable names may appear more than once in the `Context`.  The `Var` @x\@n@+    refers to the @n@th occurrence of @x@ in the `Context` (using 0-based+    numbering).+-}+newtype Context a = Context { getContext :: [(Text, a)] }+    deriving (Functor, NFData)++{-| An empty context with no key-value pairs++> toList empty = []+-}+empty :: Context a+empty = Context []++-- | Add a key-value pair to the `Context`+insert :: Text -> a -> Context a -> Context a+insert k v (Context kvs) = Context ((k, v) : kvs)+{-# INLINABLE insert #-}++{-| Lookup a key by name and index++> lookup k 0 (insert k v0              ctx ) = Just v0+> lookup k 1 (insert k v0 (insert k v1 ctx)) = Just v1+-}+lookup :: Text -> Int -> Context a -> Maybe a+lookup k n0 (Context kvs0) = loop kvs0 n0+  where+    loop ((k', v):kvs) n | k /= k'   = loop kvs    n+                         | n >  0    = loop kvs $! n - 1+                         | n == 0    = Just v+                         | otherwise = Nothing+    loop  []           _             = Nothing+{-# INLINABLE lookup #-}++-- | Return all key-value associations as a list+toList :: Context a -> [(Text, a)]+toList = getContext+{-# INLINABLE toList #-}
src/Morte/Core.hs view
@@ -1,9 +1,10 @@-{-# LANGUAGE DeriveDataTypeable #-}-{-# LANGUAGE DeriveFoldable     #-}-{-# LANGUAGE DeriveFunctor      #-}-{-# LANGUAGE DeriveTraversable  #-}-{-# LANGUAGE OverloadedStrings  #-}-{-# LANGUAGE RankNTypes         #-}+{-# LANGUAGE GeneralizedNewtypeDeriving #-}+{-# LANGUAGE DeriveDataTypeable         #-}+{-# LANGUAGE DeriveFoldable             #-}+{-# LANGUAGE DeriveFunctor              #-}+{-# LANGUAGE DeriveTraversable          #-}+{-# LANGUAGE OverloadedStrings          #-}+{-# LANGUAGE RankNTypes                 #-} {-# OPTIONS_GHC -Wall #-}  {-| This module contains the core calculus for the Morte language.  This@@ -78,7 +79,6 @@ import Data.Binary.Get (getWord64le) import Data.Binary.Put (putWord64le) import Data.Foldable (Foldable(..))-import Data.Traversable (Traversable(..)) import Data.Monoid ((<>)) import Data.String (IsString(..)) import Data.Text.Buildable (Buildable(..))@@ -86,12 +86,16 @@ import qualified Data.Text.Encoding as Text import qualified Data.Text.Lazy as Text import qualified Data.Text.Lazy.Builder as Builder+import Data.Traversable (Traversable(..)) import Data.Typeable (Typeable) import Data.Word (Word8) import Filesystem.Path.CurrentOS (FilePath) import qualified Filesystem.Path.CurrentOS as Filesystem+import Morte.Context (Context) import Prelude hiding (FilePath) +import qualified Morte.Context as Context+ {-| Label for a bound variable      The `Text` field is the variable's name (i.e. \"@x@\").@@ -189,7 +193,7 @@  axiom :: Const -> Either TypeError Const axiom Star = return Box-axiom Box  = Left (TypeError [] (Const Box) (Untyped Box))+axiom Box  = Left (TypeError Context.empty (Const Box) (Untyped Box))  rule :: Const -> Const -> Either TypeError Const rule Star Box  = return Box@@ -270,16 +274,6 @@         App f a     -> App (f >>= k) (a >>= k)         Embed r     -> k r -lookupN :: Eq a => a -> [(a, b)] -> Int -> Maybe b-lookupN a ((a', b'):abs') n | a /= a'   = lookupN a abs'    n-                            | n >  0    = lookupN a abs' $! n - 1-                            | n == 0    = Just b'-                            | otherwise = Nothing-lookupN _  []             _             = Nothing--lookupCtx :: Var -> Context -> Maybe (Expr X)-lookupCtx (V x n) ctx = lookupN x ctx n- match :: Text -> Int -> Text -> Int -> [(Text, Text)] -> Bool match xL nL xR nR  []                                      = xL == xR && nL == nR match xL 0  xR 0  ((xL', xR'):_ ) | xL == xL' && xR == xR' = True@@ -398,14 +392,6 @@                 <>  (if parenApp then ")" else "")             Embed p    -> build p -{-| Bound variable names and their types--    Variable names may appear more than once in the `Context`.  The `Var` @x\@n@-    refers to the @n@th occurrence of @x@ in the `Context` (using 0-based-    numbering).--}-type Context = [(Text, Expr X)]- -- | The specific type error data TypeMessage     = UnboundVariable@@ -449,7 +435,7 @@  -- | A structured type error that includes context data TypeError = TypeError-    { context     :: Context+    { context     :: Context (Expr X)     , current     :: Expr X     , typeMessage :: TypeMessage     } deriving (Typeable)@@ -480,6 +466,7 @@             .   Text.unlines             .   map (Builder.toLazyText . buildKV)             .   reverse+            .   Context.toList  {-| Substitute all occurrences of a variable with an expression @@ -531,14 +518,14 @@     is not necessary for just type-checking.  If you actually care about the     returned type then you may want to `normalize` it afterwards. -}-typeWith :: Context -> Expr X -> Either TypeError (Expr X)+typeWith :: Context (Expr X) -> Expr X -> Either TypeError (Expr X) typeWith ctx e = case e of     Const c     -> fmap Const (axiom c)-    Var x       -> case lookupCtx x ctx of+    Var (V x n) -> case Context.lookup x n ctx of         Nothing -> Left (TypeError ctx e UnboundVariable)         Just a  -> return a     Lam x _A b  -> do-        let ctx' = [ (x', shift 1 x _A') | (x', _A') <- (x, _A):ctx ]+        let ctx' = fmap (shift 1 x) (Context.insert x _A ctx)         _B <- typeWith ctx' b         let p = Pi x _A _B         _t <- typeWith ctx p@@ -548,7 +535,7 @@         s  <- case eS of             Const s -> return s             _       -> Left (TypeError ctx e (InvalidInputType _A))-        let ctx' = [ (x', shift 1 x _A') | (x', _A') <- (x, _A):ctx ]+        let ctx' = fmap (shift 1 x) (Context.insert x _A ctx)         eT <- fmap whnf (typeWith ctx' _B)         t  <- case eT of             Const t -> return t@@ -576,7 +563,7 @@     will fail. -} typeOf :: Expr X -> Either TypeError (Expr X)-typeOf = typeWith []+typeOf = typeWith Context.empty  -- | Reduce an expression to weak-head normal form whnf :: Expr a -> Expr a
src/Morte/Import.hs view
@@ -74,8 +74,6 @@ import Control.Exception (Exception, IOException, catch, onException, throwIO) import Control.Monad (join) import Control.Monad.IO.Class (MonadIO(liftIO))-import Control.Monad.Managed (Managed, managed, with)-import Control.Monad.Trans.Class (lift) import Control.Monad.Trans.State.Strict (StateT, evalStateT, get, put) import Data.Map.Strict (Map) import qualified Data.Map.Strict as Map@@ -179,7 +177,7 @@ manager :: Lens' Status (Maybe Manager) manager k s = fmap (\x -> s { _manager = x }) (k (_manager s)) -needManager :: StateT Status Managed Manager+needManager :: StateT Status IO Manager needManager = do     x <- zoom manager get     case x of@@ -187,12 +185,12 @@         Nothing -> do             let settings = HTTP.tlsManagerSettings                     { HTTP.managerResponseTimeout = Just 1000000 }  -- 1 second-            m <- lift (managed (HTTP.withManager settings))+            m <- liftIO (HTTP.newManager settings)             zoom manager (put (Just m))             return m  -- | Load a `Path` as a \"dynamic\" expression (without resolving any imports)-loadDynamic :: Path -> StateT Status Managed (Expr Path)+loadDynamic :: Path -> StateT Status IO (Expr Path) loadDynamic p = do     paths <- zoom stack get     txt <- case p of@@ -247,7 +245,7 @@         Right expr -> return expr   -- | Load a `Path` as a \"static\" expression (with all imports resolved)-loadStatic :: Path -> StateT Status Managed (Expr X)+loadStatic :: Path -> StateT Status IO (Expr X) loadStatic path = do     paths <- zoom stack get @@ -267,31 +265,42 @@      let paths' = path:paths     zoom stack (put paths')-    expr <- if path `elem` paths+    (expr, cached) <- if path `elem` paths         then liftIO (throwIO (Imported paths (Cycle path)))         else do             m <- zoom cache get             case Map.lookup path m of-                Just expr -> return expr+                Just expr -> return (expr, True)                 Nothing   -> do-                    expr' <- loadDynamic path-                    case traverse (\_ -> Nothing) expr' of+                    expr'  <- loadDynamic path+                    expr'' <- case traverse (\_ -> Nothing) expr' of                         -- No imports left                         Just expr -> do                             zoom cache (put $! Map.insert path expr m)                             return expr                         -- Some imports left, so recurse                         Nothing   -> fmap join (traverse loadStatic expr')-    case typeOf expr of-        Left  err -> liftIO (throwIO (Imported paths' err))-        Right _   -> return ()+                    return (expr'', False)++    -- Type-check expressions here for two separate reasons:+    --+    --  * to verify that they are closed+    --  * to catch type errors as early in the import process as possible+    --+    -- There is no need to check expressions that have been cached, since they+    -- have already been checked+    if cached+        then return ()+        else case typeOf expr of+            Left  err -> liftIO (throwIO (Imported paths' err))+            Right _   -> return ()+     zoom stack (put paths)      return expr  -- | Resolve all imports within an expression load :: Expr Path -> IO (Expr X)-load expr =-    with (evalStateT (fmap join (traverse loadStatic expr)) status) return+load expr = evalStateT (fmap join (traverse loadStatic expr)) status   where     status = Status [] Map.empty Nothing
src/Morte/Lexer.x view
@@ -152,6 +152,7 @@             lift (column += len)             go input' +-- | A `Token` augmented with `Position` information data LocatedToken = LocatedToken     { token    ::                !Token     , position :: {-# UNPACK #-} !Position
src/Morte/Parser.hs view
@@ -2,6 +2,8 @@ {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE RecursiveDo       #-} +-- | Parsing logic for the Morte language+ module Morte.Parser (     -- * Parser     exprFromText,
src/Morte/Tutorial.hs view
@@ -93,7 +93,7 @@ > $ morte > \(a : *) -> \(x : a) -> x <Enter> > <Ctrl-D>-> ∀(a : *) → a → a+> ∀(a : *) → ∀(x : a) → a >  > λ(a : *) → λ(x : a) → x > $@@ -108,7 +108,7 @@ > id :: a -> a > > -- Morte-> ∀(a : *) → a → a+> ∀(a : *) → ∀(x : a) → a      The first thing you'll notice is that Morte explicitly quantifies all types.     In Haskell, you can do this, too, using the @ExplicitForAll@ extension:@@ -165,7 +165,7 @@     Then we'll type-check and optimize this program:  > $ morte < id.mt-> ∀(String : *) → String → String+> ∀(String : *) → ∀(x : String) → String >  > λ(String : *) → λ(x : String) → x @@ -518,7 +518,7 @@    If you type-check and optimize this, you get:  > $ morte < bool.mt-> ∀(Int : *) → Int → Int → Int+> ∀(Int : *) → ∀(Zero : Int) → ∀(One : Int) → Int >  > λ(Int : *) → λ(Zero : Int) → λ(One : Int) → One @@ -616,7 +616,7 @@     If you compile and type-check that you get:  > $ morte < pair.mt-> ∀(a : *) → a → a → a+> ∀(a : *) → ∀(x : a) → ∀(y : a) → a >  > λ(a : *) → λ(x : a) → λ(y : a) → y @@ -1259,8 +1259,8 @@     over the list just once, applying @\'f\'@ and @\'g\'@ to every value:  > $ morte < mapcomp1.mt-> ∀(a : *) → ∀(b : *) → ∀(c : *) → (b → c) → (a → b) → (∀(x : *) → (a → x → x) →->  x → x) → ∀(x : *) → (c → x → x) → x → x+> ∀(a : *) → ∀(b : *) → ∀(c : *) → ∀(f : b → c) → ∀(g : a → b) → (∀(x : *) → (a +> → x → x) → x → x) → ∀(x : *) → (c → x → x) → x → x >  > λ(a : *) → λ(b : *) → λ(c : *) → λ(f : b → c) → λ(g : a → b) → λ(l : ∀(x : *)  > → (a → x → x) → x → x) → λ(x : *) → λ(Cons : c → x → x) → l x (λ(va : a) → Con@@ -1798,8 +1798,8 @@ input to standard output:  > $ morte < recursive.mt-> ∀(String : *) → ∀(U : *) → U → ∀(x : *) → (String → x → x) → ((String → x-> ) → x) → (U → x) → x+> ∀(String : *) → ∀(U : *) → ∀(Unit : U) → ∀(x : *) → (String → x → x) → ((Strin+> g → x) → x) → (U → x) → x >  > λ(String : *) → λ(U : *) → λ(Unit : U) → λ(x : *) → λ(PutStrLn : String → x →  > x) → λ(GetLine : (String → x) → x) → λ(Return : U → x) → GetLine (λ(va : Strin
+ test/Main.hs view
@@ -0,0 +1,204 @@+{-# LANGUAGE OverloadedStrings #-}++module Main (+    main+  ) where++import Control.Exception (throwIO)+import ClosedWellTyped (ClosedWellTyped(..))+import Data.Text.Lazy (Text)+import Filesystem.Path (FilePath)+import Morte.Core (Expr, X)+import Paths_morte (getDataFileName)+import Prelude hiding (FilePath)+import Test.Tasty (TestTree)++import qualified Data.Text.Lazy.IO         as Text+import qualified Filesystem.Path.CurrentOS as Filesystem+import qualified Morte.Core                as Morte+import qualified Morte.Import              as Morte+import qualified Morte.Parser              as Morte+import qualified Test.Tasty                as Tasty+import qualified Test.Tasty.QuickCheck     as QuickCheck+import qualified Test.Tasty.HUnit          as HUnit++main :: IO ()+main = Tasty.defaultMain tests++tests :: TestTree+tests =+    Tasty.testGroup "Tests"+        [ Tasty.testGroup "Properties"+            [ QuickCheck.testProperty "Normalization is idempotent"+                normalizationIsIdempotent +            , QuickCheck.testProperty "Normalization preserves type safety"+                normalizationPreservesTypeSafety+            ]+        , Tasty.testGroup "Unit tests"+            [ HUnit.testCase "Tutorial - Identity"           example0+            , HUnit.testCase "Tutorial - id.mt"              example1+            , HUnit.testCase "Tutorial - id2.mt"             example2+            , HUnit.testCase "Tutorial - bool.mt"            example3+            , HUnit.testCase "Tutorial - pair.mt"            example4+            , HUnit.testCase "Tutorial - all.mt"             example5+            , HUnit.testCase "Tutorial - mapid1.mt"          example6+            , HUnit.testCase "Tutorial - mapid2.mt"          example7+            , HUnit.testCase "Tutorial - mapcomp1.mt"        example8+            , HUnit.testCase "Tutorial - mapcomp2.mt"        example9+            , HUnit.testCase "Tutorial - corecursive.mt - A" example10+            , HUnit.testCase "Tutorial - corecursive.mt - B" example11+            , HUnit.testCase "Tutorial - corecursive.mt - C" example12+            , HUnit.testCase "Tutorial - corecursive.mt - D" example13+            , HUnit.testCase "Tutorial - recursive.mt"       example14+            , HUnit.testCase "Tutorial - corecursive.mt"     example15+            ]+        ]++typeChecks :: Expr X -> Bool+typeChecks expr = case Morte.typeOf expr of+    Right _ -> True+    Left  _ -> False++-- Carefully note that `ClosedWellTyped` generates well-typed expressions, so+-- this is really testing that `typeChecks expr ==> typeChecks (normalize expr)`+normalizationPreservesTypeSafety :: ClosedWellTyped -> Bool+normalizationPreservesTypeSafety (ClosedWellTyped expr) =+    typeChecks (Morte.normalize expr)++-- Carefully note that `(==)` also normalizes both sides before checking for+-- α-equality, so this is really testing that `normalize (normalize expr)` and+-- `normalize expr` are α-equivalent.+normalizationIsIdempotent :: ClosedWellTyped -> Bool+normalizationIsIdempotent (ClosedWellTyped expr) = Morte.normalize expr == expr++example+    :: FilePath+    -> Text+    -> Text+    -> IO ()+example path stderr stdout = do+    str   <- getDataFileName (Filesystem.encodeString path)+    stdin <- Text.readFile str+    case Morte.exprFromText stdin of+        Left  e    -> throwIO e+        Right expr -> do+            expr' <- Morte.load expr+            case Morte.typeOf expr' of+                Left  e        -> throwIO e+                Right typeExpr -> do+                    let stderr' = Morte.pretty (Morte.normalize typeExpr)+                    let stdout' = Morte.pretty (Morte.normalize expr')+                    HUnit.assertEqual "" stderr stderr'+                    HUnit.assertEqual "" stdout stdout'++example0 :: IO ()+example0 =+    example+        "test/src/example0.mt"+        "∀(a : *) → ∀(x : a) → a"+        "λ(a : *) → λ(x : a) → x"++example1 :: IO ()+example1 =+    example+        "test/src/example1.mt"+        "∀(String : *) → ∀(x : String) → String"+        "λ(String : *) → λ(x : String) → x"++example2 :: IO ()+example2 =+    example+        "test/src/example2.mt"+        "∀(a : *) → a → a"+        "λ(a : *) → λ(x : a) → x"++example3 :: IO ()+example3 =+    example+        "test/src/example3.mt"+        "∀(Int : *) → ∀(Zero : Int) → ∀(One : Int) → Int"+        "λ(Int : *) → λ(Zero : Int) → λ(One : Int) → One"++example4 :: IO ()+example4 =+    example+        "test/src/example4.mt"+        "∀(a : *) → ∀(x : a) → ∀(y : a) → a"+        "λ(a : *) → λ(x : a) → λ(y : a) → y"++example5 :: IO ()+example5 =+    example+        "test/src/example5.mt"+        "∀(r : *) → r → r → r"+        "λ(r : *) → λ(x : r) → λ(_ : r) → x"++example6 :: IO ()+example6 =+    example+        "test/src/example6.mt"+        "∀(a : *) → (∀(x : *) → (a → x → x) → x → x) → ∀(x : *) → (a → x → x) → x → x"+        "λ(a : *) → λ(l : ∀(x : *) → (a → x → x) → x → x) → l"++example7 :: IO ()+example7 =+    example+        "test/src/example7.mt"+        "∀(a : *) → (∀(x : *) → (a → x → x) → x → x) → ∀(x : *) → (a → x → x) → x → x"+        "λ(a : *) → λ(va : ∀(x : *) → (a → x → x) → x → x) → va"++example8 :: IO ()+example8 =+    example+        "test/src/example8.mt"+        "∀(a : *) → ∀(b : *) → ∀(c : *) → ∀(f : b → c) → ∀(g : a → b) → (∀(x : *) → (a → x → x) → x → x) → ∀(x : *) → (c → x → x) → x → x"+        "λ(a : *) → λ(b : *) → λ(c : *) → λ(f : b → c) → λ(g : a → b) → λ(l : ∀(x : *) → (a → x → x) → x → x) → λ(x : *) → λ(Cons : c → x → x) → l x (λ(va : a) → Cons (f (g va)))"++example9 :: IO ()+example9 =+    example+        "test/src/example9.mt"+        "∀(a : *) → ∀(b : *) → ∀(c : *) → ∀(f : b → c) → ∀(g : a → b) → (∀(x : *) → (a → x → x) → x → x) → ∀(x : *) → (c → x → x) → x → x"+        "λ(a : *) → λ(b : *) → λ(c : *) → λ(f : b → c) → λ(g : a → b) → λ(va : ∀(x : *) → (a → x → x) → x → x) → λ(x : *) → λ(Cons : c → x → x) → va x (λ(va : a) → Cons (f (g va)))"++example10 :: IO ()+example10 =+    example+        "test/src/example10.mt"+        "∀(a : *) → (∀(x : *) → (∀(s : *) → s → (s → ∀(x : *) → (a → s → x) → x) → x) → x) → ∀(x : *) → (∀(s : *) → s → (s → ∀(x : *) → (a → s → x) → x) → x) → x"+        "λ(a : *) → λ(st : ∀(x : *) → (∀(s : *) → s → (s → ∀(x : *) → (a → s → x) → x) → x) → x) → st"++example11 :: IO ()+example11 =+    example+        "test/src/example11.mt"+        "∀(a : *) → (∀(x : *) → (∀(s : *) → s → (s → ∀(x : *) → (a → s → x) → x) → x) → x) → ∀(x : *) → (∀(s : *) → s → (s → ∀(x : *) → (a → s → x) → x) → x) → x"+        "λ(a : *) → λ(va : ∀(x : *) → (∀(s : *) → s → (s → ∀(x : *) → (a → s → x) → x) → x) → x) → va"++example12 :: IO ()+example12 =+    example+        "test/src/example12.mt"+        "∀(a : *) → ∀(b : *) → ∀(c : *) → (b → c) → (a → b) → (∀(x : *) → (∀(s : *) → s → (s → ∀(x : *) → (a → s → x) → x) → x) → x) → ∀(x : *) → (∀(s : *) → s → (s → ∀(x : *) → (c → s → x) → x) → x) → x"+        "λ(a : *) → λ(b : *) → λ(c : *) → λ(f : b → c) → λ(g : a → b) → λ(st : ∀(x : *) → (∀(s : *) → s → (s → ∀(x : *) → (a → s → x) → x) → x) → x) → λ(x : *) → λ(S : ∀(s : *) → s → (s → ∀(x : *) → (c → s → x) → x) → x) → st x (λ(s : *) → λ(seed : s) → λ(step : s → ∀(x : *) → (a → s → x) → x) → S s seed (λ(seed : s) → λ(x : *) → λ(Pair : c → s → x) → step seed x (λ(va : a) → Pair (f (g va)))))"++example13 :: IO ()+example13 =+    example+        "test/src/example13.mt"+        "∀(a : *) → ∀(b : *) → ∀(c : *) → (b → c) → (a → b) → (∀(x : *) → (∀(s : *) → s → (s → ∀(x : *) → (a → s → x) → x) → x) → x) → ∀(x : *) → (∀(s : *) → s → (s → ∀(x : *) → (c → s → x) → x) → x) → x"+        "λ(a : *) → λ(b : *) → λ(c : *) → λ(f : b → c) → λ(g : a → b) → λ(va : ∀(x : *) → (∀(s : *) → s → (s → ∀(x : *) → (a → s → x) → x) → x) → x) → λ(x : *) → λ(S : ∀(s : *) → s → (s → ∀(x : *) → (c → s → x) → x) → x) → va x (λ(s : *) → λ(seed : s) → λ(step : s → ∀(x : *) → (a → s → x) → x) → S s seed (λ(seed : s) → λ(x : *) → λ(Pair : c → s → x) → step seed x (λ(va : a) → Pair (f (g va)))))"++example14 :: IO ()+example14 =+    example+        "test/src/example14.mt"+        "∀(String : *) → ∀(U : *) → ∀(Unit : U) → ∀(x : *) → (String → x → x) → ((String → x) → x) → (U → x) → x"+        "λ(String : *) → λ(U : *) → λ(Unit : U) → λ(x : *) → λ(PutStrLn : String → x → x) → λ(GetLine : (String → x) → x) → λ(Return : U → x) → GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (GetLine (λ(va : String) → PutStrLn va (Return Unit))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))"++example15 :: IO ()+example15 =+    example+        "test/src/example15.mt"+        "∀(String : *) → ∀(r : *) → ∀(x : *) → (∀(s : *) → s → (s → ∀(x : *) → (String → s → x) → ((String → s) → x) → (r → x) → x) → x) → x"+        "λ(String : *) → λ(r : *) → λ(x : *) → λ(k : ∀(s : *) → s → (s → ∀(x : *) → (String → s → x) → ((String → s) → x) → (r → x) → x) → x) → k (∀(x : *) → (String → x) → x → x) (λ(x : *) → λ(Just : String → x) → λ(Nothing : x) → Nothing) (λ(m : ∀(x : *) → (String → x) → x → x) → m (∀(x : *) → (String → (∀(x : *) → (String → x) → x → x) → x) → ((String → ∀(x : *) → (String → x) → x → x) → x) → (r → x) → x) (λ(str : String) → λ(x : *) → λ(PutStrLn : String → (∀(x : *) → (String → x) → x → x) → x) → λ(GetLine : (String → ∀(x : *) → (String → x) → x → x) → x) → λ(Return : r → x) → PutStrLn str (λ(x : *) → λ(Just : String → x) → λ(Nothing : x) → Nothing)) (λ(x : *) → λ(PutStrLn : String → (∀(x : *) → (String → x) → x → x) → x) → λ(GetLine : (String → ∀(x : *) → (String → x) → x → x) → x) → λ(Return : r → x) → GetLine (λ(va : String) → λ(x : *) → λ(Just : String → x) → λ(Nothing : x) → Just va)))"
+ test/src/example0.mt view
@@ -0,0 +1,1 @@+\(a : *) -> \(x : a) -> x
+ test/src/example1.mt view
@@ -0,0 +1,7 @@+-- id.mt++-- Morte accepts comments++-- Also, whitespace is not significant+\(String : *) ->+    (\(a : *) -> \(x : a) -> x) String
+ test/src/example10.mt view
@@ -0,0 +1,177 @@+-- corecursive.mt++-- first :: (a -> b) -> (a, c) -> (b, c)+-- first f (va, vb) = (f va, vb) +-- +-- data Stream a = Cons (a, Stream a)+-- +-- map :: (a -> b) -> Stream a -> Stream b+-- map f (Cons (va, s)) = Cons (first f (va, map f s))+-- +-- -- exampleA = exampleB+-- +-- exampleA :: Stream a -> Stream a+-- exampleA = map id+-- +-- exampleB :: Stream a -> Stream a+-- exampleB = id+-- +-- -- exampleC = exampleD+-- +-- exampleC :: (b -> c) -> (a -> b) -> Stream a -> Stream c+-- exampleC f g = map (f . g)+-- +-- exampleD :: (b -> c) -> (a -> b) -> Stream a -> Stream c+-- exampleD f g = map f . map g++(   \(id : forall (a : *) -> a -> a)+->  \(  (.)+    :   forall (a : *)+    ->  forall (b : *)+    ->  forall (c : *)+    ->  (b -> c)+    ->  (a -> b)+    ->  (a -> c)+    )+->  \(Pair : * -> * -> *)+->  \(P : forall (a : *) -> forall (b : *) -> a -> b -> Pair a b)+->  \(  first+    :   forall (a : *)+    ->  forall (b : *)+    ->  forall (c : *)+    ->  (a -> b)+    ->  Pair a c+    ->  Pair b c+    )++->  (   \(Stream : * -> *)+    ->  \(  map+        :   forall (a : *)+        ->  forall (b : *)+        ->  (a -> b)+        ->  Stream a+        ->  Stream b+        )++        -- exampleA = exampleB+    ->  (   \(exampleA : forall (a : *) -> Stream a -> Stream a)+        ->  \(exampleB : forall (a : *) -> Stream a -> Stream a)++        -- exampleC = exampleD+        ->  \(  exampleC+            :   forall (a : *)+            ->  forall (b : *)+            ->  forall (c : *)+            ->  (b -> c)+            ->  (a -> b)+            ->  Stream a+            ->  Stream c+            )++        ->  \(  exampleD+            :   forall (a : *)+            ->  forall (b : *)+            ->  forall (c : *)+            ->  (b -> c)+            ->  (a -> b)+            ->  Stream a+            ->  Stream c+            )++        -- Uncomment the example you want to test+        ->  exampleA+--      ->  exampleB+--      ->  exampleC+--      ->  exampleD+        )++        -- exampleA+        (\(a : *) -> map a a (id a))+  +        -- exampleB+        (\(a : *) -> id (Stream a))++        -- exampleC+        (   \(a : *)+        ->  \(b : *)+        ->  \(c : *)+        ->  \(f : b -> c)+        ->  \(g : a -> b)+        ->  map a c ((.) a b c f g)+        )++        --  exampleD+        (   \(a : *)+        ->  \(b : *)+        ->  \(c : *)+        ->  \(f : b -> c)+        ->  \(g : a -> b)+        ->  (.) (Stream a) (Stream b) (Stream c) (map b c f) (map a b g)+        )+    )++    -- Stream+    (   \(a : *)+    ->  forall (x : *)+    ->  (forall (s : *) -> s -> (s -> Pair a s) -> x)+    ->  x+    )++    -- map+    (   \(a : *)+    ->  \(b : *)+    ->  \(f : a -> b)+    ->  \(  st+        :   forall (x : *) -> (forall (s : *) -> s -> (s -> Pair a s) -> x) -> x+        )+    ->  \(x : *)+    ->  \(S : forall (s : *) -> s -> (s -> Pair b s) -> x)+    ->  st+        x+        (   \(s : *)+        ->  \(seed : s)+        ->  \(step : s -> Pair a s)+        ->  S+            s+            seed+            (\(seed : s) -> first a b s f (step seed))+        )+    )+)++-- id+(\(a : *) -> \(va : a) -> va)++-- (.)+(   \(a : *)+->  \(b : *)+->  \(c : *)+->  \(f : b -> c)+->  \(g : a -> b)+->  \(va : a)+->  f (g va)+)++-- Pair+(\(a : *) -> \(b : *) -> forall (x : *) -> (a -> b -> x) -> x)++-- P+(   \(a : *)+->  \(b : *)+->  \(va : a)+->  \(vb : b)+->  \(x : *)+->  \(P : a -> b -> x)+->  P va vb+)++-- first+(   \(a : *)+->  \(b : *)+->  \(c : *)+->  \(f : a -> b)+->  \(p : forall (x : *) -> (a -> c -> x) -> x)+->  \(x : *)+->  \(Pair : b -> c -> x)+->  p x (\(va : a) -> \(vc : c) -> Pair (f va) vc)+)
+ test/src/example11.mt view
@@ -0,0 +1,177 @@+-- corecursive.mt++-- first :: (a -> b) -> (a, c) -> (b, c)+-- first f (va, vb) = (f va, vb) +-- +-- data Stream a = Cons (a, Stream a)+-- +-- map :: (a -> b) -> Stream a -> Stream b+-- map f (Cons (va, s)) = Cons (first f (va, map f s))+-- +-- -- exampleA = exampleB+-- +-- exampleA :: Stream a -> Stream a+-- exampleA = map id+-- +-- exampleB :: Stream a -> Stream a+-- exampleB = id+-- +-- -- exampleC = exampleD+-- +-- exampleC :: (b -> c) -> (a -> b) -> Stream a -> Stream c+-- exampleC f g = map (f . g)+-- +-- exampleD :: (b -> c) -> (a -> b) -> Stream a -> Stream c+-- exampleD f g = map f . map g++(   \(id : forall (a : *) -> a -> a)+->  \(  (.)+    :   forall (a : *)+    ->  forall (b : *)+    ->  forall (c : *)+    ->  (b -> c)+    ->  (a -> b)+    ->  (a -> c)+    )+->  \(Pair : * -> * -> *)+->  \(P : forall (a : *) -> forall (b : *) -> a -> b -> Pair a b)+->  \(  first+    :   forall (a : *)+    ->  forall (b : *)+    ->  forall (c : *)+    ->  (a -> b)+    ->  Pair a c+    ->  Pair b c+    )++->  (   \(Stream : * -> *)+    ->  \(  map+        :   forall (a : *)+        ->  forall (b : *)+        ->  (a -> b)+        ->  Stream a+        ->  Stream b+        )++        -- exampleA = exampleB+    ->  (   \(exampleA : forall (a : *) -> Stream a -> Stream a)+        ->  \(exampleB : forall (a : *) -> Stream a -> Stream a)++        -- exampleC = exampleD+        ->  \(  exampleC+            :   forall (a : *)+            ->  forall (b : *)+            ->  forall (c : *)+            ->  (b -> c)+            ->  (a -> b)+            ->  Stream a+            ->  Stream c+            )++        ->  \(  exampleD+            :   forall (a : *)+            ->  forall (b : *)+            ->  forall (c : *)+            ->  (b -> c)+            ->  (a -> b)+            ->  Stream a+            ->  Stream c+            )++        -- Uncomment the example you want to test+--      ->  exampleA+        ->  exampleB+--      ->  exampleC+--      ->  exampleD+        )++        -- exampleA+        (\(a : *) -> map a a (id a))+  +        -- exampleB+        (\(a : *) -> id (Stream a))++        -- exampleC+        (   \(a : *)+        ->  \(b : *)+        ->  \(c : *)+        ->  \(f : b -> c)+        ->  \(g : a -> b)+        ->  map a c ((.) a b c f g)+        )++        --  exampleD+        (   \(a : *)+        ->  \(b : *)+        ->  \(c : *)+        ->  \(f : b -> c)+        ->  \(g : a -> b)+        ->  (.) (Stream a) (Stream b) (Stream c) (map b c f) (map a b g)+        )+    )++    -- Stream+    (   \(a : *)+    ->  forall (x : *)+    ->  (forall (s : *) -> s -> (s -> Pair a s) -> x)+    ->  x+    )++    -- map+    (   \(a : *)+    ->  \(b : *)+    ->  \(f : a -> b)+    ->  \(  st+        :   forall (x : *) -> (forall (s : *) -> s -> (s -> Pair a s) -> x) -> x+        )+    ->  \(x : *)+    ->  \(S : forall (s : *) -> s -> (s -> Pair b s) -> x)+    ->  st+        x+        (   \(s : *)+        ->  \(seed : s)+        ->  \(step : s -> Pair a s)+        ->  S+            s+            seed+            (\(seed : s) -> first a b s f (step seed))+        )+    )+)++-- id+(\(a : *) -> \(va : a) -> va)++-- (.)+(   \(a : *)+->  \(b : *)+->  \(c : *)+->  \(f : b -> c)+->  \(g : a -> b)+->  \(va : a)+->  f (g va)+)++-- Pair+(\(a : *) -> \(b : *) -> forall (x : *) -> (a -> b -> x) -> x)++-- P+(   \(a : *)+->  \(b : *)+->  \(va : a)+->  \(vb : b)+->  \(x : *)+->  \(P : a -> b -> x)+->  P va vb+)++-- first+(   \(a : *)+->  \(b : *)+->  \(c : *)+->  \(f : a -> b)+->  \(p : forall (x : *) -> (a -> c -> x) -> x)+->  \(x : *)+->  \(Pair : b -> c -> x)+->  p x (\(va : a) -> \(vc : c) -> Pair (f va) vc)+)
+ test/src/example12.mt view
@@ -0,0 +1,177 @@+-- corecursive.mt++-- first :: (a -> b) -> (a, c) -> (b, c)+-- first f (va, vb) = (f va, vb) +-- +-- data Stream a = Cons (a, Stream a)+-- +-- map :: (a -> b) -> Stream a -> Stream b+-- map f (Cons (va, s)) = Cons (first f (va, map f s))+-- +-- -- exampleA = exampleB+-- +-- exampleA :: Stream a -> Stream a+-- exampleA = map id+-- +-- exampleB :: Stream a -> Stream a+-- exampleB = id+-- +-- -- exampleC = exampleD+-- +-- exampleC :: (b -> c) -> (a -> b) -> Stream a -> Stream c+-- exampleC f g = map (f . g)+-- +-- exampleD :: (b -> c) -> (a -> b) -> Stream a -> Stream c+-- exampleD f g = map f . map g++(   \(id : forall (a : *) -> a -> a)+->  \(  (.)+    :   forall (a : *)+    ->  forall (b : *)+    ->  forall (c : *)+    ->  (b -> c)+    ->  (a -> b)+    ->  (a -> c)+    )+->  \(Pair : * -> * -> *)+->  \(P : forall (a : *) -> forall (b : *) -> a -> b -> Pair a b)+->  \(  first+    :   forall (a : *)+    ->  forall (b : *)+    ->  forall (c : *)+    ->  (a -> b)+    ->  Pair a c+    ->  Pair b c+    )++->  (   \(Stream : * -> *)+    ->  \(  map+        :   forall (a : *)+        ->  forall (b : *)+        ->  (a -> b)+        ->  Stream a+        ->  Stream b+        )++        -- exampleA = exampleB+    ->  (   \(exampleA : forall (a : *) -> Stream a -> Stream a)+        ->  \(exampleB : forall (a : *) -> Stream a -> Stream a)++        -- exampleC = exampleD+        ->  \(  exampleC+            :   forall (a : *)+            ->  forall (b : *)+            ->  forall (c : *)+            ->  (b -> c)+            ->  (a -> b)+            ->  Stream a+            ->  Stream c+            )++        ->  \(  exampleD+            :   forall (a : *)+            ->  forall (b : *)+            ->  forall (c : *)+            ->  (b -> c)+            ->  (a -> b)+            ->  Stream a+            ->  Stream c+            )++        -- Uncomment the example you want to test+--      ->  exampleA+--      ->  exampleB+        ->  exampleC+--      ->  exampleD+        )++        -- exampleA+        (\(a : *) -> map a a (id a))+  +        -- exampleB+        (\(a : *) -> id (Stream a))++        -- exampleC+        (   \(a : *)+        ->  \(b : *)+        ->  \(c : *)+        ->  \(f : b -> c)+        ->  \(g : a -> b)+        ->  map a c ((.) a b c f g)+        )++        --  exampleD+        (   \(a : *)+        ->  \(b : *)+        ->  \(c : *)+        ->  \(f : b -> c)+        ->  \(g : a -> b)+        ->  (.) (Stream a) (Stream b) (Stream c) (map b c f) (map a b g)+        )+    )++    -- Stream+    (   \(a : *)+    ->  forall (x : *)+    ->  (forall (s : *) -> s -> (s -> Pair a s) -> x)+    ->  x+    )++    -- map+    (   \(a : *)+    ->  \(b : *)+    ->  \(f : a -> b)+    ->  \(  st+        :   forall (x : *) -> (forall (s : *) -> s -> (s -> Pair a s) -> x) -> x+        )+    ->  \(x : *)+    ->  \(S : forall (s : *) -> s -> (s -> Pair b s) -> x)+    ->  st+        x+        (   \(s : *)+        ->  \(seed : s)+        ->  \(step : s -> Pair a s)+        ->  S+            s+            seed+            (\(seed : s) -> first a b s f (step seed))+        )+    )+)++-- id+(\(a : *) -> \(va : a) -> va)++-- (.)+(   \(a : *)+->  \(b : *)+->  \(c : *)+->  \(f : b -> c)+->  \(g : a -> b)+->  \(va : a)+->  f (g va)+)++-- Pair+(\(a : *) -> \(b : *) -> forall (x : *) -> (a -> b -> x) -> x)++-- P+(   \(a : *)+->  \(b : *)+->  \(va : a)+->  \(vb : b)+->  \(x : *)+->  \(P : a -> b -> x)+->  P va vb+)++-- first+(   \(a : *)+->  \(b : *)+->  \(c : *)+->  \(f : a -> b)+->  \(p : forall (x : *) -> (a -> c -> x) -> x)+->  \(x : *)+->  \(Pair : b -> c -> x)+->  p x (\(va : a) -> \(vc : c) -> Pair (f va) vc)+)
+ test/src/example13.mt view
@@ -0,0 +1,177 @@+-- corecursive.mt++-- first :: (a -> b) -> (a, c) -> (b, c)+-- first f (va, vb) = (f va, vb) +-- +-- data Stream a = Cons (a, Stream a)+-- +-- map :: (a -> b) -> Stream a -> Stream b+-- map f (Cons (va, s)) = Cons (first f (va, map f s))+-- +-- -- exampleA = exampleB+-- +-- exampleA :: Stream a -> Stream a+-- exampleA = map id+-- +-- exampleB :: Stream a -> Stream a+-- exampleB = id+-- +-- -- exampleC = exampleD+-- +-- exampleC :: (b -> c) -> (a -> b) -> Stream a -> Stream c+-- exampleC f g = map (f . g)+-- +-- exampleD :: (b -> c) -> (a -> b) -> Stream a -> Stream c+-- exampleD f g = map f . map g++(   \(id : forall (a : *) -> a -> a)+->  \(  (.)+    :   forall (a : *)+    ->  forall (b : *)+    ->  forall (c : *)+    ->  (b -> c)+    ->  (a -> b)+    ->  (a -> c)+    )+->  \(Pair : * -> * -> *)+->  \(P : forall (a : *) -> forall (b : *) -> a -> b -> Pair a b)+->  \(  first+    :   forall (a : *)+    ->  forall (b : *)+    ->  forall (c : *)+    ->  (a -> b)+    ->  Pair a c+    ->  Pair b c+    )++->  (   \(Stream : * -> *)+    ->  \(  map+        :   forall (a : *)+        ->  forall (b : *)+        ->  (a -> b)+        ->  Stream a+        ->  Stream b+        )++        -- exampleA = exampleB+    ->  (   \(exampleA : forall (a : *) -> Stream a -> Stream a)+        ->  \(exampleB : forall (a : *) -> Stream a -> Stream a)++        -- exampleC = exampleD+        ->  \(  exampleC+            :   forall (a : *)+            ->  forall (b : *)+            ->  forall (c : *)+            ->  (b -> c)+            ->  (a -> b)+            ->  Stream a+            ->  Stream c+            )++        ->  \(  exampleD+            :   forall (a : *)+            ->  forall (b : *)+            ->  forall (c : *)+            ->  (b -> c)+            ->  (a -> b)+            ->  Stream a+            ->  Stream c+            )++        -- Uncomment the example you want to test+--      ->  exampleA+--      ->  exampleB+--      ->  exampleC+        ->  exampleD+        )++        -- exampleA+        (\(a : *) -> map a a (id a))+  +        -- exampleB+        (\(a : *) -> id (Stream a))++        -- exampleC+        (   \(a : *)+        ->  \(b : *)+        ->  \(c : *)+        ->  \(f : b -> c)+        ->  \(g : a -> b)+        ->  map a c ((.) a b c f g)+        )++        --  exampleD+        (   \(a : *)+        ->  \(b : *)+        ->  \(c : *)+        ->  \(f : b -> c)+        ->  \(g : a -> b)+        ->  (.) (Stream a) (Stream b) (Stream c) (map b c f) (map a b g)+        )+    )++    -- Stream+    (   \(a : *)+    ->  forall (x : *)+    ->  (forall (s : *) -> s -> (s -> Pair a s) -> x)+    ->  x+    )++    -- map+    (   \(a : *)+    ->  \(b : *)+    ->  \(f : a -> b)+    ->  \(  st+        :   forall (x : *) -> (forall (s : *) -> s -> (s -> Pair a s) -> x) -> x+        )+    ->  \(x : *)+    ->  \(S : forall (s : *) -> s -> (s -> Pair b s) -> x)+    ->  st+        x+        (   \(s : *)+        ->  \(seed : s)+        ->  \(step : s -> Pair a s)+        ->  S+            s+            seed+            (\(seed : s) -> first a b s f (step seed))+        )+    )+)++-- id+(\(a : *) -> \(va : a) -> va)++-- (.)+(   \(a : *)+->  \(b : *)+->  \(c : *)+->  \(f : b -> c)+->  \(g : a -> b)+->  \(va : a)+->  f (g va)+)++-- Pair+(\(a : *) -> \(b : *) -> forall (x : *) -> (a -> b -> x) -> x)++-- P+(   \(a : *)+->  \(b : *)+->  \(va : a)+->  \(vb : b)+->  \(x : *)+->  \(P : a -> b -> x)+->  P va vb+)++-- first+(   \(a : *)+->  \(b : *)+->  \(c : *)+->  \(f : a -> b)+->  \(p : forall (x : *) -> (a -> c -> x) -> x)+->  \(x : *)+->  \(Pair : b -> c -> x)+->  p x (\(va : a) -> \(vc : c) -> Pair (f va) vc)+)
+ test/src/example14.mt view
@@ -0,0 +1,272 @@+-- recursive.mt++-- The Haskell code we will translate to Morte:+--+--     import Prelude hiding (+--         (+), (*), IO, putStrLn, getLine, (>>=), (>>), return )+-- +--     -- Simple prelude+--+--     data Nat = Succ Nat | Zero+--+--     zero :: Nat+--     zero = Zero+--+--     one :: Nat+--     one = Succ Zero+--+--     (+) :: Nat -> Nat -> Nat+--     Zero   + n = n+--     Succ m + n = m + Succ n+--+--     (*) :: Nat -> Nat -> Nat+--     Zero   * n = Zero+--     Succ m * n = n + (m * n)+--+--     foldNat :: Nat -> (a -> a) -> a -> a+--     foldNat  Zero    f x = x+--     foldNat (Succ m) f x = f (foldNat m f x)+--+--     data IO r = PutStrLn String (IO r) | GetLine (String -> IO r) | Return r+--+--     putStrLn :: String -> IO U+--     putStrLn str = PutStrLn str (Return Unit)+--+--     getLine :: IO String+--     getLine = GetLine Return+--+--     return :: a -> IO a+--     return = Return+--+--     (>>=) :: IO a -> (a -> IO b) -> IO b+--     PutStrLn str io >>= f = PutStrLn str (io >>= f)+--     GetLine k       >>= f = GetLine (\str -> k str >>= f)+--     Return r        >>= f = f r+--+--     -- Derived functions+--+--     (>>) :: IO U -> IO U -> IO U+--     m >> n = m >>= \_ -> n+--+--     two :: Nat+--     two = one + one+--+--     three :: Nat+--     three = one + one + one+--+--     four :: Nat+--     four = one + one + one + one+--+--     five :: Nat+--     five = one + one + one + one + one+--+--     six :: Nat+--     six = one + one + one + one + one + one+--+--     seven :: Nat+--     seven = one + one + one + one + one + one + one+--+--     eight :: Nat+--     eight = one + one + one + one + one + one + one + one+--+--     nine :: Nat+--     nine = one + one + one + one + one + one + one + one + one+--+--     ten :: Nat+--     ten = one + one + one + one + one + one + one + one + one + one+--+--     replicateM_ :: Nat -> IO U -> IO U+--     replicateM_ n io = foldNat n (io >>) (return Unit)+--+--     ninetynine :: Nat+--     ninetynine = nine * ten + nine+--+--     main_ :: IO U+--     main_ = getLine >>= putStrLn++-- "Free" variables+(   \(String : *   )+->  \(U : *)+->  \(Unit : U)++    -- Simple prelude+->  (   \(Nat : *)+    ->  \(zero : Nat)+    ->  \(one : Nat)+    ->  \((+) : Nat -> Nat -> Nat)+    ->  \((*) : Nat -> Nat -> Nat)+    ->  \(foldNat : Nat -> forall (a : *) -> (a -> a) -> a -> a)+    ->  \(IO : * -> *)+    ->  \(return : forall (a : *) -> a -> IO a)+    ->  \((>>=)+        :   forall (a : *)+        ->  forall (b : *)+        ->  IO a+        ->  (a -> IO b)+        ->  IO b+        )+    ->  \(putStrLn : String -> IO U)+    ->  \(getLine : IO String)++        -- Derived functions+    ->  (   \((>>) : IO U -> IO U -> IO U)+        ->  \(two   : Nat)+        ->  \(three : Nat)+        ->  \(four  : Nat)+        ->  \(five  : Nat)+        ->  \(six   : Nat)+        ->  \(seven : Nat)+        ->  \(eight : Nat)+        ->  \(nine  : Nat)+        ->  \(ten   : Nat)+        ->  (   \(replicateM_ : Nat -> IO U -> IO U)+            ->  \(ninetynine : Nat)+            ->  replicateM_ ninetynine ((>>=) String U getLine putStrLn)+            )++            -- replicateM_+            (   \(n : Nat)+            ->  \(io : IO U)+            ->  foldNat n (IO U) ((>>) io) (return U Unit)+            )++            -- ninetynine+            ((+) ((*) nine ten) nine)+        )++        -- (>>)+        (   \(m : IO U)+        ->  \(n : IO U)+        ->  (>>=) U U m (\(_ : U) -> n)+        )++        -- two+        ((+) one one)++        -- three+        ((+) one ((+) one one))++        -- four+        ((+) one ((+) one ((+) one one)))++        -- five+        ((+) one ((+) one ((+) one ((+) one one))))++        -- six+        ((+) one ((+) one ((+) one ((+) one ((+) one one)))))++        -- seven+        ((+) one ((+) one ((+) one ((+) one ((+) one ((+) one one))))))++        -- eight+        ((+) one ((+) one ((+) one ((+) one ((+) one ((+) one ((+) one one)))))))+        -- nine+        ((+) one ((+) one ((+) one ((+) one ((+) one ((+) one ((+) one ((+) one one))))))))++        -- ten+        ((+) one ((+) one ((+) one ((+) one ((+) one ((+) one ((+) one ((+) one ((+) one one)))))))))+    )++    -- Nat+    (   forall (a : *)+    ->  (a -> a)+    ->  a+    ->  a+    )++    -- zero+    (   \(a : *)+    ->  \(Succ : a -> a)+    ->  \(Zero : a)+    ->  Zero+    )++    -- one+    (   \(a : *)+    ->  \(Succ : a -> a)+    ->  \(Zero : a)+    ->  Succ Zero+    )++    -- (+)+    (   \(m : forall (a : *) -> (a -> a) -> a -> a)+    ->  \(n : forall (a : *) -> (a -> a) -> a -> a)+    ->  \(a : *)+    ->  \(Succ : a -> a)+    ->  \(Zero : a)+    ->  m a Succ (n a Succ Zero)+    )++    -- (*)+    (   \(m : forall (a : *) -> (a -> a) -> a -> a)+    ->  \(n : forall (a : *) -> (a -> a) -> a -> a)+    ->  \(a : *)+    ->  \(Succ : a -> a)+    ->  \(Zero : a)+    ->  m a (n a Succ) Zero+    )++    -- foldNat+    (   \(n : forall (a : *) -> (a -> a) -> a -> a)+    ->  n+    )++    -- IO+    (   \(r : *)+    ->  forall (x : *)+    ->  (String -> x -> x)+    ->  ((String -> x) -> x)+    ->  (r -> x)+    ->  x+    )++    -- return+    (   \(a : *)+    ->  \(va : a)+    ->  \(x : *)+    ->  \(PutStrLn : String -> x -> x)+    ->  \(GetLine : (String -> x) -> x)+    ->  \(Return : a -> x)+    ->  Return va+    )++    -- (>>=)+    (   \(a : *)+    ->  \(b : *)+    ->  \(m : forall (x : *)+        ->  (String -> x -> x)+        ->  ((String -> x) -> x)+        ->  (a -> x)+        ->  x+        )+    ->  \(f : a+        ->  forall (x : *)+        -> (String -> x -> x)+        -> ((String -> x) -> x)+        -> (b -> x)+        -> x+        )+    ->  \(x : *)+    ->  \(PutStrLn : String -> x -> x)+    ->  \(GetLine : (String -> x) -> x)+    ->  \(Return : b -> x)+    ->  m x PutStrLn GetLine (\(va : a) -> f va x PutStrLn GetLine Return)+    )++    -- putStrLn+    (   \(str : String)+    ->  \(x : *)+    ->  \(PutStrLn : String -> x -> x  )+    ->  \(GetLine  : (String -> x) -> x)+    ->  \(Return   : U -> x)+    ->  PutStrLn str (Return Unit)+    )++    -- getLine+    (   \(x : *)+    ->  \(PutStrLn : String -> x -> x  )+    ->  \(GetLine  : (String -> x) -> x)+    ->  \(Return   : String -> x)+    -> GetLine Return+    )+)
+ test/src/example15.mt view
@@ -0,0 +1,148 @@+-- corecursive.mt++-- data IOF r s = PutStrLn String s | GetLine (String -> s) | Return r+--+-- data IO r = forall s . MkIO s (s -> IOF r s)+--+-- main = MkIO Nothing (maybe (\str -> PutStrLn str Nothing) (GetLine Just))++(   \(String : *)+->  (   \(Maybe : * -> *)+    ->  \(Just : forall (a : *) -> a -> Maybe a)+    ->  \(Nothing : forall (a : *) -> Maybe a)+    ->  \(  maybe+        :   forall (a : *) -> Maybe a -> forall (x : *) -> (a -> x) -> x -> x+        )+    ->  \(IOF : * -> * -> *)+    ->  \(  PutStrLn+        :   forall (r : *)+        ->  forall (s : *)+        ->  String+        ->  s+        ->  IOF r s+        )+    ->  \(  GetLine+        :   forall (r : *)+        ->  forall (s : *)+        ->  (String -> s)+        ->  IOF r s+        )+    ->  \(  Return+        :   forall (r : *)+        ->  forall (s : *)+        ->  r+        ->  IOF r s+        )+    ->  (   \(IO : * -> *)+        ->  \(  MkIO+            :   forall (r : *) -> forall (s : *) -> s -> (s -> IOF r s) -> IO r+            )+        ->  (   \(main : forall (r : *) -> IO r)+            ->  main+            )++            -- main+            (   \(r : *)+            ->  MkIO+                r+                (Maybe String)+                (Nothing String)+                (   \(m : Maybe String)+                ->  maybe+                        String+                        m+                        (IOF r (Maybe String))+                        (\(str : String) ->+                            PutStrLn r (Maybe String) str (Nothing String)+                        )+                        (GetLine r (Maybe String) (Just String))+                )+            )+        )++        -- IO+        (   \(r : *)+        ->  forall (x : *)+        ->  (forall (s : *) -> s -> (s -> IOF r s) -> x)+        ->  x+        )++        -- MkIO+        (   \(r : *)+        ->  \(s : *)+        ->  \(seed : s)+        ->  \(step : s -> IOF r s)+        ->  \(x : *)+        ->  \(k : forall (s : *) -> s -> (s -> IOF r s) -> x)+        ->  k s seed step+        )+    )++    -- Maybe+    (\(a : *) -> forall (x : *) -> (a -> x) -> x -> x)++    -- Just+    (   \(a : *)+    ->  \(va : a)+    ->  \(x : *)+    ->  \(Just : a -> x)+    ->  \(Nothing : x)+    ->  Just va+    )++    -- Nothing+    (   \(a : *)+    ->  \(x : *)+    ->  \(Just : a -> x)+    ->  \(Nothing : x)+    ->  Nothing+    )++    -- maybe+    (\(a : *) -> \(m : forall (x : *) -> (a -> x) -> x -> x) -> m)++    -- IOF+    (   \(r : *)+    ->  \(s : *)+    ->  forall (x : *)+    ->  (String -> s -> x)+    ->  ((String -> s) -> x)+    ->  (r -> x)+    ->  x+    )++    -- PutStrLn+    (   \(r : *)+    ->  \(s : *)+    ->  \(str : String)+    ->  \(vs : s)+    ->  \(x : *)+    ->  \(PutStrLn : String -> s -> x)+    ->  \(GetLine : (String -> s) -> x)+    ->  \(Return : r -> x)+    ->  PutStrLn str vs+    )++    -- GetLine+    (   \(r : *)+    ->  \(s : *)+    ->  \(k : String -> s)+    ->  \(x : *)+    ->  \(PutStrLn : String -> s -> x)+    ->  \(GetLine : (String -> s) -> x)+    ->  \(Return : r -> x)+    ->  GetLine k+    )++    -- Return+    (   \(r : *)+    ->  \(s : *)+    ->  \(vr : r)+    ->  \(x : *)+    ->  \(PutStrLn : String -> s -> x)+    ->  \(GetLine : (String -> s) -> x)+    ->  \(Return : r -> x)+    ->  Return vr+    )++)
+ test/src/example2.mt view
@@ -0,0 +1,8 @@+-- id2.mt++(   \(id : forall (a : *) -> a -> a)+->  id (forall (a : *) -> a -> a) id  -- Apply the identity function to itself+)++-- id+(\(a : *) -> \(x : a) -> x)
+ test/src/example3.mt view
@@ -0,0 +1,27 @@+-- bool.mt++-- let data Bool = True | False+--+-- in  if True then One else Zero++(   \(Bool : *)+->  \(True  : Bool)+->  \(False : Bool)+->  \(if : Bool -> forall (r : *) -> r -> r -> r)+->  \(Int  : *)+->  \(Zero : Int)+ -> \(One  : Int)+->  if True Int One Zero+)++-- Bool+(forall (r : *) -> r -> r -> r)++-- True+(\(r : *) -> \(x : r) -> \(_ : r) -> x)++-- False+(\(r : *) -> \(_ : r) -> \(x : r) -> x)++-- if+(\(b : forall (r : *) -> r -> r -> r) -> b)
+ test/src/example4.mt view
@@ -0,0 +1,39 @@+-- pair.mt++-- let Pair a b = P a b+--+-- in  \x y -> snd (P x y)++(   \(Pair : * -> * -> *)+->  \(P    : forall (a : *) -> forall (b : *) -> a -> b -> Pair a b)+->  \(fst  : forall (a : *) -> forall (b : *) -> Pair a b -> a)+->  \(snd  : forall (a : *) -> forall (b : *) -> Pair a b -> b)+->  \(a : *) -> \(x : a) -> \(y : a) -> snd a a (P a a x y)+)++-- Pair+(\(a : *) -> \(b : *) -> forall (r : *) -> (a -> b -> r) -> r)++-- P+(   \(a : *)+->  \(b : *)+->  \(va : a)+->  \(vb : b)+->  \(r : *)+->  \(Pair : a -> b -> r)+->  Pair va vb+)++-- fst+(   \(a : *)+->  \(b : *)+->  \(p : forall (r : *) -> (a -> b -> r) -> r)+->  p a (\(x : a) -> \(_ : b) -> x)+)++-- snd+(   \(a : *)+->  \(b : *)+->  \(p : forall (r : *) -> (a -> b -> r) -> r)+->  p b (\(_ : a) -> \(x : b) -> x)+)
+ test/src/example5.mt view
@@ -0,0 +1,79 @@+-- all.mt++-- let data Bool = True | False+--+--     data List a = Cons a (List a) | Nil+--+-- in  let (&&) :: Bool -> Bool -> Bool+--         (&&) b1 b2 = if b1 then b2 else False+--+--         bools :: List Bool+--         bools = Cons True (Cons True (Cons True Nil))+--+--     in  foldr bools (&&) True++(   \(Bool : *)+->  \(True  : Bool)+->  \(False : Bool)+->  \(if : Bool -> forall (r : *) -> r -> r -> r)+->  \(List : * -> *)+->  \(Cons : forall (a : *) -> a -> List a -> List a)+->  \(Nil  : forall (a : *)                -> List a)+->  \(  foldr+    :   forall (a : *) -> List a -> forall (r : *) -> (a -> r -> r) -> r -> r+    )+->  (   \((&&) : Bool -> Bool -> Bool)+    ->  \(bools : List Bool)+    ->  foldr Bool bools Bool (&&) True+    )++    -- (&&)+    (\(x : Bool) -> \(y : Bool) -> if x Bool y False)++    -- bools+    (Cons Bool True (Cons Bool True (Cons Bool True (Nil Bool))))+)++-- Bool+(forall (r : *) -> r -> r -> r)++-- True+(\(r : *) -> \(x : r) -> \(_ : r) -> x)++-- False+(\(r : *) -> \(_ : r) -> \(x : r) -> x)++-- if+(\(b : forall (r : *) -> r -> r -> r) -> b)++-- List+(   \(a : *)+->  forall (list : *)+->  (a -> list -> list)  -- Cons+->  list                 -- Nil+->  list+)++-- Cons+(   \(a : *)+->  \(va  : a)+->  \(vas : forall (list : *) -> (a -> list -> list) -> list -> list)+->  \(list : *)+->  \(Cons : a -> list -> list)+->  \(Nil  : list)+->  Cons va (vas list Cons Nil)+)++-- Nil+(   \(a : *)+->  \(list : *)+->  \(Cons : a -> list -> list)+->  \(Nil  : list)+->  Nil+)++-- foldr+(   \(a : *)+->  \(vas : forall (list : *) -> (a -> list -> list) -> list -> list)+->  vas+)
+ test/src/example6.mt view
@@ -0,0 +1,24 @@+-- mapid1.mt++(    \(List : * -> *)+->   \(map  : forall (a : *) -> forall (b : *) -> (a -> b) -> List a -> List b)+->   \(id   : forall (a : *) -> a -> a)+    ->   \(a : *) -> map a a (id a)+)++-- List+(\(a : *) -> forall (x : *) -> (a -> x -> x) -> x -> x)++-- map+(   \(a : *)+->  \(b : *)+->  \(f : a -> b)+->  \(l : forall (x : *) -> (a -> x -> x) -> x -> x)+->  \(x : *)+->  \(Cons : b -> x -> x)+->  \(Nil: x)+->  l x (\(va : a) -> \(vx : x) -> Cons (f va) vx) Nil+)++-- id+(\(a : *) -> \(va : a) -> va)
+ test/src/example7.mt view
@@ -0,0 +1,24 @@+-- mapid2.mt++(    \(List : * -> *)+->   \(map  : forall (a : *) -> forall (b : *) -> (a -> b) -> List a -> List b)+->   \(id   : forall (a : *) -> a -> a)+    ->   \(a : *) -> id (List a)+)++-- List+(\(a : *) -> forall (x : *) -> (a -> x -> x) -> x -> x)++-- map+(   \(a : *)+->  \(b : *)+->  \(f : a -> b)+->  \(l : forall (x : *) -> (a -> x -> x) -> x -> x)+->  \(x : *)+->  \(Cons : b -> x -> x)+->  \(Nil: x)+->  l x (\(va : a) -> \(vx : x) -> Cons (f va) vx) Nil+)++-- id+(\(a : *) -> \(va : a) -> va)
+ test/src/example8.mt view
@@ -0,0 +1,45 @@+-- mapcomp1.mt++-- map (f . g)++(   \(List : * -> *)+->  \(map  : forall (a : *) -> forall (b : *) -> (a -> b) -> List a -> List b)+->  \(  (.)+    :   forall (a : *)+    ->  forall (b : *)+    ->  forall (c : *)+    ->  (b -> c)+    ->  (a -> b)+    ->  (a -> c)+    )+    ->  \(a : *)+    ->  \(b : *)+    ->  \(c : *)+    ->  \(f : b -> c)+    ->  \(g : a -> b)+    ->  map a c ((.) a b c f g)+)++-- List+(\(a : *) -> forall (x : *) -> (a -> x -> x) -> x -> x)++-- map+(   \(a : *)+->  \(b : *)+->  \(f : a -> b)+->  \(l : forall (x : *) -> (a -> x -> x) -> x -> x)+->  \(x : *)+->  \(Cons : b -> x -> x)+->  \(Nil: x)+->  l x (\(va : a) -> \(vx : x) -> Cons (f va) vx) Nil+)++-- (.)+(   \(a : *)+->  \(b : *)+->  \(c : *)+->  \(f : b -> c)+->  \(g : a -> b)+->  \(va : a)+->  f (g va)+)
+ test/src/example9.mt view
@@ -0,0 +1,43 @@+-- mapcomp2.mt++(   \(List : * -> *)+->  \(map  : forall (a : *) -> forall (b : *) -> (a -> b) -> List a -> List b)+->  \(  (.)+    :   forall (a : *)+    ->  forall (b : *)+    ->  forall (c : *)+    ->  (b -> c)+    ->  (a -> b)+    ->  (a -> c)+    )+    ->  \(a : *)+    ->  \(b : *)+    ->  \(c : *)+    ->  \(f : b -> c)+    ->  \(g : a -> b)+    ->  (.) (List a) (List b) (List c) (map b c f) (map a b g)+)++-- List+(\(a : *) -> forall (x : *) -> (a -> x -> x) -> x -> x)++-- map+(   \(a : *)+->  \(b : *)+->  \(f : a -> b)+->  \(l : forall (x : *) -> (a -> x -> x) -> x -> x)+->  \(x : *)+->  \(Cons : b -> x -> x)+->  \(Nil: x)+->  l x (\(va : a) -> \(vx : x) -> Cons (f va) vx) Nil+)++-- (.)+(   \(a : *)+->  \(b : *)+->  \(c : *)+->  \(f : b -> c)+->  \(g : a -> b)+->  \(va : a)+->  f (g va)+)