packages feed

Agda 2.3.0.1 → 2.3.2

raw patch · 208 files changed

+23170/−12777 lines, 208 filesdep +Agdadep +Win32dep +deepseqdep −sybdep −utf8-stringdep ~QuickCheckdep ~basedep ~bytestringnew-component:exe:agdanew-uploader

Dependencies added: Agda, Win32, deepseq, geniplate, parallel, text, time, unordered-containers

Dependencies removed: syb, utf8-string

Dependency ranges changed: QuickCheck, base, bytestring, containers, directory, hashable, haskeline, haskell-src-exts, mtl

Files

Agda.cabal view
@@ -1,10 +1,10 @@ name:            Agda-version:         2.3.0.1+version:         2.3.2 cabal-version:   >= 1.8 build-type:      Simple license:         OtherLicense license-file:    LICENSE-author:          Ulf Norell, Nils Anders Danielsson, Catarina Coquand, Makoto Takeyama, Andreas Abel, Darin Morrison...+author:          Ulf Norell, Nils Anders Danielsson, Andreas Abel, Makoto Takeyama, Catarina Coquand, with contributions by Stevan Andjelkovic, Marcin Benke, Jean-Philippe Bernardy, James Chapman, Dominique Devriese, Peter Divanski, Fredrik Nordvall Forsberg, Olle Frediksson, Daniel Gustafsson, Alan Jeffrey, Fredrik Lindblad, Guilhem Moulin, Nicolas Pouillard, Andrés Sicard-Ramírez and many more. maintainer:      Ulf Norell <ulfn@chalmers.se> homepage:        http://wiki.portal.chalmers.se/agda/ bug-reports:     http://code.google.com/p/agda/issues/list@@ -25,16 +25,14 @@   similarities with other proof assistants based on dependent types,   such as Coq, Epigram and NuPRL.   .-  Note that if you want to use the command-line program (agda), then-  you should also install the Agda-executable package. The Agda-  package includes an Emacs mode for Agda, but you need to set up the-  Emacs mode yourself (for instance by running @agda-mode setup@; see-  the README).+  This package includes both a command-line program (agda) and an+  Emacs mode. If you want to use the Emacs mode you can set it up by+  running @agda-mode setup@ (see the README).   .-  Note also that this library does not follow the package versioning-  policy, because the library is only intended to be used by the Emacs-  mode and the Agda-executable package.-tested-with:        GHC == 7.4.1+  Note that the Agda library does not follow the package versioning+  policy, because it is not intended to be used by third-party+  packages.+tested-with:        GHC == 7.6.1 extra-source-files: src/full/Agda/undefined.h                     README                     doc/release-notes/*.txt@@ -44,6 +42,7 @@                     EpicInclude/AgdaPrelude.e                     EpicInclude/stdagda.c                     EpicInclude/stdagda.h+                    agda.sty  source-repository head   type:     darcs@@ -52,13 +51,7 @@ source-repository this   type:     darcs   location: http://code.haskell.org/Agda/-  tag:      2.3.0--flag use-locale-  description:-    Try to use the character encoding specified by the locale for most-    of the IO going to/from stdin and stdout. (Note that source files-    must always be encoded using UTF8.)+  tag:      2.3.2  flag epic   default: False@@ -68,38 +61,50 @@  library   hs-source-dirs:   src/full-  if flag(use-locale)-    build-depends:  base >= 4.2 && < 4.6-  else-    build-depends:  base == 4.1.*,-                    utf8-string == 0.3.*   if flag(epic)     build-depends:  epic >= 0.1.13 && < 0.10-  build-depends:    mtl == 2.0.*,-                    QuickCheck >= 2.3 && < 2.5,-                    haskell-src-exts >= 1.9.6 && < 1.12,-                    containers >= 0.1 && < 0.5,++  if os(windows)+    build-depends:  Win32 == 2.2.*++  build-depends:    base >= 4.2 && < 4.7,+                    mtl >= 2.0 && < 2.2,+                    QuickCheck >= 2.3 && < 2.6,+                    haskell-src-exts >= 1.9.6 && < 1.14,+                    containers >= 0.1 && < 0.6,+                    unordered-containers == 0.2.*,                     pretty >= 1.0 && < 1.2,-                    directory >= 1.0 && < 1.2,-                    old-time >= 1.0 && < 1.2,-                    bytestring >= 0.9.0.1 && < 0.10,+                    bytestring >= 0.9.0.1 && < 0.11,                     array >= 0.1 && < 0.5,                     binary >= 0.4.4 && < 0.6,                     zlib >= 0.4.0.1 && < 0.6,                     filepath >= 1.1 && < 1.4,                     process >= 1.0.1.0 && < 1.2,-                    haskeline >= 0.6.3.2 && < 0.7,+                    haskeline >= 0.6.3.2 && < 0.8,                     xhtml == 3000.2.*,-                    hashable == 1.1.*,+                    hashable >= 1.1.2.3 && < 1.2,                     hashtables == 1.0.*,-                    syb >= 0.1 && < 0.4+                    geniplate >= 0.6.0.3 && < 0.7,+                    parallel < 3.3,+                    deepseq == 1.3.*,+                    text == 0.11.*++  if impl(ghc < 7.6)+    build-depends:  old-time >= 1.0 && < 1.2,+                    directory >= 1.0 && < 1.2+  else+      build-depends:  time == 1.4.*,+                      directory == 1.2.*+   build-tools:      happy >= 1.15 && < 2,                     alex >= 2.3.1 && < 3.1   extensions:       CPP   exposed-modules:  Agda.Main                     Agda.ImpossibleTest                     Agda.Interaction.BasicOps-                    Agda.Interaction.GhciTop+                    Agda.Interaction.GhcTop+                    Agda.Interaction.InteractionTop+                    Agda.Compiler.CallCompiler                     Agda.Compiler.HaskellTypes                     Agda.Compiler.Epic.AuxAST                     Agda.Compiler.Epic.CaseOpts@@ -142,10 +147,13 @@                     Agda.Interaction.Highlighting.Precise                     Agda.Interaction.Highlighting.Range                     Agda.Interaction.Highlighting.Vim+                    Agda.Interaction.Highlighting.LaTeX                     Agda.Interaction.Imports+                    Agda.Interaction.Response                     Agda.Interaction.MakeCase                     Agda.Interaction.Monad                     Agda.Interaction.Options+                    Agda.Syntax.Abstract.Copatterns                     Agda.Syntax.Abstract.Name                     Agda.Syntax.Abstract.Pretty                     Agda.Syntax.Abstract.Views@@ -178,7 +186,6 @@                     Agda.Syntax.Position                     Agda.Syntax.Scope.Base                     Agda.Syntax.Scope.Monad-                    Agda.Syntax.Strict                     Agda.Syntax.Translation.AbstractToConcrete                     Agda.Syntax.Translation.ConcreteToAbstract                     Agda.Syntax.Translation.InternalToAbstract@@ -199,8 +206,10 @@                     Agda.TypeChecking.Conversion                     Agda.TypeChecking.Coverage                     Agda.TypeChecking.Coverage.Match+                    Agda.TypeChecking.Coverage.SplitTree                     Agda.TypeChecking.Datatypes                     Agda.TypeChecking.DisplayForm+                    Agda.TypeChecking.DropArgs                     Agda.TypeChecking.Eliminators                     Agda.TypeChecking.Empty                     Agda.TypeChecking.EtaContract@@ -209,6 +218,7 @@                     Agda.TypeChecking.Forcing                     Agda.TypeChecking.Implicit                     Agda.TypeChecking.Injectivity+                    Agda.TypeChecking.InstanceArguments                     Agda.TypeChecking.Irrelevance                     Agda.TypeChecking.Level                     Agda.TypeChecking.LevelConstraints@@ -228,6 +238,7 @@                     Agda.TypeChecking.Monad.Mutual                     Agda.TypeChecking.Monad.Open                     Agda.TypeChecking.Monad.Options+                    Agda.TypeChecking.Monad.Sharing                     Agda.TypeChecking.Monad.Signature                     Agda.TypeChecking.Monad.SizedTypes                     Agda.TypeChecking.Monad.State@@ -239,6 +250,7 @@                     Agda.TypeChecking.Positivity                     Agda.TypeChecking.Pretty                     Agda.TypeChecking.Primitive+                    Agda.TypeChecking.ProjectionLike                     Agda.TypeChecking.Quote                     Agda.TypeChecking.Rebind                     Agda.TypeChecking.RecordPatterns@@ -253,6 +265,7 @@                     Agda.TypeChecking.Rules.LHS.Implicit                     Agda.TypeChecking.Rules.LHS.Instantiate                     Agda.TypeChecking.Rules.LHS.Problem+                    Agda.TypeChecking.Rules.LHS.ProblemRest                     Agda.TypeChecking.Rules.LHS.Split                     Agda.TypeChecking.Rules.LHS.Unify                     Agda.TypeChecking.Rules.Record@@ -271,12 +284,12 @@                     Agda.Utils.FileName                     Agda.Utils.Fresh                     Agda.Utils.Function-                    Agda.Utils.Generics+                    Agda.Utils.Geniplate                     Agda.Utils.Graph                     Agda.Utils.Hash+                    Agda.Utils.HashMap                     Agda.Utils.Impossible                     Agda.Utils.IO.Binary-                    Agda.Utils.IO.Locale                     Agda.Utils.IO.UTF8                     Agda.Utils.List                     Agda.Utils.Map@@ -284,6 +297,7 @@                     Agda.Utils.Monad                     Agda.Utils.Permutation                     Agda.Utils.Pointer+                    Agda.Utils.Pointed                     Agda.Utils.Pretty                     Agda.Utils.QuickCheck                     Agda.Utils.ReadP@@ -292,6 +306,7 @@                     Agda.Utils.String                     Agda.Utils.Suffix                     Agda.Utils.TestHelpers+                    Agda.Utils.Time                     Agda.Utils.Trie                     Agda.Utils.Tuple                     Agda.Utils.Unicode@@ -320,6 +335,8 @@   -- The Cabal-generated module Paths_Agda triggers a warning under   -- GHC 7.2.1/7.2.2 (at least when certain versions of Cabal are   -- used).+  -- if impl(ghc < 7.2.1) || impl(ghc > 7.2.2)+  --   ghc-options:    -Werror   if impl(ghc >= 6.12)     ghc-options:    -fwarn-dodgy-exports                     -fwarn-wrong-do-bind@@ -327,15 +344,26 @@     ghc-options:    -fwarn-identities   ghc-prof-options: -auto-all +executable agda+  hs-source-dirs: src/main+  main-is:        Main.hs+  build-depends:  Agda == 2.3.2,+                  -- Nothing is used from the following package, except+                  -- for the prelude.+                  base >= 3 && < 6+  if impl(ghc >= 7)+    -- If someone installs Agda with the setuid bit set, then the+    -- presence of +RTS may be a security problem (see GHC bug #3910).+    -- However, we sometimes recommend people to use +RTS to control+    -- Agda's memory usage, so we want this functionality enabled by+    -- default.+    ghc-options:  -rtsopts+ executable agda-mode   hs-source-dirs:   src/agda-mode   main-is:          Main.hs   other-modules:    Paths_Agda-  if flag(use-locale)-    build-depends:  base >= 4.2 && < 4.6-  else-    build-depends:  base == 4.1.*,-                    utf8-string == 0.3.*-  build-depends:    filepath >= 1.1 && < 1.4,+  build-depends:    base >= 4.2 && < 4.7,+                    filepath >= 1.1 && < 1.4,                     process >= 1.0.1.0 && < 1.2,-                    directory >= 1.0 && < 1.2+                    directory >= 1.0 && < 1.3
LICENSE view
@@ -1,4 +1,4 @@-Copyright (c) 2005-2011 Ulf Norell, Nils Anders Danielsson, Catarina+Copyright (c) 2005-2012 Ulf Norell, Nils Anders Danielsson, Catarina Coquand, Makoto Takeyama, Andreas Abel, Karl Mehltretter, Marcin Benke, Darin Morrison. 
README view
@@ -33,7 +33,7 @@   commands:      cabal update-    cabal install Agda-executable+    cabal install Agda     agda-mode setup    The last command tries to set up Emacs for use with Agda. As an@@ -42,6 +42,16 @@     (load-file (let ((coding-system-for-read 'utf-8))                     (shell-command-to-string "agda-mode locate"))) +  It is also possible (but not necessary) to compile the Emacs mode's+  files:++    agda-mode compile++  This can, in some cases, give a noticeable speedup.++  WARNING: If you reinstall the Agda mode without recompiling the Emacs+  Lisp files, then Emacs may continue using the old, compiled files.+ * Using the source tar balls available from the Agda Wiki, or the   development version of the code available from our darcs repository. @@ -53,10 +63,8 @@         cabal update         cabal install         agda-mode setup-        cd src/main-        cabal install -      The third command tries to set up Emacs for use with Agda. As an+      The last command tries to set up Emacs for use with Agda. As an       alternative you can copy the following text to your .emacs file:          (load-file (let ((coding-system-for-read 'utf-8))@@ -66,10 +74,20 @@       then you can give various flags to cabal install, see       cabal install --help. -  2b) Instead of following 2a you can try to install Agda (including-      batch-mode tool and Emacs mode) by running the following-      command:+      It is also possible (but not necessary) to compile the Emacs+      mode's files: +        agda-mode compile++      This can, in some cases, give a noticeable speedup.++      WARNING: If you reinstall the Agda mode without recompiling the+      Emacs Lisp files, then Emacs may continue using the old,+      compiled files.++  2b) Instead of following 2a you can try to install Agda (including a+      compiled Emacs mode) by running the following command:+         make install  ------------------------------------------------------------------------@@ -115,7 +133,6 @@    Alex:          http://www.haskell.org/alex/    Happy:         http://www.haskell.org/happy/    GNU Emacs:     http://www.gnu.org/software/emacs/-   haskell-mode:  http://projects.haskell.org/haskellmode-emacs/  You should also make sure that programs installed by cabal-install are on your shell's search path.@@ -145,7 +162,6 @@      cabal update     cabal install Agda -fepic-    cabal install Agda-executable     agda-mode setup  * When installing using a source tar ball, following the instructions@@ -154,8 +170,6 @@     cabal update     cabal install -fepic     agda-mode setup-    cd src/main-    cabal install  * When installing using a source tar ball, following the instructions   in 2b) above:
dist/build/Agda/Syntax/Parser/Lexer.hs view
@@ -50,19 +50,19 @@ import GlaExts #endif alex_base :: AlexAddr-alex_base = AlexA# "\xf7\xff\xff\xff\x6c\x00\x00\x00\xc8\x00\x00\x00\x3c\x01\x00\x00\x40\x01\x00\x00\x44\x01\x00\x00\x4b\x01\x00\x00\x41\x02\x00\x00\x88\xff\xff\xff\xd9\xff\xff\xff\xda\xff\xff\xff\x99\xff\xff\xff\x20\x03\x00\x00\x5e\x00\x00\x00\x7c\x03\x00\x00\x7b\x03\x00\x00\xfb\x03\x00\x00\xa4\xff\xff\xff\x7b\x04\x00\x00\xfb\x04\x00\x00\x7b\x05\x00\x00\xfb\x05\x00\x00\x7b\x06\x00\x00\xfb\x06\x00\x00\x9b\xff\xff\xff\xa8\xff\xff\xff\x91\xff\xff\xff\xa9\xff\xff\xff\x9f\xff\xff\xff\xab\xff\xff\xff\x00\x00\x00\x00\x6c\x07\x00\x00\x00\x00\x00\x00\xdd\x07\x00\x00\xac\xff\xff\xff\x00\x00\x00\x00\x4e\x08\x00\x00\x00\x00\x00\x00\xbf\x08\x00\x00\x00\x00\x00\x00\x00\x09\x00\x00\x00\x00\x00\x00\x41\x09\x00\x00\x00\x00\x00\x00\x82\x09\x00\x00\x00\x00\x00\x00\xc3\x09\x00\x00\xa2\x0a\x00\x00\x21\x0b\x00\x00\xe1\x0a\x00\x00\x00\x00\x00\x00\xe1\x0b\x00\x00\xa1\x0b\x00\x00\x00\x00\x00\x00\xa1\x0c\x00\x00\x61\x0c\x00\x00\x00\x00\x00\x00\x61\x0d\x00\x00\x07\x00\x00\x00\xd7\x0d\x00\x00\x39\x0d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xcd\x0e\x00\x00\xc3\x0f\x00\x00\xb9\x10\x00\x00\xaf\x11\x00\x00\xa5\x12\x00\x00\x9b\x13\x00\x00\x91\x14\x00\x00\x87\x15\x00\x00\x7d\x16\x00\x00\x73\x17\x00\x00\x69\x18\x00\x00\x5f\x19\x00\x00\x55\x1a\x00\x00\x4b\x1b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x93\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x42\x1c\x00\x00\x39\x1d\x00\x00\x30\x1e\x00\x00\x27\x1f\x00\x00\x1e\x20\x00\x00\x15\x21\x00\x00\x0c\x22\x00\x00\x03\x23\x00\x00\xfa\x23\x00\x00\xf1\x24\x00\x00\xe8\x25\x00\x00\xdf\x26\x00\x00\xd6\x27\x00\x00\xcd\x28\x00\x00\xc4\x29\x00\x00\xbb\x2a\x00\x00\xb2\x2b\x00\x00\xa9\x2c\x00\x00\xa0\x2d\x00\x00\x97\x2e\x00\x00\x8e\x2f\x00\x00\x85\x30\x00\x00\x7c\x31\x00\x00\x73\x32\x00\x00\x6a\x33\x00\x00\x61\x34\x00\x00\x58\x35\x00\x00\x4f\x36\x00\x00\x46\x37\x00\x00\x3d\x38\x00\x00\x34\x39\x00\x00\x2b\x3a\x00\x00\x22\x3b\x00\x00\x19\x3c\x00\x00\x10\x3d\x00\x00\x07\x3e\x00\x00\xfe\x3e\x00\x00\xf5\x3f\x00\x00\xec\x40\x00\x00\xe3\x41\x00\x00\xda\x42\x00\x00\xd1\x43\x00\x00\xc8\x44\x00\x00\xbf\x45\x00\x00\xb6\x46\x00\x00\xad\x47\x00\x00\xa4\x48\x00\x00\x9b\x49\x00\x00\x92\x4a\x00\x00\x89\x4b\x00\x00\x80\x4c\x00\x00\x77\x4d\x00\x00\x6e\x4e\x00\x00\x65\x4f\x00\x00\x5c\x50\x00\x00\x53\x51\x00\x00\x4a\x52\x00\x00\x41\x53\x00\x00\x38\x54\x00\x00\x2f\x55\x00\x00\x26\x56\x00\x00\x1d\x57\x00\x00\x14\x58\x00\x00\x0b\x59\x00\x00\x02\x5a\x00\x00\xf9\x5a\x00\x00\xf0\x5b\x00\x00\xe7\x5c\x00\x00\xde\x5d\x00\x00\xef\xff\xff\xff\x00\x00\x00\x00\xd4\x5e\x00\x00\xd4\x5f\x00\x00\xca\x60\x00\x00\xca\x61\x00\x00\xca\x62\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc4\x0e\x00\x00\xad\x0f\x00\x00\xa3\x10\x00\x00\x99\x11\x00\x00\x85\x13\x00\x00\x7b\x14\x00\x00\x71\x15\x00\x00\x67\x16\x00\x00\x5d\x17\x00\x00\x3f\x1a\x00\x00\x39\x1c\x00\x00\x30\x1d\x00\x00\x27\x1e\x00\x00\x1e\x1f\x00\x00\x15\x20\x00\x00\x0c\x21\x00\x00\xfa\x22\x00\x00\xf1\x23\x00\x00\xe8\x24\x00\x00\xdf\x25\x00\x00\xd6\x26\x00\x00\xcd\x27\x00\x00\xc4\x28\x00\x00\xc5\x29\x00\x00\xb2\x2a\x00\x00\xaa\x2c\x00\x00\x74\x32\x00\x00\x23\x3b\x00\x00\xed\x40\x00\x00\x9b\x48\x00\x00\xbe\x5e\x00\x00\xa9\x63\x00\x00\x05\x64\x00\x00\x61\x64\x00\x00\xbd\x64\x00\x00\x00\x00\x00\x00\x19\x65\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe5\xff\xff\xff\xe6\xff\xff\xff\x00\x00\x00\x00\x75\x65\x00\x00\xd1\x65\x00\x00\x53\x34\x00\x00\x2d\x66\x00\x00\x89\x66\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe5\x66\x00\x00\x33\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x31\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x41\x67\x00\x00\x9d\x67\x00\x00\xf9\x67\x00\x00\x55\x68\x00\x00\xb1\x68\x00\x00\x0d\x69\x00\x00\x69\x69\x00\x00\xc5\x69\x00\x00\x21\x6a\x00\x00\x7d\x6a\x00\x00\xd9\x6a\x00\x00\x35\x6b\x00\x00\x91\x6b\x00\x00\xed\x6b\x00\x00\x49\x6c\x00\x00\xa5\x6c\x00\x00\x01\x6d\x00\x00\x5d\x6d\x00\x00\xb9\x6d\x00\x00\x15\x6e\x00\x00\x71\x6e\x00\x00\xcd\x6e\x00\x00\x29\x6f\x00\x00\x85\x6f\x00\x00\xe1\x6f\x00\x00\x3d\x70\x00\x00\x99\x70\x00\x00\xf5\x70\x00\x00\x51\x71\x00\x00\xad\x71\x00\x00\x09\x72\x00\x00\x65\x72\x00\x00\xc1\x72\x00\x00\x1d\x73\x00\x00\x79\x73\x00\x00\xd5\x73\x00\x00\x31\x74\x00\x00\x8d\x74\x00\x00\xe9\x74\x00\x00\x45\x75\x00\x00\xa1\x75\x00\x00\xfd\x75\x00\x00\x59\x76\x00\x00\xb5\x76\x00\x00\x11\x77\x00\x00\x6d\x77\x00\x00\xc9\x77\x00\x00\x25\x78\x00\x00\x81\x78\x00\x00\xdd\x78\x00\x00\x39\x79\x00\x00\x95\x79\x00\x00\xf1\x79\x00\x00\x4d\x7a\x00\x00\xa9\x7a\x00\x00\x05\x7b\x00\x00\x61\x7b\x00\x00\xbd\x7b\x00\x00\x19\x7c\x00\x00\x75\x7c\x00\x00\xd1\x7c\x00\x00\x2d\x7d\x00\x00\x89\x7d\x00\x00\xe5\x7d\x00\x00\x41\x7e\x00\x00\x9d\x7e\x00\x00\xf9\x7e\x00\x00\x55\x7f\x00\x00\xb1\x7f\x00\x00\x0d\x80\x00\x00\x69\x80\x00\x00\xc5\x80\x00\x00\x21\x81\x00\x00\x7d\x81\x00\x00\xd9\x81\x00\x00\x35\x82\x00\x00\x91\x82\x00\x00\xed\x82\x00\x00\x49\x83\x00\x00\xa5\x83\x00\x00\x01\x84\x00\x00\x5d\x84\x00\x00\xb9\x84\x00\x00\x15\x85\x00\x00\x71\x85\x00\x00\xcd\x85\x00\x00\x29\x86\x00\x00\x85\x86\x00\x00\xe1\x86\x00\x00\x3d\x87\x00\x00\x99\x87\x00\x00\xf5\x87\x00\x00\x51\x88\x00\x00\xad\x88\x00\x00\x09\x89\x00\x00\x65\x89\x00\x00\xc1\x89\x00\x00\x1d\x8a\x00\x00\x79\x8a\x00\x00\xd5\x8a\x00\x00\x31\x8b\x00\x00\x8d\x8b\x00\x00\xe9\x8b\x00\x00\x45\x8c\x00\x00\xa1\x8c\x00\x00\xfd\x8c\x00\x00\x59\x8d\x00\x00\xb5\x8d\x00\x00\x11\x8e\x00\x00\x6d\x8e\x00\x00\xc9\x8e\x00\x00\x25\x8f\x00\x00\x81\x8f\x00\x00\xdd\x8f\x00\x00\x39\x90\x00\x00\x95\x90\x00\x00\xf1\x90\x00\x00\x4d\x91\x00\x00\xa9\x91\x00\x00\x05\x92\x00\x00\x61\x92\x00\x00\xbd\x92\x00\x00\x19\x93\x00\x00\x75\x93\x00\x00\xd1\x93\x00\x00\x2d\x94\x00\x00\x89\x94\x00\x00\xe5\x94\x00\x00\x41\x95\x00\x00\x9d\x95\x00\x00\xf9\x95\x00\x00\x55\x96\x00\x00\xb1\x96\x00\x00\x0d\x97\x00\x00\x69\x97\x00\x00\xc5\x97\x00\x00\x21\x98\x00\x00\x7d\x98\x00\x00\xd9\x98\x00\x00\x35\x99\x00\x00\x91\x99\x00\x00\xed\x99\x00\x00\x49\x9a\x00\x00\xa5\x9a\x00\x00\x01\x9b\x00\x00\x5d\x9b\x00\x00\xb9\x9b\x00\x00\x15\x9c\x00\x00\x71\x9c\x00\x00"#+alex_base = AlexA# "\xf7\xff\xff\xff\x6c\x00\x00\x00\xc8\x00\x00\x00\x3c\x01\x00\x00\x40\x01\x00\x00\x44\x01\x00\x00\x4b\x01\x00\x00\x41\x02\x00\x00\x88\xff\xff\xff\xd9\xff\xff\xff\xda\xff\xff\xff\x99\xff\xff\xff\x20\x03\x00\x00\x5e\x00\x00\x00\x7c\x03\x00\x00\x7b\x03\x00\x00\xfb\x03\x00\x00\xa4\xff\xff\xff\x7b\x04\x00\x00\xfb\x04\x00\x00\x7b\x05\x00\x00\xfb\x05\x00\x00\x7b\x06\x00\x00\xfb\x06\x00\x00\x9b\xff\xff\xff\xa8\xff\xff\xff\x91\xff\xff\xff\xa9\xff\xff\xff\x9f\xff\xff\xff\xab\xff\xff\xff\x00\x00\x00\x00\x6c\x07\x00\x00\x00\x00\x00\x00\xdd\x07\x00\x00\xac\xff\xff\xff\x00\x00\x00\x00\x4e\x08\x00\x00\x00\x00\x00\x00\xbf\x08\x00\x00\x00\x00\x00\x00\x00\x09\x00\x00\x00\x00\x00\x00\x41\x09\x00\x00\x00\x00\x00\x00\x82\x09\x00\x00\x00\x00\x00\x00\xc3\x09\x00\x00\xa2\x0a\x00\x00\x21\x0b\x00\x00\xe1\x0a\x00\x00\x00\x00\x00\x00\xe1\x0b\x00\x00\xa1\x0b\x00\x00\x00\x00\x00\x00\xa1\x0c\x00\x00\x61\x0c\x00\x00\x00\x00\x00\x00\x61\x0d\x00\x00\x07\x00\x00\x00\xd7\x0d\x00\x00\x39\x0d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xcd\x0e\x00\x00\xc3\x0f\x00\x00\xb9\x10\x00\x00\xaf\x11\x00\x00\xa5\x12\x00\x00\x9b\x13\x00\x00\x91\x14\x00\x00\x87\x15\x00\x00\x7d\x16\x00\x00\x73\x17\x00\x00\x69\x18\x00\x00\x5f\x19\x00\x00\x55\x1a\x00\x00\x4b\x1b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x93\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x42\x1c\x00\x00\x39\x1d\x00\x00\x30\x1e\x00\x00\x27\x1f\x00\x00\x1e\x20\x00\x00\x15\x21\x00\x00\x0c\x22\x00\x00\x03\x23\x00\x00\xfa\x23\x00\x00\xf1\x24\x00\x00\xe8\x25\x00\x00\xdf\x26\x00\x00\xd6\x27\x00\x00\xcd\x28\x00\x00\xc4\x29\x00\x00\xbb\x2a\x00\x00\xb2\x2b\x00\x00\xa9\x2c\x00\x00\xa0\x2d\x00\x00\x97\x2e\x00\x00\x8e\x2f\x00\x00\x85\x30\x00\x00\x7c\x31\x00\x00\x73\x32\x00\x00\x6a\x33\x00\x00\x61\x34\x00\x00\x58\x35\x00\x00\x4f\x36\x00\x00\x46\x37\x00\x00\x3d\x38\x00\x00\x34\x39\x00\x00\x2b\x3a\x00\x00\x22\x3b\x00\x00\x19\x3c\x00\x00\x10\x3d\x00\x00\x07\x3e\x00\x00\xfe\x3e\x00\x00\xf5\x3f\x00\x00\xec\x40\x00\x00\xe3\x41\x00\x00\xda\x42\x00\x00\xd1\x43\x00\x00\xc8\x44\x00\x00\xbf\x45\x00\x00\xb6\x46\x00\x00\xad\x47\x00\x00\xa4\x48\x00\x00\x9b\x49\x00\x00\x92\x4a\x00\x00\x89\x4b\x00\x00\x80\x4c\x00\x00\x77\x4d\x00\x00\x6e\x4e\x00\x00\x65\x4f\x00\x00\x5c\x50\x00\x00\x53\x51\x00\x00\x4a\x52\x00\x00\x41\x53\x00\x00\x38\x54\x00\x00\x2f\x55\x00\x00\x26\x56\x00\x00\x1d\x57\x00\x00\x14\x58\x00\x00\x0b\x59\x00\x00\x02\x5a\x00\x00\xf9\x5a\x00\x00\xf0\x5b\x00\x00\xe7\x5c\x00\x00\xde\x5d\x00\x00\xd5\x5e\x00\x00\xcc\x5f\x00\x00\xc3\x60\x00\x00\xba\x61\x00\x00\xb1\x62\x00\x00\xa8\x63\x00\x00\x9f\x64\x00\x00\x96\x65\x00\x00\x8d\x66\x00\x00\x84\x67\x00\x00\x7b\x68\x00\x00\x72\x69\x00\x00\x69\x6a\x00\x00\x60\x6b\x00\x00\x57\x6c\x00\x00\x4e\x6d\x00\x00\x45\x6e\x00\x00\x3c\x6f\x00\x00\x33\x70\x00\x00\x2a\x71\x00\x00\xef\xff\xff\xff\x00\x00\x00\x00\x20\x72\x00\x00\x20\x73\x00\x00\x16\x74\x00\x00\x16\x75\x00\x00\x16\x76\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc4\x0e\x00\x00\xad\x0f\x00\x00\xa3\x10\x00\x00\x99\x11\x00\x00\x85\x13\x00\x00\x7b\x14\x00\x00\x71\x15\x00\x00\x67\x16\x00\x00\x5d\x17\x00\x00\x3f\x1a\x00\x00\x39\x1c\x00\x00\x30\x1d\x00\x00\x27\x1e\x00\x00\x1e\x1f\x00\x00\x15\x20\x00\x00\x0c\x21\x00\x00\xfa\x22\x00\x00\xf1\x23\x00\x00\xe8\x24\x00\x00\xdf\x25\x00\x00\xd6\x26\x00\x00\xcd\x27\x00\x00\xc4\x28\x00\x00\xbb\x29\x00\x00\xbc\x2a\x00\x00\xa9\x2b\x00\x00\xa1\x2d\x00\x00\x6b\x33\x00\x00\x08\x3e\x00\x00\xc9\x44\x00\x00\x5d\x50\x00\x00\x1d\x56\x00\x00\x0a\x72\x00\x00\xf5\x76\x00\x00\x51\x77\x00\x00\xad\x77\x00\x00\x09\x78\x00\x00\x65\x78\x00\x00\x00\x00\x00\x00\xc1\x78\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe5\xff\xff\xff\xe6\xff\xff\xff\x00\x00\x00\x00\x1d\x79\x00\x00\x79\x79\x00\x00\x41\x36\x00\x00\xd5\x79\x00\x00\x31\x7a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8d\x7a\x00\x00\x33\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x31\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe9\x7a\x00\x00\x45\x7b\x00\x00\xa1\x7b\x00\x00\xfd\x7b\x00\x00\x59\x7c\x00\x00\xb5\x7c\x00\x00\x11\x7d\x00\x00\x6d\x7d\x00\x00\xc9\x7d\x00\x00\x25\x7e\x00\x00\x81\x7e\x00\x00\xdd\x7e\x00\x00\x39\x7f\x00\x00\x95\x7f\x00\x00\xf1\x7f\x00\x00\x4d\x80\x00\x00\xa9\x80\x00\x00\x05\x81\x00\x00\x61\x81\x00\x00\xbd\x81\x00\x00\x19\x82\x00\x00\x75\x82\x00\x00\xd1\x82\x00\x00\x2d\x83\x00\x00\x89\x83\x00\x00\xe5\x83\x00\x00\x41\x84\x00\x00\x9d\x84\x00\x00\xf9\x84\x00\x00\x55\x85\x00\x00\xb1\x85\x00\x00\x0d\x86\x00\x00\x69\x86\x00\x00\xc5\x86\x00\x00\x21\x87\x00\x00\x7d\x87\x00\x00\xd9\x87\x00\x00\x35\x88\x00\x00\x91\x88\x00\x00\xed\x88\x00\x00\x49\x89\x00\x00\xa5\x89\x00\x00\x01\x8a\x00\x00\x5d\x8a\x00\x00\xb9\x8a\x00\x00\x15\x8b\x00\x00\x71\x8b\x00\x00\xcd\x8b\x00\x00\x29\x8c\x00\x00\x85\x8c\x00\x00\xe1\x8c\x00\x00\x3d\x8d\x00\x00\x99\x8d\x00\x00\xf5\x8d\x00\x00\x51\x8e\x00\x00\xad\x8e\x00\x00\x09\x8f\x00\x00\x65\x8f\x00\x00\xc1\x8f\x00\x00\x1d\x90\x00\x00\x79\x90\x00\x00\xd5\x90\x00\x00\x31\x91\x00\x00\x8d\x91\x00\x00\xe9\x91\x00\x00\x45\x92\x00\x00\xa1\x92\x00\x00\xfd\x92\x00\x00\x59\x93\x00\x00\xb5\x93\x00\x00\x11\x94\x00\x00\x6d\x94\x00\x00\xc9\x94\x00\x00\x25\x95\x00\x00\x81\x95\x00\x00\xdd\x95\x00\x00\x39\x96\x00\x00\x95\x96\x00\x00\xf1\x96\x00\x00\x4d\x97\x00\x00\xa9\x97\x00\x00\x05\x98\x00\x00\x61\x98\x00\x00\xbd\x98\x00\x00\x19\x99\x00\x00\x75\x99\x00\x00\xd1\x99\x00\x00\x2d\x9a\x00\x00\x89\x9a\x00\x00\xe5\x9a\x00\x00\x41\x9b\x00\x00\x9d\x9b\x00\x00\xf9\x9b\x00\x00\x55\x9c\x00\x00\xb1\x9c\x00\x00\x0d\x9d\x00\x00\x69\x9d\x00\x00\xc5\x9d\x00\x00\x21\x9e\x00\x00\x7d\x9e\x00\x00\xd9\x9e\x00\x00\x35\x9f\x00\x00\x91\x9f\x00\x00\xed\x9f\x00\x00\x49\xa0\x00\x00\xa5\xa0\x00\x00\x01\xa1\x00\x00\x5d\xa1\x00\x00\xb9\xa1\x00\x00\x15\xa2\x00\x00\x71\xa2\x00\x00\xcd\xa2\x00\x00\x29\xa3\x00\x00\x85\xa3\x00\x00\xe1\xa3\x00\x00\x3d\xa4\x00\x00\x99\xa4\x00\x00\xf5\xa4\x00\x00\x51\xa5\x00\x00\xad\xa5\x00\x00\x09\xa6\x00\x00\x65\xa6\x00\x00\xc1\xa6\x00\x00\x1d\xa7\x00\x00\x79\xa7\x00\x00\xd5\xa7\x00\x00\x31\xa8\x00\x00\x8d\xa8\x00\x00\xe9\xa8\x00\x00\x45\xa9\x00\x00\xa1\xa9\x00\x00\xfd\xa9\x00\x00\x59\xaa\x00\x00\xb5\xaa\x00\x00\x11\xab\x00\x00\x6d\xab\x00\x00\xc9\xab\x00\x00\x25\xac\x00\x00\x81\xac\x00\x00\xdd\xac\x00\x00\x39\xad\x00\x00\x95\xad\x00\x00\xf1\xad\x00\x00\x4d\xae\x00\x00\xa9\xae\x00\x00\x05\xaf\x00\x00\x61\xaf\x00\x00\xbd\xaf\x00\x00\x19\xb0\x00\x00\x75\xb0\x00\x00\xd1\xb0\x00\x00\x2d\xb1\x00\x00\x89\xb1\x00\x00\xe5\xb1\x00\x00\x41\xb2\x00\x00\x9d\xb2\x00\x00\xf9\xb2\x00\x00\x55\xb3\x00\x00\xb1\xb3\x00\x00\x0d\xb4\x00\x00\x69\xb4\x00\x00\xc5\xb4\x00\x00\x21\xb5\x00\x00\x7d\xb5\x00\x00\xd9\xb5\x00\x00\x35\xb6\x00\x00\x91\xb6\x00\x00\xed\xb6\x00\x00"#  alex_table :: AlexAddr-alex_table = AlexA# "\x00\x00\x9e\x00\x4f\x00\x4f\x00\x4f\x00\x4e\x00\x98\x00\x99\x00\xc4\x00\x08\x00\x22\x00\x18\x00\x19\x00\x1d\x00\x1c\x00\x1a\x00\x11\x00\x3e\x00\x51\x00\xc7\x00\xc8\x00\x00\x00\x00\x00\x4f\x00\x2e\x01\xd9\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\xd8\x00\xd0\x00\xd1\x00\x2e\x01\x2e\x01\x2e\x01\xe7\x00\xc9\x00\x2e\x01\xde\x00\xdd\x00\xdd\x00\xdd\x00\xdd\x00\xdd\x00\xdd\x00\xdd\x00\xdd\x00\xdd\x00\xcb\x00\xca\x00\x2e\x01\xcc\x00\x2e\x01\xce\x00\xd4\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x43\x01\x2e\x01\x2e\x01\xfd\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\xd3\x00\x2e\x01\x2e\x01\xcd\x00\x2e\x01\x2f\x01\x2e\x01\x22\x01\x0a\x01\x2e\x01\x18\x01\x2e\x01\x28\x01\x6d\x01\x2e\x01\x2e\x01\xf7\x00\x21\x01\x2e\x01\x45\x01\x2a\x01\x1b\x01\x23\x01\x27\x01\x2e\x01\x1d\x01\x2e\x01\x04\x01\x2e\x01\x2e\x01\x2e\x01\xd6\x00\xcf\x00\xd7\x00\x2e\x01\x9f\x00\x4f\x00\x4f\x00\x4f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x4f\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0a\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x4f\x00\x4f\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\x4f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9e\x00\x4f\x00\x4f\x00\x4f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2e\x01\x00\x00\x2e\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x09\x00\x4f\x00\x2e\x01\xd9\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\xd8\x00\xd0\x00\xd1\x00\x2e\x01\x2e\x01\x2e\x01\xe7\x00\xc9\x00\x2e\x01\xde\x00\xdd\x00\xdd\x00\xdd\x00\xdd\x00\xdd\x00\xdd\x00\xdd\x00\xdd\x00\xdd\x00\xcb\x00\xca\x00\x2e\x01\xcc\x00\x2e\x01\xce\x00\xd4\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x43\x01\x2e\x01\x2e\x01\xfd\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\xd3\x00\x2e\x01\x2e\x01\xcd\x00\x2e\x01\x2f\x01\x2e\x01\x22\x01\x0a\x01\x2e\x01\x18\x01\x2e\x01\x28\x01\x6d\x01\x2e\x01\x2e\x01\xf7\x00\x21\x01\x2e\x01\x45\x01\x2a\x01\x1b\x01\x23\x01\x27\x01\x2e\x01\x1d\x01\x2e\x01\x04\x01\x2e\x01\x2e\x01\x2e\x01\xd6\x00\xcf\x00\xd7\x00\x2e\x01\x4f\x00\x4f\x00\x4f\x00\x9e\x00\x4f\x00\x4f\x00\x4f\x00\xa0\x00\x4f\x00\x4f\x00\x4f\x00\xc6\x00\x00\x00\xff\xff\x50\x00\x50\x00\x50\x00\x50\x00\x00\x00\x00\x00\x00\x00\x4f\x00\x00\x00\x97\x00\x00\x00\x4f\x00\x00\x00\x00\x00\x00\x00\x4f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0a\x00\x00\x00\x50\x00\x00\x00\x0a\x00\x6c\x00\x00\x00\x00\x00\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7d\x00\x7f\x00\x00\x00\x8d\x00\x00\x00\x00\x00\x00\x00\x7b\x00\x00\x00\x00\x00\x75\x00\x00\x00\x00\x00\x81\x00\x00\x00\x00\x00\x00\x00\x82\x00\x00\x00\x1b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd5\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00\x00\x00\x00\x00\x09\x00\x00\x00\x00\x00\x00\x00\x09\x00\x00\x00\x00\x00\x00\x00\x09\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6b\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x4d\x00\x49\x00\x49\x00\x49\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x49\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\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\x2e\x01\x00\x00\x2e\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x36\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x37\x00\x10\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2c\x00\x15\x00\x23\x00\x23\x00\x23\x00\x24\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0d\x00\x2e\x01\x2e\x01\x0c\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x00\x00\x2e\x01\x39\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x36\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x30\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x0f\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x10\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x13\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\x28\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\x2a\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\x2c\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\x2e\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\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x34\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\x37\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\x3c\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\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\xe5\x00\xe3\x00\xe3\x00\xe3\x00\xe3\x00\xe3\x00\xe3\x00\xe3\x00\xe3\x00\xe3\x00\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0d\x00\x2e\x01\x2e\x01\x0c\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x00\x00\x2e\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x39\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3c\x00\x0f\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2e\x00\x14\x00\x25\x00\x25\x00\x25\x00\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\x3f\x00\x3f\x00\x3f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x3f\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x00\x00\x2e\x01\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\x36\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x37\x00\x10\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2c\x00\x15\x00\x23\x00\x23\x00\x23\x00\x24\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\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\xfa\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x00\x00\x2e\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3f\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\x36\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x37\x00\x10\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2c\x00\x15\x00\x23\x00\x23\x00\x23\x00\x24\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\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x40\x00\x2e\x01\x00\x00\x2e\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x36\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x37\x00\x10\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2c\x00\x15\x00\x23\x00\x23\x00\x23\x00\x24\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\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x00\x00\x2e\x01\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x36\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x37\x00\x10\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2c\x00\x15\x00\x23\x00\x23\x00\x23\x00\x24\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x42\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x36\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x37\x00\x10\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2c\x00\x15\x00\x23\x00\x23\x00\x23\x00\x24\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\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x00\x00\x2e\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x43\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\x36\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x37\x00\x10\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2c\x00\x15\x00\x23\x00\x23\x00\x23\x00\x24\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\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x00\x00\x2e\x01\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x36\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x37\x00\x10\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2c\x00\x15\x00\x23\x00\x23\x00\x23\x00\x24\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\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x45\x00\x2e\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x36\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x37\x00\x10\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2c\x00\x15\x00\x23\x00\x23\x00\x23\x00\x24\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\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x46\x00\x2e\x01\x00\x00\x2e\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x36\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x37\x00\x10\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2c\x00\x15\x00\x23\x00\x23\x00\x23\x00\x24\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\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x00\x00\x2e\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x36\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x37\x00\x10\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2c\x00\x15\x00\x23\x00\x23\x00\x23\x00\x24\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\x49\x00\x49\x00\x49\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x49\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x36\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x37\x00\x10\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2c\x00\x15\x00\x23\x00\x23\x00\x23\x00\x24\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x47\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x36\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x37\x00\x10\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2c\x00\x15\x00\x23\x00\x23\x00\x23\x00\x24\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\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x00\x00\x2e\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x44\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x36\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x37\x00\x10\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2c\x00\x15\x00\x23\x00\x23\x00\x23\x00\x24\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x41\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x36\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x37\x00\x10\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2c\x00\x15\x00\x23\x00\x23\x00\x23\x00\x24\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\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\xff\xff\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x00\x00\x2e\x01\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\xff\xff\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x00\x00\x2e\x01\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\xff\xff\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x00\x00\x2e\x01\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\xff\xff\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x00\x00\x2e\x01\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\xff\xff\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x00\x00\x2e\x01\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\xff\xff\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\xb1\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\xb2\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x00\x00\x2e\x01\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x90\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\xff\xff\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x00\x00\x2e\x01\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\xff\xff\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x00\x00\x2e\x01\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\xff\xff\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x00\x00\x2e\x01\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\xff\xff\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x00\x00\x2e\x01\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\xff\xff\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x00\x00\x2e\x01\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\xff\xff\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\xbb\x00\xba\x00\xba\x00\xba\x00\xba\x00\xba\x00\xba\x00\xba\x00\xba\x00\xba\x00\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x00\x00\x2e\x01\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\xff\xff\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x00\x00\x2e\x01\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x2e\x01\x52\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x00\x00\x2e\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\xff\xff\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x00\x00\x2e\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x53\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\xba\x00\xba\x00\xba\x00\xba\x00\xba\x00\xba\x00\xba\x00\xba\x00\xba\x00\xba\x00\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x56\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x00\x00\x2e\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x57\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x59\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x5a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x5b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x5d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\xba\x00\xba\x00\xba\x00\xba\x00\xba\x00\xba\x00\xba\x00\xba\x00\xba\x00\xba\x00\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x5e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x60\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x00\x00\x2e\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x5f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\xff\xff\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x60\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x00\x00\x2e\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x61\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x96\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x95\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x65\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x67\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x93\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x92\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x00\x00\x2e\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x91\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x8f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x8c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x71\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x8a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x88\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x11\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x13\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x00\x00\x2e\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x87\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x86\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x85\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x79\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x7a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x83\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x7e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\xff\xff\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x00\x00\x2e\x01\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x84\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x78\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x77\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x76\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x74\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x8b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x8e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x70\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x6f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x6e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x6d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x6a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x69\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x68\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x94\x00\x7c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x72\x00\x89\x00\x00\x00\x00\x00\x00\x00\x00\x00\x66\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x73\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x64\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x63\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x62\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x5c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x58\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x00\x00\x2e\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x30\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x31\x00\x13\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\x28\x00\x17\x00\x1e\x00\x1e\x00\x1e\x00\x1f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\xff\xff\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x00\x00\x99\x00\x00\x00\x00\x00\x00\x00\x00\x00\x99\x00\x99\x00\x99\x00\x00\x00\x00\x00\x00\x00\x00\x00\x99\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x99\x00\x00\x00\x00\x00\x00\x00\x00\x00\x99\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9b\x00\x00\x00\x00\x00\x9c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x99\x00\x00\x00\x99\x00\x00\x00\x99\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\x30\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x31\x00\x13\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\x28\x00\x17\x00\x1e\x00\x1e\x00\x1e\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9d\x00\x00\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x00\x00\x00\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x00\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x00\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x00\x00\x9d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9d\x00\x00\x00\x9d\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\x30\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x31\x00\x13\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\x28\x00\x17\x00\x1e\x00\x1e\x00\x1e\x00\x1f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\xff\xff\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x00\x00\x99\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x99\x00\x99\x00\x00\x00\x00\x00\x00\x00\x00\x00\x99\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x99\x00\x00\x00\x00\x00\x00\x00\x00\x00\x99\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x99\x00\x00\x00\x99\x00\x00\x00\x99\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\x30\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x31\x00\x13\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\x28\x00\x17\x00\x1e\x00\x1e\x00\x1e\x00\x1f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\xff\xff\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x00\x00\x99\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x99\x00\x99\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x99\x00\x00\x00\x00\x00\x00\x00\x00\x00\x99\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x99\x00\x00\x00\x99\x00\x00\x00\x99\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\x30\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x31\x00\x13\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\x28\x00\x17\x00\x1e\x00\x1e\x00\x1e\x00\x1f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x5c\x01\x2e\x01\x5c\x01\x2f\x00\x2e\x01\xdc\x00\xdb\x00\xdb\x00\xdb\x00\xdb\x00\xdb\x00\xdb\x00\xdb\x00\xdb\x00\xdb\x00\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\xdb\x00\xdb\x00\xdb\x00\xdb\x00\xda\x00\xdb\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\xdb\x00\xdb\x00\xdb\x00\xdb\x00\xda\x00\xdb\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2f\x00\x2e\x01\xdb\x00\xdb\x00\xdb\x00\xdb\x00\xdb\x00\xdb\x00\xdb\x00\xdb\x00\xdb\x00\xdb\x00\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\xdb\x00\xdb\x00\xdb\x00\xdb\x00\xda\x00\xdb\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\xdb\x00\xdb\x00\xdb\x00\xdb\x00\xda\x00\xdb\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2f\x00\x2e\x01\xdb\x00\xdb\x00\xdb\x00\xdb\x00\xdb\x00\xdb\x00\xdb\x00\xdb\x00\xdb\x00\xdb\x00\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\xdb\x00\xdb\x00\xdb\x00\xdb\x00\xda\x00\xdb\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\xdb\x00\xdb\x00\xdb\x00\xdb\x00\xda\x00\xdb\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x59\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2f\x00\x2e\x01\xdd\x00\xdd\x00\xdd\x00\xdd\x00\xdd\x00\xdd\x00\xdd\x00\xdd\x00\xdd\x00\xdd\x00\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x5b\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x5b\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2f\x00\x2e\x01\xdd\x00\xdd\x00\xdd\x00\xdd\x00\xdd\x00\xdd\x00\xdd\x00\xdd\x00\xdd\x00\xdd\x00\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x5b\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x5b\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x5d\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x5c\x01\x2e\x01\x5c\x01\x0e\x00\x2e\x01\xe2\x00\xe0\x00\xe0\x00\xe0\x00\xe0\x00\xe0\x00\xe0\x00\xe0\x00\xe0\x00\xe0\x00\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\xe0\x00\xe0\x00\xe0\x00\xe0\x00\xdf\x00\xe0\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\xe0\x00\xe0\x00\xe0\x00\xe0\x00\xdf\x00\xe0\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\xe0\x00\xe0\x00\xe0\x00\xe0\x00\xe0\x00\xe0\x00\xe0\x00\xe0\x00\xe0\x00\xe0\x00\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\xe0\x00\xe0\x00\xe0\x00\xe0\x00\xdf\x00\xe0\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\xe0\x00\xe0\x00\xe0\x00\xe0\x00\xdf\x00\xe0\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\xe1\x00\xe1\x00\xe1\x00\xe1\x00\xe1\x00\xe1\x00\xe1\x00\xe1\x00\xe1\x00\xe1\x00\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\xe1\x00\xe1\x00\xe1\x00\xe1\x00\xe1\x00\xe1\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\xe1\x00\xe1\x00\xe1\x00\xe1\x00\xe1\x00\xe1\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\xe0\x00\xe0\x00\xe0\x00\xe0\x00\xe0\x00\xe0\x00\xe0\x00\xe0\x00\xe0\x00\xe0\x00\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\xe0\x00\xe0\x00\xe0\x00\xe0\x00\xdf\x00\xe0\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\xe0\x00\xe0\x00\xe0\x00\xe0\x00\xdf\x00\xe0\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x59\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\xe3\x00\xe3\x00\xe3\x00\xe3\x00\xe3\x00\xe3\x00\xe3\x00\xe3\x00\xe3\x00\xe3\x00\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x5b\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x5b\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\xe4\x00\xe4\x00\xe4\x00\xe4\x00\xe4\x00\xe4\x00\xe4\x00\xe4\x00\xe4\x00\xe4\x00\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\xe3\x00\xe3\x00\xe3\x00\xe3\x00\xe3\x00\xe3\x00\xe3\x00\xe3\x00\xe3\x00\xe3\x00\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x5b\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x5b\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x5a\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\xe4\x00\xe4\x00\xe4\x00\xe4\x00\xe4\x00\xe4\x00\xe4\x00\xe4\x00\xe4\x00\xe4\x00\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x59\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x9d\x00\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\xd2\x00\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\xa3\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\xa6\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\xa7\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\xa8\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\xab\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\xac\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\xad\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\xb5\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\xbd\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\xbe\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\xbf\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\xc1\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\xc2\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\xc3\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\xc5\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x6e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x6a\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x67\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x66\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x65\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x64\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x63\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x62\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x5f\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x5e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\xf6\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x58\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x57\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x02\x01\x56\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x55\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x54\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x53\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x52\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x51\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x50\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x4f\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x4e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\xfb\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\xfc\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x4d\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x4c\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\xff\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x4b\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x4a\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x49\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x48\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x47\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x46\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x03\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x37\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0c\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x29\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x40\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x44\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x12\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x14\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x26\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x15\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x17\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x3f\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x3e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x3c\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x3a\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x3b\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x19\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x1a\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x38\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x1c\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x36\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x35\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x1e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2c\x01\x2e\x01\x2e\x01\x25\x01\x2e\x01\x2e\x01\x34\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x33\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x32\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x30\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2b\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x31\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x24\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x1f\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x39\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x41\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x16\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x42\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x10\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x20\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0f\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0d\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0b\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2d\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x09\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x08\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x07\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x06\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x05\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x01\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\xfe\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\xf9\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\xf8\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\xf5\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\xf4\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\xf3\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\xf2\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\xf1\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\xf0\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x61\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\xef\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x68\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\xee\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\xed\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\xec\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x69\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\xeb\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\xea\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\xe9\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x6b\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x6c\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\xe8\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\xe1\x00\xe1\x00\xe1\x00\xe1\x00\xe1\x00\xe1\x00\xe1\x00\xe1\x00\xe1\x00\xe1\x00\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\xe1\x00\xe1\x00\xe1\x00\xe1\x00\xe1\x00\xe1\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\xe1\x00\xe1\x00\xe1\x00\xe1\x00\xe1\x00\xe1\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\xe0\x00\xe0\x00\xe0\x00\xe0\x00\xe0\x00\xe0\x00\xe0\x00\xe0\x00\xe0\x00\xe0\x00\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\xe0\x00\xe0\x00\xe0\x00\xe0\x00\xe0\x00\xe0\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\xe0\x00\xe0\x00\xe0\x00\xe0\x00\xe0\x00\xe0\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x5c\x01\x2e\x01\x5c\x01\x0e\x00\x2e\x01\xe6\x00\xe4\x00\xe4\x00\xe4\x00\xe4\x00\xe4\x00\xe4\x00\xe4\x00\xe4\x00\xe4\x00\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\xe6\x00\xe4\x00\xe4\x00\xe4\x00\xe4\x00\xe4\x00\xe4\x00\xe4\x00\xe4\x00\xe4\x00\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\xdb\x00\xdb\x00\xdb\x00\xdb\x00\xdb\x00\xdb\x00\xdb\x00\xdb\x00\xdb\x00\xdb\x00\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\xdb\x00\xdb\x00\xdb\x00\xdb\x00\xdb\x00\xdb\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\xdb\x00\xdb\x00\xdb\x00\xdb\x00\xdb\x00\xdb\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\xc0\x00\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\xbc\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\xb8\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\xb7\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\xb6\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\xb4\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\xb3\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\xb0\x00\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\xaf\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\xae\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\xaa\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\xa9\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\xa5\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\xa4\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x3d\x01\xa2\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\xa1\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x00\x00\x2e\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"#+alex_table = AlexA# "\x00\x00\xb2\x00\x4f\x00\x4f\x00\x4f\x00\x4e\x00\xac\x00\xad\x00\xdb\x00\x08\x00\x22\x00\x18\x00\x19\x00\x1d\x00\x1c\x00\x1a\x00\x11\x00\x3e\x00\x51\x00\xde\x00\xdf\x00\x00\x00\x00\x00\x4f\x00\x4e\x01\xf0\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\xef\x00\xe7\x00\xe8\x00\x4e\x01\x4e\x01\x4e\x01\xfe\x00\xe0\x00\x4e\x01\xf5\x00\xf4\x00\xf4\x00\xf4\x00\xf4\x00\xf4\x00\xf4\x00\xf4\x00\xf4\x00\xf4\x00\xe2\x00\xe1\x00\x4e\x01\xe3\x00\x4e\x01\xe5\x00\xeb\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x69\x01\x4e\x01\x4e\x01\x16\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\xea\x00\x4e\x01\x4e\x01\xe4\x00\x4e\x01\x50\x01\x4e\x01\x3e\x01\x23\x01\x4e\x01\x34\x01\x4e\x01\x46\x01\x97\x01\x4e\x01\x4e\x01\x10\x01\x3d\x01\x4e\x01\x6b\x01\x48\x01\x37\x01\x3f\x01\x45\x01\x4e\x01\x39\x01\x4e\x01\x1d\x01\x4e\x01\x4e\x01\x4e\x01\xed\x00\xe6\x00\xee\x00\x4e\x01\xb3\x00\x4f\x00\x4f\x00\x4f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4f\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0a\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4f\x00\x4f\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\x4f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb2\x00\x4f\x00\x4f\x00\x4f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4e\x01\x00\x00\x4e\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x09\x00\x4f\x00\x4e\x01\xf0\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\xef\x00\xe7\x00\xe8\x00\x4e\x01\x4e\x01\x4e\x01\xfe\x00\xe0\x00\x4e\x01\xf5\x00\xf4\x00\xf4\x00\xf4\x00\xf4\x00\xf4\x00\xf4\x00\xf4\x00\xf4\x00\xf4\x00\xe2\x00\xe1\x00\x4e\x01\xe3\x00\x4e\x01\xe5\x00\xeb\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x69\x01\x4e\x01\x4e\x01\x16\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\xea\x00\x4e\x01\x4e\x01\xe4\x00\x4e\x01\x50\x01\x4e\x01\x3e\x01\x23\x01\x4e\x01\x34\x01\x4e\x01\x46\x01\x97\x01\x4e\x01\x4e\x01\x10\x01\x3d\x01\x4e\x01\x6b\x01\x48\x01\x37\x01\x3f\x01\x45\x01\x4e\x01\x39\x01\x4e\x01\x1d\x01\x4e\x01\x4e\x01\x4e\x01\xed\x00\xe6\x00\xee\x00\x4e\x01\x4f\x00\x4f\x00\x4f\x00\xb2\x00\x4f\x00\x4f\x00\x4f\x00\xb4\x00\x4f\x00\x4f\x00\x4f\x00\xdd\x00\x00\x00\xff\xff\x50\x00\x50\x00\x50\x00\x50\x00\x00\x00\x00\x00\x00\x00\x4f\x00\x00\x00\xab\x00\x00\x00\x4f\x00\x00\x00\x00\x00\x00\x00\x4f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0a\x00\x00\x00\x50\x00\x00\x00\x0a\x00\x6e\x00\x00\x00\x00\x00\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x82\x00\x85\x00\x00\x00\xa1\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x79\x00\x00\x00\x8d\x00\x94\x00\x00\x00\x00\x00\x00\x00\x95\x00\x00\x00\x1b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xec\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00\x00\x00\x00\x00\x09\x00\x00\x00\x00\x00\x00\x00\x09\x00\x00\x00\x00\x00\x00\x00\x09\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6d\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x4d\x00\x49\x00\x49\x00\x49\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x49\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\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\x4e\x01\x00\x00\x4e\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x36\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x37\x00\x10\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2c\x00\x15\x00\x23\x00\x23\x00\x23\x00\x24\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0d\x00\x4e\x01\x4e\x01\x0c\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x00\x00\x4e\x01\x39\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x36\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x30\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x0f\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x10\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x13\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\x28\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\x2a\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\x2c\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\x2e\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\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x34\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\x37\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\x3c\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\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\xfc\x00\xfa\x00\xfa\x00\xfa\x00\xfa\x00\xfa\x00\xfa\x00\xfa\x00\xfa\x00\xfa\x00\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0d\x00\x4e\x01\x4e\x01\x0c\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x00\x00\x4e\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x39\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3c\x00\x0f\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2e\x00\x14\x00\x25\x00\x25\x00\x25\x00\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\x3f\x00\x3f\x00\x3f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x3f\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x00\x00\x4e\x01\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\x36\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x37\x00\x10\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2c\x00\x15\x00\x23\x00\x23\x00\x23\x00\x24\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\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x49\x01\x4e\x01\x13\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x00\x00\x4e\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3f\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\x36\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x37\x00\x10\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2c\x00\x15\x00\x23\x00\x23\x00\x23\x00\x24\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\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x40\x00\x4e\x01\x00\x00\x4e\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x36\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x37\x00\x10\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2c\x00\x15\x00\x23\x00\x23\x00\x23\x00\x24\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\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x00\x00\x4e\x01\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x36\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x37\x00\x10\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2c\x00\x15\x00\x23\x00\x23\x00\x23\x00\x24\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x42\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x36\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x37\x00\x10\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2c\x00\x15\x00\x23\x00\x23\x00\x23\x00\x24\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\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x00\x00\x4e\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x43\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\x36\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x37\x00\x10\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2c\x00\x15\x00\x23\x00\x23\x00\x23\x00\x24\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\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x00\x00\x4e\x01\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x36\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x37\x00\x10\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2c\x00\x15\x00\x23\x00\x23\x00\x23\x00\x24\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\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x45\x00\x4e\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x36\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x37\x00\x10\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2c\x00\x15\x00\x23\x00\x23\x00\x23\x00\x24\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\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x46\x00\x4e\x01\x00\x00\x4e\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x36\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x37\x00\x10\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2c\x00\x15\x00\x23\x00\x23\x00\x23\x00\x24\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\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x00\x00\x4e\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x36\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x37\x00\x10\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2c\x00\x15\x00\x23\x00\x23\x00\x23\x00\x24\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\x49\x00\x49\x00\x49\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x49\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x36\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x37\x00\x10\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2c\x00\x15\x00\x23\x00\x23\x00\x23\x00\x24\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x47\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x36\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x37\x00\x10\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2c\x00\x15\x00\x23\x00\x23\x00\x23\x00\x24\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\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x00\x00\x4e\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x44\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x36\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x37\x00\x10\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2c\x00\x15\x00\x23\x00\x23\x00\x23\x00\x24\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x41\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x36\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x37\x00\x10\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2c\x00\x15\x00\x23\x00\x23\x00\x23\x00\x24\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\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\xff\xff\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x00\x00\x4e\x01\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\xff\xff\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x00\x00\x4e\x01\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\xff\xff\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x00\x00\x4e\x01\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\xff\xff\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x00\x00\x4e\x01\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\xff\xff\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x00\x00\x4e\x01\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\xff\xff\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x00\x00\x4e\x01\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\xa4\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\xff\xff\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x00\x00\x4e\x01\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\xff\xff\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\xc7\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\xc8\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x00\x00\x4e\x01\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\xff\xff\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x00\x00\x4e\x01\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\xff\xff\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x00\x00\x4e\x01\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\xff\xff\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x00\x00\x4e\x01\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\xff\xff\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x00\x00\x4e\x01\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\xff\xff\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x00\x00\x4e\x01\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\xff\xff\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\xd1\x00\xd0\x00\xd0\x00\xd0\x00\xd0\x00\xd0\x00\xd0\x00\xd0\x00\xd0\x00\xd0\x00\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x00\x00\x4e\x01\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x4e\x01\x52\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x00\x00\x4e\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\xff\xff\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x00\x00\x4e\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x53\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\xcf\x00\xcf\x00\xcf\x00\xcf\x00\xcf\x00\xcf\x00\xcf\x00\xcf\x00\xcf\x00\xcf\x00\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x56\x00\xcf\x00\xcf\x00\xcf\x00\xcf\x00\xcf\x00\xcf\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\xcf\x00\xcf\x00\xcf\x00\xcf\x00\xcf\x00\xcf\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x00\x00\x4e\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x57\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x59\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x5a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x5b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x5d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\xd0\x00\xd0\x00\xd0\x00\xd0\x00\xd0\x00\xd0\x00\xd0\x00\xd0\x00\xd0\x00\xd0\x00\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x5e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x00\x00\x4e\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x5f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x60\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\xff\xff\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x61\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x00\x00\x4e\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x62\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\xaa\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\xa9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x66\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x68\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x6b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\xa7\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\xd0\x00\xd0\x00\xd0\x00\xd0\x00\xd0\x00\xd0\x00\xd0\x00\xd0\x00\xd0\x00\xd0\x00\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\xa6\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x8a\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x00\x00\x4e\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\xa5\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\xa3\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x73\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\xa0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x74\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x9e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x9c\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x00\x00\x4e\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x9b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x9a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x99\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x7d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x98\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x7e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x96\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x81\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x83\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x93\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x86\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x92\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x2c\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x2e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x00\x00\x4e\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x91\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x89\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x90\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x8f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x8c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\xff\xff\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x00\x00\x4e\x01\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x8b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x8a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x88\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x87\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x84\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x97\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x7c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x7b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x7a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x78\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x77\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x9f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x71\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x70\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x6f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x6c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x6a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x69\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\xa8\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x75\x00\x9d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x67\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x76\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x65\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x64\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x63\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x5c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x58\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x00\x00\x4e\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x30\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x31\x00\x13\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\x28\x00\x17\x00\x1e\x00\x1e\x00\x1e\x00\x1f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xad\x00\xad\x00\xad\x00\xad\x00\xad\x00\xad\x00\xad\x00\xad\x00\xad\x00\xad\x00\xff\xff\xad\x00\xad\x00\xad\x00\xad\x00\xad\x00\xad\x00\xad\x00\xad\x00\xad\x00\xad\x00\xad\x00\xad\x00\xad\x00\xad\x00\xad\x00\xad\x00\xad\x00\xad\x00\xad\x00\xad\x00\xad\x00\xad\x00\x00\x00\xad\x00\x00\x00\x00\x00\x00\x00\x00\x00\xad\x00\xad\x00\xad\x00\x00\x00\x00\x00\x00\x00\x00\x00\xad\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xad\x00\x00\x00\x00\x00\x00\x00\x00\x00\xad\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xaf\x00\x00\x00\x00\x00\xb0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xad\x00\x00\x00\xad\x00\x00\x00\xad\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\x30\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x31\x00\x13\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\x28\x00\x17\x00\x1e\x00\x1e\x00\x1e\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb1\x00\x00\x00\xb1\x00\xb1\x00\xb1\x00\xb1\x00\xb1\x00\x00\x00\x00\x00\xb1\x00\xb1\x00\xb1\x00\xb1\x00\x00\x00\xb1\x00\xb1\x00\xb1\x00\xb1\x00\xb1\x00\xb1\x00\xb1\x00\xb1\x00\xb1\x00\xb1\x00\xb1\x00\xb1\x00\x00\x00\xb1\x00\xb1\x00\xb1\x00\xb1\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb1\x00\xb1\x00\xb1\x00\xb1\x00\x00\x00\xb1\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb1\x00\x00\x00\xb1\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\x30\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x31\x00\x13\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\x28\x00\x17\x00\x1e\x00\x1e\x00\x1e\x00\x1f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xad\x00\xad\x00\xad\x00\xad\x00\xad\x00\xad\x00\xad\x00\xad\x00\xad\x00\xad\x00\xff\xff\xad\x00\xad\x00\xad\x00\xad\x00\xad\x00\xad\x00\xad\x00\xad\x00\xad\x00\xad\x00\xad\x00\xad\x00\xad\x00\xad\x00\xad\x00\xad\x00\xad\x00\xad\x00\xad\x00\xad\x00\xad\x00\xad\x00\x00\x00\xad\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xad\x00\xad\x00\x00\x00\x00\x00\x00\x00\x00\x00\xad\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xad\x00\x00\x00\x00\x00\x00\x00\x00\x00\xad\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xad\x00\x00\x00\xad\x00\x00\x00\xad\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\x30\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x31\x00\x13\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\x28\x00\x17\x00\x1e\x00\x1e\x00\x1e\x00\x1f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xad\x00\xad\x00\xad\x00\xad\x00\xad\x00\xad\x00\xad\x00\xad\x00\xad\x00\xad\x00\xff\xff\xad\x00\xad\x00\xad\x00\xad\x00\xad\x00\xad\x00\xad\x00\xad\x00\xad\x00\xad\x00\xad\x00\xad\x00\xad\x00\xad\x00\xad\x00\xad\x00\xad\x00\xad\x00\xad\x00\xad\x00\xad\x00\xad\x00\x00\x00\xad\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xad\x00\xad\x00\x00\x00\x00\x00\x00\x00\x00\x00\xae\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xad\x00\x00\x00\x00\x00\x00\x00\x00\x00\xad\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xad\x00\x00\x00\xad\x00\x00\x00\xad\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\x30\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x31\x00\x13\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\x28\x00\x17\x00\x1e\x00\x1e\x00\x1e\x00\x1f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x85\x01\x4e\x01\x85\x01\x2f\x00\x4e\x01\xf3\x00\xf2\x00\xf2\x00\xf2\x00\xf2\x00\xf2\x00\xf2\x00\xf2\x00\xf2\x00\xf2\x00\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\xf2\x00\xf2\x00\xf2\x00\xf2\x00\xf1\x00\xf2\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\xf2\x00\xf2\x00\xf2\x00\xf2\x00\xf1\x00\xf2\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x2f\x00\x4e\x01\xf2\x00\xf2\x00\xf2\x00\xf2\x00\xf2\x00\xf2\x00\xf2\x00\xf2\x00\xf2\x00\xf2\x00\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\xf2\x00\xf2\x00\xf2\x00\xf2\x00\xf1\x00\xf2\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\xf2\x00\xf2\x00\xf2\x00\xf2\x00\xf1\x00\xf2\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x2f\x00\x4e\x01\xf2\x00\xf2\x00\xf2\x00\xf2\x00\xf2\x00\xf2\x00\xf2\x00\xf2\x00\xf2\x00\xf2\x00\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\xf2\x00\xf2\x00\xf2\x00\xf2\x00\xf1\x00\xf2\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\xf2\x00\xf2\x00\xf2\x00\xf2\x00\xf1\x00\xf2\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x82\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x2f\x00\x4e\x01\xf4\x00\xf4\x00\xf4\x00\xf4\x00\xf4\x00\xf4\x00\xf4\x00\xf4\x00\xf4\x00\xf4\x00\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x84\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x84\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x2f\x00\x4e\x01\xf4\x00\xf4\x00\xf4\x00\xf4\x00\xf4\x00\xf4\x00\xf4\x00\xf4\x00\xf4\x00\xf4\x00\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x84\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x84\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x86\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x85\x01\x4e\x01\x85\x01\x0e\x00\x4e\x01\xf9\x00\xf7\x00\xf7\x00\xf7\x00\xf7\x00\xf7\x00\xf7\x00\xf7\x00\xf7\x00\xf7\x00\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\xf7\x00\xf7\x00\xf7\x00\xf7\x00\xf6\x00\xf7\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\xf7\x00\xf7\x00\xf7\x00\xf7\x00\xf6\x00\xf7\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\xf7\x00\xf7\x00\xf7\x00\xf7\x00\xf7\x00\xf7\x00\xf7\x00\xf7\x00\xf7\x00\xf7\x00\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\xf7\x00\xf7\x00\xf7\x00\xf7\x00\xf6\x00\xf7\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\xf7\x00\xf7\x00\xf7\x00\xf7\x00\xf6\x00\xf7\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\xf8\x00\xf8\x00\xf8\x00\xf8\x00\xf8\x00\xf8\x00\xf8\x00\xf8\x00\xf8\x00\xf8\x00\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\xf8\x00\xf8\x00\xf8\x00\xf8\x00\xf8\x00\xf8\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\xf8\x00\xf8\x00\xf8\x00\xf8\x00\xf8\x00\xf8\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\xf7\x00\xf7\x00\xf7\x00\xf7\x00\xf7\x00\xf7\x00\xf7\x00\xf7\x00\xf7\x00\xf7\x00\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\xf7\x00\xf7\x00\xf7\x00\xf7\x00\xf6\x00\xf7\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\xf7\x00\xf7\x00\xf7\x00\xf7\x00\xf6\x00\xf7\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x82\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\xfa\x00\xfa\x00\xfa\x00\xfa\x00\xfa\x00\xfa\x00\xfa\x00\xfa\x00\xfa\x00\xfa\x00\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x84\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x84\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\xfb\x00\xfb\x00\xfb\x00\xfb\x00\xfb\x00\xfb\x00\xfb\x00\xfb\x00\xfb\x00\xfb\x00\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\xfa\x00\xfa\x00\xfa\x00\xfa\x00\xfa\x00\xfa\x00\xfa\x00\xfa\x00\xfa\x00\xfa\x00\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x84\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x84\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x83\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\xfb\x00\xfb\x00\xfb\x00\xfb\x00\xfb\x00\xfb\x00\xfb\x00\xfb\x00\xfb\x00\xfb\x00\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x82\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\xb1\x00\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\xe9\x00\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\xb7\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\xba\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\xbb\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\xbc\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\xbf\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\xc0\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\xc1\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\xc4\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\xc5\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\xcb\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\xd3\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\xd4\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\xd5\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\xd8\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\xd9\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\xda\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\xdc\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x98\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x94\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x91\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x90\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x8f\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x8e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x8d\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x8c\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x89\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x88\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0f\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x81\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x80\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x1b\x01\x7f\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x7e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x7d\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x7c\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x7b\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x7a\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x79\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x78\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x77\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x76\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x75\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x14\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x15\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x74\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x73\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x18\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x72\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x71\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x70\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x6f\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x6e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x6d\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x6c\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x1c\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x5b\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x25\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x47\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x66\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x6a\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x2d\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x2f\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x44\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x31\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x33\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x65\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x64\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x62\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x5e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x61\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x35\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x36\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x60\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x5f\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x5c\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x38\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x5a\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x58\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x3a\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x55\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4c\x01\x4e\x01\x4e\x01\x43\x01\x4e\x01\x4e\x01\x57\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x41\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x42\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x56\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x54\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x52\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x51\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4b\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4a\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x53\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x40\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x3b\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x59\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x5d\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x67\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x32\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x30\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x68\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x2b\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x3c\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x2a\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x29\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x28\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x27\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x26\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x24\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4f\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4d\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x22\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x21\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x20\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x1f\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x1e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x1a\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x19\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x17\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x12\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x11\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0d\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0c\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x87\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0b\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0a\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x09\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x8b\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x08\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x07\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x06\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x92\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x05\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x04\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x03\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x93\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x02\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x01\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x95\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x96\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\xff\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\xf8\x00\xf8\x00\xf8\x00\xf8\x00\xf8\x00\xf8\x00\xf8\x00\xf8\x00\xf8\x00\xf8\x00\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\xf8\x00\xf8\x00\xf8\x00\xf8\x00\xf8\x00\xf8\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\xf8\x00\xf8\x00\xf8\x00\xf8\x00\xf8\x00\xf8\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\xf7\x00\xf7\x00\xf7\x00\xf7\x00\xf7\x00\xf7\x00\xf7\x00\xf7\x00\xf7\x00\xf7\x00\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\xf7\x00\xf7\x00\xf7\x00\xf7\x00\xf7\x00\xf7\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\xf7\x00\xf7\x00\xf7\x00\xf7\x00\xf7\x00\xf7\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x85\x01\x4e\x01\x85\x01\x0e\x00\x4e\x01\xfd\x00\xfb\x00\xfb\x00\xfb\x00\xfb\x00\xfb\x00\xfb\x00\xfb\x00\xfb\x00\xfb\x00\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\xfd\x00\xfb\x00\xfb\x00\xfb\x00\xfb\x00\xfb\x00\xfb\x00\xfb\x00\xfb\x00\xfb\x00\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\xf2\x00\xf2\x00\xf2\x00\xf2\x00\xf2\x00\xf2\x00\xf2\x00\xf2\x00\xf2\x00\xf2\x00\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\xf2\x00\xf2\x00\xf2\x00\xf2\x00\xf2\x00\xf2\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\xf2\x00\xf2\x00\xf2\x00\xf2\x00\xf2\x00\xf2\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\xd7\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\xd6\x00\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\xd2\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\xcf\x00\xcf\x00\xcf\x00\xcf\x00\xcf\x00\xcf\x00\xcf\x00\xcf\x00\xcf\x00\xcf\x00\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\xcf\x00\xcf\x00\xcf\x00\xcf\x00\xcf\x00\xcf\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\xcf\x00\xcf\x00\xcf\x00\xcf\x00\xcf\x00\xcf\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\xce\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\xcd\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\xcc\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\xca\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\xc9\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\xc6\x00\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\xc3\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\xc2\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\xbe\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\xbd\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\xb9\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\xb8\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x63\x01\xb6\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\xb5\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x00\x00\x4e\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"#  alex_check :: AlexAddr-alex_check = AlexA# "\xff\xff\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x7d\x00\x2d\x00\x2d\x00\x6f\x00\x65\x00\x6f\x00\x63\x00\x7b\x00\x6e\x00\x65\x00\x64\x00\x64\x00\x0a\x00\x23\x00\x2e\x00\x2e\x00\xff\xff\xff\xff\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x20\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\x2d\x00\x3c\x00\x3d\x00\x3e\x00\x3f\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\x5b\x00\x5c\x00\x5d\x00\x5e\x00\xff\xff\x60\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0a\x00\x0b\x00\x0c\x00\x0d\x00\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\xff\xff\x7b\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\x0b\x00\x0c\x00\x0d\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x21\x00\xff\xff\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\x2d\x00\xff\xff\x20\x00\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2d\x00\xff\xff\x20\x00\xff\xff\x2d\x00\x23\x00\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\x42\x00\x43\x00\xff\xff\x45\x00\xff\xff\xff\xff\xff\xff\x49\x00\xff\xff\xff\xff\x4c\x00\xff\xff\xff\xff\x4f\x00\xff\xff\xff\xff\xff\xff\x53\x00\xff\xff\x5c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x74\x00\xff\xff\xff\xff\x7b\x00\xff\xff\xff\xff\xff\xff\x7b\x00\xff\xff\xff\xff\xff\xff\x7b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7b\x00\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\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x20\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5b\x00\x5c\x00\x5d\x00\x5e\x00\xff\xff\x60\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5c\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\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\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\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\xff\xff\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\xff\xff\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\xff\xff\x7e\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\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\xff\xff\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\xff\xff\x7e\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\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\x0a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\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\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\x20\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\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\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\x0a\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7d\x00\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\x0a\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\x65\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\x0a\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x6f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x0a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x63\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\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\x0a\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7b\x00\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\x0a\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\xff\xff\x7e\x00\x69\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\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\x0a\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x67\x00\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\x0a\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\x65\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\x0a\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\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\xff\xff\xff\xff\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\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\x5c\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\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\x0a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x62\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x0a\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x6e\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\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\x0a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x64\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\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\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\x20\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\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\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\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\x20\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\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\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\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\x20\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\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\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\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\x20\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\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\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\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\x20\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\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\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\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\x20\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\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\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\x5f\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\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\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\x20\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\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\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\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\x20\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\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\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\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\x20\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\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\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\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\x20\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\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\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\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\x20\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\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\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\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\x20\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\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\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\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\x20\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\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\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\x21\x00\x23\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\xff\xff\x7e\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\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\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\x20\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7d\x00\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\x53\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x41\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\xff\xff\x7c\x00\xff\xff\x7e\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\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\x45\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\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\x43\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\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\x53\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x43\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\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\x45\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\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\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x41\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\xff\xff\x7c\x00\xff\xff\x7e\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\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\x45\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\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\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x20\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\x2d\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\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\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\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\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\x49\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\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\x45\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\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\x49\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\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\x49\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\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\x4f\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\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\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x41\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\xff\xff\x7c\x00\xff\xff\x7e\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\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\x59\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\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\x4f\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\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\x49\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\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\x49\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\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\x49\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\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\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x41\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\xff\xff\x7c\x00\xff\xff\x7e\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\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\x49\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\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\x49\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\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\x4d\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\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\x53\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x55\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\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\x4d\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\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\x4f\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\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\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\x20\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\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\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\x50\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x54\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\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\x50\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x54\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\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\x50\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x4c\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\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\x42\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\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\x54\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\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\x50\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x4c\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\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\x54\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\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\x4e\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\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\x54\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\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\x4c\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\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\x52\x00\x53\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x44\x00\x45\x00\xff\xff\xff\xff\xff\xff\xff\xff\x4a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x54\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\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\x50\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x54\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\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\x4e\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\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\x54\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\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\x44\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\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\x4e\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\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\x0a\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\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\xff\xff\xff\xff\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\xff\xff\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\x27\x00\x28\x00\x29\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2e\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\x3b\x00\xff\xff\xff\xff\xff\xff\xff\xff\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\xff\xff\x5f\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\x7b\x00\xff\xff\x7d\x00\xff\xff\x7f\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\x0a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\xff\xff\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5b\x00\x5c\x00\x5d\x00\x5e\x00\xff\xff\x60\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\x7c\x00\xff\xff\x7e\x00\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\xff\xff\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x28\x00\x29\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2e\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\x3b\x00\xff\xff\xff\xff\xff\xff\xff\xff\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7b\x00\xff\xff\x7d\x00\xff\xff\x7f\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\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\xff\xff\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x28\x00\x29\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2e\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\x3b\x00\xff\xff\xff\xff\xff\xff\xff\xff\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7b\x00\xff\xff\x7d\x00\xff\xff\x7f\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\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"#+alex_check = AlexA# "\xff\xff\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x7d\x00\x2d\x00\x2d\x00\x6f\x00\x65\x00\x6f\x00\x63\x00\x7b\x00\x6e\x00\x65\x00\x64\x00\x64\x00\x0a\x00\x23\x00\x2e\x00\x2e\x00\xff\xff\xff\xff\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x20\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\x2d\x00\x3c\x00\x3d\x00\x3e\x00\x3f\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\x5b\x00\x5c\x00\x5d\x00\x5e\x00\xff\xff\x60\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0a\x00\x0b\x00\x0c\x00\x0d\x00\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\xff\xff\x7b\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\x0b\x00\x0c\x00\x0d\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x21\x00\xff\xff\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\x2d\x00\xff\xff\x20\x00\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2d\x00\xff\xff\x20\x00\xff\xff\x2d\x00\x23\x00\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\x42\x00\x43\x00\xff\xff\x45\x00\xff\xff\xff\xff\xff\xff\x49\x00\xff\xff\xff\xff\x4c\x00\xff\xff\x4e\x00\x4f\x00\xff\xff\xff\xff\xff\xff\x53\x00\xff\xff\x5c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x74\x00\xff\xff\xff\xff\x7b\x00\xff\xff\xff\xff\xff\xff\x7b\x00\xff\xff\xff\xff\xff\xff\x7b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7b\x00\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\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x20\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5b\x00\x5c\x00\x5d\x00\x5e\x00\xff\xff\x60\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5c\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\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\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\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\xff\xff\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\xff\xff\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\xff\xff\x7e\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\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\xff\xff\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\xff\xff\x7e\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\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\x0a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\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\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\x20\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\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\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\x0a\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7d\x00\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\x0a\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\x65\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\x0a\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x6f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x0a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x63\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\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\x0a\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7b\x00\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\x0a\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\xff\xff\x7e\x00\x69\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\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\x0a\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x67\x00\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\x0a\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\x65\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\x0a\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\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\xff\xff\xff\xff\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\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\x5c\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\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\x0a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x62\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x0a\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x6e\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\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\x0a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x64\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\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\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\x20\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\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\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\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\x20\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\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\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\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\x20\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\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\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\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\x20\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\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\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\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\x20\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\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\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\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\x20\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\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\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\x5f\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\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\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\x20\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\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\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\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\x20\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\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\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\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\x20\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\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\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\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\x20\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\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\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\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\x20\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\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\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\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\x20\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\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\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\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\x20\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\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\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\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\x20\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\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\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\x21\x00\x23\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\xff\xff\x7e\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\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\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\x20\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7d\x00\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\x53\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x41\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\xff\xff\x7c\x00\xff\xff\x7e\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\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\x45\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\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\x43\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\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\x53\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x43\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\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\x45\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\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\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x41\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\xff\xff\x7c\x00\xff\xff\x7e\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\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\x4b\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\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\x45\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\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\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x20\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\x2d\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\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\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\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\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\x49\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\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\x45\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\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\x49\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\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\x49\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\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\x43\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\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\x4f\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\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\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x41\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\xff\xff\x7c\x00\xff\xff\x7e\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\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\x59\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\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\x4f\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\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\x45\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\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\x49\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\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\x49\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\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\x49\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\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\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x41\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\xff\xff\x7c\x00\xff\xff\x7e\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\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\x49\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\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\x49\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\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\x4d\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\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\x53\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x43\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\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\x55\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\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\x4d\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\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\x5f\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\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\x4f\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\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\x4f\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\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\x49\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\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\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x41\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\xff\xff\x7c\x00\xff\xff\x7e\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\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\x49\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\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\x4d\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\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\x45\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\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\x5f\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\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\x4f\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\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\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\x20\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\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\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\x54\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\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\x52\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x4e\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\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\x54\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\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\x4e\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\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\x50\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x54\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\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\x50\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x54\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\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\x48\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\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\x50\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x4c\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\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\x42\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\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\x54\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\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\x50\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x4c\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\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\x54\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\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\x4e\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\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\x54\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\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\x4c\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\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\x52\x00\x53\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x44\x00\x45\x00\xff\xff\xff\xff\xff\xff\xff\xff\x4a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x54\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\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\x50\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x54\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\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\x4e\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\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\x54\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\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\x44\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\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\x4e\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\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\x0a\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\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\xff\xff\xff\xff\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\xff\xff\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\x27\x00\x28\x00\x29\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2e\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\x3b\x00\xff\xff\xff\xff\xff\xff\xff\xff\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\xff\xff\x5f\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\x7b\x00\xff\xff\x7d\x00\xff\xff\x7f\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\x0a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\xff\xff\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5b\x00\x5c\x00\x5d\x00\x5e\x00\xff\xff\x60\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\x7c\x00\xff\xff\x7e\x00\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\xff\xff\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x28\x00\x29\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2e\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\x3b\x00\xff\xff\xff\xff\xff\xff\xff\xff\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7b\x00\xff\xff\x7d\x00\xff\xff\x7f\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\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\xff\xff\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x28\x00\x29\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2e\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\x3b\x00\xff\xff\xff\xff\xff\xff\xff\xff\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7b\x00\xff\xff\x7d\x00\xff\xff\x7f\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\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\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\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"#  alex_deflt :: AlexAddr-alex_deflt = AlexA# "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x48\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\x27\x00\x27\x00\x29\x00\x29\x00\xff\xff\x2b\x00\x2b\x00\x2d\x00\x2d\x00\x32\x00\x32\x00\x35\x00\x35\x00\x38\x00\x38\x00\x3d\x00\x3d\x00\xff\xff\x99\x00\x99\x00\x99\x00\x80\x00\x80\x00\x80\x00\x48\x00\x48\x00\x48\x00\x3e\x00\xff\xff\x3e\x00\x3e\x00\x3e\x00\xff\xff\x48\x00\x48\x00\x48\x00\x48\x00\x48\x00\x48\x00\x48\x00\x48\x00\x48\x00\x48\x00\x48\x00\x48\x00\x48\x00\x48\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\xff\xff\xff\xff\x99\x00\x9d\x00\x99\x00\x9d\x00\x9d\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"#+alex_deflt = AlexA# "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x8e\x00\x48\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\x27\x00\x27\x00\x29\x00\x29\x00\xff\xff\x2b\x00\x2b\x00\x2d\x00\x2d\x00\x32\x00\x32\x00\x35\x00\x35\x00\x38\x00\x38\x00\x3d\x00\x3d\x00\xff\xff\xad\x00\xad\x00\xad\x00\x8e\x00\x8e\x00\x8e\x00\x48\x00\x48\x00\x48\x00\x3e\x00\xff\xff\x3e\x00\x3e\x00\x3e\x00\xff\xff\x48\x00\x48\x00\x48\x00\x48\x00\x48\x00\x48\x00\x48\x00\x48\x00\x48\x00\x48\x00\x48\x00\x48\x00\x48\x00\x48\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\xff\xff\xff\xff\xad\x00\xb1\x00\xad\x00\xb1\x00\xb1\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"# -alex_accept = listArray (0::Int,366) [[],[(AlexAccPred  (alex_action_29) ( not' eof ))],[],[(AlexAcc (alex_action_32))],[],[(AlexAcc (alex_action_31))],[],[(AlexAccPred  (alex_action_4) ( eof ))],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[(AlexAccSkip)],[(AlexAccPred  (alex_action_0) (alexRightContext 58)),(AlexAccPred  (alex_action_1) ( keepComments )),(AlexAccSkip)],[(AlexAccPred  (alex_action_1) ( keepComments )),(AlexAccSkip)],[(AlexAccPred  (alex_action_1) ( keepComments )),(AlexAccSkip)],[(AlexAccPred  (alex_action_1) ( keepComments )),(AlexAccSkip)],[(AlexAccPred  (alex_action_1) ( keepComments )),(AlexAccSkip)],[(AlexAccPred  (alex_action_1) ( keepComments )),(AlexAccSkip)],[(AlexAccPred  (alex_action_1) ( keepComments )),(AlexAccSkip)],[(AlexAccPred  (alex_action_1) ( keepComments )),(AlexAccSkip)],[(AlexAccPred  (alex_action_1) ( keepComments )),(AlexAccSkip)],[(AlexAccPred  (alex_action_1) ( keepComments )),(AlexAccSkip)],[(AlexAccPred  (alex_action_1) ( keepComments )),(AlexAccSkip)],[(AlexAccPred  (alex_action_1) ( keepComments )),(AlexAccSkip)],[(AlexAccPred  (alex_action_1) ( keepComments )),(AlexAccSkip)],[(AlexAccPred  (alex_action_1) ( keepComments )),(AlexAccSkip)],[(AlexAccSkip)],[(AlexAccPred  (alex_action_5) ( inState code ))],[(AlexAccSkip)],[(AlexAccSkip)],[(AlexAcc (alex_action_8))],[(AlexAcc (alex_action_9))],[(AlexAcc (alex_action_10))],[(AlexAcc (alex_action_11))],[(AlexAcc (alex_action_12))],[(AlexAcc (alex_action_13))],[(AlexAcc (alex_action_14))],[(AlexAcc (alex_action_15))],[(AlexAcc (alex_action_16))],[(AlexAcc (alex_action_17))],[(AlexAcc (alex_action_18))],[(AlexAcc (alex_action_19))],[(AlexAcc (alex_action_20))],[(AlexAcc (alex_action_21))],[(AlexAcc (alex_action_22))],[(AlexAcc (alex_action_23))],[(AlexAcc (alex_action_23))],[(AlexAcc (alex_action_23))],[(AlexAcc (alex_action_23))],[(AlexAcc (alex_action_23))],[(AlexAcc (alex_action_23))],[(AlexAcc (alex_action_23))],[(AlexAcc (alex_action_23))],[(AlexAcc (alex_action_23))],[(AlexAcc (alex_action_23))],[(AlexAcc (alex_action_23))],[(AlexAcc (alex_action_23))],[(AlexAcc (alex_action_23))],[(AlexAcc (alex_action_23))],[(AlexAcc (alex_action_23))],[(AlexAcc (alex_action_23))],[(AlexAcc (alex_action_23))],[(AlexAcc (alex_action_23))],[(AlexAcc (alex_action_23))],[(AlexAcc (alex_action_23))],[(AlexAcc (alex_action_23))],[(AlexAcc (alex_action_23))],[(AlexAcc (alex_action_23))],[(AlexAcc (alex_action_23))],[(AlexAcc (alex_action_23))],[(AlexAcc (alex_action_23))],[(AlexAcc (alex_action_23))],[(AlexAcc (alex_action_23))],[(AlexAcc (alex_action_23))],[(AlexAcc (alex_action_23))],[(AlexAcc (alex_action_23))],[(AlexAcc (alex_action_23))],[(AlexAcc (alex_action_23))],[(AlexAcc (alex_action_23))],[(AlexAcc (alex_action_23))],[(AlexAcc (alex_action_23))],[(AlexAcc (alex_action_23))],[(AlexAcc (alex_action_23))],[(AlexAcc (alex_action_23))],[(AlexAcc (alex_action_23))],[(AlexAcc (alex_action_23))],[(AlexAcc (alex_action_23))],[(AlexAcc (alex_action_23))],[(AlexAcc (alex_action_23))],[(AlexAcc (alex_action_23))],[(AlexAcc (alex_action_23))],[(AlexAcc (alex_action_23))],[(AlexAcc (alex_action_23))],[(AlexAcc (alex_action_23))],[(AlexAcc (alex_action_23))],[(AlexAcc (alex_action_23))],[(AlexAcc (alex_action_23))],[(AlexAcc (alex_action_23))],[(AlexAcc (alex_action_23))],[(AlexAcc (alex_action_23))],[(AlexAccPred  (alex_action_24) ( not' (followedBy '#') ))],[(AlexAccPred  (alex_action_24) ( not' (followedBy '#') ))],[(AlexAccPred  (alex_action_25) ( keepComments .&&. (followedBy '\n' .||. eof) )),(AlexAccSkipPred  ( followedBy '\n' .||. eof ))],[(AlexAccPred  (alex_action_25) ( keepComments .&&. (followedBy '\n' .||. eof) )),(AlexAccSkipPred  ( followedBy '\n' .||. eof ))],[(AlexAccPred  (alex_action_25) ( keepComments .&&. (followedBy '\n' .||. eof) )),(AlexAccSkipPred  ( followedBy '\n' .||. eof ))],[(AlexAccPred  (alex_action_25) ( keepComments .&&. (followedBy '\n' .||. eof) )),(AlexAccSkipPred  ( followedBy '\n' .||. eof ))],[(AlexAccPred  (alex_action_25) ( keepComments .&&. (followedBy '\n' .||. eof) )),(AlexAccSkipPred  ( followedBy '\n' .||. eof )),(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_27))],[(AlexAccSkip)],[(AlexAccSkip)],[(AlexAcc (alex_action_33))],[(AlexAcc (alex_action_34))],[(AlexAcc (alex_action_35))],[(AlexAcc (alex_action_36))],[(AlexAcc (alex_action_37))],[(AlexAcc (alex_action_38))],[(AlexAcc (alex_action_39))],[(AlexAcc (alex_action_40))],[(AlexAcc (alex_action_41))],[(AlexAcc (alex_action_42))],[(AlexAcc (alex_action_43))],[(AlexAcc (alex_action_44))],[(AlexAcc (alex_action_45))],[(AlexAcc (alex_action_46))],[(AlexAcc (alex_action_47))],[(AlexAcc (alex_action_48))],[(AlexAcc (alex_action_49))],[(AlexAcc (alex_action_50))],[(AlexAcc (alex_action_51))],[(AlexAcc (alex_action_52))],[(AlexAcc (alex_action_53))],[(AlexAcc (alex_action_54))],[(AlexAcc (alex_action_55))],[(AlexAcc (alex_action_56))],[(AlexAcc (alex_action_57))],[(AlexAcc (alex_action_57))],[(AlexAcc (alex_action_57))],[(AlexAcc (alex_action_58))],[(AlexAcc (alex_action_59))],[(AlexAcc (alex_action_60))],[(AlexAcc (alex_action_61))],[(AlexAcc (alex_action_62))],[(AlexAcc (alex_action_63))],[(AlexAcc (alex_action_64))],[(AlexAcc (alex_action_65))],[(AlexAcc (alex_action_66))],[(AlexAcc (alex_action_67))],[(AlexAcc (alex_action_68))],[(AlexAcc (alex_action_69))],[(AlexAcc (alex_action_70))],[(AlexAcc (alex_action_71))],[(AlexAcc (alex_action_72))],[(AlexAcc (alex_action_73))],[(AlexAcc (alex_action_74))],[(AlexAcc (alex_action_75))],[(AlexAcc (alex_action_76))],[(AlexAcc (alex_action_77))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_79))],[(AlexAcc (alex_action_80))],[(AlexAcc (alex_action_81))],[(AlexAcc (alex_action_82))],[(AlexAccPred  (alex_action_83) (alexRightContext 59))],[(AlexAcc (alex_action_84))],[(AlexAcc (alex_action_85))],[(AlexAcc (alex_action_86))],[(AlexAcc (alex_action_87))],[(AlexAcc (alex_action_88))],[(AlexAcc (alex_action_88))],[(AlexAcc (alex_action_88))],[(AlexAcc (alex_action_88))],[(AlexAcc (alex_action_88))],[(AlexAcc (alex_action_89))],[(AlexAcc (alex_action_89))],[(AlexAcc (alex_action_89))],[(AlexAcc (alex_action_89))],[(AlexAcc (alex_action_89))],[(AlexAcc (alex_action_89))],[(AlexAcc (alex_action_89))],[(AlexAcc (alex_action_89))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))]]-{-# LINE 208 "src/full/Agda/Syntax/Parser/Lexer.x" #-}+alex_accept = listArray (0::Int,408) [[],[(AlexAccPred  (alex_action_30) ( not' eof ))],[],[(AlexAcc (alex_action_33))],[],[(AlexAcc (alex_action_32))],[],[(AlexAccPred  (alex_action_4) ( eof ))],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[(AlexAccSkip)],[(AlexAccPred  (alex_action_0) (alexRightContext 58)),(AlexAccPred  (alex_action_1) ( keepComments )),(AlexAccSkip)],[(AlexAccPred  (alex_action_1) ( keepComments )),(AlexAccSkip)],[(AlexAccPred  (alex_action_1) ( keepComments )),(AlexAccSkip)],[(AlexAccPred  (alex_action_1) ( keepComments )),(AlexAccSkip)],[(AlexAccPred  (alex_action_1) ( keepComments )),(AlexAccSkip)],[(AlexAccPred  (alex_action_1) ( keepComments )),(AlexAccSkip)],[(AlexAccPred  (alex_action_1) ( keepComments )),(AlexAccSkip)],[(AlexAccPred  (alex_action_1) ( keepComments )),(AlexAccSkip)],[(AlexAccPred  (alex_action_1) ( keepComments )),(AlexAccSkip)],[(AlexAccPred  (alex_action_1) ( keepComments )),(AlexAccSkip)],[(AlexAccPred  (alex_action_1) ( keepComments )),(AlexAccSkip)],[(AlexAccPred  (alex_action_1) ( keepComments )),(AlexAccSkip)],[(AlexAccPred  (alex_action_1) ( keepComments )),(AlexAccSkip)],[(AlexAccPred  (alex_action_1) ( keepComments )),(AlexAccSkip)],[(AlexAccSkip)],[(AlexAccPred  (alex_action_5) ( inState code ))],[(AlexAccSkip)],[(AlexAccSkip)],[(AlexAcc (alex_action_8))],[(AlexAcc (alex_action_9))],[(AlexAcc (alex_action_10))],[(AlexAcc (alex_action_11))],[(AlexAcc (alex_action_12))],[(AlexAcc (alex_action_13))],[(AlexAcc (alex_action_14))],[(AlexAcc (alex_action_15))],[(AlexAcc (alex_action_16))],[(AlexAcc (alex_action_17))],[(AlexAcc (alex_action_18))],[(AlexAcc (alex_action_19))],[(AlexAcc (alex_action_20))],[(AlexAcc (alex_action_21))],[(AlexAcc (alex_action_22))],[(AlexAcc (alex_action_23))],[(AlexAcc (alex_action_24))],[(AlexAcc (alex_action_24))],[(AlexAcc (alex_action_24))],[(AlexAcc (alex_action_24))],[(AlexAcc (alex_action_24))],[(AlexAcc (alex_action_24))],[(AlexAcc (alex_action_24))],[(AlexAcc (alex_action_24))],[(AlexAcc (alex_action_24))],[(AlexAcc (alex_action_24))],[(AlexAcc (alex_action_24))],[(AlexAcc (alex_action_24))],[(AlexAcc (alex_action_24))],[(AlexAcc (alex_action_24))],[(AlexAcc (alex_action_24))],[(AlexAcc (alex_action_24))],[(AlexAcc (alex_action_24))],[(AlexAcc (alex_action_24))],[(AlexAcc (alex_action_24))],[(AlexAcc (alex_action_24))],[(AlexAcc (alex_action_24))],[(AlexAcc (alex_action_24))],[(AlexAcc (alex_action_24))],[(AlexAcc (alex_action_24))],[(AlexAcc (alex_action_24))],[(AlexAcc (alex_action_24))],[(AlexAcc (alex_action_24))],[(AlexAcc (alex_action_24))],[(AlexAcc (alex_action_24))],[(AlexAcc (alex_action_24))],[(AlexAcc (alex_action_24))],[(AlexAcc (alex_action_24))],[(AlexAcc (alex_action_24))],[(AlexAcc (alex_action_24))],[(AlexAcc (alex_action_24))],[(AlexAcc (alex_action_24))],[(AlexAcc (alex_action_24))],[(AlexAcc (alex_action_24))],[(AlexAcc (alex_action_24))],[(AlexAcc (alex_action_24))],[(AlexAcc (alex_action_24))],[(AlexAcc (alex_action_24))],[(AlexAcc (alex_action_24))],[(AlexAcc (alex_action_24))],[(AlexAcc (alex_action_24))],[(AlexAcc (alex_action_24))],[(AlexAcc (alex_action_24))],[(AlexAcc (alex_action_24))],[(AlexAcc (alex_action_24))],[(AlexAcc (alex_action_24))],[(AlexAcc (alex_action_24))],[(AlexAcc (alex_action_24))],[(AlexAcc (alex_action_24))],[(AlexAcc (alex_action_24))],[(AlexAcc (alex_action_24))],[(AlexAcc (alex_action_24))],[(AlexAcc (alex_action_24))],[(AlexAcc (alex_action_24))],[(AlexAcc (alex_action_24))],[(AlexAcc (alex_action_24))],[(AlexAcc (alex_action_24))],[(AlexAcc (alex_action_24))],[(AlexAcc (alex_action_24))],[(AlexAcc (alex_action_24))],[(AlexAcc (alex_action_24))],[(AlexAcc (alex_action_24))],[(AlexAcc (alex_action_24))],[(AlexAcc (alex_action_24))],[(AlexAcc (alex_action_24))],[(AlexAcc (alex_action_24))],[(AlexAcc (alex_action_24))],[(AlexAcc (alex_action_24))],[(AlexAcc (alex_action_24))],[(AlexAcc (alex_action_24))],[(AlexAccPred  (alex_action_25) ( not' (followedBy '#') ))],[(AlexAccPred  (alex_action_25) ( not' (followedBy '#') ))],[(AlexAccPred  (alex_action_26) ( keepComments .&&. (followedBy '\n' .||. eof) )),(AlexAccSkipPred  ( followedBy '\n' .||. eof ))],[(AlexAccPred  (alex_action_26) ( keepComments .&&. (followedBy '\n' .||. eof) )),(AlexAccSkipPred  ( followedBy '\n' .||. eof ))],[(AlexAccPred  (alex_action_26) ( keepComments .&&. (followedBy '\n' .||. eof) )),(AlexAccSkipPred  ( followedBy '\n' .||. eof ))],[(AlexAccPred  (alex_action_26) ( keepComments .&&. (followedBy '\n' .||. eof) )),(AlexAccSkipPred  ( followedBy '\n' .||. eof ))],[(AlexAccPred  (alex_action_26) ( keepComments .&&. (followedBy '\n' .||. eof) )),(AlexAccSkipPred  ( followedBy '\n' .||. eof )),(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_28))],[(AlexAccSkip)],[(AlexAccSkip)],[(AlexAcc (alex_action_34))],[(AlexAcc (alex_action_35))],[(AlexAcc (alex_action_36))],[(AlexAcc (alex_action_37))],[(AlexAcc (alex_action_38))],[(AlexAcc (alex_action_39))],[(AlexAcc (alex_action_40))],[(AlexAcc (alex_action_41))],[(AlexAcc (alex_action_42))],[(AlexAcc (alex_action_43))],[(AlexAcc (alex_action_44))],[(AlexAcc (alex_action_45))],[(AlexAcc (alex_action_46))],[(AlexAcc (alex_action_47))],[(AlexAcc (alex_action_48))],[(AlexAcc (alex_action_49))],[(AlexAcc (alex_action_50))],[(AlexAcc (alex_action_51))],[(AlexAcc (alex_action_52))],[(AlexAcc (alex_action_53))],[(AlexAcc (alex_action_54))],[(AlexAcc (alex_action_55))],[(AlexAcc (alex_action_56))],[(AlexAcc (alex_action_57))],[(AlexAcc (alex_action_58))],[(AlexAcc (alex_action_59))],[(AlexAcc (alex_action_60))],[(AlexAcc (alex_action_60))],[(AlexAcc (alex_action_60))],[(AlexAcc (alex_action_61))],[(AlexAcc (alex_action_62))],[(AlexAcc (alex_action_63))],[(AlexAcc (alex_action_64))],[(AlexAcc (alex_action_65))],[(AlexAcc (alex_action_66))],[(AlexAcc (alex_action_67))],[(AlexAcc (alex_action_68))],[(AlexAcc (alex_action_69))],[(AlexAcc (alex_action_70))],[(AlexAcc (alex_action_71))],[(AlexAcc (alex_action_72))],[(AlexAcc (alex_action_73))],[(AlexAcc (alex_action_74))],[(AlexAcc (alex_action_75))],[(AlexAcc (alex_action_76))],[(AlexAcc (alex_action_77))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_79))],[(AlexAcc (alex_action_80))],[(AlexAcc (alex_action_81))],[(AlexAcc (alex_action_82))],[(AlexAcc (alex_action_83))],[(AlexAcc (alex_action_84))],[(AlexAcc (alex_action_85))],[(AlexAcc (alex_action_86))],[(AlexAccPred  (alex_action_87) (alexRightContext 59))],[(AlexAcc (alex_action_88))],[(AlexAcc (alex_action_89))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_91))],[(AlexAcc (alex_action_92))],[(AlexAcc (alex_action_92))],[(AlexAcc (alex_action_92))],[(AlexAcc (alex_action_92))],[(AlexAcc (alex_action_92))],[(AlexAcc (alex_action_93))],[(AlexAcc (alex_action_93))],[(AlexAcc (alex_action_93))],[(AlexAcc (alex_action_93))],[(AlexAcc (alex_action_93))],[(AlexAcc (alex_action_93))],[(AlexAcc (alex_action_93))],[(AlexAcc (alex_action_93))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))]]+{-# LINE 212 "src/full/Agda/Syntax/Parser/Lexer.x" #-}   -- | This is the initial state for parsing a literate file. Code blocks@@ -164,76 +164,80 @@ alex_action_19 =  keyword KwIMPORT  alex_action_20 =  keyword KwIMPOSSIBLE  alex_action_21 =  keyword KwETA -alex_action_22 =  keyword KwLINE -alex_action_23 =  withInterval $ TokString -alex_action_24 =  nestedComment -alex_action_25 =  withInterval TokComment -alex_action_27 =  begin bol_ -alex_action_29 =  offsideRule -alex_action_31 =  endWith newLayoutContext -alex_action_32 =  emptyLayout -alex_action_33 =  keyword KwLet -alex_action_34 =  keyword KwIn -alex_action_35 =  keyword KwWhere -alex_action_36 =  keyword KwField -alex_action_37 =  keyword KwWith -alex_action_38 =  keyword KwRewrite -alex_action_39 =  keyword KwPostulate -alex_action_40 =  keyword KwPrimitive -alex_action_41 =  keyword KwOpen -alex_action_42 =  keyword KwImport -alex_action_43 =  keyword KwModule -alex_action_44 =  keyword KwData -alex_action_45 =  keyword KwCoData -alex_action_46 =  keyword KwRecord -alex_action_47 =  keyword KwConstructor -alex_action_48 =  keyword KwInfix -alex_action_49 =  keyword KwInfixL -alex_action_50 =  keyword KwInfixR -alex_action_51 =  keyword KwMutual -alex_action_52 =  keyword KwAbstract -alex_action_53 =  keyword KwPrivate -alex_action_54 =  keyword KwSet -alex_action_55 =  keyword KwProp -alex_action_56 =  keyword KwForall -alex_action_57 =  withInterval' (read . drop 3) TokSetN -alex_action_58 =  keyword KwQuoteGoal -alex_action_59 =  keyword KwQuote -alex_action_60 =  keyword KwQuoteTerm -alex_action_61 =  keyword KwUnquote -alex_action_62 =  keyword KwSyntax -alex_action_63 =  keyword KwUsing -alex_action_64 =  keyword KwHiding -alex_action_65 =  keyword KwRenaming -alex_action_66 =  endWith $ keyword KwTo -alex_action_67 =  keyword KwPublic -alex_action_68 =  hole -alex_action_69 =  symbol SymEllipsis -alex_action_70 =  symbol SymDotDot -alex_action_71 =  symbol SymDot -alex_action_72 =  symbol SymSemi -alex_action_73 =  symbol SymColon -alex_action_74 =  symbol SymEqual -alex_action_75 =  symbol SymUnderscore -alex_action_76 =  symbol SymQuestionMark -alex_action_77 =  symbol SymBar -alex_action_78 =  symbol SymOpenParen -alex_action_79 =  symbol SymCloseParen -alex_action_80 =  symbol SymArrow -alex_action_81 =  symbol SymLambda -alex_action_82 =  symbol SymAs -alex_action_83 =  symbol SymDoubleOpenBrace -alex_action_84 =  symbol SymOpenBrace -alex_action_85 =  symbol SymCloseBrace -alex_action_86 =  litChar -alex_action_87 =  litString -alex_action_88 =  literal LitInt -alex_action_89 =  literal LitFloat -alex_action_90 =  identifier +alex_action_22 =  keyword KwNO_TERMINATION_CHECK +alex_action_23 =  keyword KwLINE +alex_action_24 =  withInterval $ TokString +alex_action_25 =  nestedComment +alex_action_26 =  withInterval TokComment +alex_action_28 =  begin bol_ +alex_action_30 =  offsideRule +alex_action_32 =  endWith newLayoutContext +alex_action_33 =  emptyLayout +alex_action_34 =  keyword KwLet +alex_action_35 =  keyword KwIn +alex_action_36 =  keyword KwWhere +alex_action_37 =  keyword KwField +alex_action_38 =  keyword KwWith +alex_action_39 =  keyword KwRewrite +alex_action_40 =  keyword KwPostulate +alex_action_41 =  keyword KwPrimitive +alex_action_42 =  keyword KwOpen +alex_action_43 =  keyword KwImport +alex_action_44 =  keyword KwModule +alex_action_45 =  keyword KwData +alex_action_46 =  keyword KwCoData +alex_action_47 =  keyword KwRecord +alex_action_48 =  keyword KwConstructor +alex_action_49 =  keyword KwInductive +alex_action_50 =  keyword KwCoInductive +alex_action_51 =  keyword KwInfix +alex_action_52 =  keyword KwInfixL +alex_action_53 =  keyword KwInfixR +alex_action_54 =  keyword KwMutual +alex_action_55 =  keyword KwAbstract +alex_action_56 =  keyword KwPrivate +alex_action_57 =  keyword KwSet +alex_action_58 =  keyword KwProp +alex_action_59 =  keyword KwForall +alex_action_60 =  withInterval' (read . drop 3) TokSetN +alex_action_61 =  keyword KwQuoteGoal +alex_action_62 =  keyword KwQuote +alex_action_63 =  keyword KwQuoteTerm +alex_action_64 =  keyword KwUnquote +alex_action_65 =  keyword KwSyntax +alex_action_66 =  keyword KwPatternSyn +alex_action_67 =  keyword KwUsing +alex_action_68 =  keyword KwHiding +alex_action_69 =  keyword KwRenaming +alex_action_70 =  endWith $ keyword KwTo +alex_action_71 =  keyword KwPublic +alex_action_72 =  hole +alex_action_73 =  symbol SymEllipsis +alex_action_74 =  symbol SymDotDot +alex_action_75 =  symbol SymDot +alex_action_76 =  symbol SymSemi +alex_action_77 =  symbol SymColon +alex_action_78 =  symbol SymEqual +alex_action_79 =  symbol SymUnderscore +alex_action_80 =  symbol SymQuestionMark +alex_action_81 =  symbol SymBar +alex_action_82 =  symbol SymOpenParen +alex_action_83 =  symbol SymCloseParen +alex_action_84 =  symbol SymArrow +alex_action_85 =  symbol SymLambda +alex_action_86 =  symbol SymAs +alex_action_87 =  symbol SymDoubleOpenBrace +alex_action_88 =  symbol SymOpenBrace +alex_action_89 =  symbol SymCloseBrace +alex_action_90 =  litChar +alex_action_91 =  litString +alex_action_92 =  literal LitInt +alex_action_93 =  literal LitFloat +alex_action_94 =  identifier  {-# LINE 1 "templates/GenericTemplate.hs" #-} {-# LINE 1 "templates/GenericTemplate.hs" #-} {-# LINE 1 "<built-in>" #-}-{-# LINE 1 "<command-line>" #-}+{-# LINE 1 "<command line>" #-} {-# LINE 1 "templates/GenericTemplate.hs" #-} -- ----------------------------------------------------------------------------- -- ALEX TEMPLATE
dist/build/Agda/Syntax/Parser/Parser.hs view
@@ -2,4789 +2,5049 @@ {-# OPTIONS -fglasgow-exts -cpp #-} {-# OPTIONS_GHC -fno-warn-incomplete-patterns                 -fno-warn-deprecated-flags #-}-{-# LANGUAGE BangPatterns #-}-{-| The parser is generated by Happy (<http://www.haskell.org/happy>).--}-module Agda.Syntax.Parser.Parser (-      moduleParser-    , exprParser-    , tokensParser-    , tests-    ) where--import Control.Arrow-import Control.Monad-import Control.Monad.State-import Data.Char-import Data.List-import Data.Maybe-import qualified Data.Traversable as T--import Agda.Syntax.Position hiding (tests)-import Agda.Syntax.Parser.Monad-import Agda.Syntax.Parser.Lexer-import Agda.Syntax.Parser.Tokens-import Agda.Syntax.Concrete-import Agda.Syntax.Concrete.Name-import Agda.Syntax.Concrete.Pretty-import Agda.Syntax.Common-import Agda.Syntax.Fixity-import Agda.Syntax.Notation-import Agda.Syntax.Literal--import Agda.Utils.Monad-import Agda.Utils.QuickCheck-import Agda.Utils.TestHelpers-import qualified Data.Array as Happy_Data_Array-import qualified GHC.Exts as Happy_GHC_Exts---- parser produced by Happy Version 1.18.9--newtype HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70 = HappyAbsSyn HappyAny-#if __GLASGOW_HASKELL__ >= 607-type HappyAny = Happy_GHC_Exts.Any-#else-type HappyAny = forall a . a-#endif-happyIn6 :: ([Token]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)-happyIn6 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn6 #-}-happyOut6 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> ([Token])-happyOut6 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut6 #-}-happyIn7 :: ([Token]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)-happyIn7 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn7 #-}-happyOut7 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> ([Token])-happyOut7 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut7 #-}-happyIn8 :: (Token) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)-happyIn8 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn8 #-}-happyOut8 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (Token)-happyOut8 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut8 #-}-happyIn9 :: (([Pragma], [Declaration])) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)-happyIn9 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn9 #-}-happyOut9 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (([Pragma], [Declaration]))-happyOut9 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut9 #-}-happyIn10 :: t10 -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)-happyIn10 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn10 #-}-happyOut10 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> t10-happyOut10 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut10 #-}-happyIn11 :: t11 -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)-happyIn11 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn11 #-}-happyOut11 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> t11-happyOut11 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut11 #-}-happyIn12 :: t12 -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)-happyIn12 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn12 #-}-happyOut12 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> t12-happyOut12 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut12 #-}-happyIn13 :: (()) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)-happyIn13 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn13 #-}-happyOut13 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (())-happyOut13 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut13 #-}-happyIn14 :: (Integer) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)-happyIn14 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn14 #-}-happyOut14 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (Integer)-happyOut14 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut14 #-}-happyIn15 :: (Name) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)-happyIn15 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn15 #-}-happyOut15 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (Name)-happyOut15 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut15 #-}-happyIn16 :: ([Name]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)-happyIn16 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn16 #-}-happyOut16 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> ([Name])-happyOut16 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut16 #-}-happyIn17 :: (Range) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)-happyIn17 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn17 #-}-happyOut17 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (Range)-happyOut17 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut17 #-}-happyIn18 :: (Arg Name) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)-happyIn18 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn18 #-}-happyOut18 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (Arg Name)-happyOut18 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut18 #-}-happyIn19 :: ([Arg Name]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)-happyIn19 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn19 #-}-happyOut19 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> ([Arg Name])-happyOut19 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut19 #-}-happyIn20 :: ([Arg Name]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)-happyIn20 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn20 #-}-happyOut20 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> ([Arg Name])-happyOut20 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut20 #-}-happyIn21 :: (QName) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)-happyIn21 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn21 #-}-happyOut21 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (QName)-happyOut21 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut21 #-}-happyIn22 :: (QName) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)-happyIn22 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn22 #-}-happyOut22 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (QName)-happyOut22 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut22 #-}-happyIn23 :: (Name) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)-happyIn23 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn23 #-}-happyOut23 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (Name)-happyOut23 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut23 #-}-happyIn24 :: ([Name]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)-happyIn24 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn24 #-}-happyOut24 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> ([Name])-happyOut24 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut24 #-}-happyIn25 :: ([Name]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)-happyIn25 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn25 #-}-happyOut25 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> ([Name])-happyOut25 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut25 #-}-happyIn26 :: (Either [Name] [Expr]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)-happyIn26 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn26 #-}-happyOut26 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (Either [Name] [Expr])-happyOut26 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut26 #-}-happyIn27 :: ([String]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)-happyIn27 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn27 #-}-happyOut27 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> ([String])-happyOut27 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut27 #-}-happyIn28 :: (QName) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)-happyIn28 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn28 #-}-happyOut28 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (QName)-happyOut28 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut28 #-}-happyIn29 :: (Expr) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)-happyIn29 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn29 #-}-happyOut29 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (Expr)-happyOut29 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut29 #-}-happyIn30 :: t30 -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)-happyIn30 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn30 #-}-happyOut30 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> t30-happyOut30 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut30 #-}-happyIn31 :: ([Expr]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)-happyIn31 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn31 #-}-happyOut31 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> ([Expr])-happyOut31 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut31 #-}-happyIn32 :: ([Expr]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)-happyIn32 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn32 #-}-happyOut32 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> ([Expr])-happyOut32 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut32 #-}-happyIn33 :: t33 -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)-happyIn33 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn33 #-}-happyOut33 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> t33-happyOut33 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut33 #-}-happyIn34 :: ([Expr]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)-happyIn34 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn34 #-}-happyOut34 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> ([Expr])-happyOut34 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut34 #-}-happyIn35 :: t35 -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)-happyIn35 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn35 #-}-happyOut35 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> t35-happyOut35 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut35 #-}-happyIn36 :: t36 -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)-happyIn36 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn36 #-}-happyOut36 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> t36-happyOut36 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut36 #-}-happyIn37 :: t37 -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)-happyIn37 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn37 #-}-happyOut37 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> t37-happyOut37 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut37 #-}-happyIn38 :: ([(Name, Expr)]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)-happyIn38 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn38 #-}-happyOut38 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> ([(Name, Expr)])-happyOut38 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut38 #-}-happyIn39 :: ([(Name, Expr)]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)-happyIn39 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn39 #-}-happyOut39 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> ([(Name, Expr)])-happyOut39 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut39 #-}-happyIn40 :: ((Name, Expr)) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)-happyIn40 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn40 #-}-happyOut40 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> ((Name, Expr))-happyOut40 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut40 #-}-happyIn41 :: t41 -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)-happyIn41 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn41 #-}-happyOut41 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> t41-happyOut41 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut41 #-}-happyIn42 :: t42 -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)-happyIn42 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn42 #-}-happyOut42 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> t42-happyOut42 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut42 #-}-happyIn43 :: ([TypedBindings]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)-happyIn43 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn43 #-}-happyOut43 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> ([TypedBindings])-happyOut43 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut43 #-}-happyIn44 :: (TypedBindings) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)-happyIn44 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn44 #-}-happyOut44 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (TypedBindings)-happyOut44 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut44 #-}-happyIn45 :: (TypedBinding) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)-happyIn45 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn45 #-}-happyOut45 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (TypedBinding)-happyOut45 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut45 #-}-happyIn46 :: ([LamBinding]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)-happyIn46 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn46 #-}-happyOut46 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> ([LamBinding])-happyOut46 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut46 #-}-happyIn47 :: (Either ([LamBinding], Hiding) [Expr]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)-happyIn47 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn47 #-}-happyOut47 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (Either ([LamBinding], Hiding) [Expr])-happyOut47 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut47 #-}-happyIn48 :: ([Either Hiding LamBinding]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)-happyIn48 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn48 #-}-happyOut48 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> ([Either Hiding LamBinding])-happyOut48 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut48 #-}-happyIn49 :: (Either [Either Hiding LamBinding] [Expr]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)-happyIn49 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn49 #-}-happyOut49 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (Either [Either Hiding LamBinding] [Expr])-happyOut49 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut49 #-}-happyIn50 :: ((LHS,RHS,WhereClause)) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)-happyIn50 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn50 #-}-happyOut50 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> ((LHS,RHS,WhereClause))-happyOut50 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut50 #-}-happyIn51 :: ((LHS,RHS,WhereClause)) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)-happyIn51 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn51 #-}-happyOut51 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> ((LHS,RHS,WhereClause))-happyOut51 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut51 #-}-happyIn52 :: ((LHS,RHS,WhereClause)) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)-happyIn52 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn52 #-}-happyOut52 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> ((LHS,RHS,WhereClause))-happyOut52 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut52 #-}-happyIn53 :: ([(LHS,RHS,WhereClause)]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)-happyIn53 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn53 #-}-happyOut53 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> ([(LHS,RHS,WhereClause)])-happyOut53 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut53 #-}-happyIn54 :: ([LamBinding]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)-happyIn54 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn54 #-}-happyOut54 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> ([LamBinding])-happyOut54 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut54 #-}-happyIn55 :: ([LamBinding]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)-happyIn55 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn55 #-}-happyOut55 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> ([LamBinding])-happyOut55 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut55 #-}-happyIn56 :: ([LamBinding]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)-happyIn56 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn56 #-}-happyOut56 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> ([LamBinding])-happyOut56 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut56 #-}-happyIn57 :: ([LamBinding]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)-happyIn57 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn57 #-}-happyOut57 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> ([LamBinding])-happyOut57 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut57 #-}-happyIn58 :: (Either [LamBinding] [Expr]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)-happyIn58 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn58 #-}-happyOut58 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (Either [LamBinding] [Expr])-happyOut58 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut58 #-}-happyIn59 :: ((Maybe AsName, ImportDirective)) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)-happyIn59 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn59 #-}-happyOut59 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> ((Maybe AsName, ImportDirective))-happyOut59 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut59 #-}-happyIn60 :: (ImportDirective) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)-happyIn60 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn60 #-}-happyOut60 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (ImportDirective)-happyOut60 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut60 #-}-happyIn61 :: (ImportDirective) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)-happyIn61 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn61 #-}-happyOut61 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (ImportDirective)-happyOut61 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut61 #-}-happyIn62 :: (ImportDirective) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)-happyIn62 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn62 #-}-happyOut62 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (ImportDirective)-happyOut62 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut62 #-}-happyIn63 :: ((UsingOrHiding , Range)) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)-happyIn63 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn63 #-}-happyOut63 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> ((UsingOrHiding , Range))-happyOut63 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut63 #-}-happyIn64 :: (([Renaming] , Range)) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)-happyIn64 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn64 #-}-happyOut64 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (([Renaming] , Range))-happyOut64 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut64 #-}-happyIn65 :: ([Renaming]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)-happyIn65 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn65 #-}-happyOut65 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> ([Renaming])-happyOut65 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut65 #-}-happyIn66 :: (Renaming) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)-happyIn66 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn66 #-}-happyOut66 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (Renaming)-happyOut66 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut66 #-}-happyIn67 :: (ImportedName) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)-happyIn67 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn67 #-}-happyOut67 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (ImportedName)-happyOut67 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut67 #-}-happyIn68 :: (ImportedName) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)-happyIn68 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn68 #-}-happyOut68 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (ImportedName)-happyOut68 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut68 #-}-happyIn69 :: ([ImportedName]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)-happyIn69 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn69 #-}-happyOut69 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> ([ImportedName])-happyOut69 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut69 #-}-happyIn70 :: t70 -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)-happyIn70 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn70 #-}-happyOut70 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> t70-happyOut70 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut70 #-}-happyIn71 :: (LHS) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)-happyIn71 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn71 #-}-happyOut71 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (LHS)-happyOut71 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut71 #-}-happyIn72 :: ([Pattern]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)-happyIn72 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn72 #-}-happyOut72 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> ([Pattern])-happyOut72 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut72 #-}-happyIn73 :: ([Expr]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)-happyIn73 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn73 #-}-happyOut73 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> ([Expr])-happyOut73 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut73 #-}-happyIn74 :: ([Expr]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)-happyIn74 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn74 #-}-happyOut74 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> ([Expr])-happyOut74 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut74 #-}-happyIn75 :: (WhereClause) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)-happyIn75 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn75 #-}-happyOut75 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (WhereClause)-happyOut75 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut75 #-}-happyIn76 :: ([Declaration]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)-happyIn76 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn76 #-}-happyOut76 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> ([Declaration])-happyOut76 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut76 #-}-happyIn77 :: ([Declaration]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)-happyIn77 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn77 #-}-happyOut77 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> ([Declaration])-happyOut77 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut77 #-}-happyIn78 :: (Declaration) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)-happyIn78 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn78 #-}-happyOut78 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (Declaration)-happyOut78 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut78 #-}-happyIn79 :: ([Declaration]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)-happyIn79 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn79 #-}-happyOut79 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> ([Declaration])-happyOut79 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut79 #-}-happyIn80 :: ([Arg Declaration]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)-happyIn80 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn80 #-}-happyOut80 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> ([Arg Declaration])-happyOut80 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut80 #-}-happyIn81 :: (Declaration) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)-happyIn81 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn81 #-}-happyOut81 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (Declaration)-happyOut81 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut81 #-}-happyIn82 :: (RHS) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)-happyIn82 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn82 #-}-happyOut82 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (RHS)-happyOut82 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut82 #-}-happyIn83 :: (Declaration) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)-happyIn83 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn83 #-}-happyOut83 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (Declaration)-happyOut83 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut83 #-}-happyIn84 :: (Declaration) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)-happyIn84 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn84 #-}-happyOut84 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (Declaration)-happyOut84 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut84 #-}-happyIn85 :: (Declaration) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)-happyIn85 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn85 #-}-happyOut85 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (Declaration)-happyOut85 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut85 #-}-happyIn86 :: (Declaration) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)-happyIn86 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn86 #-}-happyOut86 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (Declaration)-happyOut86 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut86 #-}-happyIn87 :: (Name) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)-happyIn87 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn87 #-}-happyOut87 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (Name)-happyOut87 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut87 #-}-happyIn88 :: (Declaration) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)-happyIn88 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn88 #-}-happyOut88 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (Declaration)-happyOut88 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut88 #-}-happyIn89 :: ([Declaration]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)-happyIn89 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn89 #-}-happyOut89 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> ([Declaration])-happyOut89 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut89 #-}-happyIn90 :: (Declaration) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)-happyIn90 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn90 #-}-happyOut90 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (Declaration)-happyOut90 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut90 #-}-happyIn91 :: (Declaration) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)-happyIn91 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn91 #-}-happyOut91 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (Declaration)-happyOut91 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut91 #-}-happyIn92 :: (Declaration) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)-happyIn92 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn92 #-}-happyOut92 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (Declaration)-happyOut92 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut92 #-}-happyIn93 :: (Declaration) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)-happyIn93 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn93 #-}-happyOut93 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (Declaration)-happyOut93 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut93 #-}-happyIn94 :: (Declaration) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)-happyIn94 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn94 #-}-happyOut94 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (Declaration)-happyOut94 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut94 #-}-happyIn95 :: (Declaration) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)-happyIn95 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn95 #-}-happyOut95 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (Declaration)-happyOut95 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut95 #-}-happyIn96 :: ([String]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)-happyIn96 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn96 #-}-happyOut96 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> ([String])-happyOut96 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut96 #-}-happyIn97 :: ([HoleName]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)-happyIn97 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn97 #-}-happyOut97 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> ([HoleName])-happyOut97 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut97 #-}-happyIn98 :: (HoleName) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)-happyIn98 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn98 #-}-happyOut98 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (HoleName)-happyOut98 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut98 #-}-happyIn99 :: (String) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)-happyIn99 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn99 #-}-happyOut99 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (String)-happyOut99 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut99 #-}-happyIn100 :: (Declaration) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)-happyIn100 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn100 #-}-happyOut100 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (Declaration)-happyOut100 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut100 #-}-happyIn101 :: ([Expr]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)-happyIn101 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn101 #-}-happyOut101 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> ([Expr])-happyOut101 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut101 #-}-happyIn102 :: ([TypedBindings] -> Parser ModuleApplication) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)-happyIn102 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn102 #-}-happyOut102 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> ([TypedBindings] -> Parser ModuleApplication)-happyOut102 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut102 #-}-happyIn103 :: (Declaration) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)-happyIn103 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn103 #-}-happyOut103 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (Declaration)-happyOut103 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut103 #-}-happyIn104 :: (Declaration) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)-happyIn104 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn104 #-}-happyOut104 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (Declaration)-happyOut104 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut104 #-}-happyIn105 :: (Declaration) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)-happyIn105 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn105 #-}-happyOut105 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (Declaration)-happyOut105 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut105 #-}-happyIn106 :: ([Declaration]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)-happyIn106 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn106 #-}-happyOut106 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> ([Declaration])-happyOut106 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut106 #-}-happyIn107 :: (Declaration) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)-happyIn107 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn107 #-}-happyOut107 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (Declaration)-happyOut107 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut107 #-}-happyIn108 :: (Declaration) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)-happyIn108 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn108 #-}-happyOut108 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (Declaration)-happyOut108 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut108 #-}-happyIn109 :: (Pragma) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)-happyIn109 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn109 #-}-happyOut109 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (Pragma)-happyOut109 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut109 #-}-happyIn110 :: (Pragma) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)-happyIn110 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn110 #-}-happyOut110 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (Pragma)-happyOut110 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut110 #-}-happyIn111 :: (Pragma) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)-happyIn111 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn111 #-}-happyOut111 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (Pragma)-happyOut111 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut111 #-}-happyIn112 :: (Pragma) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)-happyIn112 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn112 #-}-happyOut112 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (Pragma)-happyOut112 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut112 #-}-happyIn113 :: (Pragma) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)-happyIn113 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn113 #-}-happyOut113 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (Pragma)-happyOut113 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut113 #-}-happyIn114 :: (Pragma) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)-happyIn114 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn114 #-}-happyOut114 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (Pragma)-happyOut114 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut114 #-}-happyIn115 :: (Pragma) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)-happyIn115 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn115 #-}-happyOut115 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (Pragma)-happyOut115 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut115 #-}-happyIn116 :: (Pragma) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)-happyIn116 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn116 #-}-happyOut116 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (Pragma)-happyOut116 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut116 #-}-happyIn117 :: (Pragma) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)-happyIn117 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn117 #-}-happyOut117 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (Pragma)-happyOut117 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut117 #-}-happyIn118 :: (Pragma) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)-happyIn118 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn118 #-}-happyOut118 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (Pragma)-happyOut118 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut118 #-}-happyIn119 :: (Pragma) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)-happyIn119 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn119 #-}-happyOut119 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (Pragma)-happyOut119 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut119 #-}-happyIn120 :: (Pragma) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)-happyIn120 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn120 #-}-happyOut120 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (Pragma)-happyOut120 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut120 #-}-happyIn121 :: (Pragma) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)-happyIn121 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn121 #-}-happyOut121 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (Pragma)-happyOut121 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut121 #-}-happyIn122 :: ([TypeSignature]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)-happyIn122 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn122 #-}-happyOut122 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> ([TypeSignature])-happyOut122 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut122 #-}-happyIn123 :: ([TypeSignature]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)-happyIn123 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn123 #-}-happyOut123 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> ([TypeSignature])-happyOut123 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut123 #-}-happyIn124 :: ([TypeSignature]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)-happyIn124 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn124 #-}-happyOut124 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> ([TypeSignature])-happyOut124 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut124 #-}-happyIn125 :: ([TypeSignature]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)-happyIn125 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn125 #-}-happyOut125 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> ([TypeSignature])-happyOut125 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut125 #-}-happyIn126 :: ([Arg TypeSignature]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)-happyIn126 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn126 #-}-happyOut126 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> ([Arg TypeSignature])-happyOut126 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut126 #-}-happyIn127 :: ([Arg TypeSignature]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)-happyIn127 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn127 #-}-happyOut127 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> ([Arg TypeSignature])-happyOut127 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut127 #-}-happyIn128 :: ([Constructor]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)-happyIn128 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn128 #-}-happyOut128 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> ([Constructor])-happyOut128 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut128 #-}-happyIn129 :: ((Maybe Name, [Declaration])) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)-happyIn129 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn129 #-}-happyOut129 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> ((Maybe Name, [Declaration]))-happyOut129 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut129 #-}-happyIn130 :: ([Declaration]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)-happyIn130 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn130 #-}-happyOut130 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> ([Declaration])-happyOut130 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut130 #-}-happyIn131 :: ([Declaration]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)-happyIn131 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn131 #-}-happyOut131 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> ([Declaration])-happyOut131 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut131 #-}-happyIn132 :: ([Declaration]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)-happyIn132 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn132 #-}-happyOut132 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> ([Declaration])-happyOut132 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut132 #-}-happyInTok :: (Token) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)-happyInTok x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyInTok #-}-happyOutTok :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (Token)-happyOutTok x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOutTok #-}---happyActOffsets :: HappyAddr-happyActOffsets = HappyA# "\x00\x00\xd9\x05\x1f\x00\x00\x00\xb8\x02\x34\x05\x00\x00\x4d\x02\x4d\x02\x00\x00\x00\x00\x1f\x00\x00\x00\x58\x00\xc7\x03\xc7\x03\x59\x05\x3a\x05\x00\x00\x2a\x05\x00\x00\x00\x00\x00\x00\x00\x00\xfb\x00\x00\x00\x00\x00\xa8\x05\x81\x05\x35\x05\x00\x00\xff\x00\x2c\x05\x9a\x07\x00\x00\x00\x00\x66\x07\x2b\x05\x00\x00\x00\x00\x00\x00\x00\x00\xd0\x02\x73\x07\x00\x00\x00\x00\x3f\x07\xaa\x04\x90\x03\x77\x04\x00\x00\x00\x00\x00\x00\x24\x05\xe5\x00\x38\x05\x00\x00\x27\x05\xd4\x01\x25\x05\x00\x00\xe1\x00\x00\x00\x69\x01\x69\x01\x00\x00\x23\x05\x26\x05\x1c\x05\x00\x00\x00\x00\x00\x00\xa4\x01\x81\x05\x00\x00\x20\x05\x00\x00\x18\x07\x39\x01\x6c\x02\x20\x02\x00\x00\x89\x06\x50\x05\x58\x06\x00\x00\x4c\x07\x50\x04\x90\x03\x1d\x04\xb0\x06\xb0\x06\xb0\x06\x4e\x05\xf1\x06\x29\x05\x1f\x05\xf1\x06\x00\x00\xb0\x06\xb0\x06\xb0\x06\x11\x05\xf6\x03\x90\x03\x06\x05\x4a\x05\x03\x03\x00\x00\x60\x01\xb0\x06\xb0\x06\x00\x00\x00\x00\x00\x00\x00\x00\xc3\x03\x29\x05\xb0\x06\x4c\x07\x03\x05\x00\x00\x00\x00\xf1\x06\x35\x00\x25\x07\xc7\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x35\x00\xfe\x06\x36\x02\x5d\x03\x00\x00\x00\x00\x00\x00\x00\x00\x36\x05\x00\x00\x02\x05\x01\x05\xff\x04\x71\x03\xee\x04\xf1\x06\x31\x05\xf1\x06\xec\x04\xe7\x04\x00\x00\x00\x00\xed\x04\x00\x00\x00\x00\xb0\x06\xb0\x06\xb0\x06\xb0\x06\xd2\x01\x22\x05\xeb\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x59\x00\xdc\x04\xda\x04\x9f\x00\xc9\x04\xc9\x04\xc9\x04\xd7\x06\xd8\x04\xcc\x04\xcc\x04\xcc\x04\xd2\x04\xd2\x04\xd2\x04\xc4\x04\xc6\x04\xa7\x01\xc7\x0c\x29\x05\xbe\x04\xb8\x04\x00\x00\xbc\x04\xb0\x04\xb4\x04\xcf\xff\x00\x00\x00\x00\x00\x00\x00\x00\x29\x05\xa8\x04\x69\x01\xb1\x04\xa4\x04\x69\x01\x9c\x04\xca\x00\xac\x04\x00\x00\x73\x00\xe8\xff\xa7\x04\xa6\x04\xa5\x04\x00\x00\xb0\x06\xb0\x06\x00\x00\xb0\x06\xb0\x06\xca\x06\xa2\x04\xca\x06\x31\x06\xf8\x04\x00\x06\x00\x00\x00\x00\xa0\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd1\x04\x00\x00\x00\x00\xd1\x04\xd1\x04\x91\x04\x00\x00\x69\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x91\x00\xcf\xff\x64\x00\xcf\xff\xb0\x06\x00\x00\x00\x00\x00\x00\xb0\x06\xd1\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x75\x04\x86\x04\x00\x00\xd1\x04\x00\x00\x7e\x04\x7a\x04\x7c\x04\x74\x04\x74\x04\x74\x04\x74\x04\x74\x04\x74\x04\x74\x04\xcc\x00\xb5\x04\xa7\x01\xc5\x00\x00\x00\x00\x00\x00\x00\x6e\x00\x00\x00\x6e\x00\x6e\x00\x00\x00\xce\x04\xaa\x03\xaf\x06\xaf\x06\xaf\x06\x6d\x04\x00\x00\x6d\x04\x00\x00\xed\xff\x00\x00\x03\x03\x00\x00\x00\x00\xdf\x00\xd1\x04\xae\x04\xd1\x04\xd1\x04\x00\x00\x00\x00\x00\x00\x70\x04\x00\x00\x36\x02\x00\x00\xa1\x04\x14\x00\x14\x00\x00\x00\x69\x01\x00\x00\x00\x00\x00\x00\x36\x02\x00\x00\x6b\x04\x6f\x04\x00\x00\x5f\x04\x6e\x04\x5e\x04\x60\x04\x69\x04\x8d\x04\x00\x00\x00\x00\x00\x00\x00\x00\x6d\x02\x00\x00\x00\x00\x00\x00\xd1\x04\x00\x00\x00\x00\x59\x04\x4f\x04\x00\x00\x00\x00\xed\xff\x61\x04\x00\x00\x59\x00\x4d\x04\x4d\x04\x5b\x04\x00\x00\x59\x00\xaf\x06\x7f\x00\xac\x00\x9c\x00\x09\x00\xce\x04\x57\x04\x00\x00\x59\x00\x0e\x01\xc9\x01\xed\xff\xed\xff\x6e\x00\x00\x00\x00\x00\x00\x00\xeb\x00\x00\x00\x00\x00\x51\x04\x00\x00\x45\x04\xa7\x01\x6a\x04\xd1\x04\x39\x04\x00\x00\x20\x04\x20\x04\x20\x04\x1f\x04\x1a\x04\x38\x04\x00\x00\x32\x04\x16\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x14\x04\x00\x00\x00\x00\x12\x04\x13\x04\x11\x04\x0f\x04\x0c\x04\x00\x00\x00\x00\x00\x00\x00\x00\x0a\x04\x00\x00\x0a\x04\x00\x00\x0b\x04\x49\x01\x00\x00\x04\x04\x04\x04\x04\x04\x04\x04\x00\x00\xce\x04\xd1\x04\x00\x00\x02\x04\xd1\x04\x01\x04\xd1\x04\x01\x04\xd1\x04\x00\x04\xc7\x03\x06\x04\x00\x00\xf3\x03\xd1\x04\x00\x00\x00\x00\xed\xff\xd1\x04\x00\x00\x2f\x04\x00\x00\x00\x00\x00\x00\xe9\x03\xe9\x03\x27\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x14\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbe\x03\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x03\x3c\x01\x36\x02\x00\x00\x24\x04\x00\x00\x00\x00\x13\x00\x23\x04\x00\x00\x22\x04\x00\x00\x21\x02\x00\x00\x00\x00\xdd\x03\x49\x01\xd2\x03\x49\x01\xce\x04\xce\x04\xc2\x03\x00\x00\xcd\x03\x00\x00\x00\x00\x00\x00\xbc\x03\x00\x00\x00\x00\x00\x00\xb7\x03\x00\x00\x00\x00\x00\x00\xce\x04\xce\x04\xce\x04\xce\x04\x00\x00\x59\x00\x59\x00\xab\x03\xb5\x03\xa5\x03\x00\x00\xa5\x03\x00\x00\x00\x00\x2a\x03\x36\x02\x00\x00\x00\x00\x49\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x03\x00\x00\x00\x00\x00\x00\x00\x00\xac\x03\x00\x00\x59\x00\x00\x00\x00\x00\x00\x00"#--happyGotoOffsets :: HappyAddr-happyGotoOffsets = HappyA# "\xbf\x03\xc0\x0c\x1a\x00\xe5\x03\xd8\x03\x00\x00\x00\x00\x01\x03\xc2\x02\x00\x00\x00\x00\x2e\x00\x00\x00\x81\x02\x68\x02\x1c\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x98\x03\xa8\x0c\x00\x00\x00\x00\x8b\x03\x5b\x03\xf4\x00\x00\x00\x00\x00\x17\x05\xcb\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x05\x00\x00\x00\x00\x1d\x02\x7d\x08\x19\x08\x64\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc8\x03\xba\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc8\x05\x90\x0c\x00\x00\x00\x00\x00\x00\x70\x05\x00\x00\x0d\x01\x22\x00\x00\x00\x51\x0a\xb3\x08\xdb\x07\x00\x00\x40\x05\x4b\x08\xfa\x07\x32\x08\x3a\x0a\x23\x0a\x0c\x0a\x00\x00\xb8\x07\x78\x0c\x00\x00\x76\x06\x00\x00\xf5\x09\xde\x09\xc7\x09\x00\x00\x60\x0c\x68\x0a\xf3\x00\x00\x00\x42\x01\x00\x00\x00\x00\xb0\x09\x99\x09\x00\x00\x00\x00\x00\x00\x00\x00\x48\x0c\x30\x0c\x65\x03\x0f\x05\xb9\x03\x00\x00\x00\x00\x1e\x06\x44\x0a\xdc\x00\xae\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc6\x07\x8d\x00\x7b\x08\x68\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x92\x03\x00\x00\x00\x00\x00\x00\x00\x00\x18\x03\xaf\x03\xc6\x05\x00\x00\x6e\x05\x00\x00\x86\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb2\x04\x82\x09\x6b\x09\x54\x09\x00\x00\x5c\x03\x4d\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa9\x03\x1c\x03\xf4\x02\x43\x01\x57\x03\x4a\x03\x3f\x03\xda\x00\xc7\x02\x2f\x03\x24\x03\x22\x03\xac\x02\x9a\x02\x92\x02\xae\x02\x70\x02\xe8\x04\x00\x00\x18\x0c\x00\x00\x00\x00\x00\x00\x00\x00\xee\x00\x00\x00\x9d\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0c\x00\x00\x9b\x02\x00\x00\x00\x00\x94\x02\x00\x00\x00\x00\x00\x00\x00\x00\x8e\x02\x75\x02\x00\x00\x00\x00\x00\x00\x00\x00\x3d\x09\x26\x09\x00\x00\x0f\x09\xf8\x08\xff\x02\x00\x00\x69\x02\xe1\x08\x9c\x08\xca\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe8\x0b\x00\x00\x00\x00\xd0\x0b\xb8\x0b\x00\x00\x00\x00\x6e\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5b\x02\x00\x00\x59\x02\x58\x04\x00\x00\x00\x00\x00\x00\xfe\x03\xa0\x0b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8f\x00\x00\x00\x88\x0b\x00\x00\x00\x00\x00\x00\x00\x00\x44\x02\x3d\x02\x28\x02\x19\x02\x17\x02\xf6\x01\xf3\x01\x00\x00\xba\x01\xb2\x01\xaa\x02\x00\x00\x00\x00\x00\x00\xd9\x01\x00\x00\x95\x01\x6e\x01\x00\x00\x16\x00\x97\x04\x3d\x04\xe3\x03\xb0\x03\xf0\x01\x00\x00\x1c\x00\x00\x00\xfd\xff\x00\x00\xad\x01\x00\x00\x00\x00\xaf\x01\x70\x0b\xb3\x01\x58\x0b\x40\x0b\x00\x00\x00\x00\x00\x00\x2d\x03\x00\x00\xba\x07\x00\x00\xce\x00\xc0\x00\xf9\xff\x00\x00\xd1\x01\x00\x00\x00\x00\x00\x00\x9f\x06\x00\x00\x00\x00\x00\x00\x00\x00\xe0\x01\x00\x00\xd7\x01\x00\x00\x00\x00\x00\x00\xc6\x01\x00\x00\x00\x00\x00\x00\x6c\x00\x00\x00\x00\x00\x00\x00\x28\x0b\x00\x00\x00\x00\x48\x01\xb6\x01\x00\x00\x00\x00\x64\x03\x00\x00\x00\x00\x9e\x03\xb1\x01\x6d\x03\x00\x00\x00\x00\x87\x03\x5a\x02\x00\x00\x00\x00\x00\x00\x00\x00\x34\x04\x00\x00\x00\x00\x80\x03\x00\x00\xb1\x01\x2c\x03\x89\x02\x08\x01\x00\x00\x00\x00\x00\x00\xfd\x02\x00\x00\x00\x00\x00\x00\x00\x00\x76\x01\x47\x01\x3b\x01\x10\x0b\x00\x00\x00\x00\x7e\x01\x79\x01\x6d\x01\x00\x00\x67\x01\x00\x00\x00\x00\x00\x00\x5f\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x58\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05\x01\x00\x00\x14\x01\x00\x00\x00\x00\x4e\x01\x00\x00\x19\x03\xa6\x02\x98\x02\x66\x02\x00\x00\x28\x00\xf8\x0a\x00\x00\xd9\x00\xe0\x0a\x7d\x01\xc8\x0a\x73\x01\xb0\x0a\xcd\x01\x67\x00\x00\x00\x00\x00\x32\x00\x98\x0a\x00\x00\x00\x00\xbf\x00\x80\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2d\x01\x1a\x01\xc9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x71\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x85\x00\x75\x06\x00\x00\x00\x00\x00\x00\x00\x00\xfe\xff\x00\x00\x00\x00\x00\x00\x00\x00\xfc\xff\x00\x00\x00\x00\x00\x00\xb2\x00\x00\x00\xa8\x00\xf0\x03\xbd\x03\x4c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xeb\xff\x00\x00\x00\x00\x00\x00\x8a\x03\x41\x03\x35\x03\x04\x00\x00\x00\x1e\x02\xd3\x01\x31\x00\xb1\xff\x28\x01\x00\x00\x12\x01\x00\x00\x00\x00\x68\x0a\x1d\x06\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd7\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x95\x00\x00\x00\x00\x00\x00\x00"#--happyDefActions :: HappyAddr-happyDefActions = HappyA# "\xfa\xff\x00\x00\x00\x00\x00\x00\xfc\xff\x00\x00\xae\xff\x00\x00\x00\x00\xad\xff\xbb\xfe\x00\x00\xb6\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x8d\xff\x6e\xff\x00\x00\x7f\xff\x7e\xff\x7c\xff\x7b\xff\x00\x00\x5b\xff\x5a\xff\x75\xff\x00\x00\x00\x00\x53\xff\x51\xff\x00\x00\x00\x00\x6a\xff\x69\xff\x00\x00\x00\x00\x68\xff\x67\xff\x66\xff\x65\xff\x00\x00\x00\x00\x6b\xff\x6c\xff\x00\x00\x00\x00\x00\x00\x00\x00\xa5\xff\x8e\xff\x6d\xff\x00\x00\x8d\xff\x00\x00\x87\xff\x00\x00\x86\xff\x00\x00\x6f\xff\x8d\xff\x60\xff\x00\x00\x00\x00\xa2\xff\x00\x00\x00\x00\x00\x00\x61\xff\x8b\xff\x26\xff\x3a\xff\x00\x00\x77\xff\x00\x00\x45\xff\x42\xff\x3b\xff\x00\x00\x00\x00\x8a\xff\x00\x00\x00\x00\x00\x00\x5e\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2b\xff\x00\x00\x00\x00\x2c\xff\x27\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x59\xff\x00\x00\x00\x00\x52\xff\x00\x00\x00\x00\x00\x00\x54\xff\x82\xff\x7a\xff\x72\xff\x00\x00\x00\x00\x00\x00\x00\x00\x85\xff\x8d\xff\x8c\xff\x28\xff\x15\xff\xc4\xfe\x00\x00\xac\xff\xba\xfe\xb9\xfe\xfb\xff\xf9\xff\xf8\xff\xf7\xff\xf6\xff\xf5\xff\xf4\xff\xf3\xff\xf2\xff\xf1\xff\xf0\xff\xef\xff\xee\xff\xed\xff\xec\xff\xeb\xff\xea\xff\xe9\xff\xe8\xff\xe7\xff\xe6\xff\xe5\xff\xe4\xff\xe3\xff\xe2\xff\xe1\xff\xe0\xff\xdf\xff\xde\xff\xdd\xff\xdc\xff\xdb\xff\xda\xff\xd9\xff\xd2\xff\xd1\xff\xd8\xff\xd7\xff\xd6\xff\xd5\xff\xd4\xff\xd3\xff\xd0\xff\xcf\xff\xce\xff\xcd\xff\xcc\xff\xcb\xff\xca\xff\xc9\xff\xc8\xff\xc7\xff\xc6\xff\xc5\xff\xc4\xff\xc3\xff\xc2\xff\xc1\xff\xc0\xff\xbf\xff\xbe\xff\xbd\xff\xbc\xff\xbb\xff\xba\xff\xb9\xff\xb8\xff\xb7\xff\xb6\xff\xb5\xff\xb4\xff\xb3\xff\xb2\xff\xb1\xff\xb0\xff\xaf\xff\x15\xff\xc4\xfe\x15\xff\x00\x00\xbe\xfe\x1d\xff\x1b\xff\x19\xff\x16\xff\x17\xff\x00\x00\x00\x00\x00\x00\x15\xff\x00\x00\x28\xff\x00\x00\x28\xff\x00\x00\x85\xff\x5f\xff\x7d\xff\x00\x00\x80\xff\x86\xff\x75\xff\x00\x00\x00\x00\x00\x00\x8d\xff\x00\xff\xe1\xfe\x8d\xfe\xfb\xfe\xf9\xfe\xf8\xfe\xf7\xfe\xf6\xfe\xf5\xfe\xf4\xfe\xfa\xfe\xf3\xfe\xf2\xfe\xf1\xfe\xf0\xfe\xef\xfe\xe9\xfe\xee\xfe\xec\xfe\xed\xfe\xeb\xfe\xea\xfe\xb7\xfe\xb5\xfe\xb4\xfe\xb2\xfe\xb3\xfe\xb1\xfe\xb0\xfe\xaf\xfe\xac\xfe\xae\xfe\xad\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x58\xff\x57\xff\x59\xff\x87\xff\x00\x00\x2e\xff\x2f\xff\x81\xff\x2d\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x35\xff\x00\x00\x30\xff\x00\x00\x00\x00\x38\xff\x37\xff\x39\xff\x25\xff\x00\x00\x00\x00\x24\xff\x00\x00\x00\x00\x41\xff\x3d\xff\x42\xff\x00\x00\x00\x00\x00\x00\x46\xff\x79\xff\x3c\xff\x4a\xff\x62\xff\xa1\xff\x49\xff\x64\xff\x00\x00\x48\xff\x71\xff\x00\x00\x00\x00\x00\x00\x47\xff\x00\x00\x3f\xff\x3e\xff\x40\xff\x44\xff\x43\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa9\xff\x78\xff\xa8\xff\x00\x00\x00\x00\x50\xff\x4e\xff\x4f\xff\x4d\xff\x4b\xff\x4c\xff\x74\xff\x22\xff\x23\xff\x00\x00\x00\x00\x5d\xff\x00\x00\x76\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8d\xff\x00\xff\x00\x00\x00\x00\xd1\xfe\xd2\xfe\xd3\xfe\x00\x00\xa6\xff\x00\x00\x00\x00\xd4\xfe\x00\x00\x28\xff\x28\xff\x28\xff\x28\xff\x00\x00\xcf\xfe\x00\x00\xd0\xfe\x00\x00\x91\xfe\x00\x00\xaa\xff\xab\xff\xfe\xfe\x00\x00\x02\xff\x00\x00\x00\x00\x84\xff\xab\xfe\x2a\xff\x00\x00\x29\xff\x15\xff\x1a\xff\xa7\xff\x00\x00\x0a\xff\x18\xff\x00\x00\xc6\xfe\xc3\xfe\xbd\xfe\x15\xff\x0c\xff\x08\xff\x00\x00\x09\xff\x00\x00\x00\x00\x00\x00\x00\x00\x10\xff\x00\x00\xa7\xff\x1c\xff\x8f\xfe\xb8\xfe\x00\x00\xe6\xfe\xff\xfe\x06\xff\x00\x00\xe2\xfe\xe3\xfe\x00\x00\x00\x00\x8e\xfe\x9f\xff\x9d\xff\x00\x00\x9b\xfe\x00\x00\x00\x00\xa3\xff\x00\x00\x9e\xfe\x00\x00\x28\xff\x00\x00\x00\x00\x00\x00\x00\x00\x9b\xff\x00\x00\x98\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x88\xff\xd7\xfe\xd6\xfe\xd5\xfe\x00\x00\xcb\xfe\xc9\xfe\x00\x00\xc7\xfe\x04\xff\x73\xff\x02\xff\x00\x00\x00\x00\x83\xff\x85\xff\x85\xff\x85\xff\x00\x00\x85\xff\x00\x00\xa1\xfe\x00\x00\x00\x00\x55\xff\x56\xff\x5c\xff\x36\xff\x35\xff\x34\xff\x33\xff\x31\xff\x32\xff\x20\xff\x21\xff\x1e\xff\x1f\xff\x63\xff\x70\xff\x00\x00\xa2\xfe\xa3\xfe\x00\x00\x85\xff\x00\x00\x00\x00\x00\x00\xa4\xfe\xe7\xfe\x05\xff\x03\xff\x00\x00\xca\xfe\x00\x00\x89\xff\x00\x00\x00\x00\xa0\xff\x00\x00\x00\x00\x00\x00\x00\x00\x9a\xfe\x00\x00\x00\x00\x9c\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa0\xfe\x00\x00\x00\x00\xa4\xff\x9d\xfe\x00\x00\x00\x00\x9e\xff\x00\x00\xfd\xfe\x01\xff\x90\xfe\x00\x00\x00\x00\xa7\xff\x12\xff\x0e\xff\x13\xff\x0b\xff\x14\xff\x00\x00\xc5\xfe\x07\xff\x11\xff\x0f\xff\x0d\xff\x00\x00\xe5\xfe\x9c\xfe\xe8\xfe\x9f\xfe\x00\x00\xc4\xfe\x15\xff\xbc\xfe\xdc\xfe\x96\xfe\xde\xfe\x00\x00\x00\x00\xdd\xfe\xd9\xfe\xda\xfe\x00\x00\xe4\xfe\x99\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x99\xff\x97\xff\xce\xfe\xcd\xfe\x00\x00\xa5\xfe\xa6\xfe\xa8\xfe\x00\x00\xa9\xfe\xaa\xfe\xa7\xfe\x00\x00\xcc\xfe\x98\xff\x9a\xff\x93\xff\x95\xff\x8f\xff\x91\xff\x95\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x97\xfe\x00\x00\xc0\xfe\xc1\xfe\x00\x00\x15\xff\xfc\xfe\xbf\xfe\x00\x00\xe0\xfe\xdf\xfe\xdb\xfe\xd8\xfe\x92\xfe\x94\xfe\x00\x00\x92\xff\x90\xff\x96\xff\x94\xff\x00\x00\xc8\xfe\x00\x00\xc2\xfe\x93\xfe"#--happyCheck :: HappyAddr-happyCheck = HappyA# "\xff\xff\x05\x00\x09\x00\x05\x00\x35\x00\x09\x00\x09\x00\x09\x00\x0a\x00\x0c\x00\x0d\x00\x0f\x00\x03\x00\x09\x00\x0b\x00\x40\x00\x0c\x00\x42\x00\x0e\x00\x00\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x34\x00\x03\x00\x04\x00\x09\x00\x33\x00\x09\x00\x0c\x00\x0f\x00\x0e\x00\x09\x00\x0a\x00\x08\x00\x09\x00\x09\x00\x42\x00\x09\x00\x7b\x00\x45\x00\x0f\x00\x0f\x00\x10\x00\x09\x00\x04\x00\x11\x00\x0c\x00\x48\x00\x0e\x00\x3e\x00\x3f\x00\x40\x00\x09\x00\x09\x00\x0a\x00\x41\x00\x35\x00\x0a\x00\x0b\x00\x0c\x00\x46\x00\x0e\x00\x48\x00\x47\x00\x49\x00\x4b\x00\x5d\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\x3e\x00\x44\x00\x40\x00\x00\x00\x5e\x00\x48\x00\x48\x00\x61\x00\x62\x00\x63\x00\x4a\x00\x09\x00\x66\x00\x47\x00\x68\x00\x46\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x09\x00\x05\x00\x4a\x00\x75\x00\x77\x00\x09\x00\x0f\x00\x10\x00\x5e\x00\x47\x00\x7e\x00\x0f\x00\x62\x00\x48\x00\x64\x00\x65\x00\x60\x00\x67\x00\x03\x00\x69\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x5e\x00\x34\x00\x09\x00\x79\x00\x62\x00\x75\x00\x64\x00\x65\x00\x0f\x00\x67\x00\x09\x00\x69\x00\x09\x00\x35\x00\x05\x00\x06\x00\x0f\x00\x44\x00\x45\x00\x03\x00\x48\x00\x49\x00\x1d\x00\x1e\x00\x1f\x00\x37\x00\x42\x00\x34\x00\x09\x00\x5d\x00\x1d\x00\x1e\x00\x1f\x00\x41\x00\x0f\x00\x03\x00\x21\x00\x22\x00\x46\x00\x0b\x00\x48\x00\x36\x00\x48\x00\x4b\x00\x45\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x0b\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x35\x00\x60\x00\x09\x00\x09\x00\x5e\x00\x0c\x00\x0d\x00\x61\x00\x62\x00\x63\x00\x07\x00\x35\x00\x66\x00\x42\x00\x68\x00\x07\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x09\x00\x35\x00\x03\x00\x09\x00\x5f\x00\x09\x00\x0f\x00\x48\x00\x49\x00\x0f\x00\x7e\x00\x0f\x00\x5f\x00\x7c\x00\x0f\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x09\x00\x1e\x00\x1d\x00\x1e\x00\x1f\x00\x09\x00\x09\x00\x3e\x00\x35\x00\x40\x00\x35\x00\x3d\x00\x0f\x00\x3b\x00\x3c\x00\x3d\x00\x3b\x00\x49\x00\x3b\x00\x3c\x00\x3d\x00\x42\x00\x48\x00\x20\x00\x21\x00\x22\x00\x09\x00\x1e\x00\x20\x00\x21\x00\x22\x00\x09\x00\x36\x00\x41\x00\x11\x00\x12\x00\x36\x00\x3b\x00\x46\x00\x11\x00\x48\x00\x3b\x00\x36\x00\x4b\x00\x09\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x3d\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x32\x00\x33\x00\x48\x00\x39\x00\x5e\x00\x09\x00\x3c\x00\x61\x00\x62\x00\x63\x00\x5f\x00\x3d\x00\x66\x00\x3f\x00\x68\x00\x41\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x09\x00\x09\x00\x3f\x00\x12\x00\x41\x00\x09\x00\x0f\x00\x0f\x00\x10\x00\x7b\x00\x7e\x00\x0f\x00\x1b\x00\x1c\x00\x0b\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x5d\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x32\x00\x33\x00\x15\x00\x5a\x00\x33\x00\x37\x00\x5d\x00\x39\x00\x37\x00\x38\x00\x16\x00\x3d\x00\x09\x00\x3f\x00\x3d\x00\x41\x00\x3f\x00\x15\x00\x41\x00\x43\x00\x11\x00\x12\x00\x48\x00\x15\x00\x41\x00\x48\x00\x49\x00\x74\x00\x4b\x00\x46\x00\x40\x00\x48\x00\x42\x00\x7a\x00\x4b\x00\x15\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x15\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x74\x00\x3d\x00\x09\x00\x3f\x00\x5e\x00\x41\x00\x7a\x00\x61\x00\x62\x00\x63\x00\x11\x00\x12\x00\x66\x00\x40\x00\x68\x00\x42\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x09\x00\x09\x00\x42\x00\x12\x00\x09\x00\x09\x00\x0f\x00\x0f\x00\x10\x00\x09\x00\x7e\x00\x0f\x00\x1b\x00\x1c\x00\x7c\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x07\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x32\x00\x33\x00\x05\x00\x06\x00\x33\x00\x37\x00\x0b\x00\x39\x00\x37\x00\x38\x00\x09\x00\x3d\x00\x09\x00\x3f\x00\x3d\x00\x41\x00\x3f\x00\x74\x00\x41\x00\x09\x00\x11\x00\x12\x00\x48\x00\x7a\x00\x41\x00\x48\x00\x49\x00\x74\x00\x4b\x00\x46\x00\x45\x00\x48\x00\x43\x00\x7a\x00\x4b\x00\x09\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x44\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x35\x00\x3f\x00\x16\x00\x41\x00\x5e\x00\x16\x00\x3b\x00\x61\x00\x62\x00\x63\x00\x48\x00\x3e\x00\x66\x00\x40\x00\x68\x00\x42\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x00\x00\x01\x00\x05\x00\x06\x00\x09\x00\x09\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0f\x00\x10\x00\x16\x00\x11\x00\x16\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\x16\x00\x1e\x00\x0a\x00\x0b\x00\x0c\x00\x26\x00\x0e\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x7c\x00\x7d\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x33\x00\x34\x00\x31\x00\x16\x00\x33\x00\x08\x00\x09\x00\x37\x00\x37\x00\x38\x00\x16\x00\x3a\x00\x0f\x00\x3d\x00\x3d\x00\x3f\x00\x3f\x00\x41\x00\x41\x00\x09\x00\x0b\x00\x44\x00\x0b\x00\x46\x00\x48\x00\x48\x00\x49\x00\x11\x00\x4b\x00\x00\x00\x01\x00\x09\x00\x0a\x00\x09\x00\x09\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0f\x00\x10\x00\x0b\x00\x11\x00\x06\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x26\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x09\x00\x1e\x00\x32\x00\x33\x00\x34\x00\x26\x00\x0f\x00\x10\x00\x09\x00\x2a\x00\x06\x00\x0c\x00\x0d\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x33\x00\x34\x00\x31\x00\x0b\x00\x33\x00\x09\x00\x0a\x00\x37\x00\x37\x00\x38\x00\x0b\x00\x3a\x00\x0b\x00\x3d\x00\x3d\x00\x3f\x00\x3f\x00\x41\x00\x41\x00\x09\x00\x0a\x00\x44\x00\x42\x00\x46\x00\x48\x00\x48\x00\x49\x00\x09\x00\x4b\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\x01\x00\x5b\x00\x5c\x00\x5d\x00\x09\x00\x06\x00\x07\x00\x08\x00\x09\x00\x3d\x00\x7c\x00\x3f\x00\x11\x00\x41\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x7c\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x5e\x00\x1e\x00\x09\x00\x0a\x00\x62\x00\x26\x00\x64\x00\x65\x00\x7c\x00\x2a\x00\x08\x00\x01\x00\x08\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x33\x00\x34\x00\x31\x00\x09\x00\x33\x00\x08\x00\x0c\x00\x0d\x00\x37\x00\x38\x00\x12\x00\x3a\x00\x09\x00\x78\x00\x3d\x00\x0c\x00\x3f\x00\x0e\x00\x41\x00\x1b\x00\x1c\x00\x1d\x00\x09\x00\x46\x00\x09\x00\x48\x00\x49\x00\x0c\x00\x4b\x00\x0e\x00\x38\x00\x39\x00\x3a\x00\x09\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x5c\x00\x5d\x00\x31\x00\x32\x00\x33\x00\x01\x00\x5e\x00\x09\x00\x37\x00\x38\x00\x62\x00\x3a\x00\x64\x00\x65\x00\x3d\x00\x74\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x09\x00\x09\x00\x12\x00\x0c\x00\x0d\x00\x48\x00\x49\x00\x0f\x00\x4b\x00\x09\x00\x0a\x00\x1b\x00\x1c\x00\x1d\x00\x0a\x00\x0b\x00\x0c\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x05\x00\x06\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x05\x00\x06\x00\x31\x00\x32\x00\x33\x00\x01\x00\x76\x00\x09\x00\x37\x00\x38\x00\x0c\x00\x3a\x00\x0e\x00\x4c\x00\x3d\x00\x15\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x44\x00\x09\x00\x12\x00\x05\x00\x06\x00\x48\x00\x49\x00\x0f\x00\x4b\x00\x7c\x00\x7d\x00\x1b\x00\x1c\x00\x1d\x00\x05\x00\x06\x00\x25\x00\x26\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x09\x00\x09\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x00\x00\x01\x00\x11\x00\x32\x00\x33\x00\x01\x00\x0b\x00\x09\x00\x37\x00\x38\x00\x0c\x00\x3a\x00\x0e\x00\x3a\x00\x3d\x00\x15\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x0b\x00\x09\x00\x12\x00\x26\x00\x7c\x00\x48\x00\x49\x00\x02\x00\x4b\x00\x32\x00\x33\x00\x1b\x00\x1c\x00\x1d\x00\x37\x00\x32\x00\x33\x00\x34\x00\x3b\x00\x01\x00\x3d\x00\x43\x00\x3f\x00\x3e\x00\x41\x00\x09\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x48\x00\x48\x00\x11\x00\x32\x00\x33\x00\x01\x00\x43\x00\x09\x00\x37\x00\x38\x00\x0c\x00\x3a\x00\x0e\x00\x48\x00\x3d\x00\x43\x00\x3f\x00\x47\x00\x41\x00\x42\x00\x39\x00\x09\x00\x12\x00\x26\x00\x48\x00\x48\x00\x49\x00\x0f\x00\x4b\x00\x48\x00\x49\x00\x1b\x00\x1c\x00\x1d\x00\x42\x00\x32\x00\x33\x00\x34\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x01\x00\x42\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x03\x00\x03\x00\x03\x00\x32\x00\x33\x00\x2c\x00\x2d\x00\x2e\x00\x37\x00\x38\x00\x12\x00\x3a\x00\x48\x00\x03\x00\x3d\x00\x3e\x00\x3f\x00\x0f\x00\x41\x00\x1b\x00\x1c\x00\x1d\x00\x48\x00\x36\x00\x09\x00\x48\x00\x49\x00\x0c\x00\x4b\x00\x0e\x00\x43\x00\x43\x00\x43\x00\x09\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x48\x00\x42\x00\x11\x00\x32\x00\x33\x00\x01\x00\x48\x00\x47\x00\x37\x00\x38\x00\x47\x00\x3a\x00\x47\x00\x47\x00\x3d\x00\x47\x00\x3f\x00\x4a\x00\x41\x00\x42\x00\x4a\x00\x09\x00\x12\x00\x26\x00\x4a\x00\x48\x00\x49\x00\x0f\x00\x4b\x00\x4a\x00\x4a\x00\x1b\x00\x1c\x00\x1d\x00\x04\x00\x32\x00\x33\x00\x34\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x01\x00\x47\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x47\x00\x47\x00\x3c\x00\x32\x00\x33\x00\x2c\x00\x2d\x00\x2e\x00\x37\x00\x38\x00\x12\x00\x3a\x00\x3a\x00\x35\x00\x3d\x00\x3e\x00\x3f\x00\x35\x00\x41\x00\x1b\x00\x1c\x00\x1d\x00\x48\x00\x35\x00\x48\x00\x48\x00\x49\x00\x0d\x00\x4b\x00\x43\x00\x34\x00\x3e\x00\x34\x00\x09\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x48\x00\x48\x00\x11\x00\x32\x00\x33\x00\x01\x00\x3e\x00\x3e\x00\x37\x00\x38\x00\x0f\x00\x3a\x00\x04\x00\x43\x00\x3d\x00\x48\x00\x3f\x00\x42\x00\x41\x00\x42\x00\x05\x00\x09\x00\x12\x00\x26\x00\x4a\x00\x48\x00\x49\x00\x0f\x00\x4b\x00\x47\x00\x4a\x00\x1b\x00\x1c\x00\x1d\x00\x4a\x00\x32\x00\x33\x00\x34\x00\x1a\x00\x1b\x00\x48\x00\x1d\x00\x1e\x00\x1f\x00\x01\x00\x42\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x39\x00\x3e\x00\x39\x00\x32\x00\x33\x00\x39\x00\x39\x00\x39\x00\x37\x00\x38\x00\x12\x00\x3a\x00\x39\x00\x42\x00\x3d\x00\x3e\x00\x3f\x00\x42\x00\x41\x00\x1b\x00\x1c\x00\x1d\x00\x3e\x00\x34\x00\x09\x00\x48\x00\x49\x00\x36\x00\x4b\x00\x42\x00\x0f\x00\x48\x00\x01\x00\x42\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x32\x00\x33\x00\x3c\x00\x32\x00\x33\x00\x1d\x00\x1e\x00\x1f\x00\x37\x00\x38\x00\x12\x00\x3a\x00\x48\x00\x3f\x00\x3d\x00\x41\x00\x3f\x00\x48\x00\x41\x00\x1b\x00\x1c\x00\x43\x00\x48\x00\x4b\x00\x09\x00\x48\x00\x49\x00\x43\x00\x4b\x00\x43\x00\x0f\x00\x43\x00\x09\x00\x36\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x05\x00\x11\x00\x3c\x00\x01\x00\x33\x00\x1d\x00\x1e\x00\x1f\x00\x37\x00\x38\x00\x4a\x00\x3a\x00\x47\x00\x03\x00\x3d\x00\x48\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x12\x00\x3d\x00\x26\x00\x3d\x00\x3d\x00\x48\x00\x49\x00\x0c\x00\x4b\x00\x1b\x00\x1c\x00\x1d\x00\x30\x00\x31\x00\x09\x00\x33\x00\x34\x00\x02\x00\x4a\x00\x48\x00\x0f\x00\x02\x00\x01\x00\x41\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x39\x00\x39\x00\x3e\x00\x32\x00\x33\x00\x1d\x00\x1e\x00\x1f\x00\x37\x00\x38\x00\x12\x00\x3a\x00\x3e\x00\x42\x00\x3d\x00\x42\x00\x3f\x00\x42\x00\x41\x00\x1b\x00\x1c\x00\x35\x00\x39\x00\x43\x00\x4c\x00\x48\x00\x49\x00\x48\x00\x4b\x00\x3b\x00\x4c\x00\x09\x00\x1f\x00\x09\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x11\x00\x4c\x00\x11\x00\x01\x00\x33\x00\xff\xff\xff\xff\xff\xff\x37\x00\x38\x00\xff\xff\x3a\x00\xff\xff\xff\xff\x3d\x00\xff\xff\x3f\x00\x40\x00\x41\x00\x42\x00\x12\x00\x26\x00\xff\xff\x26\x00\xff\xff\x48\x00\x49\x00\x2a\x00\x4b\x00\x1b\x00\x1c\x00\x1d\x00\xff\xff\x32\x00\x33\x00\x34\x00\x33\x00\x34\x00\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\xff\xff\xff\xff\xff\xff\x32\x00\x33\x00\xff\xff\xff\xff\xff\xff\x37\x00\x38\x00\x12\x00\x3a\x00\xff\xff\xff\xff\x3d\x00\xff\xff\x3f\x00\xff\xff\x41\x00\x1b\x00\x1c\x00\xff\xff\xff\xff\xff\xff\xff\xff\x48\x00\x49\x00\xff\xff\x4b\x00\xff\xff\xff\xff\x09\x00\xff\xff\x09\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x11\x00\xff\xff\x11\x00\x01\x00\x33\x00\xff\xff\xff\xff\xff\xff\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\xff\xff\x3f\x00\xff\xff\x41\x00\xff\xff\x12\x00\x26\x00\xff\xff\x26\x00\xff\xff\x48\x00\x49\x00\x2a\x00\x4b\x00\x1b\x00\x1c\x00\x1d\x00\xff\xff\x32\x00\x33\x00\x34\x00\x33\x00\x34\x00\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\xff\xff\xff\xff\xff\xff\x32\x00\x33\x00\xff\xff\xff\xff\xff\xff\x37\x00\x38\x00\x12\x00\x3a\x00\xff\xff\xff\xff\x3d\x00\xff\xff\x3f\x00\xff\xff\x41\x00\x1b\x00\x1c\x00\xff\xff\xff\xff\xff\xff\xff\xff\x48\x00\x49\x00\xff\xff\x4b\x00\xff\xff\xff\xff\x09\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x11\x00\xff\xff\xff\xff\x01\x00\x33\x00\xff\xff\xff\xff\xff\xff\x37\x00\x38\x00\xff\xff\x3a\x00\xff\xff\xff\xff\x3d\x00\xff\xff\x3f\x00\xff\xff\x41\x00\x42\x00\x12\x00\x26\x00\xff\xff\xff\xff\xff\xff\x48\x00\x49\x00\xff\xff\x4b\x00\x1b\x00\x1c\x00\xff\xff\xff\xff\x32\x00\x33\x00\x34\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x01\x00\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\xff\xff\xff\xff\xff\xff\xff\xff\x33\x00\xff\xff\xff\xff\xff\xff\x37\x00\x38\x00\x12\x00\x3a\x00\xff\xff\xff\xff\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x1b\x00\x1c\x00\xff\xff\xff\xff\xff\xff\xff\xff\x48\x00\x49\x00\xff\xff\x4b\x00\xff\xff\xff\xff\x09\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x11\x00\xff\xff\xff\xff\x01\x00\x33\x00\xff\xff\xff\xff\xff\xff\x37\x00\x38\x00\xff\xff\x3a\x00\xff\xff\xff\xff\x3d\x00\xff\xff\x3f\x00\xff\xff\x41\x00\x42\x00\x12\x00\x26\x00\xff\xff\xff\xff\xff\xff\x48\x00\x49\x00\xff\xff\x4b\x00\x1b\x00\x1c\x00\xff\xff\x31\x00\xff\xff\x33\x00\x34\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x01\x00\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\xff\xff\xff\xff\xff\xff\xff\xff\x33\x00\xff\xff\xff\xff\xff\xff\x37\x00\x38\x00\x12\x00\x3a\x00\xff\xff\xff\xff\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x1b\x00\x1c\x00\xff\xff\xff\xff\xff\xff\xff\xff\x48\x00\x49\x00\xff\xff\x4b\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\xff\xff\xff\xff\x32\x00\x33\x00\x33\x00\xff\xff\xff\xff\x37\x00\x37\x00\x38\x00\x12\x00\x3a\x00\xff\xff\x3d\x00\x3d\x00\x3f\x00\x3f\x00\x41\x00\x41\x00\x1b\x00\x1c\x00\xff\xff\xff\xff\xff\xff\x48\x00\x48\x00\x49\x00\xff\xff\x4b\x00\x32\x00\x33\x00\xff\xff\xff\xff\xff\xff\x37\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\xff\xff\x3d\x00\xff\xff\x3f\x00\x33\x00\x41\x00\xff\xff\xff\xff\x37\x00\x38\x00\x12\x00\xff\xff\x48\x00\xff\xff\x3d\x00\xff\xff\x3f\x00\xff\xff\x41\x00\x1b\x00\x1c\x00\xff\xff\xff\xff\xff\xff\xff\xff\x48\x00\x49\x00\xff\xff\x4b\x00\x32\x00\x33\x00\xff\xff\xff\xff\xff\xff\x37\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\xff\xff\x3d\x00\xff\xff\x3f\x00\x33\x00\x41\x00\xff\xff\xff\xff\x37\x00\x38\x00\x12\x00\xff\xff\x48\x00\xff\xff\x3d\x00\xff\xff\x3f\x00\xff\xff\x41\x00\x1b\x00\x1c\x00\xff\xff\xff\xff\xff\xff\xff\xff\x48\x00\x49\x00\xff\xff\x4b\x00\x32\x00\x33\x00\xff\xff\xff\xff\xff\xff\x37\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\xff\xff\x3d\x00\xff\xff\x3f\x00\x33\x00\x41\x00\xff\xff\xff\xff\x37\x00\x38\x00\x12\x00\xff\xff\x48\x00\xff\xff\x3d\x00\xff\xff\x3f\x00\xff\xff\x41\x00\x1b\x00\x1c\x00\xff\xff\xff\xff\xff\xff\xff\xff\x48\x00\x49\x00\xff\xff\x4b\x00\x32\x00\x33\x00\xff\xff\xff\xff\xff\xff\x37\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\xff\xff\x3d\x00\xff\xff\x3f\x00\x33\x00\x41\x00\xff\xff\xff\xff\x37\x00\x38\x00\x12\x00\xff\xff\x48\x00\xff\xff\x3d\x00\xff\xff\x3f\x00\xff\xff\x41\x00\x1b\x00\x1c\x00\xff\xff\xff\xff\xff\xff\xff\xff\x48\x00\x49\x00\xff\xff\x4b\x00\x32\x00\x33\x00\xff\xff\xff\xff\xff\xff\x37\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\xff\xff\x3d\x00\xff\xff\x3f\x00\x33\x00\x41\x00\xff\xff\xff\xff\x37\x00\x38\x00\x12\x00\xff\xff\x48\x00\xff\xff\x3d\x00\xff\xff\x3f\x00\xff\xff\x41\x00\x1b\x00\x1c\x00\xff\xff\xff\xff\xff\xff\xff\xff\x48\x00\x49\x00\xff\xff\x4b\x00\xff\xff\xff\xff\x09\x00\xff\xff\xff\xff\xff\xff\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x11\x00\xff\xff\xff\xff\xff\xff\x33\x00\xff\xff\xff\xff\xff\xff\x37\x00\x38\x00\xff\xff\xff\xff\xff\xff\xff\xff\x3d\x00\xff\xff\x3f\x00\xff\xff\x41\x00\xff\xff\xff\xff\x26\x00\xff\xff\xff\xff\xff\xff\x48\x00\x49\x00\x09\x00\x4b\x00\xff\xff\xff\xff\xff\xff\x31\x00\x0f\x00\x33\x00\x34\x00\xff\xff\x13\x00\x14\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x27\x00\x09\x00\xff\xff\x0b\x00\xff\xff\x2c\x00\x2d\x00\x0f\x00\x2f\x00\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\xff\xff\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\xff\xff\xff\xff\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x09\x00\xff\xff\x0b\x00\xff\xff\xff\xff\xff\xff\x0f\x00\xff\xff\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\xff\xff\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\xff\xff\xff\xff\x09\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x0f\x00\xff\xff\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\xff\xff\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\xff\xff\xff\xff\x09\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x0f\x00\xff\xff\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\xff\xff\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\xff\xff\xff\xff\x09\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x0f\x00\xff\xff\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\xff\xff\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\xff\xff\xff\xff\x09\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x0f\x00\xff\xff\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\xff\xff\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\xff\xff\xff\xff\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x09\x00\xff\xff\x0b\x00\xff\xff\xff\xff\xff\xff\x0f\x00\xff\xff\xff\xff\xff\xff\x13\x00\x14\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x1a\x00\x1b\x00\xff\xff\x1d\x00\x1e\x00\x1f\x00\x09\x00\xff\xff\x0b\x00\xff\xff\xff\xff\xff\xff\x0f\x00\x27\x00\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1b\x00\xff\xff\x1d\x00\x1e\x00\x1f\x00\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x27\x00\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1b\x00\xff\xff\x1d\x00\x1e\x00\x1f\x00\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x27\x00\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1b\x00\xff\xff\x1d\x00\x1e\x00\x1f\x00\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x27\x00\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1b\x00\xff\xff\x1d\x00\x1e\x00\x1f\x00\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x27\x00\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1b\x00\xff\xff\x1d\x00\x1e\x00\x1f\x00\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x27\x00\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1b\x00\xff\xff\x1d\x00\x1e\x00\x1f\x00\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x27\x00\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1b\x00\xff\xff\x1d\x00\x1e\x00\x1f\x00\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x27\x00\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1b\x00\xff\xff\x1d\x00\x1e\x00\x1f\x00\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x27\x00\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1b\x00\xff\xff\x1d\x00\x1e\x00\x1f\x00\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x27\x00\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1b\x00\xff\xff\x1d\x00\x1e\x00\x1f\x00\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x27\x00\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1b\x00\xff\xff\x1d\x00\x1e\x00\x1f\x00\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x27\x00\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1b\x00\xff\xff\x1d\x00\x1e\x00\x1f\x00\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x27\x00\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1b\x00\xff\xff\x1d\x00\x1e\x00\x1f\x00\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x27\x00\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1b\x00\xff\xff\x1d\x00\x1e\x00\x1f\x00\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x27\x00\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1b\x00\xff\xff\x1d\x00\x1e\x00\x1f\x00\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x27\x00\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1b\x00\xff\xff\x1d\x00\x1e\x00\x1f\x00\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x27\x00\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1b\x00\xff\xff\x1d\x00\x1e\x00\x1f\x00\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x27\x00\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1b\x00\xff\xff\x1d\x00\x1e\x00\x1f\x00\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x27\x00\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1b\x00\xff\xff\x1d\x00\x1e\x00\x1f\x00\x09\x00\xff\xff\x0b\x00\xff\xff\xff\xff\xff\xff\x0f\x00\x27\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\xff\xff\x09\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\xff\xff\x09\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\xff\xff\x09\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\xff\xff\x09\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\xff\xff\x09\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\xff\xff\x09\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\xff\xff\x09\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\xff\xff\x09\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\xff\xff\x09\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\xff\xff\x09\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\xff\xff\x09\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\xff\xff\x09\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\xff\xff\x09\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\xff\xff\x09\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\xff\xff\x09\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\xff\xff\x09\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\xff\xff\x09\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\xff\xff\x09\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\xff\xff\x09\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\xff\xff\x09\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\xff\xff\x09\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\xff\xff\x09\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\xff\xff\x09\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\xff\xff\x09\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\xff\xff\x09\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\xff\xff\xff\xff\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\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"#--happyTable :: HappyAddr-happyTable = HappyA# "\x00\x00\x6d\x02\xad\x01\x73\x02\x53\x01\xeb\x00\xc5\x01\xcb\x01\xcc\x01\xc6\x01\xc7\x01\x12\x00\x1f\x02\xc5\x01\x8a\x02\x42\x00\xd4\x01\x43\x00\x83\x02\x97\x01\xec\x00\x15\x00\x16\x00\x17\x00\xe4\x00\x19\x00\x1a\x00\x1b\x00\x62\x01\x05\x00\x06\x00\xc5\x01\xcb\x01\xad\x01\xd4\x01\xb2\x01\xd5\x01\xcb\x01\xcc\x01\x0e\x00\x0f\x00\x79\x00\x63\x01\x46\x00\x7e\x02\x64\x01\x10\x00\x7a\x00\x47\x02\xc5\x01\x7f\x00\x3b\x01\xd4\x01\x33\x00\xd5\x01\xae\x01\xaf\x01\xb0\x01\x7f\x02\xcb\x01\xcc\x01\xed\x00\x20\x02\xd9\x00\xda\x00\xdb\x00\xee\x00\xdc\x00\xef\x00\xcd\x01\xc8\x01\xf0\x00\x87\x02\xf1\x00\xf2\x00\xf3\x00\xf4\x00\x6e\x02\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xae\x01\x98\x01\x3d\x02\x97\x01\xfd\x00\x33\x00\x33\x00\xfe\x00\xff\x00\x00\x01\xd6\x01\x7f\x00\x01\x01\xcd\x01\x02\x01\x11\x00\x03\x01\x04\x01\x05\x01\x06\x01\x07\x01\x08\x01\x09\x01\x0a\x01\x0b\x01\x0c\x01\x79\x00\x32\x02\x54\x02\xce\x01\xc9\x01\xeb\x00\x7a\x00\x47\x02\x07\x00\x45\x02\x6f\x02\x12\x00\x08\x00\xdd\x00\x09\x00\x0a\x00\x78\x02\x0b\x00\x25\x02\x0c\x00\xec\x00\x15\x00\x16\x00\x17\x00\xe4\x00\x19\x00\x1a\x00\x1b\x00\x07\x00\x62\x01\x11\x00\xd7\x01\x08\x00\xce\x01\x09\x00\x0a\x00\x12\x00\x0b\x00\x11\x00\x0c\x00\x21\x01\x53\x01\x8b\x02\x95\x01\x12\x00\x98\x01\x64\x01\x21\x02\x33\x00\x34\x00\x19\x00\x1a\x00\xcf\x00\x52\x00\xff\x01\x62\x01\x7f\x00\x66\x02\x19\x00\x1a\x00\xcf\x00\xed\x00\x90\x01\x23\x02\xf5\x01\x24\x01\xee\x00\x69\x02\xef\x00\x26\x02\x33\x00\xf0\x00\x64\x01\xf1\x00\xf2\x00\xf3\x00\xf4\x00\x6b\x02\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\x53\x01\x48\x02\xc5\x01\xad\x01\xfd\x00\xc6\x01\xc7\x01\xfe\x00\xff\x00\x00\x01\xb3\x01\x22\x02\x01\x01\x01\x02\x02\x01\xb3\x01\x03\x01\x04\x01\x05\x01\x06\x01\x07\x01\x08\x01\x09\x01\x0a\x01\x0b\x01\x0c\x01\xeb\x00\x24\x02\xc3\x01\x8b\x01\x76\x02\x11\x00\x12\x00\x33\x00\x34\x00\x12\x00\x0d\x01\x12\x00\xaa\x01\x79\x02\xc4\x01\xec\x00\x15\x00\x16\x00\x17\x00\xe4\x00\x19\x00\x1a\x00\x1b\x00\x21\x01\x66\x00\x19\x00\x1a\x00\xcf\x00\x21\x01\x11\x00\xae\x01\x86\xff\xb2\x01\xe9\x01\xe4\x01\x12\x00\x3e\x02\xb5\x01\xb6\x01\x78\x00\x43\x02\xb4\x01\xb5\x01\xb6\x01\x86\xff\xe5\x01\x6f\x01\x23\x01\x24\x01\x46\x00\x66\x00\x22\x01\x23\x01\x24\x01\x46\x00\x50\x01\xed\x00\xdc\x01\x12\x02\x54\x01\x78\x00\xee\x00\x3e\x01\xef\x00\x78\x00\x12\x02\xf0\x00\x3f\x02\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xe4\x01\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\x2b\x00\x6e\x00\xe5\x01\x76\x00\xfd\x00\x40\x02\x77\x00\xfe\x00\xff\x00\x00\x01\xd0\x00\x64\x00\x01\x01\x6f\x00\x02\x01\x70\x00\x03\x01\x04\x01\x05\x01\x06\x01\x07\x01\x08\x01\x09\x01\x0a\x01\x0b\x01\x0c\x01\xeb\x00\x79\x00\x19\x02\x22\x00\x1a\x02\x11\x00\x12\x00\x7a\x00\x7d\x00\x51\x02\x89\x02\x12\x00\x23\x00\x24\x00\x59\x02\xec\x00\x15\x00\x16\x00\x17\x00\xe4\x00\x19\x00\x1a\x00\x1b\x00\x5d\x02\x73\x00\x19\x00\x1a\x00\xe6\x01\x27\x00\x28\x00\x29\x00\x2a\x00\x27\xff\x27\xff\x61\x02\x5b\x02\x57\x00\x27\xff\x5c\x02\x27\xff\x2d\x00\x2e\x00\x03\x02\x27\xff\x46\x00\x27\xff\x68\x00\x27\xff\x78\x02\x06\x02\x75\x00\x0d\x02\xdc\x01\xdd\x01\x27\xff\x08\x02\xed\x00\x33\x00\x34\x00\x4b\x02\x35\x00\xee\x00\x42\x00\xef\x00\x43\x00\x7c\x02\xf0\x00\x09\x02\xf1\x00\xf2\x00\xf3\x00\xf4\x00\x0a\x02\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\x4b\x02\xe9\x00\x46\x00\xea\x00\xfd\x00\xeb\x00\x7d\x02\xfe\x00\xff\x00\x00\x01\xdc\x01\xde\x01\x01\x01\x42\x00\x02\x01\x43\x00\x03\x01\x04\x01\x05\x01\x06\x01\x07\x01\x08\x01\x09\x01\x0a\x01\x0b\x01\x0c\x01\xeb\x00\x79\x00\x0e\x02\x22\x00\x15\x02\x11\x00\x12\x00\x7a\x00\xce\x00\x2f\x02\x0d\x01\x12\x00\x23\x00\x24\x00\x30\x02\xec\x00\x15\x00\x16\x00\x17\x00\xe4\x00\x19\x00\x1a\x00\x1b\x00\x33\x02\xe5\x01\x19\x00\x1a\x00\xe6\x01\x27\x00\x28\x00\x29\x00\x2a\x00\x50\x00\x51\x00\x80\x02\x95\x01\x57\x00\x52\x00\xac\x01\x41\xff\x2d\x00\x2e\x00\x37\x02\x45\x01\x46\x00\x46\x01\x68\x00\x47\x01\x69\x00\x4b\x02\x75\x00\x39\x02\xdc\x01\xdf\x01\x33\x00\x4c\x02\xed\x00\x33\x00\x34\x00\x4b\x02\x35\x00\xc4\x01\xc1\x01\xef\x00\xbe\x01\x4f\x02\xf0\x00\xcf\x01\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xe7\x01\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\x9d\x01\x17\x02\xe9\x01\x18\x02\xfd\x00\xeb\x01\x78\x00\xfe\x00\xff\x00\x00\x01\x33\x00\x7c\xff\x01\x01\x7c\xff\x02\x01\x7c\xff\x03\x01\x04\x01\x05\x01\x06\x01\x07\x01\x08\x01\x09\x01\x0a\x01\x0b\x01\x0c\x01\x97\x01\x21\x00\x81\x02\x82\x02\x79\x00\x46\x00\x0f\x01\x10\x01\x11\x01\x0f\x00\x7a\x00\x7b\x00\xec\x01\x47\x00\xed\x01\x12\x01\x13\x01\x14\x01\x15\x01\x71\x02\x16\x01\x17\x01\x18\x01\x19\x01\x1a\x01\x1b\x01\x1c\x01\x23\x00\x24\x00\xee\x01\x1d\x01\xd9\x00\xda\x00\xdb\x00\x48\x00\xdc\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\xb9\x01\x49\x02\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x4d\x00\x4e\x00\x1e\x01\xef\x01\x1f\x01\x0e\x00\x0f\x00\x52\x00\x2d\x00\x2e\x00\xf0\x01\x2f\x00\x10\x00\xe9\x00\x68\x00\x3d\x01\x69\x00\x3e\x01\x75\x00\x46\x00\xfd\x01\x98\x01\xff\x01\x20\x01\x33\x00\x33\x00\x34\x00\x47\x00\x35\x00\x97\x01\x21\x00\xcb\x01\x55\x02\x79\x00\x46\x00\x0f\x01\x10\x01\x11\x01\x0f\x00\x7a\x00\x7c\x00\x01\x02\x47\x00\x60\x01\x12\x01\x13\x01\x14\x01\x15\x01\xdd\x00\x16\x01\x17\x01\x18\x01\x19\x01\x1a\x01\x1b\x01\x1c\x01\x23\x00\x24\x00\x79\x00\x1d\x01\x26\x02\xdf\x00\x62\x00\x41\x01\x7a\x00\x7d\x00\xc5\x01\x5a\x01\x64\x01\xc6\x01\x13\x02\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x43\x01\x62\x00\x1e\x01\x67\x01\x1f\x01\xcb\x01\x56\x02\x52\x00\x2d\x00\x2e\x00\x6a\x01\x2f\x00\x6d\x01\x5b\x00\x68\x00\x40\x01\x69\x00\x41\x01\x75\x00\xcb\x01\x57\x02\x98\x01\x7f\x01\x20\x01\x33\x00\x33\x00\x34\x00\x81\x01\x35\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\x21\x00\xe0\x01\xe1\x01\xe2\x01\x46\x00\x0f\x01\x10\x01\x11\x01\x0f\x00\x5b\x00\x82\x01\x5c\x00\x47\x00\x5d\x00\x12\x01\x13\x01\x14\x01\x15\x01\x83\x01\x16\x01\x17\x01\x18\x01\x19\x01\x1a\x01\x1b\x01\x1c\x01\x23\x00\x24\x00\x07\x00\x1d\x01\xcb\x01\x58\x02\x08\x00\x41\x01\x80\x00\x0a\x00\x84\x01\x5b\x01\x85\x01\x21\x00\x87\x01\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x43\x01\x62\x00\x1e\x01\xc5\x01\x1f\x01\x88\x01\xc6\x01\x14\x02\x2d\x00\x2e\x00\x22\x00\x2f\x00\xc5\x01\x89\x01\x68\x00\xd4\x01\x69\x00\x84\x02\x75\x00\x23\x00\x24\x00\x25\x00\x8c\x01\x20\x01\xc5\x01\x33\x00\x34\x00\xd4\x01\x35\x00\x85\x02\xa3\x01\xd6\x00\xd7\x00\x8d\x01\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x10\x02\xe2\x01\x7c\x02\x2b\x00\x2c\x00\x21\x00\x07\x00\x8e\x01\x2d\x00\x2e\x00\x08\x00\x2f\x00\x81\x00\x0a\x00\x30\x00\x90\x01\x31\x00\x42\x00\x32\x00\x43\x00\xc5\x01\x11\x00\x22\x00\xc6\x01\x2e\x02\x33\x00\x34\x00\x12\x00\x35\x00\xcb\x01\x2a\x02\x23\x00\x24\x00\x25\x00\xd9\x00\xda\x00\xdb\x00\xe3\x00\x16\x00\x17\x00\xe4\x00\x19\x00\x1a\x00\x1b\x00\x1a\x02\x1b\x02\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x27\x02\x28\x02\xa9\x01\x2b\x00\x2c\x00\x21\x00\x92\x01\xc5\x01\x2d\x00\x2e\x00\xd4\x01\x2f\x00\x86\x02\x98\x01\x30\x00\x9d\x01\x31\x00\x42\x00\x32\x00\x43\x00\x9a\x01\x11\x00\x22\x00\x2b\x02\x2c\x02\x33\x00\x34\x00\x12\x00\x35\x00\xb9\x01\xba\x01\x23\x00\x24\x00\x25\x00\x94\x01\x95\x01\x6c\x00\x1f\x00\x72\x00\x17\x00\x73\x00\x19\x00\x1a\x00\x1b\x00\xa2\x01\x46\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x35\x00\x04\x00\x47\x00\x2b\x00\x2c\x00\x21\x00\x4d\x01\xc5\x01\x2d\x00\x2e\x00\xd4\x01\x2f\x00\x67\x02\xa7\x01\x30\x00\xe0\x00\x31\x00\x42\x00\x32\x00\x43\x00\x4e\x01\x5d\x00\x22\x00\xdd\x00\x6a\x00\x33\x00\x34\x00\x82\x00\x35\x00\x50\x00\x51\x00\x23\x00\x24\x00\x25\x00\x52\x00\xd0\x01\xdf\x00\x62\x00\x78\x00\x04\x00\x64\x00\x4e\x02\x65\x00\x89\x02\x66\x00\x46\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x33\x00\x33\x00\x47\x00\x2b\x00\x2c\x00\x21\x00\x53\x02\xc5\x01\x2d\x00\x2e\x00\xd4\x01\x2f\x00\x68\x02\xe5\x01\x30\x00\x6c\x00\x31\x00\x65\x02\x32\x00\x3d\x00\x66\x02\x11\x00\x22\x00\xdd\x00\xe5\x01\x33\x00\x34\x00\x12\x00\x35\x00\x33\x00\x34\x00\x23\x00\x24\x00\x25\x00\x6b\x02\xd1\x01\xdf\x00\x62\x00\xf8\x01\x17\x00\x34\x01\x19\x00\x1a\x00\x1b\x00\x21\x00\x6d\x02\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x72\x02\x73\x02\x75\x02\x2b\x00\x2c\x00\xf9\x01\xfa\x01\xfb\x01\x2d\x00\x2e\x00\x22\x00\x2f\x00\x33\x00\x42\x02\x30\x00\x46\x00\x31\x00\xb8\x01\x32\x00\x23\x00\x24\x00\x25\x00\x33\x00\x47\x02\xc5\x01\x33\x00\x34\x00\xd4\x01\x35\x00\x1d\x02\xbc\x01\x4e\x02\x53\x02\x46\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x33\x00\x5b\x02\x47\x00\x2b\x00\x2c\x00\x21\x00\xe5\x01\x5f\x02\x2d\x00\x2e\x00\x60\x02\x2f\x00\x61\x02\x63\x02\x30\x00\x64\x02\x31\x00\xe2\x00\x32\x00\x3d\x00\xeb\x01\x11\x00\x22\x00\xdd\x00\xe2\x00\x33\x00\x34\x00\x12\x00\x35\x00\x08\x02\xe2\x00\x23\x00\x24\x00\x25\x00\xc0\x01\xd2\x01\xdf\x00\x62\x00\xf8\x01\x17\x00\x34\x01\x19\x00\x1a\x00\x1b\x00\x21\x00\x05\x02\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x06\x02\x0c\x02\x81\x01\x2b\x00\x2c\x00\xf9\x01\xfa\x01\xfc\x01\x2d\x00\x2e\x00\x22\x00\x2f\x00\x10\x02\x1d\x02\x30\x00\x46\x00\x31\x00\x2a\x02\x32\x00\x23\x00\x24\x00\x25\x00\x33\x00\x2e\x02\x33\x00\x33\x00\x34\x00\x35\x02\x35\x00\x6c\x00\x36\x02\x37\x02\x3c\x02\x46\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x33\x00\x33\x00\x47\x00\x2b\x00\x2c\x00\x21\x00\x39\x02\x3b\x02\x2d\x00\x2e\x00\xb8\x01\x2f\x00\xc0\x01\xbc\x01\x30\x00\x33\x00\x31\x00\xf7\x01\x32\x00\x3d\x00\x9c\x01\x11\x00\x22\x00\xdd\x00\xeb\x01\x33\x00\x34\x00\x12\x00\x35\x00\xf2\x01\xf3\x01\x23\x00\x24\x00\x25\x00\xf4\x01\xd3\x01\xdf\x00\x62\x00\x72\x00\x17\x00\x33\x00\x19\x00\x1a\x00\xe7\x00\x21\x00\x03\x02\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x43\xff\x67\x01\x44\xff\x2b\x00\x2c\x00\x40\xff\x3e\xff\x3f\xff\x2d\x00\x2e\x00\x22\x00\x2f\x00\x66\x01\x69\x01\x30\x00\x46\x00\x31\x00\x6c\x01\x32\x00\x23\x00\x24\x00\x25\x00\x6a\x01\x71\x01\x7e\x01\x33\x00\x34\x00\x73\x01\x35\x00\x6f\x01\x12\x00\x33\x00\x21\x00\x72\x01\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\xd9\x01\xda\x01\x81\x01\x2b\x00\x2c\x00\x19\x00\x1a\x00\x55\x00\x2d\x00\x2e\x00\x22\x00\x2f\x00\x33\x00\xdb\x01\x30\x00\xdc\x01\x31\x00\x33\x00\x32\x00\x23\x00\x24\x00\x6c\x00\x33\x00\x87\x01\x11\x00\x33\x00\x34\x00\x8b\x01\x35\x00\x92\x01\x12\x00\x94\x01\x46\x00\x9a\x01\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x9c\x01\x47\x00\x77\x00\x21\x00\x57\x00\x19\x00\x1a\x00\xe2\x00\x2d\x00\x2e\x00\xe2\x00\x2f\x00\x9f\x01\xa1\x01\x68\x00\x33\x00\x69\x00\x42\x00\x75\x00\x43\x00\x22\x00\xa5\x01\x5e\x00\xa6\x01\xa7\x01\x33\x00\x34\x00\xdb\x00\x35\x00\x23\x00\x24\x00\x25\x00\x5f\x00\x60\x00\x11\x00\x61\x00\x62\x00\x21\x01\xe2\x00\x33\x00\x12\x00\x2d\x01\x21\x00\x26\x01\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2a\x01\x48\x01\x4b\x01\x2b\x00\x2c\x00\x19\x00\x1a\x00\x55\x00\x2d\x00\x2e\x00\x22\x00\x2f\x00\x4c\x01\x4d\x01\x30\x00\x51\x01\x31\x00\x52\x01\x32\x00\x23\x00\x24\x00\x53\x01\x71\x00\x6c\x00\xff\xff\x33\x00\x34\x00\x33\x00\x35\x00\x78\x00\xff\xff\x46\x00\x79\x00\x46\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x47\x00\xff\xff\x47\x00\x21\x00\x57\x00\x00\x00\x00\x00\x00\x00\x2d\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x00\x00\x68\x00\x00\x00\x69\x00\x42\x00\x75\x00\x43\x00\x22\x00\xdd\x00\x00\x00\x41\x01\x00\x00\x33\x00\x34\x00\x42\x01\x35\x00\x23\x00\x24\x00\x25\x00\x00\x00\x9f\x01\xdf\x00\x62\x00\x43\x01\x62\x00\x00\x00\x00\x00\x00\x00\x00\x00\x21\x00\x00\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x00\x00\x00\x00\x00\x00\x2b\x00\x2c\x00\x00\x00\x00\x00\x00\x00\x2d\x00\x2e\x00\x22\x00\x2f\x00\x00\x00\x00\x00\x30\x00\x00\x00\x31\x00\x00\x00\x32\x00\x23\x00\x24\x00\x00\x00\x00\x00\x00\x00\x00\x00\x33\x00\x34\x00\x00\x00\x35\x00\x00\x00\x00\x00\x46\x00\x00\x00\x46\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x47\x00\x00\x00\x47\x00\x21\x00\x57\x00\x00\x00\x00\x00\x00\x00\x2d\x00\x2e\x00\x73\xff\x2f\x00\x00\x00\x73\xff\x68\x00\x00\x00\x69\x00\x00\x00\x75\x00\x00\x00\x22\x00\xdd\x00\x00\x00\x41\x01\x00\x00\x33\x00\x34\x00\x49\x01\x35\x00\x23\x00\x24\x00\x25\x00\x00\x00\xa1\x01\xdf\x00\x62\x00\x43\x01\x62\x00\x00\x00\x00\x00\x00\x00\x00\x00\x21\x00\x00\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x00\x00\x00\x00\x00\x00\x2b\x00\x2c\x00\x00\x00\x00\x00\x00\x00\x2d\x00\x2e\x00\x22\x00\x2f\x00\x00\x00\x00\x00\x30\x00\x00\x00\x31\x00\x00\x00\x32\x00\x23\x00\x24\x00\x00\x00\x00\x00\x00\x00\x00\x00\x33\x00\x34\x00\x00\x00\x35\x00\x00\x00\x00\x00\x46\x00\x00\x00\x00\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x47\x00\x00\x00\x00\x00\x21\x00\x57\x00\x00\x00\x00\x00\x00\x00\x2d\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x00\x00\x68\x00\x00\x00\x69\x00\x00\x00\x75\x00\x58\x01\x22\x00\xdd\x00\x00\x00\x00\x00\x00\x00\x33\x00\x34\x00\x00\x00\x35\x00\x23\x00\x24\x00\x00\x00\x00\x00\xde\x00\xdf\x00\x62\x00\x7a\x02\xd4\x00\xd5\x00\xd6\x00\xd7\x00\x00\x00\x21\x00\x00\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x57\x00\x00\x00\x00\x00\x00\x00\x2d\x00\x2e\x00\x22\x00\x2f\x00\x00\x00\x00\x00\x68\x00\x5a\x01\x69\x00\x00\x00\x75\x00\x23\x00\x24\x00\x00\x00\x00\x00\x00\x00\x00\x00\x33\x00\x34\x00\x00\x00\x35\x00\x00\x00\x00\x00\x46\x00\x00\x00\x00\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x47\x00\x00\x00\x00\x00\x21\x00\x57\x00\x00\x00\x00\x00\x00\x00\x2d\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x00\x00\x68\x00\x00\x00\x69\x00\x00\x00\x75\x00\x39\x01\x22\x00\x5e\x00\x00\x00\x00\x00\x00\x00\x33\x00\x34\x00\x00\x00\x35\x00\x23\x00\x24\x00\x00\x00\x28\x01\x00\x00\x61\x00\x62\x00\x75\x02\xd4\x00\xd5\x00\xd6\x00\xd7\x00\x00\x00\x21\x00\x00\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x57\x00\x00\x00\x00\x00\x00\x00\x2d\x00\x2e\x00\x22\x00\x2f\x00\x00\x00\x00\x00\x68\x00\x3b\x01\x69\x00\x00\x00\x75\x00\x23\x00\x24\x00\x00\x00\x00\x00\x00\x00\x00\x00\x33\x00\x34\x00\x00\x00\x35\x00\x3c\x02\xd4\x00\xd5\x00\xd6\x00\xd7\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x00\x00\x00\x00\x50\x00\x51\x00\x57\x00\x00\x00\x00\x00\x52\x00\x2d\x00\x2e\x00\x22\x00\x2f\x00\x00\x00\x64\x00\x68\x00\x65\x00\x69\x00\x66\x00\x75\x00\x23\x00\x24\x00\x00\x00\x00\x00\x00\x00\x33\x00\x33\x00\x34\x00\x00\x00\x35\x00\x50\x00\x51\x00\x00\x00\x00\x00\x00\x00\x52\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x00\x00\x45\x01\x00\x00\x46\x01\x57\x00\x47\x01\x00\x00\x00\x00\x2d\x00\x2e\x00\x22\x00\x00\x00\x33\x00\x00\x00\x68\x00\x00\x00\x69\x00\x00\x00\x6a\x00\x23\x00\x24\x00\x00\x00\x00\x00\x00\x00\x00\x00\x33\x00\x34\x00\x00\x00\x35\x00\x50\x00\x51\x00\x00\x00\x00\x00\x00\x00\x52\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x00\x00\x64\x00\x00\x00\x65\x00\x57\x00\x66\x00\x00\x00\x00\x00\x2d\x00\x2e\x00\x22\x00\x00\x00\x33\x00\x00\x00\x68\x00\x00\x00\x69\x00\x00\x00\x75\x00\x23\x00\x24\x00\x00\x00\x00\x00\x00\x00\x00\x00\x33\x00\x34\x00\x00\x00\x35\x00\x50\x00\x51\x00\x00\x00\x00\x00\x00\x00\x52\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x00\x00\x45\x01\x00\x00\x46\x01\x57\x00\x47\x01\x00\x00\x00\x00\x2d\x00\x2e\x00\x22\x00\x00\x00\x33\x00\x00\x00\x68\x00\x00\x00\xd2\x00\x00\x00\x75\x00\x23\x00\x24\x00\x00\x00\x00\x00\x00\x00\x00\x00\x33\x00\x34\x00\x00\x00\x35\x00\x50\x00\x51\x00\x00\x00\x00\x00\x00\x00\x52\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x00\x00\x53\x00\x00\x00\x54\x00\x57\x00\x55\x00\x00\x00\x00\x00\x2d\x00\x2e\x00\x22\x00\x00\x00\x33\x00\x00\x00\x68\x00\x00\x00\x69\x00\x00\x00\x75\x00\x23\x00\x24\x00\x00\x00\x00\x00\x00\x00\x00\x00\x33\x00\x34\x00\x00\x00\x35\x00\x50\x00\x51\x00\x00\x00\x00\x00\x00\x00\x52\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x00\x00\x64\x00\x00\x00\x65\x00\x57\x00\x66\x00\x00\x00\x00\x00\x2d\x00\x2e\x00\x22\x00\x00\x00\x33\x00\x00\x00\x58\x00\x00\x00\x59\x00\x00\x00\x5a\x00\x23\x00\x24\x00\x00\x00\x00\x00\x00\x00\x00\x00\x33\x00\x34\x00\x00\x00\x35\x00\x00\x00\x00\x00\x46\x00\x00\x00\x00\x00\x00\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x47\x00\x00\x00\x00\x00\x00\x00\x57\x00\x00\x00\x00\x00\x00\x00\x2d\x00\x2e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x68\x00\x00\x00\x69\x00\x00\x00\x6a\x00\x00\x00\x00\x00\x5e\x00\x00\x00\x00\x00\x00\x00\x33\x00\x34\x00\x11\x00\x35\x00\x00\x00\x00\x00\x00\x00\x2b\x01\x12\x00\x61\x00\x62\x00\x00\x00\x37\x00\x26\x01\xb8\x01\xd4\x00\xd5\x00\xd6\x00\xd7\x00\x33\x01\x17\x00\x34\x01\x19\x00\x1a\x00\x1b\x00\xab\x01\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\x00\x00\x3b\x00\x3d\x00\x00\x00\x3e\x00\x00\x00\x35\x01\x36\x01\x12\x00\x37\x01\x00\x00\x00\x00\x37\x00\x38\x00\x00\x00\x00\x00\x3f\x00\x14\x00\x15\x00\x3a\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x00\x00\x00\x00\x00\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x31\x01\x3d\x00\x00\x00\x3e\x00\x00\x00\x00\x00\x00\x00\x12\x00\x00\x00\x00\x00\x00\x00\x37\x00\x38\x00\x00\x00\x00\x00\x3f\x00\x14\x00\x15\x00\x3a\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x00\x00\x00\x00\x36\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x40\x00\x12\x00\x00\x00\x00\x00\x00\x00\x37\x00\x38\x00\x00\x00\x00\x00\x39\x00\x14\x00\x15\x00\x3a\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x00\x00\x00\x00\x11\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x30\x01\x12\x00\x00\x00\x00\x00\x00\x00\x37\x00\x38\x00\x00\x00\x00\x00\x43\x00\x14\x00\x15\x00\x3a\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x00\x00\x00\x00\x36\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x32\x01\x12\x00\x00\x00\x00\x00\x00\x00\x37\x00\x38\x00\x00\x00\x00\x00\x39\x00\x14\x00\x15\x00\x3a\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x00\x00\x00\x00\x11\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x3b\x00\x12\x00\x00\x00\x00\x00\x00\x00\x37\x00\x38\x00\x00\x00\x00\x00\x43\x00\x14\x00\x15\x00\x3a\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x00\x00\x00\x00\x00\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x44\x00\x11\x00\x00\x00\x58\x01\x00\x00\x00\x00\x00\x00\x12\x00\x00\x00\x00\x00\x00\x00\x27\x01\x38\x00\xa9\x01\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xe6\x00\x17\x00\x00\x00\x19\x00\x1a\x00\xe7\x00\x11\x00\x00\x00\x39\x01\x00\x00\x00\x00\x00\x00\x12\x00\x40\x00\x00\x00\x00\x00\x27\x01\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe6\x00\x17\x00\x00\x00\x19\x00\x1a\x00\xe7\x00\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12\x00\x40\x00\x00\x00\x00\x00\x37\x00\x26\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe6\x00\x17\x00\x00\x00\x19\x00\x1a\x00\xe7\x00\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12\x00\x3b\x00\x00\x00\x00\x00\x37\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe6\x00\x17\x00\x00\x00\x19\x00\x1a\x00\xe7\x00\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12\x00\x44\x00\x00\x00\x00\x00\x5c\x01\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe6\x00\x17\x00\x00\x00\x19\x00\x1a\x00\xe7\x00\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12\x00\x2d\x01\x00\x00\x00\x00\x5d\x01\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe6\x00\x17\x00\x00\x00\x19\x00\x1a\x00\xe7\x00\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12\x00\x2e\x01\x00\x00\x00\x00\x5e\x01\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe6\x00\x17\x00\x00\x00\x19\x00\x1a\x00\xe7\x00\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12\x00\x30\x01\x00\x00\x00\x00\x5f\x01\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe6\x00\x17\x00\x00\x00\x19\x00\x1a\x00\xe7\x00\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12\x00\x31\x01\x00\x00\x00\x00\x37\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe6\x00\x17\x00\x00\x00\x19\x00\x1a\x00\xe7\x00\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12\x00\x30\x01\x00\x00\x00\x00\x37\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe6\x00\x17\x00\x00\x00\x19\x00\x1a\x00\xe7\x00\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12\x00\x31\x01\x00\x00\x00\x00\x37\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe6\x00\x17\x00\x00\x00\x19\x00\x1a\x00\xe7\x00\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12\x00\x32\x01\x00\x00\x00\x00\x37\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe6\x00\x17\x00\x00\x00\x19\x00\x1a\x00\xe7\x00\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12\x00\x3b\x00\x00\x00\x00\x00\x37\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe6\x00\x17\x00\x00\x00\x19\x00\x1a\x00\xe7\x00\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12\x00\x40\x00\x00\x00\x00\x00\x37\x00\x26\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe6\x00\x17\x00\x00\x00\x19\x00\x1a\x00\xe7\x00\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12\x00\x3b\x00\x00\x00\x00\x00\x27\x01\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe6\x00\x17\x00\x00\x00\x19\x00\x1a\x00\xe7\x00\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12\x00\x40\x00\x00\x00\x00\x00\x37\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe6\x00\x17\x00\x00\x00\x19\x00\x1a\x00\xe7\x00\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12\x00\x44\x00\x00\x00\x00\x00\x37\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe6\x00\x17\x00\x00\x00\x19\x00\x1a\x00\xe7\x00\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12\x00\x2d\x01\x00\x00\x00\x00\x37\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe6\x00\x17\x00\x00\x00\x19\x00\x1a\x00\xe7\x00\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12\x00\x2e\x01\x00\x00\x00\x00\x37\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe6\x00\x17\x00\x00\x00\x19\x00\x1a\x00\xe7\x00\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12\x00\x2f\x01\x00\x00\x00\x00\x37\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe6\x00\x17\x00\x00\x00\x19\x00\x1a\x00\xe7\x00\x3d\x00\x00\x00\x3e\x00\x00\x00\x00\x00\x00\x00\x12\x00\x44\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\x3f\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x00\x00\x11\x00\x00\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x42\x02\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x00\x00\x11\x00\x00\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x44\x02\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x00\x00\x11\x00\x00\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4a\x02\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x00\x00\x11\x00\x00\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4e\x02\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x00\x00\x11\x00\x00\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x50\x02\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x00\x00\x11\x00\x00\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x53\x02\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x00\x00\x11\x00\x00\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0c\x02\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x00\x00\x11\x00\x00\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x31\x02\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x00\x00\x11\x00\x00\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbc\x01\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x00\x00\x11\x00\x00\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbd\x01\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x00\x00\x11\x00\x00\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc0\x01\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x00\x00\x11\x00\x00\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf4\x01\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x00\x00\x11\x00\x00\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf7\x01\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x00\x00\x11\x00\x00\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x54\x01\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x00\x00\x11\x00\x00\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x55\x01\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x00\x00\x11\x00\x00\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x56\x01\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x00\x00\x11\x00\x00\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6c\x01\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x00\x00\x11\x00\x00\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x73\x01\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x00\x00\x11\x00\x00\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe5\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x00\x00\x36\x00\x00\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x39\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x00\x00\x11\x00\x00\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x43\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x00\x00\x11\x00\x00\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2a\x01\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x00\x00\x11\x00\x00\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x48\x01\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x00\x00\x11\x00\x00\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x71\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x00\x00\x11\x00\x00\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x00\x00\x00\x00\x00\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x75\x01\x76\x01\x77\x01\x78\x01\x79\x01\x7a\x01\x7b\x01\x7c\x01\x7d\x01\x7e\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"#--happyReduceArr = Happy_Data_Array.array (3, 370) [-	(3 , happyReduce_3),-	(4 , happyReduce_4),-	(5 , happyReduce_5),-	(6 , happyReduce_6),-	(7 , happyReduce_7),-	(8 , happyReduce_8),-	(9 , happyReduce_9),-	(10 , happyReduce_10),-	(11 , happyReduce_11),-	(12 , happyReduce_12),-	(13 , happyReduce_13),-	(14 , happyReduce_14),-	(15 , happyReduce_15),-	(16 , happyReduce_16),-	(17 , happyReduce_17),-	(18 , happyReduce_18),-	(19 , happyReduce_19),-	(20 , happyReduce_20),-	(21 , happyReduce_21),-	(22 , happyReduce_22),-	(23 , happyReduce_23),-	(24 , happyReduce_24),-	(25 , happyReduce_25),-	(26 , happyReduce_26),-	(27 , happyReduce_27),-	(28 , happyReduce_28),-	(29 , happyReduce_29),-	(30 , happyReduce_30),-	(31 , happyReduce_31),-	(32 , happyReduce_32),-	(33 , happyReduce_33),-	(34 , happyReduce_34),-	(35 , happyReduce_35),-	(36 , happyReduce_36),-	(37 , happyReduce_37),-	(38 , happyReduce_38),-	(39 , happyReduce_39),-	(40 , happyReduce_40),-	(41 , happyReduce_41),-	(42 , happyReduce_42),-	(43 , happyReduce_43),-	(44 , happyReduce_44),-	(45 , happyReduce_45),-	(46 , happyReduce_46),-	(47 , happyReduce_47),-	(48 , happyReduce_48),-	(49 , happyReduce_49),-	(50 , happyReduce_50),-	(51 , happyReduce_51),-	(52 , happyReduce_52),-	(53 , happyReduce_53),-	(54 , happyReduce_54),-	(55 , happyReduce_55),-	(56 , happyReduce_56),-	(57 , happyReduce_57),-	(58 , happyReduce_58),-	(59 , happyReduce_59),-	(60 , happyReduce_60),-	(61 , happyReduce_61),-	(62 , happyReduce_62),-	(63 , happyReduce_63),-	(64 , happyReduce_64),-	(65 , happyReduce_65),-	(66 , happyReduce_66),-	(67 , happyReduce_67),-	(68 , happyReduce_68),-	(69 , happyReduce_69),-	(70 , happyReduce_70),-	(71 , happyReduce_71),-	(72 , happyReduce_72),-	(73 , happyReduce_73),-	(74 , happyReduce_74),-	(75 , happyReduce_75),-	(76 , happyReduce_76),-	(77 , happyReduce_77),-	(78 , happyReduce_78),-	(79 , happyReduce_79),-	(80 , happyReduce_80),-	(81 , happyReduce_81),-	(82 , happyReduce_82),-	(83 , happyReduce_83),-	(84 , happyReduce_84),-	(85 , happyReduce_85),-	(86 , happyReduce_86),-	(87 , happyReduce_87),-	(88 , happyReduce_88),-	(89 , happyReduce_89),-	(90 , happyReduce_90),-	(91 , happyReduce_91),-	(92 , happyReduce_92),-	(93 , happyReduce_93),-	(94 , happyReduce_94),-	(95 , happyReduce_95),-	(96 , happyReduce_96),-	(97 , happyReduce_97),-	(98 , happyReduce_98),-	(99 , happyReduce_99),-	(100 , happyReduce_100),-	(101 , happyReduce_101),-	(102 , happyReduce_102),-	(103 , happyReduce_103),-	(104 , happyReduce_104),-	(105 , happyReduce_105),-	(106 , happyReduce_106),-	(107 , happyReduce_107),-	(108 , happyReduce_108),-	(109 , happyReduce_109),-	(110 , happyReduce_110),-	(111 , happyReduce_111),-	(112 , happyReduce_112),-	(113 , happyReduce_113),-	(114 , happyReduce_114),-	(115 , happyReduce_115),-	(116 , happyReduce_116),-	(117 , happyReduce_117),-	(118 , happyReduce_118),-	(119 , happyReduce_119),-	(120 , happyReduce_120),-	(121 , happyReduce_121),-	(122 , happyReduce_122),-	(123 , happyReduce_123),-	(124 , happyReduce_124),-	(125 , happyReduce_125),-	(126 , happyReduce_126),-	(127 , happyReduce_127),-	(128 , happyReduce_128),-	(129 , happyReduce_129),-	(130 , happyReduce_130),-	(131 , happyReduce_131),-	(132 , happyReduce_132),-	(133 , happyReduce_133),-	(134 , happyReduce_134),-	(135 , happyReduce_135),-	(136 , happyReduce_136),-	(137 , happyReduce_137),-	(138 , happyReduce_138),-	(139 , happyReduce_139),-	(140 , happyReduce_140),-	(141 , happyReduce_141),-	(142 , happyReduce_142),-	(143 , happyReduce_143),-	(144 , happyReduce_144),-	(145 , happyReduce_145),-	(146 , happyReduce_146),-	(147 , happyReduce_147),-	(148 , happyReduce_148),-	(149 , happyReduce_149),-	(150 , happyReduce_150),-	(151 , happyReduce_151),-	(152 , happyReduce_152),-	(153 , happyReduce_153),-	(154 , happyReduce_154),-	(155 , happyReduce_155),-	(156 , happyReduce_156),-	(157 , happyReduce_157),-	(158 , happyReduce_158),-	(159 , happyReduce_159),-	(160 , happyReduce_160),-	(161 , happyReduce_161),-	(162 , happyReduce_162),-	(163 , happyReduce_163),-	(164 , happyReduce_164),-	(165 , happyReduce_165),-	(166 , happyReduce_166),-	(167 , happyReduce_167),-	(168 , happyReduce_168),-	(169 , happyReduce_169),-	(170 , happyReduce_170),-	(171 , happyReduce_171),-	(172 , happyReduce_172),-	(173 , happyReduce_173),-	(174 , happyReduce_174),-	(175 , happyReduce_175),-	(176 , happyReduce_176),-	(177 , happyReduce_177),-	(178 , happyReduce_178),-	(179 , happyReduce_179),-	(180 , happyReduce_180),-	(181 , happyReduce_181),-	(182 , happyReduce_182),-	(183 , happyReduce_183),-	(184 , happyReduce_184),-	(185 , happyReduce_185),-	(186 , happyReduce_186),-	(187 , happyReduce_187),-	(188 , happyReduce_188),-	(189 , happyReduce_189),-	(190 , happyReduce_190),-	(191 , happyReduce_191),-	(192 , happyReduce_192),-	(193 , happyReduce_193),-	(194 , happyReduce_194),-	(195 , happyReduce_195),-	(196 , happyReduce_196),-	(197 , happyReduce_197),-	(198 , happyReduce_198),-	(199 , happyReduce_199),-	(200 , happyReduce_200),-	(201 , happyReduce_201),-	(202 , happyReduce_202),-	(203 , happyReduce_203),-	(204 , happyReduce_204),-	(205 , happyReduce_205),-	(206 , happyReduce_206),-	(207 , happyReduce_207),-	(208 , happyReduce_208),-	(209 , happyReduce_209),-	(210 , happyReduce_210),-	(211 , happyReduce_211),-	(212 , happyReduce_212),-	(213 , happyReduce_213),-	(214 , happyReduce_214),-	(215 , happyReduce_215),-	(216 , happyReduce_216),-	(217 , happyReduce_217),-	(218 , happyReduce_218),-	(219 , happyReduce_219),-	(220 , happyReduce_220),-	(221 , happyReduce_221),-	(222 , happyReduce_222),-	(223 , happyReduce_223),-	(224 , happyReduce_224),-	(225 , happyReduce_225),-	(226 , happyReduce_226),-	(227 , happyReduce_227),-	(228 , happyReduce_228),-	(229 , happyReduce_229),-	(230 , happyReduce_230),-	(231 , happyReduce_231),-	(232 , happyReduce_232),-	(233 , happyReduce_233),-	(234 , happyReduce_234),-	(235 , happyReduce_235),-	(236 , happyReduce_236),-	(237 , happyReduce_237),-	(238 , happyReduce_238),-	(239 , happyReduce_239),-	(240 , happyReduce_240),-	(241 , happyReduce_241),-	(242 , happyReduce_242),-	(243 , happyReduce_243),-	(244 , happyReduce_244),-	(245 , happyReduce_245),-	(246 , happyReduce_246),-	(247 , happyReduce_247),-	(248 , happyReduce_248),-	(249 , happyReduce_249),-	(250 , happyReduce_250),-	(251 , happyReduce_251),-	(252 , happyReduce_252),-	(253 , happyReduce_253),-	(254 , happyReduce_254),-	(255 , happyReduce_255),-	(256 , happyReduce_256),-	(257 , happyReduce_257),-	(258 , happyReduce_258),-	(259 , happyReduce_259),-	(260 , happyReduce_260),-	(261 , happyReduce_261),-	(262 , happyReduce_262),-	(263 , happyReduce_263),-	(264 , happyReduce_264),-	(265 , happyReduce_265),-	(266 , happyReduce_266),-	(267 , happyReduce_267),-	(268 , happyReduce_268),-	(269 , happyReduce_269),-	(270 , happyReduce_270),-	(271 , happyReduce_271),-	(272 , happyReduce_272),-	(273 , happyReduce_273),-	(274 , happyReduce_274),-	(275 , happyReduce_275),-	(276 , happyReduce_276),-	(277 , happyReduce_277),-	(278 , happyReduce_278),-	(279 , happyReduce_279),-	(280 , happyReduce_280),-	(281 , happyReduce_281),-	(282 , happyReduce_282),-	(283 , happyReduce_283),-	(284 , happyReduce_284),-	(285 , happyReduce_285),-	(286 , happyReduce_286),-	(287 , happyReduce_287),-	(288 , happyReduce_288),-	(289 , happyReduce_289),-	(290 , happyReduce_290),-	(291 , happyReduce_291),-	(292 , happyReduce_292),-	(293 , happyReduce_293),-	(294 , happyReduce_294),-	(295 , happyReduce_295),-	(296 , happyReduce_296),-	(297 , happyReduce_297),-	(298 , happyReduce_298),-	(299 , happyReduce_299),-	(300 , happyReduce_300),-	(301 , happyReduce_301),-	(302 , happyReduce_302),-	(303 , happyReduce_303),-	(304 , happyReduce_304),-	(305 , happyReduce_305),-	(306 , happyReduce_306),-	(307 , happyReduce_307),-	(308 , happyReduce_308),-	(309 , happyReduce_309),-	(310 , happyReduce_310),-	(311 , happyReduce_311),-	(312 , happyReduce_312),-	(313 , happyReduce_313),-	(314 , happyReduce_314),-	(315 , happyReduce_315),-	(316 , happyReduce_316),-	(317 , happyReduce_317),-	(318 , happyReduce_318),-	(319 , happyReduce_319),-	(320 , happyReduce_320),-	(321 , happyReduce_321),-	(322 , happyReduce_322),-	(323 , happyReduce_323),-	(324 , happyReduce_324),-	(325 , happyReduce_325),-	(326 , happyReduce_326),-	(327 , happyReduce_327),-	(328 , happyReduce_328),-	(329 , happyReduce_329),-	(330 , happyReduce_330),-	(331 , happyReduce_331),-	(332 , happyReduce_332),-	(333 , happyReduce_333),-	(334 , happyReduce_334),-	(335 , happyReduce_335),-	(336 , happyReduce_336),-	(337 , happyReduce_337),-	(338 , happyReduce_338),-	(339 , happyReduce_339),-	(340 , happyReduce_340),-	(341 , happyReduce_341),-	(342 , happyReduce_342),-	(343 , happyReduce_343),-	(344 , happyReduce_344),-	(345 , happyReduce_345),-	(346 , happyReduce_346),-	(347 , happyReduce_347),-	(348 , happyReduce_348),-	(349 , happyReduce_349),-	(350 , happyReduce_350),-	(351 , happyReduce_351),-	(352 , happyReduce_352),-	(353 , happyReduce_353),-	(354 , happyReduce_354),-	(355 , happyReduce_355),-	(356 , happyReduce_356),-	(357 , happyReduce_357),-	(358 , happyReduce_358),-	(359 , happyReduce_359),-	(360 , happyReduce_360),-	(361 , happyReduce_361),-	(362 , happyReduce_362),-	(363 , happyReduce_363),-	(364 , happyReduce_364),-	(365 , happyReduce_365),-	(366 , happyReduce_366),-	(367 , happyReduce_367),-	(368 , happyReduce_368),-	(369 , happyReduce_369),-	(370 , happyReduce_370)-	]--happy_n_terms = 77 :: Int-happy_n_nonterms = 127 :: Int--happyReduce_3 = happySpecReduce_1  0# happyReduction_3-happyReduction_3 happy_x_1-	 =  case happyOut7 happy_x_1 of { happy_var_1 -> -	happyIn6-		 (reverse happy_var_1-	)}--happyReduce_4 = happySpecReduce_2  1# happyReduction_4-happyReduction_4 happy_x_2-	happy_x_1-	 =  case happyOut7 happy_x_1 of { happy_var_1 -> -	case happyOut8 happy_x_2 of { happy_var_2 -> -	happyIn7-		 (happy_var_2 : happy_var_1-	)}}--happyReduce_5 = happySpecReduce_0  1# happyReduction_5-happyReduction_5  =  happyIn7-		 ([]-	)--happyReduce_6 = happySpecReduce_1  2# happyReduction_6-happyReduction_6 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwLet happy_var_1) -> -	happyIn8-		 (TokKeyword KwLet happy_var_1-	)}--happyReduce_7 = happySpecReduce_1  2# happyReduction_7-happyReduction_7 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwIn happy_var_1) -> -	happyIn8-		 (TokKeyword KwIn happy_var_1-	)}--happyReduce_8 = happySpecReduce_1  2# happyReduction_8-happyReduction_8 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwWhere happy_var_1) -> -	happyIn8-		 (TokKeyword KwWhere happy_var_1-	)}--happyReduce_9 = happySpecReduce_1  2# happyReduction_9-happyReduction_9 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwWith happy_var_1) -> -	happyIn8-		 (TokKeyword KwWith happy_var_1-	)}--happyReduce_10 = happySpecReduce_1  2# happyReduction_10-happyReduction_10 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwRewrite happy_var_1) -> -	happyIn8-		 (TokKeyword KwRewrite happy_var_1-	)}--happyReduce_11 = happySpecReduce_1  2# happyReduction_11-happyReduction_11 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwPostulate happy_var_1) -> -	happyIn8-		 (TokKeyword KwPostulate happy_var_1-	)}--happyReduce_12 = happySpecReduce_1  2# happyReduction_12-happyReduction_12 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwPrimitive happy_var_1) -> -	happyIn8-		 (TokKeyword KwPrimitive happy_var_1-	)}--happyReduce_13 = happySpecReduce_1  2# happyReduction_13-happyReduction_13 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwOpen happy_var_1) -> -	happyIn8-		 (TokKeyword KwOpen happy_var_1-	)}--happyReduce_14 = happySpecReduce_1  2# happyReduction_14-happyReduction_14 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwImport happy_var_1) -> -	happyIn8-		 (TokKeyword KwImport happy_var_1-	)}--happyReduce_15 = happySpecReduce_1  2# happyReduction_15-happyReduction_15 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwUsing happy_var_1) -> -	happyIn8-		 (TokKeyword KwUsing happy_var_1-	)}--happyReduce_16 = happySpecReduce_1  2# happyReduction_16-happyReduction_16 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwHiding happy_var_1) -> -	happyIn8-		 (TokKeyword KwHiding happy_var_1-	)}--happyReduce_17 = happySpecReduce_1  2# happyReduction_17-happyReduction_17 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwRenaming happy_var_1) -> -	happyIn8-		 (TokKeyword KwRenaming happy_var_1-	)}--happyReduce_18 = happySpecReduce_1  2# happyReduction_18-happyReduction_18 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwTo happy_var_1) -> -	happyIn8-		 (TokKeyword KwTo happy_var_1-	)}--happyReduce_19 = happySpecReduce_1  2# happyReduction_19-happyReduction_19 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwPublic happy_var_1) -> -	happyIn8-		 (TokKeyword KwPublic happy_var_1-	)}--happyReduce_20 = happySpecReduce_1  2# happyReduction_20-happyReduction_20 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwModule happy_var_1) -> -	happyIn8-		 (TokKeyword KwModule happy_var_1-	)}--happyReduce_21 = happySpecReduce_1  2# happyReduction_21-happyReduction_21 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwData happy_var_1) -> -	happyIn8-		 (TokKeyword KwData happy_var_1-	)}--happyReduce_22 = happySpecReduce_1  2# happyReduction_22-happyReduction_22 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwCoData happy_var_1) -> -	happyIn8-		 (TokKeyword KwCoData happy_var_1-	)}--happyReduce_23 = happySpecReduce_1  2# happyReduction_23-happyReduction_23 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwRecord happy_var_1) -> -	happyIn8-		 (TokKeyword KwRecord happy_var_1-	)}--happyReduce_24 = happySpecReduce_1  2# happyReduction_24-happyReduction_24 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwConstructor happy_var_1) -> -	happyIn8-		 (TokKeyword KwConstructor happy_var_1-	)}--happyReduce_25 = happySpecReduce_1  2# happyReduction_25-happyReduction_25 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwField happy_var_1) -> -	happyIn8-		 (TokKeyword KwField happy_var_1-	)}--happyReduce_26 = happySpecReduce_1  2# happyReduction_26-happyReduction_26 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwInfix happy_var_1) -> -	happyIn8-		 (TokKeyword KwInfix happy_var_1-	)}--happyReduce_27 = happySpecReduce_1  2# happyReduction_27-happyReduction_27 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwInfixL happy_var_1) -> -	happyIn8-		 (TokKeyword KwInfixL happy_var_1-	)}--happyReduce_28 = happySpecReduce_1  2# happyReduction_28-happyReduction_28 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwInfixR happy_var_1) -> -	happyIn8-		 (TokKeyword KwInfixR happy_var_1-	)}--happyReduce_29 = happySpecReduce_1  2# happyReduction_29-happyReduction_29 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwMutual happy_var_1) -> -	happyIn8-		 (TokKeyword KwMutual happy_var_1-	)}--happyReduce_30 = happySpecReduce_1  2# happyReduction_30-happyReduction_30 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwAbstract happy_var_1) -> -	happyIn8-		 (TokKeyword KwAbstract happy_var_1-	)}--happyReduce_31 = happySpecReduce_1  2# happyReduction_31-happyReduction_31 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwPrivate happy_var_1) -> -	happyIn8-		 (TokKeyword KwPrivate happy_var_1-	)}--happyReduce_32 = happySpecReduce_1  2# happyReduction_32-happyReduction_32 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwProp happy_var_1) -> -	happyIn8-		 (TokKeyword KwProp happy_var_1-	)}--happyReduce_33 = happySpecReduce_1  2# happyReduction_33-happyReduction_33 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwSet happy_var_1) -> -	happyIn8-		 (TokKeyword KwSet happy_var_1-	)}--happyReduce_34 = happySpecReduce_1  2# happyReduction_34-happyReduction_34 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwForall happy_var_1) -> -	happyIn8-		 (TokKeyword KwForall happy_var_1-	)}--happyReduce_35 = happySpecReduce_1  2# happyReduction_35-happyReduction_35 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwSyntax happy_var_1) -> -	happyIn8-		 (TokKeyword KwSyntax happy_var_1-	)}--happyReduce_36 = happySpecReduce_1  2# happyReduction_36-happyReduction_36 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwOPTIONS happy_var_1) -> -	happyIn8-		 (TokKeyword KwOPTIONS happy_var_1-	)}--happyReduce_37 = happySpecReduce_1  2# happyReduction_37-happyReduction_37 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwBUILTIN happy_var_1) -> -	happyIn8-		 (TokKeyword KwBUILTIN happy_var_1-	)}--happyReduce_38 = happySpecReduce_1  2# happyReduction_38-happyReduction_38 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwIMPORT happy_var_1) -> -	happyIn8-		 (TokKeyword KwIMPORT happy_var_1-	)}--happyReduce_39 = happySpecReduce_1  2# happyReduction_39-happyReduction_39 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwCOMPILED happy_var_1) -> -	happyIn8-		 (TokKeyword KwCOMPILED happy_var_1-	)}--happyReduce_40 = happySpecReduce_1  2# happyReduction_40-happyReduction_40 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwCOMPILED_DATA happy_var_1) -> -	happyIn8-		 (TokKeyword KwCOMPILED_DATA happy_var_1-	)}--happyReduce_41 = happySpecReduce_1  2# happyReduction_41-happyReduction_41 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwCOMPILED_TYPE happy_var_1) -> -	happyIn8-		 (TokKeyword KwCOMPILED_TYPE happy_var_1-	)}--happyReduce_42 = happySpecReduce_1  2# happyReduction_42-happyReduction_42 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwCOMPILED_EPIC happy_var_1) -> -	happyIn8-		 (TokKeyword KwCOMPILED_EPIC happy_var_1-	)}--happyReduce_43 = happySpecReduce_1  2# happyReduction_43-happyReduction_43 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwCOMPILED_JS happy_var_1) -> -	happyIn8-		 (TokKeyword KwCOMPILED_JS happy_var_1-	)}--happyReduce_44 = happySpecReduce_1  2# happyReduction_44-happyReduction_44 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwSTATIC happy_var_1) -> -	happyIn8-		 (TokKeyword KwSTATIC happy_var_1-	)}--happyReduce_45 = happySpecReduce_1  2# happyReduction_45-happyReduction_45 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwIMPOSSIBLE happy_var_1) -> -	happyIn8-		 (TokKeyword KwIMPOSSIBLE happy_var_1-	)}--happyReduce_46 = happySpecReduce_1  2# happyReduction_46-happyReduction_46 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwETA happy_var_1) -> -	happyIn8-		 (TokKeyword KwETA happy_var_1-	)}--happyReduce_47 = happySpecReduce_1  2# happyReduction_47-happyReduction_47 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwQuoteGoal happy_var_1) -> -	happyIn8-		 (TokKeyword KwQuoteGoal happy_var_1-	)}--happyReduce_48 = happySpecReduce_1  2# happyReduction_48-happyReduction_48 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwQuote happy_var_1) -> -	happyIn8-		 (TokKeyword KwQuote happy_var_1-	)}--happyReduce_49 = happySpecReduce_1  2# happyReduction_49-happyReduction_49 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwQuoteTerm happy_var_1) -> -	happyIn8-		 (TokKeyword KwQuoteTerm happy_var_1-	)}--happyReduce_50 = happySpecReduce_1  2# happyReduction_50-happyReduction_50 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwUnquote happy_var_1) -> -	happyIn8-		 (TokKeyword KwUnquote happy_var_1-	)}--happyReduce_51 = happySpecReduce_1  2# happyReduction_51-happyReduction_51 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokSetN happy_var_1) -> -	happyIn8-		 (TokSetN happy_var_1-	)}--happyReduce_52 = happySpecReduce_1  2# happyReduction_52-happyReduction_52 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokTeX happy_var_1) -> -	happyIn8-		 (TokTeX happy_var_1-	)}--happyReduce_53 = happySpecReduce_1  2# happyReduction_53-happyReduction_53 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokComment happy_var_1) -> -	happyIn8-		 (TokComment happy_var_1-	)}--happyReduce_54 = happySpecReduce_1  2# happyReduction_54-happyReduction_54 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymEllipsis happy_var_1) -> -	happyIn8-		 (TokSymbol SymEllipsis happy_var_1-	)}--happyReduce_55 = happySpecReduce_1  2# happyReduction_55-happyReduction_55 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymDotDot happy_var_1) -> -	happyIn8-		 (TokSymbol SymDotDot happy_var_1-	)}--happyReduce_56 = happySpecReduce_1  2# happyReduction_56-happyReduction_56 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymDot happy_var_1) -> -	happyIn8-		 (TokSymbol SymDot happy_var_1-	)}--happyReduce_57 = happySpecReduce_1  2# happyReduction_57-happyReduction_57 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymSemi happy_var_1) -> -	happyIn8-		 (TokSymbol SymSemi happy_var_1-	)}--happyReduce_58 = happySpecReduce_1  2# happyReduction_58-happyReduction_58 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymColon happy_var_1) -> -	happyIn8-		 (TokSymbol SymColon happy_var_1-	)}--happyReduce_59 = happySpecReduce_1  2# happyReduction_59-happyReduction_59 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymEqual happy_var_1) -> -	happyIn8-		 (TokSymbol SymEqual happy_var_1-	)}--happyReduce_60 = happySpecReduce_1  2# happyReduction_60-happyReduction_60 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymUnderscore happy_var_1) -> -	happyIn8-		 (TokSymbol SymUnderscore happy_var_1-	)}--happyReduce_61 = happySpecReduce_1  2# happyReduction_61-happyReduction_61 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymQuestionMark happy_var_1) -> -	happyIn8-		 (TokSymbol SymQuestionMark happy_var_1-	)}--happyReduce_62 = happySpecReduce_1  2# happyReduction_62-happyReduction_62 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymArrow happy_var_1) -> -	happyIn8-		 (TokSymbol SymArrow happy_var_1-	)}--happyReduce_63 = happySpecReduce_1  2# happyReduction_63-happyReduction_63 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymLambda happy_var_1) -> -	happyIn8-		 (TokSymbol SymLambda happy_var_1-	)}--happyReduce_64 = happySpecReduce_1  2# happyReduction_64-happyReduction_64 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymAs happy_var_1) -> -	happyIn8-		 (TokSymbol SymAs happy_var_1-	)}--happyReduce_65 = happySpecReduce_1  2# happyReduction_65-happyReduction_65 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymBar happy_var_1) -> -	happyIn8-		 (TokSymbol SymBar happy_var_1-	)}--happyReduce_66 = happySpecReduce_1  2# happyReduction_66-happyReduction_66 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymOpenParen happy_var_1) -> -	happyIn8-		 (TokSymbol SymOpenParen happy_var_1-	)}--happyReduce_67 = happySpecReduce_1  2# happyReduction_67-happyReduction_67 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymCloseParen happy_var_1) -> -	happyIn8-		 (TokSymbol SymCloseParen happy_var_1-	)}--happyReduce_68 = happySpecReduce_1  2# happyReduction_68-happyReduction_68 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymDoubleOpenBrace happy_var_1) -> -	happyIn8-		 (TokSymbol SymDoubleOpenBrace happy_var_1-	)}--happyReduce_69 = happySpecReduce_1  2# happyReduction_69-happyReduction_69 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymDoubleCloseBrace happy_var_1) -> -	happyIn8-		 (TokSymbol SymDoubleCloseBrace happy_var_1-	)}--happyReduce_70 = happySpecReduce_1  2# happyReduction_70-happyReduction_70 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymOpenBrace happy_var_1) -> -	happyIn8-		 (TokSymbol SymOpenBrace happy_var_1-	)}--happyReduce_71 = happySpecReduce_1  2# happyReduction_71-happyReduction_71 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymCloseBrace happy_var_1) -> -	happyIn8-		 (TokSymbol SymCloseBrace happy_var_1-	)}--happyReduce_72 = happySpecReduce_1  2# happyReduction_72-happyReduction_72 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymOpenVirtualBrace happy_var_1) -> -	happyIn8-		 (TokSymbol SymOpenVirtualBrace happy_var_1-	)}--happyReduce_73 = happySpecReduce_1  2# happyReduction_73-happyReduction_73 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymCloseVirtualBrace happy_var_1) -> -	happyIn8-		 (TokSymbol SymCloseVirtualBrace happy_var_1-	)}--happyReduce_74 = happySpecReduce_1  2# happyReduction_74-happyReduction_74 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymVirtualSemi happy_var_1) -> -	happyIn8-		 (TokSymbol SymVirtualSemi happy_var_1-	)}--happyReduce_75 = happySpecReduce_1  2# happyReduction_75-happyReduction_75 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymOpenPragma happy_var_1) -> -	happyIn8-		 (TokSymbol SymOpenPragma happy_var_1-	)}--happyReduce_76 = happySpecReduce_1  2# happyReduction_76-happyReduction_76 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymClosePragma happy_var_1) -> -	happyIn8-		 (TokSymbol SymClosePragma happy_var_1-	)}--happyReduce_77 = happySpecReduce_1  2# happyReduction_77-happyReduction_77 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokId happy_var_1) -> -	happyIn8-		 (TokId happy_var_1-	)}--happyReduce_78 = happySpecReduce_1  2# happyReduction_78-happyReduction_78 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokQId happy_var_1) -> -	happyIn8-		 (TokQId happy_var_1-	)}--happyReduce_79 = happySpecReduce_1  2# happyReduction_79-happyReduction_79 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokString happy_var_1) -> -	happyIn8-		 (TokString happy_var_1-	)}--happyReduce_80 = happySpecReduce_1  2# happyReduction_80-happyReduction_80 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokLiteral happy_var_1) -> -	happyIn8-		 (TokLiteral happy_var_1-	)}--happyReduce_81 = happySpecReduce_1  3# happyReduction_81-happyReduction_81 happy_x_1-	 =  case happyOut10 happy_x_1 of { happy_var_1 -> -	happyIn9-		 (happy_var_1-	)}--happyReduce_82 = happySpecReduce_1  4# happyReduction_82-happyReduction_82 happy_x_1-	 =  case happyOut106 happy_x_1 of { happy_var_1 -> -	happyIn10-		 (([], happy_var_1)-	)}--happyReduce_83 = happySpecReduce_2  4# happyReduction_83-happyReduction_83 happy_x_2-	happy_x_1-	 =  case happyOut109 happy_x_1 of { happy_var_1 -> -	case happyOut10 happy_x_2 of { happy_var_2 -> -	happyIn10-		 (let (ps,m) = happy_var_2 in (happy_var_1 : ps, m)-	)}}--happyReduce_84 = happySpecReduce_1  5# happyReduction_84-happyReduction_84 happy_x_1-	 =  happyIn11-		 (()-	)--happyReduce_85 = happyMonadReduce 1# 5# happyReduction_85-happyReduction_85 (happy_x_1 `HappyStk`-	happyRest) tk-	 = happyThen (( popContext)-	) (\r -> happyReturn (happyIn11 r))--happyReduce_86 = happySpecReduce_1  6# happyReduction_86-happyReduction_86 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymSemi happy_var_1) -> -	happyIn12-		 (happy_var_1-	)}--happyReduce_87 = happySpecReduce_1  6# happyReduction_87-happyReduction_87 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymVirtualSemi happy_var_1) -> -	happyIn12-		 (happy_var_1-	)}--happyReduce_88 = happyMonadReduce 0# 7# happyReduction_88-happyReduction_88 (happyRest) tk-	 = happyThen (( pushLexState imp_dir)-	) (\r -> happyReturn (happyIn13 r))--happyReduce_89 = happyMonadReduce 1# 8# happyReduction_89-happyReduction_89 (happy_x_1 `HappyStk`-	happyRest) tk-	 = happyThen (case happyOutTok happy_x_1 of { (TokLiteral happy_var_1) -> -	( case happy_var_1 of {-		     LitInt _ n	-> return n;-		     _		-> fail $ "Expected integer"-		   })}-	) (\r -> happyReturn (happyIn14 r))--happyReduce_90 = happyMonadReduce 1# 9# happyReduction_90-happyReduction_90 (happy_x_1 `HappyStk`-	happyRest) tk-	 = happyThen (case happyOutTok happy_x_1 of { (TokId happy_var_1) -> -	( mkName happy_var_1)}-	) (\r -> happyReturn (happyIn15 r))--happyReduce_91 = happySpecReduce_2  10# happyReduction_91-happyReduction_91 happy_x_2-	happy_x_1-	 =  case happyOut15 happy_x_1 of { happy_var_1 -> -	case happyOut16 happy_x_2 of { happy_var_2 -> -	happyIn16-		 (happy_var_1 : happy_var_2-	)}}--happyReduce_92 = happySpecReduce_1  10# happyReduction_92-happyReduction_92 happy_x_1-	 =  case happyOut15 happy_x_1 of { happy_var_1 -> -	happyIn16-		 ([happy_var_1]-	)}--happyReduce_93 = happySpecReduce_1  11# happyReduction_93-happyReduction_93 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymDoubleCloseBrace happy_var_1) -> -	happyIn17-		 (getRange happy_var_1-	)}--happyReduce_94 = happyMonadReduce 2# 11# happyReduction_94-happyReduction_94 (happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest) tk-	 = happyThen (case happyOutTok happy_x_1 of { (TokSymbol SymCloseBrace happy_var_1) -> -	case happyOutTok happy_x_2 of { (TokSymbol SymCloseBrace happy_var_2) -> -	(-      if posPos (fromJust (rEnd (getRange happy_var_2))) --	 posPos (fromJust (rStart (getRange happy_var_1))) > 2-      then parseErrorAt (fromJust (rStart (getRange happy_var_2)))-	 "Expecting '}}', found separated '}'s."-      else return $ fuseRange (getRange happy_var_1) (getRange (happy_var_2)))}}-	) (\r -> happyReturn (happyIn17 r))--happyReduce_95 = happySpecReduce_2  12# happyReduction_95-happyReduction_95 happy_x_2-	happy_x_1-	 =  case happyOut15 happy_x_2 of { happy_var_2 -> -	happyIn18-		 (Arg NotHidden Irrelevant happy_var_2-	)}--happyReduce_96 = happySpecReduce_1  12# happyReduction_96-happyReduction_96 happy_x_1-	 =  case happyOut15 happy_x_1 of { happy_var_1 -> -	happyIn18-		 (defaultArg happy_var_1-	)}--happyReduce_97 = happySpecReduce_2  13# happyReduction_97-happyReduction_97 happy_x_2-	happy_x_1-	 =  case happyOut18 happy_x_1 of { happy_var_1 -> -	case happyOut19 happy_x_2 of { happy_var_2 -> -	happyIn19-		 (happy_var_1 : happy_var_2-	)}}--happyReduce_98 = happySpecReduce_1  13# happyReduction_98-happyReduction_98 happy_x_1-	 =  case happyOut18 happy_x_1 of { happy_var_1 -> -	happyIn19-		 ([happy_var_1]-	)}--happyReduce_99 = happySpecReduce_2  14# happyReduction_99-happyReduction_99 happy_x_2-	happy_x_1-	 =  case happyOut18 happy_x_1 of { happy_var_1 -> -	case happyOut20 happy_x_2 of { happy_var_2 -> -	happyIn20-		 (happy_var_1 : happy_var_2-	)}}--happyReduce_100 = happySpecReduce_1  14# happyReduction_100-happyReduction_100 happy_x_1-	 =  case happyOut18 happy_x_1 of { happy_var_1 -> -	happyIn20-		 ([happy_var_1]-	)}--happyReduce_101 = happyReduce 4# 14# happyReduction_101-happyReduction_101 (happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOut19 happy_x_2 of { happy_var_2 -> -	case happyOut20 happy_x_4 of { happy_var_4 -> -	happyIn20-		 (map makeInstance happy_var_2 ++ happy_var_4-	) `HappyStk` happyRest}}--happyReduce_102 = happySpecReduce_3  14# happyReduction_102-happyReduction_102 happy_x_3-	happy_x_2-	happy_x_1-	 =  case happyOut19 happy_x_2 of { happy_var_2 -> -	happyIn20-		 (map makeInstance happy_var_2-	)}--happyReduce_103 = happyReduce 4# 14# happyReduction_103-happyReduction_103 (happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOut19 happy_x_2 of { happy_var_2 -> -	case happyOut20 happy_x_4 of { happy_var_4 -> -	happyIn20-		 (map hide happy_var_2 ++ happy_var_4-	) `HappyStk` happyRest}}--happyReduce_104 = happySpecReduce_3  14# happyReduction_104-happyReduction_104 happy_x_3-	happy_x_2-	happy_x_1-	 =  case happyOut19 happy_x_2 of { happy_var_2 -> -	happyIn20-		 (map hide happy_var_2-	)}--happyReduce_105 = happyReduce 5# 14# happyReduction_105-happyReduction_105 (happy_x_5 `HappyStk`-	happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOut16 happy_x_3 of { happy_var_3 -> -	case happyOut20 happy_x_5 of { happy_var_5 -> -	happyIn20-		 (map (Arg Hidden Irrelevant) happy_var_3 ++ happy_var_5-	) `HappyStk` happyRest}}--happyReduce_106 = happyReduce 4# 14# happyReduction_106-happyReduction_106 (happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOut16 happy_x_3 of { happy_var_3 -> -	happyIn20-		 (map (Arg Hidden Irrelevant) happy_var_3-	) `HappyStk` happyRest}--happyReduce_107 = happyReduce 5# 14# happyReduction_107-happyReduction_107 (happy_x_5 `HappyStk`-	happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOut16 happy_x_3 of { happy_var_3 -> -	case happyOut20 happy_x_5 of { happy_var_5 -> -	happyIn20-		 (map (Arg Instance Irrelevant) happy_var_3 ++ happy_var_5-	) `HappyStk` happyRest}}--happyReduce_108 = happyReduce 4# 14# happyReduction_108-happyReduction_108 (happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOut16 happy_x_3 of { happy_var_3 -> -	happyIn20-		 (map (Arg Instance Irrelevant) happy_var_3-	) `HappyStk` happyRest}--happyReduce_109 = happyReduce 5# 14# happyReduction_109-happyReduction_109 (happy_x_5 `HappyStk`-	happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOut16 happy_x_3 of { happy_var_3 -> -	case happyOut20 happy_x_5 of { happy_var_5 -> -	happyIn20-		 (map (Arg Hidden NonStrict) happy_var_3 ++ happy_var_5-	) `HappyStk` happyRest}}--happyReduce_110 = happyReduce 4# 14# happyReduction_110-happyReduction_110 (happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOut16 happy_x_3 of { happy_var_3 -> -	happyIn20-		 (map (Arg Hidden NonStrict) happy_var_3-	) `HappyStk` happyRest}--happyReduce_111 = happyReduce 5# 14# happyReduction_111-happyReduction_111 (happy_x_5 `HappyStk`-	happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOut16 happy_x_3 of { happy_var_3 -> -	case happyOut20 happy_x_5 of { happy_var_5 -> -	happyIn20-		 (map (Arg Instance NonStrict) happy_var_3 ++ happy_var_5-	) `HappyStk` happyRest}}--happyReduce_112 = happyReduce 4# 14# happyReduction_112-happyReduction_112 (happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOut16 happy_x_3 of { happy_var_3 -> -	happyIn20-		 (map (Arg Instance NonStrict) happy_var_3-	) `HappyStk` happyRest}--happyReduce_113 = happyMonadReduce 1# 15# happyReduction_113-happyReduction_113 (happy_x_1 `HappyStk`-	happyRest) tk-	 = happyThen (case happyOutTok happy_x_1 of { (TokQId happy_var_1) -> -	( mkQName happy_var_1)}-	) (\r -> happyReturn (happyIn21 r))--happyReduce_114 = happySpecReduce_1  15# happyReduction_114-happyReduction_114 happy_x_1-	 =  case happyOut15 happy_x_1 of { happy_var_1 -> -	happyIn21-		 (QName happy_var_1-	)}--happyReduce_115 = happySpecReduce_1  16# happyReduction_115-happyReduction_115 happy_x_1-	 =  case happyOut21 happy_x_1 of { happy_var_1 -> -	happyIn22-		 (happy_var_1-	)}--happyReduce_116 = happySpecReduce_1  17# happyReduction_116-happyReduction_116 happy_x_1-	 =  case happyOut15 happy_x_1 of { happy_var_1 -> -	happyIn23-		 (happy_var_1-	)}--happyReduce_117 = happySpecReduce_1  17# happyReduction_117-happyReduction_117 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymUnderscore happy_var_1) -> -	happyIn23-		 (Name (getRange happy_var_1) [Hole]-	)}--happyReduce_118 = happySpecReduce_2  18# happyReduction_118-happyReduction_118 happy_x_2-	happy_x_1-	 =  case happyOut23 happy_x_1 of { happy_var_1 -> -	case happyOut24 happy_x_2 of { happy_var_2 -> -	happyIn24-		 (happy_var_1 : happy_var_2-	)}}--happyReduce_119 = happySpecReduce_1  18# happyReduction_119-happyReduction_119 happy_x_1-	 =  case happyOut23 happy_x_1 of { happy_var_1 -> -	happyIn24-		 ([happy_var_1]-	)}--happyReduce_120 = happySpecReduce_1  19# happyReduction_120-happyReduction_120 happy_x_1-	 =  case happyOut26 happy_x_1 of { happy_var_1 -> -	happyIn25-		 (case happy_var_1 of-      Left ns -> ns-      Right _ -> fail $ "expected sequence of bound identifiers, not absurd pattern"-	)}--happyReduce_121 = happyMonadReduce 1# 20# happyReduction_121-happyReduction_121 (happy_x_1 `HappyStk`-	happyRest) tk-	 = happyThen (case happyOut32 happy_x_1 of { happy_var_1 -> -	(-    let getName (Ident (QName x)) = Just x-	getName (Underscore r _)  = Just (Name r [Hole])-	getName _		  = Nothing--        containsAbsurd (Absurd _) = True-        containsAbsurd (HiddenArg _ (Named _ e)) = containsAbsurd e-        containsAbsurd (InstanceArg _ (Named _ e)) = containsAbsurd e-        containsAbsurd (Paren _ expr)    = containsAbsurd expr-        containsAbsurd (RawApp _ exprs)    = any containsAbsurd exprs-        containsAbsurd _          = False-    in-    if isJust $ find containsAbsurd happy_var_1 then return $ Right happy_var_1 else-    case partition isJust $ map getName happy_var_1 of-	(good, []) -> return $ Left $ map fromJust good-	_	   -> fail $ "expected sequence of bound identifiers")}-	) (\r -> happyReturn (happyIn26 r))--happyReduce_122 = happySpecReduce_0  21# happyReduction_122-happyReduction_122  =  happyIn27-		 ([]-	)--happyReduce_123 = happySpecReduce_2  21# happyReduction_123-happyReduction_123 happy_x_2-	happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokString happy_var_1) -> -	case happyOut27 happy_x_2 of { happy_var_2 -> -	happyIn27-		 (snd happy_var_1 : happy_var_2-	)}}--happyReduce_124 = happyMonadReduce 1# 22# happyReduction_124-happyReduction_124 (happy_x_1 `HappyStk`-	happyRest) tk-	 = happyThen (case happyOutTok happy_x_1 of { (TokString happy_var_1) -> -	( fmap QName (mkName happy_var_1))}-	) (\r -> happyReturn (happyIn28 r))--happyReduce_125 = happySpecReduce_2  23# happyReduction_125-happyReduction_125 happy_x_2-	happy_x_1-	 =  case happyOut41 happy_x_1 of { happy_var_1 -> -	case happyOut29 happy_x_2 of { happy_var_2 -> -	happyIn29-		 (Pi happy_var_1 happy_var_2-	)}}--happyReduce_126 = happySpecReduce_3  23# happyReduction_126-happyReduction_126 happy_x_3-	happy_x_2-	happy_x_1-	 =  case happyOut54 happy_x_2 of { happy_var_2 -> -	case happyOut29 happy_x_3 of { happy_var_3 -> -	happyIn29-		 (forallPi happy_var_2 happy_var_3-	)}}--happyReduce_127 = happySpecReduce_3  23# happyReduction_127-happyReduction_127 happy_x_3-	happy_x_2-	happy_x_1-	 =  case happyOut34 happy_x_1 of { happy_var_1 -> -	case happyOut29 happy_x_3 of { happy_var_3 -> -	happyIn29-		 (Fun (fuseRange happy_var_1 happy_var_3) (RawApp (getRange happy_var_1) happy_var_1) happy_var_3-	)}}--happyReduce_128 = happySpecReduce_1  23# happyReduction_128-happyReduction_128 happy_x_1-	 =  case happyOut30 happy_x_1 of { happy_var_1 -> -	happyIn29-		 (happy_var_1-	)}--happyReduce_129 = happyMonadReduce 1# 24# happyReduction_129-happyReduction_129 (happy_x_1 `HappyStk`-	happyRest) tk-	 = happyThen (case happyOut31 happy_x_1 of { happy_var_1 -> -	( case happy_var_1 of-		      { [e]    -> return e-		      ; e : es -> return $ WithApp (fuseRange e es) e es-		      ; []     -> fail "impossible: empty with expressions"-		      })}-	) (\r -> happyReturn (happyIn30 r))--happyReduce_130 = happySpecReduce_3  25# happyReduction_130-happyReduction_130 happy_x_3-	happy_x_2-	happy_x_1-	 =  case happyOut34 happy_x_1 of { happy_var_1 -> -	case happyOut31 happy_x_3 of { happy_var_3 -> -	happyIn31-		 (RawApp (getRange happy_var_1) happy_var_1 :  happy_var_3-	)}}--happyReduce_131 = happySpecReduce_1  25# happyReduction_131-happyReduction_131 happy_x_1-	 =  case happyOut32 happy_x_1 of { happy_var_1 -> -	happyIn31-		 ([RawApp (getRange happy_var_1) happy_var_1]-	)}--happyReduce_132 = happySpecReduce_1  26# happyReduction_132-happyReduction_132 happy_x_1-	 =  case happyOut33 happy_x_1 of { happy_var_1 -> -	happyIn32-		 ([happy_var_1]-	)}--happyReduce_133 = happySpecReduce_2  26# happyReduction_133-happyReduction_133 happy_x_2-	happy_x_1-	 =  case happyOut37 happy_x_1 of { happy_var_1 -> -	case happyOut32 happy_x_2 of { happy_var_2 -> -	happyIn32-		 (happy_var_1 : happy_var_2-	)}}--happyReduce_134 = happySpecReduce_3  27# happyReduction_134-happyReduction_134 happy_x_3-	happy_x_2-	happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymLambda happy_var_1) -> -	case happyOut46 happy_x_2 of { happy_var_2 -> -	case happyOut29 happy_x_3 of { happy_var_3 -> -	happyIn33-		 (Lam (fuseRange happy_var_1 happy_var_3) happy_var_2 happy_var_3-	)}}}--happyReduce_135 = happyReduce 4# 27# happyReduction_135-happyReduction_135 (happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOutTok happy_x_1 of { (TokSymbol SymLambda happy_var_1) -> -	case happyOutTok happy_x_2 of { (TokSymbol SymOpenBrace happy_var_2) -> -	case happyOut53 happy_x_3 of { happy_var_3 -> -	case happyOutTok happy_x_4 of { (TokSymbol SymCloseBrace happy_var_4) -> -	happyIn33-		 (ExtendedLam (fuseRange happy_var_1 (fuseRange happy_var_2 happy_var_4)) (reverse happy_var_3)-	) `HappyStk` happyRest}}}}--happyReduce_136 = happyMonadReduce 2# 27# happyReduction_136-happyReduction_136 (happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest) tk-	 = happyThen (case happyOutTok happy_x_1 of { (TokSymbol SymLambda happy_var_1) -> -	case happyOut47 happy_x_2 of { happy_var_2 -> -	( case happy_var_2 of-                                       Left (bs, h) -> if null bs then return $ AbsurdLam r h else-                                                       return $ Lam r bs (AbsurdLam r h)-                                                         where r = fuseRange happy_var_1 bs-    				       Right es -> do -- it is of the form @\ { p1 ... () }@-                                                     p <- exprToLHS (RawApp (getRange es) es);-                                                     return $ ExtendedLam (fuseRange happy_var_1 es)-                                                                     [(p [] [], AbsurdRHS, NoWhere)])}}-	) (\r -> happyReturn (happyIn33 r))--happyReduce_137 = happyReduce 4# 27# happyReduction_137-happyReduction_137 (happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOutTok happy_x_1 of { (TokKeyword KwLet happy_var_1) -> -	case happyOut130 happy_x_2 of { happy_var_2 -> -	case happyOut29 happy_x_4 of { happy_var_4 -> -	happyIn33-		 (Let (fuseRange happy_var_1 happy_var_4) happy_var_2 happy_var_4-	) `HappyStk` happyRest}}}--happyReduce_138 = happySpecReduce_1  27# happyReduction_138-happyReduction_138 happy_x_1-	 =  case happyOut37 happy_x_1 of { happy_var_1 -> -	happyIn33-		 (happy_var_1-	)}--happyReduce_139 = happyReduce 4# 27# happyReduction_139-happyReduction_139 (happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOutTok happy_x_1 of { (TokKeyword KwQuoteGoal happy_var_1) -> -	case happyOut15 happy_x_2 of { happy_var_2 -> -	case happyOut29 happy_x_4 of { happy_var_4 -> -	happyIn33-		 (QuoteGoal (getRange (happy_var_1,happy_var_4)) happy_var_2 happy_var_4-	) `HappyStk` happyRest}}}--happyReduce_140 = happySpecReduce_1  28# happyReduction_140-happyReduction_140 happy_x_1-	 =  case happyOut37 happy_x_1 of { happy_var_1 -> -	happyIn34-		 ([happy_var_1]-	)}--happyReduce_141 = happySpecReduce_2  28# happyReduction_141-happyReduction_141 happy_x_2-	happy_x_1-	 =  case happyOut37 happy_x_1 of { happy_var_1 -> -	case happyOut34 happy_x_2 of { happy_var_2 -> -	happyIn34-		 (happy_var_1 : happy_var_2-	)}}--happyReduce_142 = happySpecReduce_3  29# happyReduction_142-happyReduction_142 happy_x_3-	happy_x_2-	happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymOpenBrace happy_var_1) -> -	case happyOut29 happy_x_2 of { happy_var_2 -> -	case happyOutTok happy_x_3 of { (TokSymbol SymCloseBrace happy_var_3) -> -	happyIn35-		 (HiddenArg (fuseRange happy_var_1 happy_var_3) (unnamed happy_var_2)-	)}}}--happyReduce_143 = happyReduce 5# 29# happyReduction_143-happyReduction_143 (happy_x_5 `HappyStk`-	happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOutTok happy_x_1 of { (TokSymbol SymOpenBrace happy_var_1) -> -	case happyOut15 happy_x_2 of { happy_var_2 -> -	case happyOut29 happy_x_4 of { happy_var_4 -> -	case happyOutTok happy_x_5 of { (TokSymbol SymCloseBrace happy_var_5) -> -	happyIn35-		 (HiddenArg (fuseRange happy_var_1 happy_var_5) (named (show happy_var_2) happy_var_4)-	) `HappyStk` happyRest}}}}--happyReduce_144 = happySpecReduce_2  29# happyReduction_144-happyReduction_144 happy_x_2-	happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymOpenBrace happy_var_1) -> -	case happyOutTok happy_x_2 of { (TokSymbol SymCloseBrace happy_var_2) -> -	happyIn35-		 (let r = fuseRange happy_var_1 happy_var_2 in HiddenArg r $ unnamed $ Absurd r-	)}}--happyReduce_145 = happySpecReduce_1  30# happyReduction_145-happyReduction_145 happy_x_1-	 =  case happyOut21 happy_x_1 of { happy_var_1 -> -	happyIn36-		 (Ident happy_var_1-	)}--happyReduce_146 = happySpecReduce_1  30# happyReduction_146-happyReduction_146 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokLiteral happy_var_1) -> -	happyIn36-		 (Lit happy_var_1-	)}--happyReduce_147 = happySpecReduce_1  30# happyReduction_147-happyReduction_147 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymQuestionMark happy_var_1) -> -	happyIn36-		 (QuestionMark (getRange happy_var_1) Nothing-	)}--happyReduce_148 = happySpecReduce_1  30# happyReduction_148-happyReduction_148 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymUnderscore happy_var_1) -> -	happyIn36-		 (Underscore (getRange happy_var_1) Nothing-	)}--happyReduce_149 = happySpecReduce_1  30# happyReduction_149-happyReduction_149 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwProp happy_var_1) -> -	happyIn36-		 (Prop (getRange happy_var_1)-	)}--happyReduce_150 = happySpecReduce_1  30# happyReduction_150-happyReduction_150 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwSet happy_var_1) -> -	happyIn36-		 (Set (getRange happy_var_1)-	)}--happyReduce_151 = happySpecReduce_1  30# happyReduction_151-happyReduction_151 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwQuote happy_var_1) -> -	happyIn36-		 (Quote (getRange happy_var_1)-	)}--happyReduce_152 = happySpecReduce_1  30# happyReduction_152-happyReduction_152 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwQuoteTerm happy_var_1) -> -	happyIn36-		 (QuoteTerm (getRange happy_var_1)-	)}--happyReduce_153 = happySpecReduce_1  30# happyReduction_153-happyReduction_153 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwUnquote happy_var_1) -> -	happyIn36-		 (Unquote (getRange happy_var_1)-	)}--happyReduce_154 = happySpecReduce_1  30# happyReduction_154-happyReduction_154 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokSetN happy_var_1) -> -	happyIn36-		 (SetN (getRange (fst happy_var_1)) (snd happy_var_1)-	)}--happyReduce_155 = happySpecReduce_3  30# happyReduction_155-happyReduction_155 happy_x_3-	happy_x_2-	happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymDoubleOpenBrace happy_var_1) -> -	case happyOut29 happy_x_2 of { happy_var_2 -> -	case happyOut17 happy_x_3 of { happy_var_3 -> -	happyIn36-		 (InstanceArg (fuseRange happy_var_1 happy_var_3) (unnamed happy_var_2)-	)}}}--happyReduce_156 = happyReduce 5# 30# happyReduction_156-happyReduction_156 (happy_x_5 `HappyStk`-	happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOutTok happy_x_1 of { (TokSymbol SymDoubleOpenBrace happy_var_1) -> -	case happyOut15 happy_x_2 of { happy_var_2 -> -	case happyOut29 happy_x_4 of { happy_var_4 -> -	case happyOut17 happy_x_5 of { happy_var_5 -> -	happyIn36-		 (InstanceArg (fuseRange happy_var_1 happy_var_5) (named (show happy_var_2) happy_var_4)-	) `HappyStk` happyRest}}}}--happyReduce_157 = happySpecReduce_3  30# happyReduction_157-happyReduction_157 happy_x_3-	happy_x_2-	happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymOpenParen happy_var_1) -> -	case happyOut29 happy_x_2 of { happy_var_2 -> -	case happyOutTok happy_x_3 of { (TokSymbol SymCloseParen happy_var_3) -> -	happyIn36-		 (Paren (fuseRange happy_var_1 happy_var_3) happy_var_2-	)}}}--happyReduce_158 = happySpecReduce_2  30# happyReduction_158-happyReduction_158 happy_x_2-	happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymOpenParen happy_var_1) -> -	case happyOutTok happy_x_2 of { (TokSymbol SymCloseParen happy_var_2) -> -	happyIn36-		 (Absurd (fuseRange happy_var_1 happy_var_2)-	)}}--happyReduce_159 = happySpecReduce_2  30# happyReduction_159-happyReduction_159 happy_x_2-	happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymDoubleOpenBrace happy_var_1) -> -	case happyOut17 happy_x_2 of { happy_var_2 -> -	happyIn36-		 (let r = fuseRange happy_var_1 happy_var_2 in InstanceArg r $ unnamed $ Absurd r-	)}}--happyReduce_160 = happySpecReduce_3  30# happyReduction_160-happyReduction_160 happy_x_3-	happy_x_2-	happy_x_1-	 =  case happyOut15 happy_x_1 of { happy_var_1 -> -	case happyOut37 happy_x_3 of { happy_var_3 -> -	happyIn36-		 (As (fuseRange happy_var_1 happy_var_3) happy_var_1 happy_var_3-	)}}--happyReduce_161 = happySpecReduce_2  30# happyReduction_161-happyReduction_161 happy_x_2-	happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymDot happy_var_1) -> -	case happyOut37 happy_x_2 of { happy_var_2 -> -	happyIn36-		 (Dot (fuseRange happy_var_1 happy_var_2) happy_var_2-	)}}--happyReduce_162 = happyReduce 4# 30# happyReduction_162-happyReduction_162 (happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOutTok happy_x_1 of { (TokKeyword KwRecord happy_var_1) -> -	case happyOut38 happy_x_3 of { happy_var_3 -> -	case happyOutTok happy_x_4 of { (TokSymbol SymCloseBrace happy_var_4) -> -	happyIn36-		 (Rec (getRange (happy_var_1,happy_var_4)) happy_var_3-	) `HappyStk` happyRest}}}--happyReduce_163 = happyReduce 5# 30# happyReduction_163-happyReduction_163 (happy_x_5 `HappyStk`-	happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOutTok happy_x_1 of { (TokKeyword KwRecord happy_var_1) -> -	case happyOut36 happy_x_2 of { happy_var_2 -> -	case happyOut38 happy_x_4 of { happy_var_4 -> -	case happyOutTok happy_x_5 of { (TokSymbol SymCloseBrace happy_var_5) -> -	happyIn36-		 (RecUpdate (getRange (happy_var_1,happy_var_5)) happy_var_2 happy_var_4-	) `HappyStk` happyRest}}}}--happyReduce_164 = happySpecReduce_1  31# happyReduction_164-happyReduction_164 happy_x_1-	 =  case happyOut35 happy_x_1 of { happy_var_1 -> -	happyIn37-		 (happy_var_1-	)}--happyReduce_165 = happySpecReduce_1  31# happyReduction_165-happyReduction_165 happy_x_1-	 =  case happyOut36 happy_x_1 of { happy_var_1 -> -	happyIn37-		 (happy_var_1-	)}--happyReduce_166 = happySpecReduce_0  32# happyReduction_166-happyReduction_166  =  happyIn38-		 ([]-	)--happyReduce_167 = happySpecReduce_1  32# happyReduction_167-happyReduction_167 happy_x_1-	 =  case happyOut39 happy_x_1 of { happy_var_1 -> -	happyIn38-		 (happy_var_1-	)}--happyReduce_168 = happySpecReduce_1  33# happyReduction_168-happyReduction_168 happy_x_1-	 =  case happyOut40 happy_x_1 of { happy_var_1 -> -	happyIn39-		 ([happy_var_1]-	)}--happyReduce_169 = happySpecReduce_3  33# happyReduction_169-happyReduction_169 happy_x_3-	happy_x_2-	happy_x_1-	 =  case happyOut40 happy_x_1 of { happy_var_1 -> -	case happyOut39 happy_x_3 of { happy_var_3 -> -	happyIn39-		 (happy_var_1 : happy_var_3-	)}}--happyReduce_170 = happySpecReduce_3  34# happyReduction_170-happyReduction_170 happy_x_3-	happy_x_2-	happy_x_1-	 =  case happyOut15 happy_x_1 of { happy_var_1 -> -	case happyOut29 happy_x_3 of { happy_var_3 -> -	happyIn40-		 ((happy_var_1, happy_var_3)-	)}}--happyReduce_171 = happySpecReduce_2  35# happyReduction_171-happyReduction_171 happy_x_2-	happy_x_1-	 =  case happyOut42 happy_x_1 of { happy_var_1 -> -	happyIn41-		 (happy_var_1-	)}--happyReduce_172 = happySpecReduce_1  36# happyReduction_172-happyReduction_172 happy_x_1-	 =  case happyOut43 happy_x_1 of { happy_var_1 -> -	happyIn42-		 ({-TeleBind-} happy_var_1-	)}--happyReduce_173 = happySpecReduce_2  37# happyReduction_173-happyReduction_173 happy_x_2-	happy_x_1-	 =  case happyOut44 happy_x_1 of { happy_var_1 -> -	case happyOut43 happy_x_2 of { happy_var_2 -> -	happyIn43-		 (happy_var_1 : happy_var_2-	)}}--happyReduce_174 = happySpecReduce_1  37# happyReduction_174-happyReduction_174 happy_x_1-	 =  case happyOut44 happy_x_1 of { happy_var_1 -> -	happyIn43-		 ([happy_var_1]-	)}--happyReduce_175 = happyReduce 4# 38# happyReduction_175-happyReduction_175 (happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOutTok happy_x_2 of { (TokSymbol SymOpenParen happy_var_2) -> -	case happyOut45 happy_x_3 of { happy_var_3 -> -	case happyOutTok happy_x_4 of { (TokSymbol SymCloseParen happy_var_4) -> -	happyIn44-		 (TypedBindings (fuseRange happy_var_2 happy_var_4) (Arg NotHidden         Irrelevant happy_var_3)-	) `HappyStk` happyRest}}}--happyReduce_176 = happyReduce 4# 38# happyReduction_176-happyReduction_176 (happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOutTok happy_x_2 of { (TokSymbol SymOpenBrace happy_var_2) -> -	case happyOut45 happy_x_3 of { happy_var_3 -> -	case happyOutTok happy_x_4 of { (TokSymbol SymCloseBrace happy_var_4) -> -	happyIn44-		 (TypedBindings (fuseRange happy_var_2 happy_var_4) (Arg Hidden            Irrelevant happy_var_3)-	) `HappyStk` happyRest}}}--happyReduce_177 = happyReduce 4# 38# happyReduction_177-happyReduction_177 (happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOutTok happy_x_1 of { (TokSymbol SymDot happy_var_1) -> -	case happyOut45 happy_x_3 of { happy_var_3 -> -	happyIn44-		 (TypedBindings (fuseRange happy_var_1 happy_var_3) (Arg Instance Irrelevant happy_var_3)-	) `HappyStk` happyRest}}--happyReduce_178 = happyReduce 4# 38# happyReduction_178-happyReduction_178 (happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOutTok happy_x_2 of { (TokSymbol SymOpenParen happy_var_2) -> -	case happyOut45 happy_x_3 of { happy_var_3 -> -	case happyOutTok happy_x_4 of { (TokSymbol SymCloseParen happy_var_4) -> -	happyIn44-		 (TypedBindings (fuseRange happy_var_2 happy_var_4) (Arg NotHidden         NonStrict happy_var_3)-	) `HappyStk` happyRest}}}--happyReduce_179 = happyReduce 4# 38# happyReduction_179-happyReduction_179 (happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOutTok happy_x_2 of { (TokSymbol SymOpenBrace happy_var_2) -> -	case happyOut45 happy_x_3 of { happy_var_3 -> -	case happyOutTok happy_x_4 of { (TokSymbol SymCloseBrace happy_var_4) -> -	happyIn44-		 (TypedBindings (fuseRange happy_var_2 happy_var_4) (Arg Hidden            NonStrict happy_var_3)-	) `HappyStk` happyRest}}}--happyReduce_180 = happyReduce 4# 38# happyReduction_180-happyReduction_180 (happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOutTok happy_x_1 of { (TokSymbol SymDotDot happy_var_1) -> -	case happyOut45 happy_x_3 of { happy_var_3 -> -	happyIn44-		 (TypedBindings (fuseRange happy_var_1 happy_var_3) (Arg Instance NonStrict happy_var_3)-	) `HappyStk` happyRest}}--happyReduce_181 = happySpecReduce_3  38# happyReduction_181-happyReduction_181 happy_x_3-	happy_x_2-	happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymOpenParen happy_var_1) -> -	case happyOut45 happy_x_2 of { happy_var_2 -> -	case happyOutTok happy_x_3 of { (TokSymbol SymCloseParen happy_var_3) -> -	happyIn44-		 (TypedBindings (fuseRange happy_var_1 happy_var_3) (Arg NotHidden         Relevant happy_var_2)-	)}}}--happyReduce_182 = happySpecReduce_3  38# happyReduction_182-happyReduction_182 happy_x_3-	happy_x_2-	happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymDoubleOpenBrace happy_var_1) -> -	case happyOut45 happy_x_2 of { happy_var_2 -> -	case happyOut17 happy_x_3 of { happy_var_3 -> -	happyIn44-		 (TypedBindings (fuseRange happy_var_1 happy_var_3) (Arg Instance Relevant happy_var_2)-	)}}}--happyReduce_183 = happySpecReduce_3  38# happyReduction_183-happyReduction_183 happy_x_3-	happy_x_2-	happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymOpenBrace happy_var_1) -> -	case happyOut45 happy_x_2 of { happy_var_2 -> -	case happyOutTok happy_x_3 of { (TokSymbol SymCloseBrace happy_var_3) -> -	happyIn44-		 (TypedBindings (fuseRange happy_var_1 happy_var_3) (Arg Hidden            Relevant happy_var_2)-	)}}}--happyReduce_184 = happySpecReduce_3  39# happyReduction_184-happyReduction_184 happy_x_3-	happy_x_2-	happy_x_1-	 =  case happyOut25 happy_x_1 of { happy_var_1 -> -	case happyOut29 happy_x_3 of { happy_var_3 -> -	happyIn45-		 (TBind (fuseRange happy_var_1 happy_var_3) (map mkBoundName_ happy_var_1) happy_var_3-	)}}--happyReduce_185 = happyMonadReduce 2# 40# happyReduction_185-happyReduction_185 (happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest) tk-	 = happyThen (case happyOut48 happy_x_1 of { happy_var_1 -> -	(-      case reverse happy_var_1 of-        Left _ : _ -> parseError "Absurd lambda cannot have a body."-	_ : _      -> return [ b | Right b <- happy_var_1 ]-        []         -> parsePanic "Empty LamBinds")}-	) (\r -> happyReturn (happyIn46 r))--happyReduce_186 = happyMonadReduce 1# 41# happyReduction_186-happyReduction_186 (happy_x_1 `HappyStk`-	happyRest) tk-	 = happyThen (case happyOut49 happy_x_1 of { happy_var_1 -> -	(-    case happy_var_1 of-      Left lb -> case reverse lb of-                   Right _ : _ -> parseError "Missing body for lambda"-                   Left h  : _ -> return $ Left ([ b | Right b <- init lb], h)-                   _           -> parsePanic "Empty LamBindsAbsurd"-      Right es -> return $ Right es)}-	) (\r -> happyReturn (happyIn47 r))--happyReduce_187 = happySpecReduce_2  42# happyReduction_187-happyReduction_187 happy_x_2-	happy_x_1-	 =  case happyOut57 happy_x_1 of { happy_var_1 -> -	case happyOut48 happy_x_2 of { happy_var_2 -> -	happyIn48-		 (map Right happy_var_1 ++ happy_var_2-	)}}--happyReduce_188 = happySpecReduce_2  42# happyReduction_188-happyReduction_188 happy_x_2-	happy_x_1-	 =  case happyOut44 happy_x_1 of { happy_var_1 -> -	case happyOut48 happy_x_2 of { happy_var_2 -> -	happyIn48-		 (Right (DomainFull happy_var_1) : happy_var_2-	)}}--happyReduce_189 = happySpecReduce_1  42# happyReduction_189-happyReduction_189 happy_x_1-	 =  case happyOut57 happy_x_1 of { happy_var_1 -> -	happyIn48-		 (map Right happy_var_1-	)}--happyReduce_190 = happySpecReduce_1  42# happyReduction_190-happyReduction_190 happy_x_1-	 =  case happyOut44 happy_x_1 of { happy_var_1 -> -	happyIn48-		 ([Right $ DomainFull happy_var_1]-	)}--happyReduce_191 = happySpecReduce_2  42# happyReduction_191-happyReduction_191 happy_x_2-	happy_x_1-	 =  happyIn48-		 ([Left NotHidden]-	)--happyReduce_192 = happySpecReduce_2  42# happyReduction_192-happyReduction_192 happy_x_2-	happy_x_1-	 =  happyIn48-		 ([Left Hidden]-	)--happyReduce_193 = happySpecReduce_2  42# happyReduction_193-happyReduction_193 happy_x_2-	happy_x_1-	 =  happyIn48-		 ([Left Instance]-	)--happyReduce_194 = happySpecReduce_2  43# happyReduction_194-happyReduction_194 happy_x_2-	happy_x_1-	 =  case happyOut57 happy_x_1 of { happy_var_1 -> -	case happyOut48 happy_x_2 of { happy_var_2 -> -	happyIn49-		 (Left $ map Right happy_var_1 ++ happy_var_2-	)}}--happyReduce_195 = happySpecReduce_2  43# happyReduction_195-happyReduction_195 happy_x_2-	happy_x_1-	 =  case happyOut44 happy_x_1 of { happy_var_1 -> -	case happyOut48 happy_x_2 of { happy_var_2 -> -	happyIn49-		 (Left $ Right (DomainFull happy_var_1) : happy_var_2-	)}}--happyReduce_196 = happySpecReduce_1  43# happyReduction_196-happyReduction_196 happy_x_1-	 =  case happyOut58 happy_x_1 of { happy_var_1 -> -	happyIn49-		 (case happy_var_1 of-                                    Left lb -> Left $ map Right lb-                                    Right es -> Right es-	)}--happyReduce_197 = happySpecReduce_1  43# happyReduction_197-happyReduction_197 happy_x_1-	 =  case happyOut44 happy_x_1 of { happy_var_1 -> -	happyIn49-		 (Left [Right $ DomainFull happy_var_1]-	)}--happyReduce_198 = happySpecReduce_2  43# happyReduction_198-happyReduction_198 happy_x_2-	happy_x_1-	 =  happyIn49-		 (Left [Left NotHidden]-	)--happyReduce_199 = happySpecReduce_2  43# happyReduction_199-happyReduction_199 happy_x_2-	happy_x_1-	 =  happyIn49-		 (Left [Left Hidden]-	)--happyReduce_200 = happySpecReduce_2  43# happyReduction_200-happyReduction_200 happy_x_2-	happy_x_1-	 =  happyIn49-		 (Left [Left Instance]-	)--happyReduce_201 = happyMonadReduce 3# 44# happyReduction_201-happyReduction_201 (happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest) tk-	 = happyThen (case happyOut34 happy_x_1 of { happy_var_1 -> -	case happyOut29 happy_x_3 of { happy_var_3 -> -	( do-      p <- exprToLHS (RawApp (getRange happy_var_1) happy_var_1) ;-      return (p [] [], RHS happy_var_3, NoWhere))}}-	) (\r -> happyReturn (happyIn50 r))--happyReduce_202 = happyMonadReduce 1# 45# happyReduction_202-happyReduction_202 (happy_x_1 `HappyStk`-	happyRest) tk-	 = happyThen (case happyOut32 happy_x_1 of { happy_var_1 -> -	( do-      p <- exprToLHS (RawApp (getRange happy_var_1) happy_var_1);-      return (p [] [], AbsurdRHS, NoWhere))}-	) (\r -> happyReturn (happyIn51 r))--happyReduce_203 = happySpecReduce_1  46# happyReduction_203-happyReduction_203 happy_x_1-	 =  case happyOut50 happy_x_1 of { happy_var_1 -> -	happyIn52-		 (happy_var_1-	)}--happyReduce_204 = happySpecReduce_1  46# happyReduction_204-happyReduction_204 happy_x_1-	 =  case happyOut51 happy_x_1 of { happy_var_1 -> -	happyIn52-		 (happy_var_1-	)}--happyReduce_205 = happySpecReduce_3  47# happyReduction_205-happyReduction_205 happy_x_3-	happy_x_2-	happy_x_1-	 =  case happyOut53 happy_x_1 of { happy_var_1 -> -	case happyOut52 happy_x_3 of { happy_var_3 -> -	happyIn53-		 (happy_var_3 : happy_var_1-	)}}--happyReduce_206 = happySpecReduce_3  47# happyReduction_206-happyReduction_206 happy_x_3-	happy_x_2-	happy_x_1-	 =  case happyOut51 happy_x_1 of { happy_var_1 -> -	case happyOut52 happy_x_3 of { happy_var_3 -> -	happyIn53-		 ([happy_var_3, happy_var_1]-	)}}--happyReduce_207 = happySpecReduce_1  47# happyReduction_207-happyReduction_207 happy_x_1-	 =  case happyOut50 happy_x_1 of { happy_var_1 -> -	happyIn53-		 ([happy_var_1]-	)}--happyReduce_208 = happySpecReduce_2  48# happyReduction_208-happyReduction_208 happy_x_2-	happy_x_1-	 =  case happyOut55 happy_x_1 of { happy_var_1 -> -	happyIn54-		 (happy_var_1-	)}--happyReduce_209 = happySpecReduce_2  49# happyReduction_209-happyReduction_209 happy_x_2-	happy_x_1-	 =  case happyOut57 happy_x_1 of { happy_var_1 -> -	case happyOut55 happy_x_2 of { happy_var_2 -> -	happyIn55-		 (happy_var_1 ++ happy_var_2-	)}}--happyReduce_210 = happySpecReduce_2  49# happyReduction_210-happyReduction_210 happy_x_2-	happy_x_1-	 =  case happyOut44 happy_x_1 of { happy_var_1 -> -	case happyOut55 happy_x_2 of { happy_var_2 -> -	happyIn55-		 (DomainFull happy_var_1 : happy_var_2-	)}}--happyReduce_211 = happySpecReduce_1  49# happyReduction_211-happyReduction_211 happy_x_1-	 =  case happyOut57 happy_x_1 of { happy_var_1 -> -	happyIn55-		 (happy_var_1-	)}--happyReduce_212 = happySpecReduce_1  49# happyReduction_212-happyReduction_212 happy_x_1-	 =  case happyOut44 happy_x_1 of { happy_var_1 -> -	happyIn55-		 ([DomainFull happy_var_1]-	)}--happyReduce_213 = happySpecReduce_2  50# happyReduction_213-happyReduction_213 happy_x_2-	happy_x_1-	 =  case happyOut57 happy_x_1 of { happy_var_1 -> -	case happyOut56 happy_x_2 of { happy_var_2 -> -	happyIn56-		 (happy_var_1 ++ happy_var_2-	)}}--happyReduce_214 = happySpecReduce_2  50# happyReduction_214-happyReduction_214 happy_x_2-	happy_x_1-	 =  case happyOut44 happy_x_1 of { happy_var_1 -> -	case happyOut56 happy_x_2 of { happy_var_2 -> -	happyIn56-		 (DomainFull happy_var_1 : happy_var_2-	)}}--happyReduce_215 = happySpecReduce_0  50# happyReduction_215-happyReduction_215  =  happyIn56-		 ([]-	)--happyReduce_216 = happySpecReduce_1  51# happyReduction_216-happyReduction_216 happy_x_1-	 =  case happyOut58 happy_x_1 of { happy_var_1 -> -	happyIn57-		 (case happy_var_1 of-                             Left lbs -> lbs-                             Right _ -> fail "expected sequence of bound identifiers, not absurd pattern"-	)}--happyReduce_217 = happySpecReduce_1  52# happyReduction_217-happyReduction_217 happy_x_1-	 =  case happyOut23 happy_x_1 of { happy_var_1 -> -	happyIn58-		 (Left [DomainFree NotHidden Relevant $ mkBoundName_ happy_var_1]-	)}--happyReduce_218 = happySpecReduce_2  52# happyReduction_218-happyReduction_218 happy_x_2-	happy_x_1-	 =  case happyOut23 happy_x_2 of { happy_var_2 -> -	happyIn58-		 (Left [DomainFree NotHidden Irrelevant $ mkBoundName_ happy_var_2]-	)}--happyReduce_219 = happySpecReduce_2  52# happyReduction_219-happyReduction_219 happy_x_2-	happy_x_1-	 =  case happyOut23 happy_x_2 of { happy_var_2 -> -	happyIn58-		 (Left [DomainFree NotHidden NonStrict $ mkBoundName_ happy_var_2]-	)}--happyReduce_220 = happySpecReduce_3  52# happyReduction_220-happyReduction_220 happy_x_3-	happy_x_2-	happy_x_1-	 =  case happyOut26 happy_x_2 of { happy_var_2 -> -	happyIn58-		 (either (Left . map (DomainFree Hidden Relevant . mkBoundName_)) Right happy_var_2-	)}--happyReduce_221 = happySpecReduce_3  52# happyReduction_221-happyReduction_221 happy_x_3-	happy_x_2-	happy_x_1-	 =  case happyOut25 happy_x_2 of { happy_var_2 -> -	happyIn58-		 (Left $ map (DomainFree Instance Relevant . mkBoundName_) happy_var_2-	)}--happyReduce_222 = happyReduce 4# 52# happyReduction_222-happyReduction_222 (happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOut25 happy_x_3 of { happy_var_3 -> -	happyIn58-		 (Left $ map (DomainFree Hidden Irrelevant . mkBoundName_) happy_var_3-	) `HappyStk` happyRest}--happyReduce_223 = happyReduce 4# 52# happyReduction_223-happyReduction_223 (happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOut25 happy_x_3 of { happy_var_3 -> -	happyIn58-		 (Left $ map (DomainFree Instance Irrelevant . mkBoundName_) happy_var_3-	) `HappyStk` happyRest}--happyReduce_224 = happyReduce 4# 52# happyReduction_224-happyReduction_224 (happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOut25 happy_x_3 of { happy_var_3 -> -	happyIn58-		 (Left $ map (DomainFree Hidden NonStrict . mkBoundName_) happy_var_3-	) `HappyStk` happyRest}--happyReduce_225 = happyReduce 4# 52# happyReduction_225-happyReduction_225 (happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOut25 happy_x_3 of { happy_var_3 -> -	happyIn58-		 (Left $ map (DomainFree Instance NonStrict . mkBoundName_) happy_var_3-	) `HappyStk` happyRest}--happyReduce_226 = happySpecReduce_1  53# happyReduction_226-happyReduction_226 happy_x_1-	 =  case happyOut60 happy_x_1 of { happy_var_1 -> -	happyIn59-		 ((Nothing, happy_var_1)-	)}--happyReduce_227 = happyMonadReduce 3# 53# happyReduction_227-happyReduction_227 (happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest) tk-	 = happyThen (case happyOutTok happy_x_1 of { (TokId happy_var_1) -> -	case happyOut15 happy_x_2 of { happy_var_2 -> -	case happyOut60 happy_x_3 of { happy_var_3 -> -	( isName "as" happy_var_1 >>-                               return (Just (AsName happy_var_2 (getRange (fst happy_var_1))), happy_var_3))}}}-	) (\r -> happyReturn (happyIn59 r))--happyReduce_228 = happyMonadReduce 1# 54# happyReduction_228-happyReduction_228 (happy_x_1 `HappyStk`-	happyRest) tk-	 = happyThen (case happyOut61 happy_x_1 of { happy_var_1 -> -	( verifyImportDirective happy_var_1)}-	) (\r -> happyReturn (happyIn60 r))--happyReduce_229 = happySpecReduce_2  55# happyReduction_229-happyReduction_229 happy_x_2-	happy_x_1-	 =  case happyOut62 happy_x_2 of { happy_var_2 -> -	happyIn61-		 (happy_var_2 { publicOpen = True }-	)}--happyReduce_230 = happySpecReduce_1  55# happyReduction_230-happyReduction_230 happy_x_1-	 =  case happyOut62 happy_x_1 of { happy_var_1 -> -	happyIn61-		 (happy_var_1-	)}--happyReduce_231 = happySpecReduce_2  56# happyReduction_231-happyReduction_231 happy_x_2-	happy_x_1-	 =  case happyOut63 happy_x_1 of { happy_var_1 -> -	case happyOut64 happy_x_2 of { happy_var_2 -> -	happyIn62-		 (ImportDirective (fuseRange (snd happy_var_1) (snd happy_var_2)) (fst happy_var_1) (fst happy_var_2) False-	)}}--happyReduce_232 = happySpecReduce_1  56# happyReduction_232-happyReduction_232 happy_x_1-	 =  case happyOut64 happy_x_1 of { happy_var_1 -> -	happyIn62-		 (ImportDirective (getRange (snd happy_var_1)) (Hiding []) (fst happy_var_1) False-	)}--happyReduce_233 = happySpecReduce_1  56# happyReduction_233-happyReduction_233 happy_x_1-	 =  case happyOut63 happy_x_1 of { happy_var_1 -> -	happyIn62-		 (ImportDirective (getRange (snd happy_var_1)) (fst happy_var_1) [] False-	)}--happyReduce_234 = happySpecReduce_0  56# happyReduction_234-happyReduction_234  =  happyIn62-		 (ImportDirective noRange (Hiding []) [] False-	)--happyReduce_235 = happyReduce 4# 57# happyReduction_235-happyReduction_235 (happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOutTok happy_x_1 of { (TokKeyword KwUsing happy_var_1) -> -	case happyOut69 happy_x_3 of { happy_var_3 -> -	case happyOutTok happy_x_4 of { (TokSymbol SymCloseParen happy_var_4) -> -	happyIn63-		 ((Using happy_var_3 , fuseRange happy_var_1 happy_var_4)-	) `HappyStk` happyRest}}}--happyReduce_236 = happyReduce 4# 57# happyReduction_236-happyReduction_236 (happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOutTok happy_x_1 of { (TokKeyword KwHiding happy_var_1) -> -	case happyOut70 happy_x_3 of { happy_var_3 -> -	case happyOutTok happy_x_4 of { (TokSymbol SymCloseParen happy_var_4) -> -	happyIn63-		 ((Hiding happy_var_3 , fuseRange happy_var_1 happy_var_4)-	) `HappyStk` happyRest}}}--happyReduce_237 = happyReduce 4# 58# happyReduction_237-happyReduction_237 (happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOutTok happy_x_1 of { (TokKeyword KwRenaming happy_var_1) -> -	case happyOut65 happy_x_3 of { happy_var_3 -> -	case happyOutTok happy_x_4 of { (TokSymbol SymCloseParen happy_var_4) -> -	happyIn64-		 ((happy_var_3 , fuseRange happy_var_1 happy_var_4)-	) `HappyStk` happyRest}}}--happyReduce_238 = happySpecReduce_3  59# happyReduction_238-happyReduction_238 happy_x_3-	happy_x_2-	happy_x_1-	 =  case happyOut66 happy_x_1 of { happy_var_1 -> -	case happyOut65 happy_x_3 of { happy_var_3 -> -	happyIn65-		 (happy_var_1 : happy_var_3-	)}}--happyReduce_239 = happySpecReduce_1  59# happyReduction_239-happyReduction_239 happy_x_1-	 =  case happyOut66 happy_x_1 of { happy_var_1 -> -	happyIn65-		 ([happy_var_1]-	)}--happyReduce_240 = happySpecReduce_3  60# happyReduction_240-happyReduction_240 happy_x_3-	happy_x_2-	happy_x_1-	 =  case happyOut67 happy_x_1 of { happy_var_1 -> -	case happyOutTok happy_x_2 of { (TokKeyword KwTo happy_var_2) -> -	case happyOut15 happy_x_3 of { happy_var_3 -> -	happyIn66-		 (Renaming happy_var_1 happy_var_3 (getRange happy_var_2)-	)}}}--happyReduce_241 = happySpecReduce_2  61# happyReduction_241-happyReduction_241 happy_x_2-	happy_x_1-	 =  case happyOut15 happy_x_2 of { happy_var_2 -> -	happyIn67-		 (ImportedName happy_var_2-	)}--happyReduce_242 = happySpecReduce_3  61# happyReduction_242-happyReduction_242 happy_x_3-	happy_x_2-	happy_x_1-	 =  case happyOut15 happy_x_3 of { happy_var_3 -> -	happyIn67-		 (ImportedModule happy_var_3-	)}--happyReduce_243 = happySpecReduce_1  62# happyReduction_243-happyReduction_243 happy_x_1-	 =  case happyOut15 happy_x_1 of { happy_var_1 -> -	happyIn68-		 (ImportedName happy_var_1-	)}--happyReduce_244 = happySpecReduce_2  62# happyReduction_244-happyReduction_244 happy_x_2-	happy_x_1-	 =  case happyOut15 happy_x_2 of { happy_var_2 -> -	happyIn68-		 (ImportedModule happy_var_2-	)}--happyReduce_245 = happySpecReduce_0  63# happyReduction_245-happyReduction_245  =  happyIn69-		 ([]-	)--happyReduce_246 = happySpecReduce_1  63# happyReduction_246-happyReduction_246 happy_x_1-	 =  case happyOut70 happy_x_1 of { happy_var_1 -> -	happyIn69-		 (happy_var_1-	)}--happyReduce_247 = happySpecReduce_1  64# happyReduction_247-happyReduction_247 happy_x_1-	 =  case happyOut68 happy_x_1 of { happy_var_1 -> -	happyIn70-		 ([happy_var_1]-	)}--happyReduce_248 = happySpecReduce_3  64# happyReduction_248-happyReduction_248 happy_x_3-	happy_x_2-	happy_x_1-	 =  case happyOut68 happy_x_1 of { happy_var_1 -> -	case happyOut70 happy_x_3 of { happy_var_3 -> -	happyIn70-		 (happy_var_1 : happy_var_3-	)}}--happyReduce_249 = happyMonadReduce 3# 65# happyReduction_249-happyReduction_249 (happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest) tk-	 = happyThen (case happyOut30 happy_x_1 of { happy_var_1 -> -	case happyOut74 happy_x_2 of { happy_var_2 -> -	case happyOut73 happy_x_3 of { happy_var_3 -> -	( exprToLHS happy_var_1 >>= \p -> return (p happy_var_2 happy_var_3))}}}-	) (\r -> happyReturn (happyIn71 r))--happyReduce_250 = happyReduce 4# 65# happyReduction_250-happyReduction_250 (happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOutTok happy_x_1 of { (TokSymbol SymEllipsis happy_var_1) -> -	case happyOut72 happy_x_2 of { happy_var_2 -> -	case happyOut74 happy_x_3 of { happy_var_3 -> -	case happyOut73 happy_x_4 of { happy_var_4 -> -	happyIn71-		 (Ellipsis (fuseRange happy_var_1 happy_var_3) happy_var_2 happy_var_3 happy_var_4-	) `HappyStk` happyRest}}}}--happyReduce_251 = happySpecReduce_0  66# happyReduction_251-happyReduction_251  =  happyIn72-		 ([]-	)--happyReduce_252 = happyMonadReduce 3# 66# happyReduction_252-happyReduction_252 (happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest) tk-	 = happyThen (case happyOut34 happy_x_2 of { happy_var_2 -> -	case happyOut72 happy_x_3 of { happy_var_3 -> -	( exprToPattern (RawApp (getRange happy_var_2) happy_var_2) >>= \p ->-		   return (p : happy_var_3))}}-	) (\r -> happyReturn (happyIn72 r))--happyReduce_253 = happySpecReduce_0  67# happyReduction_253-happyReduction_253  =  happyIn73-		 ([]-	)--happyReduce_254 = happySpecReduce_2  67# happyReduction_254-happyReduction_254 happy_x_2-	happy_x_1-	 =  case happyOut29 happy_x_2 of { happy_var_2 -> -	happyIn73-		 (case happy_var_2 of { WithApp _ e es -> e : es; e -> [e] }-	)}--happyReduce_255 = happySpecReduce_0  68# happyReduction_255-happyReduction_255  =  happyIn74-		 ([]-	)--happyReduce_256 = happySpecReduce_2  68# happyReduction_256-happyReduction_256 happy_x_2-	happy_x_1-	 =  case happyOut29 happy_x_2 of { happy_var_2 -> -	happyIn74-		 (case happy_var_2 of { WithApp _ e es -> e : es; e -> [e] }-	)}--happyReduce_257 = happySpecReduce_0  69# happyReduction_257-happyReduction_257  =  happyIn75-		 (NoWhere-	)--happyReduce_258 = happySpecReduce_2  69# happyReduction_258-happyReduction_258 happy_x_2-	happy_x_1-	 =  case happyOut130 happy_x_2 of { happy_var_2 -> -	happyIn75-		 (AnyWhere happy_var_2-	)}--happyReduce_259 = happyReduce 4# 69# happyReduction_259-happyReduction_259 (happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOut15 happy_x_2 of { happy_var_2 -> -	case happyOut130 happy_x_4 of { happy_var_4 -> -	happyIn75-		 (SomeWhere happy_var_2 happy_var_4-	) `HappyStk` happyRest}}--happyReduce_260 = happySpecReduce_1  70# happyReduction_260-happyReduction_260 happy_x_1-	 =  case happyOut78 happy_x_1 of { happy_var_1 -> -	happyIn76-		 ([happy_var_1]-	)}--happyReduce_261 = happySpecReduce_1  70# happyReduction_261-happyReduction_261 happy_x_1-	 =  case happyOut89 happy_x_1 of { happy_var_1 -> -	happyIn76-		 (happy_var_1-	)}--happyReduce_262 = happySpecReduce_1  70# happyReduction_262-happyReduction_262 happy_x_1-	 =  case happyOut81 happy_x_1 of { happy_var_1 -> -	happyIn76-		 ([happy_var_1]-	)}--happyReduce_263 = happySpecReduce_1  70# happyReduction_263-happyReduction_263 happy_x_1-	 =  case happyOut83 happy_x_1 of { happy_var_1 -> -	happyIn76-		 ([happy_var_1]-	)}--happyReduce_264 = happySpecReduce_1  70# happyReduction_264-happyReduction_264 happy_x_1-	 =  case happyOut84 happy_x_1 of { happy_var_1 -> -	happyIn76-		 ([happy_var_1]-	)}--happyReduce_265 = happySpecReduce_1  70# happyReduction_265-happyReduction_265 happy_x_1-	 =  case happyOut85 happy_x_1 of { happy_var_1 -> -	happyIn76-		 ([happy_var_1]-	)}--happyReduce_266 = happySpecReduce_1  70# happyReduction_266-happyReduction_266 happy_x_1-	 =  case happyOut86 happy_x_1 of { happy_var_1 -> -	happyIn76-		 ([happy_var_1]-	)}--happyReduce_267 = happySpecReduce_1  70# happyReduction_267-happyReduction_267 happy_x_1-	 =  case happyOut88 happy_x_1 of { happy_var_1 -> -	happyIn76-		 ([happy_var_1]-	)}--happyReduce_268 = happySpecReduce_1  70# happyReduction_268-happyReduction_268 happy_x_1-	 =  case happyOut90 happy_x_1 of { happy_var_1 -> -	happyIn76-		 ([happy_var_1]-	)}--happyReduce_269 = happySpecReduce_1  70# happyReduction_269-happyReduction_269 happy_x_1-	 =  case happyOut91 happy_x_1 of { happy_var_1 -> -	happyIn76-		 ([happy_var_1]-	)}--happyReduce_270 = happySpecReduce_1  70# happyReduction_270-happyReduction_270 happy_x_1-	 =  case happyOut92 happy_x_1 of { happy_var_1 -> -	happyIn76-		 ([happy_var_1]-	)}--happyReduce_271 = happySpecReduce_1  70# happyReduction_271-happyReduction_271 happy_x_1-	 =  case happyOut93 happy_x_1 of { happy_var_1 -> -	happyIn76-		 ([happy_var_1]-	)}--happyReduce_272 = happySpecReduce_1  70# happyReduction_272-happyReduction_272 happy_x_1-	 =  case happyOut94 happy_x_1 of { happy_var_1 -> -	happyIn76-		 ([happy_var_1]-	)}--happyReduce_273 = happySpecReduce_1  70# happyReduction_273-happyReduction_273 happy_x_1-	 =  case happyOut100 happy_x_1 of { happy_var_1 -> -	happyIn76-		 ([happy_var_1]-	)}--happyReduce_274 = happySpecReduce_1  70# happyReduction_274-happyReduction_274 happy_x_1-	 =  case happyOut104 happy_x_1 of { happy_var_1 -> -	happyIn76-		 ([happy_var_1]-	)}--happyReduce_275 = happySpecReduce_1  70# happyReduction_275-happyReduction_275 happy_x_1-	 =  case happyOut103 happy_x_1 of { happy_var_1 -> -	happyIn76-		 ([happy_var_1]-	)}--happyReduce_276 = happySpecReduce_1  70# happyReduction_276-happyReduction_276 happy_x_1-	 =  case happyOut105 happy_x_1 of { happy_var_1 -> -	happyIn76-		 ([happy_var_1]-	)}--happyReduce_277 = happySpecReduce_1  70# happyReduction_277-happyReduction_277 happy_x_1-	 =  case happyOut108 happy_x_1 of { happy_var_1 -> -	happyIn76-		 ([happy_var_1]-	)}--happyReduce_278 = happySpecReduce_1  70# happyReduction_278-happyReduction_278 happy_x_1-	 =  case happyOut95 happy_x_1 of { happy_var_1 -> -	happyIn76-		 ([happy_var_1]-	)}--happyReduce_279 = happySpecReduce_3  71# happyReduction_279-happyReduction_279 happy_x_3-	happy_x_2-	happy_x_1-	 =  case happyOut16 happy_x_1 of { happy_var_1 -> -	case happyOut29 happy_x_3 of { happy_var_3 -> -	happyIn77-		 (map (flip (TypeSig Relevant) happy_var_3) happy_var_1-	)}}--happyReduce_280 = happyReduce 4# 72# happyReduction_280-happyReduction_280 (happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOut15 happy_x_2 of { happy_var_2 -> -	case happyOut29 happy_x_4 of { happy_var_4 -> -	happyIn78-		 (TypeSig Irrelevant happy_var_2 happy_var_4-	) `HappyStk` happyRest}}--happyReduce_281 = happySpecReduce_3  72# happyReduction_281-happyReduction_281 happy_x_3-	happy_x_2-	happy_x_1-	 =  case happyOut15 happy_x_1 of { happy_var_1 -> -	case happyOut29 happy_x_3 of { happy_var_3 -> -	happyIn78-		 (TypeSig Relevant happy_var_1 happy_var_3-	)}}--happyReduce_282 = happySpecReduce_3  73# happyReduction_282-happyReduction_282 happy_x_3-	happy_x_2-	happy_x_1-	 =  case happyOut19 happy_x_1 of { happy_var_1 -> -	case happyOut29 happy_x_3 of { happy_var_3 -> -	happyIn79-		 (map (\ (Arg _ rel x) -> TypeSig rel x happy_var_3) happy_var_1-	)}}--happyReduce_283 = happySpecReduce_3  74# happyReduction_283-happyReduction_283 happy_x_3-	happy_x_2-	happy_x_1-	 =  case happyOut20 happy_x_1 of { happy_var_1 -> -	case happyOut29 happy_x_3 of { happy_var_3 -> -	happyIn80-		 (map (fmap (flip (TypeSig Relevant) happy_var_3)) happy_var_1-	)}}--happyReduce_284 = happySpecReduce_3  75# happyReduction_284-happyReduction_284 happy_x_3-	happy_x_2-	happy_x_1-	 =  case happyOut71 happy_x_1 of { happy_var_1 -> -	case happyOut82 happy_x_2 of { happy_var_2 -> -	case happyOut75 happy_x_3 of { happy_var_3 -> -	happyIn81-		 (FunClause happy_var_1 happy_var_2 happy_var_3-	)}}}--happyReduce_285 = happySpecReduce_2  76# happyReduction_285-happyReduction_285 happy_x_2-	happy_x_1-	 =  case happyOut29 happy_x_2 of { happy_var_2 -> -	happyIn82-		 (RHS happy_var_2-	)}--happyReduce_286 = happySpecReduce_0  76# happyReduction_286-happyReduction_286  =  happyIn82-		 (AbsurdRHS-	)--happyReduce_287 = happyReduce 7# 77# happyReduction_287-happyReduction_287 (happy_x_7 `HappyStk`-	happy_x_6 `HappyStk`-	happy_x_5 `HappyStk`-	happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOutTok happy_x_1 of { (TokKeyword KwData happy_var_1) -> -	case happyOut15 happy_x_2 of { happy_var_2 -> -	case happyOut56 happy_x_3 of { happy_var_3 -> -	case happyOut29 happy_x_5 of { happy_var_5 -> -	case happyOutTok happy_x_6 of { (TokKeyword KwWhere happy_var_6) -> -	case happyOut128 happy_x_7 of { happy_var_7 -> -	happyIn83-		 (Data (getRange (happy_var_1, happy_var_6, happy_var_7)) Inductive happy_var_2 happy_var_3 (Just happy_var_5) happy_var_7-	) `HappyStk` happyRest}}}}}}--happyReduce_288 = happyReduce 7# 77# happyReduction_288-happyReduction_288 (happy_x_7 `HappyStk`-	happy_x_6 `HappyStk`-	happy_x_5 `HappyStk`-	happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOutTok happy_x_1 of { (TokKeyword KwCoData happy_var_1) -> -	case happyOut15 happy_x_2 of { happy_var_2 -> -	case happyOut56 happy_x_3 of { happy_var_3 -> -	case happyOut29 happy_x_5 of { happy_var_5 -> -	case happyOutTok happy_x_6 of { (TokKeyword KwWhere happy_var_6) -> -	case happyOut128 happy_x_7 of { happy_var_7 -> -	happyIn83-		 (Data (getRange (happy_var_1, happy_var_6, happy_var_7)) CoInductive happy_var_2 happy_var_3 (Just happy_var_5) happy_var_7-	) `HappyStk` happyRest}}}}}}--happyReduce_289 = happyReduce 5# 77# happyReduction_289-happyReduction_289 (happy_x_5 `HappyStk`-	happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOutTok happy_x_1 of { (TokKeyword KwData happy_var_1) -> -	case happyOut15 happy_x_2 of { happy_var_2 -> -	case happyOut56 happy_x_3 of { happy_var_3 -> -	case happyOutTok happy_x_4 of { (TokKeyword KwWhere happy_var_4) -> -	case happyOut128 happy_x_5 of { happy_var_5 -> -	happyIn83-		 (Data (getRange (happy_var_1, happy_var_4, happy_var_5)) Inductive happy_var_2 happy_var_3 Nothing happy_var_5-	) `HappyStk` happyRest}}}}}--happyReduce_290 = happyReduce 5# 77# happyReduction_290-happyReduction_290 (happy_x_5 `HappyStk`-	happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOutTok happy_x_1 of { (TokKeyword KwCoData happy_var_1) -> -	case happyOut15 happy_x_2 of { happy_var_2 -> -	case happyOut56 happy_x_3 of { happy_var_3 -> -	case happyOutTok happy_x_4 of { (TokKeyword KwWhere happy_var_4) -> -	case happyOut128 happy_x_5 of { happy_var_5 -> -	happyIn83-		 (Data (getRange (happy_var_1, happy_var_4, happy_var_5)) CoInductive happy_var_2 happy_var_3 Nothing happy_var_5-	) `HappyStk` happyRest}}}}}--happyReduce_291 = happyReduce 5# 78# happyReduction_291-happyReduction_291 (happy_x_5 `HappyStk`-	happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOutTok happy_x_1 of { (TokKeyword KwData happy_var_1) -> -	case happyOut15 happy_x_2 of { happy_var_2 -> -	case happyOut56 happy_x_3 of { happy_var_3 -> -	case happyOut29 happy_x_5 of { happy_var_5 -> -	happyIn84-		 (DataSig (fuseRange happy_var_1 happy_var_5) Inductive happy_var_2 happy_var_3 happy_var_5-	) `HappyStk` happyRest}}}}--happyReduce_292 = happyReduce 7# 79# happyReduction_292-happyReduction_292 (happy_x_7 `HappyStk`-	happy_x_6 `HappyStk`-	happy_x_5 `HappyStk`-	happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOutTok happy_x_1 of { (TokKeyword KwRecord happy_var_1) -> -	case happyOut15 happy_x_2 of { happy_var_2 -> -	case happyOut56 happy_x_3 of { happy_var_3 -> -	case happyOut29 happy_x_5 of { happy_var_5 -> -	case happyOutTok happy_x_6 of { (TokKeyword KwWhere happy_var_6) -> -	case happyOut129 happy_x_7 of { happy_var_7 -> -	happyIn85-		 (Record (getRange (happy_var_1, happy_var_6, happy_var_7)) happy_var_2 (fst happy_var_7) happy_var_3 (Just happy_var_5) (snd happy_var_7)-	) `HappyStk` happyRest}}}}}}--happyReduce_293 = happyReduce 5# 79# happyReduction_293-happyReduction_293 (happy_x_5 `HappyStk`-	happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOutTok happy_x_1 of { (TokKeyword KwRecord happy_var_1) -> -	case happyOut15 happy_x_2 of { happy_var_2 -> -	case happyOut56 happy_x_3 of { happy_var_3 -> -	case happyOutTok happy_x_4 of { (TokKeyword KwWhere happy_var_4) -> -	case happyOut129 happy_x_5 of { happy_var_5 -> -	happyIn85-		 (Record (getRange (happy_var_1, happy_var_4, happy_var_5)) happy_var_2 (fst happy_var_5) happy_var_3 Nothing (snd happy_var_5)-	) `HappyStk` happyRest}}}}}--happyReduce_294 = happyReduce 5# 80# happyReduction_294-happyReduction_294 (happy_x_5 `HappyStk`-	happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOutTok happy_x_1 of { (TokKeyword KwRecord happy_var_1) -> -	case happyOut15 happy_x_2 of { happy_var_2 -> -	case happyOut56 happy_x_3 of { happy_var_3 -> -	case happyOut29 happy_x_5 of { happy_var_5 -> -	happyIn86-		 (RecordSig (fuseRange happy_var_1 happy_var_5) happy_var_2 happy_var_3 happy_var_5-	) `HappyStk` happyRest}}}}--happyReduce_295 = happySpecReduce_2  81# happyReduction_295-happyReduction_295 happy_x_2-	happy_x_1-	 =  case happyOut15 happy_x_2 of { happy_var_2 -> -	happyIn87-		 (happy_var_2-	)}--happyReduce_296 = happySpecReduce_3  82# happyReduction_296-happyReduction_296 happy_x_3-	happy_x_2-	happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwInfix happy_var_1) -> -	case happyOut14 happy_x_2 of { happy_var_2 -> -	case happyOut24 happy_x_3 of { happy_var_3 -> -	happyIn88-		 (Infix (NonAssoc (fuseRange happy_var_1 happy_var_3) happy_var_2) happy_var_3-	)}}}--happyReduce_297 = happySpecReduce_3  82# happyReduction_297-happyReduction_297 happy_x_3-	happy_x_2-	happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwInfixL happy_var_1) -> -	case happyOut14 happy_x_2 of { happy_var_2 -> -	case happyOut24 happy_x_3 of { happy_var_3 -> -	happyIn88-		 (Infix (LeftAssoc (fuseRange happy_var_1 happy_var_3) happy_var_2) happy_var_3-	)}}}--happyReduce_298 = happySpecReduce_3  82# happyReduction_298-happyReduction_298 happy_x_3-	happy_x_2-	happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwInfixR happy_var_1) -> -	case happyOut14 happy_x_2 of { happy_var_2 -> -	case happyOut24 happy_x_3 of { happy_var_3 -> -	happyIn88-		 (Infix (RightAssoc (fuseRange happy_var_1 happy_var_3) happy_var_2) happy_var_3-	)}}}--happyReduce_299 = happySpecReduce_2  83# happyReduction_299-happyReduction_299 happy_x_2-	happy_x_1-	 =  case happyOut126 happy_x_2 of { happy_var_2 -> -	happyIn89-		 (let toField (Arg h rel (TypeSig _ x t)) = Field x (Arg h rel t) in map toField happy_var_2-	)}--happyReduce_300 = happySpecReduce_2  84# happyReduction_300-happyReduction_300 happy_x_2-	happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwMutual happy_var_1) -> -	case happyOut130 happy_x_2 of { happy_var_2 -> -	happyIn90-		 (Mutual (fuseRange happy_var_1 happy_var_2) happy_var_2-	)}}--happyReduce_301 = happySpecReduce_2  85# happyReduction_301-happyReduction_301 happy_x_2-	happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwAbstract happy_var_1) -> -	case happyOut130 happy_x_2 of { happy_var_2 -> -	happyIn91-		 (Abstract (fuseRange happy_var_1 happy_var_2) happy_var_2-	)}}--happyReduce_302 = happySpecReduce_2  86# happyReduction_302-happyReduction_302 happy_x_2-	happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwPrivate happy_var_1) -> -	case happyOut130 happy_x_2 of { happy_var_2 -> -	happyIn92-		 (Private (fuseRange happy_var_1 happy_var_2) happy_var_2-	)}}--happyReduce_303 = happySpecReduce_2  87# happyReduction_303-happyReduction_303 happy_x_2-	happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwPostulate happy_var_1) -> -	case happyOut124 happy_x_2 of { happy_var_2 -> -	happyIn93-		 (Postulate (fuseRange happy_var_1 happy_var_2) happy_var_2-	)}}--happyReduce_304 = happySpecReduce_2  88# happyReduction_304-happyReduction_304 happy_x_2-	happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwPrimitive happy_var_1) -> -	case happyOut122 happy_x_2 of { happy_var_2 -> -	happyIn94-		 (Primitive (fuseRange happy_var_1 happy_var_2) happy_var_2-	)}}--happyReduce_305 = happyMonadReduce 5# 89# happyReduction_305-happyReduction_305 (happy_x_5 `HappyStk`-	happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest) tk-	 = happyThen (case happyOut15 happy_x_2 of { happy_var_2 -> -	case happyOut97 happy_x_3 of { happy_var_3 -> -	case happyOut96 happy_x_5 of { happy_var_5 -> -	(-  case happy_var_2 of-    Name _ [_] -> case mkNotation happy_var_3 happy_var_5 of-      Left err -> parseError $ "malformed syntax declaration: " ++ err-      Right n -> return $ Syntax happy_var_2 n-    _ -> parseError "syntax declarations are allowed only for simple names (without holes)")}}}-	) (\r -> happyReturn (happyIn95 r))--happyReduce_306 = happySpecReduce_1  90# happyReduction_306-happyReduction_306 happy_x_1-	 =  case happyOut99 happy_x_1 of { happy_var_1 -> -	happyIn96-		 ([happy_var_1]-	)}--happyReduce_307 = happySpecReduce_2  90# happyReduction_307-happyReduction_307 happy_x_2-	happy_x_1-	 =  case happyOut96 happy_x_1 of { happy_var_1 -> -	case happyOut99 happy_x_2 of { happy_var_2 -> -	happyIn96-		 (happy_var_1 ++ [happy_var_2]-	)}}--happyReduce_308 = happySpecReduce_1  91# happyReduction_308-happyReduction_308 happy_x_1-	 =  case happyOut98 happy_x_1 of { happy_var_1 -> -	happyIn97-		 ([happy_var_1]-	)}--happyReduce_309 = happySpecReduce_2  91# happyReduction_309-happyReduction_309 happy_x_2-	happy_x_1-	 =  case happyOut97 happy_x_1 of { happy_var_1 -> -	case happyOut98 happy_x_2 of { happy_var_2 -> -	happyIn97-		 (happy_var_1 ++ [happy_var_2]-	)}}--happyReduce_310 = happySpecReduce_1  92# happyReduction_310-happyReduction_310 happy_x_1-	 =  case happyOut99 happy_x_1 of { happy_var_1 -> -	happyIn98-		 (ExprHole happy_var_1-	)}--happyReduce_311 = happyReduce 6# 92# happyReduction_311-happyReduction_311 (happy_x_6 `HappyStk`-	happy_x_5 `HappyStk`-	happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOut99 happy_x_3 of { happy_var_3 -> -	case happyOut99 happy_x_5 of { happy_var_5 -> -	happyIn98-		 (LambdaHole happy_var_3 happy_var_5-	) `HappyStk` happyRest}}--happyReduce_312 = happySpecReduce_1  93# happyReduction_312-happyReduction_312 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokId happy_var_1) -> -	happyIn99-		 (snd happy_var_1-	)}--happyReduce_313 = happyReduce 4# 94# happyReduction_313-happyReduction_313 (happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOutTok happy_x_1 of { (TokKeyword KwOpen happy_var_1) -> -	case happyOut22 happy_x_2 of { happy_var_2 -> -	case happyOut101 happy_x_3 of { happy_var_3 -> -	case happyOut60 happy_x_4 of { happy_var_4 -> -	happyIn100-		 (let-    { m   = happy_var_2-    ; es  = happy_var_3-    ; dir = happy_var_4-    ; r   = getRange (happy_var_1, m, es, dir)-    } in-    case es of-    { []  -> Open r m dir-	; _   -> Private r [ ModuleMacro r (noName $ beginningOf $ getRange happy_var_2)-			     (SectionApp (getRange (m , es)) [] (RawApp (fuseRange m es) (Ident m : es)))-			     DoOpen dir-                       ]-    }-	) `HappyStk` happyRest}}}}--happyReduce_314 = happyReduce 6# 94# happyReduction_314-happyReduction_314 (happy_x_6 `HappyStk`-	happy_x_5 `HappyStk`-	happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOutTok happy_x_1 of { (TokKeyword KwOpen happy_var_1) -> -	case happyOut22 happy_x_2 of { happy_var_2 -> -	case happyOutTok happy_x_3 of { (TokSymbol SymDoubleOpenBrace happy_var_3) -> -	case happyOutTok happy_x_4 of { (TokSymbol SymEllipsis happy_var_4) -> -	case happyOut60 happy_x_6 of { happy_var_6 -> -	happyIn100-		 (let r = getRange (happy_var_1, happy_var_2, happy_var_3, happy_var_4) in-    Private r [ ModuleMacro r (noName $ beginningOf $ getRange happy_var_2)-    	      	(RecordModuleIFS r happy_var_2) DoOpen happy_var_6-        ]-	) `HappyStk` happyRest}}}}}--happyReduce_315 = happySpecReduce_0  95# happyReduction_315-happyReduction_315  =  happyIn101-		 ([]-	)--happyReduce_316 = happySpecReduce_2  95# happyReduction_316-happyReduction_316 happy_x_2-	happy_x_1-	 =  case happyOut37 happy_x_1 of { happy_var_1 -> -	case happyOut101 happy_x_2 of { happy_var_2 -> -	happyIn101-		 (happy_var_1 : happy_var_2-	)}}--happyReduce_317 = happyReduce 4# 96# happyReduction_317-happyReduction_317 (happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOut22 happy_x_1 of { happy_var_1 -> -	case happyOut17 happy_x_4 of { happy_var_4 -> -	happyIn102-		 ((\ts ->-		    if null ts then return $ RecordModuleIFS (getRange (happy_var_1, happy_var_4)) happy_var_1-		    else parseError "No bindings allowed for record module with non-canonical implicits" )-	) `HappyStk` happyRest}}--happyReduce_318 = happySpecReduce_2  96# happyReduction_318-happyReduction_318 happy_x_2-	happy_x_1-	 =  case happyOut22 happy_x_1 of { happy_var_1 -> -	case happyOut101 happy_x_2 of { happy_var_2 -> -	happyIn102-		 ((\ts -> return $ SectionApp (getRange (happy_var_1, happy_var_2)) ts (RawApp (fuseRange happy_var_1 happy_var_2) (Ident happy_var_1 : happy_var_2)) )-	)}}--happyReduce_319 = happyMonadReduce 6# 97# happyReduction_319-happyReduction_319 (happy_x_6 `HappyStk`-	happy_x_5 `HappyStk`-	happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest) tk-	 = happyThen (case happyOutTok happy_x_1 of { (TokKeyword KwModule happy_var_1) -> -	case happyOut15 happy_x_2 of { happy_var_2 -> -	case happyOut56 happy_x_3 of { happy_var_3 -> -	case happyOut102 happy_x_5 of { happy_var_5 -> -	case happyOut60 happy_x_6 of { happy_var_6 -> -	( do {ma <- happy_var_5 (map addType happy_var_3); return $ ModuleMacro (getRange (happy_var_1, ma, happy_var_6)) happy_var_2 ma DontOpen happy_var_6 })}}}}}-	) (\r -> happyReturn (happyIn103 r))--happyReduce_320 = happyMonadReduce 7# 97# happyReduction_320-happyReduction_320 (happy_x_7 `HappyStk`-	happy_x_6 `HappyStk`-	happy_x_5 `HappyStk`-	happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest) tk-	 = happyThen (case happyOutTok happy_x_1 of { (TokKeyword KwOpen happy_var_1) -> -	case happyOut15 happy_x_3 of { happy_var_3 -> -	case happyOut56 happy_x_4 of { happy_var_4 -> -	case happyOut102 happy_x_6 of { happy_var_6 -> -	case happyOut60 happy_x_7 of { happy_var_7 -> -	( do {ma <- happy_var_6 (map addType happy_var_4); return $ ModuleMacro (getRange (happy_var_1, ma, happy_var_7)) happy_var_3 ma DoOpen happy_var_7 })}}}}}-	) (\r -> happyReturn (happyIn103 r))--happyReduce_321 = happySpecReduce_3  98# happyReduction_321-happyReduction_321 happy_x_3-	happy_x_2-	happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwImport happy_var_1) -> -	case happyOut22 happy_x_2 of { happy_var_2 -> -	case happyOut59 happy_x_3 of { happy_var_3 -> -	happyIn104-		 (Import (getRange (happy_var_1,happy_var_2,snd happy_var_3)) happy_var_2 (fst happy_var_3) DontOpen (snd happy_var_3)-	)}}}--happyReduce_322 = happyReduce 4# 98# happyReduction_322-happyReduction_322 (happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOutTok happy_x_1 of { (TokKeyword KwOpen happy_var_1) -> -	case happyOut22 happy_x_3 of { happy_var_3 -> -	case happyOut59 happy_x_4 of { happy_var_4 -> -	happyIn104-		 (Import (getRange (happy_var_1,happy_var_3,snd happy_var_4)) happy_var_3 (fst happy_var_4) DoOpen (snd happy_var_4)-	) `HappyStk` happyRest}}}--happyReduce_323 = happyReduce 5# 99# happyReduction_323-happyReduction_323 (happy_x_5 `HappyStk`-	happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOutTok happy_x_1 of { (TokKeyword KwModule happy_var_1) -> -	case happyOut15 happy_x_2 of { happy_var_2 -> -	case happyOut56 happy_x_3 of { happy_var_3 -> -	case happyOutTok happy_x_4 of { (TokKeyword KwWhere happy_var_4) -> -	case happyOut131 happy_x_5 of { happy_var_5 -> -	happyIn105-		 (Module (getRange (happy_var_1,happy_var_4,happy_var_5)) (QName happy_var_2) (map addType happy_var_3) happy_var_5-	) `HappyStk` happyRest}}}}}--happyReduce_324 = happySpecReduce_1  100# happyReduction_324-happyReduction_324 happy_x_1-	 =  case happyOut107 happy_x_1 of { happy_var_1 -> -	happyIn106-		 ([happy_var_1]-	)}--happyReduce_325 = happySpecReduce_2  100# happyReduction_325-happyReduction_325 happy_x_2-	happy_x_1-	 =  case happyOut104 happy_x_1 of { happy_var_1 -> -	case happyOut106 happy_x_2 of { happy_var_2 -> -	happyIn106-		 (happy_var_1 : happy_var_2-	)}}--happyReduce_326 = happySpecReduce_2  100# happyReduction_326-happyReduction_326 happy_x_2-	happy_x_1-	 =  case happyOut100 happy_x_1 of { happy_var_1 -> -	case happyOut106 happy_x_2 of { happy_var_2 -> -	happyIn106-		 (happy_var_1 : happy_var_2-	)}}--happyReduce_327 = happyReduce 5# 101# happyReduction_327-happyReduction_327 (happy_x_5 `HappyStk`-	happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOutTok happy_x_1 of { (TokKeyword KwModule happy_var_1) -> -	case happyOut22 happy_x_2 of { happy_var_2 -> -	case happyOut56 happy_x_3 of { happy_var_3 -> -	case happyOutTok happy_x_4 of { (TokKeyword KwWhere happy_var_4) -> -	case happyOut131 happy_x_5 of { happy_var_5 -> -	happyIn107-		 (Module (getRange (happy_var_1,happy_var_4,happy_var_5)) happy_var_2 (map addType happy_var_3) happy_var_5-	) `HappyStk` happyRest}}}}}--happyReduce_328 = happySpecReduce_1  102# happyReduction_328-happyReduction_328 happy_x_1-	 =  case happyOut110 happy_x_1 of { happy_var_1 -> -	happyIn108-		 (Pragma happy_var_1-	)}--happyReduce_329 = happySpecReduce_1  103# happyReduction_329-happyReduction_329 happy_x_1-	 =  case happyOut111 happy_x_1 of { happy_var_1 -> -	happyIn109-		 (happy_var_1-	)}--happyReduce_330 = happySpecReduce_1  104# happyReduction_330-happyReduction_330 happy_x_1-	 =  case happyOut112 happy_x_1 of { happy_var_1 -> -	happyIn110-		 (happy_var_1-	)}--happyReduce_331 = happySpecReduce_1  104# happyReduction_331-happyReduction_331 happy_x_1-	 =  case happyOut113 happy_x_1 of { happy_var_1 -> -	happyIn110-		 (happy_var_1-	)}--happyReduce_332 = happySpecReduce_1  104# happyReduction_332-happyReduction_332 happy_x_1-	 =  case happyOut115 happy_x_1 of { happy_var_1 -> -	happyIn110-		 (happy_var_1-	)}--happyReduce_333 = happySpecReduce_1  104# happyReduction_333-happyReduction_333 happy_x_1-	 =  case happyOut114 happy_x_1 of { happy_var_1 -> -	happyIn110-		 (happy_var_1-	)}--happyReduce_334 = happySpecReduce_1  104# happyReduction_334-happyReduction_334 happy_x_1-	 =  case happyOut116 happy_x_1 of { happy_var_1 -> -	happyIn110-		 (happy_var_1-	)}--happyReduce_335 = happySpecReduce_1  104# happyReduction_335-happyReduction_335 happy_x_1-	 =  case happyOut117 happy_x_1 of { happy_var_1 -> -	happyIn110-		 (happy_var_1-	)}--happyReduce_336 = happySpecReduce_1  104# happyReduction_336-happyReduction_336 happy_x_1-	 =  case happyOut118 happy_x_1 of { happy_var_1 -> -	happyIn110-		 (happy_var_1-	)}--happyReduce_337 = happySpecReduce_1  104# happyReduction_337-happyReduction_337 happy_x_1-	 =  case happyOut120 happy_x_1 of { happy_var_1 -> -	happyIn110-		 (happy_var_1-	)}--happyReduce_338 = happySpecReduce_1  104# happyReduction_338-happyReduction_338 happy_x_1-	 =  case happyOut121 happy_x_1 of { happy_var_1 -> -	happyIn110-		 (happy_var_1-	)}--happyReduce_339 = happySpecReduce_1  104# happyReduction_339-happyReduction_339 happy_x_1-	 =  case happyOut119 happy_x_1 of { happy_var_1 -> -	happyIn110-		 (happy_var_1-	)}--happyReduce_340 = happyReduce 4# 105# happyReduction_340-happyReduction_340 (happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOutTok happy_x_1 of { (TokSymbol SymOpenPragma happy_var_1) -> -	case happyOut27 happy_x_3 of { happy_var_3 -> -	case happyOutTok happy_x_4 of { (TokSymbol SymClosePragma happy_var_4) -> -	happyIn111-		 (OptionsPragma (fuseRange happy_var_1 happy_var_4) happy_var_3-	) `HappyStk` happyRest}}}--happyReduce_341 = happyReduce 5# 106# happyReduction_341-happyReduction_341 (happy_x_5 `HappyStk`-	happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOutTok happy_x_1 of { (TokSymbol SymOpenPragma happy_var_1) -> -	case happyOutTok happy_x_3 of { (TokString happy_var_3) -> -	case happyOut28 happy_x_4 of { happy_var_4 -> -	case happyOutTok happy_x_5 of { (TokSymbol SymClosePragma happy_var_5) -> -	happyIn112-		 (BuiltinPragma (fuseRange happy_var_1 happy_var_5) (snd happy_var_3) (Ident happy_var_4)-	) `HappyStk` happyRest}}}}--happyReduce_342 = happyReduce 5# 107# happyReduction_342-happyReduction_342 (happy_x_5 `HappyStk`-	happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOutTok happy_x_1 of { (TokSymbol SymOpenPragma happy_var_1) -> -	case happyOut28 happy_x_3 of { happy_var_3 -> -	case happyOut27 happy_x_4 of { happy_var_4 -> -	case happyOutTok happy_x_5 of { (TokSymbol SymClosePragma happy_var_5) -> -	happyIn113-		 (CompiledPragma (fuseRange happy_var_1 happy_var_5) happy_var_3 (unwords happy_var_4)-	) `HappyStk` happyRest}}}}--happyReduce_343 = happyReduce 5# 108# happyReduction_343-happyReduction_343 (happy_x_5 `HappyStk`-	happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOutTok happy_x_1 of { (TokSymbol SymOpenPragma happy_var_1) -> -	case happyOut28 happy_x_3 of { happy_var_3 -> -	case happyOut27 happy_x_4 of { happy_var_4 -> -	case happyOutTok happy_x_5 of { (TokSymbol SymClosePragma happy_var_5) -> -	happyIn114-		 (CompiledTypePragma (fuseRange happy_var_1 happy_var_5) happy_var_3 (unwords happy_var_4)-	) `HappyStk` happyRest}}}}--happyReduce_344 = happyReduce 6# 109# happyReduction_344-happyReduction_344 (happy_x_6 `HappyStk`-	happy_x_5 `HappyStk`-	happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOutTok happy_x_1 of { (TokSymbol SymOpenPragma happy_var_1) -> -	case happyOut28 happy_x_3 of { happy_var_3 -> -	case happyOutTok happy_x_4 of { (TokString happy_var_4) -> -	case happyOut27 happy_x_5 of { happy_var_5 -> -	case happyOutTok happy_x_6 of { (TokSymbol SymClosePragma happy_var_6) -> -	happyIn115-		 (CompiledDataPragma (fuseRange happy_var_1 happy_var_6) happy_var_3 (snd happy_var_4) happy_var_5-	) `HappyStk` happyRest}}}}}--happyReduce_345 = happyReduce 5# 110# happyReduction_345-happyReduction_345 (happy_x_5 `HappyStk`-	happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOutTok happy_x_1 of { (TokSymbol SymOpenPragma happy_var_1) -> -	case happyOut28 happy_x_3 of { happy_var_3 -> -	case happyOut27 happy_x_4 of { happy_var_4 -> -	case happyOutTok happy_x_5 of { (TokSymbol SymClosePragma happy_var_5) -> -	happyIn116-		 (CompiledEpicPragma (fuseRange happy_var_1 happy_var_5) happy_var_3 (unwords happy_var_4)-	) `HappyStk` happyRest}}}}--happyReduce_346 = happyReduce 5# 111# happyReduction_346-happyReduction_346 (happy_x_5 `HappyStk`-	happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOutTok happy_x_1 of { (TokSymbol SymOpenPragma happy_var_1) -> -	case happyOut28 happy_x_3 of { happy_var_3 -> -	case happyOut27 happy_x_4 of { happy_var_4 -> -	case happyOutTok happy_x_5 of { (TokSymbol SymClosePragma happy_var_5) -> -	happyIn117-		 (CompiledJSPragma (fuseRange happy_var_1 happy_var_5) happy_var_3 (unwords happy_var_4)-	) `HappyStk` happyRest}}}}--happyReduce_347 = happyReduce 4# 112# happyReduction_347-happyReduction_347 (happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOutTok happy_x_1 of { (TokSymbol SymOpenPragma happy_var_1) -> -	case happyOut28 happy_x_3 of { happy_var_3 -> -	case happyOutTok happy_x_4 of { (TokSymbol SymClosePragma happy_var_4) -> -	happyIn118-		 (StaticPragma (fuseRange happy_var_1 happy_var_4) happy_var_3-	) `HappyStk` happyRest}}}--happyReduce_348 = happyReduce 4# 113# happyReduction_348-happyReduction_348 (happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOutTok happy_x_1 of { (TokSymbol SymOpenPragma happy_var_1) -> -	case happyOut28 happy_x_3 of { happy_var_3 -> -	case happyOutTok happy_x_4 of { (TokSymbol SymClosePragma happy_var_4) -> -	happyIn119-		 (EtaPragma (fuseRange happy_var_1 happy_var_4) happy_var_3-	) `HappyStk` happyRest}}}--happyReduce_349 = happyMonadReduce 4# 114# happyReduction_349-happyReduction_349 (happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest) tk-	 = happyThen (case happyOutTok happy_x_1 of { (TokSymbol SymOpenPragma happy_var_1) -> -	case happyOutTok happy_x_3 of { (TokString happy_var_3) -> -	case happyOutTok happy_x_4 of { (TokSymbol SymClosePragma happy_var_4) -> -	( let s = snd happy_var_3 in-       if validHaskellModuleName s-       then return $ ImportPragma (fuseRange happy_var_1 happy_var_4) s-       else parseError $ "Malformed module name: " ++ s ++ ".")}}}-	) (\r -> happyReturn (happyIn120 r))--happyReduce_350 = happySpecReduce_3  115# happyReduction_350-happyReduction_350 happy_x_3-	happy_x_2-	happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymOpenPragma happy_var_1) -> -	case happyOutTok happy_x_3 of { (TokSymbol SymClosePragma happy_var_3) -> -	happyIn121-		 (ImpossiblePragma (fuseRange happy_var_1 happy_var_3)-	)}}--happyReduce_351 = happySpecReduce_3  116# happyReduction_351-happyReduction_351 happy_x_3-	happy_x_2-	happy_x_1-	 =  case happyOut123 happy_x_2 of { happy_var_2 -> -	happyIn122-		 (reverse happy_var_2-	)}--happyReduce_352 = happySpecReduce_3  117# happyReduction_352-happyReduction_352 happy_x_3-	happy_x_2-	happy_x_1-	 =  case happyOut123 happy_x_1 of { happy_var_1 -> -	case happyOut77 happy_x_3 of { happy_var_3 -> -	happyIn123-		 (reverse happy_var_3 ++ happy_var_1-	)}}--happyReduce_353 = happySpecReduce_1  117# happyReduction_353-happyReduction_353 happy_x_1-	 =  case happyOut77 happy_x_1 of { happy_var_1 -> -	happyIn123-		 (reverse happy_var_1-	)}--happyReduce_354 = happySpecReduce_3  118# happyReduction_354-happyReduction_354 happy_x_3-	happy_x_2-	happy_x_1-	 =  case happyOut125 happy_x_2 of { happy_var_2 -> -	happyIn124-		 (reverse happy_var_2-	)}--happyReduce_355 = happySpecReduce_3  119# happyReduction_355-happyReduction_355 happy_x_3-	happy_x_2-	happy_x_1-	 =  case happyOut125 happy_x_1 of { happy_var_1 -> -	case happyOut79 happy_x_3 of { happy_var_3 -> -	happyIn125-		 (reverse happy_var_3 ++ happy_var_1-	)}}--happyReduce_356 = happySpecReduce_1  119# happyReduction_356-happyReduction_356 happy_x_1-	 =  case happyOut79 happy_x_1 of { happy_var_1 -> -	happyIn125-		 (reverse happy_var_1-	)}--happyReduce_357 = happySpecReduce_3  120# happyReduction_357-happyReduction_357 happy_x_3-	happy_x_2-	happy_x_1-	 =  case happyOut127 happy_x_2 of { happy_var_2 -> -	happyIn126-		 (reverse happy_var_2-	)}--happyReduce_358 = happySpecReduce_3  121# happyReduction_358-happyReduction_358 happy_x_3-	happy_x_2-	happy_x_1-	 =  case happyOut127 happy_x_1 of { happy_var_1 -> -	case happyOut80 happy_x_3 of { happy_var_3 -> -	happyIn127-		 (reverse happy_var_3 ++ happy_var_1-	)}}--happyReduce_359 = happySpecReduce_1  121# happyReduction_359-happyReduction_359 happy_x_1-	 =  case happyOut80 happy_x_1 of { happy_var_1 -> -	happyIn127-		 (reverse happy_var_1-	)}--happyReduce_360 = happySpecReduce_2  122# happyReduction_360-happyReduction_360 happy_x_2-	happy_x_1-	 =  happyIn128-		 ([]-	)--happyReduce_361 = happySpecReduce_1  122# happyReduction_361-happyReduction_361 happy_x_1-	 =  case happyOut122 happy_x_1 of { happy_var_1 -> -	happyIn128-		 (happy_var_1-	)}--happyReduce_362 = happySpecReduce_2  123# happyReduction_362-happyReduction_362 happy_x_2-	happy_x_1-	 =  happyIn129-		 ((Nothing, [])-	)--happyReduce_363 = happySpecReduce_3  123# happyReduction_363-happyReduction_363 happy_x_3-	happy_x_2-	happy_x_1-	 =  case happyOut87 happy_x_2 of { happy_var_2 -> -	happyIn129-		 ((Just happy_var_2, [])-	)}--happyReduce_364 = happyReduce 5# 123# happyReduction_364-happyReduction_364 (happy_x_5 `HappyStk`-	happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOut87 happy_x_2 of { happy_var_2 -> -	case happyOut132 happy_x_4 of { happy_var_4 -> -	happyIn129-		 ((Just happy_var_2, reverse happy_var_4)-	) `HappyStk` happyRest}}--happyReduce_365 = happySpecReduce_3  123# happyReduction_365-happyReduction_365 happy_x_3-	happy_x_2-	happy_x_1-	 =  case happyOut132 happy_x_2 of { happy_var_2 -> -	happyIn129-		 ((Nothing, reverse happy_var_2)-	)}--happyReduce_366 = happySpecReduce_3  124# happyReduction_366-happyReduction_366 happy_x_3-	happy_x_2-	happy_x_1-	 =  case happyOut132 happy_x_2 of { happy_var_2 -> -	happyIn130-		 (reverse happy_var_2-	)}--happyReduce_367 = happySpecReduce_2  125# happyReduction_367-happyReduction_367 happy_x_2-	happy_x_1-	 =  happyIn131-		 ([]-	)--happyReduce_368 = happySpecReduce_1  125# happyReduction_368-happyReduction_368 happy_x_1-	 =  case happyOut130 happy_x_1 of { happy_var_1 -> -	happyIn131-		 (happy_var_1-	)}--happyReduce_369 = happySpecReduce_3  126# happyReduction_369-happyReduction_369 happy_x_3-	happy_x_2-	happy_x_1-	 =  case happyOut132 happy_x_1 of { happy_var_1 -> -	case happyOut76 happy_x_3 of { happy_var_3 -> -	happyIn132-		 (reverse happy_var_3 ++ happy_var_1-	)}}--happyReduce_370 = happySpecReduce_1  126# happyReduction_370-happyReduction_370 happy_x_1-	 =  case happyOut76 happy_x_1 of { happy_var_1 -> -	happyIn132-		 (reverse happy_var_1-	)}--happyNewToken action sts stk-	= lexer(\tk -> -	let cont i = happyDoAction i tk action sts stk in-	case tk of {-	TokEOF -> happyDoAction 76# tk action sts stk;-	TokKeyword KwLet happy_dollar_dollar -> cont 1#;-	TokKeyword KwIn happy_dollar_dollar -> cont 2#;-	TokKeyword KwWhere happy_dollar_dollar -> cont 3#;-	TokKeyword KwWith happy_dollar_dollar -> cont 4#;-	TokKeyword KwRewrite happy_dollar_dollar -> cont 5#;-	TokKeyword KwPostulate happy_dollar_dollar -> cont 6#;-	TokKeyword KwPrimitive happy_dollar_dollar -> cont 7#;-	TokKeyword KwOpen happy_dollar_dollar -> cont 8#;-	TokKeyword KwImport happy_dollar_dollar -> cont 9#;-	TokKeyword KwUsing happy_dollar_dollar -> cont 10#;-	TokKeyword KwHiding happy_dollar_dollar -> cont 11#;-	TokKeyword KwRenaming happy_dollar_dollar -> cont 12#;-	TokKeyword KwTo happy_dollar_dollar -> cont 13#;-	TokKeyword KwPublic happy_dollar_dollar -> cont 14#;-	TokKeyword KwModule happy_dollar_dollar -> cont 15#;-	TokKeyword KwData happy_dollar_dollar -> cont 16#;-	TokKeyword KwCoData happy_dollar_dollar -> cont 17#;-	TokKeyword KwRecord happy_dollar_dollar -> cont 18#;-	TokKeyword KwConstructor happy_dollar_dollar -> cont 19#;-	TokKeyword KwField happy_dollar_dollar -> cont 20#;-	TokKeyword KwInfix happy_dollar_dollar -> cont 21#;-	TokKeyword KwInfixL happy_dollar_dollar -> cont 22#;-	TokKeyword KwInfixR happy_dollar_dollar -> cont 23#;-	TokKeyword KwMutual happy_dollar_dollar -> cont 24#;-	TokKeyword KwAbstract happy_dollar_dollar -> cont 25#;-	TokKeyword KwPrivate happy_dollar_dollar -> cont 26#;-	TokKeyword KwProp happy_dollar_dollar -> cont 27#;-	TokKeyword KwSet happy_dollar_dollar -> cont 28#;-	TokKeyword KwForall happy_dollar_dollar -> cont 29#;-	TokKeyword KwSyntax happy_dollar_dollar -> cont 30#;-	TokKeyword KwOPTIONS happy_dollar_dollar -> cont 31#;-	TokKeyword KwBUILTIN happy_dollar_dollar -> cont 32#;-	TokKeyword KwIMPORT happy_dollar_dollar -> cont 33#;-	TokKeyword KwIMPOSSIBLE happy_dollar_dollar -> cont 34#;-	TokKeyword KwETA happy_dollar_dollar -> cont 35#;-	TokKeyword KwCOMPILED happy_dollar_dollar -> cont 36#;-	TokKeyword KwCOMPILED_DATA happy_dollar_dollar -> cont 37#;-	TokKeyword KwCOMPILED_TYPE happy_dollar_dollar -> cont 38#;-	TokKeyword KwCOMPILED_EPIC happy_dollar_dollar -> cont 39#;-	TokKeyword KwCOMPILED_JS happy_dollar_dollar -> cont 40#;-	TokKeyword KwSTATIC happy_dollar_dollar -> cont 41#;-	TokKeyword KwQuoteGoal happy_dollar_dollar -> cont 42#;-	TokKeyword KwQuote happy_dollar_dollar -> cont 43#;-	TokKeyword KwQuoteTerm happy_dollar_dollar -> cont 44#;-	TokKeyword KwUnquote happy_dollar_dollar -> cont 45#;-	TokSetN happy_dollar_dollar -> cont 46#;-	TokTeX happy_dollar_dollar -> cont 47#;-	TokComment happy_dollar_dollar -> cont 48#;-	TokSymbol SymEllipsis happy_dollar_dollar -> cont 49#;-	TokSymbol SymDotDot happy_dollar_dollar -> cont 50#;-	TokSymbol SymDot happy_dollar_dollar -> cont 51#;-	TokSymbol SymSemi happy_dollar_dollar -> cont 52#;-	TokSymbol SymColon happy_dollar_dollar -> cont 53#;-	TokSymbol SymEqual happy_dollar_dollar -> cont 54#;-	TokSymbol SymUnderscore happy_dollar_dollar -> cont 55#;-	TokSymbol SymQuestionMark happy_dollar_dollar -> cont 56#;-	TokSymbol SymArrow happy_dollar_dollar -> cont 57#;-	TokSymbol SymLambda happy_dollar_dollar -> cont 58#;-	TokSymbol SymAs happy_dollar_dollar -> cont 59#;-	TokSymbol SymBar happy_dollar_dollar -> cont 60#;-	TokSymbol SymOpenParen happy_dollar_dollar -> cont 61#;-	TokSymbol SymCloseParen happy_dollar_dollar -> cont 62#;-	TokSymbol SymDoubleOpenBrace happy_dollar_dollar -> cont 63#;-	TokSymbol SymDoubleCloseBrace happy_dollar_dollar -> cont 64#;-	TokSymbol SymOpenBrace happy_dollar_dollar -> cont 65#;-	TokSymbol SymCloseBrace happy_dollar_dollar -> cont 66#;-	TokSymbol SymOpenVirtualBrace happy_dollar_dollar -> cont 67#;-	TokSymbol SymCloseVirtualBrace happy_dollar_dollar -> cont 68#;-	TokSymbol SymVirtualSemi happy_dollar_dollar -> cont 69#;-	TokSymbol SymOpenPragma happy_dollar_dollar -> cont 70#;-	TokSymbol SymClosePragma happy_dollar_dollar -> cont 71#;-	TokId happy_dollar_dollar -> cont 72#;-	TokQId happy_dollar_dollar -> cont 73#;-	TokString happy_dollar_dollar -> cont 74#;-	TokLiteral happy_dollar_dollar -> cont 75#;-	_ -> happyError' tk-	})--happyError_ 76# tk = happyError' tk-happyError_ _ tk = happyError' tk--happyThen :: () => Parser a -> (a -> Parser b) -> Parser b-happyThen = (>>=)-happyReturn :: () => a -> Parser a-happyReturn = (return)-happyThen1 = happyThen-happyReturn1 :: () => a -> Parser a-happyReturn1 = happyReturn-happyError' :: () => (Token) -> Parser a-happyError' tk = (\token -> happyError) tk--tokensParser = happySomeParser where-  happySomeParser = happyThen (happyParse 0#) (\x -> happyReturn (happyOut6 x))--exprParser = happySomeParser where-  happySomeParser = happyThen (happyParse 1#) (\x -> happyReturn (happyOut29 x))--moduleParser = happySomeParser where-  happySomeParser = happyThen (happyParse 2#) (\x -> happyReturn (happyOut9 x))--happySeq = happyDontSeq---{---------------------------------------------------------------------------    Parsers- --------------------------------------------------------------------------}---- | Parse the token stream. Used by the TeX compiler.-tokensParser :: Parser [Token]---- | Parse an expression. Could be used in interactions.-exprParser :: Parser Expr---- | Parse a module.-moduleParser :: Parser Module---{---------------------------------------------------------------------------    Happy stuff- --------------------------------------------------------------------------}---- | Required by Happy.-happyError :: Parser a-happyError = parseError "Parse error"---{---------------------------------------------------------------------------    Utility functions- --------------------------------------------------------------------------}---- | Create a name from a string.--mkName :: (Interval, String) -> Parser Name-mkName (i, s) = do-    let xs = parts s-    mapM_ isValidId xs-    unless (alternating xs) $ fail $ "a name cannot contain two consecutive underscores"-    return $ Name (getRange i) xs-    where-        parts :: String -> [NamePart]-        parts ""        = []-        parts ('_' : s) = Hole : parts s-        parts s         = Id x : parts s'-          where (x, s') = break (== '_') s--	isValidId Hole   = return ()-	isValidId (Id x) = case parse defaultParseFlags [0] (lexer return) x of-	    ParseOk _ (TokId _) -> return ()-	    _			-> fail $ "in the name " ++ s ++ ", the part " ++ x ++ " is not valid"--	-- we know that there are no two Ids in a row-	alternating (Hole : Hole : _) = False-	alternating (_ : xs)	      = alternating xs-	alternating []		      = True---- | Create a qualified name from a list of strings-mkQName :: [(Interval, String)] -> Parser QName-mkQName ss = do-    xs <- mapM mkName ss-    return $ foldr Qual (QName $ last xs) (init xs)---- | Match a particular name.-isName :: String -> (Interval, String) -> Parser ()-isName s (_,s')-    | s == s'	= return ()-    | otherwise	= fail $ "expected " ++ s ++ ", found " ++ s'---- | Build a forall pi (forall x y z -> ...)-forallPi :: [LamBinding] -> Expr -> Expr-forallPi bs e = Pi (map addType bs) e---- | Converts lambda bindings to typed bindings.-addType :: LamBinding -> TypedBindings-addType (DomainFull b)	 = b-addType (DomainFree h rel x) = TypedBindings r $ Arg h rel $ TBind r [x] $ Underscore r Nothing-  where r = getRange x---- | Check that an import directive doesn't contain repeated names-verifyImportDirective :: ImportDirective -> Parser ImportDirective-verifyImportDirective i =-    case filter ((>1) . length)-	 $ group-	 $ sort xs-    of-	[]  -> return i-	yss -> let Just pos = rStart $ getRange $ head $ concat yss in-               parseErrorAt pos $-		"repeated name" ++ s ++ " in import directive: " ++-		concat (intersperse ", " $ map (show . head) yss)-	    where-		s = case yss of-			[_] -> ""-			_   -> "s"-    where-	xs = names (usingOrHiding i) ++ map renFrom (renaming i)-	names (Using xs)    = xs-	names (Hiding xs)   = xs---- | Breaks up a string into substrings. Returns every maximal--- subsequence of zero or more characters distinct from @'.'@.------ > splitOnDots ""         == [""]--- > splitOnDots "foo.bar"  == ["foo", "bar"]--- > splitOnDots ".foo.bar" == ["", "foo", "bar"]--- > splitOnDots "foo.bar." == ["foo", "bar", ""]--- > splitOnDots "foo..bar" == ["foo", "", "bar"]-splitOnDots :: String -> [String]-splitOnDots ""        = [""]-splitOnDots ('.' : s) = [] : splitOnDots s-splitOnDots (c   : s) = case splitOnDots s of-  p : ps -> (c : p) : ps--prop_splitOnDots = and-  [ splitOnDots ""         == [""]-  , splitOnDots "foo.bar"  == ["foo", "bar"]-  , splitOnDots ".foo.bar" == ["", "foo", "bar"]-  , splitOnDots "foo.bar." == ["foo", "bar", ""]-  , splitOnDots "foo..bar" == ["foo", "", "bar"]-  ]---- | Returns 'True' iff the name is a valid Haskell (hierarchical)--- module name.-validHaskellModuleName :: String -> Bool-validHaskellModuleName = all ok . splitOnDots-  where-  -- Checks if a dot-less module name is well-formed.-  ok :: String -> Bool-  ok []      = False-  ok (c : s) =-    isUpper c &&-    all (\c -> isLower c || c == '_' ||-               isUpper c ||-               generalCategory c == DecimalNumber ||-               c == '\'')-        s--{---------------------------------------------------------------------------    Patterns- --------------------------------------------------------------------------}---- | Turn an expression into a left hand side.-exprToLHS :: Expr -> Parser ([Expr] -> [Expr] -> LHS)-exprToLHS e = case e of-  WithApp r e es -> LHS <$> exprToPattern e <*> mapM exprToPattern es-  _		 -> LHS <$> exprToPattern e <*> return []---- | Turn an expression into a pattern. Fails if the expression is not a---   valid pattern.-exprToPattern :: Expr -> Parser Pattern-exprToPattern e =-    case e of-	Ident x			-> return $ IdentP x-	App _ e1 e2		-> AppP <$> exprToPattern e1-					<*> T.mapM (T.mapM exprToPattern) e2-	Paren r e		-> ParenP r-					<$> exprToPattern e-	Underscore r _		-> return $ WildP r-	Absurd r		-> return $ AbsurdP r-	As r x e		-> AsP r x <$> exprToPattern e-	Dot r (HiddenArg _ e)	-> return $ HiddenP r $ fmap (DotP r) e-	Dot r e			-> return $ DotP r e-	Lit l			-> return $ LitP l-	HiddenArg r e		-> HiddenP r <$> T.mapM exprToPattern e-	InstanceArg r e		-> InstanceP r <$> T.mapM exprToPattern e-	RawApp r es		-> RawAppP r <$> mapM exprToPattern es-	OpApp r x es		-> OpAppP r x <$> mapM opAppExprToPattern es-	_			->-          let Just pos = rStart $ getRange e in-          parseErrorAt pos $ "Not a valid pattern: " ++ show e--opAppExprToPattern :: OpApp Expr -> Parser Pattern-opAppExprToPattern (SyntaxBindingLambda _ _ _) = parseError "syntax binding lambda cannot appear in a pattern"-opAppExprToPattern (Ordinary e) = exprToPattern e--parsePanic s = parseError $ "Internal parser error: " ++ s ++ ". Please report this as a bug."--{---------------------------------------------------------------------------    Tests- --------------------------------------------------------------------------}---- | Test suite.-tests :: IO Bool-tests = runTests "Agda.Syntax.Parser.Parser"-  [ quickCheck' prop_splitOnDots-  ]-{-# LINE 1 "templates/GenericTemplate.hs" #-}-{-# LINE 1 "templates/GenericTemplate.hs" #-}-{-# LINE 1 "<built-in>" #-}-{-# LINE 1 "<command-line>" #-}+{-# LANGUAGE BangPatterns, PatternGuards #-}+{-| The parser is generated by Happy (<http://www.haskell.org/happy>).+ -+ - Ideally, ranges should be as precise as possible, to get messages that+ - emphasize precisely the faulting term(s) upon error.+ -+ - However, interactive highlighting is only applied at the end of each+ - mutual block, keywords are only highlighted once (see+ - `TypeChecking.Rules.Decl'). So if the ranges of two declarations+ - interleave, one must ensure that keyword ranges are not included in+ - the intersection. (Otherwise they are uncolored by the interactive+ - highlighting.)+ -+ -}+module Agda.Syntax.Parser.Parser (+      moduleParser+    , exprParser+    , tokensParser+    , tests+    ) where++import Control.Arrow+import Control.Monad+import Control.Monad.State+import Data.Char+import Data.List+import Data.Maybe+import qualified Data.Traversable as T++import Agda.Syntax.Position hiding (tests)+import Agda.Syntax.Parser.Monad+import Agda.Syntax.Parser.Lexer+import Agda.Syntax.Parser.Tokens+import Agda.Syntax.Concrete+import Agda.Syntax.Concrete.Name+import Agda.Syntax.Concrete.Pretty+import Agda.Syntax.Common+import Agda.Syntax.Fixity+import Agda.Syntax.Notation+import Agda.Syntax.Literal++import Agda.Utils.Hash+import Agda.Utils.Monad+import Agda.Utils.QuickCheck+import Agda.Utils.TestHelpers+import Agda.Utils.Tuple+import qualified Data.Array as Happy_Data_Array+import qualified GHC.Exts as Happy_GHC_Exts++-- parser produced by Happy Version 1.18.8++newtype HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70 = HappyAbsSyn HappyAny+#if __GLASGOW_HASKELL__ >= 607+type HappyAny = Happy_GHC_Exts.Any+#else+type HappyAny = forall a . a+#endif+happyIn6 :: ([Token]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)+happyIn6 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn6 #-}+happyOut6 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> ([Token])+happyOut6 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut6 #-}+happyIn7 :: ([Token]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)+happyIn7 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn7 #-}+happyOut7 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> ([Token])+happyOut7 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut7 #-}+happyIn8 :: (Token) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)+happyIn8 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn8 #-}+happyOut8 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> (Token)+happyOut8 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut8 #-}+happyIn9 :: (([Pragma], [Declaration])) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)+happyIn9 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn9 #-}+happyOut9 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> (([Pragma], [Declaration]))+happyOut9 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut9 #-}+happyIn10 :: t10 -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)+happyIn10 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn10 #-}+happyOut10 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> t10+happyOut10 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut10 #-}+happyIn11 :: t11 -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)+happyIn11 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn11 #-}+happyOut11 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> t11+happyOut11 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut11 #-}+happyIn12 :: t12 -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)+happyIn12 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn12 #-}+happyOut12 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> t12+happyOut12 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut12 #-}+happyIn13 :: (()) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)+happyIn13 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn13 #-}+happyOut13 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> (())+happyOut13 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut13 #-}+happyIn14 :: (Integer) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)+happyIn14 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn14 #-}+happyOut14 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> (Integer)+happyOut14 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut14 #-}+happyIn15 :: (Name) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)+happyIn15 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn15 #-}+happyOut15 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> (Name)+happyOut15 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut15 #-}+happyIn16 :: ([Name]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)+happyIn16 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn16 #-}+happyOut16 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> ([Name])+happyOut16 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut16 #-}+happyIn17 :: (Range) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)+happyIn17 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn17 #-}+happyOut17 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> (Range)+happyOut17 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut17 #-}+happyIn18 :: (Arg Name) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)+happyIn18 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn18 #-}+happyOut18 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> (Arg Name)+happyOut18 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut18 #-}+happyIn19 :: ([Arg Name]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)+happyIn19 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn19 #-}+happyOut19 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> ([Arg Name])+happyOut19 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut19 #-}+happyIn20 :: ([Arg Name]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)+happyIn20 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn20 #-}+happyOut20 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> ([Arg Name])+happyOut20 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut20 #-}+happyIn21 :: (QName) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)+happyIn21 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn21 #-}+happyOut21 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> (QName)+happyOut21 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut21 #-}+happyIn22 :: (QName) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)+happyIn22 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn22 #-}+happyOut22 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> (QName)+happyOut22 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut22 #-}+happyIn23 :: (Name) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)+happyIn23 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn23 #-}+happyOut23 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> (Name)+happyOut23 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut23 #-}+happyIn24 :: ([Name]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)+happyIn24 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn24 #-}+happyOut24 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> ([Name])+happyOut24 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut24 #-}+happyIn25 :: ([Name]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)+happyIn25 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn25 #-}+happyOut25 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> ([Name])+happyOut25 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut25 #-}+happyIn26 :: (Either [Name] [Expr]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)+happyIn26 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn26 #-}+happyOut26 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> (Either [Name] [Expr])+happyOut26 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut26 #-}+happyIn27 :: ([String]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)+happyIn27 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn27 #-}+happyOut27 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> ([String])+happyOut27 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut27 #-}+happyIn28 :: (QName) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)+happyIn28 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn28 #-}+happyOut28 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> (QName)+happyOut28 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut28 #-}+happyIn29 :: (Expr) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)+happyIn29 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn29 #-}+happyOut29 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> (Expr)+happyOut29 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut29 #-}+happyIn30 :: t30 -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)+happyIn30 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn30 #-}+happyOut30 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> t30+happyOut30 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut30 #-}+happyIn31 :: ([Expr]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)+happyIn31 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn31 #-}+happyOut31 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> ([Expr])+happyOut31 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut31 #-}+happyIn32 :: ([Expr]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)+happyIn32 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn32 #-}+happyOut32 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> ([Expr])+happyOut32 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut32 #-}+happyIn33 :: t33 -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)+happyIn33 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn33 #-}+happyOut33 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> t33+happyOut33 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut33 #-}+happyIn34 :: (Expr) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)+happyIn34 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn34 #-}+happyOut34 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> (Expr)+happyOut34 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut34 #-}+happyIn35 :: ([Expr]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)+happyIn35 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn35 #-}+happyOut35 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> ([Expr])+happyOut35 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut35 #-}+happyIn36 :: t36 -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)+happyIn36 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn36 #-}+happyOut36 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> t36+happyOut36 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut36 #-}+happyIn37 :: t37 -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)+happyIn37 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn37 #-}+happyOut37 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> t37+happyOut37 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut37 #-}+happyIn38 :: t38 -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)+happyIn38 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn38 #-}+happyOut38 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> t38+happyOut38 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut38 #-}+happyIn39 :: ([(Name, Expr)]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)+happyIn39 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn39 #-}+happyOut39 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> ([(Name, Expr)])+happyOut39 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut39 #-}+happyIn40 :: ([(Name, Expr)]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)+happyIn40 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn40 #-}+happyOut40 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> ([(Name, Expr)])+happyOut40 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut40 #-}+happyIn41 :: ((Name, Expr)) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)+happyIn41 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn41 #-}+happyOut41 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> ((Name, Expr))+happyOut41 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut41 #-}+happyIn42 :: t42 -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)+happyIn42 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn42 #-}+happyOut42 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> t42+happyOut42 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut42 #-}+happyIn43 :: t43 -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)+happyIn43 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn43 #-}+happyOut43 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> t43+happyOut43 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut43 #-}+happyIn44 :: ([TypedBindings]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)+happyIn44 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn44 #-}+happyOut44 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> ([TypedBindings])+happyOut44 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut44 #-}+happyIn45 :: (TypedBindings) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)+happyIn45 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn45 #-}+happyOut45 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> (TypedBindings)+happyOut45 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut45 #-}+happyIn46 :: (TypedBinding) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)+happyIn46 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn46 #-}+happyOut46 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> (TypedBinding)+happyOut46 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut46 #-}+happyIn47 :: ([LamBinding]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)+happyIn47 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn47 #-}+happyOut47 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> ([LamBinding])+happyOut47 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut47 #-}+happyIn48 :: (Either ([LamBinding], Hiding) [Expr]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)+happyIn48 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn48 #-}+happyOut48 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> (Either ([LamBinding], Hiding) [Expr])+happyOut48 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut48 #-}+happyIn49 :: ([Either Hiding LamBinding]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)+happyIn49 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn49 #-}+happyOut49 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> ([Either Hiding LamBinding])+happyOut49 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut49 #-}+happyIn50 :: (Either [Either Hiding LamBinding] [Expr]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)+happyIn50 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn50 #-}+happyOut50 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> (Either [Either Hiding LamBinding] [Expr])+happyOut50 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut50 #-}+happyIn51 :: ((LHS,RHS,WhereClause)) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)+happyIn51 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn51 #-}+happyOut51 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> ((LHS,RHS,WhereClause))+happyOut51 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut51 #-}+happyIn52 :: ((LHS,RHS,WhereClause)) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)+happyIn52 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn52 #-}+happyOut52 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> ((LHS,RHS,WhereClause))+happyOut52 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut52 #-}+happyIn53 :: ((LHS,RHS,WhereClause)) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)+happyIn53 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn53 #-}+happyOut53 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> ((LHS,RHS,WhereClause))+happyOut53 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut53 #-}+happyIn54 :: ([(LHS,RHS,WhereClause)]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)+happyIn54 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn54 #-}+happyOut54 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> ([(LHS,RHS,WhereClause)])+happyOut54 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut54 #-}+happyIn55 :: ([LamBinding]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)+happyIn55 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn55 #-}+happyOut55 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> ([LamBinding])+happyOut55 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut55 #-}+happyIn56 :: ([LamBinding]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)+happyIn56 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn56 #-}+happyOut56 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> ([LamBinding])+happyOut56 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut56 #-}+happyIn57 :: ([LamBinding]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)+happyIn57 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn57 #-}+happyOut57 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> ([LamBinding])+happyOut57 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut57 #-}+happyIn58 :: ([LamBinding]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)+happyIn58 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn58 #-}+happyOut58 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> ([LamBinding])+happyOut58 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut58 #-}+happyIn59 :: (Either [LamBinding] [Expr]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)+happyIn59 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn59 #-}+happyOut59 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> (Either [LamBinding] [Expr])+happyOut59 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut59 #-}+happyIn60 :: (ImportDirective) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)+happyIn60 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn60 #-}+happyOut60 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> (ImportDirective)+happyOut60 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut60 #-}+happyIn61 :: (ImportDirective) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)+happyIn61 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn61 #-}+happyOut61 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> (ImportDirective)+happyOut61 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut61 #-}+happyIn62 :: (ImportDirective) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)+happyIn62 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn62 #-}+happyOut62 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> (ImportDirective)+happyOut62 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut62 #-}+happyIn63 :: ((UsingOrHiding , Range)) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)+happyIn63 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn63 #-}+happyOut63 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> ((UsingOrHiding , Range))+happyOut63 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut63 #-}+happyIn64 :: (([Renaming] , Range)) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)+happyIn64 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn64 #-}+happyOut64 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> (([Renaming] , Range))+happyOut64 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut64 #-}+happyIn65 :: ([Renaming]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)+happyIn65 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn65 #-}+happyOut65 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> ([Renaming])+happyOut65 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut65 #-}+happyIn66 :: (Renaming) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)+happyIn66 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn66 #-}+happyOut66 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> (Renaming)+happyOut66 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut66 #-}+happyIn67 :: (ImportedName) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)+happyIn67 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn67 #-}+happyOut67 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> (ImportedName)+happyOut67 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut67 #-}+happyIn68 :: (ImportedName) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)+happyIn68 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn68 #-}+happyOut68 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> (ImportedName)+happyOut68 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut68 #-}+happyIn69 :: ([ImportedName]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)+happyIn69 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn69 #-}+happyOut69 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> ([ImportedName])+happyOut69 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut69 #-}+happyIn70 :: t70 -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)+happyIn70 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn70 #-}+happyOut70 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> t70+happyOut70 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut70 #-}+happyIn71 :: (LHS) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)+happyIn71 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn71 #-}+happyOut71 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> (LHS)+happyOut71 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut71 #-}+happyIn72 :: ([Pattern]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)+happyIn72 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn72 #-}+happyOut72 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> ([Pattern])+happyOut72 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut72 #-}+happyIn73 :: ([Expr]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)+happyIn73 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn73 #-}+happyOut73 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> ([Expr])+happyOut73 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut73 #-}+happyIn74 :: ([Expr]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)+happyIn74 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn74 #-}+happyOut74 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> ([Expr])+happyOut74 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut74 #-}+happyIn75 :: (WhereClause) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)+happyIn75 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn75 #-}+happyOut75 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> (WhereClause)+happyOut75 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut75 #-}+happyIn76 :: ([Declaration]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)+happyIn76 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn76 #-}+happyOut76 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> ([Declaration])+happyOut76 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut76 #-}+happyIn77 :: ([Declaration]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)+happyIn77 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn77 #-}+happyOut77 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> ([Declaration])+happyOut77 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut77 #-}+happyIn78 :: ([Declaration]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)+happyIn78 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn78 #-}+happyOut78 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> ([Declaration])+happyOut78 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut78 #-}+happyIn79 :: ([Arg Declaration]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)+happyIn79 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn79 #-}+happyOut79 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> ([Arg Declaration])+happyOut79 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut79 #-}+happyIn80 :: ([Declaration]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)+happyIn80 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn80 #-}+happyOut80 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> ([Declaration])+happyOut80 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut80 #-}+happyIn81 :: (RHSOrTypeSigs) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)+happyIn81 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn81 #-}+happyOut81 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> (RHSOrTypeSigs)+happyOut81 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut81 #-}+happyIn82 :: (Declaration) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)+happyIn82 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn82 #-}+happyOut82 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> (Declaration)+happyOut82 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut82 #-}+happyIn83 :: (Declaration) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)+happyIn83 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn83 #-}+happyOut83 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> (Declaration)+happyOut83 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut83 #-}+happyIn84 :: (Declaration) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)+happyIn84 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn84 #-}+happyOut84 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> (Declaration)+happyOut84 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut84 #-}+happyIn85 :: (Declaration) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)+happyIn85 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn85 #-}+happyOut85 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> (Declaration)+happyOut85 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut85 #-}+happyIn86 :: (Name) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)+happyIn86 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn86 #-}+happyOut86 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> (Name)+happyOut86 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut86 #-}+happyIn87 :: (Declaration) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)+happyIn87 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn87 #-}+happyOut87 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> (Declaration)+happyOut87 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut87 #-}+happyIn88 :: ([Declaration]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)+happyIn88 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn88 #-}+happyOut88 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> ([Declaration])+happyOut88 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut88 #-}+happyIn89 :: (Declaration) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)+happyIn89 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn89 #-}+happyOut89 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> (Declaration)+happyOut89 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut89 #-}+happyIn90 :: (Declaration) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)+happyIn90 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn90 #-}+happyOut90 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> (Declaration)+happyOut90 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut90 #-}+happyIn91 :: (Declaration) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)+happyIn91 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn91 #-}+happyOut91 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> (Declaration)+happyOut91 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut91 #-}+happyIn92 :: (Declaration) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)+happyIn92 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn92 #-}+happyOut92 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> (Declaration)+happyOut92 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut92 #-}+happyIn93 :: (Declaration) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)+happyIn93 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn93 #-}+happyOut93 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> (Declaration)+happyOut93 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut93 #-}+happyIn94 :: (Declaration) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)+happyIn94 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn94 #-}+happyOut94 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> (Declaration)+happyOut94 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut94 #-}+happyIn95 :: (Declaration) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)+happyIn95 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn95 #-}+happyOut95 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> (Declaration)+happyOut95 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut95 #-}+happyIn96 :: ([String]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)+happyIn96 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn96 #-}+happyOut96 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> ([String])+happyOut96 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut96 #-}+happyIn97 :: ([HoleName]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)+happyIn97 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn97 #-}+happyOut97 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> ([HoleName])+happyOut97 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut97 #-}+happyIn98 :: (HoleName) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)+happyIn98 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn98 #-}+happyOut98 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> (HoleName)+happyOut98 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut98 #-}+happyIn99 :: (String) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)+happyIn99 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn99 #-}+happyOut99 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> (String)+happyOut99 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut99 #-}+happyIn100 :: (Maybe Range) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)+happyIn100 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn100 #-}+happyOut100 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> (Maybe Range)+happyOut100 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut100 #-}+happyIn101 :: ([Declaration]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)+happyIn101 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn101 #-}+happyOut101 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> ([Declaration])+happyOut101 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut101 #-}+happyIn102 :: ([Expr]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)+happyIn102 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn102 #-}+happyOut102 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> ([Expr])+happyOut102 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut102 #-}+happyIn103 :: ([TypedBindings] -> Parser ModuleApplication) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)+happyIn103 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn103 #-}+happyOut103 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> ([TypedBindings] -> Parser ModuleApplication)+happyOut103 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut103 #-}+happyIn104 :: (Declaration) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)+happyIn104 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn104 #-}+happyOut104 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> (Declaration)+happyOut104 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut104 #-}+happyIn105 :: (Declaration) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)+happyIn105 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn105 #-}+happyOut105 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> (Declaration)+happyOut105 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut105 #-}+happyIn106 :: (Name) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)+happyIn106 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn106 #-}+happyOut106 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> (Name)+happyOut106 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut106 #-}+happyIn107 :: ([Declaration]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)+happyIn107 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn107 #-}+happyOut107 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> ([Declaration])+happyOut107 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut107 #-}+happyIn108 :: (Declaration) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)+happyIn108 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn108 #-}+happyOut108 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> (Declaration)+happyOut108 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut108 #-}+happyIn109 :: (Declaration) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)+happyIn109 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn109 #-}+happyOut109 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> (Declaration)+happyOut109 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut109 #-}+happyIn110 :: (Pragma) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)+happyIn110 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn110 #-}+happyOut110 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> (Pragma)+happyOut110 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut110 #-}+happyIn111 :: (Pragma) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)+happyIn111 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn111 #-}+happyOut111 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> (Pragma)+happyOut111 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut111 #-}+happyIn112 :: (Pragma) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)+happyIn112 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn112 #-}+happyOut112 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> (Pragma)+happyOut112 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut112 #-}+happyIn113 :: (Pragma) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)+happyIn113 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn113 #-}+happyOut113 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> (Pragma)+happyOut113 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut113 #-}+happyIn114 :: (Pragma) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)+happyIn114 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn114 #-}+happyOut114 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> (Pragma)+happyOut114 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut114 #-}+happyIn115 :: (Pragma) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)+happyIn115 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn115 #-}+happyOut115 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> (Pragma)+happyOut115 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut115 #-}+happyIn116 :: (Pragma) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)+happyIn116 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn116 #-}+happyOut116 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> (Pragma)+happyOut116 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut116 #-}+happyIn117 :: (Pragma) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)+happyIn117 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn117 #-}+happyOut117 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> (Pragma)+happyOut117 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut117 #-}+happyIn118 :: (Pragma) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)+happyIn118 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn118 #-}+happyOut118 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> (Pragma)+happyOut118 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut118 #-}+happyIn119 :: (Pragma) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)+happyIn119 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn119 #-}+happyOut119 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> (Pragma)+happyOut119 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut119 #-}+happyIn120 :: (Pragma) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)+happyIn120 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn120 #-}+happyOut120 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> (Pragma)+happyOut120 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut120 #-}+happyIn121 :: (Pragma) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)+happyIn121 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn121 #-}+happyOut121 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> (Pragma)+happyOut121 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut121 #-}+happyIn122 :: (Pragma) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)+happyIn122 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn122 #-}+happyOut122 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> (Pragma)+happyOut122 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut122 #-}+happyIn123 :: (Pragma) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)+happyIn123 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn123 #-}+happyOut123 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> (Pragma)+happyOut123 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut123 #-}+happyIn124 :: ([TypeSignature]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)+happyIn124 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn124 #-}+happyOut124 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> ([TypeSignature])+happyOut124 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut124 #-}+happyIn125 :: ([TypeSignature]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)+happyIn125 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn125 #-}+happyOut125 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> ([TypeSignature])+happyOut125 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut125 #-}+happyIn126 :: ([TypeSignature]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)+happyIn126 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn126 #-}+happyOut126 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> ([TypeSignature])+happyOut126 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut126 #-}+happyIn127 :: ([TypeSignature]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)+happyIn127 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn127 #-}+happyOut127 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> ([TypeSignature])+happyOut127 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut127 #-}+happyIn128 :: ([Arg TypeSignature]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)+happyIn128 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn128 #-}+happyOut128 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> ([Arg TypeSignature])+happyOut128 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut128 #-}+happyIn129 :: ([Arg TypeSignature]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)+happyIn129 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn129 #-}+happyOut129 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> ([Arg TypeSignature])+happyOut129 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut129 #-}+happyIn130 :: ([Constructor]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)+happyIn130 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn130 #-}+happyOut130 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> ([Constructor])+happyOut130 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut130 #-}+happyIn131 :: ((Maybe Induction, Maybe Name, [Declaration])) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)+happyIn131 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn131 #-}+happyOut131 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> ((Maybe Induction, Maybe Name, [Declaration]))+happyOut131 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut131 #-}+happyIn132 :: (Induction) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)+happyIn132 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn132 #-}+happyOut132 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> (Induction)+happyOut132 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut132 #-}+happyIn133 :: ([Declaration]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)+happyIn133 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn133 #-}+happyOut133 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> ([Declaration])+happyOut133 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut133 #-}+happyIn134 :: ([Declaration]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)+happyIn134 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn134 #-}+happyOut134 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> ([Declaration])+happyOut134 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut134 #-}+happyIn135 :: ([Declaration]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)+happyIn135 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn135 #-}+happyOut135 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> ([Declaration])+happyOut135 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut135 #-}+happyInTok :: (Token) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)+happyInTok x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyInTok #-}+happyOutTok :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> (Token)+happyOutTok x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOutTok #-}+++happyActOffsets :: HappyAddr+happyActOffsets = HappyA# "\x00\x00\x2f\x06\x31\x00\x00\x00\xa3\x03\x44\x05\x00\x00\x81\x05\xdd\x01\x00\x00\x00\x00\x31\x00\x00\x00\x4f\x04\x4f\x04\x65\x05\x4a\x05\x00\x00\x38\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf6\xff\x00\x00\x00\x00\xfb\x05\xd9\x05\x49\x05\x00\x00\xb3\x02\x3c\x05\xcb\x07\x00\x00\x00\x00\xe7\x0d\x39\x05\x00\x00\x00\x00\x00\x00\x00\x00\x53\x03\xaa\x07\x00\x00\x00\x00\xe4\x0d\x14\x05\x19\x02\xe9\x04\x00\x00\x00\x00\x00\x00\x28\x05\xc5\x01\x48\x05\x00\x00\x36\x05\x1c\x03\x33\x05\x00\x00\xaa\x01\x00\x00\xcb\x01\xcb\x01\x00\x00\x31\x05\x32\x05\x30\x05\x00\x00\x00\x00\x00\x00\xa1\x0d\xd9\x05\x00\x00\x2f\x05\x00\x00\xd4\x0d\x9e\x0d\xeb\x02\x85\x02\x00\x00\xc9\x06\xae\x05\x9e\x06\x00\x00\x93\x07\xbe\x04\x19\x02\x93\x04\xeb\x06\xeb\x06\xeb\x06\x62\x05\xc4\x0d\x8c\x05\x22\x05\xc4\x0d\x00\x00\xeb\x06\xeb\x06\xeb\x06\x16\x05\x68\x04\x19\x02\x0c\x05\x51\x05\x33\x04\x00\x00\xf7\x02\xeb\x06\xeb\x06\x00\x00\x00\x00\x00\x00\x00\x00\x86\x02\x8c\x05\xeb\x06\x93\x07\x00\x05\x00\x00\x00\x00\xc4\x0d\x72\x07\x00\x00\x00\x00\x4f\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5b\x07\x5b\x07\x10\x04\xac\x01\xc4\x0d\x46\x05\xc4\x0d\x02\x05\xfe\x04\x00\x00\x00\x00\x08\x05\x00\x00\x00\x00\xeb\x06\xeb\x06\xeb\x06\xeb\x06\x37\x05\x4a\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9d\x00\xfa\x04\xf8\x04\x57\x00\xcb\x00\xfb\x04\xfb\x04\x3a\x07\xf7\x04\xec\x04\xec\x04\xec\x04\xf6\x04\xf6\x04\xf6\x04\xed\x04\xed\x04\xf0\x04\x11\x0e\x8c\x05\xf1\x04\xf4\x04\x00\x00\xf5\x04\xeb\x04\xee\x04\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8c\x05\xdd\x04\xcb\x01\xe7\x04\xd8\x04\xcb\x01\xe6\x04\x67\x00\xe5\x04\x00\x00\xb2\x00\x22\x01\xe4\x04\xe0\x04\xdf\x04\x00\x00\xeb\x06\xeb\x06\x00\x00\xeb\x06\xeb\x06\xc1\x0d\xd9\x04\xc1\x0d\x7c\x06\x61\x05\x51\x06\x00\x00\x00\x00\xd7\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3f\x05\x00\x00\x00\x00\x3f\x05\x3f\x05\xcd\x04\x00\x00\xcb\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf5\xff\xfe\x00\xd9\xff\xfe\x00\xeb\x06\x00\x00\x00\x00\x00\x00\xeb\x06\x3f\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc9\x04\xc6\x04\x00\x00\x3f\x05\x00\x00\xc3\x04\xc2\x04\xc1\x04\xc0\x04\xad\x04\xbb\x04\xbb\x04\xbb\x04\xbb\x04\xbb\x04\xbb\x04\xfd\x04\x23\x07\xb9\x04\xc4\x04\xc3\xff\x00\x00\x00\x00\x00\x00\x53\x00\x00\x00\x53\x00\x53\x00\x00\x00\xb9\x00\xb1\x0d\x9d\x06\x9d\x06\x9d\x06\x9d\x06\x00\x00\xb8\x04\x00\x00\xb8\x04\x00\x00\xd7\xff\x00\x00\x33\x04\x00\x00\x00\x00\x2f\x00\x3f\x05\x3f\x05\xf3\x04\x3f\x05\x00\x00\x00\x00\x00\x00\xb6\x04\x00\x00\xcb\x01\x00\x00\x00\x00\x00\x00\xea\x04\x00\x00\xb2\x04\xb1\x04\xb0\x04\xfc\x02\x00\x00\x10\x04\x00\x00\x00\x00\xdc\x04\xf9\xff\xf9\xff\x00\x00\x10\x04\x00\x00\x00\x00\x54\x03\x00\x00\x00\x00\x3f\x05\x00\x00\x00\x00\x00\x00\xa2\x04\x9c\x04\x00\x00\x00\x00\xd7\xff\xae\x04\x00\x00\x9d\x00\x9a\x04\xac\x04\x00\x00\x9d\x00\x9d\x06\xe1\x04\x09\x00\x9e\x00\x5e\x00\x06\x00\xeb\x06\xb9\x00\xaa\x04\x00\x00\x9d\x00\x38\x02\x1e\x02\xd7\xff\xd7\xff\x53\x00\x00\x00\x00\x00\x00\x00\xf0\xff\x00\x00\x00\x00\xa3\x04\x00\x00\x3f\x05\x00\x00\x9e\x04\x23\x07\xd6\x04\x8a\x04\x00\x00\x89\x04\x89\x04\x89\x04\x85\x04\x7f\x04\x00\x00\x87\x04\x00\x00\x80\x04\x7e\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7d\x04\x00\x00\x00\x00\x7c\x04\x54\x04\x7b\x04\x75\x04\x73\x04\x00\x00\x00\x00\x00\x00\x00\x00\x71\x04\x00\x00\x71\x04\x00\x00\x70\x04\x5e\x01\x00\x00\x63\x04\x63\x04\x63\x04\x63\x04\x00\x00\xb9\x00\x3f\x05\x00\x00\xcd\x00\x6c\x04\x3f\x05\x67\x04\x3f\x05\x67\x04\x3f\x05\x65\x04\x26\x04\x65\x04\x6d\x04\x00\x00\x5c\x04\x3f\x05\x00\x00\xd7\xff\x3f\x05\x00\x00\x9d\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x69\x04\x5b\x04\x00\x00\x49\x04\x51\x04\x29\x04\x3c\x04\x41\x04\x6a\x04\x00\x00\x24\x04\x24\x04\x5e\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf9\xff\x20\x04\x00\x00\x00\x00\x00\x00\x00\x00\x26\x04\x00\x00\x02\x07\x10\x04\x00\x00\x5a\x04\x00\x00\x00\x00\x2b\x00\x57\x04\x00\x00\x3a\x04\x00\x00\x04\x03\x00\x00\x00\x00\x0c\x04\x5e\x01\x02\x04\x5e\x01\xb9\x00\xb9\x00\xf4\x03\x00\x00\xfb\x03\x00\x00\x00\x00\x00\x00\xeb\x03\x00\x00\x00\x00\x00\x00\xe3\x03\x00\x00\x00\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x9d\x00\x9d\x00\x9d\x00\xe0\x03\x00\x00\x00\x00\xd8\x03\xd2\x03\x00\x00\xd2\x03\x00\x00\x00\x00\x3f\x01\x10\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5e\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf2\x03\x00\x00\x33\x04\x00\x00\x00\x00\x00\x00\x00\x00\xcf\x03\x00\x00\x9d\x00\x9d\x00\x9d\x00\x00\x00\x00\x00\x00\x00\x33\x04\x00\x00\x9d\x00\x00\x00\x00\x00"#++happyGotoOffsets :: HappyAddr+happyGotoOffsets = HappyA# "\x6b\x04\xac\x0d\x34\x00\x05\x04\xf9\x03\x00\x00\x00\x00\x00\x00\x19\x01\x00\x00\x00\x00\x1a\x00\x00\x00\x49\x02\x05\x02\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\x05\x93\x0d\x00\x00\x00\x00\x39\x04\x81\x03\x78\x01\x00\x00\x00\x00\x80\x06\xf5\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7c\x02\x00\x00\x00\x00\xf7\x07\x26\x09\xbe\x08\x0c\x09\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x97\x03\x88\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x57\x08\x7a\x0d\x00\x00\x00\x00\x00\x00\x4c\x08\x00\x00\x61\x01\xac\x00\x00\x00\x23\x0b\x73\x09\x69\x08\x00\x00\x7c\x02\xf2\x08\x9e\x08\xd8\x08\x0b\x0b\xf3\x0a\xdb\x0a\x00\x00\xf6\x03\x61\x0d\x00\x00\x58\x03\x00\x00\xc3\x0a\xab\x0a\x93\x0a\x00\x00\x48\x0d\x3b\x0b\x36\x01\x00\x00\x21\x02\x00\x00\x00\x00\x7b\x0a\x63\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x2f\x0d\x16\x0d\x72\x04\x16\x01\x8a\x03\x00\x00\x00\x00\x38\x08\xa9\x00\x00\x00\x00\x00\x98\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8c\x00\x87\x00\x82\x04\x3b\x0b\x2f\x08\x00\x00\x25\x08\x00\x00\x7c\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3a\x06\x4b\x0a\x33\x0a\x1b\x0a\x59\x03\x43\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x56\x04\x09\x03\x07\x03\x99\x00\x1f\x00\x56\x03\x49\x03\x6a\x01\xff\x02\x47\x03\x3c\x03\x29\x03\xcb\x02\xc7\x02\xbe\x02\x1e\x03\x3d\x04\xed\x02\x00\x00\xfd\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x31\x01\x00\x00\x18\x03\x00\x00\x00\x00\x00\x00\x00\x00\xe4\x0c\x00\x00\xfe\x02\x00\x00\x00\x00\xd3\x02\x00\x00\x00\x00\x00\x00\x00\x00\xe5\x02\xe2\x02\x00\x00\x00\x00\x00\x00\x00\x00\x03\x0a\xeb\x09\x00\x00\xd3\x09\xbb\x09\x1f\x08\x00\x00\x1c\x08\xa3\x09\x5b\x09\x8b\x09\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xcb\x0c\x00\x00\x00\x00\xb2\x0c\x99\x0c\x00\x00\x00\x00\xce\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc5\x02\x00\x00\x7e\x02\x81\x08\x00\x00\x00\x00\x00\x00\xf4\x00\x80\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0a\x00\x00\x00\x67\x0c\x00\x00\x00\x00\x00\x00\x00\x00\xaf\x02\x00\x00\xad\x02\x88\x02\x70\x02\x6b\x02\x68\x02\x5b\x02\x28\x02\x0f\x02\x28\x04\x00\x00\xd6\x01\x00\x00\x00\x00\x00\x00\x3b\x02\x00\x00\xe5\x01\xe2\x01\x00\x00\x14\x00\x0a\x08\x00\x08\xc0\x07\x92\x06\x34\x06\x00\x00\x60\x02\x00\x00\x1d\x00\x00\x00\x18\x00\x00\x00\x8e\x02\x00\x00\x00\x00\x1f\x02\x4e\x0c\x35\x0c\x1d\x02\x1c\x0c\x00\x00\x00\x00\x00\x00\xa6\x03\x00\x00\x50\x02\x00\x00\x00\x00\x00\x00\x1c\x02\x00\x00\x00\x00\x00\x00\x00\x00\x8c\x01\x00\x00\x1f\x04\x00\x00\x00\x00\xe1\x00\xca\x00\xc1\x00\x00\x00\xde\x03\x00\x00\x00\x00\x6d\x00\x00\x00\x00\x00\x03\x0c\x00\x00\x00\x00\x00\x00\xc4\x01\x2b\x02\x00\x00\x00\x00\xb2\x02\x00\x00\x00\x00\xf7\x03\x13\x02\x00\x00\x00\x00\xf1\x03\x55\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x09\x72\x03\x00\x00\x00\x00\xef\x03\x00\x00\x13\x02\x39\x02\xcc\x01\xce\x01\x00\x00\x00\x00\x00\x00\x3e\x03\x00\x00\x00\x00\x00\x00\x00\x00\xea\x0b\x00\x00\xd7\x01\xa2\x01\xcd\x01\x00\x00\x00\x00\xd1\x01\xc1\x01\xb2\x01\x00\x00\x9a\x01\x00\x00\x00\x00\x00\x00\x00\x00\x96\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7d\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x46\x01\x00\x00\xff\xff\x00\x00\x00\x00\x84\x01\x00\x00\x7e\x03\x5e\x03\x4f\x03\x4d\x03\x00\x00\xa8\x00\xd1\x0b\x00\x00\x00\x00\x09\x01\xb8\x0b\x23\x02\x9f\x0b\x06\x02\x86\x0b\xaa\x02\x20\x00\x73\x02\x00\x00\x00\x00\xa6\x00\x6d\x0b\x00\x00\xc5\x00\x54\x0b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x73\x01\x00\x00\x63\x01\x00\x00\x00\x00\x00\x00\x62\x01\x4c\x01\x35\x01\xdd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc4\x00\xbc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x38\x00\xd8\x02\x00\x00\x00\x00\x00\x00\x00\x00\xfd\xff\x00\x00\x00\x00\x00\x00\x00\x00\xfc\xff\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x6a\x00\x6e\x03\x6a\x03\x8e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x21\x00\x00\x00\x00\x00\x00\x00\x3f\x03\x35\x03\x1f\x03\x45\x02\x00\x00\xe9\x02\xd1\x02\xc8\x02\x2c\x00\x00\x00\x00\x00\x90\xff\x14\x01\x00\x00\xbe\xff\x00\x00\x00\x00\x3b\x0b\x79\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf8\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xda\x00\x00\x00\xb4\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb4\x02\x9b\x02\xf7\x01\x00\x00\x00\x00\x00\x00\x47\x01\x00\x00\x10\x01\x00\x00\x00\x00"#++happyDefActions :: HappyAddr+happyDefActions = HappyA# "\xfa\xff\x00\x00\xc3\xfe\x00\x00\xfc\xff\x00\x00\xaa\xff\x00\x00\xc3\xfe\xa9\xff\xb6\xfe\xc3\xfe\xb2\xfe\xc4\xfe\x00\x00\x00\x00\x89\xff\x69\xff\x00\x00\x7b\xff\x7a\xff\x78\xff\x77\xff\x74\xff\x00\x00\x56\xff\x55\xff\x72\xff\x00\x00\x00\x00\x4e\xff\x4c\xff\x00\x00\x00\x00\x65\xff\x64\xff\x00\x00\x00\x00\x63\xff\x62\xff\x61\xff\x60\xff\x00\x00\x00\x00\x66\xff\x67\xff\x00\x00\x00\x00\x00\x00\x00\x00\xa1\xff\x8a\xff\x68\xff\x00\x00\x89\xff\x00\x00\x83\xff\x00\x00\x82\xff\x00\x00\x6a\xff\x89\xff\x5b\xff\x00\x00\x00\x00\x9e\xff\x00\x00\x00\x00\x00\x00\x5c\xff\x87\xff\x21\xff\x35\xff\x00\x00\x6f\xff\x00\x00\x40\xff\x3d\xff\x36\xff\x00\x00\x00\x00\x86\xff\x00\x00\x00\x00\x00\x00\x59\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x26\xff\x00\x00\x00\x00\x27\xff\x22\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x54\xff\x00\x00\xc3\xfe\x4d\xff\x00\x00\x00\x00\x00\x00\x4f\xff\x7e\xff\x76\xff\x6d\xff\x00\x00\x00\x00\x00\x00\x00\x00\x81\xff\x89\xff\x88\xff\x23\xff\xbf\xfe\xa8\xff\xb5\xfe\x00\x00\xfb\xff\xf9\xff\xf8\xff\xf7\xff\xf6\xff\xf5\xff\xf4\xff\xf3\xff\xf2\xff\xf1\xff\xf0\xff\xef\xff\xee\xff\xed\xff\xec\xff\xeb\xff\xea\xff\xe9\xff\xe8\xff\xe7\xff\xe6\xff\xe5\xff\xe4\xff\xe3\xff\xe2\xff\xe1\xff\xe0\xff\xdf\xff\xde\xff\xdd\xff\xdc\xff\xdb\xff\xda\xff\xd9\xff\xd8\xff\xd7\xff\xd6\xff\xcf\xff\xce\xff\xcd\xff\xd5\xff\xd4\xff\xd3\xff\xd2\xff\xd1\xff\xd0\xff\xcc\xff\xcb\xff\xca\xff\xc9\xff\xc8\xff\xc7\xff\xc6\xff\xc5\xff\xc4\xff\xc3\xff\xc2\xff\xc1\xff\xc0\xff\xbf\xff\xbe\xff\xbd\xff\xbc\xff\xbb\xff\xba\xff\xb9\xff\xb8\xff\xb7\xff\xb6\xff\xb5\xff\xb4\xff\xb3\xff\xb2\xff\xb1\xff\xb0\xff\xaf\xff\xae\xff\xad\xff\xac\xff\xab\xff\xbf\xfe\xbf\xfe\x12\xff\x00\x00\x23\xff\x00\x00\x23\xff\x00\x00\x81\xff\x5a\xff\x79\xff\x00\x00\x7c\xff\x82\xff\x72\xff\x00\x00\x00\x00\x00\x00\xfd\xfe\xe0\xfe\x81\xfe\xf7\xfe\xf6\xfe\xf5\xfe\xf4\xfe\xf3\xfe\xf2\xfe\xf8\xfe\xf1\xfe\xf0\xfe\xef\xfe\xee\xfe\xed\xfe\xe8\xfe\xe7\xfe\xec\xfe\xeb\xfe\xea\xfe\xe9\xfe\xb3\xfe\xb1\xfe\xb0\xfe\xae\xfe\xaf\xfe\xad\xfe\xac\xfe\xab\xfe\xa8\xfe\xa7\xfe\xaa\xfe\xa9\xfe\x00\x00\x00\x00\x00\x00\xc4\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\xff\x00\x00\x00\x00\x00\x00\x00\x00\x53\xff\x52\xff\x54\xff\x83\xff\x00\x00\x29\xff\x2a\xff\x7d\xff\x28\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x30\xff\x00\x00\x2b\xff\x00\x00\x00\x00\x33\xff\x32\xff\x34\xff\x20\xff\x00\x00\x00\x00\x1f\xff\x00\x00\x00\x00\x3c\xff\x38\xff\x3d\xff\x00\x00\x00\x00\x00\x00\x41\xff\x75\xff\x37\xff\x45\xff\x5d\xff\x9d\xff\x44\xff\x5f\xff\x00\x00\x43\xff\x6c\xff\x00\x00\x00\x00\x00\x00\x42\xff\x00\x00\x3a\xff\x39\xff\x3b\xff\x3f\xff\x3e\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa5\xff\x70\xff\xa4\xff\x00\x00\x00\x00\x4b\xff\x49\xff\x4a\xff\x48\xff\x46\xff\x47\xff\x71\xff\x1d\xff\x1e\xff\x00\x00\x00\x00\x58\xff\x00\x00\x73\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xfd\xfe\x00\x00\x9f\xff\x00\x00\x00\x00\xd0\xfe\xd1\xfe\xd2\xfe\x00\x00\xa2\xff\x00\x00\x00\x00\xd3\xfe\x00\x00\x23\xff\x23\xff\x23\xff\x23\xff\x23\xff\xb7\xfe\x00\x00\xce\xfe\x00\x00\xcf\xfe\x00\x00\x85\xfe\xc3\xfe\xa6\xff\xa7\xff\xfb\xfe\x00\x00\x00\x00\xff\xfe\x00\x00\x80\xff\xa6\xfe\x25\xff\x00\x00\x24\xff\x00\x00\xc1\xfe\x18\xff\x16\xff\x13\xff\x14\xff\x00\x00\x00\x00\x00\x00\x12\xff\xbe\xfe\x12\xff\xc2\xfe\x17\xff\xa3\xff\x00\x00\x07\xff\x15\xff\x12\xff\x83\xfe\xb4\xfe\x00\x00\xfc\xfe\x03\xff\x00\x00\xe2\xfe\xe1\xfe\xe3\xfe\x00\x00\x00\x00\x82\xfe\x9b\xff\x99\xff\x00\x00\x95\xfe\x00\x00\x00\x00\x00\x00\x98\xfe\x00\x00\x23\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x54\xff\x97\xff\x00\x00\x92\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x84\xff\xd6\xfe\xd5\xfe\xd4\xfe\x00\x00\xc9\xfe\xc7\xfe\x00\x00\xc5\xfe\x00\x00\xa0\xff\x01\xff\x6e\xff\xff\xfe\x00\x00\x7f\xff\x81\xff\x81\xff\x81\xff\x00\x00\x81\xff\x9d\xfe\x00\x00\x9b\xfe\x00\x00\x00\x00\x50\xff\x51\xff\x57\xff\x31\xff\x30\xff\x2f\xff\x2e\xff\x2c\xff\x2d\xff\x1b\xff\x1c\xff\x19\xff\x1a\xff\x5e\xff\x6b\xff\x00\x00\x9c\xfe\x9e\xfe\x00\x00\x81\xff\x00\x00\x00\x00\x00\x00\x9f\xfe\x02\xff\x00\xff\xcc\xfe\x00\x00\xc8\xfe\x00\x00\x85\xff\x00\x00\x00\x00\x9c\xff\x00\x00\x00\x00\x00\x00\x00\x00\x94\xfe\x00\x00\x00\x00\x98\xff\x89\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9a\xfe\x00\x00\x00\x00\x97\xfe\x00\x00\x00\x00\x9a\xff\x00\x00\xfa\xfe\xfe\xfe\x84\xfe\xc0\xfe\x09\xff\x05\xff\x00\x00\x06\xff\x00\x00\x00\x00\x00\x00\x00\x00\x0d\xff\x00\x00\xa3\xff\x00\x00\x00\x00\xa3\xff\x0f\xff\x0b\xff\x10\xff\x08\xff\x11\xff\x00\x00\x00\x00\xe5\xfe\x96\xfe\xe6\xfe\x99\xfe\x00\x00\xb8\xfe\xbf\xfe\x12\xff\xb9\xfe\xdb\xfe\x90\xfe\xdd\xfe\x00\x00\x00\x00\xdc\xfe\xd8\xfe\xd9\xfe\x00\x00\xe4\xfe\x93\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x95\xff\x93\xff\xcd\xfe\xcb\xfe\x00\x00\xa0\xfe\xa1\xfe\xa3\xfe\x00\x00\xa4\xfe\xa5\xfe\xa2\xfe\x00\x00\xca\xfe\x94\xff\x96\xff\x8f\xff\x91\xff\x8b\xff\x8d\xff\x8f\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x87\xfe\x86\xfe\x00\x00\x00\x00\x91\xfe\x00\x00\xbb\xfe\xbc\xfe\x00\x00\x12\xff\xf9\xfe\x04\xff\x0e\xff\x0c\xff\x0a\xff\xba\xfe\x00\x00\xdf\xfe\xde\xfe\xda\xfe\xd7\xfe\x8c\xfe\x8b\xfe\xc3\xfe\x8e\xfe\xc3\xfe\x8e\xff\x8c\xff\x92\xff\x90\xff\x00\x00\xc6\xfe\x00\x00\x00\x00\x00\x00\xbd\xfe\x88\xfe\x8a\xfe\xc3\xfe\x8d\xfe\x00\x00\x89\xfe"#++happyCheck :: HappyAddr+happyCheck = HappyA# "\xff\xff\x05\x00\x05\x00\x0b\x00\x41\x00\x09\x00\x09\x00\x0a\x00\x0f\x00\x03\x00\x09\x00\x0f\x00\x03\x00\x7d\x00\x37\x00\x4c\x00\x0f\x00\x10\x00\x39\x00\x09\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x09\x00\x04\x00\x46\x00\x0c\x00\x09\x00\x0e\x00\x4c\x00\x0c\x00\x0d\x00\x09\x00\x0a\x00\x09\x00\x09\x00\x3a\x00\x00\x00\x22\x00\x23\x00\x39\x00\x0f\x00\x10\x00\x41\x00\x03\x00\x3d\x00\x76\x00\x09\x00\x40\x00\x03\x00\x04\x00\x08\x00\x7c\x00\x46\x00\x4c\x00\x41\x00\x0f\x00\x39\x00\x0f\x00\x09\x00\x46\x00\x3a\x00\x47\x00\x4c\x00\x4a\x00\x0f\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\x1e\x00\x1f\x00\x20\x00\x5a\x00\x5e\x00\x5f\x00\x5d\x00\x49\x00\x62\x00\x63\x00\x48\x00\x03\x00\x61\x00\x67\x00\x47\x00\x69\x00\x0f\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x05\x00\x48\x00\x77\x00\x0b\x00\x09\x00\x4c\x00\x5e\x00\x5f\x00\x7e\x00\x4a\x00\x0f\x00\x81\x00\x5d\x00\x65\x00\x66\x00\x61\x00\x68\x00\x64\x00\x6a\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x3b\x00\x7b\x00\x09\x00\x79\x00\x5e\x00\x5f\x00\x77\x00\x09\x00\x0f\x00\x39\x00\x60\x00\x65\x00\x66\x00\x0f\x00\x68\x00\x00\x00\x6a\x00\x4c\x00\x39\x00\x03\x00\x09\x00\x4c\x00\x4d\x00\x1e\x00\x1f\x00\x20\x00\x0f\x00\x10\x00\x1e\x00\x1f\x00\x20\x00\x46\x00\x41\x00\x09\x00\x0a\x00\x09\x00\x09\x00\x46\x00\x0c\x00\x09\x00\x0e\x00\x4a\x00\x0f\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x11\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x1e\x00\x1f\x00\x20\x00\x09\x00\x5e\x00\x5f\x00\x09\x00\x09\x00\x62\x00\x63\x00\x0c\x00\x0d\x00\x09\x00\x67\x00\x38\x00\x69\x00\x39\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x09\x00\x07\x00\x48\x00\x49\x00\x60\x00\x07\x00\x0f\x00\x38\x00\x5d\x00\x60\x00\x47\x00\x81\x00\x36\x00\x37\x00\x49\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x49\x00\x43\x00\x09\x00\x45\x00\x3e\x00\x3f\x00\x40\x00\x3e\x00\x0f\x00\x40\x00\x4c\x00\x3b\x00\x3a\x00\x3e\x00\x60\x00\x40\x00\x0b\x00\x3f\x00\x48\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x05\x00\x06\x00\x4c\x00\x3b\x00\x3c\x00\x3d\x00\x41\x00\x3b\x00\x3c\x00\x3d\x00\x09\x00\x46\x00\x2d\x00\x2e\x00\x2f\x00\x4a\x00\x0f\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\x1e\x00\x1f\x00\x20\x00\x39\x00\x5e\x00\x5f\x00\x09\x00\x7f\x00\x62\x00\x63\x00\x09\x00\x09\x00\x01\x00\x67\x00\x44\x00\x69\x00\x46\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x09\x00\x12\x00\x21\x00\x22\x00\x23\x00\x09\x00\x0f\x00\x21\x00\x22\x00\x23\x00\x38\x00\x81\x00\x1d\x00\x1e\x00\x1f\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x46\x00\x07\x00\x09\x00\x49\x00\x09\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x11\x00\x09\x00\x35\x00\x36\x00\x37\x00\x5e\x00\x5f\x00\x0f\x00\x3b\x00\x3c\x00\x09\x00\x3e\x00\x65\x00\x66\x00\x41\x00\x09\x00\x43\x00\x44\x00\x45\x00\x46\x00\x7d\x00\x0f\x00\x41\x00\x1f\x00\x76\x00\x4c\x00\x4d\x00\x46\x00\x4f\x00\x0b\x00\x7c\x00\x4a\x00\x15\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x1f\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x09\x00\x44\x00\x5d\x00\x46\x00\x5e\x00\x5f\x00\x0f\x00\x10\x00\x62\x00\x63\x00\x09\x00\x16\x00\x01\x00\x67\x00\x15\x00\x69\x00\x0f\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x09\x00\x12\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x0f\x00\x38\x00\x39\x00\x3a\x00\x15\x00\x81\x00\x1d\x00\x1e\x00\x1f\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x09\x00\x15\x00\x09\x00\x0c\x00\x0d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x11\x00\x12\x00\x35\x00\x36\x00\x37\x00\x3a\x00\x08\x00\x15\x00\x3b\x00\x3c\x00\x3f\x00\x3e\x00\x09\x00\x0f\x00\x41\x00\x09\x00\x43\x00\x44\x00\x45\x00\x46\x00\x11\x00\x12\x00\x41\x00\x11\x00\x12\x00\x4c\x00\x4d\x00\x46\x00\x4f\x00\x05\x00\x06\x00\x4a\x00\x3a\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x3f\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x09\x00\x44\x00\x43\x00\x46\x00\x5e\x00\x5f\x00\x0f\x00\x10\x00\x62\x00\x63\x00\x09\x00\x42\x00\x01\x00\x67\x00\x09\x00\x69\x00\x0f\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x09\x00\x12\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x0f\x00\x5b\x00\x5c\x00\x5d\x00\x09\x00\x81\x00\x1d\x00\x1e\x00\x1f\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x09\x00\x7f\x00\x09\x00\x0c\x00\x0d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x11\x00\x12\x00\x09\x00\x36\x00\x37\x00\x0c\x00\x09\x00\x0e\x00\x3b\x00\x3c\x00\x3a\x00\x3e\x00\x0f\x00\x10\x00\x41\x00\x0b\x00\x43\x00\x44\x00\x45\x00\x46\x00\x43\x00\x43\x00\x41\x00\x45\x00\x45\x00\x4c\x00\x4d\x00\x46\x00\x4f\x00\x09\x00\x4c\x00\x4a\x00\x44\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x16\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x43\x00\x76\x00\x45\x00\x16\x00\x5e\x00\x5f\x00\x16\x00\x7c\x00\x62\x00\x63\x00\x09\x00\x16\x00\x01\x00\x67\x00\x0b\x00\x69\x00\x0f\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x09\x00\x12\x00\x76\x00\x1e\x00\x1f\x00\x20\x00\x0f\x00\x16\x00\x7c\x00\x05\x00\x06\x00\x81\x00\x1d\x00\x1e\x00\x1f\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x05\x00\x06\x00\x09\x00\x36\x00\x37\x00\x0c\x00\x0d\x00\x3b\x00\x3b\x00\x3c\x00\x16\x00\x3e\x00\x16\x00\x41\x00\x41\x00\x43\x00\x43\x00\x45\x00\x45\x00\x46\x00\x05\x00\x06\x00\x41\x00\x0b\x00\x4c\x00\x4c\x00\x4d\x00\x46\x00\x4f\x00\x05\x00\x06\x00\x4a\x00\x0b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x0b\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x06\x00\x36\x00\x37\x00\x06\x00\x5e\x00\x5f\x00\x05\x00\x06\x00\x62\x00\x63\x00\x7f\x00\x80\x00\x41\x00\x67\x00\x43\x00\x69\x00\x45\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x00\x00\x01\x00\x0a\x00\x0b\x00\x0c\x00\x0b\x00\x06\x00\x07\x00\x08\x00\x09\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\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\x0b\x00\x20\x00\x21\x00\x3b\x00\x09\x00\x09\x00\x7f\x00\x80\x00\x0c\x00\x41\x00\x0e\x00\x43\x00\x42\x00\x45\x00\x08\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x4c\x00\x41\x00\x35\x00\x43\x00\x37\x00\x45\x00\x7f\x00\x09\x00\x3b\x00\x3c\x00\x0c\x00\x3e\x00\x0e\x00\x08\x00\x41\x00\x7f\x00\x43\x00\x09\x00\x45\x00\x7f\x00\x0c\x00\x48\x00\x0e\x00\x4a\x00\x08\x00\x4c\x00\x4d\x00\x09\x00\x4f\x00\x00\x00\x01\x00\x09\x00\x0a\x00\x09\x00\x0a\x00\x06\x00\x07\x00\x08\x00\x09\x00\x42\x00\x09\x00\x44\x00\x09\x00\x46\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x09\x00\x0a\x00\x11\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x09\x00\x20\x00\x21\x00\x0c\x00\x09\x00\x0e\x00\x7a\x00\x0c\x00\x09\x00\x0e\x00\x76\x00\x0c\x00\x27\x00\x0e\x00\x78\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x09\x00\x0a\x00\x35\x00\x32\x00\x37\x00\x34\x00\x35\x00\x4b\x00\x3b\x00\x3c\x00\x15\x00\x3e\x00\x0b\x00\x41\x00\x41\x00\x43\x00\x43\x00\x45\x00\x45\x00\x5c\x00\x5d\x00\x48\x00\x44\x00\x4a\x00\x15\x00\x4c\x00\x4d\x00\x0b\x00\x4f\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\x01\x00\x05\x00\x06\x00\x05\x00\x06\x00\x06\x00\x07\x00\x08\x00\x02\x00\x05\x00\x06\x00\x09\x00\x09\x00\x7f\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x01\x00\x11\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x42\x00\x20\x00\x21\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x47\x00\x0a\x00\x0b\x00\x0c\x00\x27\x00\x0e\x00\x47\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x7f\x00\x80\x00\x35\x00\x32\x00\x37\x00\x34\x00\x35\x00\x4c\x00\x3b\x00\x3c\x00\x4c\x00\x3e\x00\x09\x00\x0a\x00\x41\x00\x01\x00\x43\x00\x4b\x00\x45\x00\x3d\x00\x06\x00\x07\x00\x08\x00\x4a\x00\x03\x00\x4c\x00\x4d\x00\x4c\x00\x4f\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x09\x00\x0a\x00\x46\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x46\x00\x20\x00\x21\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x03\x00\x05\x00\x06\x00\x03\x00\x09\x00\x26\x00\x27\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x11\x00\x47\x00\x35\x00\x01\x00\x37\x00\x00\x00\x01\x00\x0f\x00\x3b\x00\x3c\x00\x4c\x00\x3e\x00\x4c\x00\x4d\x00\x41\x00\x4c\x00\x43\x00\x0d\x00\x45\x00\x38\x00\x12\x00\x09\x00\x27\x00\x4a\x00\x42\x00\x4c\x00\x4d\x00\x0f\x00\x4f\x00\x39\x00\x3a\x00\x1d\x00\x1e\x00\x1f\x00\x33\x00\x34\x00\x35\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x42\x00\x01\x00\x4c\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x4c\x00\x4d\x00\x42\x00\x36\x00\x37\x00\x03\x00\x38\x00\x4e\x00\x3b\x00\x3c\x00\x12\x00\x3e\x00\x3a\x00\x4c\x00\x41\x00\x42\x00\x43\x00\x47\x00\x45\x00\x47\x00\x4c\x00\x1d\x00\x1e\x00\x1f\x00\x47\x00\x4c\x00\x4d\x00\x46\x00\x4f\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x4c\x00\x4b\x00\x01\x00\x4b\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x4b\x00\x4b\x00\x4b\x00\x36\x00\x37\x00\x4b\x00\x4e\x00\x4e\x00\x3b\x00\x3c\x00\x12\x00\x3e\x00\x4b\x00\x4e\x00\x41\x00\x4b\x00\x43\x00\x4e\x00\x45\x00\x46\x00\x04\x00\x1d\x00\x1e\x00\x1f\x00\x40\x00\x4c\x00\x4d\x00\x3e\x00\x4f\x00\x39\x00\x03\x00\x39\x00\x4c\x00\x39\x00\x4c\x00\x47\x00\x01\x00\x0f\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x41\x00\x41\x00\x41\x00\x36\x00\x37\x00\x0c\x00\x04\x00\x4b\x00\x3b\x00\x3c\x00\x12\x00\x3e\x00\x47\x00\x3a\x00\x41\x00\x42\x00\x43\x00\x05\x00\x45\x00\x4c\x00\x4c\x00\x1d\x00\x1e\x00\x1f\x00\x4e\x00\x4c\x00\x4d\x00\x4b\x00\x4f\x00\x4e\x00\x46\x00\x4e\x00\x4e\x00\x4c\x00\x46\x00\x3d\x00\x01\x00\x3d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x3d\x00\x3d\x00\x46\x00\x36\x00\x37\x00\x3d\x00\x3d\x00\x46\x00\x3b\x00\x3c\x00\x12\x00\x3e\x00\x42\x00\x42\x00\x41\x00\x3a\x00\x43\x00\x38\x00\x45\x00\x46\x00\x40\x00\x1d\x00\x1e\x00\x1f\x00\x46\x00\x4c\x00\x4d\x00\x4c\x00\x4f\x00\x4c\x00\x46\x00\x4f\x00\x05\x00\x47\x00\x47\x00\x47\x00\x01\x00\x47\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x4c\x00\x40\x00\x03\x00\x36\x00\x37\x00\x4e\x00\x4b\x00\x4e\x00\x3b\x00\x3c\x00\x12\x00\x3e\x00\x02\x00\x09\x00\x41\x00\x42\x00\x43\x00\x4c\x00\x45\x00\x0f\x00\x45\x00\x1d\x00\x1e\x00\x1f\x00\x3d\x00\x4c\x00\x4d\x00\x01\x00\x4f\x00\x02\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x3d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x42\x00\x12\x00\x42\x00\x36\x00\x37\x00\x46\x00\x50\x00\x46\x00\x3b\x00\x3c\x00\x46\x00\x3e\x00\x1d\x00\x1e\x00\x41\x00\x39\x00\x43\x00\x47\x00\x45\x00\x4c\x00\x3d\x00\x22\x00\x50\x00\x3f\x00\x09\x00\x4c\x00\x4d\x00\x01\x00\x4f\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x50\x00\xff\xff\xff\xff\xff\xff\x37\x00\xff\xff\xff\xff\xff\xff\x3b\x00\x3c\x00\x12\x00\x3e\x00\xff\xff\xff\xff\x41\x00\xff\xff\x43\x00\x44\x00\x45\x00\x46\x00\xff\xff\x1d\x00\x1e\x00\x1f\x00\xff\xff\x4c\x00\x4d\x00\x01\x00\x4f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\xff\xff\x12\x00\xff\xff\x36\x00\x37\x00\xff\xff\xff\xff\xff\xff\x3b\x00\x3c\x00\xff\xff\x3e\x00\x1d\x00\x1e\x00\x41\x00\xff\xff\x43\x00\xff\xff\x45\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x4c\x00\x4d\x00\x01\x00\x4f\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\xff\xff\xff\xff\xff\xff\xff\xff\x37\x00\xff\xff\xff\xff\xff\xff\x3b\x00\x3c\x00\x12\x00\x3e\x00\xff\xff\xff\xff\x41\x00\xff\xff\x43\x00\x44\x00\x45\x00\x46\x00\xff\xff\x1d\x00\x1e\x00\x1f\x00\xff\xff\x4c\x00\x4d\x00\x01\x00\x4f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\xff\xff\x12\x00\xff\xff\x36\x00\x37\x00\xff\xff\xff\xff\xff\xff\x3b\x00\x3c\x00\xff\xff\x3e\x00\x1d\x00\x1e\x00\x41\x00\xff\xff\x43\x00\xff\xff\x45\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x4c\x00\x4d\x00\xff\xff\x4f\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\xff\xff\xff\xff\x01\x00\xff\xff\x37\x00\xff\xff\xff\xff\xff\xff\x3b\x00\x3c\x00\x3d\x00\x3e\x00\xff\xff\x40\x00\x41\x00\x09\x00\x43\x00\xff\xff\x45\x00\x12\x00\xff\xff\x09\x00\xff\xff\x11\x00\xff\xff\x4c\x00\x4d\x00\x0f\x00\x4f\x00\xff\xff\x1d\x00\x1e\x00\x1f\x00\xff\xff\xff\xff\xff\xff\x01\x00\xff\xff\x1a\x00\x1b\x00\x1c\x00\xff\xff\x1e\x00\x1f\x00\x20\x00\x27\x00\xff\xff\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\xff\xff\x12\x00\xff\xff\x36\x00\x37\x00\x33\x00\x34\x00\x35\x00\x3b\x00\x3c\x00\xff\xff\x3e\x00\x1d\x00\x1e\x00\x41\x00\xff\xff\x43\x00\xff\xff\x45\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x4c\x00\x4d\x00\x01\x00\x4f\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\xff\xff\xff\xff\xff\xff\xff\xff\x37\x00\x09\x00\xff\xff\xff\xff\x3b\x00\x3c\x00\x12\x00\x3e\x00\xff\xff\x11\x00\x41\x00\xff\xff\x43\x00\xff\xff\x45\x00\x46\x00\xff\xff\x1d\x00\x1e\x00\x09\x00\xff\xff\x4c\x00\x4d\x00\x01\x00\x4f\x00\xff\xff\xff\xff\x11\x00\xff\xff\xff\xff\xff\xff\x27\x00\xff\xff\xff\xff\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\xff\xff\x12\x00\x31\x00\x32\x00\x37\x00\x34\x00\x35\x00\xff\xff\x3b\x00\x3c\x00\x27\x00\x3e\x00\x1d\x00\x1e\x00\x41\x00\x42\x00\x43\x00\xff\xff\x45\x00\xff\xff\xff\xff\xff\xff\x33\x00\x34\x00\x35\x00\x4c\x00\x4d\x00\x01\x00\x4f\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\xff\xff\xff\xff\x36\x00\x37\x00\x37\x00\xff\xff\xff\xff\x3b\x00\x3b\x00\x3c\x00\x12\x00\x3e\x00\xff\xff\x41\x00\x41\x00\x43\x00\x43\x00\x45\x00\x45\x00\x46\x00\xff\xff\x1d\x00\x1e\x00\xff\xff\x4c\x00\x4c\x00\x4d\x00\x01\x00\x4f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\xff\xff\x12\x00\xff\xff\xff\xff\x37\x00\xff\xff\xff\xff\xff\xff\x3b\x00\x3c\x00\xff\xff\x3e\x00\x1d\x00\x1e\x00\x41\x00\x42\x00\x43\x00\xff\xff\x45\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x12\x00\x4c\x00\x4d\x00\xff\xff\x4f\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\xff\xff\x1d\x00\x1e\x00\xff\xff\x37\x00\xff\xff\xff\xff\xff\xff\x3b\x00\x3c\x00\xff\xff\x3e\x00\xff\xff\xff\xff\x41\x00\xff\xff\x43\x00\xff\xff\x45\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x12\x00\xff\xff\x4c\x00\x4d\x00\x37\x00\x4f\x00\xff\xff\xff\xff\x3b\x00\x3c\x00\xff\xff\x1d\x00\x1e\x00\xff\xff\x41\x00\xff\xff\x43\x00\xff\xff\x45\x00\xff\xff\xff\xff\xff\xff\xff\xff\x12\x00\xff\xff\x4c\x00\x4d\x00\xff\xff\x4f\x00\x2f\x00\x30\x00\x31\x00\x32\x00\xff\xff\x1d\x00\x1e\x00\xff\xff\x37\x00\xff\xff\xff\xff\xff\xff\x3b\x00\x3c\x00\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\xff\xff\x43\x00\xff\xff\x45\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x12\x00\xff\xff\x4c\x00\x4d\x00\x37\x00\x4f\x00\xff\xff\xff\xff\x3b\x00\x3c\x00\xff\xff\x1d\x00\x1e\x00\xff\xff\x41\x00\xff\xff\x43\x00\xff\xff\x45\x00\xff\xff\xff\xff\xff\xff\xff\xff\x12\x00\xff\xff\x4c\x00\x4d\x00\xff\xff\x4f\x00\x2f\x00\x30\x00\x31\x00\x32\x00\xff\xff\x1d\x00\x1e\x00\xff\xff\x37\x00\xff\xff\xff\xff\xff\xff\x3b\x00\x3c\x00\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\xff\xff\x43\x00\xff\xff\x45\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x12\x00\xff\xff\x4c\x00\x4d\x00\x37\x00\x4f\x00\xff\xff\xff\xff\x3b\x00\x3c\x00\xff\xff\x1d\x00\x1e\x00\xff\xff\x41\x00\xff\xff\x43\x00\xff\xff\x45\x00\xff\xff\xff\xff\xff\xff\xff\xff\x12\x00\xff\xff\x4c\x00\x4d\x00\xff\xff\x4f\x00\x2f\x00\x30\x00\x31\x00\x32\x00\xff\xff\x1d\x00\x1e\x00\x09\x00\x37\x00\xff\xff\xff\xff\xff\xff\x3b\x00\x3c\x00\xff\xff\x11\x00\xff\xff\xff\xff\x41\x00\xff\xff\x43\x00\xff\xff\x45\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x12\x00\xff\xff\x4c\x00\x4d\x00\x37\x00\x4f\x00\xff\xff\xff\xff\x3b\x00\x3c\x00\x27\x00\x1d\x00\x1e\x00\xff\xff\x41\x00\xff\xff\x43\x00\xff\xff\x45\x00\xff\xff\xff\xff\xff\xff\x33\x00\x34\x00\x35\x00\x4c\x00\x4d\x00\xff\xff\x4f\x00\x2f\x00\x30\x00\x31\x00\x32\x00\xff\xff\xff\xff\x09\x00\xff\xff\x37\x00\xff\xff\xff\xff\xff\xff\x3b\x00\x3c\x00\x11\x00\x09\x00\xff\xff\xff\xff\x41\x00\xff\xff\x43\x00\xff\xff\x45\x00\x11\x00\xff\xff\x09\x00\xff\xff\xff\xff\xff\xff\x4c\x00\x4d\x00\xff\xff\x4f\x00\x11\x00\xff\xff\xff\xff\x27\x00\xff\xff\x29\x00\x2a\x00\x2b\x00\x2c\x00\xff\xff\x09\x00\xff\xff\x27\x00\x09\x00\xff\xff\xff\xff\x34\x00\x35\x00\x11\x00\x09\x00\xff\xff\x11\x00\x27\x00\xff\xff\x33\x00\x34\x00\x35\x00\x11\x00\xff\xff\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\x33\x00\x34\x00\x35\x00\x11\x00\x09\x00\xff\xff\x27\x00\xff\xff\xff\xff\x27\x00\x2b\x00\xff\xff\x11\x00\x2b\x00\xff\xff\x27\x00\xff\xff\xff\xff\xff\xff\x34\x00\x35\x00\xff\xff\x34\x00\x35\x00\x09\x00\x27\x00\xff\xff\x33\x00\x34\x00\x35\x00\xff\xff\xff\xff\x11\x00\xff\xff\x27\x00\x09\x00\xff\xff\x33\x00\x34\x00\x35\x00\xff\xff\xff\xff\xff\xff\x11\x00\xff\xff\xff\xff\x33\x00\x34\x00\x35\x00\xff\xff\xff\xff\xff\xff\xff\xff\x09\x00\x27\x00\xff\xff\xff\xff\xff\xff\x2b\x00\x0f\x00\xff\xff\xff\xff\xff\xff\x13\x00\x14\x00\x27\x00\xff\xff\x34\x00\x35\x00\x2b\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x09\x00\x34\x00\x35\x00\xff\xff\xff\xff\xff\xff\x0f\x00\x28\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2d\x00\x2e\x00\xff\xff\x30\x00\xff\xff\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x09\x00\xff\xff\x0b\x00\xff\xff\xff\xff\xff\xff\x0f\x00\x2d\x00\x2e\x00\x2f\x00\x13\x00\x14\x00\xff\xff\xff\xff\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\xff\xff\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x09\x00\xff\xff\x0b\x00\xff\xff\xff\xff\xff\xff\x0f\x00\xff\xff\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\xff\xff\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\xff\xff\xff\xff\x09\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x0f\x00\xff\xff\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\xff\xff\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\xff\xff\xff\xff\x09\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x0f\x00\xff\xff\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\xff\xff\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\xff\xff\xff\xff\x09\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x0f\x00\xff\xff\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\xff\xff\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\xff\xff\xff\xff\x09\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x0f\x00\xff\xff\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\xff\xff\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\xff\xff\xff\xff\x09\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x0f\x00\xff\xff\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1b\x00\x1c\x00\xff\xff\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x09\x00\xff\xff\x0b\x00\xff\xff\x28\x00\xff\xff\x0f\x00\xff\xff\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1b\x00\x1c\x00\xff\xff\x1e\x00\x1f\x00\x20\x00\x09\x00\xff\xff\x0b\x00\xff\xff\xff\xff\xff\xff\x0f\x00\x28\x00\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1b\x00\x1c\x00\xff\xff\x1e\x00\x1f\x00\x20\x00\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x28\x00\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1b\x00\x1c\x00\xff\xff\x1e\x00\x1f\x00\x20\x00\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x28\x00\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1b\x00\x1c\x00\xff\xff\x1e\x00\x1f\x00\x20\x00\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x28\x00\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1b\x00\x1c\x00\xff\xff\x1e\x00\x1f\x00\x20\x00\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x28\x00\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1b\x00\x1c\x00\xff\xff\x1e\x00\x1f\x00\x20\x00\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x28\x00\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1b\x00\x1c\x00\xff\xff\x1e\x00\x1f\x00\x20\x00\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x28\x00\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1b\x00\x1c\x00\xff\xff\x1e\x00\x1f\x00\x20\x00\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x28\x00\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1b\x00\x1c\x00\xff\xff\x1e\x00\x1f\x00\x20\x00\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x28\x00\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1b\x00\x1c\x00\xff\xff\x1e\x00\x1f\x00\x20\x00\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x28\x00\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1b\x00\x1c\x00\xff\xff\x1e\x00\x1f\x00\x20\x00\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x28\x00\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1b\x00\x1c\x00\xff\xff\x1e\x00\x1f\x00\x20\x00\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x28\x00\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1b\x00\x1c\x00\xff\xff\x1e\x00\x1f\x00\x20\x00\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x28\x00\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1b\x00\x1c\x00\xff\xff\x1e\x00\x1f\x00\x20\x00\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x28\x00\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1b\x00\x1c\x00\xff\xff\x1e\x00\x1f\x00\x20\x00\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x28\x00\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1b\x00\x1c\x00\xff\xff\x1e\x00\x1f\x00\x20\x00\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x28\x00\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1b\x00\x1c\x00\xff\xff\x1e\x00\x1f\x00\x20\x00\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x28\x00\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1b\x00\x1c\x00\xff\xff\x1e\x00\x1f\x00\x20\x00\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x28\x00\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1b\x00\x1c\x00\xff\xff\x1e\x00\x1f\x00\x20\x00\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x28\x00\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1b\x00\x1c\x00\xff\xff\x1e\x00\x1f\x00\x20\x00\x09\x00\xff\xff\x0b\x00\xff\xff\xff\xff\xff\xff\x0f\x00\x28\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\xff\xff\x09\x00\xff\xff\x24\x00\x25\x00\x26\x00\x27\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\xff\xff\x09\x00\xff\xff\x24\x00\x25\x00\x26\x00\x27\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\xff\xff\x09\x00\xff\xff\x24\x00\x25\x00\x26\x00\x27\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\xff\xff\x09\x00\xff\xff\x24\x00\x25\x00\x26\x00\x27\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\xff\xff\x09\x00\xff\xff\x24\x00\x25\x00\x26\x00\x27\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\xff\xff\x09\x00\xff\xff\x24\x00\x25\x00\x26\x00\x27\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\xff\xff\x09\x00\xff\xff\x24\x00\x25\x00\x26\x00\x27\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\xff\xff\x09\x00\xff\xff\x24\x00\x25\x00\x26\x00\x27\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\xff\xff\x09\x00\xff\xff\x24\x00\x25\x00\x26\x00\x27\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\xff\xff\x09\x00\xff\xff\x24\x00\x25\x00\x26\x00\x27\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\xff\xff\x09\x00\xff\xff\x24\x00\x25\x00\x26\x00\x27\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\xff\xff\x09\x00\xff\xff\x24\x00\x25\x00\x26\x00\x27\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\xff\xff\x09\x00\xff\xff\x24\x00\x25\x00\x26\x00\x27\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\xff\xff\x09\x00\xff\xff\x24\x00\x25\x00\x26\x00\x27\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\xff\xff\x09\x00\xff\xff\x24\x00\x25\x00\x26\x00\x27\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\xff\xff\x09\x00\xff\xff\x24\x00\x25\x00\x26\x00\x27\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\xff\xff\x09\x00\xff\xff\x24\x00\x25\x00\x26\x00\x27\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\xff\xff\x09\x00\xff\xff\x24\x00\x25\x00\x26\x00\x27\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\xff\xff\x09\x00\xff\xff\x24\x00\x25\x00\x26\x00\x27\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\xff\xff\x09\x00\xff\xff\x24\x00\x25\x00\x26\x00\x27\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\xff\xff\x09\x00\xff\xff\x24\x00\x25\x00\x26\x00\x27\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\xff\xff\x09\x00\xff\xff\x24\x00\x25\x00\x26\x00\x27\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\xff\xff\x09\x00\xff\xff\x24\x00\x25\x00\x26\x00\x27\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\xff\xff\x09\x00\xff\xff\x24\x00\x25\x00\x26\x00\x27\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\xff\xff\x09\x00\xff\xff\x24\x00\x25\x00\x26\x00\x27\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\xff\xff\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\x27\x00\x36\x00\x37\x00\xff\xff\x36\x00\x37\x00\x3b\x00\xff\xff\x3d\x00\x3b\x00\xff\xff\x3d\x00\x41\x00\xff\xff\x43\x00\x41\x00\x45\x00\x43\x00\xff\xff\x45\x00\x36\x00\x37\x00\xff\xff\x4c\x00\xff\xff\x3b\x00\x4c\x00\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\xff\xff\x43\x00\xff\xff\x45\x00\x36\x00\x37\x00\xff\xff\x36\x00\x37\x00\x3b\x00\x4c\x00\xff\xff\x3b\x00\xff\xff\xff\xff\x41\x00\xff\xff\x43\x00\x41\x00\x45\x00\x43\x00\xff\xff\x45\x00\x36\x00\x37\x00\xff\xff\x4c\x00\xff\xff\x3b\x00\x4c\x00\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\xff\xff\x43\x00\xff\xff\x45\x00\x36\x00\x37\x00\xff\xff\x36\x00\x37\x00\x3b\x00\x4c\x00\xff\xff\x3b\x00\xff\xff\xff\xff\x41\x00\xff\xff\x43\x00\x41\x00\x45\x00\x43\x00\xff\xff\x45\x00\xff\xff\xff\xff\xff\xff\x4c\x00\xff\xff\xff\xff\x4c\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\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"#++happyTable :: HappyAddr+happyTable = HappyA# "\x00\x00\x6f\x02\x78\x02\x97\x02\xdb\x01\x10\x00\x77\x01\xc1\x01\x33\x02\x19\x02\x79\x00\x11\x00\x1f\x02\x87\x02\xc1\x01\xdc\x01\x7a\x00\x49\x02\x49\x01\x17\x01\xe2\x00\x14\x00\x15\x00\x16\x00\x17\x00\xdb\x00\x19\x00\x1a\x00\x1b\x00\xbb\x01\x7d\x00\xf8\x01\xcb\x01\xbb\x01\xcc\x01\x33\x00\xbc\x01\xbd\x01\x77\x01\xc1\x01\x86\x01\x79\x00\x0b\x02\x91\x01\xee\x01\x1a\x01\x49\x01\x7a\x00\x49\x02\xdb\x01\xb9\x01\x76\x00\x4d\x02\x88\x02\x77\x00\x05\x00\x06\x00\x0e\x00\x85\x02\xfa\x01\xdc\x01\xe3\x00\xba\x01\x1a\x02\x0f\x00\x10\x00\xe4\x00\x20\x02\xc2\x01\x33\x00\xe5\x00\x11\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\x70\x02\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\x19\x00\x1a\x00\xd1\x00\x5d\x02\x07\x00\xf3\x00\x5e\x02\xcd\x01\xf4\x00\xf5\x00\xbe\x01\x1b\x02\x7d\x02\xf6\x00\xc2\x01\xf7\x00\x8a\x01\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x00\x01\x01\x01\x02\x01\x2c\x02\x92\x01\xc3\x01\x6b\x02\x10\x00\x33\x00\x07\x00\x08\x00\x71\x02\x10\x00\x11\x00\x72\x02\x92\x02\x09\x00\x0a\x00\x4a\x02\x0b\x00\x87\x01\x0c\x00\xe2\x00\x14\x00\x15\x00\x16\x00\x17\x00\xdb\x00\x19\x00\x1a\x00\x1b\x00\x52\x00\xce\x01\x10\x00\xbf\x01\x07\x00\x08\x00\xc3\x01\x10\x00\x11\x00\x1c\x02\x7b\x02\x09\x00\x0a\x00\x11\x00\x0b\x00\x91\x01\x0c\x00\x33\x00\x82\xff\x1d\x02\x79\x00\x33\x00\x34\x00\x19\x00\x1a\x00\xd1\x00\x7a\x00\x7c\x00\x19\x00\x1a\x00\xd1\x00\x82\xff\xe3\x00\x77\x01\xc1\x01\xbb\x01\x10\x00\xe4\x00\xcb\x01\x46\x00\xcc\x01\xe5\x00\x11\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\x31\x01\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\x19\x00\x1a\x00\xd1\x00\x2e\x02\x07\x00\xf3\x00\x2e\x02\xbb\x01\xf4\x00\xf5\x00\xbc\x01\xbd\x01\x2e\x02\xf6\x00\x58\x01\xf7\x00\x1e\x02\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x00\x01\x01\x01\x02\x01\x10\x00\x34\x02\x92\x01\x5a\x01\xa6\x01\x34\x02\x11\x00\x58\x01\x68\x02\xa7\x01\x46\x02\x03\x01\xd0\x01\xd1\x01\x56\x02\xe2\x00\x14\x00\x15\x00\x16\x00\x17\x00\xdb\x00\x19\x00\x1a\x00\x1b\x00\x5a\x01\xd2\x01\x10\x00\xd3\x01\x2f\x02\x30\x02\x31\x02\x2f\x02\x11\x00\x7f\x02\x33\x00\x89\x01\x69\x01\x2f\x02\xd2\x00\x33\x02\x6d\x02\x78\x00\x44\x02\xf1\x01\x16\x00\x17\x00\x2a\x01\x19\x00\x1a\x00\x1b\x00\x9d\x02\x8f\x01\x33\x00\x80\x02\x36\x02\x37\x02\xe3\x00\x35\x02\x36\x02\x37\x02\x10\x00\xe4\x00\xf2\x01\xf3\x01\xf4\x01\xe5\x00\x11\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\x95\x02\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\x19\x00\x1a\x00\xd9\x00\x49\x01\x07\x00\xf3\x00\x17\x01\x7e\x02\xf4\x00\xf5\x00\x81\x02\x17\x01\x21\x00\xf6\x00\x42\x00\xf7\x00\x43\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x00\x01\x01\x01\x02\x01\x10\x00\x22\x00\x65\x01\x19\x01\x1a\x01\x82\x02\x11\x00\x18\x01\x19\x01\x1a\x01\x58\x01\x96\x02\x23\x00\x24\x00\x25\x00\xe2\x00\x14\x00\x15\x00\x16\x00\x17\x00\xdb\x00\x19\x00\x1a\x00\x1b\x00\x59\x01\x39\x02\x46\x00\x5a\x01\x3d\x02\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x34\x01\x10\x00\x85\x02\x2b\x00\x2c\x00\x07\x00\x08\x00\x11\x00\x2d\x00\x2e\x00\x3f\x02\x2f\x00\x7e\x00\x0a\x00\x30\x00\x10\x00\x31\x00\x42\x00\x32\x00\x43\x00\x53\x02\x11\x00\xe3\x00\x83\x01\x4d\x02\x33\x00\x34\x00\xe4\x00\x35\x00\x5b\x02\x86\x02\xe5\x00\x63\x02\xe6\x00\xe7\x00\xe8\x00\xe9\x00\x66\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\x79\x00\x42\x00\x5f\x02\x43\x00\x07\x00\xf3\x00\x7a\x00\xd0\x00\xf4\x00\xf5\x00\x10\x00\xfc\x01\x21\x00\xf6\x00\xff\x01\xf7\x00\x11\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x00\x01\x01\x01\x02\x01\x10\x00\x22\x00\x73\x00\x19\x00\x1a\x00\xdf\x01\x11\x00\xa9\x01\xa0\x01\xa1\x01\x01\x02\x9c\x02\x23\x00\x24\x00\x25\x00\xe2\x00\x14\x00\x15\x00\x16\x00\x17\x00\xdb\x00\x19\x00\x1a\x00\x1b\x00\xbb\x01\x02\x02\x46\x00\xbc\x01\x0c\x02\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\xd3\x01\x0b\x02\x9d\x01\x2b\x00\x2c\x00\x46\x01\x0e\x00\x03\x02\x2d\x00\x2e\x00\x78\x00\x2f\x00\x46\x00\x0f\x00\x30\x00\x46\x00\x31\x00\x42\x00\x32\x00\x43\x00\xd3\x01\xd4\x01\xe3\x00\xd3\x01\xd5\x01\x33\x00\x34\x00\xe4\x00\x35\x00\x98\x02\x8f\x01\xe5\x00\x4a\x01\xe6\x00\xe7\x00\xe8\x00\xe9\x00\x78\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\x79\x00\x42\x00\x05\x02\x43\x00\x07\x00\xf3\x00\x7a\x00\x7b\x00\xf4\x00\xf5\x00\x10\x00\x06\x02\x21\x00\xf6\x00\x0e\x02\xf7\x00\x11\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x00\x01\x01\x01\x02\x01\x10\x00\x22\x00\xde\x01\x19\x00\x1a\x00\xdf\x01\x11\x00\xd7\x01\xd8\x01\xd9\x01\x29\x02\x94\x02\x23\x00\x24\x00\x25\x00\xe2\x00\x14\x00\x15\x00\x16\x00\x17\x00\xdb\x00\x19\x00\x1a\x00\x1b\x00\xbb\x01\x2a\x02\x46\x00\xbc\x01\x0d\x02\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\xd3\x01\xd6\x01\xbb\x01\x2b\x00\x2c\x00\xcb\x01\x79\x00\x8e\x02\x2d\x00\x2e\x00\xad\x01\x2f\x00\x7a\x00\x7c\x00\x30\x00\xae\x01\x31\x00\x42\x00\x32\x00\x43\x00\xb3\x01\x10\x02\xe3\x00\x11\x02\xb7\x01\x33\x00\x34\x00\xe4\x00\x35\x00\xc4\x01\x33\x00\xe5\x00\xe0\x01\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xe1\x01\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\x12\x02\x4d\x02\x13\x02\xe3\x01\x07\x00\xf3\x00\xe4\x01\x4e\x02\xf4\x00\xf5\x00\x10\x00\xe5\x01\x21\x00\xf6\x00\xf6\x01\xf7\x00\x11\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x00\x01\x01\x01\x02\x01\x10\x00\x22\x00\x4d\x02\x19\x00\x1a\x00\x55\x00\x11\x00\xe6\x01\x51\x02\x99\x02\x9a\x02\x03\x01\x23\x00\x24\x00\x25\x00\xe2\x00\x14\x00\x15\x00\x16\x00\x17\x00\xdb\x00\x19\x00\x1a\x00\x1b\x00\x83\x02\x9e\x01\x9f\x01\xa0\x01\xa1\x01\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x9b\x02\x8f\x01\xbb\x01\x2b\x00\x2c\x00\xbc\x01\x28\x02\x52\x00\x2d\x00\x2e\x00\xe7\x01\x2f\x00\xe9\x01\xe0\x00\x30\x00\x33\x01\x31\x00\x34\x01\x32\x00\x3d\x00\x89\x02\x8f\x01\xe3\x00\xf8\x01\x33\x00\x33\x00\x34\x00\xba\x01\x35\x00\x8a\x02\x8b\x02\xe5\x00\xfa\x01\xe6\x00\xe7\x00\xe8\x00\xe9\x00\x5d\x01\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\x56\x01\x2b\x00\x6e\x00\x5a\x01\x07\x00\xf3\x00\x8c\x02\x8d\x02\xf4\x00\xf5\x00\xaf\x01\x48\x02\x64\x00\xf6\x00\x6f\x00\xf7\x00\x70\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x00\x01\x01\x01\x02\x01\x91\x01\x21\x00\xa3\x01\xa4\x01\xa5\x01\x60\x01\x05\x01\x06\x01\x07\x01\xc3\xfe\x7a\x02\x9e\x01\x9f\x01\xa0\x01\xa1\x01\x08\x01\x09\x01\x0a\x01\x0b\x01\x74\x02\x75\x02\x76\x02\x0c\x01\x0d\x01\x0e\x01\x0f\x01\x10\x01\x11\x01\x12\x01\x23\x00\x24\x00\x63\x01\x13\x01\x14\x01\x52\x00\x79\x01\xbb\x01\xaf\x01\x4b\x02\xcb\x01\x5b\x00\x8f\x02\x36\x01\x75\x01\x37\x01\x7d\x01\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x33\x00\xe0\x00\x15\x01\xe1\x00\x57\x00\xe2\x00\x7a\x01\xbb\x01\x2d\x00\x2e\x00\xcb\x01\x2f\x00\x90\x02\x7f\x01\x68\x00\x7b\x01\x69\x00\xbb\x01\x75\x00\x7c\x01\xcb\x01\x92\x01\x91\x02\x16\x01\x80\x01\x33\x00\x34\x00\x84\x01\x35\x00\x91\x01\x21\x00\x77\x01\x57\x02\x77\x01\x58\x02\x05\x01\x06\x01\x07\x01\xc3\xfe\x78\xff\x85\x01\x78\xff\x46\x00\x78\xff\x08\x01\x09\x01\x0a\x01\x0b\x01\x77\x01\x59\x02\x47\x00\x0c\x01\x0d\x01\x0e\x01\x0f\x01\x10\x01\x11\x01\x12\x01\x23\x00\x24\x00\xbb\x01\x13\x01\x14\x01\xcb\x01\xbb\x01\x69\x02\x81\x01\xcb\x01\xbb\x01\x6a\x02\x8a\x01\xcb\x01\x5e\x00\x16\x02\x8c\x01\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x77\x01\x5a\x02\x15\x01\x1e\x01\x57\x00\x61\x00\x62\x00\x92\x01\x2d\x00\x2e\x00\x97\x01\x2f\x00\x43\x01\x5b\x00\x68\x00\x5c\x00\x69\x00\x5d\x00\x75\x00\x09\x02\xd9\x01\x92\x01\x95\x01\x16\x01\xd7\x00\x33\x00\x34\x00\x44\x01\x35\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\x21\x00\x13\x02\x14\x02\x22\x02\x23\x02\x05\x01\x06\x01\x07\x01\x80\x00\x25\x02\x26\x02\x5d\x00\x46\x00\x6a\x00\x08\x01\x09\x01\x0a\x01\x0b\x01\x74\x02\x04\x00\x47\x00\x0c\x01\x0d\x01\x0e\x01\x0f\x01\x10\x01\x11\x01\x12\x01\x23\x00\x24\x00\x94\x02\x13\x01\x14\x01\x2d\x02\x9e\x01\x9f\x01\xa0\x01\xa1\x01\x50\x02\xa3\x01\xa4\x01\xa5\x01\x5e\x00\xa6\x01\x55\x02\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\xaf\x01\xb0\x01\x15\x01\x21\x01\x57\x00\x61\x00\x62\x00\x33\x00\x2d\x00\x2e\x00\xdc\x01\x2f\x00\x77\x01\xdd\x01\x68\x00\x21\x00\x69\x00\x67\x02\x75\x00\x68\x02\x05\x01\x06\x01\x07\x01\x16\x01\x77\x02\x33\x00\x34\x00\xdc\x01\x35\x00\x08\x01\x09\x01\x0a\x01\x0b\x01\x77\x01\x78\x01\x6d\x02\x0c\x01\x0d\x01\x0e\x01\x0f\x01\x10\x01\x11\x01\x12\x01\x23\x00\x24\x00\x6f\x02\x13\x01\x14\x01\xa8\x01\x9e\x01\x9f\x01\xa0\x01\xa1\x01\x78\x02\x8e\x01\x8f\x01\x7a\x02\x46\x00\x6c\x00\x1f\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x47\x00\x6c\x00\x15\x01\x21\x00\x57\x00\x35\x00\x04\x00\x39\x02\x2d\x00\x2e\x00\x33\x00\x2f\x00\x33\x00\x34\x00\x68\x00\x33\x00\x69\x00\x3b\x02\x75\x00\x3c\x02\x22\x00\x10\x00\xd4\x00\x16\x01\x3d\x02\x33\x00\x34\x00\x11\x00\x35\x00\x94\x01\x95\x01\x23\x00\x24\x00\x25\x00\x21\x02\xd6\x00\x62\x00\xda\x00\x15\x00\x16\x00\x17\x00\xdb\x00\x19\x00\x1a\x00\x1b\x00\x3f\x02\x21\x00\x33\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x33\x00\x34\x00\x41\x02\x2b\x00\x2c\x00\x43\x02\x42\x02\xd9\x00\x2d\x00\x2e\x00\x22\x00\x2f\x00\x48\x02\x33\x00\x30\x00\x46\x00\x31\x00\xb2\x01\x32\x00\x50\x02\x33\x00\x23\x00\x24\x00\x25\x00\x55\x02\x33\x00\x34\x00\x5d\x02\x35\x00\x9d\x01\x9e\x01\x9f\x01\xa0\x01\xa1\x01\xdc\x01\x61\x02\x21\x00\x62\x02\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x63\x02\x65\x02\x66\x02\x2b\x00\x2c\x00\xfe\x01\xe3\x01\xd9\x00\x2d\x00\x2e\x00\x22\x00\x2f\x00\xff\x01\x01\x02\x30\x00\x05\x02\x31\x00\xd9\x00\x32\x00\x3d\x00\xb5\x01\x23\x00\x24\x00\x25\x00\x77\x01\x33\x00\x34\x00\x09\x02\x35\x00\x16\x02\x21\x02\x25\x02\x33\x00\x28\x02\x33\x00\x6c\x00\x21\x00\x39\x02\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\xab\x01\xac\x01\xad\x01\x2b\x00\x2c\x00\xa5\x01\xb5\x01\xe9\x01\x2d\x00\x2e\x00\x22\x00\x2f\x00\xb2\x01\xdd\x01\x30\x00\x46\x00\x31\x00\x97\x01\x32\x00\x33\x00\x33\x00\x23\x00\x24\x00\x25\x00\xe3\x01\x33\x00\x34\x00\xeb\x01\x35\x00\xe3\x01\xf0\x01\xec\x01\xed\x01\x33\x00\xfc\x01\x3e\xff\x21\x00\x3f\xff\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x3b\xff\x39\xff\x5f\x01\x2b\x00\x2c\x00\x3a\xff\x5c\x01\x62\x01\x2d\x00\x2e\x00\x22\x00\x2f\x00\x5d\x01\x60\x01\x30\x00\x69\x01\x31\x00\x67\x01\x32\x00\x3d\x00\x77\x01\x23\x00\x24\x00\x25\x00\x65\x01\x33\x00\x34\x00\x33\x00\x35\x00\x33\x00\x68\x01\x7f\x01\x97\x01\x6c\x00\x83\x01\x8c\x01\x21\x00\x8e\x01\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x33\x00\x77\x00\x9b\x01\x2b\x00\x2c\x00\xd9\x00\x99\x01\xd9\x00\x2d\x00\x2e\x00\x22\x00\x2f\x00\x17\x01\x10\x00\x30\x00\x46\x00\x31\x00\x33\x00\x32\x00\x11\x00\x1c\x01\x23\x00\x24\x00\x25\x00\x20\x01\x33\x00\x34\x00\x21\x00\x35\x00\x23\x01\x72\x00\x16\x00\x17\x00\x73\x00\x19\x00\x1a\x00\x1b\x00\x3e\x01\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x41\x01\x22\x00\x42\x01\x2b\x00\x2c\x00\x43\x01\xff\xff\x47\x01\x2d\x00\x2e\x00\x48\x01\x2f\x00\x23\x00\x24\x00\x30\x00\x49\x01\x31\x00\x6c\x00\x32\x00\x33\x00\x71\x00\x79\x00\xff\xff\x78\x00\x80\x00\x33\x00\x34\x00\x21\x00\x35\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\xff\xff\x00\x00\x00\x00\x00\x00\x57\x00\x00\x00\x00\x00\x00\x00\x2d\x00\x2e\x00\x22\x00\x2f\x00\x00\x00\x00\x00\x68\x00\x00\x00\x69\x00\x42\x00\x75\x00\x43\x00\x00\x00\x23\x00\x24\x00\x25\x00\x00\x00\x33\x00\x34\x00\x21\x00\x35\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x00\x00\x22\x00\x00\x00\x2b\x00\x2c\x00\x00\x00\x00\x00\x00\x00\x2d\x00\x2e\x00\x00\x00\x2f\x00\x23\x00\x24\x00\x30\x00\x00\x00\x31\x00\x00\x00\x32\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x33\x00\x34\x00\x21\x00\x35\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x57\x00\x00\x00\x00\x00\x00\x00\x2d\x00\x2e\x00\x22\x00\x2f\x00\x00\x00\x00\x00\x68\x00\x00\x00\x69\x00\x42\x00\x75\x00\x43\x00\x00\x00\x23\x00\x24\x00\x25\x00\x00\x00\x33\x00\x34\x00\x21\x00\x35\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x00\x00\x22\x00\x00\x00\x2b\x00\x2c\x00\x00\x00\x00\x00\x00\x00\x2d\x00\x2e\x00\x00\x00\x2f\x00\x23\x00\x24\x00\x30\x00\x00\x00\x31\x00\x00\x00\x32\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x33\x00\x34\x00\x00\x00\x35\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x00\x00\x00\x00\x21\x00\x00\x00\x57\x00\x00\x00\x00\x00\x00\x00\x2d\x00\x2e\x00\x6e\xff\x2f\x00\x00\x00\x6e\xff\x68\x00\x46\x00\x69\x00\x00\x00\x75\x00\x22\x00\x00\x00\x10\x00\x00\x00\x47\x00\x00\x00\x33\x00\x34\x00\x11\x00\x35\x00\x00\x00\x23\x00\x24\x00\x25\x00\x00\x00\x00\x00\x00\x00\x21\x00\x00\x00\x72\x00\x16\x00\x17\x00\x00\x00\x19\x00\x1a\x00\xde\x00\xd4\x00\x00\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x00\x00\x22\x00\x00\x00\x2b\x00\x2c\x00\xc5\x01\xd6\x00\x62\x00\x2d\x00\x2e\x00\x00\x00\x2f\x00\x23\x00\x24\x00\x30\x00\x00\x00\x31\x00\x00\x00\x32\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x33\x00\x34\x00\x21\x00\x35\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x57\x00\x46\x00\x00\x00\x00\x00\x2d\x00\x2e\x00\x22\x00\x2f\x00\x00\x00\x47\x00\x68\x00\x00\x00\x69\x00\x00\x00\x75\x00\x4e\x01\x00\x00\x23\x00\x24\x00\x46\x00\x00\x00\x33\x00\x34\x00\x21\x00\x35\x00\x00\x00\x00\x00\x47\x00\x00\x00\x00\x00\x00\x00\x5e\x00\x00\x00\x00\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x00\x00\x22\x00\x5f\x00\x60\x00\x57\x00\x61\x00\x62\x00\x00\x00\x2d\x00\x2e\x00\xd4\x00\x2f\x00\x23\x00\x24\x00\x68\x00\x50\x01\x69\x00\x00\x00\x75\x00\x00\x00\x00\x00\x00\x00\xc6\x01\xd6\x00\x62\x00\x33\x00\x34\x00\x21\x00\x35\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x00\x00\x00\x00\x50\x00\x51\x00\x57\x00\x00\x00\x00\x00\x52\x00\x2d\x00\x2e\x00\x22\x00\x2f\x00\x00\x00\x64\x00\x68\x00\x65\x00\x69\x00\x66\x00\x75\x00\x2f\x01\x00\x00\x23\x00\x24\x00\x00\x00\x33\x00\x33\x00\x34\x00\x21\x00\x35\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x00\x00\x22\x00\x00\x00\x00\x00\x57\x00\x00\x00\x00\x00\x00\x00\x2d\x00\x2e\x00\x00\x00\x2f\x00\x23\x00\x24\x00\x68\x00\x31\x01\x69\x00\x00\x00\x75\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x22\x00\x33\x00\x34\x00\x00\x00\x35\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x00\x00\x23\x00\x24\x00\x00\x00\x57\x00\x00\x00\x00\x00\x00\x00\x2d\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x00\x00\x68\x00\x00\x00\x69\x00\x00\x00\x75\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x22\x00\x00\x00\x33\x00\x34\x00\x57\x00\x35\x00\x00\x00\x00\x00\x2d\x00\x2e\x00\x00\x00\x23\x00\x24\x00\x00\x00\x68\x00\x00\x00\x7d\x02\x00\x00\x75\x00\x00\x00\x00\x00\x00\x00\x00\x00\x22\x00\x00\x00\x33\x00\x34\x00\x00\x00\x35\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x00\x00\x23\x00\x24\x00\x00\x00\x57\x00\x00\x00\x00\x00\x00\x00\x2d\x00\x2e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x68\x00\x00\x00\x69\x00\x00\x00\x75\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x22\x00\x00\x00\x33\x00\x34\x00\x57\x00\x35\x00\x00\x00\x00\x00\x2d\x00\x2e\x00\x00\x00\x23\x00\x24\x00\x00\x00\x68\x00\x00\x00\x69\x00\x00\x00\x6a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x22\x00\x00\x00\x33\x00\x34\x00\x00\x00\x35\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x00\x00\x23\x00\x24\x00\x00\x00\x57\x00\x00\x00\x00\x00\x00\x00\x2d\x00\x2e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x68\x00\x00\x00\x69\x00\x00\x00\x75\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x22\x00\x00\x00\x33\x00\x34\x00\x57\x00\x35\x00\x00\x00\x00\x00\x2d\x00\x2e\x00\x00\x00\x23\x00\x24\x00\x00\x00\x68\x00\x00\x00\xd4\x00\x00\x00\x75\x00\x00\x00\x00\x00\x00\x00\x00\x00\x22\x00\x00\x00\x33\x00\x34\x00\x00\x00\x35\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x00\x00\x23\x00\x24\x00\x46\x00\x57\x00\x00\x00\x00\x00\x00\x00\x2d\x00\x2e\x00\x00\x00\x47\x00\x00\x00\x00\x00\x68\x00\x00\x00\x69\x00\x00\x00\x75\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x22\x00\x00\x00\x33\x00\x34\x00\x57\x00\x35\x00\x00\x00\x00\x00\x2d\x00\x2e\x00\xd4\x00\x23\x00\x24\x00\x00\x00\x58\x00\x00\x00\x59\x00\x00\x00\x5a\x00\x00\x00\x00\x00\x00\x00\xc7\x01\xd6\x00\x62\x00\x33\x00\x34\x00\x00\x00\x35\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x00\x00\x00\x00\x46\x00\x00\x00\x57\x00\x00\x00\x00\x00\x00\x00\x2d\x00\x2e\x00\x47\x00\x46\x00\x00\x00\x00\x00\x68\x00\x00\x00\x69\x00\x00\x00\x6a\x00\x47\x00\x00\x00\x46\x00\x00\x00\x00\x00\x00\x00\x33\x00\x34\x00\x00\x00\x35\x00\x47\x00\x00\x00\x00\x00\x48\x00\x00\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x00\x00\x46\x00\x00\x00\xd4\x00\x46\x00\x00\x00\x00\x00\x4d\x00\x4e\x00\x47\x00\x46\x00\x00\x00\x47\x00\xd4\x00\x00\x00\xc8\x01\xd6\x00\x62\x00\x47\x00\x00\x00\x46\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc9\x01\xd6\x00\x62\x00\x47\x00\x46\x00\x00\x00\x37\x01\x00\x00\x00\x00\x37\x01\x50\x01\x00\x00\x47\x00\x51\x01\x00\x00\xd4\x00\x00\x00\x00\x00\x00\x00\x39\x01\x62\x00\x00\x00\x39\x01\x62\x00\x46\x00\xd4\x00\x00\x00\x99\x01\xd6\x00\x62\x00\x00\x00\x00\x00\x47\x00\x00\x00\xd4\x00\x46\x00\x00\x00\x9b\x01\xd6\x00\x62\x00\x00\x00\x00\x00\x00\x00\x47\x00\x00\x00\x00\x00\xd5\x00\xd6\x00\x62\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x37\x01\x00\x00\x00\x00\x00\x00\x38\x01\x11\x00\x00\x00\x00\x00\x00\x00\x37\x00\x1c\x01\x37\x01\x00\x00\x39\x01\x62\x00\x3f\x01\x29\x01\x16\x00\x17\x00\x2a\x01\x19\x00\x1a\x00\x1b\x00\x10\x00\x39\x01\x62\x00\x00\x00\x00\x00\x00\x00\x11\x00\x3b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2b\x01\x2c\x01\x00\x00\x2d\x01\x00\x00\xf1\x01\x16\x00\x17\x00\x2a\x01\x19\x00\x1a\x00\x1b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3d\x00\x00\x00\x3e\x00\x00\x00\x00\x00\x00\x00\x11\x00\xf2\x01\xf3\x01\xf5\x01\x37\x00\x38\x00\x00\x00\x00\x00\x3f\x00\x13\x00\x14\x00\x3a\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x00\x00\x00\x00\x00\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x27\x01\x3d\x00\x00\x00\x3e\x00\x00\x00\x00\x00\x00\x00\x11\x00\x00\x00\x00\x00\x00\x00\x37\x00\x38\x00\x00\x00\x00\x00\x3f\x00\x13\x00\x14\x00\x3a\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x00\x00\x00\x00\x36\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x40\x00\x11\x00\x00\x00\x00\x00\x00\x00\x37\x00\x38\x00\x00\x00\x00\x00\x39\x00\x13\x00\x14\x00\x3a\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x00\x00\x00\x00\x10\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x26\x01\x11\x00\x00\x00\x00\x00\x00\x00\x37\x00\x38\x00\x00\x00\x00\x00\x43\x00\x13\x00\x14\x00\x3a\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x00\x00\x00\x00\x36\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x28\x01\x11\x00\x00\x00\x00\x00\x00\x00\x37\x00\x38\x00\x00\x00\x00\x00\x39\x00\x13\x00\x14\x00\x3a\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x00\x00\x00\x00\x10\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x3b\x00\x11\x00\x00\x00\x00\x00\x00\x00\x37\x00\x38\x00\x00\x00\x00\x00\x43\x00\x13\x00\x14\x00\x3a\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x00\x00\x00\x00\x17\x02\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x44\x00\x11\x00\x00\x00\x00\x00\x00\x00\x37\x00\x1c\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdd\x00\x16\x00\x17\x00\x00\x00\x19\x00\x1a\x00\xde\x00\x65\x01\x19\x01\x1a\x01\x10\x00\x00\x00\x4e\x01\x00\x00\x3b\x00\x00\x00\x11\x00\x00\x00\x00\x00\x00\x00\x1d\x01\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdd\x00\x16\x00\x17\x00\x00\x00\x19\x00\x1a\x00\xde\x00\x10\x00\x00\x00\x2f\x01\x00\x00\x00\x00\x00\x00\x11\x00\x40\x00\x00\x00\x00\x00\x1d\x01\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdd\x00\x16\x00\x17\x00\x00\x00\x19\x00\x1a\x00\xde\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11\x00\x40\x00\x00\x00\x00\x00\x37\x00\x1c\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdd\x00\x16\x00\x17\x00\x00\x00\x19\x00\x1a\x00\xde\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11\x00\x3b\x00\x00\x00\x00\x00\x37\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdd\x00\x16\x00\x17\x00\x00\x00\x19\x00\x1a\x00\xde\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11\x00\x44\x00\x00\x00\x00\x00\x52\x01\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdd\x00\x16\x00\x17\x00\x00\x00\x19\x00\x1a\x00\xde\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11\x00\x23\x01\x00\x00\x00\x00\x53\x01\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdd\x00\x16\x00\x17\x00\x00\x00\x19\x00\x1a\x00\xde\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11\x00\x24\x01\x00\x00\x00\x00\x54\x01\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdd\x00\x16\x00\x17\x00\x00\x00\x19\x00\x1a\x00\xde\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11\x00\x26\x01\x00\x00\x00\x00\x55\x01\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdd\x00\x16\x00\x17\x00\x00\x00\x19\x00\x1a\x00\xde\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11\x00\x27\x01\x00\x00\x00\x00\x37\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdd\x00\x16\x00\x17\x00\x00\x00\x19\x00\x1a\x00\xde\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11\x00\x26\x01\x00\x00\x00\x00\x37\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdd\x00\x16\x00\x17\x00\x00\x00\x19\x00\x1a\x00\xde\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11\x00\x27\x01\x00\x00\x00\x00\x37\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdd\x00\x16\x00\x17\x00\x00\x00\x19\x00\x1a\x00\xde\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11\x00\x28\x01\x00\x00\x00\x00\x37\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdd\x00\x16\x00\x17\x00\x00\x00\x19\x00\x1a\x00\xde\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11\x00\x3b\x00\x00\x00\x00\x00\x37\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdd\x00\x16\x00\x17\x00\x00\x00\x19\x00\x1a\x00\xde\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11\x00\x40\x00\x00\x00\x00\x00\x37\x00\x1c\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdd\x00\x16\x00\x17\x00\x00\x00\x19\x00\x1a\x00\xde\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11\x00\x3b\x00\x00\x00\x00\x00\x1d\x01\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdd\x00\x16\x00\x17\x00\x00\x00\x19\x00\x1a\x00\xde\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11\x00\x40\x00\x00\x00\x00\x00\x37\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdd\x00\x16\x00\x17\x00\x00\x00\x19\x00\x1a\x00\xde\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11\x00\x44\x00\x00\x00\x00\x00\x37\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdd\x00\x16\x00\x17\x00\x00\x00\x19\x00\x1a\x00\xde\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11\x00\x23\x01\x00\x00\x00\x00\x37\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdd\x00\x16\x00\x17\x00\x00\x00\x19\x00\x1a\x00\xde\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11\x00\x24\x01\x00\x00\x00\x00\x37\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdd\x00\x16\x00\x17\x00\x00\x00\x19\x00\x1a\x00\xde\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11\x00\x25\x01\x00\x00\x00\x00\x37\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdd\x00\x16\x00\x17\x00\x00\x00\x19\x00\x1a\x00\xde\x00\x3d\x00\x00\x00\x3e\x00\x00\x00\x00\x00\x00\x00\x11\x00\x44\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3f\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x00\x00\x10\x00\x00\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x43\x02\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x00\x00\x10\x00\x00\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x45\x02\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x00\x00\x10\x00\x00\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4c\x02\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x00\x00\x10\x00\x00\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x50\x02\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x00\x00\x10\x00\x00\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x52\x02\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x00\x00\x10\x00\x00\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x55\x02\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x00\x00\x10\x00\x00\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07\x02\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x00\x00\x10\x00\x00\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2b\x02\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x00\x00\x10\x00\x00\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb2\x01\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x00\x00\x10\x00\x00\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb5\x01\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x00\x00\x10\x00\x00\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb6\x01\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x00\x00\x10\x00\x00\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xed\x01\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x00\x00\x10\x00\x00\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf0\x01\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x00\x00\x10\x00\x00\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4a\x01\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x00\x00\x10\x00\x00\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4b\x01\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x00\x00\x10\x00\x00\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4c\x01\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x00\x00\x10\x00\x00\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x62\x01\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x00\x00\x10\x00\x00\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x69\x01\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x00\x00\x10\x00\x00\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdc\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x00\x00\x36\x00\x00\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x39\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x00\x00\x10\x00\x00\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x43\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x00\x00\x10\x00\x00\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x01\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x00\x00\x10\x00\x00\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3e\x01\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x00\x00\x10\x00\x00\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x71\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x00\x00\x10\x00\x00\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x00\x00\x00\x00\x00\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x22\xff\x22\xff\x00\x00\x50\x00\x51\x00\x22\xff\x00\x00\x22\xff\x52\x00\x00\x00\x3c\xff\x22\xff\x00\x00\x22\xff\x3b\x01\x22\xff\x3c\x01\x00\x00\x3d\x01\x50\x00\x51\x00\x00\x00\x22\xff\x00\x00\x52\x00\x33\x00\x00\x00\x00\x00\x00\x00\x00\x00\x64\x00\x00\x00\x65\x00\x00\x00\xcb\x01\x50\x00\x51\x00\x00\x00\x50\x00\x51\x00\x52\x00\x33\x00\x00\x00\x52\x00\x00\x00\x00\x00\x3b\x01\x00\x00\x3c\x01\x64\x00\x3d\x01\x65\x00\x00\x00\x66\x00\x50\x00\x51\x00\x00\x00\x33\x00\x00\x00\x52\x00\x33\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3b\x01\x00\x00\x3c\x01\x00\x00\x3d\x01\x50\x00\x51\x00\x00\x00\x50\x00\x51\x00\x52\x00\x33\x00\x00\x00\x52\x00\x00\x00\x00\x00\x53\x00\x00\x00\x54\x00\x64\x00\x55\x00\x65\x00\x00\x00\x66\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x33\x00\x6b\x01\x6c\x01\x6d\x01\x6e\x01\x6f\x01\x70\x01\x71\x01\x72\x01\x73\x01\x74\x01\x75\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"#++happyReduceArr = Happy_Data_Array.array (3, 382) [+	(3 , happyReduce_3),+	(4 , happyReduce_4),+	(5 , happyReduce_5),+	(6 , happyReduce_6),+	(7 , happyReduce_7),+	(8 , happyReduce_8),+	(9 , happyReduce_9),+	(10 , happyReduce_10),+	(11 , happyReduce_11),+	(12 , happyReduce_12),+	(13 , happyReduce_13),+	(14 , happyReduce_14),+	(15 , happyReduce_15),+	(16 , happyReduce_16),+	(17 , happyReduce_17),+	(18 , happyReduce_18),+	(19 , happyReduce_19),+	(20 , happyReduce_20),+	(21 , happyReduce_21),+	(22 , happyReduce_22),+	(23 , happyReduce_23),+	(24 , happyReduce_24),+	(25 , happyReduce_25),+	(26 , happyReduce_26),+	(27 , happyReduce_27),+	(28 , happyReduce_28),+	(29 , happyReduce_29),+	(30 , happyReduce_30),+	(31 , happyReduce_31),+	(32 , happyReduce_32),+	(33 , happyReduce_33),+	(34 , happyReduce_34),+	(35 , happyReduce_35),+	(36 , happyReduce_36),+	(37 , happyReduce_37),+	(38 , happyReduce_38),+	(39 , happyReduce_39),+	(40 , happyReduce_40),+	(41 , happyReduce_41),+	(42 , happyReduce_42),+	(43 , happyReduce_43),+	(44 , happyReduce_44),+	(45 , happyReduce_45),+	(46 , happyReduce_46),+	(47 , happyReduce_47),+	(48 , happyReduce_48),+	(49 , happyReduce_49),+	(50 , happyReduce_50),+	(51 , happyReduce_51),+	(52 , happyReduce_52),+	(53 , happyReduce_53),+	(54 , happyReduce_54),+	(55 , happyReduce_55),+	(56 , happyReduce_56),+	(57 , happyReduce_57),+	(58 , happyReduce_58),+	(59 , happyReduce_59),+	(60 , happyReduce_60),+	(61 , happyReduce_61),+	(62 , happyReduce_62),+	(63 , happyReduce_63),+	(64 , happyReduce_64),+	(65 , happyReduce_65),+	(66 , happyReduce_66),+	(67 , happyReduce_67),+	(68 , happyReduce_68),+	(69 , happyReduce_69),+	(70 , happyReduce_70),+	(71 , happyReduce_71),+	(72 , happyReduce_72),+	(73 , happyReduce_73),+	(74 , happyReduce_74),+	(75 , happyReduce_75),+	(76 , happyReduce_76),+	(77 , happyReduce_77),+	(78 , happyReduce_78),+	(79 , happyReduce_79),+	(80 , happyReduce_80),+	(81 , happyReduce_81),+	(82 , happyReduce_82),+	(83 , happyReduce_83),+	(84 , happyReduce_84),+	(85 , happyReduce_85),+	(86 , happyReduce_86),+	(87 , happyReduce_87),+	(88 , happyReduce_88),+	(89 , happyReduce_89),+	(90 , happyReduce_90),+	(91 , happyReduce_91),+	(92 , happyReduce_92),+	(93 , happyReduce_93),+	(94 , happyReduce_94),+	(95 , happyReduce_95),+	(96 , happyReduce_96),+	(97 , happyReduce_97),+	(98 , happyReduce_98),+	(99 , happyReduce_99),+	(100 , happyReduce_100),+	(101 , happyReduce_101),+	(102 , happyReduce_102),+	(103 , happyReduce_103),+	(104 , happyReduce_104),+	(105 , happyReduce_105),+	(106 , happyReduce_106),+	(107 , happyReduce_107),+	(108 , happyReduce_108),+	(109 , happyReduce_109),+	(110 , happyReduce_110),+	(111 , happyReduce_111),+	(112 , happyReduce_112),+	(113 , happyReduce_113),+	(114 , happyReduce_114),+	(115 , happyReduce_115),+	(116 , happyReduce_116),+	(117 , happyReduce_117),+	(118 , happyReduce_118),+	(119 , happyReduce_119),+	(120 , happyReduce_120),+	(121 , happyReduce_121),+	(122 , happyReduce_122),+	(123 , happyReduce_123),+	(124 , happyReduce_124),+	(125 , happyReduce_125),+	(126 , happyReduce_126),+	(127 , happyReduce_127),+	(128 , happyReduce_128),+	(129 , happyReduce_129),+	(130 , happyReduce_130),+	(131 , happyReduce_131),+	(132 , happyReduce_132),+	(133 , happyReduce_133),+	(134 , happyReduce_134),+	(135 , happyReduce_135),+	(136 , happyReduce_136),+	(137 , happyReduce_137),+	(138 , happyReduce_138),+	(139 , happyReduce_139),+	(140 , happyReduce_140),+	(141 , happyReduce_141),+	(142 , happyReduce_142),+	(143 , happyReduce_143),+	(144 , happyReduce_144),+	(145 , happyReduce_145),+	(146 , happyReduce_146),+	(147 , happyReduce_147),+	(148 , happyReduce_148),+	(149 , happyReduce_149),+	(150 , happyReduce_150),+	(151 , happyReduce_151),+	(152 , happyReduce_152),+	(153 , happyReduce_153),+	(154 , happyReduce_154),+	(155 , happyReduce_155),+	(156 , happyReduce_156),+	(157 , happyReduce_157),+	(158 , happyReduce_158),+	(159 , happyReduce_159),+	(160 , happyReduce_160),+	(161 , happyReduce_161),+	(162 , happyReduce_162),+	(163 , happyReduce_163),+	(164 , happyReduce_164),+	(165 , happyReduce_165),+	(166 , happyReduce_166),+	(167 , happyReduce_167),+	(168 , happyReduce_168),+	(169 , happyReduce_169),+	(170 , happyReduce_170),+	(171 , happyReduce_171),+	(172 , happyReduce_172),+	(173 , happyReduce_173),+	(174 , happyReduce_174),+	(175 , happyReduce_175),+	(176 , happyReduce_176),+	(177 , happyReduce_177),+	(178 , happyReduce_178),+	(179 , happyReduce_179),+	(180 , happyReduce_180),+	(181 , happyReduce_181),+	(182 , happyReduce_182),+	(183 , happyReduce_183),+	(184 , happyReduce_184),+	(185 , happyReduce_185),+	(186 , happyReduce_186),+	(187 , happyReduce_187),+	(188 , happyReduce_188),+	(189 , happyReduce_189),+	(190 , happyReduce_190),+	(191 , happyReduce_191),+	(192 , happyReduce_192),+	(193 , happyReduce_193),+	(194 , happyReduce_194),+	(195 , happyReduce_195),+	(196 , happyReduce_196),+	(197 , happyReduce_197),+	(198 , happyReduce_198),+	(199 , happyReduce_199),+	(200 , happyReduce_200),+	(201 , happyReduce_201),+	(202 , happyReduce_202),+	(203 , happyReduce_203),+	(204 , happyReduce_204),+	(205 , happyReduce_205),+	(206 , happyReduce_206),+	(207 , happyReduce_207),+	(208 , happyReduce_208),+	(209 , happyReduce_209),+	(210 , happyReduce_210),+	(211 , happyReduce_211),+	(212 , happyReduce_212),+	(213 , happyReduce_213),+	(214 , happyReduce_214),+	(215 , happyReduce_215),+	(216 , happyReduce_216),+	(217 , happyReduce_217),+	(218 , happyReduce_218),+	(219 , happyReduce_219),+	(220 , happyReduce_220),+	(221 , happyReduce_221),+	(222 , happyReduce_222),+	(223 , happyReduce_223),+	(224 , happyReduce_224),+	(225 , happyReduce_225),+	(226 , happyReduce_226),+	(227 , happyReduce_227),+	(228 , happyReduce_228),+	(229 , happyReduce_229),+	(230 , happyReduce_230),+	(231 , happyReduce_231),+	(232 , happyReduce_232),+	(233 , happyReduce_233),+	(234 , happyReduce_234),+	(235 , happyReduce_235),+	(236 , happyReduce_236),+	(237 , happyReduce_237),+	(238 , happyReduce_238),+	(239 , happyReduce_239),+	(240 , happyReduce_240),+	(241 , happyReduce_241),+	(242 , happyReduce_242),+	(243 , happyReduce_243),+	(244 , happyReduce_244),+	(245 , happyReduce_245),+	(246 , happyReduce_246),+	(247 , happyReduce_247),+	(248 , happyReduce_248),+	(249 , happyReduce_249),+	(250 , happyReduce_250),+	(251 , happyReduce_251),+	(252 , happyReduce_252),+	(253 , happyReduce_253),+	(254 , happyReduce_254),+	(255 , happyReduce_255),+	(256 , happyReduce_256),+	(257 , happyReduce_257),+	(258 , happyReduce_258),+	(259 , happyReduce_259),+	(260 , happyReduce_260),+	(261 , happyReduce_261),+	(262 , happyReduce_262),+	(263 , happyReduce_263),+	(264 , happyReduce_264),+	(265 , happyReduce_265),+	(266 , happyReduce_266),+	(267 , happyReduce_267),+	(268 , happyReduce_268),+	(269 , happyReduce_269),+	(270 , happyReduce_270),+	(271 , happyReduce_271),+	(272 , happyReduce_272),+	(273 , happyReduce_273),+	(274 , happyReduce_274),+	(275 , happyReduce_275),+	(276 , happyReduce_276),+	(277 , happyReduce_277),+	(278 , happyReduce_278),+	(279 , happyReduce_279),+	(280 , happyReduce_280),+	(281 , happyReduce_281),+	(282 , happyReduce_282),+	(283 , happyReduce_283),+	(284 , happyReduce_284),+	(285 , happyReduce_285),+	(286 , happyReduce_286),+	(287 , happyReduce_287),+	(288 , happyReduce_288),+	(289 , happyReduce_289),+	(290 , happyReduce_290),+	(291 , happyReduce_291),+	(292 , happyReduce_292),+	(293 , happyReduce_293),+	(294 , happyReduce_294),+	(295 , happyReduce_295),+	(296 , happyReduce_296),+	(297 , happyReduce_297),+	(298 , happyReduce_298),+	(299 , happyReduce_299),+	(300 , happyReduce_300),+	(301 , happyReduce_301),+	(302 , happyReduce_302),+	(303 , happyReduce_303),+	(304 , happyReduce_304),+	(305 , happyReduce_305),+	(306 , happyReduce_306),+	(307 , happyReduce_307),+	(308 , happyReduce_308),+	(309 , happyReduce_309),+	(310 , happyReduce_310),+	(311 , happyReduce_311),+	(312 , happyReduce_312),+	(313 , happyReduce_313),+	(314 , happyReduce_314),+	(315 , happyReduce_315),+	(316 , happyReduce_316),+	(317 , happyReduce_317),+	(318 , happyReduce_318),+	(319 , happyReduce_319),+	(320 , happyReduce_320),+	(321 , happyReduce_321),+	(322 , happyReduce_322),+	(323 , happyReduce_323),+	(324 , happyReduce_324),+	(325 , happyReduce_325),+	(326 , happyReduce_326),+	(327 , happyReduce_327),+	(328 , happyReduce_328),+	(329 , happyReduce_329),+	(330 , happyReduce_330),+	(331 , happyReduce_331),+	(332 , happyReduce_332),+	(333 , happyReduce_333),+	(334 , happyReduce_334),+	(335 , happyReduce_335),+	(336 , happyReduce_336),+	(337 , happyReduce_337),+	(338 , happyReduce_338),+	(339 , happyReduce_339),+	(340 , happyReduce_340),+	(341 , happyReduce_341),+	(342 , happyReduce_342),+	(343 , happyReduce_343),+	(344 , happyReduce_344),+	(345 , happyReduce_345),+	(346 , happyReduce_346),+	(347 , happyReduce_347),+	(348 , happyReduce_348),+	(349 , happyReduce_349),+	(350 , happyReduce_350),+	(351 , happyReduce_351),+	(352 , happyReduce_352),+	(353 , happyReduce_353),+	(354 , happyReduce_354),+	(355 , happyReduce_355),+	(356 , happyReduce_356),+	(357 , happyReduce_357),+	(358 , happyReduce_358),+	(359 , happyReduce_359),+	(360 , happyReduce_360),+	(361 , happyReduce_361),+	(362 , happyReduce_362),+	(363 , happyReduce_363),+	(364 , happyReduce_364),+	(365 , happyReduce_365),+	(366 , happyReduce_366),+	(367 , happyReduce_367),+	(368 , happyReduce_368),+	(369 , happyReduce_369),+	(370 , happyReduce_370),+	(371 , happyReduce_371),+	(372 , happyReduce_372),+	(373 , happyReduce_373),+	(374 , happyReduce_374),+	(375 , happyReduce_375),+	(376 , happyReduce_376),+	(377 , happyReduce_377),+	(378 , happyReduce_378),+	(379 , happyReduce_379),+	(380 , happyReduce_380),+	(381 , happyReduce_381),+	(382 , happyReduce_382)+	]++happy_n_terms = 81 :: Int+happy_n_nonterms = 130 :: Int++happyReduce_3 = happySpecReduce_1  0# happyReduction_3+happyReduction_3 happy_x_1+	 =  case happyOut7 happy_x_1 of { happy_var_1 -> +	happyIn6+		 (reverse happy_var_1+	)}++happyReduce_4 = happySpecReduce_2  1# happyReduction_4+happyReduction_4 happy_x_2+	happy_x_1+	 =  case happyOut7 happy_x_1 of { happy_var_1 -> +	case happyOut8 happy_x_2 of { happy_var_2 -> +	happyIn7+		 (happy_var_2 : happy_var_1+	)}}++happyReduce_5 = happySpecReduce_0  1# happyReduction_5+happyReduction_5  =  happyIn7+		 ([]+	)++happyReduce_6 = happySpecReduce_1  2# happyReduction_6+happyReduction_6 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwLet happy_var_1) -> +	happyIn8+		 (TokKeyword KwLet happy_var_1+	)}++happyReduce_7 = happySpecReduce_1  2# happyReduction_7+happyReduction_7 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwIn happy_var_1) -> +	happyIn8+		 (TokKeyword KwIn happy_var_1+	)}++happyReduce_8 = happySpecReduce_1  2# happyReduction_8+happyReduction_8 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwWhere happy_var_1) -> +	happyIn8+		 (TokKeyword KwWhere happy_var_1+	)}++happyReduce_9 = happySpecReduce_1  2# happyReduction_9+happyReduction_9 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwWith happy_var_1) -> +	happyIn8+		 (TokKeyword KwWith happy_var_1+	)}++happyReduce_10 = happySpecReduce_1  2# happyReduction_10+happyReduction_10 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwRewrite happy_var_1) -> +	happyIn8+		 (TokKeyword KwRewrite happy_var_1+	)}++happyReduce_11 = happySpecReduce_1  2# happyReduction_11+happyReduction_11 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwPostulate happy_var_1) -> +	happyIn8+		 (TokKeyword KwPostulate happy_var_1+	)}++happyReduce_12 = happySpecReduce_1  2# happyReduction_12+happyReduction_12 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwPrimitive happy_var_1) -> +	happyIn8+		 (TokKeyword KwPrimitive happy_var_1+	)}++happyReduce_13 = happySpecReduce_1  2# happyReduction_13+happyReduction_13 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwOpen happy_var_1) -> +	happyIn8+		 (TokKeyword KwOpen happy_var_1+	)}++happyReduce_14 = happySpecReduce_1  2# happyReduction_14+happyReduction_14 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwImport happy_var_1) -> +	happyIn8+		 (TokKeyword KwImport happy_var_1+	)}++happyReduce_15 = happySpecReduce_1  2# happyReduction_15+happyReduction_15 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwUsing happy_var_1) -> +	happyIn8+		 (TokKeyword KwUsing happy_var_1+	)}++happyReduce_16 = happySpecReduce_1  2# happyReduction_16+happyReduction_16 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwHiding happy_var_1) -> +	happyIn8+		 (TokKeyword KwHiding happy_var_1+	)}++happyReduce_17 = happySpecReduce_1  2# happyReduction_17+happyReduction_17 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwRenaming happy_var_1) -> +	happyIn8+		 (TokKeyword KwRenaming happy_var_1+	)}++happyReduce_18 = happySpecReduce_1  2# happyReduction_18+happyReduction_18 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwTo happy_var_1) -> +	happyIn8+		 (TokKeyword KwTo happy_var_1+	)}++happyReduce_19 = happySpecReduce_1  2# happyReduction_19+happyReduction_19 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwPublic happy_var_1) -> +	happyIn8+		 (TokKeyword KwPublic happy_var_1+	)}++happyReduce_20 = happySpecReduce_1  2# happyReduction_20+happyReduction_20 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwModule happy_var_1) -> +	happyIn8+		 (TokKeyword KwModule happy_var_1+	)}++happyReduce_21 = happySpecReduce_1  2# happyReduction_21+happyReduction_21 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwData happy_var_1) -> +	happyIn8+		 (TokKeyword KwData happy_var_1+	)}++happyReduce_22 = happySpecReduce_1  2# happyReduction_22+happyReduction_22 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwCoData happy_var_1) -> +	happyIn8+		 (TokKeyword KwCoData happy_var_1+	)}++happyReduce_23 = happySpecReduce_1  2# happyReduction_23+happyReduction_23 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwRecord happy_var_1) -> +	happyIn8+		 (TokKeyword KwRecord happy_var_1+	)}++happyReduce_24 = happySpecReduce_1  2# happyReduction_24+happyReduction_24 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwConstructor happy_var_1) -> +	happyIn8+		 (TokKeyword KwConstructor happy_var_1+	)}++happyReduce_25 = happySpecReduce_1  2# happyReduction_25+happyReduction_25 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwInductive happy_var_1) -> +	happyIn8+		 (TokKeyword KwInductive happy_var_1+	)}++happyReduce_26 = happySpecReduce_1  2# happyReduction_26+happyReduction_26 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwCoInductive happy_var_1) -> +	happyIn8+		 (TokKeyword KwCoInductive happy_var_1+	)}++happyReduce_27 = happySpecReduce_1  2# happyReduction_27+happyReduction_27 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwField happy_var_1) -> +	happyIn8+		 (TokKeyword KwField happy_var_1+	)}++happyReduce_28 = happySpecReduce_1  2# happyReduction_28+happyReduction_28 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwInfix happy_var_1) -> +	happyIn8+		 (TokKeyword KwInfix happy_var_1+	)}++happyReduce_29 = happySpecReduce_1  2# happyReduction_29+happyReduction_29 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwInfixL happy_var_1) -> +	happyIn8+		 (TokKeyword KwInfixL happy_var_1+	)}++happyReduce_30 = happySpecReduce_1  2# happyReduction_30+happyReduction_30 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwInfixR happy_var_1) -> +	happyIn8+		 (TokKeyword KwInfixR happy_var_1+	)}++happyReduce_31 = happySpecReduce_1  2# happyReduction_31+happyReduction_31 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwMutual happy_var_1) -> +	happyIn8+		 (TokKeyword KwMutual happy_var_1+	)}++happyReduce_32 = happySpecReduce_1  2# happyReduction_32+happyReduction_32 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwAbstract happy_var_1) -> +	happyIn8+		 (TokKeyword KwAbstract happy_var_1+	)}++happyReduce_33 = happySpecReduce_1  2# happyReduction_33+happyReduction_33 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwPrivate happy_var_1) -> +	happyIn8+		 (TokKeyword KwPrivate happy_var_1+	)}++happyReduce_34 = happySpecReduce_1  2# happyReduction_34+happyReduction_34 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwProp happy_var_1) -> +	happyIn8+		 (TokKeyword KwProp happy_var_1+	)}++happyReduce_35 = happySpecReduce_1  2# happyReduction_35+happyReduction_35 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwSet happy_var_1) -> +	happyIn8+		 (TokKeyword KwSet happy_var_1+	)}++happyReduce_36 = happySpecReduce_1  2# happyReduction_36+happyReduction_36 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwForall happy_var_1) -> +	happyIn8+		 (TokKeyword KwForall happy_var_1+	)}++happyReduce_37 = happySpecReduce_1  2# happyReduction_37+happyReduction_37 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwSyntax happy_var_1) -> +	happyIn8+		 (TokKeyword KwSyntax happy_var_1+	)}++happyReduce_38 = happySpecReduce_1  2# happyReduction_38+happyReduction_38 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwPatternSyn happy_var_1) -> +	happyIn8+		 (TokKeyword KwPatternSyn happy_var_1+	)}++happyReduce_39 = happySpecReduce_1  2# happyReduction_39+happyReduction_39 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwOPTIONS happy_var_1) -> +	happyIn8+		 (TokKeyword KwOPTIONS happy_var_1+	)}++happyReduce_40 = happySpecReduce_1  2# happyReduction_40+happyReduction_40 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwBUILTIN happy_var_1) -> +	happyIn8+		 (TokKeyword KwBUILTIN happy_var_1+	)}++happyReduce_41 = happySpecReduce_1  2# happyReduction_41+happyReduction_41 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwIMPORT happy_var_1) -> +	happyIn8+		 (TokKeyword KwIMPORT happy_var_1+	)}++happyReduce_42 = happySpecReduce_1  2# happyReduction_42+happyReduction_42 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwCOMPILED happy_var_1) -> +	happyIn8+		 (TokKeyword KwCOMPILED happy_var_1+	)}++happyReduce_43 = happySpecReduce_1  2# happyReduction_43+happyReduction_43 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwCOMPILED_DATA happy_var_1) -> +	happyIn8+		 (TokKeyword KwCOMPILED_DATA happy_var_1+	)}++happyReduce_44 = happySpecReduce_1  2# happyReduction_44+happyReduction_44 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwCOMPILED_TYPE happy_var_1) -> +	happyIn8+		 (TokKeyword KwCOMPILED_TYPE happy_var_1+	)}++happyReduce_45 = happySpecReduce_1  2# happyReduction_45+happyReduction_45 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwCOMPILED_EPIC happy_var_1) -> +	happyIn8+		 (TokKeyword KwCOMPILED_EPIC happy_var_1+	)}++happyReduce_46 = happySpecReduce_1  2# happyReduction_46+happyReduction_46 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwCOMPILED_JS happy_var_1) -> +	happyIn8+		 (TokKeyword KwCOMPILED_JS happy_var_1+	)}++happyReduce_47 = happySpecReduce_1  2# happyReduction_47+happyReduction_47 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwSTATIC happy_var_1) -> +	happyIn8+		 (TokKeyword KwSTATIC happy_var_1+	)}++happyReduce_48 = happySpecReduce_1  2# happyReduction_48+happyReduction_48 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwIMPOSSIBLE happy_var_1) -> +	happyIn8+		 (TokKeyword KwIMPOSSIBLE happy_var_1+	)}++happyReduce_49 = happySpecReduce_1  2# happyReduction_49+happyReduction_49 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwETA happy_var_1) -> +	happyIn8+		 (TokKeyword KwETA happy_var_1+	)}++happyReduce_50 = happySpecReduce_1  2# happyReduction_50+happyReduction_50 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwNO_TERMINATION_CHECK happy_var_1) -> +	happyIn8+		 (TokKeyword KwNO_TERMINATION_CHECK happy_var_1+	)}++happyReduce_51 = happySpecReduce_1  2# happyReduction_51+happyReduction_51 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwQuoteGoal happy_var_1) -> +	happyIn8+		 (TokKeyword KwQuoteGoal happy_var_1+	)}++happyReduce_52 = happySpecReduce_1  2# happyReduction_52+happyReduction_52 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwQuote happy_var_1) -> +	happyIn8+		 (TokKeyword KwQuote happy_var_1+	)}++happyReduce_53 = happySpecReduce_1  2# happyReduction_53+happyReduction_53 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwQuoteTerm happy_var_1) -> +	happyIn8+		 (TokKeyword KwQuoteTerm happy_var_1+	)}++happyReduce_54 = happySpecReduce_1  2# happyReduction_54+happyReduction_54 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwUnquote happy_var_1) -> +	happyIn8+		 (TokKeyword KwUnquote happy_var_1+	)}++happyReduce_55 = happySpecReduce_1  2# happyReduction_55+happyReduction_55 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokSetN happy_var_1) -> +	happyIn8+		 (TokSetN happy_var_1+	)}++happyReduce_56 = happySpecReduce_1  2# happyReduction_56+happyReduction_56 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokTeX happy_var_1) -> +	happyIn8+		 (TokTeX happy_var_1+	)}++happyReduce_57 = happySpecReduce_1  2# happyReduction_57+happyReduction_57 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokComment happy_var_1) -> +	happyIn8+		 (TokComment happy_var_1+	)}++happyReduce_58 = happySpecReduce_1  2# happyReduction_58+happyReduction_58 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymEllipsis happy_var_1) -> +	happyIn8+		 (TokSymbol SymEllipsis happy_var_1+	)}++happyReduce_59 = happySpecReduce_1  2# happyReduction_59+happyReduction_59 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymDotDot happy_var_1) -> +	happyIn8+		 (TokSymbol SymDotDot happy_var_1+	)}++happyReduce_60 = happySpecReduce_1  2# happyReduction_60+happyReduction_60 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymDot happy_var_1) -> +	happyIn8+		 (TokSymbol SymDot happy_var_1+	)}++happyReduce_61 = happySpecReduce_1  2# happyReduction_61+happyReduction_61 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymSemi happy_var_1) -> +	happyIn8+		 (TokSymbol SymSemi happy_var_1+	)}++happyReduce_62 = happySpecReduce_1  2# happyReduction_62+happyReduction_62 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymColon happy_var_1) -> +	happyIn8+		 (TokSymbol SymColon happy_var_1+	)}++happyReduce_63 = happySpecReduce_1  2# happyReduction_63+happyReduction_63 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymEqual happy_var_1) -> +	happyIn8+		 (TokSymbol SymEqual happy_var_1+	)}++happyReduce_64 = happySpecReduce_1  2# happyReduction_64+happyReduction_64 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymUnderscore happy_var_1) -> +	happyIn8+		 (TokSymbol SymUnderscore happy_var_1+	)}++happyReduce_65 = happySpecReduce_1  2# happyReduction_65+happyReduction_65 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymQuestionMark happy_var_1) -> +	happyIn8+		 (TokSymbol SymQuestionMark happy_var_1+	)}++happyReduce_66 = happySpecReduce_1  2# happyReduction_66+happyReduction_66 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymArrow happy_var_1) -> +	happyIn8+		 (TokSymbol SymArrow happy_var_1+	)}++happyReduce_67 = happySpecReduce_1  2# happyReduction_67+happyReduction_67 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymLambda happy_var_1) -> +	happyIn8+		 (TokSymbol SymLambda happy_var_1+	)}++happyReduce_68 = happySpecReduce_1  2# happyReduction_68+happyReduction_68 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymAs happy_var_1) -> +	happyIn8+		 (TokSymbol SymAs happy_var_1+	)}++happyReduce_69 = happySpecReduce_1  2# happyReduction_69+happyReduction_69 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymBar happy_var_1) -> +	happyIn8+		 (TokSymbol SymBar happy_var_1+	)}++happyReduce_70 = happySpecReduce_1  2# happyReduction_70+happyReduction_70 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymOpenParen happy_var_1) -> +	happyIn8+		 (TokSymbol SymOpenParen happy_var_1+	)}++happyReduce_71 = happySpecReduce_1  2# happyReduction_71+happyReduction_71 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymCloseParen happy_var_1) -> +	happyIn8+		 (TokSymbol SymCloseParen happy_var_1+	)}++happyReduce_72 = happySpecReduce_1  2# happyReduction_72+happyReduction_72 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymDoubleOpenBrace happy_var_1) -> +	happyIn8+		 (TokSymbol SymDoubleOpenBrace happy_var_1+	)}++happyReduce_73 = happySpecReduce_1  2# happyReduction_73+happyReduction_73 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymDoubleCloseBrace happy_var_1) -> +	happyIn8+		 (TokSymbol SymDoubleCloseBrace happy_var_1+	)}++happyReduce_74 = happySpecReduce_1  2# happyReduction_74+happyReduction_74 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymOpenBrace happy_var_1) -> +	happyIn8+		 (TokSymbol SymOpenBrace happy_var_1+	)}++happyReduce_75 = happySpecReduce_1  2# happyReduction_75+happyReduction_75 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymCloseBrace happy_var_1) -> +	happyIn8+		 (TokSymbol SymCloseBrace happy_var_1+	)}++happyReduce_76 = happySpecReduce_1  2# happyReduction_76+happyReduction_76 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymOpenVirtualBrace happy_var_1) -> +	happyIn8+		 (TokSymbol SymOpenVirtualBrace happy_var_1+	)}++happyReduce_77 = happySpecReduce_1  2# happyReduction_77+happyReduction_77 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymCloseVirtualBrace happy_var_1) -> +	happyIn8+		 (TokSymbol SymCloseVirtualBrace happy_var_1+	)}++happyReduce_78 = happySpecReduce_1  2# happyReduction_78+happyReduction_78 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymVirtualSemi happy_var_1) -> +	happyIn8+		 (TokSymbol SymVirtualSemi happy_var_1+	)}++happyReduce_79 = happySpecReduce_1  2# happyReduction_79+happyReduction_79 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymOpenPragma happy_var_1) -> +	happyIn8+		 (TokSymbol SymOpenPragma happy_var_1+	)}++happyReduce_80 = happySpecReduce_1  2# happyReduction_80+happyReduction_80 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymClosePragma happy_var_1) -> +	happyIn8+		 (TokSymbol SymClosePragma happy_var_1+	)}++happyReduce_81 = happySpecReduce_1  2# happyReduction_81+happyReduction_81 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokId happy_var_1) -> +	happyIn8+		 (TokId happy_var_1+	)}++happyReduce_82 = happySpecReduce_1  2# happyReduction_82+happyReduction_82 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokQId happy_var_1) -> +	happyIn8+		 (TokQId happy_var_1+	)}++happyReduce_83 = happySpecReduce_1  2# happyReduction_83+happyReduction_83 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokString happy_var_1) -> +	happyIn8+		 (TokString happy_var_1+	)}++happyReduce_84 = happySpecReduce_1  2# happyReduction_84+happyReduction_84 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokLiteral happy_var_1) -> +	happyIn8+		 (TokLiteral happy_var_1+	)}++happyReduce_85 = happySpecReduce_1  3# happyReduction_85+happyReduction_85 happy_x_1+	 =  case happyOut10 happy_x_1 of { happy_var_1 -> +	happyIn9+		 (happy_var_1+	)}++happyReduce_86 = happySpecReduce_1  4# happyReduction_86+happyReduction_86 happy_x_1+	 =  case happyOut107 happy_x_1 of { happy_var_1 -> +	happyIn10+		 (([], happy_var_1)+	)}++happyReduce_87 = happySpecReduce_2  4# happyReduction_87+happyReduction_87 happy_x_2+	happy_x_1+	 =  case happyOut110 happy_x_1 of { happy_var_1 -> +	case happyOut10 happy_x_2 of { happy_var_2 -> +	happyIn10+		 (let (ps,m) = happy_var_2 in (happy_var_1 : ps, m)+	)}}++happyReduce_88 = happySpecReduce_1  5# happyReduction_88+happyReduction_88 happy_x_1+	 =  happyIn11+		 (()+	)++happyReduce_89 = happyMonadReduce 1# 5# happyReduction_89+happyReduction_89 (happy_x_1 `HappyStk`+	happyRest) tk+	 = happyThen (( popContext)+	) (\r -> happyReturn (happyIn11 r))++happyReduce_90 = happySpecReduce_1  6# happyReduction_90+happyReduction_90 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymSemi happy_var_1) -> +	happyIn12+		 (happy_var_1+	)}++happyReduce_91 = happySpecReduce_1  6# happyReduction_91+happyReduction_91 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymVirtualSemi happy_var_1) -> +	happyIn12+		 (happy_var_1+	)}++happyReduce_92 = happyMonadReduce 0# 7# happyReduction_92+happyReduction_92 (happyRest) tk+	 = happyThen (( pushLexState imp_dir)+	) (\r -> happyReturn (happyIn13 r))++happyReduce_93 = happyMonadReduce 1# 8# happyReduction_93+happyReduction_93 (happy_x_1 `HappyStk`+	happyRest) tk+	 = happyThen (case happyOutTok happy_x_1 of { (TokLiteral happy_var_1) -> +	( case happy_var_1 of {+		     LitInt _ n	-> return n;+		     _		-> fail $ "Expected integer"+		   })}+	) (\r -> happyReturn (happyIn14 r))++happyReduce_94 = happyMonadReduce 1# 9# happyReduction_94+happyReduction_94 (happy_x_1 `HappyStk`+	happyRest) tk+	 = happyThen (case happyOutTok happy_x_1 of { (TokId happy_var_1) -> +	( mkName happy_var_1)}+	) (\r -> happyReturn (happyIn15 r))++happyReduce_95 = happySpecReduce_2  10# happyReduction_95+happyReduction_95 happy_x_2+	happy_x_1+	 =  case happyOut15 happy_x_1 of { happy_var_1 -> +	case happyOut16 happy_x_2 of { happy_var_2 -> +	happyIn16+		 (happy_var_1 : happy_var_2+	)}}++happyReduce_96 = happySpecReduce_1  10# happyReduction_96+happyReduction_96 happy_x_1+	 =  case happyOut15 happy_x_1 of { happy_var_1 -> +	happyIn16+		 ([happy_var_1]+	)}++happyReduce_97 = happySpecReduce_1  11# happyReduction_97+happyReduction_97 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymDoubleCloseBrace happy_var_1) -> +	happyIn17+		 (getRange happy_var_1+	)}++happyReduce_98 = happyMonadReduce 2# 11# happyReduction_98+happyReduction_98 (happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest) tk+	 = happyThen (case happyOutTok happy_x_1 of { (TokSymbol SymCloseBrace happy_var_1) -> +	case happyOutTok happy_x_2 of { (TokSymbol SymCloseBrace happy_var_2) -> +	(+      if posPos (fromJust (rEnd (getRange happy_var_2))) -+	 posPos (fromJust (rStart (getRange happy_var_1))) > 2+      then parseErrorAt (fromJust (rStart (getRange happy_var_2)))+	 "Expecting '}}', found separated '}'s."+      else return $ getRange (happy_var_1, happy_var_2))}}+	) (\r -> happyReturn (happyIn17 r))++happyReduce_99 = happySpecReduce_2  12# happyReduction_99+happyReduction_99 happy_x_2+	happy_x_1+	 =  case happyOut15 happy_x_2 of { happy_var_2 -> +	happyIn18+		 (Arg NotHidden Irrelevant happy_var_2+	)}++happyReduce_100 = happySpecReduce_1  12# happyReduction_100+happyReduction_100 happy_x_1+	 =  case happyOut15 happy_x_1 of { happy_var_1 -> +	happyIn18+		 (defaultArg happy_var_1+	)}++happyReduce_101 = happySpecReduce_2  13# happyReduction_101+happyReduction_101 happy_x_2+	happy_x_1+	 =  case happyOut18 happy_x_1 of { happy_var_1 -> +	case happyOut19 happy_x_2 of { happy_var_2 -> +	happyIn19+		 (happy_var_1 : happy_var_2+	)}}++happyReduce_102 = happySpecReduce_1  13# happyReduction_102+happyReduction_102 happy_x_1+	 =  case happyOut18 happy_x_1 of { happy_var_1 -> +	happyIn19+		 ([happy_var_1]+	)}++happyReduce_103 = happySpecReduce_2  14# happyReduction_103+happyReduction_103 happy_x_2+	happy_x_1+	 =  case happyOut18 happy_x_1 of { happy_var_1 -> +	case happyOut20 happy_x_2 of { happy_var_2 -> +	happyIn20+		 (happy_var_1 : happy_var_2+	)}}++happyReduce_104 = happySpecReduce_1  14# happyReduction_104+happyReduction_104 happy_x_1+	 =  case happyOut18 happy_x_1 of { happy_var_1 -> +	happyIn20+		 ([happy_var_1]+	)}++happyReduce_105 = happyReduce 4# 14# happyReduction_105+happyReduction_105 (happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut19 happy_x_2 of { happy_var_2 -> +	case happyOut20 happy_x_4 of { happy_var_4 -> +	happyIn20+		 (map makeInstance happy_var_2 ++ happy_var_4+	) `HappyStk` happyRest}}++happyReduce_106 = happySpecReduce_3  14# happyReduction_106+happyReduction_106 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut19 happy_x_2 of { happy_var_2 -> +	happyIn20+		 (map makeInstance happy_var_2+	)}++happyReduce_107 = happyReduce 4# 14# happyReduction_107+happyReduction_107 (happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut19 happy_x_2 of { happy_var_2 -> +	case happyOut20 happy_x_4 of { happy_var_4 -> +	happyIn20+		 (map hide happy_var_2 ++ happy_var_4+	) `HappyStk` happyRest}}++happyReduce_108 = happySpecReduce_3  14# happyReduction_108+happyReduction_108 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut19 happy_x_2 of { happy_var_2 -> +	happyIn20+		 (map hide happy_var_2+	)}++happyReduce_109 = happyReduce 5# 14# happyReduction_109+happyReduction_109 (happy_x_5 `HappyStk`+	happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut16 happy_x_3 of { happy_var_3 -> +	case happyOut20 happy_x_5 of { happy_var_5 -> +	happyIn20+		 (map (Arg Hidden Irrelevant) happy_var_3 ++ happy_var_5+	) `HappyStk` happyRest}}++happyReduce_110 = happyReduce 4# 14# happyReduction_110+happyReduction_110 (happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut16 happy_x_3 of { happy_var_3 -> +	happyIn20+		 (map (Arg Hidden Irrelevant) happy_var_3+	) `HappyStk` happyRest}++happyReduce_111 = happyReduce 5# 14# happyReduction_111+happyReduction_111 (happy_x_5 `HappyStk`+	happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut16 happy_x_3 of { happy_var_3 -> +	case happyOut20 happy_x_5 of { happy_var_5 -> +	happyIn20+		 (map (Arg Instance Irrelevant) happy_var_3 ++ happy_var_5+	) `HappyStk` happyRest}}++happyReduce_112 = happyReduce 4# 14# happyReduction_112+happyReduction_112 (happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut16 happy_x_3 of { happy_var_3 -> +	happyIn20+		 (map (Arg Instance Irrelevant) happy_var_3+	) `HappyStk` happyRest}++happyReduce_113 = happyReduce 5# 14# happyReduction_113+happyReduction_113 (happy_x_5 `HappyStk`+	happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut16 happy_x_3 of { happy_var_3 -> +	case happyOut20 happy_x_5 of { happy_var_5 -> +	happyIn20+		 (map (Arg Hidden NonStrict) happy_var_3 ++ happy_var_5+	) `HappyStk` happyRest}}++happyReduce_114 = happyReduce 4# 14# happyReduction_114+happyReduction_114 (happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut16 happy_x_3 of { happy_var_3 -> +	happyIn20+		 (map (Arg Hidden NonStrict) happy_var_3+	) `HappyStk` happyRest}++happyReduce_115 = happyReduce 5# 14# happyReduction_115+happyReduction_115 (happy_x_5 `HappyStk`+	happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut16 happy_x_3 of { happy_var_3 -> +	case happyOut20 happy_x_5 of { happy_var_5 -> +	happyIn20+		 (map (Arg Instance NonStrict) happy_var_3 ++ happy_var_5+	) `HappyStk` happyRest}}++happyReduce_116 = happyReduce 4# 14# happyReduction_116+happyReduction_116 (happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut16 happy_x_3 of { happy_var_3 -> +	happyIn20+		 (map (Arg Instance NonStrict) happy_var_3+	) `HappyStk` happyRest}++happyReduce_117 = happyMonadReduce 1# 15# happyReduction_117+happyReduction_117 (happy_x_1 `HappyStk`+	happyRest) tk+	 = happyThen (case happyOutTok happy_x_1 of { (TokQId happy_var_1) -> +	( mkQName happy_var_1)}+	) (\r -> happyReturn (happyIn21 r))++happyReduce_118 = happySpecReduce_1  15# happyReduction_118+happyReduction_118 happy_x_1+	 =  case happyOut15 happy_x_1 of { happy_var_1 -> +	happyIn21+		 (QName happy_var_1+	)}++happyReduce_119 = happySpecReduce_1  16# happyReduction_119+happyReduction_119 happy_x_1+	 =  case happyOut21 happy_x_1 of { happy_var_1 -> +	happyIn22+		 (happy_var_1+	)}++happyReduce_120 = happySpecReduce_1  17# happyReduction_120+happyReduction_120 happy_x_1+	 =  case happyOut15 happy_x_1 of { happy_var_1 -> +	happyIn23+		 (happy_var_1+	)}++happyReduce_121 = happySpecReduce_1  17# happyReduction_121+happyReduction_121 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymUnderscore happy_var_1) -> +	happyIn23+		 (Name (getRange happy_var_1) [Hole]+	)}++happyReduce_122 = happySpecReduce_2  18# happyReduction_122+happyReduction_122 happy_x_2+	happy_x_1+	 =  case happyOut23 happy_x_1 of { happy_var_1 -> +	case happyOut24 happy_x_2 of { happy_var_2 -> +	happyIn24+		 (happy_var_1 : happy_var_2+	)}}++happyReduce_123 = happySpecReduce_1  18# happyReduction_123+happyReduction_123 happy_x_1+	 =  case happyOut23 happy_x_1 of { happy_var_1 -> +	happyIn24+		 ([happy_var_1]+	)}++happyReduce_124 = happySpecReduce_1  19# happyReduction_124+happyReduction_124 happy_x_1+	 =  case happyOut26 happy_x_1 of { happy_var_1 -> +	happyIn25+		 (case happy_var_1 of+      Left ns -> ns+      Right _ -> fail $ "expected sequence of bound identifiers, not absurd pattern"+	)}++happyReduce_125 = happyMonadReduce 1# 20# happyReduction_125+happyReduction_125 (happy_x_1 `HappyStk`+	happyRest) tk+	 = happyThen (case happyOut32 happy_x_1 of { happy_var_1 -> +	(+    let getName (Ident (QName x)) = Just x+	getName (Underscore r _)  = Just (Name r [Hole])+	getName _		  = Nothing++        containsAbsurd (Absurd _) = True+        containsAbsurd (HiddenArg _ (Named _ e)) = containsAbsurd e+        containsAbsurd (InstanceArg _ (Named _ e)) = containsAbsurd e+        containsAbsurd (Paren _ expr)    = containsAbsurd expr+        containsAbsurd (RawApp _ exprs)    = any containsAbsurd exprs+        containsAbsurd _          = False+    in+    if isJust $ find containsAbsurd happy_var_1 then return $ Right happy_var_1 else+    case partition isJust $ map getName happy_var_1 of+	(good, []) -> return $ Left $ map fromJust good+	_	   -> fail $ "expected sequence of bound identifiers")}+	) (\r -> happyReturn (happyIn26 r))++happyReduce_126 = happySpecReduce_0  21# happyReduction_126+happyReduction_126  =  happyIn27+		 ([]+	)++happyReduce_127 = happySpecReduce_2  21# happyReduction_127+happyReduction_127 happy_x_2+	happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokString happy_var_1) -> +	case happyOut27 happy_x_2 of { happy_var_2 -> +	happyIn27+		 (snd happy_var_1 : happy_var_2+	)}}++happyReduce_128 = happyMonadReduce 1# 22# happyReduction_128+happyReduction_128 (happy_x_1 `HappyStk`+	happyRest) tk+	 = happyThen (case happyOutTok happy_x_1 of { (TokString happy_var_1) -> +	( fmap QName (mkName happy_var_1))}+	) (\r -> happyReturn (happyIn28 r))++happyReduce_129 = happySpecReduce_2  23# happyReduction_129+happyReduction_129 happy_x_2+	happy_x_1+	 =  case happyOut42 happy_x_1 of { happy_var_1 -> +	case happyOut29 happy_x_2 of { happy_var_2 -> +	happyIn29+		 (Pi happy_var_1 happy_var_2+	)}}++happyReduce_130 = happySpecReduce_3  23# happyReduction_130+happyReduction_130 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut55 happy_x_2 of { happy_var_2 -> +	case happyOut29 happy_x_3 of { happy_var_3 -> +	happyIn29+		 (forallPi happy_var_2 happy_var_3+	)}}++happyReduce_131 = happySpecReduce_3  23# happyReduction_131+happyReduction_131 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut35 happy_x_1 of { happy_var_1 -> +	case happyOutTok happy_x_2 of { (TokSymbol SymArrow happy_var_2) -> +	case happyOut29 happy_x_3 of { happy_var_3 -> +	happyIn29+		 (Fun (getRange (happy_var_1,happy_var_2,happy_var_3))+                                              (RawApp (getRange happy_var_1) happy_var_1)+                                              happy_var_3+	)}}}++happyReduce_132 = happySpecReduce_1  23# happyReduction_132+happyReduction_132 happy_x_1+	 =  case happyOut30 happy_x_1 of { happy_var_1 -> +	happyIn29+		 (happy_var_1+	)}++happyReduce_133 = happyMonadReduce 1# 24# happyReduction_133+happyReduction_133 (happy_x_1 `HappyStk`+	happyRest) tk+	 = happyThen (case happyOut31 happy_x_1 of { happy_var_1 -> +	( case happy_var_1 of+		      { [e]    -> return e+		      ; e : es -> return $ WithApp (fuseRange e es) e es+		      ; []     -> fail "impossible: empty with expressions"+		      })}+	) (\r -> happyReturn (happyIn30 r))++happyReduce_134 = happySpecReduce_3  25# happyReduction_134+happyReduction_134 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut35 happy_x_1 of { happy_var_1 -> +	case happyOut31 happy_x_3 of { happy_var_3 -> +	happyIn31+		 (RawApp (getRange happy_var_1) happy_var_1 :  happy_var_3+	)}}++happyReduce_135 = happySpecReduce_1  25# happyReduction_135+happyReduction_135 happy_x_1+	 =  case happyOut32 happy_x_1 of { happy_var_1 -> +	happyIn31+		 ([RawApp (getRange happy_var_1) happy_var_1]+	)}++happyReduce_136 = happySpecReduce_1  26# happyReduction_136+happyReduction_136 happy_x_1+	 =  case happyOut33 happy_x_1 of { happy_var_1 -> +	happyIn32+		 ([happy_var_1]+	)}++happyReduce_137 = happySpecReduce_2  26# happyReduction_137+happyReduction_137 happy_x_2+	happy_x_1+	 =  case happyOut38 happy_x_1 of { happy_var_1 -> +	case happyOut32 happy_x_2 of { happy_var_2 -> +	happyIn32+		 (happy_var_1 : happy_var_2+	)}}++happyReduce_138 = happySpecReduce_3  27# happyReduction_138+happyReduction_138 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymLambda happy_var_1) -> +	case happyOut47 happy_x_2 of { happy_var_2 -> +	case happyOut29 happy_x_3 of { happy_var_3 -> +	happyIn33+		 (Lam (getRange (happy_var_1,happy_var_2,happy_var_3)) happy_var_2 happy_var_3+	)}}}++happyReduce_139 = happySpecReduce_1  27# happyReduction_139+happyReduction_139 happy_x_1+	 =  case happyOut34 happy_x_1 of { happy_var_1 -> +	happyIn33+		 (happy_var_1+	)}++happyReduce_140 = happyReduce 4# 27# happyReduction_140+happyReduction_140 (happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOutTok happy_x_1 of { (TokKeyword KwLet happy_var_1) -> +	case happyOut133 happy_x_2 of { happy_var_2 -> +	case happyOutTok happy_x_3 of { (TokKeyword KwIn happy_var_3) -> +	case happyOut29 happy_x_4 of { happy_var_4 -> +	happyIn33+		 (Let (getRange (happy_var_1,happy_var_2,happy_var_3,happy_var_4)) happy_var_2 happy_var_4+	) `HappyStk` happyRest}}}}++happyReduce_141 = happySpecReduce_1  27# happyReduction_141+happyReduction_141 happy_x_1+	 =  case happyOut38 happy_x_1 of { happy_var_1 -> +	happyIn33+		 (happy_var_1+	)}++happyReduce_142 = happyReduce 4# 27# happyReduction_142+happyReduction_142 (happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOutTok happy_x_1 of { (TokKeyword KwQuoteGoal happy_var_1) -> +	case happyOut15 happy_x_2 of { happy_var_2 -> +	case happyOutTok happy_x_3 of { (TokKeyword KwIn happy_var_3) -> +	case happyOut29 happy_x_4 of { happy_var_4 -> +	happyIn33+		 (QuoteGoal (getRange (happy_var_1,happy_var_2,happy_var_3,happy_var_4)) happy_var_2 happy_var_4+	) `HappyStk` happyRest}}}}++happyReduce_143 = happyReduce 4# 28# happyReduction_143+happyReduction_143 (happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOutTok happy_x_1 of { (TokSymbol SymLambda happy_var_1) -> +	case happyOutTok happy_x_2 of { (TokSymbol SymOpenBrace happy_var_2) -> +	case happyOut54 happy_x_3 of { happy_var_3 -> +	case happyOutTok happy_x_4 of { (TokSymbol SymCloseBrace happy_var_4) -> +	happyIn34+		 (ExtendedLam (getRange (happy_var_1,happy_var_2,happy_var_3,happy_var_4)) (reverse happy_var_3)+	) `HappyStk` happyRest}}}}++happyReduce_144 = happyMonadReduce 2# 28# happyReduction_144+happyReduction_144 (happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest) tk+	 = happyThen (case happyOutTok happy_x_1 of { (TokSymbol SymLambda happy_var_1) -> +	case happyOut48 happy_x_2 of { happy_var_2 -> +	( case happy_var_2 of+                                       Left (bs, h) -> if null bs then return $ AbsurdLam r h else+                                                       return $ Lam r bs (AbsurdLam r h)+                                                         where r = fuseRange happy_var_1 bs+    				       Right es -> do -- it is of the form @\ { p1 ... () }@+                                                     p <- exprToLHS (RawApp (getRange es) es);+                                                     return $ ExtendedLam (fuseRange happy_var_1 es)+                                                                     [(p [] [], AbsurdRHS, NoWhere)])}}+	) (\r -> happyReturn (happyIn34 r))++happyReduce_145 = happySpecReduce_1  29# happyReduction_145+happyReduction_145 happy_x_1+	 =  case happyOut38 happy_x_1 of { happy_var_1 -> +	happyIn35+		 ([happy_var_1]+	)}++happyReduce_146 = happySpecReduce_2  29# happyReduction_146+happyReduction_146 happy_x_2+	happy_x_1+	 =  case happyOut38 happy_x_1 of { happy_var_1 -> +	case happyOut35 happy_x_2 of { happy_var_2 -> +	happyIn35+		 (happy_var_1 : happy_var_2+	)}}++happyReduce_147 = happySpecReduce_3  30# happyReduction_147+happyReduction_147 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymOpenBrace happy_var_1) -> +	case happyOut29 happy_x_2 of { happy_var_2 -> +	case happyOutTok happy_x_3 of { (TokSymbol SymCloseBrace happy_var_3) -> +	happyIn36+		 (HiddenArg (getRange (happy_var_1,happy_var_2,happy_var_3)) (unnamed happy_var_2)+	)}}}++happyReduce_148 = happyReduce 5# 30# happyReduction_148+happyReduction_148 (happy_x_5 `HappyStk`+	happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOutTok happy_x_1 of { (TokSymbol SymOpenBrace happy_var_1) -> +	case happyOut15 happy_x_2 of { happy_var_2 -> +	case happyOutTok happy_x_3 of { (TokSymbol SymEqual happy_var_3) -> +	case happyOut29 happy_x_4 of { happy_var_4 -> +	case happyOutTok happy_x_5 of { (TokSymbol SymCloseBrace happy_var_5) -> +	happyIn36+		 (HiddenArg (getRange (happy_var_1,happy_var_2,happy_var_3,happy_var_4,happy_var_5))+                                            (named (show happy_var_2) happy_var_4)+	) `HappyStk` happyRest}}}}}++happyReduce_149 = happySpecReduce_2  30# happyReduction_149+happyReduction_149 happy_x_2+	happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymOpenBrace happy_var_1) -> +	case happyOutTok happy_x_2 of { (TokSymbol SymCloseBrace happy_var_2) -> +	happyIn36+		 (let r = fuseRange happy_var_1 happy_var_2 in HiddenArg r $ unnamed $ Absurd r+	)}}++happyReduce_150 = happySpecReduce_1  31# happyReduction_150+happyReduction_150 happy_x_1+	 =  case happyOut21 happy_x_1 of { happy_var_1 -> +	happyIn37+		 (Ident happy_var_1+	)}++happyReduce_151 = happySpecReduce_1  31# happyReduction_151+happyReduction_151 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokLiteral happy_var_1) -> +	happyIn37+		 (Lit happy_var_1+	)}++happyReduce_152 = happySpecReduce_1  31# happyReduction_152+happyReduction_152 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymQuestionMark happy_var_1) -> +	happyIn37+		 (QuestionMark (getRange happy_var_1) Nothing+	)}++happyReduce_153 = happySpecReduce_1  31# happyReduction_153+happyReduction_153 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymUnderscore happy_var_1) -> +	happyIn37+		 (Underscore (getRange happy_var_1) Nothing+	)}++happyReduce_154 = happySpecReduce_1  31# happyReduction_154+happyReduction_154 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwProp happy_var_1) -> +	happyIn37+		 (Prop (getRange happy_var_1)+	)}++happyReduce_155 = happySpecReduce_1  31# happyReduction_155+happyReduction_155 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwSet happy_var_1) -> +	happyIn37+		 (Set (getRange happy_var_1)+	)}++happyReduce_156 = happySpecReduce_1  31# happyReduction_156+happyReduction_156 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwQuote happy_var_1) -> +	happyIn37+		 (Quote (getRange happy_var_1)+	)}++happyReduce_157 = happySpecReduce_1  31# happyReduction_157+happyReduction_157 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwQuoteTerm happy_var_1) -> +	happyIn37+		 (QuoteTerm (getRange happy_var_1)+	)}++happyReduce_158 = happySpecReduce_1  31# happyReduction_158+happyReduction_158 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwUnquote happy_var_1) -> +	happyIn37+		 (Unquote (getRange happy_var_1)+	)}++happyReduce_159 = happySpecReduce_1  31# happyReduction_159+happyReduction_159 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokSetN happy_var_1) -> +	happyIn37+		 (SetN (getRange (fst happy_var_1)) (snd happy_var_1)+	)}++happyReduce_160 = happySpecReduce_3  31# happyReduction_160+happyReduction_160 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymDoubleOpenBrace happy_var_1) -> +	case happyOut29 happy_x_2 of { happy_var_2 -> +	case happyOut17 happy_x_3 of { happy_var_3 -> +	happyIn37+		 (InstanceArg (getRange (happy_var_1,happy_var_2,happy_var_3))+                                                          (unnamed happy_var_2)+	)}}}++happyReduce_161 = happyReduce 5# 31# happyReduction_161+happyReduction_161 (happy_x_5 `HappyStk`+	happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOutTok happy_x_1 of { (TokSymbol SymDoubleOpenBrace happy_var_1) -> +	case happyOut15 happy_x_2 of { happy_var_2 -> +	case happyOutTok happy_x_3 of { (TokSymbol SymEqual happy_var_3) -> +	case happyOut29 happy_x_4 of { happy_var_4 -> +	case happyOut17 happy_x_5 of { happy_var_5 -> +	happyIn37+		 (InstanceArg (getRange (happy_var_1,happy_var_2,happy_var_3,happy_var_4,happy_var_5))+                                                          (named (show happy_var_2) happy_var_4)+	) `HappyStk` happyRest}}}}}++happyReduce_162 = happySpecReduce_3  31# happyReduction_162+happyReduction_162 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymOpenParen happy_var_1) -> +	case happyOut29 happy_x_2 of { happy_var_2 -> +	case happyOutTok happy_x_3 of { (TokSymbol SymCloseParen happy_var_3) -> +	happyIn37+		 (Paren (getRange (happy_var_1,happy_var_2,happy_var_3)) happy_var_2+	)}}}++happyReduce_163 = happySpecReduce_2  31# happyReduction_163+happyReduction_163 happy_x_2+	happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymOpenParen happy_var_1) -> +	case happyOutTok happy_x_2 of { (TokSymbol SymCloseParen happy_var_2) -> +	happyIn37+		 (Absurd (fuseRange happy_var_1 happy_var_2)+	)}}++happyReduce_164 = happySpecReduce_2  31# happyReduction_164+happyReduction_164 happy_x_2+	happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymDoubleOpenBrace happy_var_1) -> +	case happyOut17 happy_x_2 of { happy_var_2 -> +	happyIn37+		 (let r = fuseRange happy_var_1 happy_var_2 in InstanceArg r $ unnamed $ Absurd r+	)}}++happyReduce_165 = happySpecReduce_3  31# happyReduction_165+happyReduction_165 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut15 happy_x_1 of { happy_var_1 -> +	case happyOutTok happy_x_2 of { (TokSymbol SymAs happy_var_2) -> +	case happyOut38 happy_x_3 of { happy_var_3 -> +	happyIn37+		 (As (getRange (happy_var_1,happy_var_2,happy_var_3)) happy_var_1 happy_var_3+	)}}}++happyReduce_166 = happySpecReduce_2  31# happyReduction_166+happyReduction_166 happy_x_2+	happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymDot happy_var_1) -> +	case happyOut38 happy_x_2 of { happy_var_2 -> +	happyIn37+		 (Dot (fuseRange happy_var_1 happy_var_2) happy_var_2+	)}}++happyReduce_167 = happyReduce 4# 31# happyReduction_167+happyReduction_167 (happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOutTok happy_x_1 of { (TokKeyword KwRecord happy_var_1) -> +	case happyOutTok happy_x_2 of { (TokSymbol SymOpenBrace happy_var_2) -> +	case happyOut39 happy_x_3 of { happy_var_3 -> +	case happyOutTok happy_x_4 of { (TokSymbol SymCloseBrace happy_var_4) -> +	happyIn37+		 (Rec (getRange (happy_var_1,happy_var_2,happy_var_3,happy_var_4)) happy_var_3+	) `HappyStk` happyRest}}}}++happyReduce_168 = happyReduce 5# 31# happyReduction_168+happyReduction_168 (happy_x_5 `HappyStk`+	happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOutTok happy_x_1 of { (TokKeyword KwRecord happy_var_1) -> +	case happyOut37 happy_x_2 of { happy_var_2 -> +	case happyOutTok happy_x_3 of { (TokSymbol SymOpenBrace happy_var_3) -> +	case happyOut39 happy_x_4 of { happy_var_4 -> +	case happyOutTok happy_x_5 of { (TokSymbol SymCloseBrace happy_var_5) -> +	happyIn37+		 (RecUpdate (getRange (happy_var_1,happy_var_2,happy_var_3,happy_var_4,happy_var_5)) happy_var_2 happy_var_4+	) `HappyStk` happyRest}}}}}++happyReduce_169 = happySpecReduce_1  32# happyReduction_169+happyReduction_169 happy_x_1+	 =  case happyOut36 happy_x_1 of { happy_var_1 -> +	happyIn38+		 (happy_var_1+	)}++happyReduce_170 = happySpecReduce_1  32# happyReduction_170+happyReduction_170 happy_x_1+	 =  case happyOut37 happy_x_1 of { happy_var_1 -> +	happyIn38+		 (happy_var_1+	)}++happyReduce_171 = happySpecReduce_0  33# happyReduction_171+happyReduction_171  =  happyIn39+		 ([]+	)++happyReduce_172 = happySpecReduce_1  33# happyReduction_172+happyReduction_172 happy_x_1+	 =  case happyOut40 happy_x_1 of { happy_var_1 -> +	happyIn39+		 (happy_var_1+	)}++happyReduce_173 = happySpecReduce_1  34# happyReduction_173+happyReduction_173 happy_x_1+	 =  case happyOut41 happy_x_1 of { happy_var_1 -> +	happyIn40+		 ([happy_var_1]+	)}++happyReduce_174 = happySpecReduce_3  34# happyReduction_174+happyReduction_174 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut41 happy_x_1 of { happy_var_1 -> +	case happyOut40 happy_x_3 of { happy_var_3 -> +	happyIn40+		 (happy_var_1 : happy_var_3+	)}}++happyReduce_175 = happySpecReduce_3  35# happyReduction_175+happyReduction_175 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut15 happy_x_1 of { happy_var_1 -> +	case happyOut29 happy_x_3 of { happy_var_3 -> +	happyIn41+		 ((happy_var_1, happy_var_3)+	)}}++happyReduce_176 = happySpecReduce_2  36# happyReduction_176+happyReduction_176 happy_x_2+	happy_x_1+	 =  case happyOut43 happy_x_1 of { happy_var_1 -> +	happyIn42+		 (happy_var_1+	)}++happyReduce_177 = happySpecReduce_1  37# happyReduction_177+happyReduction_177 happy_x_1+	 =  case happyOut44 happy_x_1 of { happy_var_1 -> +	happyIn43+		 ({-TeleBind-} happy_var_1+	)}++happyReduce_178 = happySpecReduce_2  38# happyReduction_178+happyReduction_178 happy_x_2+	happy_x_1+	 =  case happyOut45 happy_x_1 of { happy_var_1 -> +	case happyOut44 happy_x_2 of { happy_var_2 -> +	happyIn44+		 (happy_var_1 : happy_var_2+	)}}++happyReduce_179 = happySpecReduce_1  38# happyReduction_179+happyReduction_179 happy_x_1+	 =  case happyOut45 happy_x_1 of { happy_var_1 -> +	happyIn44+		 ([happy_var_1]+	)}++happyReduce_180 = happyReduce 4# 39# happyReduction_180+happyReduction_180 (happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOutTok happy_x_2 of { (TokSymbol SymOpenParen happy_var_2) -> +	case happyOut46 happy_x_3 of { happy_var_3 -> +	case happyOutTok happy_x_4 of { (TokSymbol SymCloseParen happy_var_4) -> +	happyIn45+		 (TypedBindings (getRange (happy_var_2,happy_var_3,happy_var_4)) (Arg NotHidden         Irrelevant happy_var_3)+	) `HappyStk` happyRest}}}++happyReduce_181 = happyReduce 4# 39# happyReduction_181+happyReduction_181 (happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOutTok happy_x_2 of { (TokSymbol SymOpenBrace happy_var_2) -> +	case happyOut46 happy_x_3 of { happy_var_3 -> +	case happyOutTok happy_x_4 of { (TokSymbol SymCloseBrace happy_var_4) -> +	happyIn45+		 (TypedBindings (getRange (happy_var_2,happy_var_3,happy_var_4)) (Arg Hidden            Irrelevant happy_var_3)+	) `HappyStk` happyRest}}}++happyReduce_182 = happyReduce 4# 39# happyReduction_182+happyReduction_182 (happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOutTok happy_x_2 of { (TokSymbol SymDoubleOpenBrace happy_var_2) -> +	case happyOut46 happy_x_3 of { happy_var_3 -> +	case happyOut17 happy_x_4 of { happy_var_4 -> +	happyIn45+		 (TypedBindings (getRange (happy_var_2,happy_var_3,happy_var_4))+                                         (Arg Instance Irrelevant happy_var_3)+	) `HappyStk` happyRest}}}++happyReduce_183 = happyReduce 4# 39# happyReduction_183+happyReduction_183 (happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOutTok happy_x_2 of { (TokSymbol SymOpenParen happy_var_2) -> +	case happyOut46 happy_x_3 of { happy_var_3 -> +	case happyOutTok happy_x_4 of { (TokSymbol SymCloseParen happy_var_4) -> +	happyIn45+		 (TypedBindings (getRange (happy_var_2,happy_var_3,happy_var_4)) (Arg NotHidden         NonStrict happy_var_3)+	) `HappyStk` happyRest}}}++happyReduce_184 = happyReduce 4# 39# happyReduction_184+happyReduction_184 (happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOutTok happy_x_2 of { (TokSymbol SymOpenBrace happy_var_2) -> +	case happyOut46 happy_x_3 of { happy_var_3 -> +	case happyOutTok happy_x_4 of { (TokSymbol SymCloseBrace happy_var_4) -> +	happyIn45+		 (TypedBindings (getRange (happy_var_2,happy_var_3,happy_var_4)) (Arg Hidden            NonStrict happy_var_3)+	) `HappyStk` happyRest}}}++happyReduce_185 = happyReduce 4# 39# happyReduction_185+happyReduction_185 (happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOutTok happy_x_2 of { (TokSymbol SymDoubleOpenBrace happy_var_2) -> +	case happyOut46 happy_x_3 of { happy_var_3 -> +	case happyOut17 happy_x_4 of { happy_var_4 -> +	happyIn45+		 (TypedBindings (getRange (happy_var_2,happy_var_3,happy_var_4)) (Arg Instance NonStrict happy_var_3)+	) `HappyStk` happyRest}}}++happyReduce_186 = happySpecReduce_3  39# happyReduction_186+happyReduction_186 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymOpenParen happy_var_1) -> +	case happyOut46 happy_x_2 of { happy_var_2 -> +	case happyOutTok happy_x_3 of { (TokSymbol SymCloseParen happy_var_3) -> +	happyIn45+		 (TypedBindings (getRange (happy_var_1,happy_var_2,happy_var_3)) (Arg NotHidden         Relevant happy_var_2)+	)}}}++happyReduce_187 = happySpecReduce_3  39# happyReduction_187+happyReduction_187 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymDoubleOpenBrace happy_var_1) -> +	case happyOut46 happy_x_2 of { happy_var_2 -> +	case happyOut17 happy_x_3 of { happy_var_3 -> +	happyIn45+		 (TypedBindings (getRange (happy_var_1,happy_var_2,happy_var_3)) (Arg Instance Relevant happy_var_2)+	)}}}++happyReduce_188 = happySpecReduce_3  39# happyReduction_188+happyReduction_188 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymOpenBrace happy_var_1) -> +	case happyOut46 happy_x_2 of { happy_var_2 -> +	case happyOutTok happy_x_3 of { (TokSymbol SymCloseBrace happy_var_3) -> +	happyIn45+		 (TypedBindings (getRange (happy_var_1,happy_var_2,happy_var_3)) (Arg Hidden            Relevant happy_var_2)+	)}}}++happyReduce_189 = happySpecReduce_3  40# happyReduction_189+happyReduction_189 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut25 happy_x_1 of { happy_var_1 -> +	case happyOutTok happy_x_2 of { (TokSymbol SymColon happy_var_2) -> +	case happyOut29 happy_x_3 of { happy_var_3 -> +	happyIn46+		 (TBind (getRange (happy_var_1,happy_var_2,happy_var_3)) (map mkBoundName_ happy_var_1) happy_var_3+	)}}}++happyReduce_190 = happyMonadReduce 2# 41# happyReduction_190+happyReduction_190 (happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest) tk+	 = happyThen (case happyOut49 happy_x_1 of { happy_var_1 -> +	(+      case reverse happy_var_1 of+        Left _ : _ -> parseError "Absurd lambda cannot have a body."+	_ : _      -> return [ b | Right b <- happy_var_1 ]+        []         -> parsePanic "Empty LamBinds")}+	) (\r -> happyReturn (happyIn47 r))++happyReduce_191 = happyMonadReduce 1# 42# happyReduction_191+happyReduction_191 (happy_x_1 `HappyStk`+	happyRest) tk+	 = happyThen (case happyOut50 happy_x_1 of { happy_var_1 -> +	(+    case happy_var_1 of+      Left lb -> case reverse lb of+                   Right _ : _ -> parseError "Missing body for lambda"+                   Left h  : _ -> return $ Left ([ b | Right b <- init lb], h)+                   _           -> parsePanic "Empty LamBindsAbsurd"+      Right es -> return $ Right es)}+	) (\r -> happyReturn (happyIn48 r))++happyReduce_192 = happySpecReduce_2  43# happyReduction_192+happyReduction_192 happy_x_2+	happy_x_1+	 =  case happyOut58 happy_x_1 of { happy_var_1 -> +	case happyOut49 happy_x_2 of { happy_var_2 -> +	happyIn49+		 (map Right happy_var_1 ++ happy_var_2+	)}}++happyReduce_193 = happySpecReduce_2  43# happyReduction_193+happyReduction_193 happy_x_2+	happy_x_1+	 =  case happyOut45 happy_x_1 of { happy_var_1 -> +	case happyOut49 happy_x_2 of { happy_var_2 -> +	happyIn49+		 (Right (DomainFull happy_var_1) : happy_var_2+	)}}++happyReduce_194 = happySpecReduce_1  43# happyReduction_194+happyReduction_194 happy_x_1+	 =  case happyOut58 happy_x_1 of { happy_var_1 -> +	happyIn49+		 (map Right happy_var_1+	)}++happyReduce_195 = happySpecReduce_1  43# happyReduction_195+happyReduction_195 happy_x_1+	 =  case happyOut45 happy_x_1 of { happy_var_1 -> +	happyIn49+		 ([Right $ DomainFull happy_var_1]+	)}++happyReduce_196 = happySpecReduce_2  43# happyReduction_196+happyReduction_196 happy_x_2+	happy_x_1+	 =  happyIn49+		 ([Left NotHidden]+	)++happyReduce_197 = happySpecReduce_2  43# happyReduction_197+happyReduction_197 happy_x_2+	happy_x_1+	 =  happyIn49+		 ([Left Hidden]+	)++happyReduce_198 = happySpecReduce_2  43# happyReduction_198+happyReduction_198 happy_x_2+	happy_x_1+	 =  happyIn49+		 ([Left Instance]+	)++happyReduce_199 = happySpecReduce_2  44# happyReduction_199+happyReduction_199 happy_x_2+	happy_x_1+	 =  case happyOut58 happy_x_1 of { happy_var_1 -> +	case happyOut49 happy_x_2 of { happy_var_2 -> +	happyIn50+		 (Left $ map Right happy_var_1 ++ happy_var_2+	)}}++happyReduce_200 = happySpecReduce_2  44# happyReduction_200+happyReduction_200 happy_x_2+	happy_x_1+	 =  case happyOut45 happy_x_1 of { happy_var_1 -> +	case happyOut49 happy_x_2 of { happy_var_2 -> +	happyIn50+		 (Left $ Right (DomainFull happy_var_1) : happy_var_2+	)}}++happyReduce_201 = happySpecReduce_1  44# happyReduction_201+happyReduction_201 happy_x_1+	 =  case happyOut59 happy_x_1 of { happy_var_1 -> +	happyIn50+		 (case happy_var_1 of+                                    Left lb -> Left $ map Right lb+                                    Right es -> Right es+	)}++happyReduce_202 = happySpecReduce_1  44# happyReduction_202+happyReduction_202 happy_x_1+	 =  case happyOut45 happy_x_1 of { happy_var_1 -> +	happyIn50+		 (Left [Right $ DomainFull happy_var_1]+	)}++happyReduce_203 = happySpecReduce_2  44# happyReduction_203+happyReduction_203 happy_x_2+	happy_x_1+	 =  happyIn50+		 (Left [Left NotHidden]+	)++happyReduce_204 = happySpecReduce_2  44# happyReduction_204+happyReduction_204 happy_x_2+	happy_x_1+	 =  happyIn50+		 (Left [Left Hidden]+	)++happyReduce_205 = happySpecReduce_2  44# happyReduction_205+happyReduction_205 happy_x_2+	happy_x_1+	 =  happyIn50+		 (Left [Left Instance]+	)++happyReduce_206 = happyMonadReduce 3# 45# happyReduction_206+happyReduction_206 (happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest) tk+	 = happyThen (case happyOut35 happy_x_1 of { happy_var_1 -> +	case happyOut29 happy_x_3 of { happy_var_3 -> +	( do+      p <- exprToLHS (RawApp (getRange happy_var_1) happy_var_1) ;+      return (p [] [], RHS happy_var_3, NoWhere))}}+	) (\r -> happyReturn (happyIn51 r))++happyReduce_207 = happyMonadReduce 1# 46# happyReduction_207+happyReduction_207 (happy_x_1 `HappyStk`+	happyRest) tk+	 = happyThen (case happyOut32 happy_x_1 of { happy_var_1 -> +	( do+      p <- exprToLHS (RawApp (getRange happy_var_1) happy_var_1);+      return (p [] [], AbsurdRHS, NoWhere))}+	) (\r -> happyReturn (happyIn52 r))++happyReduce_208 = happySpecReduce_1  47# happyReduction_208+happyReduction_208 happy_x_1+	 =  case happyOut51 happy_x_1 of { happy_var_1 -> +	happyIn53+		 (happy_var_1+	)}++happyReduce_209 = happySpecReduce_1  47# happyReduction_209+happyReduction_209 happy_x_1+	 =  case happyOut52 happy_x_1 of { happy_var_1 -> +	happyIn53+		 (happy_var_1+	)}++happyReduce_210 = happySpecReduce_3  48# happyReduction_210+happyReduction_210 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut54 happy_x_1 of { happy_var_1 -> +	case happyOut53 happy_x_3 of { happy_var_3 -> +	happyIn54+		 (happy_var_3 : happy_var_1+	)}}++happyReduce_211 = happySpecReduce_3  48# happyReduction_211+happyReduction_211 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut52 happy_x_1 of { happy_var_1 -> +	case happyOut53 happy_x_3 of { happy_var_3 -> +	happyIn54+		 ([happy_var_3, happy_var_1]+	)}}++happyReduce_212 = happySpecReduce_1  48# happyReduction_212+happyReduction_212 happy_x_1+	 =  case happyOut51 happy_x_1 of { happy_var_1 -> +	happyIn54+		 ([happy_var_1]+	)}++happyReduce_213 = happySpecReduce_2  49# happyReduction_213+happyReduction_213 happy_x_2+	happy_x_1+	 =  case happyOut56 happy_x_1 of { happy_var_1 -> +	happyIn55+		 (happy_var_1+	)}++happyReduce_214 = happySpecReduce_2  50# happyReduction_214+happyReduction_214 happy_x_2+	happy_x_1+	 =  case happyOut58 happy_x_1 of { happy_var_1 -> +	case happyOut56 happy_x_2 of { happy_var_2 -> +	happyIn56+		 (happy_var_1 ++ happy_var_2+	)}}++happyReduce_215 = happySpecReduce_2  50# happyReduction_215+happyReduction_215 happy_x_2+	happy_x_1+	 =  case happyOut45 happy_x_1 of { happy_var_1 -> +	case happyOut56 happy_x_2 of { happy_var_2 -> +	happyIn56+		 (DomainFull happy_var_1 : happy_var_2+	)}}++happyReduce_216 = happySpecReduce_1  50# happyReduction_216+happyReduction_216 happy_x_1+	 =  case happyOut58 happy_x_1 of { happy_var_1 -> +	happyIn56+		 (happy_var_1+	)}++happyReduce_217 = happySpecReduce_1  50# happyReduction_217+happyReduction_217 happy_x_1+	 =  case happyOut45 happy_x_1 of { happy_var_1 -> +	happyIn56+		 ([DomainFull happy_var_1]+	)}++happyReduce_218 = happySpecReduce_2  51# happyReduction_218+happyReduction_218 happy_x_2+	happy_x_1+	 =  case happyOut58 happy_x_1 of { happy_var_1 -> +	case happyOut57 happy_x_2 of { happy_var_2 -> +	happyIn57+		 (happy_var_1 ++ happy_var_2+	)}}++happyReduce_219 = happySpecReduce_2  51# happyReduction_219+happyReduction_219 happy_x_2+	happy_x_1+	 =  case happyOut45 happy_x_1 of { happy_var_1 -> +	case happyOut57 happy_x_2 of { happy_var_2 -> +	happyIn57+		 (DomainFull happy_var_1 : happy_var_2+	)}}++happyReduce_220 = happySpecReduce_0  51# happyReduction_220+happyReduction_220  =  happyIn57+		 ([]+	)++happyReduce_221 = happySpecReduce_1  52# happyReduction_221+happyReduction_221 happy_x_1+	 =  case happyOut59 happy_x_1 of { happy_var_1 -> +	happyIn58+		 (case happy_var_1 of+                             Left lbs -> lbs+                             Right _ -> fail "expected sequence of bound identifiers, not absurd pattern"+	)}++happyReduce_222 = happySpecReduce_1  53# happyReduction_222+happyReduction_222 happy_x_1+	 =  case happyOut23 happy_x_1 of { happy_var_1 -> +	happyIn59+		 (Left [DomainFree NotHidden Relevant $ mkBoundName_ happy_var_1]+	)}++happyReduce_223 = happySpecReduce_2  53# happyReduction_223+happyReduction_223 happy_x_2+	happy_x_1+	 =  case happyOut23 happy_x_2 of { happy_var_2 -> +	happyIn59+		 (Left [DomainFree NotHidden Irrelevant $ mkBoundName_ happy_var_2]+	)}++happyReduce_224 = happySpecReduce_2  53# happyReduction_224+happyReduction_224 happy_x_2+	happy_x_1+	 =  case happyOut23 happy_x_2 of { happy_var_2 -> +	happyIn59+		 (Left [DomainFree NotHidden NonStrict $ mkBoundName_ happy_var_2]+	)}++happyReduce_225 = happySpecReduce_3  53# happyReduction_225+happyReduction_225 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut26 happy_x_2 of { happy_var_2 -> +	happyIn59+		 (either (Left . map (DomainFree Hidden Relevant . mkBoundName_)) Right happy_var_2+	)}++happyReduce_226 = happySpecReduce_3  53# happyReduction_226+happyReduction_226 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut25 happy_x_2 of { happy_var_2 -> +	happyIn59+		 (Left $ map (DomainFree Instance Relevant . mkBoundName_) happy_var_2+	)}++happyReduce_227 = happyReduce 4# 53# happyReduction_227+happyReduction_227 (happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut25 happy_x_3 of { happy_var_3 -> +	happyIn59+		 (Left $ map (DomainFree Hidden Irrelevant . mkBoundName_) happy_var_3+	) `HappyStk` happyRest}++happyReduce_228 = happyReduce 4# 53# happyReduction_228+happyReduction_228 (happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut25 happy_x_3 of { happy_var_3 -> +	happyIn59+		 (Left $ map (DomainFree Instance Irrelevant . mkBoundName_) happy_var_3+	) `HappyStk` happyRest}++happyReduce_229 = happyReduce 4# 53# happyReduction_229+happyReduction_229 (happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut25 happy_x_3 of { happy_var_3 -> +	happyIn59+		 (Left $ map (DomainFree Hidden NonStrict . mkBoundName_) happy_var_3+	) `HappyStk` happyRest}++happyReduce_230 = happyReduce 4# 53# happyReduction_230+happyReduction_230 (happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut25 happy_x_3 of { happy_var_3 -> +	happyIn59+		 (Left $ map (DomainFree Instance NonStrict . mkBoundName_) happy_var_3+	) `HappyStk` happyRest}++happyReduce_231 = happyMonadReduce 1# 54# happyReduction_231+happyReduction_231 (happy_x_1 `HappyStk`+	happyRest) tk+	 = happyThen (case happyOut61 happy_x_1 of { happy_var_1 -> +	( verifyImportDirective happy_var_1)}+	) (\r -> happyReturn (happyIn60 r))++happyReduce_232 = happySpecReduce_2  55# happyReduction_232+happyReduction_232 happy_x_2+	happy_x_1+	 =  case happyOut62 happy_x_2 of { happy_var_2 -> +	happyIn61+		 (happy_var_2 { publicOpen = True }+	)}++happyReduce_233 = happySpecReduce_1  55# happyReduction_233+happyReduction_233 happy_x_1+	 =  case happyOut62 happy_x_1 of { happy_var_1 -> +	happyIn61+		 (happy_var_1+	)}++happyReduce_234 = happySpecReduce_2  56# happyReduction_234+happyReduction_234 happy_x_2+	happy_x_1+	 =  case happyOut63 happy_x_1 of { happy_var_1 -> +	case happyOut64 happy_x_2 of { happy_var_2 -> +	happyIn62+		 (ImportDirective (fuseRange (snd happy_var_1) (snd happy_var_2)) (fst happy_var_1) (fst happy_var_2) False+	)}}++happyReduce_235 = happySpecReduce_1  56# happyReduction_235+happyReduction_235 happy_x_1+	 =  case happyOut64 happy_x_1 of { happy_var_1 -> +	happyIn62+		 (ImportDirective (getRange (snd happy_var_1)) (Hiding []) (fst happy_var_1) False+	)}++happyReduce_236 = happySpecReduce_1  56# happyReduction_236+happyReduction_236 happy_x_1+	 =  case happyOut63 happy_x_1 of { happy_var_1 -> +	happyIn62+		 (ImportDirective (getRange (snd happy_var_1)) (fst happy_var_1) [] False+	)}++happyReduce_237 = happySpecReduce_0  56# happyReduction_237+happyReduction_237  =  happyIn62+		 (defaultImportDir+	)++happyReduce_238 = happyReduce 4# 57# happyReduction_238+happyReduction_238 (happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOutTok happy_x_1 of { (TokKeyword KwUsing happy_var_1) -> +	case happyOutTok happy_x_2 of { (TokSymbol SymOpenParen happy_var_2) -> +	case happyOut69 happy_x_3 of { happy_var_3 -> +	case happyOutTok happy_x_4 of { (TokSymbol SymCloseParen happy_var_4) -> +	happyIn63+		 ((Using happy_var_3 , getRange (happy_var_1,happy_var_2,happy_var_3,happy_var_4))+	) `HappyStk` happyRest}}}}++happyReduce_239 = happyReduce 4# 57# happyReduction_239+happyReduction_239 (happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOutTok happy_x_1 of { (TokKeyword KwHiding happy_var_1) -> +	case happyOutTok happy_x_2 of { (TokSymbol SymOpenParen happy_var_2) -> +	case happyOut70 happy_x_3 of { happy_var_3 -> +	case happyOutTok happy_x_4 of { (TokSymbol SymCloseParen happy_var_4) -> +	happyIn63+		 ((Hiding happy_var_3 , getRange (happy_var_1,happy_var_2,happy_var_3,happy_var_4))+	) `HappyStk` happyRest}}}}++happyReduce_240 = happyReduce 4# 58# happyReduction_240+happyReduction_240 (happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOutTok happy_x_1 of { (TokKeyword KwRenaming happy_var_1) -> +	case happyOutTok happy_x_2 of { (TokSymbol SymOpenParen happy_var_2) -> +	case happyOut65 happy_x_3 of { happy_var_3 -> +	case happyOutTok happy_x_4 of { (TokSymbol SymCloseParen happy_var_4) -> +	happyIn64+		 ((happy_var_3 , getRange (happy_var_1,happy_var_2,happy_var_3,happy_var_4))+	) `HappyStk` happyRest}}}}++happyReduce_241 = happySpecReduce_3  59# happyReduction_241+happyReduction_241 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut66 happy_x_1 of { happy_var_1 -> +	case happyOut65 happy_x_3 of { happy_var_3 -> +	happyIn65+		 (happy_var_1 : happy_var_3+	)}}++happyReduce_242 = happySpecReduce_1  59# happyReduction_242+happyReduction_242 happy_x_1+	 =  case happyOut66 happy_x_1 of { happy_var_1 -> +	happyIn65+		 ([happy_var_1]+	)}++happyReduce_243 = happySpecReduce_3  60# happyReduction_243+happyReduction_243 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut67 happy_x_1 of { happy_var_1 -> +	case happyOutTok happy_x_2 of { (TokKeyword KwTo happy_var_2) -> +	case happyOut15 happy_x_3 of { happy_var_3 -> +	happyIn66+		 (Renaming happy_var_1 happy_var_3 (getRange happy_var_2)+	)}}}++happyReduce_244 = happySpecReduce_2  61# happyReduction_244+happyReduction_244 happy_x_2+	happy_x_1+	 =  case happyOut15 happy_x_2 of { happy_var_2 -> +	happyIn67+		 (ImportedName happy_var_2+	)}++happyReduce_245 = happySpecReduce_3  61# happyReduction_245+happyReduction_245 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut15 happy_x_3 of { happy_var_3 -> +	happyIn67+		 (ImportedModule happy_var_3+	)}++happyReduce_246 = happySpecReduce_1  62# happyReduction_246+happyReduction_246 happy_x_1+	 =  case happyOut15 happy_x_1 of { happy_var_1 -> +	happyIn68+		 (ImportedName happy_var_1+	)}++happyReduce_247 = happySpecReduce_2  62# happyReduction_247+happyReduction_247 happy_x_2+	happy_x_1+	 =  case happyOut15 happy_x_2 of { happy_var_2 -> +	happyIn68+		 (ImportedModule happy_var_2+	)}++happyReduce_248 = happySpecReduce_0  63# happyReduction_248+happyReduction_248  =  happyIn69+		 ([]+	)++happyReduce_249 = happySpecReduce_1  63# happyReduction_249+happyReduction_249 happy_x_1+	 =  case happyOut70 happy_x_1 of { happy_var_1 -> +	happyIn69+		 (happy_var_1+	)}++happyReduce_250 = happySpecReduce_1  64# happyReduction_250+happyReduction_250 happy_x_1+	 =  case happyOut68 happy_x_1 of { happy_var_1 -> +	happyIn70+		 ([happy_var_1]+	)}++happyReduce_251 = happySpecReduce_3  64# happyReduction_251+happyReduction_251 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut68 happy_x_1 of { happy_var_1 -> +	case happyOut70 happy_x_3 of { happy_var_3 -> +	happyIn70+		 (happy_var_1 : happy_var_3+	)}}++happyReduce_252 = happyMonadReduce 3# 65# happyReduction_252+happyReduction_252 (happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest) tk+	 = happyThen (case happyOut30 happy_x_1 of { happy_var_1 -> +	case happyOut74 happy_x_2 of { happy_var_2 -> +	case happyOut73 happy_x_3 of { happy_var_3 -> +	( exprToLHS happy_var_1 >>= \p -> return (p happy_var_2 happy_var_3))}}}+	) (\r -> happyReturn (happyIn71 r))++happyReduce_253 = happyReduce 4# 65# happyReduction_253+happyReduction_253 (happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOutTok happy_x_1 of { (TokSymbol SymEllipsis happy_var_1) -> +	case happyOut72 happy_x_2 of { happy_var_2 -> +	case happyOut74 happy_x_3 of { happy_var_3 -> +	case happyOut73 happy_x_4 of { happy_var_4 -> +	happyIn71+		 (Ellipsis (getRange (happy_var_1,happy_var_2,happy_var_3,happy_var_4)) happy_var_2 happy_var_3 happy_var_4+	) `HappyStk` happyRest}}}}++happyReduce_254 = happySpecReduce_0  66# happyReduction_254+happyReduction_254  =  happyIn72+		 ([]+	)++happyReduce_255 = happyMonadReduce 3# 66# happyReduction_255+happyReduction_255 (happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest) tk+	 = happyThen (case happyOut35 happy_x_2 of { happy_var_2 -> +	case happyOut72 happy_x_3 of { happy_var_3 -> +	( exprToPattern (RawApp (getRange happy_var_2) happy_var_2) >>= \p ->+		   return (p : happy_var_3))}}+	) (\r -> happyReturn (happyIn72 r))++happyReduce_256 = happySpecReduce_0  67# happyReduction_256+happyReduction_256  =  happyIn73+		 ([]+	)++happyReduce_257 = happySpecReduce_2  67# happyReduction_257+happyReduction_257 happy_x_2+	happy_x_1+	 =  case happyOut29 happy_x_2 of { happy_var_2 -> +	happyIn73+		 (case happy_var_2 of { WithApp _ e es -> e : es; e -> [e] }+	)}++happyReduce_258 = happySpecReduce_0  68# happyReduction_258+happyReduction_258  =  happyIn74+		 ([]+	)++happyReduce_259 = happySpecReduce_2  68# happyReduction_259+happyReduction_259 happy_x_2+	happy_x_1+	 =  case happyOut29 happy_x_2 of { happy_var_2 -> +	happyIn74+		 (case happy_var_2 of { WithApp _ e es -> e : es; e -> [e] }+	)}++happyReduce_260 = happySpecReduce_0  69# happyReduction_260+happyReduction_260  =  happyIn75+		 (NoWhere+	)++happyReduce_261 = happySpecReduce_2  69# happyReduction_261+happyReduction_261 happy_x_2+	happy_x_1+	 =  case happyOut133 happy_x_2 of { happy_var_2 -> +	happyIn75+		 (AnyWhere happy_var_2+	)}++happyReduce_262 = happyReduce 4# 69# happyReduction_262+happyReduction_262 (happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut15 happy_x_2 of { happy_var_2 -> +	case happyOut133 happy_x_4 of { happy_var_4 -> +	happyIn75+		 (SomeWhere happy_var_2 happy_var_4+	) `HappyStk` happyRest}}++happyReduce_263 = happySpecReduce_1  70# happyReduction_263+happyReduction_263 happy_x_1+	 =  case happyOut88 happy_x_1 of { happy_var_1 -> +	happyIn76+		 (happy_var_1+	)}++happyReduce_264 = happySpecReduce_1  70# happyReduction_264+happyReduction_264 happy_x_1+	 =  case happyOut80 happy_x_1 of { happy_var_1 -> +	happyIn76+		 (happy_var_1+	)}++happyReduce_265 = happySpecReduce_1  70# happyReduction_265+happyReduction_265 happy_x_1+	 =  case happyOut82 happy_x_1 of { happy_var_1 -> +	happyIn76+		 ([happy_var_1]+	)}++happyReduce_266 = happySpecReduce_1  70# happyReduction_266+happyReduction_266 happy_x_1+	 =  case happyOut83 happy_x_1 of { happy_var_1 -> +	happyIn76+		 ([happy_var_1]+	)}++happyReduce_267 = happySpecReduce_1  70# happyReduction_267+happyReduction_267 happy_x_1+	 =  case happyOut84 happy_x_1 of { happy_var_1 -> +	happyIn76+		 ([happy_var_1]+	)}++happyReduce_268 = happySpecReduce_1  70# happyReduction_268+happyReduction_268 happy_x_1+	 =  case happyOut85 happy_x_1 of { happy_var_1 -> +	happyIn76+		 ([happy_var_1]+	)}++happyReduce_269 = happySpecReduce_1  70# happyReduction_269+happyReduction_269 happy_x_1+	 =  case happyOut87 happy_x_1 of { happy_var_1 -> +	happyIn76+		 ([happy_var_1]+	)}++happyReduce_270 = happySpecReduce_1  70# happyReduction_270+happyReduction_270 happy_x_1+	 =  case happyOut89 happy_x_1 of { happy_var_1 -> +	happyIn76+		 ([happy_var_1]+	)}++happyReduce_271 = happySpecReduce_1  70# happyReduction_271+happyReduction_271 happy_x_1+	 =  case happyOut90 happy_x_1 of { happy_var_1 -> +	happyIn76+		 ([happy_var_1]+	)}++happyReduce_272 = happySpecReduce_1  70# happyReduction_272+happyReduction_272 happy_x_1+	 =  case happyOut91 happy_x_1 of { happy_var_1 -> +	happyIn76+		 ([happy_var_1]+	)}++happyReduce_273 = happySpecReduce_1  70# happyReduction_273+happyReduction_273 happy_x_1+	 =  case happyOut92 happy_x_1 of { happy_var_1 -> +	happyIn76+		 ([happy_var_1]+	)}++happyReduce_274 = happySpecReduce_1  70# happyReduction_274+happyReduction_274 happy_x_1+	 =  case happyOut93 happy_x_1 of { happy_var_1 -> +	happyIn76+		 ([happy_var_1]+	)}++happyReduce_275 = happySpecReduce_1  70# happyReduction_275+happyReduction_275 happy_x_1+	 =  case happyOut101 happy_x_1 of { happy_var_1 -> +	happyIn76+		 (happy_var_1+	)}++happyReduce_276 = happySpecReduce_1  70# happyReduction_276+happyReduction_276 happy_x_1+	 =  case happyOut104 happy_x_1 of { happy_var_1 -> +	happyIn76+		 ([happy_var_1]+	)}++happyReduce_277 = happySpecReduce_1  70# happyReduction_277+happyReduction_277 happy_x_1+	 =  case happyOut105 happy_x_1 of { happy_var_1 -> +	happyIn76+		 ([happy_var_1]+	)}++happyReduce_278 = happySpecReduce_1  70# happyReduction_278+happyReduction_278 happy_x_1+	 =  case happyOut109 happy_x_1 of { happy_var_1 -> +	happyIn76+		 ([happy_var_1]+	)}++happyReduce_279 = happySpecReduce_1  70# happyReduction_279+happyReduction_279 happy_x_1+	 =  case happyOut94 happy_x_1 of { happy_var_1 -> +	happyIn76+		 ([happy_var_1]+	)}++happyReduce_280 = happySpecReduce_1  70# happyReduction_280+happyReduction_280 happy_x_1+	 =  case happyOut95 happy_x_1 of { happy_var_1 -> +	happyIn76+		 ([happy_var_1]+	)}++happyReduce_281 = happySpecReduce_3  71# happyReduction_281+happyReduction_281 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut16 happy_x_1 of { happy_var_1 -> +	case happyOut29 happy_x_3 of { happy_var_3 -> +	happyIn77+		 (map (flip (TypeSig Relevant) happy_var_3) happy_var_1+	)}}++happyReduce_282 = happySpecReduce_3  72# happyReduction_282+happyReduction_282 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut19 happy_x_1 of { happy_var_1 -> +	case happyOut29 happy_x_3 of { happy_var_3 -> +	happyIn78+		 (map (\ (Arg _ rel x) -> TypeSig rel x happy_var_3) happy_var_1+	)}}++happyReduce_283 = happySpecReduce_3  73# happyReduction_283+happyReduction_283 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut20 happy_x_1 of { happy_var_1 -> +	case happyOut29 happy_x_3 of { happy_var_3 -> +	happyIn79+		 (map (fmap (flip (TypeSig Relevant) happy_var_3)) happy_var_1+	)}}++happyReduce_284 = happyMonadReduce 3# 74# happyReduction_284+happyReduction_284 (happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest) tk+	 = happyThen (case happyOut71 happy_x_1 of { happy_var_1 -> +	case happyOut81 happy_x_2 of { happy_var_2 -> +	case happyOut75 happy_x_3 of { happy_var_3 -> +	( funClauseOrTypeSigs happy_var_1 happy_var_2 happy_var_3)}}}+	) (\r -> happyReturn (happyIn80 r))++happyReduce_285 = happySpecReduce_2  75# happyReduction_285+happyReduction_285 happy_x_2+	happy_x_1+	 =  case happyOut29 happy_x_2 of { happy_var_2 -> +	happyIn81+		 (JustRHS (RHS happy_var_2)+	)}++happyReduce_286 = happySpecReduce_2  75# happyReduction_286+happyReduction_286 happy_x_2+	happy_x_1+	 =  case happyOut29 happy_x_2 of { happy_var_2 -> +	happyIn81+		 (TypeSigsRHS happy_var_2+	)}++happyReduce_287 = happySpecReduce_0  75# happyReduction_287+happyReduction_287  =  happyIn81+		 (JustRHS AbsurdRHS+	)++happyReduce_288 = happyReduce 7# 76# happyReduction_288+happyReduction_288 (happy_x_7 `HappyStk`+	happy_x_6 `HappyStk`+	happy_x_5 `HappyStk`+	happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOutTok happy_x_1 of { (TokKeyword KwData happy_var_1) -> +	case happyOut15 happy_x_2 of { happy_var_2 -> +	case happyOut57 happy_x_3 of { happy_var_3 -> +	case happyOutTok happy_x_4 of { (TokSymbol SymColon happy_var_4) -> +	case happyOut29 happy_x_5 of { happy_var_5 -> +	case happyOutTok happy_x_6 of { (TokKeyword KwWhere happy_var_6) -> +	case happyOut130 happy_x_7 of { happy_var_7 -> +	happyIn82+		 (Data (getRange (happy_var_1,happy_var_2,happy_var_3,happy_var_4,happy_var_5,happy_var_6,happy_var_7)) Inductive happy_var_2 happy_var_3 (Just happy_var_5) happy_var_7+	) `HappyStk` happyRest}}}}}}}++happyReduce_289 = happyReduce 7# 76# happyReduction_289+happyReduction_289 (happy_x_7 `HappyStk`+	happy_x_6 `HappyStk`+	happy_x_5 `HappyStk`+	happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOutTok happy_x_1 of { (TokKeyword KwCoData happy_var_1) -> +	case happyOut15 happy_x_2 of { happy_var_2 -> +	case happyOut57 happy_x_3 of { happy_var_3 -> +	case happyOutTok happy_x_4 of { (TokSymbol SymColon happy_var_4) -> +	case happyOut29 happy_x_5 of { happy_var_5 -> +	case happyOutTok happy_x_6 of { (TokKeyword KwWhere happy_var_6) -> +	case happyOut130 happy_x_7 of { happy_var_7 -> +	happyIn82+		 (Data (getRange (happy_var_1,happy_var_2,happy_var_3,happy_var_4,happy_var_5,happy_var_6,happy_var_7)) CoInductive happy_var_2 happy_var_3 (Just happy_var_5) happy_var_7+	) `HappyStk` happyRest}}}}}}}++happyReduce_290 = happyReduce 5# 76# happyReduction_290+happyReduction_290 (happy_x_5 `HappyStk`+	happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOutTok happy_x_1 of { (TokKeyword KwData happy_var_1) -> +	case happyOut15 happy_x_2 of { happy_var_2 -> +	case happyOut57 happy_x_3 of { happy_var_3 -> +	case happyOutTok happy_x_4 of { (TokKeyword KwWhere happy_var_4) -> +	case happyOut130 happy_x_5 of { happy_var_5 -> +	happyIn82+		 (Data (getRange (happy_var_1,happy_var_2,happy_var_3,happy_var_4,happy_var_5)) Inductive happy_var_2 happy_var_3 Nothing happy_var_5+	) `HappyStk` happyRest}}}}}++happyReduce_291 = happyReduce 5# 76# happyReduction_291+happyReduction_291 (happy_x_5 `HappyStk`+	happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOutTok happy_x_1 of { (TokKeyword KwCoData happy_var_1) -> +	case happyOut15 happy_x_2 of { happy_var_2 -> +	case happyOut57 happy_x_3 of { happy_var_3 -> +	case happyOutTok happy_x_4 of { (TokKeyword KwWhere happy_var_4) -> +	case happyOut130 happy_x_5 of { happy_var_5 -> +	happyIn82+		 (Data (getRange (happy_var_1,happy_var_2,happy_var_3,happy_var_4,happy_var_5)) CoInductive happy_var_2 happy_var_3 Nothing happy_var_5+	) `HappyStk` happyRest}}}}}++happyReduce_292 = happyReduce 5# 77# happyReduction_292+happyReduction_292 (happy_x_5 `HappyStk`+	happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOutTok happy_x_1 of { (TokKeyword KwData happy_var_1) -> +	case happyOut15 happy_x_2 of { happy_var_2 -> +	case happyOut57 happy_x_3 of { happy_var_3 -> +	case happyOutTok happy_x_4 of { (TokSymbol SymColon happy_var_4) -> +	case happyOut29 happy_x_5 of { happy_var_5 -> +	happyIn83+		 (DataSig (getRange (happy_var_1,happy_var_2,happy_var_3,happy_var_4,happy_var_5)) Inductive happy_var_2 happy_var_3 happy_var_5+	) `HappyStk` happyRest}}}}}++happyReduce_293 = happyMonadReduce 7# 78# happyReduction_293+happyReduction_293 (happy_x_7 `HappyStk`+	happy_x_6 `HappyStk`+	happy_x_5 `HappyStk`+	happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest) tk+	 = happyThen (case happyOutTok happy_x_1 of { (TokKeyword KwRecord happy_var_1) -> +	case happyOut37 happy_x_2 of { happy_var_2 -> +	case happyOut57 happy_x_3 of { happy_var_3 -> +	case happyOutTok happy_x_4 of { (TokSymbol SymColon happy_var_4) -> +	case happyOut29 happy_x_5 of { happy_var_5 -> +	case happyOutTok happy_x_6 of { (TokKeyword KwWhere happy_var_6) -> +	case happyOut131 happy_x_7 of { happy_var_7 -> +	( exprToName happy_var_2 >>= \ n -> return $ Record (getRange (happy_var_1,happy_var_2,happy_var_3,happy_var_4,happy_var_5,happy_var_6,happy_var_7)) n (fst3 happy_var_7) (snd3 happy_var_7) happy_var_3 (Just happy_var_5) (thd3 happy_var_7))}}}}}}}+	) (\r -> happyReturn (happyIn84 r))++happyReduce_294 = happyMonadReduce 5# 78# happyReduction_294+happyReduction_294 (happy_x_5 `HappyStk`+	happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest) tk+	 = happyThen (case happyOutTok happy_x_1 of { (TokKeyword KwRecord happy_var_1) -> +	case happyOut37 happy_x_2 of { happy_var_2 -> +	case happyOut57 happy_x_3 of { happy_var_3 -> +	case happyOutTok happy_x_4 of { (TokKeyword KwWhere happy_var_4) -> +	case happyOut131 happy_x_5 of { happy_var_5 -> +	( exprToName happy_var_2 >>= \ n -> return $ Record (getRange (happy_var_1,happy_var_2,happy_var_3,happy_var_4,happy_var_5)) n (fst3 happy_var_5) (snd3 happy_var_5) happy_var_3 Nothing (thd3 happy_var_5))}}}}}+	) (\r -> happyReturn (happyIn84 r))++happyReduce_295 = happyMonadReduce 5# 79# happyReduction_295+happyReduction_295 (happy_x_5 `HappyStk`+	happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest) tk+	 = happyThen (case happyOutTok happy_x_1 of { (TokKeyword KwRecord happy_var_1) -> +	case happyOut37 happy_x_2 of { happy_var_2 -> +	case happyOut57 happy_x_3 of { happy_var_3 -> +	case happyOutTok happy_x_4 of { (TokSymbol SymColon happy_var_4) -> +	case happyOut29 happy_x_5 of { happy_var_5 -> +	( exprToName happy_var_2 >>= \ n -> return $ RecordSig (getRange (happy_var_1,happy_var_2,happy_var_3,happy_var_4,happy_var_5)) n happy_var_3 happy_var_5)}}}}}+	) (\r -> happyReturn (happyIn85 r))++happyReduce_296 = happySpecReduce_2  80# happyReduction_296+happyReduction_296 happy_x_2+	happy_x_1+	 =  case happyOut15 happy_x_2 of { happy_var_2 -> +	happyIn86+		 (happy_var_2+	)}++happyReduce_297 = happySpecReduce_3  81# happyReduction_297+happyReduction_297 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwInfix happy_var_1) -> +	case happyOut14 happy_x_2 of { happy_var_2 -> +	case happyOut24 happy_x_3 of { happy_var_3 -> +	happyIn87+		 (Infix (NonAssoc (getRange (happy_var_1,happy_var_3)) happy_var_2) happy_var_3+	)}}}++happyReduce_298 = happySpecReduce_3  81# happyReduction_298+happyReduction_298 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwInfixL happy_var_1) -> +	case happyOut14 happy_x_2 of { happy_var_2 -> +	case happyOut24 happy_x_3 of { happy_var_3 -> +	happyIn87+		 (Infix (LeftAssoc (getRange (happy_var_1,happy_var_3)) happy_var_2) happy_var_3+	)}}}++happyReduce_299 = happySpecReduce_3  81# happyReduction_299+happyReduction_299 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwInfixR happy_var_1) -> +	case happyOut14 happy_x_2 of { happy_var_2 -> +	case happyOut24 happy_x_3 of { happy_var_3 -> +	happyIn87+		 (Infix (RightAssoc (getRange (happy_var_1,happy_var_3)) happy_var_2) happy_var_3+	)}}}++happyReduce_300 = happySpecReduce_2  82# happyReduction_300+happyReduction_300 happy_x_2+	happy_x_1+	 =  case happyOut128 happy_x_2 of { happy_var_2 -> +	happyIn88+		 (let toField (Arg h rel (TypeSig _ x t)) = Field x (Arg h rel t) in map toField happy_var_2+	)}++happyReduce_301 = happySpecReduce_2  83# happyReduction_301+happyReduction_301 happy_x_2+	happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwMutual happy_var_1) -> +	case happyOut133 happy_x_2 of { happy_var_2 -> +	happyIn89+		 (Mutual (fuseRange happy_var_1 happy_var_2) happy_var_2+	)}}++happyReduce_302 = happySpecReduce_2  84# happyReduction_302+happyReduction_302 happy_x_2+	happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwAbstract happy_var_1) -> +	case happyOut133 happy_x_2 of { happy_var_2 -> +	happyIn90+		 (Abstract (fuseRange happy_var_1 happy_var_2) happy_var_2+	)}}++happyReduce_303 = happySpecReduce_2  85# happyReduction_303+happyReduction_303 happy_x_2+	happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwPrivate happy_var_1) -> +	case happyOut133 happy_x_2 of { happy_var_2 -> +	happyIn91+		 (Private (fuseRange happy_var_1 happy_var_2) happy_var_2+	)}}++happyReduce_304 = happySpecReduce_2  86# happyReduction_304+happyReduction_304 happy_x_2+	happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwPostulate happy_var_1) -> +	case happyOut126 happy_x_2 of { happy_var_2 -> +	happyIn92+		 (Postulate (fuseRange happy_var_1 happy_var_2) happy_var_2+	)}}++happyReduce_305 = happySpecReduce_2  87# happyReduction_305+happyReduction_305 happy_x_2+	happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwPrimitive happy_var_1) -> +	case happyOut124 happy_x_2 of { happy_var_2 -> +	happyIn93+		 (Primitive (fuseRange happy_var_1 happy_var_2) happy_var_2+	)}}++happyReduce_306 = happyMonadReduce 5# 88# happyReduction_306+happyReduction_306 (happy_x_5 `HappyStk`+	happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest) tk+	 = happyThen (case happyOut15 happy_x_2 of { happy_var_2 -> +	case happyOut97 happy_x_3 of { happy_var_3 -> +	case happyOut96 happy_x_5 of { happy_var_5 -> +	(+  case happy_var_2 of+    Name _ [_] -> case mkNotation happy_var_3 happy_var_5 of+      Left err -> parseError $ "malformed syntax declaration: " ++ err+      Right n -> return $ Syntax happy_var_2 n+    _ -> parseError "syntax declarations are allowed only for simple names (without holes)")}}}+	) (\r -> happyReturn (happyIn94 r))++happyReduce_307 = happyMonadReduce 4# 89# happyReduction_307+happyReduction_307 (happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest) tk+	 = happyThen (case happyOutTok happy_x_1 of { (TokKeyword KwPatternSyn happy_var_1) -> +	case happyOut16 happy_x_2 of { happy_var_2 -> +	case happyOutTok happy_x_3 of { (TokSymbol SymEqual happy_var_3) -> +	case happyOut29 happy_x_4 of { happy_var_4 -> +	( do+  p <- exprToPattern happy_var_4+  return (PatternSyn (getRange (happy_var_1,happy_var_2,happy_var_3,happy_var_4)) (head happy_var_2) (tail happy_var_2) p))}}}}+	) (\r -> happyReturn (happyIn95 r))++happyReduce_308 = happySpecReduce_1  90# happyReduction_308+happyReduction_308 happy_x_1+	 =  case happyOut99 happy_x_1 of { happy_var_1 -> +	happyIn96+		 ([happy_var_1]+	)}++happyReduce_309 = happySpecReduce_2  90# happyReduction_309+happyReduction_309 happy_x_2+	happy_x_1+	 =  case happyOut96 happy_x_1 of { happy_var_1 -> +	case happyOut99 happy_x_2 of { happy_var_2 -> +	happyIn96+		 (happy_var_1 ++ [happy_var_2]+	)}}++happyReduce_310 = happySpecReduce_1  91# happyReduction_310+happyReduction_310 happy_x_1+	 =  case happyOut98 happy_x_1 of { happy_var_1 -> +	happyIn97+		 ([happy_var_1]+	)}++happyReduce_311 = happySpecReduce_2  91# happyReduction_311+happyReduction_311 happy_x_2+	happy_x_1+	 =  case happyOut97 happy_x_1 of { happy_var_1 -> +	case happyOut98 happy_x_2 of { happy_var_2 -> +	happyIn97+		 (happy_var_1 ++ [happy_var_2]+	)}}++happyReduce_312 = happySpecReduce_1  92# happyReduction_312+happyReduction_312 happy_x_1+	 =  case happyOut99 happy_x_1 of { happy_var_1 -> +	happyIn98+		 (ExprHole happy_var_1+	)}++happyReduce_313 = happyReduce 6# 92# happyReduction_313+happyReduction_313 (happy_x_6 `HappyStk`+	happy_x_5 `HappyStk`+	happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut99 happy_x_3 of { happy_var_3 -> +	case happyOut99 happy_x_5 of { happy_var_5 -> +	happyIn98+		 (LambdaHole happy_var_3 happy_var_5+	) `HappyStk` happyRest}}++happyReduce_314 = happySpecReduce_1  93# happyReduction_314+happyReduction_314 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokId happy_var_1) -> +	happyIn99+		 (snd happy_var_1+	)}++happyReduce_315 = happySpecReduce_1  94# happyReduction_315+happyReduction_315 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwOpen happy_var_1) -> +	happyIn100+		 (Just (getRange happy_var_1)+	)}++happyReduce_316 = happySpecReduce_0  94# happyReduction_316+happyReduction_316  =  happyIn100+		 (Nothing+	)++happyReduce_317 = happyMonadReduce 5# 95# happyReduction_317+happyReduction_317 (happy_x_5 `HappyStk`+	happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest) tk+	 = happyThen (case happyOut100 happy_x_1 of { happy_var_1 -> +	case happyOutTok happy_x_2 of { (TokKeyword KwImport happy_var_2) -> +	case happyOut22 happy_x_3 of { happy_var_3 -> +	case happyOut102 happy_x_4 of { happy_var_4 -> +	case happyOut60 happy_x_5 of { happy_var_5 -> +	(+    let+    { doOpen = maybe DontOpen (const DoOpen) happy_var_1+    ; m   = happy_var_3+    ; es  = happy_var_4+    ; dir = happy_var_5+    ; r   = getRange (m, es, dir)+    ; mr  = getRange m+    ; unique = hash $ show $ fmap (const (Nothing :: Maybe ())) r+         -- turn range into unique id, but delete file path+         -- which is absolute and messes up suite of failing tests+         -- (different hashs on different installations)+         -- TODO: Don't use (insecure) hashes in this way.+    ; fresh = Name mr [ Id $ ".#" ++ show m ++ "-" ++ show unique ]+    ; impStm asR = Import mr m (Just (AsName fresh asR)) DontOpen defaultImportDir+    ; appStm m' es =+        let r = getRange (m, es) in+        Private r+          [ ModuleMacro r m'+             (SectionApp (getRange es) []+               (RawApp (getRange es) (Ident (QName fresh) : es)))+             doOpen dir+          ]+    ; (initArgs, last2Args) = splitAt (length es - 2) es+    ; parseAsClause = case last2Args of+      { [ Ident (QName (Name asR [Id x]))+        , Ident (QName m')+        ] | x == "as" -> Just (asR, m')+      ; _ -> Nothing+      }+    } in+    case es of+      { [] -> return [Import mr m Nothing doOpen dir]+      ; _ | Just (asR, m') <- parseAsClause ->+              if null initArgs then return+                 [ Import (getRange (m, asR, m', dir)) m+                     (Just (AsName m' asR)) doOpen dir+                 ]+              else return [ impStm asR, appStm m' initArgs ]+          | DontOpen <- doOpen -> parseErrorAt (fromJust $ rStart $ getRange happy_var_2) "An import statement with module instantiation does not actually import the module.  This statement achieves nothing.  Either add the `open' keyword or bind the instantiated module with an `as' clause."+          | otherwise -> return+              [ impStm noRange+              , appStm (noName $ beginningOf $ getRange m) es+              ]+      })}}}}}+	) (\r -> happyReturn (happyIn101 r))++happyReduce_318 = happyReduce 4# 95# happyReduction_318+happyReduction_318 (happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut22 happy_x_2 of { happy_var_2 -> +	case happyOut102 happy_x_3 of { happy_var_3 -> +	case happyOut60 happy_x_4 of { happy_var_4 -> +	happyIn101+		 (let+    { m   = happy_var_2+    ; es  = happy_var_3+    ; dir = happy_var_4+    ; r   = getRange (m, es, dir)+    } in+    [ case es of+      { []  -> Open r m dir+      ; _   -> Private r [ ModuleMacro r (noName $ beginningOf $ getRange m)+			     (SectionApp (getRange (m , es)) [] (RawApp (fuseRange m es) (Ident m : es)))+			     DoOpen dir+                         ]+      }+    ]+	) `HappyStk` happyRest}}}++happyReduce_319 = happyReduce 6# 95# happyReduction_319+happyReduction_319 (happy_x_6 `HappyStk`+	happy_x_5 `HappyStk`+	happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut22 happy_x_2 of { happy_var_2 -> +	case happyOut60 happy_x_6 of { happy_var_6 -> +	happyIn101+		 (let r = getRange happy_var_2 in+    [ Private r [ ModuleMacro r (noName $ beginningOf $ getRange happy_var_2)+    	      	(RecordModuleIFS r happy_var_2) DoOpen happy_var_6+                ]+    ]+	) `HappyStk` happyRest}}++happyReduce_320 = happySpecReduce_0  96# happyReduction_320+happyReduction_320  =  happyIn102+		 ([]+	)++happyReduce_321 = happySpecReduce_2  96# happyReduction_321+happyReduction_321 happy_x_2+	happy_x_1+	 =  case happyOut38 happy_x_1 of { happy_var_1 -> +	case happyOut102 happy_x_2 of { happy_var_2 -> +	happyIn102+		 (happy_var_1 : happy_var_2+	)}}++happyReduce_322 = happyReduce 4# 97# happyReduction_322+happyReduction_322 (happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut22 happy_x_1 of { happy_var_1 -> +	case happyOutTok happy_x_2 of { (TokSymbol SymDoubleOpenBrace happy_var_2) -> +	case happyOutTok happy_x_3 of { (TokSymbol SymEllipsis happy_var_3) -> +	case happyOut17 happy_x_4 of { happy_var_4 -> +	happyIn103+		 ((\ts ->+		    if null ts then return $ RecordModuleIFS (getRange (happy_var_1,happy_var_2,happy_var_3,happy_var_4)) happy_var_1+		    else parseError "No bindings allowed for record module with non-canonical implicits" )+	) `HappyStk` happyRest}}}}++happyReduce_323 = happySpecReduce_2  97# happyReduction_323+happyReduction_323 happy_x_2+	happy_x_1+	 =  case happyOut22 happy_x_1 of { happy_var_1 -> +	case happyOut102 happy_x_2 of { happy_var_2 -> +	happyIn103+		 ((\ts -> return $ SectionApp (getRange (happy_var_1, happy_var_2)) ts (RawApp (fuseRange happy_var_1 happy_var_2) (Ident happy_var_1 : happy_var_2)) )+	)}}++happyReduce_324 = happyMonadReduce 6# 98# happyReduction_324+happyReduction_324 (happy_x_6 `HappyStk`+	happy_x_5 `HappyStk`+	happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest) tk+	 = happyThen (case happyOutTok happy_x_1 of { (TokKeyword KwModule happy_var_1) -> +	case happyOut15 happy_x_2 of { happy_var_2 -> +	case happyOut57 happy_x_3 of { happy_var_3 -> +	case happyOut103 happy_x_5 of { happy_var_5 -> +	case happyOut60 happy_x_6 of { happy_var_6 -> +	( do {ma <- happy_var_5 (map addType happy_var_3); return $ ModuleMacro (getRange (happy_var_1, happy_var_2, ma, happy_var_6)) happy_var_2 ma DontOpen happy_var_6 })}}}}}+	) (\r -> happyReturn (happyIn104 r))++happyReduce_325 = happyMonadReduce 7# 98# happyReduction_325+happyReduction_325 (happy_x_7 `HappyStk`+	happy_x_6 `HappyStk`+	happy_x_5 `HappyStk`+	happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest) tk+	 = happyThen (case happyOutTok happy_x_1 of { (TokKeyword KwOpen happy_var_1) -> +	case happyOutTok happy_x_2 of { (TokKeyword KwModule happy_var_2) -> +	case happyOut15 happy_x_3 of { happy_var_3 -> +	case happyOut57 happy_x_4 of { happy_var_4 -> +	case happyOut103 happy_x_6 of { happy_var_6 -> +	case happyOut60 happy_x_7 of { happy_var_7 -> +	( do {ma <- happy_var_6 (map addType happy_var_4); return $ ModuleMacro (getRange (happy_var_1, happy_var_2, happy_var_3, ma, happy_var_7)) happy_var_3 ma DoOpen happy_var_7 })}}}}}}+	) (\r -> happyReturn (happyIn104 r))++happyReduce_326 = happyReduce 5# 99# happyReduction_326+happyReduction_326 (happy_x_5 `HappyStk`+	happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOutTok happy_x_1 of { (TokKeyword KwModule happy_var_1) -> +	case happyOut15 happy_x_2 of { happy_var_2 -> +	case happyOut57 happy_x_3 of { happy_var_3 -> +	case happyOutTok happy_x_4 of { (TokKeyword KwWhere happy_var_4) -> +	case happyOut134 happy_x_5 of { happy_var_5 -> +	happyIn105+		 (Module (getRange (happy_var_1,happy_var_2,happy_var_3,happy_var_4,happy_var_5)) (QName happy_var_2) (map addType happy_var_3) happy_var_5+	) `HappyStk` happyRest}}}}}++happyReduce_327 = happyReduce 5# 99# happyReduction_327+happyReduction_327 (happy_x_5 `HappyStk`+	happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOutTok happy_x_1 of { (TokKeyword KwModule happy_var_1) -> +	case happyOut106 happy_x_2 of { happy_var_2 -> +	case happyOut57 happy_x_3 of { happy_var_3 -> +	case happyOutTok happy_x_4 of { (TokKeyword KwWhere happy_var_4) -> +	case happyOut134 happy_x_5 of { happy_var_5 -> +	happyIn105+		 (Module (getRange (happy_var_1,happy_var_2,happy_var_3,happy_var_4,happy_var_5)) (QName happy_var_2) (map addType happy_var_3) happy_var_5+	) `HappyStk` happyRest}}}}}++happyReduce_328 = happySpecReduce_1  100# happyReduction_328+happyReduction_328 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymUnderscore happy_var_1) -> +	happyIn106+		 (noName (getRange happy_var_1)+	)}++happyReduce_329 = happySpecReduce_1  101# happyReduction_329+happyReduction_329 happy_x_1+	 =  case happyOut108 happy_x_1 of { happy_var_1 -> +	happyIn107+		 ([happy_var_1]+	)}++happyReduce_330 = happySpecReduce_2  101# happyReduction_330+happyReduction_330 happy_x_2+	happy_x_1+	 =  case happyOut101 happy_x_1 of { happy_var_1 -> +	case happyOut107 happy_x_2 of { happy_var_2 -> +	happyIn107+		 (happy_var_1 ++ happy_var_2+	)}}++happyReduce_331 = happyReduce 5# 102# happyReduction_331+happyReduction_331 (happy_x_5 `HappyStk`+	happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOutTok happy_x_1 of { (TokKeyword KwModule happy_var_1) -> +	case happyOut22 happy_x_2 of { happy_var_2 -> +	case happyOut57 happy_x_3 of { happy_var_3 -> +	case happyOutTok happy_x_4 of { (TokKeyword KwWhere happy_var_4) -> +	case happyOut134 happy_x_5 of { happy_var_5 -> +	happyIn108+		 (Module (getRange (happy_var_1,happy_var_2,happy_var_3,happy_var_4,happy_var_5)) happy_var_2 (map addType happy_var_3) happy_var_5+	) `HappyStk` happyRest}}}}}++happyReduce_332 = happySpecReduce_1  103# happyReduction_332+happyReduction_332 happy_x_1+	 =  case happyOut111 happy_x_1 of { happy_var_1 -> +	happyIn109+		 (Pragma happy_var_1+	)}++happyReduce_333 = happySpecReduce_1  104# happyReduction_333+happyReduction_333 happy_x_1+	 =  case happyOut112 happy_x_1 of { happy_var_1 -> +	happyIn110+		 (happy_var_1+	)}++happyReduce_334 = happySpecReduce_1  105# happyReduction_334+happyReduction_334 happy_x_1+	 =  case happyOut113 happy_x_1 of { happy_var_1 -> +	happyIn111+		 (happy_var_1+	)}++happyReduce_335 = happySpecReduce_1  105# happyReduction_335+happyReduction_335 happy_x_1+	 =  case happyOut114 happy_x_1 of { happy_var_1 -> +	happyIn111+		 (happy_var_1+	)}++happyReduce_336 = happySpecReduce_1  105# happyReduction_336+happyReduction_336 happy_x_1+	 =  case happyOut116 happy_x_1 of { happy_var_1 -> +	happyIn111+		 (happy_var_1+	)}++happyReduce_337 = happySpecReduce_1  105# happyReduction_337+happyReduction_337 happy_x_1+	 =  case happyOut115 happy_x_1 of { happy_var_1 -> +	happyIn111+		 (happy_var_1+	)}++happyReduce_338 = happySpecReduce_1  105# happyReduction_338+happyReduction_338 happy_x_1+	 =  case happyOut117 happy_x_1 of { happy_var_1 -> +	happyIn111+		 (happy_var_1+	)}++happyReduce_339 = happySpecReduce_1  105# happyReduction_339+happyReduction_339 happy_x_1+	 =  case happyOut118 happy_x_1 of { happy_var_1 -> +	happyIn111+		 (happy_var_1+	)}++happyReduce_340 = happySpecReduce_1  105# happyReduction_340+happyReduction_340 happy_x_1+	 =  case happyOut119 happy_x_1 of { happy_var_1 -> +	happyIn111+		 (happy_var_1+	)}++happyReduce_341 = happySpecReduce_1  105# happyReduction_341+happyReduction_341 happy_x_1+	 =  case happyOut122 happy_x_1 of { happy_var_1 -> +	happyIn111+		 (happy_var_1+	)}++happyReduce_342 = happySpecReduce_1  105# happyReduction_342+happyReduction_342 happy_x_1+	 =  case happyOut123 happy_x_1 of { happy_var_1 -> +	happyIn111+		 (happy_var_1+	)}++happyReduce_343 = happySpecReduce_1  105# happyReduction_343+happyReduction_343 happy_x_1+	 =  case happyOut120 happy_x_1 of { happy_var_1 -> +	happyIn111+		 (happy_var_1+	)}++happyReduce_344 = happySpecReduce_1  105# happyReduction_344+happyReduction_344 happy_x_1+	 =  case happyOut121 happy_x_1 of { happy_var_1 -> +	happyIn111+		 (happy_var_1+	)}++happyReduce_345 = happyReduce 4# 106# happyReduction_345+happyReduction_345 (happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOutTok happy_x_1 of { (TokSymbol SymOpenPragma happy_var_1) -> +	case happyOutTok happy_x_2 of { (TokKeyword KwOPTIONS happy_var_2) -> +	case happyOut27 happy_x_3 of { happy_var_3 -> +	case happyOutTok happy_x_4 of { (TokSymbol SymClosePragma happy_var_4) -> +	happyIn112+		 (OptionsPragma (getRange (happy_var_1,happy_var_2,happy_var_4)) happy_var_3+	) `HappyStk` happyRest}}}}++happyReduce_346 = happyReduce 5# 107# happyReduction_346+happyReduction_346 (happy_x_5 `HappyStk`+	happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOutTok happy_x_1 of { (TokSymbol SymOpenPragma happy_var_1) -> +	case happyOutTok happy_x_2 of { (TokKeyword KwBUILTIN happy_var_2) -> +	case happyOutTok happy_x_3 of { (TokString happy_var_3) -> +	case happyOut28 happy_x_4 of { happy_var_4 -> +	case happyOutTok happy_x_5 of { (TokSymbol SymClosePragma happy_var_5) -> +	happyIn113+		 (BuiltinPragma (getRange (happy_var_1,happy_var_2,fst happy_var_3,happy_var_4,happy_var_5)) (snd happy_var_3) (Ident happy_var_4)+	) `HappyStk` happyRest}}}}}++happyReduce_347 = happyReduce 5# 108# happyReduction_347+happyReduction_347 (happy_x_5 `HappyStk`+	happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOutTok happy_x_1 of { (TokSymbol SymOpenPragma happy_var_1) -> +	case happyOutTok happy_x_2 of { (TokKeyword KwCOMPILED happy_var_2) -> +	case happyOut28 happy_x_3 of { happy_var_3 -> +	case happyOut27 happy_x_4 of { happy_var_4 -> +	case happyOutTok happy_x_5 of { (TokSymbol SymClosePragma happy_var_5) -> +	happyIn114+		 (CompiledPragma (getRange (happy_var_1,happy_var_2,happy_var_3,happy_var_5)) happy_var_3 (unwords happy_var_4)+	) `HappyStk` happyRest}}}}}++happyReduce_348 = happyReduce 5# 109# happyReduction_348+happyReduction_348 (happy_x_5 `HappyStk`+	happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOutTok happy_x_1 of { (TokSymbol SymOpenPragma happy_var_1) -> +	case happyOutTok happy_x_2 of { (TokKeyword KwCOMPILED_TYPE happy_var_2) -> +	case happyOut28 happy_x_3 of { happy_var_3 -> +	case happyOut27 happy_x_4 of { happy_var_4 -> +	case happyOutTok happy_x_5 of { (TokSymbol SymClosePragma happy_var_5) -> +	happyIn115+		 (CompiledTypePragma (getRange (happy_var_1,happy_var_2,happy_var_3,happy_var_5)) happy_var_3 (unwords happy_var_4)+	) `HappyStk` happyRest}}}}}++happyReduce_349 = happyReduce 6# 110# happyReduction_349+happyReduction_349 (happy_x_6 `HappyStk`+	happy_x_5 `HappyStk`+	happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOutTok happy_x_1 of { (TokSymbol SymOpenPragma happy_var_1) -> +	case happyOutTok happy_x_2 of { (TokKeyword KwCOMPILED_DATA happy_var_2) -> +	case happyOut28 happy_x_3 of { happy_var_3 -> +	case happyOutTok happy_x_4 of { (TokString happy_var_4) -> +	case happyOut27 happy_x_5 of { happy_var_5 -> +	case happyOutTok happy_x_6 of { (TokSymbol SymClosePragma happy_var_6) -> +	happyIn116+		 (CompiledDataPragma (getRange (happy_var_1,happy_var_2,happy_var_3,fst happy_var_4,happy_var_6)) happy_var_3 (snd happy_var_4) happy_var_5+	) `HappyStk` happyRest}}}}}}++happyReduce_350 = happyReduce 5# 111# happyReduction_350+happyReduction_350 (happy_x_5 `HappyStk`+	happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOutTok happy_x_1 of { (TokSymbol SymOpenPragma happy_var_1) -> +	case happyOutTok happy_x_2 of { (TokKeyword KwCOMPILED_EPIC happy_var_2) -> +	case happyOut28 happy_x_3 of { happy_var_3 -> +	case happyOut27 happy_x_4 of { happy_var_4 -> +	case happyOutTok happy_x_5 of { (TokSymbol SymClosePragma happy_var_5) -> +	happyIn117+		 (CompiledEpicPragma (getRange (happy_var_1,happy_var_2,happy_var_3,happy_var_5)) happy_var_3 (unwords happy_var_4)+	) `HappyStk` happyRest}}}}}++happyReduce_351 = happyReduce 5# 112# happyReduction_351+happyReduction_351 (happy_x_5 `HappyStk`+	happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOutTok happy_x_1 of { (TokSymbol SymOpenPragma happy_var_1) -> +	case happyOutTok happy_x_2 of { (TokKeyword KwCOMPILED_JS happy_var_2) -> +	case happyOut28 happy_x_3 of { happy_var_3 -> +	case happyOut27 happy_x_4 of { happy_var_4 -> +	case happyOutTok happy_x_5 of { (TokSymbol SymClosePragma happy_var_5) -> +	happyIn118+		 (CompiledJSPragma (getRange (happy_var_1,happy_var_2,happy_var_3,happy_var_5)) happy_var_3 (unwords happy_var_4)+	) `HappyStk` happyRest}}}}}++happyReduce_352 = happyReduce 4# 113# happyReduction_352+happyReduction_352 (happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOutTok happy_x_1 of { (TokSymbol SymOpenPragma happy_var_1) -> +	case happyOutTok happy_x_2 of { (TokKeyword KwSTATIC happy_var_2) -> +	case happyOut28 happy_x_3 of { happy_var_3 -> +	case happyOutTok happy_x_4 of { (TokSymbol SymClosePragma happy_var_4) -> +	happyIn119+		 (StaticPragma (getRange (happy_var_1,happy_var_2,happy_var_3,happy_var_4)) happy_var_3+	) `HappyStk` happyRest}}}}++happyReduce_353 = happyReduce 4# 114# happyReduction_353+happyReduction_353 (happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOutTok happy_x_1 of { (TokSymbol SymOpenPragma happy_var_1) -> +	case happyOutTok happy_x_2 of { (TokKeyword KwETA happy_var_2) -> +	case happyOut28 happy_x_3 of { happy_var_3 -> +	case happyOutTok happy_x_4 of { (TokSymbol SymClosePragma happy_var_4) -> +	happyIn120+		 (EtaPragma (getRange (happy_var_1,happy_var_2,happy_var_3,happy_var_4)) happy_var_3+	) `HappyStk` happyRest}}}}++happyReduce_354 = happySpecReduce_3  115# happyReduction_354+happyReduction_354 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymOpenPragma happy_var_1) -> +	case happyOutTok happy_x_2 of { (TokKeyword KwNO_TERMINATION_CHECK happy_var_2) -> +	case happyOutTok happy_x_3 of { (TokSymbol SymClosePragma happy_var_3) -> +	happyIn121+		 (NoTerminationCheckPragma (getRange (happy_var_1,happy_var_2,happy_var_3))+	)}}}++happyReduce_355 = happyMonadReduce 4# 116# happyReduction_355+happyReduction_355 (happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest) tk+	 = happyThen (case happyOutTok happy_x_1 of { (TokSymbol SymOpenPragma happy_var_1) -> +	case happyOutTok happy_x_2 of { (TokKeyword KwIMPORT happy_var_2) -> +	case happyOutTok happy_x_3 of { (TokString happy_var_3) -> +	case happyOutTok happy_x_4 of { (TokSymbol SymClosePragma happy_var_4) -> +	( let s = snd happy_var_3 in+       if validHaskellModuleName s+       then return $ ImportPragma (getRange (happy_var_1,happy_var_2,fst happy_var_3,happy_var_4)) s+       else parseError $ "Malformed module name: " ++ s ++ ".")}}}}+	) (\r -> happyReturn (happyIn122 r))++happyReduce_356 = happySpecReduce_3  117# happyReduction_356+happyReduction_356 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymOpenPragma happy_var_1) -> +	case happyOutTok happy_x_2 of { (TokKeyword KwIMPOSSIBLE happy_var_2) -> +	case happyOutTok happy_x_3 of { (TokSymbol SymClosePragma happy_var_3) -> +	happyIn123+		 (ImpossiblePragma (getRange (happy_var_1,happy_var_2,happy_var_3))+	)}}}++happyReduce_357 = happySpecReduce_3  118# happyReduction_357+happyReduction_357 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut125 happy_x_2 of { happy_var_2 -> +	happyIn124+		 (reverse happy_var_2+	)}++happyReduce_358 = happySpecReduce_3  119# happyReduction_358+happyReduction_358 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut125 happy_x_1 of { happy_var_1 -> +	case happyOut77 happy_x_3 of { happy_var_3 -> +	happyIn125+		 (reverse happy_var_3 ++ happy_var_1+	)}}++happyReduce_359 = happySpecReduce_1  119# happyReduction_359+happyReduction_359 happy_x_1+	 =  case happyOut77 happy_x_1 of { happy_var_1 -> +	happyIn125+		 (reverse happy_var_1+	)}++happyReduce_360 = happySpecReduce_3  120# happyReduction_360+happyReduction_360 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut127 happy_x_2 of { happy_var_2 -> +	happyIn126+		 (reverse happy_var_2+	)}++happyReduce_361 = happySpecReduce_3  121# happyReduction_361+happyReduction_361 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut127 happy_x_1 of { happy_var_1 -> +	case happyOut78 happy_x_3 of { happy_var_3 -> +	happyIn127+		 (reverse happy_var_3 ++ happy_var_1+	)}}++happyReduce_362 = happySpecReduce_1  121# happyReduction_362+happyReduction_362 happy_x_1+	 =  case happyOut78 happy_x_1 of { happy_var_1 -> +	happyIn127+		 (reverse happy_var_1+	)}++happyReduce_363 = happySpecReduce_3  122# happyReduction_363+happyReduction_363 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut129 happy_x_2 of { happy_var_2 -> +	happyIn128+		 (reverse happy_var_2+	)}++happyReduce_364 = happySpecReduce_3  123# happyReduction_364+happyReduction_364 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut129 happy_x_1 of { happy_var_1 -> +	case happyOut79 happy_x_3 of { happy_var_3 -> +	happyIn129+		 (reverse happy_var_3 ++ happy_var_1+	)}}++happyReduce_365 = happySpecReduce_1  123# happyReduction_365+happyReduction_365 happy_x_1+	 =  case happyOut79 happy_x_1 of { happy_var_1 -> +	happyIn129+		 (reverse happy_var_1+	)}++happyReduce_366 = happySpecReduce_2  124# happyReduction_366+happyReduction_366 happy_x_2+	happy_x_1+	 =  happyIn130+		 ([]+	)++happyReduce_367 = happySpecReduce_1  124# happyReduction_367+happyReduction_367 happy_x_1+	 =  case happyOut124 happy_x_1 of { happy_var_1 -> +	happyIn130+		 (happy_var_1+	)}++happyReduce_368 = happySpecReduce_2  125# happyReduction_368+happyReduction_368 happy_x_2+	happy_x_1+	 =  happyIn131+		 ((Nothing, Nothing, [])+	)++happyReduce_369 = happySpecReduce_3  125# happyReduction_369+happyReduction_369 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut86 happy_x_2 of { happy_var_2 -> +	happyIn131+		 ((Nothing, Just happy_var_2, [])+	)}++happyReduce_370 = happyReduce 5# 125# happyReduction_370+happyReduction_370 (happy_x_5 `HappyStk`+	happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut86 happy_x_2 of { happy_var_2 -> +	case happyOut135 happy_x_4 of { happy_var_4 -> +	happyIn131+		 ((Nothing, Just happy_var_2, reverse happy_var_4)+	) `HappyStk` happyRest}}++happyReduce_371 = happySpecReduce_3  125# happyReduction_371+happyReduction_371 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut135 happy_x_2 of { happy_var_2 -> +	happyIn131+		 ((Nothing, Nothing, reverse happy_var_2)+	)}++happyReduce_372 = happySpecReduce_3  125# happyReduction_372+happyReduction_372 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut132 happy_x_2 of { happy_var_2 -> +	happyIn131+		 ((Just happy_var_2, Nothing, [])+	)}++happyReduce_373 = happyReduce 5# 125# happyReduction_373+happyReduction_373 (happy_x_5 `HappyStk`+	happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut132 happy_x_2 of { happy_var_2 -> +	case happyOut86 happy_x_4 of { happy_var_4 -> +	happyIn131+		 ((Just happy_var_2, Just happy_var_4, [])+	) `HappyStk` happyRest}}++happyReduce_374 = happyReduce 7# 125# happyReduction_374+happyReduction_374 (happy_x_7 `HappyStk`+	happy_x_6 `HappyStk`+	happy_x_5 `HappyStk`+	happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut132 happy_x_2 of { happy_var_2 -> +	case happyOut86 happy_x_4 of { happy_var_4 -> +	case happyOut135 happy_x_6 of { happy_var_6 -> +	happyIn131+		 ((Just happy_var_2, Just happy_var_4, reverse happy_var_6)+	) `HappyStk` happyRest}}}++happyReduce_375 = happyReduce 5# 125# happyReduction_375+happyReduction_375 (happy_x_5 `HappyStk`+	happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut132 happy_x_2 of { happy_var_2 -> +	case happyOut135 happy_x_4 of { happy_var_4 -> +	happyIn131+		 ((Just happy_var_2, Nothing, reverse happy_var_4)+	) `HappyStk` happyRest}}++happyReduce_376 = happySpecReduce_1  126# happyReduction_376+happyReduction_376 happy_x_1+	 =  happyIn132+		 (Inductive+	)++happyReduce_377 = happySpecReduce_1  126# happyReduction_377+happyReduction_377 happy_x_1+	 =  happyIn132+		 (CoInductive+	)++happyReduce_378 = happySpecReduce_3  127# happyReduction_378+happyReduction_378 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut135 happy_x_2 of { happy_var_2 -> +	happyIn133+		 (reverse happy_var_2+	)}++happyReduce_379 = happySpecReduce_2  128# happyReduction_379+happyReduction_379 happy_x_2+	happy_x_1+	 =  happyIn134+		 ([]+	)++happyReduce_380 = happySpecReduce_1  128# happyReduction_380+happyReduction_380 happy_x_1+	 =  case happyOut133 happy_x_1 of { happy_var_1 -> +	happyIn134+		 (happy_var_1+	)}++happyReduce_381 = happySpecReduce_3  129# happyReduction_381+happyReduction_381 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut135 happy_x_1 of { happy_var_1 -> +	case happyOut76 happy_x_3 of { happy_var_3 -> +	happyIn135+		 (reverse happy_var_3 ++ happy_var_1+	)}}++happyReduce_382 = happySpecReduce_1  129# happyReduction_382+happyReduction_382 happy_x_1+	 =  case happyOut76 happy_x_1 of { happy_var_1 -> +	happyIn135+		 (reverse happy_var_1+	)}++happyNewToken action sts stk+	= lexer(\tk -> +	let cont i = happyDoAction i tk action sts stk in+	case tk of {+	TokEOF -> happyDoAction 80# tk action sts stk;+	TokKeyword KwLet happy_dollar_dollar -> cont 1#;+	TokKeyword KwIn happy_dollar_dollar -> cont 2#;+	TokKeyword KwWhere happy_dollar_dollar -> cont 3#;+	TokKeyword KwWith happy_dollar_dollar -> cont 4#;+	TokKeyword KwRewrite happy_dollar_dollar -> cont 5#;+	TokKeyword KwPostulate happy_dollar_dollar -> cont 6#;+	TokKeyword KwPrimitive happy_dollar_dollar -> cont 7#;+	TokKeyword KwOpen happy_dollar_dollar -> cont 8#;+	TokKeyword KwImport happy_dollar_dollar -> cont 9#;+	TokKeyword KwUsing happy_dollar_dollar -> cont 10#;+	TokKeyword KwHiding happy_dollar_dollar -> cont 11#;+	TokKeyword KwRenaming happy_dollar_dollar -> cont 12#;+	TokKeyword KwTo happy_dollar_dollar -> cont 13#;+	TokKeyword KwPublic happy_dollar_dollar -> cont 14#;+	TokKeyword KwModule happy_dollar_dollar -> cont 15#;+	TokKeyword KwData happy_dollar_dollar -> cont 16#;+	TokKeyword KwCoData happy_dollar_dollar -> cont 17#;+	TokKeyword KwRecord happy_dollar_dollar -> cont 18#;+	TokKeyword KwConstructor happy_dollar_dollar -> cont 19#;+	TokKeyword KwInductive happy_dollar_dollar -> cont 20#;+	TokKeyword KwCoInductive happy_dollar_dollar -> cont 21#;+	TokKeyword KwField happy_dollar_dollar -> cont 22#;+	TokKeyword KwInfix happy_dollar_dollar -> cont 23#;+	TokKeyword KwInfixL happy_dollar_dollar -> cont 24#;+	TokKeyword KwInfixR happy_dollar_dollar -> cont 25#;+	TokKeyword KwMutual happy_dollar_dollar -> cont 26#;+	TokKeyword KwAbstract happy_dollar_dollar -> cont 27#;+	TokKeyword KwPrivate happy_dollar_dollar -> cont 28#;+	TokKeyword KwProp happy_dollar_dollar -> cont 29#;+	TokKeyword KwSet happy_dollar_dollar -> cont 30#;+	TokKeyword KwForall happy_dollar_dollar -> cont 31#;+	TokKeyword KwSyntax happy_dollar_dollar -> cont 32#;+	TokKeyword KwPatternSyn happy_dollar_dollar -> cont 33#;+	TokKeyword KwOPTIONS happy_dollar_dollar -> cont 34#;+	TokKeyword KwBUILTIN happy_dollar_dollar -> cont 35#;+	TokKeyword KwIMPORT happy_dollar_dollar -> cont 36#;+	TokKeyword KwIMPOSSIBLE happy_dollar_dollar -> cont 37#;+	TokKeyword KwETA happy_dollar_dollar -> cont 38#;+	TokKeyword KwNO_TERMINATION_CHECK happy_dollar_dollar -> cont 39#;+	TokKeyword KwCOMPILED happy_dollar_dollar -> cont 40#;+	TokKeyword KwCOMPILED_DATA happy_dollar_dollar -> cont 41#;+	TokKeyword KwCOMPILED_TYPE happy_dollar_dollar -> cont 42#;+	TokKeyword KwCOMPILED_EPIC happy_dollar_dollar -> cont 43#;+	TokKeyword KwCOMPILED_JS happy_dollar_dollar -> cont 44#;+	TokKeyword KwSTATIC happy_dollar_dollar -> cont 45#;+	TokKeyword KwQuoteGoal happy_dollar_dollar -> cont 46#;+	TokKeyword KwQuote happy_dollar_dollar -> cont 47#;+	TokKeyword KwQuoteTerm happy_dollar_dollar -> cont 48#;+	TokKeyword KwUnquote happy_dollar_dollar -> cont 49#;+	TokSetN happy_dollar_dollar -> cont 50#;+	TokTeX happy_dollar_dollar -> cont 51#;+	TokComment happy_dollar_dollar -> cont 52#;+	TokSymbol SymEllipsis happy_dollar_dollar -> cont 53#;+	TokSymbol SymDotDot happy_dollar_dollar -> cont 54#;+	TokSymbol SymDot happy_dollar_dollar -> cont 55#;+	TokSymbol SymSemi happy_dollar_dollar -> cont 56#;+	TokSymbol SymColon happy_dollar_dollar -> cont 57#;+	TokSymbol SymEqual happy_dollar_dollar -> cont 58#;+	TokSymbol SymUnderscore happy_dollar_dollar -> cont 59#;+	TokSymbol SymQuestionMark happy_dollar_dollar -> cont 60#;+	TokSymbol SymArrow happy_dollar_dollar -> cont 61#;+	TokSymbol SymLambda happy_dollar_dollar -> cont 62#;+	TokSymbol SymAs happy_dollar_dollar -> cont 63#;+	TokSymbol SymBar happy_dollar_dollar -> cont 64#;+	TokSymbol SymOpenParen happy_dollar_dollar -> cont 65#;+	TokSymbol SymCloseParen happy_dollar_dollar -> cont 66#;+	TokSymbol SymDoubleOpenBrace happy_dollar_dollar -> cont 67#;+	TokSymbol SymDoubleCloseBrace happy_dollar_dollar -> cont 68#;+	TokSymbol SymOpenBrace happy_dollar_dollar -> cont 69#;+	TokSymbol SymCloseBrace happy_dollar_dollar -> cont 70#;+	TokSymbol SymOpenVirtualBrace happy_dollar_dollar -> cont 71#;+	TokSymbol SymCloseVirtualBrace happy_dollar_dollar -> cont 72#;+	TokSymbol SymVirtualSemi happy_dollar_dollar -> cont 73#;+	TokSymbol SymOpenPragma happy_dollar_dollar -> cont 74#;+	TokSymbol SymClosePragma happy_dollar_dollar -> cont 75#;+	TokId happy_dollar_dollar -> cont 76#;+	TokQId happy_dollar_dollar -> cont 77#;+	TokString happy_dollar_dollar -> cont 78#;+	TokLiteral happy_dollar_dollar -> cont 79#;+	_ -> happyError' tk+	})++happyError_ 80# tk = happyError' tk+happyError_ _ tk = happyError' tk++happyThen :: () => Parser a -> (a -> Parser b) -> Parser b+happyThen = (>>=)+happyReturn :: () => a -> Parser a+happyReturn = (return)+happyThen1 = happyThen+happyReturn1 :: () => a -> Parser a+happyReturn1 = happyReturn+happyError' :: () => (Token) -> Parser a+happyError' tk = (\token -> happyError) tk++tokensParser = happySomeParser where+  happySomeParser = happyThen (happyParse 0#) (\x -> happyReturn (happyOut6 x))++exprParser = happySomeParser where+  happySomeParser = happyThen (happyParse 1#) (\x -> happyReturn (happyOut29 x))++moduleParser = happySomeParser where+  happySomeParser = happyThen (happyParse 2#) (\x -> happyReturn (happyOut9 x))++happySeq = happyDontSeq+++{--------------------------------------------------------------------------+    Parsers+ --------------------------------------------------------------------------}++-- | Parse the token stream. Used by the TeX compiler.+tokensParser :: Parser [Token]++-- | Parse an expression. Could be used in interactions.+exprParser :: Parser Expr++-- | Parse a module.+moduleParser :: Parser Module+++{--------------------------------------------------------------------------+    Happy stuff+ --------------------------------------------------------------------------}++-- | Required by Happy.+happyError :: Parser a+happyError = parseError "Parse error"+++{--------------------------------------------------------------------------+    Utility functions+ --------------------------------------------------------------------------}++-- | Create a name from a string.++mkName :: (Interval, String) -> Parser Name+mkName (i, s) = do+    let xs = parts s+    mapM_ isValidId xs+    unless (alternating xs) $ fail $ "a name cannot contain two consecutive underscores"+    return $ Name (getRange i) xs+    where+        parts :: String -> [NamePart]+        parts ""        = []+        parts ('_' : s) = Hole : parts s+        parts s         = Id x : parts s'+          where (x, s') = break (== '_') s++	isValidId Hole   = return ()+	isValidId (Id x) = case parse defaultParseFlags [0] (lexer return) x of+	    ParseOk _ (TokId _) -> return ()+	    _			-> fail $ "in the name " ++ s ++ ", the part " ++ x ++ " is not valid"++	-- we know that there are no two Ids in a row+	alternating (Hole : Hole : _) = False+	alternating (_ : xs)	      = alternating xs+	alternating []		      = True++-- | Create a qualified name from a list of strings+mkQName :: [(Interval, String)] -> Parser QName+mkQName ss = do+    xs <- mapM mkName ss+    return $ foldr Qual (QName $ last xs) (init xs)++-- | Match a particular name.+isName :: String -> (Interval, String) -> Parser ()+isName s (_,s')+    | s == s'	= return ()+    | otherwise	= fail $ "expected " ++ s ++ ", found " ++ s'++-- | Build a forall pi (forall x y z -> ...)+forallPi :: [LamBinding] -> Expr -> Expr+forallPi bs e = Pi (map addType bs) e++-- | Converts lambda bindings to typed bindings.+addType :: LamBinding -> TypedBindings+addType (DomainFull b)	 = b+addType (DomainFree h rel x) = TypedBindings r $ Arg h rel $ TBind r [x] $ Underscore r Nothing+  where r = getRange x++-- | Check that an import directive doesn't contain repeated names+verifyImportDirective :: ImportDirective -> Parser ImportDirective+verifyImportDirective i =+    case filter ((>1) . length)+	 $ group+	 $ sort xs+    of+	[]  -> return i+	yss -> let Just pos = rStart $ getRange $ head $ concat yss in+               parseErrorAt pos $+		"repeated name" ++ s ++ " in import directive: " +++		concat (intersperse ", " $ map (show . head) yss)+	    where+		s = case yss of+			[_] -> ""+			_   -> "s"+    where+	xs = names (usingOrHiding i) ++ map renFrom (renaming i)+	names (Using xs)    = xs+	names (Hiding xs)   = xs++-- | Breaks up a string into substrings. Returns every maximal+-- subsequence of zero or more characters distinct from @'.'@.+--+-- > splitOnDots ""         == [""]+-- > splitOnDots "foo.bar"  == ["foo", "bar"]+-- > splitOnDots ".foo.bar" == ["", "foo", "bar"]+-- > splitOnDots "foo.bar." == ["foo", "bar", ""]+-- > splitOnDots "foo..bar" == ["foo", "", "bar"]+splitOnDots :: String -> [String]+splitOnDots ""        = [""]+splitOnDots ('.' : s) = [] : splitOnDots s+splitOnDots (c   : s) = case splitOnDots s of+  p : ps -> (c : p) : ps++prop_splitOnDots = and+  [ splitOnDots ""         == [""]+  , splitOnDots "foo.bar"  == ["foo", "bar"]+  , splitOnDots ".foo.bar" == ["", "foo", "bar"]+  , splitOnDots "foo.bar." == ["foo", "bar", ""]+  , splitOnDots "foo..bar" == ["foo", "", "bar"]+  ]++-- | Returns 'True' iff the name is a valid Haskell (hierarchical)+-- module name.+validHaskellModuleName :: String -> Bool+validHaskellModuleName = all ok . splitOnDots+  where+  -- Checks if a dot-less module name is well-formed.+  ok :: String -> Bool+  ok []      = False+  ok (c : s) =+    isUpper c &&+    all (\c -> isLower c || c == '_' ||+               isUpper c ||+               generalCategory c == DecimalNumber ||+               c == '\'')+        s++{--------------------------------------------------------------------------+    Patterns+ --------------------------------------------------------------------------}++-- | Turn an expression into a left hand side.+exprToLHS :: Expr -> Parser ([Expr] -> [Expr] -> LHS)+exprToLHS e = case e of+  WithApp r e es -> LHS <$> exprToPattern e <*> mapM exprToPattern es+  _		 -> LHS <$> exprToPattern e <*> return []++-- | Turn an expression into a pattern. Fails if the expression is not a+--   valid pattern.+exprToPattern :: Expr -> Parser Pattern+exprToPattern e =+    case e of+	Ident x			-> return $ IdentP x+	App _ e1 e2		-> AppP <$> exprToPattern e1+					<*> T.mapM (T.mapM exprToPattern) e2+	Paren r e		-> ParenP r+					<$> exprToPattern e+	Underscore r _		-> return $ WildP r+	Absurd r		-> return $ AbsurdP r+	As r x e		-> AsP r x <$> exprToPattern e+	Dot r (HiddenArg _ e)	-> return $ HiddenP r $ fmap (DotP r) e+	Dot r e			-> return $ DotP r e+	Lit l			-> return $ LitP l+	HiddenArg r e		-> HiddenP r <$> T.mapM exprToPattern e+	InstanceArg r e		-> InstanceP r <$> T.mapM exprToPattern e+	RawApp r es		-> RawAppP r <$> mapM exprToPattern es+	OpApp r x es		-> OpAppP r x <$> mapM opAppExprToPattern es+	_			->+          let Just pos = rStart $ getRange e in+          parseErrorAt pos $ "Not a valid pattern: " ++ show e++opAppExprToPattern :: OpApp Expr -> Parser Pattern+opAppExprToPattern (SyntaxBindingLambda _ _ _) = parseError "syntax binding lambda cannot appear in a pattern"+opAppExprToPattern (Ordinary e) = exprToPattern e++-- | Turn an expression into a name. Fails if the expression is not a+--   valid identifier.+exprToName :: Expr -> Parser Name+exprToName (Ident (QName x)) = return x+exprToName e =+  let Just pos = rStart $ getRange e in+  parseErrorAt pos $ "Not a valid identifier: " ++ show e++parsePanic s = parseError $ "Internal parser error: " ++ s ++ ". Please report this as a bug."++{- RHS or type signature -}++data RHSOrTypeSigs = JustRHS RHS+                   | TypeSigsRHS Expr++namesOfPattern :: Pattern -> Maybe [(Relevance, Name)]+namesOfPattern (IdentP (QName i))         = Just [(Relevant, i)]+namesOfPattern (DotP _ (Ident (QName i))) = Just [(Irrelevant, i)]+namesOfPattern (RawAppP _ ps)             = fmap concat $ mapM namesOfPattern ps+namesOfPattern _                          = Nothing++funClauseOrTypeSigs :: LHS -> RHSOrTypeSigs -> WhereClause -> Parser [Declaration]+funClauseOrTypeSigs lhs (JustRHS   rhs) wh = return [FunClause lhs rhs wh]+funClauseOrTypeSigs lhs (TypeSigsRHS e) wh+  | NoWhere <- wh,+    LHS p [] [] [] <- lhs,+    Just names <- namesOfPattern p = return $ map (\(x,y) -> TypeSig x y e) names+  | otherwise                      = parseError "Illegal function clause or type signature"++{--------------------------------------------------------------------------+    Tests+ --------------------------------------------------------------------------}++-- | Test suite.+tests :: IO Bool+tests = runTests "Agda.Syntax.Parser.Parser"+  [ quickCheck' prop_splitOnDots+  ]+{-# LINE 1 "templates/GenericTemplate.hs" #-}+{-# LINE 1 "templates/GenericTemplate.hs" #-}+{-# LINE 1 "<built-in>" #-}+{-# LINE 1 "<command line>" #-} {-# LINE 1 "templates/GenericTemplate.hs" #-} -- Id: GenericTemplate.hs,v 1.26 2005/01/14 14:47:22 simonmar Exp  
+ doc/release-notes/2-3-2.txt view
@@ -0,0 +1,699 @@+------------------------------------------------------------------------+-- Release notes for Agda 2 version 2.3.2+------------------------------------------------------------------------++Important changes since 2.3.0:++Installation+============++* The Agda-executable package has been removed.++  The executable is now provided as part of the Agda package.++* The Emacs mode no longer depends on haskell-mode or GHCi.++* Compilation of Emacs mode Lisp files.++  You can now compile the Emacs mode Lisp files by running "agda-mode+  compile". This command is run by "make install".++  Compilation can, in some cases, give a noticeable speedup.++  WARNING: If you reinstall the Agda mode without recompiling the+  Emacs Lisp files, then Emacs may continue using the old, compiled+  files.++Pragmas and Options+===================++* The --without-K check now reconstructs constructor parameters.++  New specification of --without-K:++  If the flag is activated, then Agda only accepts certain+  case-splits. If the type of the variable to be split is D pars ixs,+  where D is a data (or record) type, pars stands for the parameters,+  and ixs the indices, then the following requirements must be+  satisfied:++  * The indices ixs must be applications of constructors (or literals)+    to distinct variables. Constructors are usually not applied to+    parameters, but for the purposes of this check constructor+    parameters are treated as other arguments.++  * These distinct variables must not be free in pars.++* Irrelevant arguments are printed as _ by default now.  To turn on+  printing of irrelevant arguments, use option++    --show-irrelevant++* New: Pragma NO_TERMINATION_CHECK to switch off termination checker+  for individual function definitions and mutual blocks.++  The pragma must precede a function definition or a mutual block.+  Examples (see test/succeed/NoTerminationCheck.agda):++  1. Skipping a single definition: before type signature.++       {-# NO_TERMINATION_CHECK #-}+       a : A+       a = a++  2. Skipping a single definition: before first clause.++       b : A+       {-# NO_TERMINATION_CHECK #-}+       b = b++  3. Skipping an old-style mutual block: Before 'mutual' keyword.++       {-# NO_TERMINATION_CHECK #-}+       mutual+         c : A+         c = d++         d : A+         d = c++  4. Skipping a new-style mutual block: Anywhere before a type+     signature or first function clause in the block++       i : A+       j : A++       i = j+       {-# NO_TERMINATION_CHECK #-}+       j = i++  The pragma cannot be used in --safe mode.++Language+========++* Let binding record patterns++    record _×_ (A B : Set) : Set where+      constructor _,_+      field+        fst : A+        snd : B+    open _×_++    let (x , (y , z)) = t+    in  u++  will now be interpreted as++    let x = fst t+        y = fst (snd t)+        z = snd (snd t)+    in  u++  Note that the type of t needs to be inferable.  If you need to provide+  a type signature, you can write the following:++    let a : ...+        a = t+        (x , (y , z)) = a+    in  u++* Pattern synonyms++  A pattern synonym is a declaration that can be used on the left hand+  side (when pattern matching) as well as the right hand side (in+  expressions). For example:++  pattern z    = zero+  pattern ss x = suc (suc x)++  f : ℕ -> ℕ+  f z       = z+  f (suc z) = ss z+  f (ss n)  = n++  Pattern synonyms are implemented by substitution on the abstract+  syntax, so definitions are scope-checked but not type-checked. They+  are particularly useful for universe constructions.++* Qualified mixfix operators++  It is now possible to use a qualified mixfix operator by qualifying the first+  part of the name. For instance++    import Data.Nat as Nat+    import Data.Bool as Bool++    two = Bool.if true then 1 Nat.+ 1 else 0++* Sections [Issue 735].  Agda now parses anonymous modules as sections:++    module _ {a} (A : Set a) where++      data List : Set a where+        []  : List+        _∷_ : (x : A) (xs : List) → List++    module _ {a} {A : Set a} where++      _++_ : List A → List A → List A+      []       ++ ys = ys+      (x ∷ xs) ++ ys = x ∷ (xs ++ ys)++    test : List Nat+    test = (5 ∷ []) ++ (3 ∷ [])++  In general, now the syntax++    module _ parameters where+      declarations++  is accepted and has the same effect as++    private+      module M parameters where+        declarations+    open M public++  for a fresh name M.++* Instantiating a module in an open import statement [Issue 481].  Now accepted:++    open import Path.Module args [using/hiding/renaming (...)]++  This only brings the imported identifiers from Path.Module into scope,+  not the module itself!  Consequently, the following is pointless, and raises+  an error:++    import Path.Module args [using/hiding/renaming (...)]++  You can give a private name M to the instantiated module via++    import Path.Module args as M [using/hiding/renaming (...)]+    open import Path.Module args as M [using/hiding/renaming (...)]++  Try to avoid 'as' as part of the arguments.  'as' is not a keyword;+  the following can be legal, although slightly obfuscated Agda code:++    open import as as as as as as++* Implicit module parameters can be given by name. E.g.++    open M {namedArg = bla}++  This feature has been introduced in Agda 2.3.0 already.++* Multiple type signatures sharing a same type can now be written as a single+  type signature.++    one two : ℕ+    one = suc zero+    two = suc one++Goal and error display+======================++* Meta-variables that were introduced by hidden argument `arg' are now+  printed as _arg_number instead of just _number.  [Issue 526]++* Agda expands identifiers in anonymous modules when printing.+  Should make some goals nicer to read. [Issue 721]++* When a module identifier is ambiguous, Agda tells you if one+  of them is a data type module.  [Issues 318, 705]++Type checking+=============++* Improved coverage checker.  The coverage checker splits on+  arguments that have constructor or literal pattern, committing+  to the left-most split that makes progress.+  Consider the lookup function for vectors:++    data Fin : Nat → Set where+      zero : {n : Nat} → Fin (suc n)+      suc  : {n : Nat} → Fin n → Fin (suc n)++    data Vec (A : Set) : Nat → Set where+      []  : Vec A zero+      _∷_ : {n : Nat} → A → Vec A n → Vec A (suc n)++    _!!_ : {A : Set}{n : Nat} → Vec A n → Fin n → A+    (x ∷ xs) !! zero  = x+    (x ∷ xs) !! suc i = xs !! i++  In Agda up to 2.3.0, this definition is rejected unless we add+  an absurd clause++    [] !! ()++  This is because the coverage checker committed on splitting+  on the vector argument, even though this inevitably lead to+  failed coverage, because a case for the empty vector [] is missing.++  The improvement to the coverage checker consists on committing+  only on splits that have a chance of covering, since all possible+  constructor patterns are present.  Thus, Agda will now split+  first on the Fin argument, since cases for both zero and suc are+  present.  Then, it can split on the Vec argument, since the+  empty vector is already ruled out by instantiating n to a suc _.++* Instance arguments resolution will now consider candidates which+  still expect hidden arguments. For example:++    record Eq (A : Set) : Set where+      field eq : A → A → Bool++    open Eq {{...}}++    eqFin : {n : ℕ} → Eq (Fin n)+    eqFin = record { eq = primEqFin }++    testFin : Bool+    testFin = eq fin1 fin2++  The type-checker will now resolve the instance argument of the eq+  function to eqFin {_}. This is only done for hidden arguments, not+  instance arguments, so that the instance search stays non-recursive.++* Constraint solving: Upgraded Miller patterns to record patterns. [Issue 456]++  Agda now solves meta-variables that are applied to record patterns.+  A typical (but here, artificial) case is:++    record Sigma (A : Set)(B : A -> Set) : Set where+      constructor _,_+      field+        fst : A+        snd : B fst++    test : (A : Set)(B : A -> Set) ->+      let X : Sigma A B -> Sigma A B+          X = _+      in  (x : A)(y : B x) -> X (x , y) ≡ (x , y)+    test A B x y = refl++  This yields a constraint of the form++    _X A B (x , y) := t[x,y]++  (with t[x,y] = (x, y)) which is not a Miller pattern.+  However, Agda now solves this as++    _X A B z := t[fst z,snd z].++* Changed: solving recursive constraints.  [Issue 585]++  Until 2.3.0, Agda sometimes inferred values that did not pass the+  termination checker later, or would even make Agda loop.  To prevent this,+  the occurs check now also looks into the definitions of the current mutual+  block, to avoid constructing recursive solutions.  As a consequence, also+  terminating recursive solutions are no longer found automatically.++  This effects a programming pattern where the recursively computed+  type of a recursive function is left to Agda to solve.++    mutual++      T : D -> Set+      T pattern1 = _+      T pattern2 = _++      f : (d : D) -> T d+      f pattern1 = rhs1+      f pattern2 = rhs2++  This might no longer work from now on.+  See examples test/fail/Issue585*.agda++* Less eager introduction of implicit parameters.  [Issue 679]++  Until Agda 2.3.0, trailing hidden parameters were introduced eagerly+  on the left hand side of a definition.  For instance, one could not+  write++    test : {A : Set} -> Set+    test = \ {A} -> A++  because internally, the hidden argument {A : Set} was added to the+  left-hand side, yielding++    test {_} = \ {A} -> A++  which raised a type error.  Now, Agda only introduces the trailing+  implicit parameters it has to, in order to maintain uniform function+  arity.  For instance, in++    test : Bool -> {A B C : Set} -> Set+    test true {A}      = A+    test false {B = B} = B++  Agda will introduce parameters A and B in all clauses, but not C,+  resulting in++    test : Bool -> {A B C : Set} -> Set+    test true  {A} {_}     = A+    test false {_} {B = B} = B++  Note that for checking where-clauses, still all hidden trailing+  parameters are in scope.  For instance:++    id : {i : Level}{A : Set i} -> A -> A+    id = myId+      where myId : forall {A} -> A -> A+            myId x = x++  To be able to fill in the meta variable _1 in++    myId : {A : Set _1} -> A -> A++  the hidden parameter {i : Level} needs to be in scope.++  As a result of this more lazy introduction of implicit parameters,+  the following code now passes.++    data Unit : Set where+      unit : Unit++    T : Unit → Set+    T unit = {u : Unit} → Unit++    test : (u : Unit) → T u+    test unit with unit+    ... | _ = λ {v} → v++  Before, Agda would eagerly introduce the hidden parameter {v} as+  unnamed left-hand side parameter, leaving no way to refer to it.++  The related issue 655 has also been addressed.  It is now possible+  to make `synonym' definitions++    name = expression++  even when the type of expression begins with a hidden quantifier.+  Simple example:++    id2 = id++  That resulted in unsolved metas until 2.3.0.++* Agda detects unused arguments and ignores them during equality+  checking. [Issue 691, solves also issue 44.]++  Agda's polarity checker now assigns 'Nonvariant' to arguments+  that are not actually used (except for absurd matches).  If+  f's first argument is Nonvariant, then f x is definitionally equal+  to f y regardless of x and y.  It is similar to irrelevance, but+  does not require user annotation.++  For instance, unused module parameters do no longer get in the way:++    module M (x : Bool) where++      not : Bool → Bool+      not true  = false+      not false = true++    open M true+    open M false renaming (not to not′)++    test : (y : Bool) → not y ≡ not′ y+    test y = refl++  Matching against record or absurd patterns does not count as `use',+  so we get some form of proof irrelevance:++    data ⊥ : Set where+    record ⊤ : Set where+      constructor trivial++    data Bool : Set where+      true false : Bool++    True : Bool → Set+    True true  = ⊤+    True false = ⊥++    fun : (b : Bool) → True b → Bool+    fun true  trivial = true+    fun false ()++    test : (b : Bool) → (x y : True b) → fun b x ≡ fun b y+    test b x y = refl++  More examples in test/succeed/NonvariantPolarity.agda.++  Phantom arguments:  Parameters of record and data types are considered+  `used' even if they are not actually used.  Consider:++    False : Nat → Set+    False zero    = ⊥+    False (suc n) = False n++    module Invariant where+      record Bla (n : Nat)(p : False n) : Set where++    module Nonvariant where+      Bla : (n : Nat) → False n → Set+      Bla n p = ⊤++  Even though record `Bla' does not use its parameters n and p, they+  are considered as used, allowing "phantom type" techniques.++  In contrast, the arguments of function `Bla' are recognized as unused.+  The following code type-checks if we open Invariant but leaves unsolved+  metas if we open Nonvariant.++    drop-suc : {n : Nat}{p : False n} → Bla (suc n) p → Bla n p+    drop-suc _ = _++    bla : (n : Nat) → {p : False n} → Bla n p → ⊥+    bla zero {()} b+    bla (suc n) b = bla n (drop-suc b)++  If `Bla' is considered invariant, the hidden argument in the recursive+  call can be inferred to be `p'.  If it is considered non-variant, then+  `Bla n X = Bla n p' does not entail `X = p' and the hidden argument+  remains unsolved.  Since `bla' does not actually use its hidden argument,+  its value is not important and it could be searched for.+  Unfortunately, polarity analysis of `bla' happens only after type+  checking, thus, the information that `bla' is non-variant in `p' is+  not available yet when meta-variables are solved.+  (See test/fail/BrokenInferenceDueToNonvariantPolarity.agda)++* Agda now expands simple definitions (one clause, terminating)+  to check whether a function is constructor headed. [Issue 747]+  For instance, the following now also works:++    MyPair : Set -> Set -> Set+    MyPair A B = Pair A B++    Vec : Set -> Nat -> Set+    Vec A zero    = Unit+    Vec A (suc n) = MyPair A (Vec A n)++  Here, Unit and Pair are data or record types.++Compiler backends+=================++* -Werror is now overridable.++  To enable compilation of Haskell modules containing warnings, the+  -Werror flag for the MAlonzo backend has been made overridable. If,+  for example, --ghc-flag=-Wwarn is passed when compiling, one can get+  away with things like:++    data PartialBool : Set where+      true : PartialBool++    {-# COMPILED_DATA PartialBool Bool True #-}++  The default behavior remains as it used to be and rejects the above+  program.++Tools+=====++Emacs mode+----------++* Asynchronous Emacs mode.++  One can now use Emacs while a buffer is type-checked. If the buffer+  is edited while the type-checker runs, then syntax highlighting will+  not be updated when type-checking is complete.++* Interactive syntax highlighting.++  The syntax highlighting is updated while a buffer is type-checked:++  • At first the buffer is highlighted in a somewhat crude way+    (without go-to-definition information for overloaded+    constructors).++  • If the highlighting level is "interactive", then the piece of code+    that is currently being type-checked is highlighted as such. (The+    default is "non-interactive".)++  • When a mutual block has been type-checked it is highlighted+    properly (this highlighting includes warnings for potential+    non-termination).++  The highlighting level can be controlled via the new configuration+  variable agda2-highlight-level.++* Multiple case-splits can now be performed in one go.++  Consider the following example:++    _==_ : Bool → Bool → Bool+    b₁ == b₂ = {!!}++  If you split on "b₁ b₂", then you get the following code:++    _==_ : Bool → Bool → Bool+    true == true = {!!}+    true == false = {!!}+    false == true = {!!}+    false == false = {!!}++  The order of the variables matters. Consider the following code:++    lookup : ∀ {a n} {A : Set a} → Vec A n → Fin n → A+    lookup xs i = {!!}++  If you split on "xs i", then you get the following code:++    lookup : ∀ {a n} {A : Set a} → Vec A n → Fin n → A+    lookup [] ()+    lookup (x ∷ xs) zero = {!!}+    lookup (x ∷ xs) (suc i) = {!!}++  However, if you split on "i xs", then you get the following code+  instead:++    lookup : ∀ {a n} {A : Set a} → Vec A n → Fin n → A+    lookup (x ∷ xs) zero = ?+    lookup (x ∷ xs) (suc i) = ?++  This code is rejected by Agda 2.3.0, but accepted by 2.3.2 thanks+  to improved coverage checking (see above).++* The Emacs mode now presents information about which module is+  currently being type-checked.++* New global menu entry: Information about the character at point.++  If this entry is selected, then information about the character at+  point is displayed, including (in many cases) information about how+  to type the character.++* Commenting/uncommenting the rest of the buffer.++  One can now comment or uncomment the rest of the buffer by typing+  C-c C-x M-; or by selecting the menu entry "Comment/uncomment the+  rest of the buffer".++* The Emacs mode now uses the Agda executable instead of GHCi.++  The *ghci* buffer has been renamed to *agda2*.++  A new configuration variable has been introduced:+  agda2-program-name, the name of the Agda executable (by default+  agda).++  The variable agda2-ghci-options has been replaced by+  agda2-program-args: extra arguments given to the Agda executable (by+  default none).++  If you want to limit Agda's memory consumption you can add some+  arguments to agda2-program-args, for instance +RTS -M1.5G -RTS.++* The Emacs mode no longer depends on haskell-mode.++  Users who have customised certain haskell-mode variables (such as+  haskell-ghci-program-args) may want to update their configuration.++LaTeX-backend+-------------++An experimental LaTeX-backend which does precise highlighting a la the+HTML-backend and code alignment a la lhs2TeX has been added.++Here is a sample input literate Agda file:++  \documentclass{article}++  \usepackage{agda}++  \begin{document}++  The following module declaration will be hidden in the output.++  \AgdaHide{+  \begin{code}+  module M where+  \end{code}+  }++  Two or more spaces can be used to make the backend align stuff.++  \begin{code}+  data ℕ : Set where+    zero  : ℕ+    suc   : ℕ → ℕ++  _+_ : ℕ → ℕ → ℕ+  zero   + n = n+  suc m  + n = suc (m + n)+  \end{code}++  \end{document}++To produce an output PDF issue the following commands:++  agda --latex -i . <file>.lagda+  pdflatex latex/<file>.tex++Only the top-most module is processed, like with lhs2tex and unlike with+the HTML-backend. If you want to process imported modules you have to+call agda --latex manually on each of those modules.++There are still issues related to formatting, see the bug tracker for+more information:++  https://code.google.com/p/agda/issues/detail?id=697++The default agda.sty might therefore change in backwards-incompatible+ways, as work proceeds in trying to resolve those problems.+++Implemented features:++  * Two or more spaces can be used to force alignment of things, like+    with lhs2tex. See example above.++  * The highlighting information produced by the type checker is used to+    generate the output. For example, the data declaration in the example+    above, produces:++      \AgdaKeyword{data} \AgdaDatatype{ℕ} \AgdaSymbol{:}+          \AgdaPrimitiveType{Set} \AgdaKeyword{where}++    These latex commands are defined in agda.sty (which is imported by+    \usepackage{agda}) and cause the highlighting.++  * The latex-backend checks if agda.sty is found by the latex+    environment, if it isn't a default agda.sty is copied from Agda's+    data-dir into the working directory (and thus made available to the+    latex environment).++    If the default agda.sty isn't satisfactory (colors, fonts, spacing,+    etc) then the user can modify it and make put it somewhere where the+    latex environment can find it. Hopefully most aspects should be+    modifiable via agda.sty rather than having to tweak the+    implementation.++  * --latex-dir can be used to change the default output directory.
src/agda-mode/Main.hs view
@@ -1,11 +1,10 @@-{-# LANGUAGE CPP #-}- -- | A program which either tries to add setup code for Agda's Emacs -- mode to the users .emacs file, or provides information to Emacs -- about where the Emacs mode is installed.  module Main (main) where +import Control.Applicative import Control.Exception import Control.Monad import Data.Char@@ -17,9 +16,6 @@ import System.Exit import System.FilePath import System.IO-#if !(MIN_VERSION_base(4,2,0))-import qualified System.IO.UTF8 as UTF8-#endif import System.Process  import Paths_Agda (getDataDir, version)@@ -37,37 +33,42 @@              setupDotEmacs (Files { thisProgram = prog                                   , dotEmacs    = dotEmacs                                   })+          | arg == compileFlag ->+             compileElispFiles     _  -> do inform usage              exitFailure  -- Command line options. -setupFlag  = "setup"-locateFlag = "locate"+setupFlag   = "setup"+locateFlag  = "locate"+compileFlag = "compile"  -- | Usage information.  usage :: String usage = unlines   [ "This program, which is part of Agda version " ++ ver ++ ", can be run"-  , "in two modes, depending on which option it is invoked with:"+  , "in three modes, depending on which option it is invoked with:"   , ""   , setupFlag   , ""   , "  The program tries to add setup code for Agda's Emacs mode to the"   , "  current user's .emacs file. It is assumed that the .emacs file"-#if MIN_VERSION_base(4,2,0)   , "  uses the character encoding specified by the locale."-#else-  , "  uses ASCII or some other character encoding which ASCII is"-  , "  compatible with (like Latin-1 or UTF-8)."-#endif   , ""   , locateFlag   , ""   , "  The path to the Emacs mode's main file is printed on standard"   , "  output (using the UTF-8 character encoding and no trailing"   , "  newline)."+  , ""+  , compileFlag+  , ""+  , "  The program tries to compile Agda's Emacs mode's source files."+  , ""+  , "  WARNING: If you reinstall the Agda mode without recompiling the Emacs"+  , "  Lisp files, then Emacs may continue using the old, compiled files."   ]  -- | The current version of Agda.@@ -86,12 +87,8 @@ printEmacsModeFile = do   dataDir <- getDataDir   let path = dataDir </> "emacs-mode" </> "agda2.el"-#if MIN_VERSION_base(4,2,0)   hSetEncoding stdout utf8   putStr path-#else-  UTF8.putStr path-#endif  ------------------------------------------------------------------------ -- Setting up the .emacs file@@ -191,6 +188,41 @@   esc c | c `elem` ['\\', '"']   = '\\' : [c]         | isAscii c && isPrint c = [c]         | otherwise              = "\\x" ++ showHex (fromEnum c) "\\ "++------------------------------------------------------------------------+-- Compiling Emacs Lisp files++-- | The Agda mode's Emacs Lisp files, given in the order in which+-- they should be compiled.++emacsLispFiles :: [FilePath]+emacsLispFiles =+  [ "agda2-abbrevs.el"+  , "annotation.el"+  , "agda2-queue.el"+  , "eri.el"+  , "agda2.el"+  , "agda-input.el"+  , "agda2-highlight.el"+  , "agda2-mode.el"+  ]++-- | Tries to compile the Agda mode's Emacs Lisp files.++compileElispFiles :: IO ()+compileElispFiles = do+  dataDir <- (</> "emacs-mode") <$> getDataDir+  let elFiles = map (dataDir </>) emacsLispFiles+  elFiles <- filterM doesFileExist elFiles+  exit <- rawSystem "emacs" $+                    [ "--no-init-file", "--no-site-file"+                    , "--directory", dataDir+                    , "--batch"+                    , "--funcall", "batch-byte-compile"+                    ] ++ elFiles+  unless (exit == ExitSuccess) $ do+    informLn "Unable to compile Emacs Lisp files."+    exitFailure  ------------------------------------------------------------------------ -- Helper functions
src/data/Agda.css view
@@ -22,9 +22,11 @@ /* OtherAspects. */ .DottedPattern      {} .UnsolvedMeta       { color: black; background: yellow         }+.UnsolvedConstraint { color: black; background: yellow         } .TerminationProblem { color: black; background: #FFA07A        } .IncompletePattern  { color: black; background: #F5DEB3        } .Error              { color: red;   text-decoration: underline }+.TypeChecks         { color: black; background: #ADD8E6        }  /* Standard attributes. */ a { text-decoration: none }
src/data/EpicInclude/AgdaPrelude.e view
@@ -29,59 +29,38 @@  -- data String = Con 0 | Con 1 (Char*) String -freadStr (stream : Ptr) -> Data =+freadStr (stream : Ptr) -> String =     let isEof : Bool = foreign Int "feof" (stream : Ptr)      in if isEof then Con 0 ()                  else let str : String = %effect(foreign String "freadStrChunk" (stream : Ptr))-                       in Con 1 ( str , freadStr (stream))+                       in primStringAppend( str , freadStr (stream)) -readStr (u : Unit) -> Data =+readStr (u : Unit) -> String =     let isEof : Bool = foreign Int "eofstdin" ()      in if isEof then Con 0 ()                  else let str : String = %effect(foreign String "readStrChunk" ())-                       in Con 1 ( str , readStr (u))+                       in primStringAppend ( str , readStr (u)) -primStringAppend (xs : Data, ys : Data) -> Data = case xs of-  { Con 0 ()                        -> ys-  | Con 1 (x : String, rest : Data) -> Con 1 (x, primStringAppend (rest, ys))-  }+primStringAppend (xs : String, ys : String) -> String = +    foreign String "append" (xs : String, ys : String) -length (xs : Data) -> Int = case xs of-  { Con 0 () -> 0-  | Con 1 (x : String, rest : Data) -> strlen(x) + length(rest)-  } -charAt (xs : Data, i : Int) -> Int = case xs of-  { Con 0 () -> error "index: out of bounds!"-  | Con 1 (x : String, rest : Data) -> -    let len : Int = strlen(x)-     in (if i < len then foreign Int "strIndex" (x : String, i : Int)-                    else charAt (rest, i - len))-  }--mkString (xs : Data) -> String = case xs of-  { Con 0 () -> ""-  | Con 1 (s : String , rest : Data) -> -    let rs : String = mkString (rest) in-    {-let rsLen : Int = strlen (rs) in-    if rsLen == 0 then s else-} foreign String "append" (s : String, rs : String)-  }+%inline length (xs : String) -> Int = strlen (xs) -frString( xs : String) -> Data = Con 1 (xs , Con 0 ())+charAt (xs : String, i : Int) -> Int = +    foreign Int "strIndex" (xs : String , i : Int) -primStringEquality (xs : Data, ys : Data) -> Bool =-    foreign Int "eqString" (mkString(xs) : String, mkString(ys) : String)+primStringEquality (xs : String, ys : String) -> Bool =+    foreign Int "eqString" (xs : String, ys : String) -charToString (c : Int) -> Data = -    Con 1 (charToStr(c), Con 0 ())-charToStr (c : Int) -> String = +charToString (c : Int) -> String  =     foreign String "charToStr" (c : Int)  strlen (s : String) -> Int = foreign Int "strlen" (s : String)  -- TODO: toList/fromList could be made slightly more efficient. -primStringToListS (xs : String) -> Data = %effect(+primStringToList (xs : String) -> Data = %effect(     let result : Data = primNil ()     in     let i      : Int  = strlen (xs) - 1 in     %while (i >= 0,@@ -90,18 +69,17 @@        unit) ;     result) -primStringToList (xs : Data) -> Data = case xs of-  { Con 0 () -> primNil ()-  | Con 1 (str : String, rest : Data) -> primListAppend(primStringToListS(str), primStringToList(rest))-  }  map (f : Any, l : Any) -> Any = case l of   { Con 0 () -> Con 0 ()   | Con 1 (x : Any, xs : Any) -> Con 1 (f (x), map (f, xs))   } -primStringFromList (l : Data) -> String = map (charToStr, l)-+primStringFromList (l : Data) -> String = +   case l of {+      Con 0 () -> ""+    | Con 1 (c : Char, cs : Data) -> strCons (c , primStringFromList(cs))+   }  strCons(i : Int , s : String) -> String =    foreign String "strCons" (i : Int, s : String)@@ -135,10 +113,10 @@ printBig (x:BigInt) -> Unit =    foreign Unit "printBig" (x:BigInt) -bigToStr (x:BigInt) -> Data =-    frString(foreign String "bigToStr" (x:BigInt))+bigToStr (x:BigInt) -> String =+    foreign String "bigToStr" (x:BigInt) -strToBig (x : Data) -> Any = foreign BigInt "strToBig" (mkString(x) : String)+strToBig (x : String) -> Any = foreign BigInt "strToBig" (x : String)  -- strToBig (x:String) -> Any = --    foreign Any "strToBig" (x:String)@@ -162,8 +140,8 @@   -primZero() -> Any = foreign BigInt "bigZero" ()-primOne() -> Any  = foreign BigInt "bigOne" ()+primZero() -> Any = 0L -- foreign BigInt "bigZero" ()+primOne() -> Any  = 1L -- foreign BigInt "bigOne" ()  primSuc (n : Any) -> Any = primNatPlus(n, primOne()) 
+ src/data/agda.sty view
@@ -0,0 +1,152 @@+% ----------------------------------------------------------------------+% Some useful commands when doing highlightning of Agda code in LaTeX.+% ----------------------------------------------------------------------++\ProvidesPackage{agda}++\usepackage{ifxetex, xcolor, polytable}++% XeLaTeX+\ifxetex+    \usepackage{polyglossia}+    \usepackage{fontspec}+    \usepackage[]{unicode-math}++% pdfLaTeX+\else+    \usepackage{ucs, amsfonts, amssymb}+    \usepackage[safe]{tipa} % See page 12 of the tipa manual for what+                            % safe does.++    % FIX: This doesn't seem to help solve the pipe problem?+    % http://tex.stackexchange.com/questions/1774/how-to-insert-pipe-symbol-in-latex+    \usepackage[T1]{fontenc}+    \usepackage[utf8x]{inputenc}++    % FIX: Complete the list and send it upstream to the ucs package devs.+    \DeclareUnicodeCharacter{9657}{$\triangleright$}+    \DeclareUnicodeCharacter{8759}{::}+    \DeclareUnicodeCharacter{8263}{$?\!?$}+    \DeclareUnicodeCharacter{737} {$^l$}  % FIX: Ugly, apparently ^r is+                                          % defined, I can't find the+                                          % definition though.+    \DeclareUnicodeCharacter{8718}{$\blacksquare$}+    \DeclareUnicodeCharacter{8255}{$\_$} % FIX: Couldn't find \undertie.+    \DeclareUnicodeCharacter{9667}{$\triangleleft$}+    \DeclareUnicodeCharacter{10218}{$\langle\!\langle$}+    \DeclareUnicodeCharacter{10219}{$\rangle\!\rangle$}+\fi++% ----------------------------------------------------------------------+% Font styles.++% Default font style.+\newcommand{\AgdaFontStyle}[1]{\textsf{#1}}++% String font style.+\newcommand{\AgdaStringFontStyle}[1]{\texttt{#1}}++% Comment font style.+\newcommand{\AgdaCommentFontStyle}[1]{\texttt{#1}}++% Bounded variables font style.+\newcommand{\AgdaBoundFontStyle}[1]{\textit{#1}}++% ----------------------------------------------------------------------+% Colours.++% Aspect colours.+\definecolor{AgdaComment}      {HTML}{B22222}+\definecolor{AgdaKeyword}      {HTML}{CD6600}+\definecolor{AgdaString}       {HTML}{B22222}+\definecolor{AgdaNumber}       {HTML}{A020F0}+\definecolor{AgdaSymbol}       {HTML}{404040}+\definecolor{AgdaPrimitiveType}{HTML}{0000CD}+\definecolor{AgdaOperator}     {HTML}{000000}++% NameKind colours.+\definecolor{AgdaBound}                 {HTML}{000000}+\definecolor{AgdaInductiveConstructor}  {HTML}{008B00}+\definecolor{AgdaCoinductiveConstructor}{HTML}{8B7500}+\definecolor{AgdaDatatype}              {HTML}{0000CD}+\definecolor{AgdaField}                 {HTML}{EE1289}+\definecolor{AgdaFunction}              {HTML}{0000CD}+\definecolor{AgdaModule}                {HTML}{A020F0}+\definecolor{AgdaPostulate}             {HTML}{0000CD}+\definecolor{AgdaPrimitive}             {HTML}{0000CD}+\definecolor{AgdaRecord}                {HTML}{0000CD}++% Other aspect colours.+\definecolor{AgdaDottedPattern}     {HTML}{000000}+\definecolor{AgdaUnsolvedMeta}      {HTML}{FFFF00}+\definecolor{AgdaTerminationProblem}{HTML}{FFA07A}+\definecolor{AgdaIncompletePattern} {HTML}{F5DEB3}+\definecolor{AgdaError}             {HTML}{FF0000}++% Misc.+\definecolor{AgdaHole}              {HTML}{9DFF9D}++% ----------------------------------------------------------------------+% Commands.++% Aspect commands.+\newcommand{\AgdaComment}     [1]+    {\AgdaCommentFontStyle{\textcolor{AgdaComment}{#1}}}+\newcommand{\AgdaKeyword}     [1]+    {\AgdaFontStyle{\textcolor{AgdaKeyword}{#1}}}+\newcommand{\AgdaString}      [1]{\AgdaStringFontStyle{\textcolor{AgdaString}{#1}}}+\newcommand{\AgdaNumber}      [1]{\textcolor{AgdaNumber}{#1}}+\newcommand{\AgdaSymbol}      [1]{\textcolor{AgdaSymbol}{#1}}+\newcommand{\AgdaPrimitiveType}[1]+    {\AgdaFontStyle{\textcolor{AgdaPrimitiveType}{#1}}}+\newcommand{\AgdaOperator}    [1]{\textcolor{AgdaOperator}{#1}}++% NameKind commands.+\newcommand{\AgdaBound}    [1]{\AgdaBoundFontStyle{\textcolor{AgdaBound}{#1}}}+\newcommand{\AgdaInductiveConstructor}[1]+    {\AgdaFontStyle{\textcolor{AgdaInductiveConstructor}{#1}}}+\newcommand{\AgdaCoinductiveConstructor}[1]+    {\AgdaFontStyle{\textcolor{AgdaCoinductiveConstructor}{#1}}}+\newcommand{\AgdaDatatype} [1]{\AgdaFontStyle{\textcolor{AgdaDatatype}{#1}}}+\newcommand{\AgdaField}    [1]{\AgdaFontStyle{\textcolor{AgdaField}{#1}}}+\newcommand{\AgdaFunction} [1]{\AgdaFontStyle{\textcolor{AgdaFunction}{#1}}}+\newcommand{\AgdaModule}   [1]{\AgdaFontStyle{\textcolor{AgdaModule}{#1}}}+\newcommand{\AgdaPostulate}[1]{\AgdaFontStyle{\textcolor{AgdaPostulate}{#1}}}+\newcommand{\AgdaPrimitive}[1]{\AgdaFontStyle{\textcolor{AgdaPrimitive}{#1}}}+\newcommand{\AgdaRecord}   [1]{\AgdaFontStyle{\textcolor{AgdaRecord}{#1}}}++% Other aspect commands.+\newcommand{\AgdaDottedPattern}     [1]{\textcolor{AgdaDottedPattern}{#1}}+\newcommand{\AgdaUnsolvedMeta}      [1]+    {\AgdaFontStyle{\colorbox{AgdaUnsolvedMeta}{#1}}}+\newcommand{\AgdaTerminationProblem}[1]+    {\AgdaFontStyle{\colorbox{AgdaTerminationProblem}{#1}}}+\newcommand{\AgdaIncompletePattern} [1]{\colorbox{AgdaIncompletePattern}{#1}}+\newcommand{\AgdaError}             [1]+    {\AgdaFontStyle{\textcolor{AgdaError}{\underline{#1}}}}++% Misc.+\newcommand{\AgdaHole}[1]{\colorbox{AgdaHole}{#1}}+\long\def\AgdaHide#1{} % Used to hide code from LaTeX.++\newcommand{\AgdaIndent}[1]{\quad}++% ----------------------------------------------------------------------+% The code environment.++\newcommand{\AgdaCodeStyle}{}+% \newcommand{\AgdaCodeStyle}{\tiny}++\ifdefined\mathindent+  {}+\else+  \newdimen\mathindent\mathindent\leftmargini+\fi++\newenvironment{code}%+{\noindent\ignorespaces\advance\leftskip\mathindent\AgdaCodeStyle\pboxed}%+{\endpboxed\par\noindent%+\ignorespacesafterend}++% Default column for polytable.+\defaultcolumn{l}
src/data/emacs-mode/agda-input.el view
@@ -20,7 +20,6 @@  (require 'quail) (require 'cl)- ;; Quail is quite stateful, so be careful when editing this code.  Note ;; that with-temp-buffer is used below whenever buffer-local state is ;; modified.@@ -570,7 +569,7 @@   ("Ge"  . ("ε"))  ("GE"  . ("Ε"))   ("Gz"  . ("ζ"))  ("GZ"  . ("Ζ"))   ;; \eta \Eta-  ("Gth" . ("θ"))  ("GTH" . ("θ"))+  ("Gth" . ("θ"))  ("GTH" . ("Θ"))   ("Gi"  . ("ι"))  ("GI"  . ("Ι"))   ("Gk"  . ("κ"))  ("GK"  . ("Κ"))   ("Gl"  . ("λ"))  ("GL"  . ("Λ"))  ("Gl-" . ("ƛ"))
src/data/emacs-mode/agda2-highlight.el view
@@ -15,6 +15,23 @@   "Syntax highlighting for Agda."   :group 'agda2) +(defcustom agda2-highlight-level 'non-interactive+  "How much syntax highlighting should be produced?+Interactive highlighting includes highlighting of the expression+that is currently being type-checked."+  :type '(choice+          (const :tag "None"            none)+          (const :tag "Non-interactive" non-interactive)+          (const :tag "Interactive"     interactive))+  :group 'agda2-highlight)++(defun agda2-highlight-level nil+  "Formats the highlighting level in a Haskelly way."+  (cond ((equal agda2-highlight-level 'none)            "None")+        ((equal agda2-highlight-level 'non-interactive) "NonInteractive")+        ((equal agda2-highlight-level 'interactive)     "Interactive")+        (t                                              "None")))+ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Functions for setting faces @@ -101,12 +118,18 @@             (agda2-highlight-unsolved-meta-face              :foreground "black"              :background "gold")+            (agda2-highlight-unsolved-constraint-face+             :foreground "black"+             :background "gold")             (agda2-highlight-termination-problem-face              :foreground "black"              :background "red")             (agda2-highlight-incomplete-pattern-face              :foreground "black"-             :background "purple")))+             :background "purple")+            (agda2-highlight-typechecks-face+             :foreground "black"+             :background "light steel blue"))) 	 ((equal group 'default-faces)           (list (cons 'agda2-highlight-keyword-face 		      (agda2-highlight-face-attributes@@ -161,41 +184,52 @@ 		       font-lock-function-name-face)) 		(cons 'agda2-highlight-error-face 		      (agda2-highlight-face-attributes-		       font-lock-warning-face)))))))+		       font-lock-warning-face))+                (cons 'agda2-highlight-typechecks-face+                      (agda2-highlight-face-attributes+                       font-lock-type-face))+                (cons 'agda2-highlight-typechecking-face+                      (agda2-highlight-face-attributes+                       font-lock-preprocessor-face)))))))  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Faces  (defcustom agda2-highlight-face-groups nil   "Colour scheme used in Agda buffers.-Note that changing this option does not remove the customisations-below; you can get them back by resetting this option and-restarting Emacs. If you are using the default-faces option and-change your colour theme the changes may not take effect in Agda-buffers until you have restarted Emacs."+Changes to this variable may not take full effect until you have+restarted Emacs. Note also that if you are using the+default-faces option and change your colour theme, then the+changes may not take effect in Agda buffers until you have+restarted Emacs."   :type '(choice-            (const :tag "Use the settings below." nil)-            (const :tag "Use an approximation of Conor McBride's colour scheme."-                   conor)-	    (const :tag "Use simplified highlighting and default font-lock faces."-                   default-faces))+          (const :tag "Use the settings in the \"Agda2 Highlight Faces\" subgroup." nil)+          (const :tag "Use an approximation of Conor McBride's colour scheme."+                 conor)+          (const :tag "Use simplified highlighting and default font-lock faces."+                 default-faces))   :group 'agda2-highlight   :set 'agda2-highlight-set-faces) +(defgroup agda2-highlight-faces nil+  "Faces used to highlight Agda code.+If `agda2-highlight-face-groups' is nil."+  :group 'agda2-highlight)+ (defface agda2-highlight-keyword-face   '((t (:foreground "DarkOrange3")))   "The face used for keywords."-  :group 'agda2-highlight)+  :group 'agda2-highlight-faces)  (defface agda2-highlight-string-face   '((t (:foreground "firebrick")))   "The face used for strings."-  :group 'agda2-highlight)+  :group 'agda2-highlight-faces)  (defface agda2-highlight-number-face   '((t (:foreground "purple")))   "The face used for numbers."-  :group 'agda2-highlight)+  :group 'agda2-highlight-faces)  (defface agda2-highlight-symbol-face   '((((background light))@@ -203,96 +237,108 @@     (((background dark))      (:foreground "gray75")))   "The face used for symbols like forall, =, ->, etc."-  :group 'agda2-highlight)+  :group 'agda2-highlight-faces)  (defface agda2-highlight-primitive-type-face   '((t (:foreground "medium blue")))   "The face used for primitive types (like Set and Prop)."-  :group 'agda2-highlight)+  :group 'agda2-highlight-faces)  (defface agda2-highlight-bound-variable-face   '((t nil))   "The face used for bound variables."-  :group 'agda2-highlight)+  :group 'agda2-highlight-faces)  (defface agda2-highlight-inductive-constructor-face   '((t (:foreground "green4")))   "The face used for inductive constructors."-  :group 'agda2-highlight)+  :group 'agda2-highlight-faces)  (defface agda2-highlight-coinductive-constructor-face   '((t (:foreground "gold4")))   "The face used for coinductive constructors."-  :group 'agda2-highlight)+  :group 'agda2-highlight-faces)  (defface agda2-highlight-datatype-face   '((t (:foreground "medium blue")))   "The face used for datatypes."-  :group 'agda2-highlight)+  :group 'agda2-highlight-faces)  (defface agda2-highlight-field-face   '((t (:foreground "DeepPink2")))   "The face used for record fields."-  :group 'agda2-highlight)+  :group 'agda2-highlight-faces)  (defface agda2-highlight-function-face   '((t (:foreground "medium blue")))   "The face used for functions."-  :group 'agda2-highlight)+  :group 'agda2-highlight-faces)  (defface agda2-highlight-module-face   '((t (:foreground "purple")))   "The face used for module names."-  :group 'agda2-highlight)+  :group 'agda2-highlight-faces)  (defface agda2-highlight-postulate-face   '((t (:foreground "medium blue")))   "The face used for postulates."-  :group 'agda2-highlight)+  :group 'agda2-highlight-faces)  (defface agda2-highlight-primitive-face   '((t (:foreground "medium blue")))   "The face used for primitive functions."-  :group 'agda2-highlight)+  :group 'agda2-highlight-faces)  (defface agda2-highlight-record-face   '((t (:foreground "medium blue")))   "The face used for record types."-  :group 'agda2-highlight)+  :group 'agda2-highlight-faces)  (defface agda2-highlight-dotted-face   '((t nil))   "The face used for dotted patterns."-  :group 'agda2-highlight)+  :group 'agda2-highlight-faces)  (defface agda2-highlight-operator-face   '((t nil))   "The face used for operators."-  :group 'agda2-highlight)+  :group 'agda2-highlight-faces)  (defface agda2-highlight-error-face   '((t (:foreground "red" :underline t)))   "The face used for errors."-  :group 'agda2-highlight)+  :group 'agda2-highlight-faces)  (defface agda2-highlight-unsolved-meta-face   '((t (:background "yellow"         :foreground "black")))   "The face used for unsolved meta variables."-  :group 'agda2-highlight)+  :group 'agda2-highlight-faces) +(defface agda2-highlight-unsolved-constraint-face+  '((t (:background "yellow"+        :foreground "black")))+  "The face used for unsolved constraints which are not connected to metas."+  :group 'agda2-highlight-faces)+ (defface agda2-highlight-termination-problem-face   '((t (:background "light salmon"         :foreground "black")))   "The face used for termination problems."-  :group 'agda2-highlight)+  :group 'agda2-highlight-faces)  (defface agda2-highlight-incomplete-pattern-face   '((t (:background "wheat"         :foreground "black")))   "The face used for incomplete patterns. (Currently unused.)"-  :group 'agda2-highlight)+  :group 'agda2-highlight-faces) +(defface agda2-highlight-typechecks-face+  '((t (:background "light blue"+        :foreground "black")))+  "The face used for code which is being type-checked."+  :group 'agda2-highlight-faces)+ (defvar agda2-highlight-faces   '((keyword                . agda2-highlight-keyword-face)     (string                 . agda2-highlight-string-face)@@ -313,8 +359,10 @@     (operator               . agda2-highlight-operator-face)     (error                  . agda2-highlight-error-face)     (unsolvedmeta           . agda2-highlight-unsolved-meta-face)+    (unsolvedconstraint     . agda2-highlight-unsolved-constraint-face)     (terminationproblem     . agda2-highlight-termination-problem-face)-    (incompletepattern      . agda2-highlight-incomplete-pattern-face))+    (incompletepattern      . agda2-highlight-incomplete-pattern-face)+    (typechecks             . agda2-highlight-typechecks-face))   "Alist mapping code aspects to the face used when displaying them.  The aspects currently recognised are the following:@@ -339,6 +387,9 @@ `string'                 Strings. `symbol'                 Symbols like forall, =, ->, etc. `terminationproblem'     Termination problems.+`typechecks'             Code which is being type-checked.+`unsolvedconstraint'     Unsolved constraints, not connected to meta+                           variables. `unsolvedmeta'           Unsolved meta variables.  The following aspect is ignored:@@ -349,22 +400,54 @@ table). The face `font-lock-comment-face' is used for comments.")  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+;; Variables++(defvar agda2-highlight-in-progress nil+  "If nil, then highlighting annotations are not applied.")+(make-variable-buffer-local 'agda2-highlight-in-progress)++;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Functions  (defun agda2-highlight-setup nil   "Set up the `annotation' library for use with `agda2-mode'."-  (font-lock-mode 0)   (setq annotation-bindings agda2-highlight-faces)) -(defun agda2-highlight-load (file &optional keep)+(defun agda2-highlight-apply (&rest cmds)+  "Adds the syntax highlighting information in the annotation list CMDS.++Old syntax highlighting information is not removed."+  (let (;; Ignore read-only status, otherwise this function may fail.+        (inhibit-read-only t))+    (apply 'annotation-load+           "Click mouse-2 to jump to definition"+           cmds)))++(defun agda2-highlight-add-annotations (&rest cmds)+  "Like `agda2-highlight-apply'.+But only if `agda2-highlight-in-progress' is non-nil."+  (if agda2-highlight-in-progress+      (apply 'agda2-highlight-apply cmds)))++(defun agda2-highlight-load (file)   "Load syntax highlighting information from FILE.-Old syntax highlighting information is first removed, unless KEEP++Old syntax highlighting information is not removed."+  (let* ((coding-system-for-read 'utf-8)+         (cmds (with-temp-buffer+                 (insert-file-contents file)+                 (goto-char (point-min))+                 (read (current-buffer)))))+      (apply 'agda2-highlight-apply cmds)))++(defun agda2-highlight-load-and-delete-action (file)+  "Like `agda2-highlight-load', but deletes FILE when done.+And highlighting is only updated if `agda2-highlight-in-progress' is non-nil."-  (let ((coding-system-for-read 'utf-8)-        ;; Ignore read-only status, otherwise this function may fail.-        (inhibit-read-only t))-    (annotation-load-file file (lambda (anns) (not keep))-                          "Click mouse-2 to jump to definition")))+  (unwind-protect+      (if agda2-highlight-in-progress+          (agda2-highlight-load file))+    (delete-file file)))  (defun agda2-highlight-clear nil   "Remove all syntax highlighting added by `agda2-highlight-reload'."
src/data/emacs-mode/agda2-mode.el view
@@ -10,52 +10,51 @@  ;;; Code: -(defvar agda2-version "2.3.0"+(defvar agda2-version "2.3.2"   "The version of the Agda mode.-Note that, by default, the same version of the underlying Haskell-library is used (see `agda2-ghci-options').")+Note that the same version of the Agda executable must be used.")  (require 'cl) (set (make-local-variable 'lisp-indent-function)      'common-lisp-indent-function)-(require 'comint)+(require 'compile) (require 'pp)+(require 'time-date) (require 'eri) (require 'annotation) (require 'agda-input) (require 'agda2-highlight) (require 'agda2-abbrevs)-(require 'haskell-ghci)-;; due to a bug in haskell-mode-2.1-(setq haskell-ghci-mode-map (copy-keymap comint-mode-map))-;; Load filladapt, if it is installed.-(condition-case nil-    (require 'filladapt)-  (error nil))-(unless (fboundp 'overlays-in) (load "overlay")) ; for Xemacs-(unless (fboundp 'propertize)                    ; for Xemacs 21.4- (defun propertize (string &rest properties)-  "Return a copy of STRING with text properties added.+(require 'agda2-queue)+(eval-and-compile+  ;; Load filladapt, if it is installed.+  (condition-case nil+      (require 'filladapt)+    (error nil))+  (unless (fboundp 'overlays-in) (load "overlay")) ; for Xemacs+  (unless (fboundp 'propertize)                    ; for Xemacs 21.4+    (defun propertize (string &rest properties)+      "Return a copy of STRING with text properties added. First argument is the string to copy. Remaining arguments form a sequence of PROPERTY VALUE pairs for text properties to add to the result."-  (let ((str (copy-sequence string)))-    (add-text-properties 0 (length str) properties str)-    str)))-(unless (fboundp 'run-mode-hooks)-  (fset 'run-mode-hooks 'run-hooks))  ; For Emacs versions < 21.+      (let ((str (copy-sequence string)))+        (add-text-properties 0 (length str) properties str)+        str)))+  (unless (fboundp 'run-mode-hooks)+    (fset 'run-mode-hooks 'run-hooks))  ; For Emacs versions < 21.+  (unless (fboundp 'cl-labels)+    (fset 'cl-labels 'labels))  ; For Emacs versions < 24.2.+  (unless (fboundp 'cl-flet)+    (fset 'cl-flet 'flet)))  ; For Emacs versions < 24.2.  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;; Utilities -(defmacro agda2-protect (form &optional default)-  "Expands to (condition-case nil FORM (error DEFAULT))."-  `(condition-case nil ,form (error ,default)))-(put 'agda2-protect 'lisp-indent-function 0)- (defmacro agda2-let (varbind funcbind &rest body)-  "Expands to (let* VARBIND (labels FUNCBIND BODY...))."-  `(let* ,varbind (labels ,funcbind ,@body)))+  "Expands to (let* VARBIND (cl-labels FUNCBIND BODY...)).+Or possibly (let* VARBIND (labels FUNCBIND BODY...))."+  `(let* ,varbind (cl-labels ,funcbind ,@body))) (put 'agda2-let 'lisp-indent-function 2)  (defun agda2-chunkify (n xs)@@ -85,6 +84,21 @@   :type '(repeat directory)   :group 'agda2) +(defcustom agda2-program-name "agda"+  "The name of the Agda executable."+  :type 'string+  :group 'agda2)++(defcustom agda2-program-args nil+  "Command-line arguments given to the Agda executable (one per string).++Note: Do not give several arguments in the same string.++The flag \"--interaction\" is always included as the first+argument, and does not need to be listed here."+  :type '(repeat string)+  :group 'agda2)+ (defcustom agda2-backend   "MAlonzo"   "The backend which is used to compile Agda programs."@@ -93,25 +107,13 @@                  (const "JS"))   :group 'agda2) -(defcustom agda2-ghci-options-  (list (concat "-package Agda-" agda2-version))-  "Options set in GHCi before loading `agda2-toplevel-module'.-Note that only dynamic options can be set using this variable."-  :type '(repeat string)-  :group 'agda2)- (defcustom agda2-toplevel-module "Agda.Interaction.GhciTop"   "The name of the Agda toplevel module."   :type 'string :group 'agda2) -(defcustom agda2-mode-hook-  '(agda2-fix-ghci-for-windows)-  "Hooks for `agda2-mode'."-  :type 'hook :group 'agda2)- (defcustom agda2-information-window-max-height   0.35-  "*The maximum height of the information window.+  "The maximum height of the information window. A multiple of the frame height."   :type 'number   :group 'agda2)@@ -181,11 +183,6 @@ (if (and (equal agda2-fontset-name "fontset-agda2") window-system)     (create-fontset-from-fontset-spec agda2-fontset-spec-of-fontset-agda2 t t)) -(defun agda2-fix-ghci-for-windows ()-  (if (string-match "windows" system-configuration)-      (setq haskell-ghci-program-name "ghc"-            haskell-ghci-program-args '("--interactive"))))- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;; Global and buffer-local vars, initialization @@ -223,29 +220,31 @@  (defconst agda2-command-table   `(-    (agda2-load                              "\C-c\C-l"         (global)       "Load")+    (agda2-load                              "\C-c\C-l"           (global)       "Load")     (agda2-load                              "\C-c\C-x\C-l")-    (agda2-compile                           "\C-c\C-x\C-c"     (global)       "Compile")-    (agda2-quit                              "\C-c\C-x\C-q"     (global)       "Quit")-    (agda2-restart                           "\C-c\C-x\C-r"     (global)       "Restart")-    (agda2-remove-annotations                "\C-c\C-x\C-d"     (global)       "Remove goals and highlighting (\"deactivate\")")-    (agda2-display-implicit-arguments        "\C-c\C-x\C-h"     (global)       "Toggle display of hidden arguments")-    (agda2-show-constraints                  ,(kbd "C-c C-=")   (global)       "Show constraints")-    (agda2-solveAll                          ,(kbd "C-c C-s")   (global)       "Solve constraints")-    (agda2-show-goals                        ,(kbd "C-c C-?")   (global)       "Show goals")-    (agda2-next-goal                         "\C-c\C-f"         (global)       "Next goal") ; Forward.-    (agda2-previous-goal                     "\C-c\C-b"         (global)       "Previous goal") ; Back.-    (agda2-give                              ,(kbd "C-c C-SPC") (local)        "Give")-    (agda2-refine                            "\C-c\C-r"         (local)        "Refine")-    (agda2-auto                              "\C-c\C-a"         (local)        "Auto")-    (agda2-make-case                         "\C-c\C-c"         (local)        "Case")-    (agda2-goal-type                         "\C-c\C-t"         (local)        "Goal type")-    (agda2-show-context                      "\C-c\C-e"         (local)        "Context (environment)")-    (agda2-infer-type-maybe-toplevel         "\C-c\C-d"         (local global) "Infer (deduce) type")-    (agda2-goal-and-context                  ,(kbd "C-c C-,")   (local)        "Goal type and context")-    (agda2-goal-and-context-and-inferred     ,(kbd "C-c C-.")   (local)        "Goal type, context and inferred type")-    (agda2-module-contents-maybe-toplevel    ,(kbd "C-c C-o")   (local global) "Module contents")-    (agda2-compute-normalised-maybe-toplevel "\C-c\C-n"         (local global) "Evaluate term to normal form")+    (agda2-compile                           "\C-c\C-x\C-c"       (global)       "Compile")+    (agda2-quit                              "\C-c\C-x\C-q"       (global)       "Quit")+    (agda2-restart                           "\C-c\C-x\C-r"       (global)       "Kill and restart Agda")+    (agda2-remove-annotations                "\C-c\C-x\C-d"       (global)       "Remove goals and highlighting (\"deactivate\")")+    (agda2-display-implicit-arguments        "\C-c\C-x\C-h"       (global)       "Toggle display of hidden arguments")+    (agda2-show-constraints                  ,(kbd "C-c C-=")     (global)       "Show constraints")+    (agda2-solveAll                          ,(kbd "C-c C-s")     (global)       "Solve constraints")+    (agda2-show-goals                        ,(kbd "C-c C-?")     (global)       "Show goals")+    (agda2-next-goal                         "\C-c\C-f"           (global)       "Next goal") ; Forward.+    (agda2-previous-goal                     "\C-c\C-b"           (global)       "Previous goal") ; Back.+    (agda2-give                              ,(kbd "C-c C-SPC")   (local)        "Give")+    (agda2-refine                            "\C-c\C-r"           (local)        "Refine")+    (agda2-auto                              "\C-c\C-a"           (local)        "Auto")+    (agda2-make-case                         "\C-c\C-c"           (local)        "Case")+    (agda2-goal-type                         "\C-c\C-t"           (local)        "Goal type")+    (agda2-show-context                      "\C-c\C-e"           (local)        "Context (environment)")+    (agda2-infer-type-maybe-toplevel         "\C-c\C-d"           (local global) "Infer (deduce) type")+    (agda2-goal-and-context                  ,(kbd "C-c C-,")     (local)        "Goal type and context")+    (agda2-goal-and-context-and-inferred     ,(kbd "C-c C-.")     (local)        "Goal type, context and inferred type")+    (agda2-module-contents-maybe-toplevel    ,(kbd "C-c C-o")     (local global) "Module contents")+    (agda2-compute-normalised-maybe-toplevel "\C-c\C-n"           (local global) "Evaluate term to normal form")+    (describe-char                           nil                  (global)       "Information about the character at point")+    (agda2-comment-dwim-rest-of-buffer       ,(kbd "C-c C-x M-;") (global)       "Comment/uncomment the rest of the buffer")     (eri-indent                  ,(kbd "TAB"))     (eri-indent-reverse          [S-iso-lefttab])     (eri-indent-reverse          [S-lefttab])@@ -286,14 +285,28 @@     map)   "Keymap for agda2 goal menu.") -(defvar agda2-buffer  nil "Agda subprocess buffer.  Set in `agda2-restart'.")-(defvar agda2-process nil "Agda subprocess.  Set in `agda2-restart'.")+(defvar agda2-info-buffer nil+  "Agda information buffer.") +(defvar agda2-process-buffer nil+  "Agda subprocess buffer.+Set in `agda2-restart'.")++(defvar agda2-process nil+  "Agda subprocess.+Set in `agda2-restart'.")++(defvar agda2-in-progress nil+  "Is the Agda process currently busy?")+ ;; Some buffer locals (defvar agda2-buffer-external-status ""   "External status of an `agda2-mode' buffer (dictated by the Haskell side).") (make-variable-buffer-local 'agda2-buffer-external-status) +(defvar agda2-output-prompt "Agda2> "+  "The Agda2 buffer's prompt.")+ (defconst agda2-help-address   ""   "Address accepting submissions of bug reports and questions.")@@ -320,6 +333,39 @@ ;; reference. If the agda2-*-brace definitions were inlined, then ;; goals would be displayed as "{{ }}n" instead of "{ }n". +(defvar agda2-measure-data nil+  "Used by `agda2-measure-load-time'.+This value is either nil or a pair containing a continuation (or+nil) and the time at which the measurement was started.")+(make-variable-buffer-local 'agda2-measure-data)++;; The following variables are used by the filter process,+;; `agda2-output-filter'. Their values are only modified by the filter+;; process, `agda2-go', `agda2-restart', and+;; `agda2-abort-highlighting'.++(defvar agda2-responses-expected nil+  "Is the Agda process expected to produce at least one response?")+(make-variable-buffer-local 'agda2-responses-expected)++(defvar agda2-responses 0+  "The number of encountered response commands.")+(make-variable-buffer-local 'agda2-responses)++(defvar agda2-output-chunk-incomplete (agda2-queue-empty)+  "Buffer for incomplete lines.+\(See `agda2-output-filter'.)")+(make-variable-buffer-local 'agda2-output-chunk-incomplete)++(defvar agda2-last-responses nil+  "Response commands which should be run after other commands.+The command which arrived last is stored first in the list.")+(make-variable-buffer-local 'agda2-last-responses)++(defvar agda2-file-buffer nil+  "The Agda buffer.+Note that this variable is not buffer-local.")+ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;; agda2-mode @@ -328,10 +374,12 @@ ;;;###autoload (modify-coding-system-alist 'file "\\.l?agda\\'" 'utf-8) ;;;###autoload-(define-derived-mode agda2-mode nil "Agda"- "Major mode for Agda files.+(eval `(define-derived-mode agda2-mode+  ,(if (fboundp 'prog-mode) 'prog-mode)+  "Agda"+  "Major mode for Agda files. -The following paragraph does not apply to Emacs 23.+The following paragraph does not apply to Emacs 23 or newer.    Note that when this mode is activated the default font of the   current frame is changed to the fontset `agda2-fontset-name'.@@ -343,6 +391,19 @@  Special commands: \\{agda2-mode-map}"++ ;; Check that the right version of Agda is used.+ (let* ((coding-system-for-read 'utf-8)+        (output (with-output-to-string+                  (call-process agda2-program-name+                                nil standard-output nil "--version")))+        (version (and (string-match "^Agda version \\([0-9.]+\\)$" output)+                      (match-string 1 output))))+   (unless (equal version agda2-version)+     (error "The Agda mode's version (%s) does not match that of %s (%s)."+            agda2-version+            agda2-program-name (or version "unknown"))))+  (setq local-abbrev-table agda2-mode-abbrev-table        indent-tabs-mode   nil        mode-line-process@@ -355,141 +416,265 @@      (condition-case nil          (set-frame-font agda2-fontset-name)        (error (error "Unable to change the font; change agda2-fontset-name or tweak agda2-fontset-spec-of-fontset-agda2"))))- ;; If GHCi is not running syntax highlighting does not work properly.+ ;; Deactivate highlighting if the buffer is edited before+ ;; typechecking is complete.+ (add-hook 'first-change-hook 'agda2-abort-highlighting nil 'local)+ ;; If Agda is not running syntax highlighting does not work properly.  (unless (eq 'run (agda2-process-status))    (agda2-restart))  (agda2-highlight-setup)- (agda2-highlight-reload)+ (condition-case err+     (agda2-highlight-reload)+   (error (message "Highlighting not loaded: %s"+                   (error-message-string err))))  (agda2-comments-and-paragraphs-setup)  (force-mode-line-update)  ;; Protect global value of default-input-method from set-input-method.  (make-local-variable 'default-input-method)  (set-input-method "Agda")- ;; Highlighting is removed when we switch from the Agda mode. Use- ;; case: When a file M.lagda with a local variables list including- ;; "mode: latex" is loaded chances are that the Agda mode is- ;; activated before the LaTeX mode, and the LaTeX mode does not seem- ;; to remove the text properties set by the Agda mode.- (add-hook (make-local-variable 'change-major-mode-hook)-           'agda2-remove-annotations))+ ;; Highlighting etc. is removed when we switch from the Agda mode.+ ;; Use case: When a file M.lagda with a local variables list+ ;; including "mode: latex" is loaded chances are that the Agda mode+ ;; is activated before the LaTeX mode, and the LaTeX mode does not+ ;; seem to remove the text properties set by the Agda mode.+ (add-hook 'change-major-mode-hook 'agda2-quit nil 'local)))  (defun agda2-restart ()-  "Kill and restart the *ghci* buffer and load `agda2-toplevel-module'."+  "Kill and restart the *agda2* buffer and load `agda2-toplevel-module'."   (interactive)-  (save-excursion (let ((agda2-bufname "*ghci*")-                        (ignore-dot-ghci "-ignore-dot-ghci"))-                    (agda2-protect-                      (progn-                        ;; GHCi doesn't always die when its buffer is-                        ;; killed, so GHCi is killed before the buffer-                        ;; is.-                        (set-buffer agda2-bufname)-                        (agda2-protect (comint-kill-subjob))-                        (kill-buffer agda2-bufname)))-                    ;; Make sure that the user's .ghci is not read.-                    ;; Users can override this by adding-                    ;; "-read-dot-ghci" to-                    ;; `haskell-ghci-program-args'.-                    (unless (equal (car-safe haskell-ghci-program-args)-                                   ignore-dot-ghci)-                      (set (make-local-variable 'haskell-ghci-program-args)-                           (cons ignore-dot-ghci haskell-ghci-program-args)))-                    (haskell-ghci-start-process nil)-                    (setq agda2-process  haskell-ghci-process-                          agda2-buffer   haskell-ghci-process-buffer-                          mode-name "Agda GHCi")-                    (set (make-local-variable 'comint-input-sender)-                         'agda2-send)-                    (set-buffer-file-coding-system 'utf-8)-                    (set-buffer-process-coding-system 'utf-8 'utf-8)-                    (rename-buffer agda2-bufname)-                    (set-process-query-on-exit-flag agda2-process nil)))-  (apply 'agda2-call-ghci ":set" agda2-ghci-options)-  (agda2-call-ghci ":mod +" agda2-toplevel-module)+  (save-excursion (let ((agda2-bufname "*agda2*"))+                    (condition-case nil+                      (agda2-term)+                      (error nil))++                    ;; Start the Agda2 process in a new buffer.+                    (message "Starting agda process `%s'." agda2-program-name)+                    (let ((process-connection-type nil)) ; pipes are faster than PTYs+                      (apply 'start-process "Agda2" agda2-bufname+                             agda2-program-name+                             (cons "--interaction" agda2-program-args)))++                    ;; Select agda buffer temporarily.+                    (with-current-buffer agda2-bufname+                      (setq process-adaptive-read-buffering t)++                      ;; Clear message area.+                      (message "")++                      (setq agda2-process        (get-buffer-process agda2-bufname)+                            agda2-process-buffer (process-buffer agda2-process)+                            agda2-in-progress    nil+                            mode-name            "Agda executable"+                            agda2-last-responses nil)+                      (set-buffer-file-coding-system 'utf-8)+                      (set-buffer-process-coding-system 'utf-8 'utf-8)+                      (set-process-query-on-exit-flag agda2-process nil))))+  (setq agda2-file-buffer (current-buffer))+  (set-process-filter agda2-process 'agda2-output-filter)   (agda2-remove-annotations))  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;; Communicating with Agda -(defun agda2-raise-ghci-error ()+(defun agda2-raise-error ()   "Raises an error.-The error message directs the user to the *ghci* buffer."-  (error "Problem encountered. The *ghci* buffer can perhaps explain why."))+The error message directs the user to the *agda2* buffer."+  (error "Problem encountered. The *agda2* buffer can perhaps explain why.")) -(defun agda2-send (proc s)-  "Sends the string S to PROC.-Splits up S into small chunks and sends them one after the other,-because when GHCi is used in shell buffers it chokes on overly-long strings (some versions of GHCi, on some systems)."-  (let* ((chunk-size 200))-    (dolist (chunk (agda2-chunkify chunk-size s))-      (comint-send-string proc chunk)))-  (comint-send-string proc "\n"))+(defun agda2-running-p nil+  "Does the *agda2* buffer exist, and is the Agda2 process running?"+  (and (buffer-live-p agda2-process-buffer)+       (eq (agda2-process-status) 'run))) -(defun agda2-call-ghci (&rest args)-  "Executes commands in GHCi.-Sends the list of strings ARGS to GHCi, waits for output and-returns the responses."-  (unless (eq 'run (agda2-process-status))+(defun agda2-send-command (restart &rest args)+  "Send a command to the Agda2 asyncronous process.  Saves the buffer+and sends the list of strings ARGS to Agda2.  If RESTART is non-nil+and the Agda2 process is not running, or the *agda2* buffer does not+exist, then an attempt is made to restart the process."+  (save-buffer)+  (when (and restart (not (agda2-running-p)))     ;; Try restarting automatically, but only once, in case there is     ;; some major problem.     (agda2-restart)-    (unless (eq 'run (agda2-process-status))-      (agda2-raise-ghci-error)))-  (save-excursion-    ;; By setting local-enable-local-variables to nil the call to-    ;; hack-local-variables in haskell-ghci-go becomes more or less a-    ;; no-op. (Note that hack-local-variables can interfere with the-    ;; setup of a mode, because it can potentially perform the setup-    ;; of another mode...)-    (let ((local-enable-local-variables nil))-      (haskell-ghci-go (apply 'concat (agda2-intersperse " " args))-                       nil)))-  (let (response)-    (with-current-buffer haskell-ghci-process-buffer-      (haskell-ghci-wait-for-output)-      (let ((tempfile (make-temp-file "agda2-mode")))-        (unwind-protect-            (let ((coding-system-for-read 'utf-8)-                  (coding-system-for-write 'utf-8))-              (comint-write-output tempfile)-              (with-temp-buffer-                (insert-file-contents tempfile)-                (setq response (buffer-substring-no-properties-                                (point-min) (point-max)))))-          (delete-file tempfile))))-    response))+    (unless (agda2-running-p)+      (agda2-raise-error)))+  (let ((command (apply 'concat (agda2-intersperse " " args))))+    (with-current-buffer agda2-process-buffer+      (goto-char (point-max))+      (insert command)+      (insert "\n")+      (process-send-string agda2-process (concat command "\n"))))) +(defun agda2-abort-if-in-progress ()+  "Raise an error if the Agda process is (thought to be) busy."+  (when agda2-in-progress+    (error "Another command is currently in progress+\(if a command has been aborted you may want to restart Agda)")))+ (defun agda2-go (responses-expected highlight &rest args)-  "Executes commands in GHCi.-Sends the list of strings ARGS to GHCi, waits for output and-executes the responses, if any. If no responses are received, and-RESPONSES-EXPECTED is non-nil, then an error is raised; otherwise-the syntax highlighting information is reloaded (unless HIGHLIGHT-is nil; if HIGHLIGHT is a string, then highlighting info is read-from the corresponding file)."-  (let* ((highlighting-temp (and highlight (not (stringp highlight))))-         (highlighting (cond ((stringp highlight) highlight)-                             (highlighting-temp (make-temp-file "agda2-mode")))))-        (unwind-protect-            (let ((responses-                   (agda2-read-responses-                    (apply 'agda2-call-ghci-                           "ioTCM"-                           (agda2-string-quote (buffer-file-name))-                           (if highlighting-temp-                               (concat "(Just "-                                       (agda2-string-quote highlighting)-                                       ")")-                             "Nothing")-                           "("-                           (append args '(")"))))))-                (when (and responses-expected (null responses))-                  (agda2-raise-ghci-error))-                (if highlight (agda2-highlight-load highlighting))-                (agda2-exec-responses responses))-          (if highlighting-temp (delete-file highlighting)))))+  "Executes commands in the Agda2 interpreter.+Sends the list of strings ARGS to the Agda2 interpreter, waits for+output and executes the responses, if any. If no responses are+received, and RESPONSES-EXPECTED is non-nil, then an error is+raised. If HIGHLIGHT is non-nil, then the buffer's syntax+highlighting may be updated." +  (agda2-abort-if-in-progress)++  (setq agda2-in-progress             t+        agda2-highlight-in-progress   highlight+        agda2-responses-expected      responses-expected+        agda2-responses               0+        agda2-output-chunk-incomplete (agda2-queue-empty)+        agda2-file-buffer             (current-buffer))++  (apply 'agda2-send-command+         'restart+         "IOTCM"+         (agda2-string-quote (buffer-file-name))+         (if highlight (agda2-highlight-level) "None")+         "Indirect"+         "("+         (append args '(")"))))+++(defun agda2-output-filter (proc chunk)+  "Evaluate the Agda process's commands.+This filter function assumes that every line contains either some+kind of error message (which cannot be parsed as a list), or+exactly one command. Incomplete lines are stored in a+buffer (`agda2-output-chunk-incomplete').++Every command is run by this function, unless it has the form+\"(('last . priority) . cmd)\", in which case it is run by+`agda2-run-last-commands' at the end, after the Agda2 prompt+has reappeared, after all non-last commands, and after all+interactive highlighting is complete. The last commands can have+different integer priorities; those with the lowest priority are+executed first.++Non-last commands should not call the Agda process.++All commands are echoed to the *agda2* buffer, with the exception+of commands of the form \"(agda2-highlight-... ...)\".++The non-last commands are run in the order in which they appear.++When the prompt has been reached an error is raised if+`agda2-responses-expected' is non-nil and no commands have+arrived. Otherwise highlighting annotations are+reloaded from `agda2-highlighting-file', unless+`agda2-highlighting-in-progress' is nil."+++  (let (;; The input lines in the current chunk.+        (lines (split-string chunk "\n"))++        ;; Non-last commands found in the current chunk (reversed).+        (non-last-commands ())++        ;; Last incomplete line, if any.+        (output-chunk-incomplete ""))+    (with-current-buffer agda2-file-buffer+      (when (consp lines)+        (agda2-queue-enqueue agda2-output-chunk-incomplete (pop lines))+        (when (consp lines)+          ;; The previous uncomplete chunk is now complete.+          (push (agda2-queue-to-string agda2-output-chunk-incomplete)+                lines)++          ;; Stash away the last incomplete line, if any. (Note that+          ;; (split-string "...\n" "\n") evaluates to (... "").)+          (setq output-chunk-incomplete (car (last lines))+                agda2-output-chunk-incomplete+                (agda2-queue-from-string output-chunk-incomplete))++          ;; Handle every complete line.+          (dolist (line (butlast lines))+            (let* (;; The command. Lines which cannot be parsed as a single+                   ;; list, without any junk, are ignored.+                   (cmd (condition-case nil+                            (let ((result (read-from-string line)))+                              (if (and (listp (car result))+                                       (= (cdr result) (length line)))+                                  (car result)))+                          (error nil))))++              (when cmd+                (unless (and (symbolp (car cmd))+                             (let ((case-fold-search nil))+                             (string-match "^agda2-highlight-"+                                           (symbol-name (car cmd)))))+                    ;; Do not echo highlighting commands.+                  (with-current-buffer agda2-process-buffer+                    (insert line)+                    (insert "\n"))+                  (incf agda2-responses))+                (if (equal 'last (car-safe (car cmd)))+                    (push (cons (cdr (car cmd)) (cdr cmd))+                          agda2-last-responses)+                  (push cmd non-last-commands)))))++          ;; Run non-last commands.+          (mapc 'agda2-exec-response (nreverse non-last-commands)))++        ;; Check if the prompt has been reached. This function assumes+        ;; that the prompt does not include any newline characters.+        (when (agda2-queue-is-prefix-of agda2-output-prompt+                                        agda2-output-chunk-incomplete)+          (with-current-buffer agda2-process-buffer+            (insert output-chunk-incomplete))+          (setq agda2-output-chunk-incomplete (agda2-queue-empty)+                agda2-in-progress nil+                agda2-last-responses (nreverse agda2-last-responses))++          (when (and agda2-responses-expected+                     (equal agda2-responses 0))+            (agda2-raise-error))++          (agda2-run-last-commands)++          (when agda2-measure-data+            (let ((elapsed+                   (format "%.2fs"+                           (float-time (time-since+                                        (cdr agda2-measure-data)))))+                  (continuation (car agda2-measure-data)))+              (setq agda2-measure-data nil)+              (message "Load time: %s." elapsed)+              (when continuation+                (funcall continuation elapsed)))))))))++(defun agda2-run-last-commands nil+  "Execute the last commands in the right order.+\(After the prompt has reappeared.) See `agda2-output-filter'."++  ;; with-current-buffer is used repeatedly below, because some last+  ;; commands may switch the focus to another buffer.++  (while (with-current-buffer agda2-file-buffer+           (and (not agda2-in-progress) (consp agda2-last-responses)))+    (with-current-buffer agda2-file-buffer+      ;; The list is sorted repeatedly because this function may be+      ;; called recursively (via `agda2-exec-response').+      (setq agda2-last-responses (sort agda2-last-responses+                                       (lambda (x y) (<= (car x) (car y)))))+      (let ((r (pop agda2-last-responses)))+        (agda2-exec-response (cdr r)))))++  ;; Unset agda2-highlight-in-progress when all the asynchronous+  ;; commands have terminated.+  (unless agda2-in-progress+      (setq agda2-highlight-in-progress nil)))++(defun agda2-abort-highlighting nil+  "Abort any interactive highlighting.+This function should be used in `first-change-hook'."+  (when agda2-highlight-in-progress+    (setq agda2-highlight-in-progress nil)+    (message "\"%s\" has been modified. Interrupting highlighting."+             (buffer-name (current-buffer)))))+ (defun agda2-goal-cmd (cmd &optional want ask &rest args)   "Reads input from goal or minibuffer and sends command to Agda. @@ -529,33 +714,16 @@              (if input-from-goal (agda2-goal-Range o) "noRange")              (agda2-string-quote txt) args)))) -(defun agda2-read-responses (response)-  "Returns a list containing the responses in the response string.-Responses of the form (last . actual-response) are placed last in-the returned list, with last stripped."-  (let ((responses)-        (former)-        (latter))-    (while (string-match "agda2_mode_code" response)-      (setq response (substring response (match-end 0)))-      (push (read response) responses))-    (dolist (r responses (append former latter))-      (if (and (consp r) (equal (car r) 'last))-          (push (cdr r) latter)-        (push r former)))))- ;; Note that the following function is a security risk, since it ;; evaluates code without first inspecting it. The code (supposedly) ;; comes from the Agda backend, but there could be bugs in the backend ;; which can be exploited by an attacker which manages to trick ;; someone into type-checking compromised Agda code. -(defun agda2-exec-responses (responses)-  "Interprets responses."-  (mapc (lambda (r)-          (let ((inhibit-read-only t))-            (eval r)))-          responses))+(defun agda2-exec-response (response)+  "Interprets response."+  (let ((inhibit-read-only t))+    (eval response)))  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;; User commands and response processing@@ -563,17 +731,39 @@ (defun agda2-load ()   "Load current buffer."   (interactive)-  (agda2-go t t "cmd_load"+  (agda2-go t t "Cmd_load"             (agda2-string-quote (buffer-file-name))             (agda2-list-quote agda2-include-dirs)             )) +(defun agda2-measure-load-time+  (&optional highlighting-level dont-touch continuation)+  "Load the current buffer and print how much time it takes.+\(Wall-clock time.)++The given HIGHLIGHTING-LEVEL is used (if non-nil).++The file is first saved and \"touched\", unless DONT-TOUCH is+non-nil.++If CONTINUATION is non-nil, then CONTINUATION is applied to the+resulting time (represented as a string)."+  (interactive)+  (agda2-abort-if-in-progress)+  (unless dont-touch+    (save-buffer)+    (shell-command (concat "touch \"" (buffer-file-name) "\"")))+  (let* ((agda2-highlight-level+          (or highlighting-level agda2-highlight-level)))+    (setq agda2-measure-data (cons continuation (current-time)))+    (agda2-load)))+ (defun agda2-compile ()   "Compile the current module.  The variable `agda2-backend' determines which backend is used."   (interactive)-  (agda2-go t t "cmd_compile"+  (agda2-go t t "Cmd_compile"             agda2-backend             (agda2-string-quote (buffer-file-name))             (agda2-list-quote agda2-include-dirs)@@ -581,34 +771,40 @@  (defun agda2-give()   "Give to the goal at point the expression in it" (interactive)-  (agda2-goal-cmd "cmd_give" "expression to give"))+  (agda2-goal-cmd "Cmd_give" "expression to give"))  (defun agda2-give-action (old-g paren)   "Update the goal OLD-G with the expression in it."   (agda2-update old-g paren)) -(defun agda2-refine ()+(defun agda2-refine (pmlambda)   "Refine the goal at point. If the goal contains an expression e, and some \"suffix\" of the type of e unifies with the goal type, then the goal is replaced by e applied to a suitable number of new goals. +PMLAMBDA is only used if the goal has a functional type.+When the prefix argument is given a pattern maching lambda will+be inserted, otherwise a standard lambda will be used.+ If the goal is empty, the goal type is a data type, and there is exactly one constructor which unifies with this type, then the goal is replaced by the constructor applied to a suitable number of new goals."-  (interactive)-  (agda2-goal-cmd "cmd_refine_or_intro" 'goal))+  (interactive "P")+  (if pmlambda+      (agda2-goal-cmd "Cmd_refine_or_intro True" 'goal)+    (agda2-goal-cmd "Cmd_refine_or_intro False" 'goal)))  (defun agda2-auto ()  "Simple proof search" (interactive)- (agda2-goal-cmd "cmd_auto" 'goal))+ (agda2-goal-cmd "Cmd_auto" 'goal))  (defun agda2-make-case ()-  "Refine the pattern var given in the goal.-Assumes that <clause> = {!<var>!} is on one line."+  "Refine the pattern variables given in the goal.+Assumes that <clause> = {!<variables>!} is on one line."   (interactive)-  (agda2-goal-cmd "cmd_make_case" "pattern var to case"))+  (agda2-goal-cmd "Cmd_make_case" "pattern variables to case"))  (defun agda2-make-case-action (newcls)   "Replace the line at point with new clauses NEWCLS and reload."@@ -630,17 +826,22 @@ (defun agda2-make-case-action-extendlam (newcls)   "Replace definition of extended lambda with new clauses NEWCLS and reload."   (agda2-forget-all-goals);; we reload later anyway.-  (let* ((p (+ (re-search-backward "\\({[^!]\\)\\|;") 1))-         cl)-    (goto-char p)-    (delete-region p (- (re-search-forward "\\([^!]}\\)\\|;") 1))-    (goto-char p)-    (insert "  ")-    (goto-char (+ p 1))-    (while (setq cl (pop newcls))-      (insert cl)-      (if newcls (insert " ; ")))-    (goto-char p))+  (let* ((pmax (- (re-search-forward "\\([^!]}\\)\\|;") 1))+	 (bracketCount 0)+	 cl)+    (re-search-backward "{!")+      (while (and (not (equal (preceding-char) ?;)) (>= bracketCount 0))+	(backward-char)+	(if (equal (preceding-char) ?}) (incf bracketCount))+	(if (equal (preceding-char) ?{) (decf bracketCount)))+    (let ((p (point)))+      (delete-region (point) pmax)+      (insert " ")+      (while (setq cl (pop newcls))+	(insert cl)+	(if newcls (insert " ; ")))+      (insert " ")+      (goto-char p)))   (agda2-load))  (defun agda2-status-action (status)@@ -649,49 +850,70 @@ major mode)."   (setq agda2-buffer-external-status status)) -(defun agda2-info-action (name text)-  "Insert TEXT into the Agda info buffer, display it, and display NAME-in the buffer's mode line."-  (interactive)-  (with-current-buffer (get-buffer-create "*Agda information*")-    (erase-buffer)-    (insert text)-    (set-syntax-table agda2-mode-syntax-table)-    (set-input-method "Agda")+(defun agda2-info-buffer nil+  "Creates the Agda info buffer, if it does not already exist.+The buffer is returned."+  (unless (buffer-live-p agda2-info-buffer)+    (setq agda2-info-buffer+          (generate-new-buffer "*Agda information*")) -    ;; Support for jumping to positions mentioned in the text.-    (set (make-local-variable 'compilation-error-regexp-alist)-         '(("\\([\\\\/][^[:space:]]*\\):\\([0-9]+\\),\\([0-9]+\\)-\\(\\([0-9]+\\),\\)?\\([0-9]+\\)"-            1 (2 . 5) (3 . 6))))-    ;; No support for recompilation. An attempt to recompile via the-    ;; info buffer (using "g") will (most likely) lead to a (dynamic)-    ;; type error. (The default is to run "make -k".)-    (set (make-local-variable 'compile-command)-         'agda2-does-not-support-compilation-via-the-compilation-minor-mode)-    (compilation-minor-mode 1)+    (with-current-buffer agda2-info-buffer+      (compilation-mode "AgdaInfo")+      ;; Support for jumping to positions mentioned in the text.+      (set (make-local-variable 'compilation-error-regexp-alist)+           '(("\\([\\\\/][^[:space:]]*\\):\\([0-9]+\\),\\([0-9]+\\)-\\(\\([0-9]+\\),\\)?\\([0-9]+\\)"+              1 (2 . 5) (3 . 6))))+      ;; No support for recompilation. The key binding is removed, and+      ;; attempts to run `recompile' will (hopefully) result in an+      ;; error.+      (let ((map (copy-keymap (current-local-map))))+        (define-key map (kbd "g") 'undefined)+        (use-local-map map))+      (set (make-local-variable 'compile-command)+           'agda2-does-not-support-compilation-via-the-compilation-mode) -    ;; The info buffer is read-only. Compilation minor mode introduces-    ;; the keybindings "g" (recompile) and "q" (bury the buffer), and-    ;; these keybindings can make it rather awkward to edit the info-    ;; buffer. To avoid surprises we make the buffer read-only.-    (setq buffer-read-only t)+      (set-syntax-table agda2-mode-syntax-table)+      (set-input-method "Agda"))) -    (goto-char (point-min))+  agda2-info-buffer)++(defun agda2-info-action (name text &optional append)+  "Insert TEXT into the Agda info buffer and display it.+NAME is displayed in the buffer's mode line.++If APPEND is non-nil, then TEXT is appended at the end of the+buffer, and point placed after this text.++If APPEND is nil, then any previous text is removed before TEXT+is inserted, and point is placed before this text."+  (interactive)+  (with-current-buffer (agda2-info-buffer)+    (unless append (erase-buffer))+    (save-excursion+      (goto-char (point-max))+      (insert text))     (put-text-property 0 (length name) 'face '(:weight bold) name)     (setq mode-line-buffer-identification name)     (save-selected-window-      (pop-to-buffer (current-buffer) 'not-this-window 'norecord)-      (fit-window-to-buffer-       nil (truncate-            (* (frame-height) agda2-information-window-max-height))))))+      (let (;; If there is only one window, then the info window+            ;; should be created above or below the code window, not+            ;; to the left or right.+            (split-width-threshold nil))+        (pop-to-buffer (current-buffer) nil 'norecord)+        (fit-window-to-buffer+         nil (truncate+              (* (frame-height) agda2-information-window-max-height)))+        (if append+            (goto-char (point-max))+          (goto-char (point-min)))))))  (defun agda2-show-goals()   "Show all goals." (interactive)-  (agda2-go t t "cmd_metas"))+  (agda2-go t t "Cmd_metas"))  (defun agda2-show-constraints()   "Show constraints." (interactive)-  (agda2-go t t "cmd_constraints"))+  (agda2-go t t "Cmd_constraints"))  (defun agda2-remove-annotations ()   "Removes buffer annotations (overlays and text properties)."@@ -717,9 +939,19 @@ (defun agda2-quit ()   "Quit and clean up after agda2."   (interactive)-  (agda2-protect (progn (kill-buffer agda2-buffer)-                        (kill-buffer (current-buffer)))))+  (remove-hook 'first-change-hook 'agda2-abort-highlighting 'local)+  (agda2-remove-annotations)+  (agda2-term)) +(defun agda2-term ()+  "Send a SIGTERM signal to the Agda2 process, then kill its buffer."+  (interactive)+  (with-current-buffer agda2-process-buffer+    (condition-case nil+        (signal-process agda2-process 'SIGTERM)+      (error nil))+    (kill-buffer)))+ (defmacro agda2-maybe-normalised (name comment cmd want)   "This macro constructs a function NAME which runs CMD. COMMENT is used to build the function's comment. The function@@ -734,7 +966,7 @@ With a prefix argument the result is not explicitly normalised.")      (interactive "P")      (let ((,eval (if not-normalise "Instantiated" "Normalised")))-       (agda2-goal-cmd (concat ,cmd " Agda.Interaction.BasicOps." ,eval)+       (agda2-goal-cmd (concat ,cmd " " ,eval)                        ,want)))))  (defmacro agda2-maybe-normalised-toplevel (name comment cmd prompt)@@ -752,19 +984,19 @@        (interactive ,(concat "P\nM" prompt ": "))        (let ((,eval (if not-normalise "Instantiated" "Normalised")))          (agda2-go t nil-                   (concat ,cmd " Agda.Interaction.BasicOps." ,eval " "+                   (concat ,cmd " " ,eval " "                            (agda2-string-quote expr)))))))  (agda2-maybe-normalised  agda2-goal-type  "Show the type of the goal at point"- "cmd_goal_type"+ "Cmd_goal_type"  nil)  (agda2-maybe-normalised  agda2-infer-type  "Infer the type of the goal at point"- "cmd_infer"+ "Cmd_infer"  "expression to type")  (agda2-maybe-normalised-toplevel@@ -772,7 +1004,7 @@    "Infers the type of the given expression. The scope used for the expression is that of the last point inside the current top-level module"-   "cmd_infer_toplevel"+   "Cmd_infer_toplevel"    "Expression")  (defun agda2-infer-type-maybe-toplevel ()@@ -787,33 +1019,33 @@ (agda2-maybe-normalised  agda2-goal-and-context  "Shows the type of the goal at point and the currect context"- "cmd_goal_type_context"+ "Cmd_goal_type_context"  nil)  (agda2-maybe-normalised  agda2-goal-and-context-and-inferred  "Shows the context, the goal and the given expression's inferred type"- "cmd_goal_type_context_infer"+ "Cmd_goal_type_context_infer"  "expression to type")  (agda2-maybe-normalised  agda2-show-context  "Show the context of the goal at point"- "cmd_context"+ "Cmd_context"  nil)  (defun agda2-module-contents ()   "Shows all the top-level names in the given module. Along with their types."   (interactive)-  (agda2-goal-cmd "cmd_show_module_contents" "Module name"))+  (agda2-goal-cmd "Cmd_show_module_contents" "Module name"))  (defun agda2-module-contents-toplevel (module)   "Shows all the top-level names in the given module. Along with their types."   (interactive "MModule name: ")   (agda2-go t nil-            "cmd_show_module_contents_toplevel"+            "Cmd_show_module_contents_toplevel"             (agda2-string-quote module)))  (defun agda2-module-contents-maybe-toplevel ()@@ -830,21 +1062,27 @@ (defun agda2-solveAll ()   "Solves all goals that are already instantiated internally."   (interactive)-  (agda2-go t t "cmd_solveAll"))+  (agda2-go t t "Cmd_solveAll"))  (defun agda2-solveAll-action (iss)+  (while iss+    (let* ((g (pop iss)) (txt (pop iss))+           (cmd (cons 'agda2-solve-action (cons g (cons txt nil)))))+      (if (null agda2-last-responses)+          (push (cons 1 cmd) agda2-last-responses)+        (nconc agda2-last-responses (cons (cons 3 cmd) nil))))))++(defun agda2-solve-action (g txt)   (save-excursion-    (while iss-      (let* ((g (pop iss)) (txt (pop iss)))-        (agda2-replace-goal g txt)-        (agda2-goto-goal g)-        (agda2-give)))))+    (agda2-replace-goal g txt)+    (agda2-goto-goal g)+    (agda2-give)))  (defun agda2-compute-normalised (&optional arg)   "Compute the normal form of the expression in the goal at point. With a prefix argument \"abstract\" is ignored during the computation."   (interactive "P")-  (let ((cmd (concat "cmd_compute"+  (let ((cmd (concat "Cmd_compute"                      (if arg " True" " False"))))     (agda2-goal-cmd cmd "expression to normalise"))) @@ -854,7 +1092,7 @@ top-level module. With a prefix argument \"abstract\" is ignored during the computation."   (interactive "MExpression: \nP")-  (let ((cmd (concat "cmd_compute_toplevel"+  (let ((cmd (concat "Cmd_compute_toplevel"                      (if arg " True" " False")                      " ")))     (agda2-go t nil (concat cmd (agda2-string-quote expr)))))@@ -875,14 +1113,9 @@ (defun agda2-highlight-reload nil   "Loads precomputed syntax highlighting info for the current buffer. If there is any to load."-  (let ((highlighting (make-temp-file "agda2-mode")))-    (unwind-protect-        (progn-          (agda2-go nil highlighting-                    "cmd_write_highlighting_info"-                    (agda2-string-quote (buffer-file-name))-                    (agda2-string-quote highlighting)))-      (delete-file highlighting))))+  (agda2-go nil t+            "Cmd_load_highlighting_info"+            (agda2-string-quote (buffer-file-name))))  (defun agda2-literate-p ()   "Is the current buffer a literate Agda buffer?"@@ -899,26 +1132,34 @@   (agda2-let       ((literate (agda2-literate-p))        stk-       top)+       top+       ;; Don't run modification hooks: we don't want this function to+       ;; trigger agda2-abort-highlighting.+       (inhibit-modification-hooks t))       ((delims() (re-search-forward "[?]\\|[{][-!]\\|[-!][}]\\|--\\|\\\\begin{code}\\|\\\\end{code}" nil t))        (is-lone-questionmark ()           (save-excursion             (save-match-data                 (backward-char 3)                 (looking-at-                 "\\(.[{(]\\|.\\s \\)[?]\\(\\s \\|[)};]\\|$\\)"))))+                 "\\(.[{(]\\|\\(.\\|\n\\)\\s \\)[?]\\(\\s \\|[)};]\\|$\\)"))))        (make(p)  (agda2-make-goal p (point) (pop goals)))        (inside-comment() (and stk (null     (car stk))))        (inside-goal()    (and stk (integerp (car stk))))        (outside-code()   (and stk (eq (car stk) 'outside)))-       (inside-code()    (not (outside-code))))+       (inside-code()    (not (outside-code)))+       ;; inside a multi-line comment ignore everything but the multi-line comment markers+       (safe-delims()+          (if (inside-comment)+               (re-search-forward "{-\\|-}" nil t)+            (delims))))     (save-excursion       ;; In literate mode we should start out in the "outside of code"       ;; state.       (if literate (push 'outside stk))       (goto-char (point-min))-      (while (and goals (delims))-        (labels ((c (s) (equal s (match-string 0))))+      (while (and goals (safe-delims))+        (cl-labels ((c (s) (equal s (match-string 0))))           (cond            ((c "\\begin{code}") (when (outside-code)               (pop stk)))            ((c "\\end{code}")   (when (not stk)                    (push 'outside stk)))@@ -940,7 +1181,7 @@ (defun agda2-make-goal (p q n)   "Make a goal with number N at <P>{!...!}<Q>.  Assume the region is clean."   (annotation-preserve-mod-p-and-undo-   (flet ((atp (x ps) (add-text-properties x (1+ x) ps)))+   (cl-flet ((atp (x ps) (add-text-properties x (1+ x) ps)))      (atp p       '(category agda2-delim1))      (atp (1+ p)  '(category agda2-delim2))      (atp (- q 2) '(category agda2-delim3))@@ -997,8 +1238,10 @@ ;;;; Misc  (defun agda2-process-status ()-  "Status of `agda2-buffer', or \"no process\"."-  (agda2-protect (process-status agda2-process) "no process"))+  "Status of `agda2-process-buffer', or \"no process\"."+  (condition-case nil+      (process-status agda2-process)+    (error "no process")))  (defun agda2-intersperse (sep xs)   (let(ys)(while xs (push (pop xs) ys)(push sep ys))(pop ys)(nreverse ys)))@@ -1117,6 +1360,18 @@   (interactive)   (goto-char (agda2-decl-beginning))) +(defvar agda2-debug-buffer-name "*Agda debug*"+  "The name of the buffer used for Agda debug messages.")++(defun agda2-verbose (msg)+  "Appends the string MSG to the `agda2-debug-buffer-name' buffer.+Note that this buffer's contents is not erased automatically when+a file is loaded."+  (with-current-buffer (get-buffer-create agda2-debug-buffer-name)+    (save-excursion+      (goto-char (point-max))+      (insert msg))))+ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Comments and paragraphs @@ -1129,6 +1384,10 @@   ;; the syntax table).   (set (make-local-variable 'font-lock-defaults)        '(nil nil nil nil nil))+  ;; If the following s-expression is removed, then highlighting of+  ;; comments stops working.+  (when font-lock-mode+    (font-lock-mode t))    ;; Empty lines (all white space according to Emacs) delimit   ;; paragraphs.@@ -1149,9 +1408,27 @@     (add-to-list (make-local-variable 'filladapt-token-conversion-table)                  '(agda2-comment . exact)))) +(defun agda2-comment-dwim-rest-of-buffer ()+  "Comment or uncomment the rest of the buffer.+From the beginning of the current line to the end of the buffer."+  (interactive)+  (save-excursion+    (forward-line 0)+    (push-mark (point) 'no-message 'activate-mark)+    (unwind-protect+        (progn+          (goto-char (point-max))+          (comment-dwim nil))+      (pop-mark))))+ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Go to definition site +(defun agda2-goto (filepos &optional other-window)+  "Like `annotation-goto', unless `agda2-highlight-in-progress' is nil."+  (if agda2-highlight-in-progress+      (annotation-goto filepos other-window)))+ (defun agda2-goto-definition-keyboard (&optional other-window)   "Go to the definition site of the name under point (if any). If this function is invoked with a prefix argument then another window is used@@ -1159,16 +1436,16 @@   (interactive "P")   (annotation-goto-indirect (point) other-window)) -(defun agda2-goto-definition-mouse (ev prefix)+(defun agda2-goto-definition-mouse (ev)   "Go to the definition site of the name clicked on, if any.-Otherwise, yank (see `mouse-yank-at-click')."-  (interactive "e\nP")+Otherwise, yank (see `mouse-yank-primary')."+  (interactive "e")   (let ((pos (posn-point (event-end ev))))     (if (annotation-goto-possible pos)         (annotation-goto-indirect pos)       ;; FIXME: Shouldn't we use something like       ;; (call-interactively (key-binding ev))?  --Stef-      (mouse-yank-at-click ev prefix))))+      (mouse-yank-primary ev))))  (defun agda2-go-back nil   "Go back to the previous position in which@@ -1185,10 +1462,10 @@ With prefix argument, turn on display of implicit arguments if the argument is a positive number, otherwise turn it off."   (interactive "P")-  (cond ((eq arg nil)       (agda2-go t t "toggleImplicitArgs"))+  (cond ((eq arg nil)       (agda2-go t t "ToggleImplicitArgs"))         ((and (numberp arg)-              (> arg 0))    (agda2-go t t "showImplicitArgs" "True"))-        (t                  (agda2-go t t "showImplicitArgs" "False"))))+              (> arg 0))    (agda2-go t t "ShowImplicitArgs" "True"))+        (t                  (agda2-go t t "ShowImplicitArgs" "False"))))  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;
+ src/data/emacs-mode/agda2-queue.el view
@@ -0,0 +1,43 @@+;;; agda2-queue.el --- Simple FIFO character queues.++(defun agda2-queue-empty ()+  "Creates a new empty FIFO character queue.+Queues are represented as pairs. The car contains the queue. If+the queue is empty, then the cdr contains the symbol nil, and+otherwise it points to the queue's last cons-cell."+  (cons nil nil))++(defun agda2-queue-is-prefix-of (prefix queue)+  "Returns a non-nil result iff the string PREFIX is a prefix of QUEUE.+Linear in the length of PREFIX."+  (let ((queue  (car queue))+        (prefix (append prefix nil)))+    (while (and (consp queue) (consp prefix)+                (equal (car queue) (car prefix)))+      (pop queue)+      (pop prefix))+    (null prefix)))++(defun agda2-queue-enqueue (queue string)+  "Adds the characters in STRING to the end of QUEUE.+This function updates QUEUE destructively, and is linear in the+length of STRING."+  (let ((chars (append string nil)))+    (when (consp chars)+      (if (null (cdr queue))+          (setcar queue chars)+        (setcdr (cdr queue) chars))+      (setcdr queue (last chars))))+  queue)++(defun agda2-queue-from-string (string)+  "Creates a new FIFO containing the characters in STRING.+Linear in the length of STRING."+  (agda2-queue-enqueue (agda2-queue-empty) string))++(defun agda2-queue-to-string (queue)+  "Constructs a string containing all the characters in QUEUE.+Linear in the length of QUEUE."+  (concat "" (car queue)))++(provide 'agda2-queue)
src/data/emacs-mode/annotation.el view
@@ -57,10 +57,19 @@  (defun annotation-annotate (start end anns &optional info goto)   "Annotate text between START and END in the current buffer.-ANNS are the annotations to apply. All the symbols in ANNS are-looked up in `annotation-bindings', and the font-lock-face text-property for the given character range is set to the resulting-list of faces. If the string INFO is non-nil, the mouse-face++Nothing happens if either START or END are out of bounds for the+current (possibly narrowed) buffer, or END <= START.++If ANNS is nil, then those text properties between START and END+that have been set by this function are deleted. Otherwise the+following happens.++All the symbols in ANNS are looked up in `annotation-bindings',+and the font-lock-face text property for the given character+range is set to the resulting list of faces.++If the string INFO is non-nil, the mouse-face property is set to highlight, and INFO is used as the help-echo string. If GOTO has the form (FILENAME . POSITION), then the mouse-face property is set to highlight, and the given@@ -75,93 +84,94 @@ annotation-annotations is set to a list with all the properties that have been set; this ensures that the text properties can later be removed (if the annotation-* properties are not tampered-with).--Note finally that nothing happens if either START or END are out of-bounds for the current (possibly narrowed) buffer, or END < START."+with)."   (incf start annotations-offset)   (incf end annotations-offset)   (when (and (<= (point-min) start)              (< start end)              (<= end (point-max)))-    (let ((faces (delq nil-                       (mapcar (lambda (ann)-                                 (cdr (assoc ann annotation-bindings)))-                               anns)))-          (props nil))-      (when faces-        (put-text-property start end 'font-lock-face faces)-        (add-to-list 'props 'font-lock-face))-      (when (consp goto)-        (add-text-properties start end-                             `(annotation-goto ,goto-                               mouse-face highlight))-        (add-to-list 'props 'annotation-goto)-        (add-to-list 'props 'mouse-face))-      (when info-        (add-text-properties start end-                             `(mouse-face highlight help-echo ,info))-        (add-to-list 'props 'mouse-face)-        (add-to-list 'props 'help-echo))-      (when props-        (let ((pos start)-              mid)-          (while (< pos end)-            (setq mid (next-single-property-change pos-                         'annotation-annotations nil end))-            (let* ((old-props (get-text-property pos 'annotation-annotations))-                   (all-props (union old-props props)))-              (add-text-properties pos mid-                 `(annotation-annotated t annotation-annotations ,all-props))-              (setq pos mid))))))))+    (if (null anns)+        (annotation-remove-annotations start end)+      (let ((faces (delq nil+                         (mapcar (lambda (ann)+                                   (cdr (assoc ann annotation-bindings)))+                                 anns)))+            (props nil))+        (when faces+          (put-text-property start end 'font-lock-face faces)+          (add-to-list 'props 'font-lock-face))+        (when (consp goto)+          (add-text-properties start end+                               `(annotation-goto ,goto+                                 mouse-face highlight))+          (add-to-list 'props 'annotation-goto)+          (add-to-list 'props 'mouse-face))+        (when info+          (add-text-properties start end+                               `(mouse-face highlight help-echo ,info))+          (add-to-list 'props 'mouse-face)+          (add-to-list 'props 'help-echo))+        (when props+          (let ((pos start)+                mid)+            (while (< pos end)+              (setq mid (next-single-property-change pos+                           'annotation-annotations nil end))+              (let* ((old-props (get-text-property pos 'annotation-annotations))+                     (all-props (union old-props props)))+                (add-text-properties pos mid+                   `(annotation-annotated t annotation-annotations ,all-props))+                (setq pos mid)))))))))  (defmacro annotation-preserve-mod-p-and-undo (&rest code)-  "Run CODE preserving both the undo data and the modification bit."+  "Run CODE preserving both the undo data and the modification bit.+Modification hooks are also disabled."   (let ((modp (make-symbol "modp")))   `(let ((,modp (buffer-modified-p))          ;; Don't check if the file is being modified by some other process.          (buffer-file-name nil)          ;; Don't record those changes on the undo-log.-         (buffer-undo-list t))+         (buffer-undo-list t)+         ;; Don't run modification hooks.+         (inhibit-modification-hooks t))      (unwind-protect          (progn ,@code)        (restore-buffer-modified-p ,modp))))) -(defun annotation-remove-annotations ()-  "Remove all text properties set by `annotation-annotate' in the current buffer.-This function preserves the file modification stamp of the current buffer-and does not modify the undo list.+(defun annotation-remove-annotations (&optional start end)+  "Remove all text properties set by `annotation-annotate'. -Note: This function may fail if there is read-only text in the buffer."+In the current buffer. If START and END are given, then+properties are only removed between these positions. +This function preserves the file modification stamp of the+current buffer, does not modify the undo list, and temporarily+disables all modification hooks.++Note: This function may fail if there is read-only text in the+buffer."+   ;; remove-text-properties fails for read-only text.    (annotation-preserve-mod-p-and-undo-   (let ((pos (point-min))+   (let ((pos (or start (point-min)))          pos2)      (while pos-       (setq pos2 (next-single-property-change pos 'annotation-annotated))+       (setq pos2 (next-single-property-change pos 'annotation-annotated+                                               nil end))        (let ((props (get-text-property pos 'annotation-annotations)))          (when props            (remove-text-properties pos (or pos2 (point-max))               (mapcan (lambda (prop) (list prop nil))                       (append '(annotation-annotated annotation-annotations)                               props)))))-       (setq pos pos2)))))--(defun annotation-load-file (file removep &optional goto-help)-  "Apply the annotations in FILE.-If FILE is empty, then this function does nothing; otherwise the-following comments apply.+       (setq pos (unless (equal pos2 end) pos2)))))) -If (`funcall' REMOVEP anns) is non-nil, then all existing text-properties set by `annotation-annotate' in the current buffer are-first removed. Here anns is a list containing all the-annotations (third argument to `annotation-annotate') to be-applied (in some order, with duplicates removed).+(defun annotation-load (goto-help &rest cmds)+  "Apply highlighting annotations in CMDS in the current buffer. -FILE, if non-empty, should contain a list of lists (start end-anns &optional info goto). Text between start and end will be+The argument CMDS should be a list of lists (start end anns+&optional info goto). Text between start and end will be annotated with the annotations in the list anns (using `annotation-annotate'). If info and/or goto are present they will be used as the corresponding arguments to `annotation-annotate'.@@ -172,28 +182,19 @@ inform the user about the \"goto\" facility.  This function preserves the file modification stamp of the-current buffer and does not modify the undo list.+current buffer, does not modify the undo list, and temporarily+disables all modification hooks. -Note: This function may fail if there is read-only text in the buffer."+Note: This function may fail if there is read-only text in the+buffer."   (annotation-preserve-mod-p-and-undo-   (when (file-readable-p file)-     (let ((cmds (with-temp-buffer-                    (insert-file-contents file)-                    (if (eq (point-min) (point-max))-                        'empty-file-                      (goto-char (point-min))-                      (read (current-buffer))))))-       (when (listp cmds)-         (let ((anns (delete-dups-                      (apply 'append (mapcar (lambda (x) (nth 2 x)) cmds)))))-           (if (funcall removep anns)-               (annotation-remove-annotations))-           (dolist (cmd cmds)-             (destructuring-bind (start end anns &optional info goto) cmd-               (let ((info (if (and (not info) (consp goto))-                               goto-help-                             info)))-                 (annotation-annotate start end anns info goto))))))))))+    (when (listp cmds)+      (dolist (cmd cmds)+        (destructuring-bind (start end anns &optional info goto) cmd+          (let ((info (if (and (not info) (consp goto))+                          goto-help+                        info)))+            (annotation-annotate start end anns info goto)))))))  (provide 'annotation) ;;; annotation.el ends here
src/full/Agda/Auto/Auto.hs view
@@ -39,6 +39,7 @@ import qualified Agda.Syntax.Abstract.Name as AN import qualified Agda.TypeChecking.Monad.Base as MB import Agda.TypeChecking.EtaContract (etaContract)+import qualified Agda.Utils.HashMap as HMap  import Agda.Auto.Convert import Agda.Auto.NarrowingSearch@@ -163,7 +164,7 @@                   [] -> case Map.elems tccons of                    (m, mytype, mylocalVars, _) : [] -> do                        defdfv <- case thisdefinfo of-                                  Just (def, _, _) -> fromIntegral `liftM` getdfv mi def+                                  Just (def, _, _) -> getdfv mi def                                   Nothing -> return 0                        ee <- liftIO $ newIORef $ ConstDef {cdname = "T", cdorigin = __IMPOSSIBLE__, cdtype = NotM $ Sort (Set 0), cdcont = Postulate, cddeffreevars = 0}                        let modargs = drop (length mylocalVars - defdfv) mylocalVars@@ -196,9 +197,9 @@                    Just (def, clause, _) -> do                     let [rectyp'] = mymrectyp                     defdfv <- getdfv mi def-                    myrecdef <- liftIO $ newIORef $ ConstDef {cdname = "", cdorigin = (Nothing, def), cdtype = rectyp', cdcont = Postulate, cddeffreevars = fromIntegral defdfv}+                    myrecdef <- liftIO $ newIORef $ ConstDef {cdname = "", cdorigin = (Nothing, def), cdtype = rectyp', cdcont = Postulate, cddeffreevars = defdfv}                     (_, pats) <- constructPats cmap mi clause-                    defdfv <- fromIntegral `liftM` getdfv mi def+                    defdfv <- getdfv mi def                     return $ if contains_constructor pats then                       (Just (pats, myrecdef), defdfv)                      else@@ -285,7 +286,7 @@                  ticks <- liftIO $ newIORef 0                  let [rectyp'] = mymrectyp                  defdfv <- getdfv mi def-                 myrecdef <- liftIO $ newIORef $ ConstDef {cdname = "", cdorigin = (Nothing, def), cdtype = rectyp', cdcont = Postulate, cddeffreevars = fromIntegral defdfv}+                 myrecdef <- liftIO $ newIORef $ ConstDef {cdname = "", cdorigin = (Nothing, def), cdtype = rectyp', cdcont = Postulate, cddeffreevars = defdfv}                  sols <- liftIO $ System.Timeout.timeout (timeout * 1000000) (                     let r d = do                          sols <- liftIO $ caseSplitSearch ticks __IMPOSSIBLE__ myhints meqr __IMPOSSIBLE__ d myrecdef ctx mytype pats@@ -304,7 +305,7 @@                         -- Normalise the dot patterns                         ps <- addCtxTel tel $ normalise ps                         body <- etaContractBody body-                        liftM modifyAbstractClause $ inContext [] $ reify $ NamedClause def $ I.Clause noRange tel perm ps body+                        liftM modifyAbstractClause $ inContext [] $ reify $ AN.QNamed def $ I.Clause noRange tel perm ps body                       ) cls'                      pcs <- withInteractionId ii $ mapM prettyA cls''                      ticks <- liftIO $ readIORef ticks@@ -319,11 +320,11 @@              MRefine listmode -> do              mv <- lookupMeta mi-             let HasType _ tt = mvJudgement mv+             let tt = jMetaType $ mvJudgement mv                  minfo = getMetaInfo mv              targettyp <- withMetaInfo minfo $ do               vs <- getContextArgs-              let targettype = tt `piApply` permute (takeP (fromIntegral $ length vs) $ mvPermutation mv) vs+              let targettype = tt `piApply` permute (takeP (length vs) $ mvPermutation mv) vs               normalise targettype              let tctx = length $ envContext $ clEnv minfo @@ -331,7 +332,7 @@                st <- liftTCM $ join $ pureTCM $ \st _ -> return st                let defs = sigDefinitions $ stSignature st                    idefs = sigDefinitions $ stImports st-                   alldefs = Map.keys defs ++ Map.keys idefs+                   alldefs = HMap.keys defs ++ HMap.keys idefs                liftM catMaybes $ mapM (\n ->                  case thisdefinfo of                   Just (def, _, _) | def == n -> return Nothing@@ -343,7 +344,7 @@                      c <- getConstInfo n                      ctyp <- normalise $ defType c                      cdfv <- withMetaInfo minfo $ getDefFreeVars n-                     return $ case matchType cdfv (fromIntegral tctx) ctyp targettyp of+                     return $ case matchType cdfv tctx ctyp targettyp of                       Nothing -> Nothing                       Just score -> Just (show cn, score)                 ) alldefs@@ -359,7 +360,7 @@                  c <- getConstInfo n                  ctyp <- normalise $ defType c                  cdfv <- withMetaInfo minfo $ getDefFreeVars n-                 return $ case matchType cdfv (fromIntegral tctx) ctyp targettyp of+                 return $ case matchType cdfv tctx ctyp targettyp of                   Nothing -> Nothing                   Just score -> Just (show cn, score)                 ) modnames
src/full/Agda/Auto/Convert.hs view
@@ -23,7 +23,7 @@ import Agda.Utils.Permutation (Permutation(Perm), idP, permute, takeP) import Agda.Interaction.BasicOps (rewrite, Rewrite(..)) import Agda.TypeChecking.Level (reallyUnLevelView)-import Agda.TypeChecking.Monad.Base (mvJudgement, mvPermutation, getMetaInfo, ctxEntry, envContext, clEnv, Judgement(HasType))+import Agda.TypeChecking.Monad.Base (mvJudgement, mvPermutation, getMetaInfo, ctxEntry, envContext, clEnv) import Agda.TypeChecking.Monad.MetaVars (lookupMeta, withMetaInfo) import Agda.TypeChecking.Monad.Context (getContextArgs) import Agda.TypeChecking.Monad.Constraints (getAllConstraints)@@ -33,6 +33,7 @@ import Agda.TypeChecking.EtaContract (etaContract) import Agda.TypeChecking.Primitive (constructorForm) import Agda.TypeChecking.Free (freeIn)+import qualified Agda.Utils.HashMap as HMap  import Agda.Auto.NarrowingSearch import Agda.Auto.Syntax@@ -98,7 +99,8 @@        cons2 <- mapM (\con -> getConst True con TMAll) cons        return (Datatype cons2 [], [])       MB.Record {MB.recFields = fields, MB.recTel = tel} -> do -- the value of recPars seems unreliable or don't know what it signifies-       let pars n (I.El _ (I.Pi it typ)) = C.Arg (C.argHiding it) (C.argRelevance it) (I.Var n []) : pars (n - 1) (I.unAbs typ)+       let pars n (I.El _ (I.Pi it typ)) = C.Arg (C.domHiding it) (C.domRelevance it) (I.var n) : pars (n - 1) (I.unAbs typ)+           pars n (I.El s (I.Shared p))  = pars n (I.El s (I.derefPtr p))            pars _ (I.El _ _) = []            contyp npar I.EmptyTel = I.El (I.mkType 0 {- arbitrary -}) (I.Def cn (pars (npar - 1) typ))            contyp npar (I.ExtendTel it (I.Abs v tel)) = I.El (I.mkType 0 {- arbitrary -}) (I.Pi it (I.Abs v (contyp (npar + 1) tel)))@@ -143,12 +145,12 @@          m <- getMeta mi          sol' <- tomyExp sol          modify $ \s -> s {sEqs = (Map.insert (Map.size (fst $ sEqs s)) (Just (False, Meta m, sol')) (fst $ sEqs s), snd $ sEqs s)}-       let HasType _ tt = mvJudgement mv+       let tt = MB.jMetaType $ mvJudgement mv            minfo = getMetaInfo mv-           localVars = map (snd . C.unArg . ctxEntry) . envContext . clEnv $ minfo+           localVars = map (snd . C.unDom . ctxEntry) . envContext . clEnv $ minfo        (targettype, localVars) <- lift $ withMetaInfo minfo $ do         vs <- getContextArgs-        let targettype = tt `piApply` permute (takeP (fromIntegral $ length vs) $ mvPermutation mv) vs+        let targettype = tt `piApply` permute (takeP (length vs) $ mvPermutation mv) vs         targettype <- norm targettype         localVars <- mapM norm localVars         return (targettype, localVars)@@ -204,9 +206,9 @@     Nothing -> do      mainm <- gets sMainMeta      dfv <- lift $ getdfv mainm name-     let nomi = fromIntegral $ I.arity (MB.defType def)-     ccon <- lift $ liftIO $ newIORef (ConstDef {cdname = show name ++ ".CONS", cdorigin = (Just nomi, conname), cdtype = __IMPOSSIBLE__, cdcont = Constructor (nomi - fromIntegral dfv), cddeffreevars = fromIntegral dfv}) -- ?? correct value of deffreevars for records?-     c <- lift $ liftIO $ newIORef (ConstDef {cdname = show name, cdorigin = (Nothing, name), cdtype = __IMPOSSIBLE__, cdcont = Datatype [ccon] [], cddeffreevars = fromIntegral dfv}) -- ?? correct value of deffreevars for records?+     let nomi = I.arity (MB.defType def)+     ccon <- lift $ liftIO $ newIORef (ConstDef {cdname = show name ++ ".CONS", cdorigin = (Just nomi, conname), cdtype = __IMPOSSIBLE__, cdcont = Constructor (nomi - dfv), cddeffreevars = dfv}) -- ?? correct value of deffreevars for records?+     c <- lift $ liftIO $ newIORef (ConstDef {cdname = show name, cdorigin = (Nothing, name), cdtype = __IMPOSSIBLE__, cdcont = Datatype [ccon] [], cddeffreevars = dfv}) -- ?? correct value of deffreevars for records?      modify (\s -> s {sConsts = (Map.insert name (mode, c) cmap, name : snd (sConsts s))})      return $ if iscon then ccon else c   _ -> do@@ -217,12 +219,12 @@     Nothing -> do      (miscon, sname) <- if iscon then do        let MB.Constructor {MB.conPars = npar, MB.conData = dname} = MB.theDef def-       return (Just (fromIntegral npar), show dname ++ "." ++ show (I.qnameName name))+       return (Just npar, show dname ++ "." ++ show (I.qnameName name))       else        return (Nothing, show name)      mainm <- gets sMainMeta      dfv <- lift $ getdfv mainm name-     c <- lift $ liftIO $ newIORef (ConstDef {cdname = sname, cdorigin = (miscon, name), cdtype = __IMPOSSIBLE__, cdcont = __IMPOSSIBLE__, cddeffreevars = fromIntegral dfv})+     c <- lift $ liftIO $ newIORef (ConstDef {cdname = sname, cdorigin = (miscon, name), cdtype = __IMPOSSIBLE__, cdcont = __IMPOSSIBLE__, cddeffreevars = dfv})      modify (\s -> s {sConsts = (Map.insert name (mode, c) cmap, name : snd (sConsts s))})      return c @@ -346,7 +348,7 @@ tomyExp :: I.Term -> TOM (MExp O) tomyExp (I.Var v as) = do  as' <- tomyExps as- return $ NotM $ App Nothing (NotM OKVal) (Var $ fromIntegral v) as'+ return $ NotM $ App Nothing (NotM OKVal) (Var v) as' tomyExp (I.Lam hid b) = do  b' <- tomyExp (I.absBody b)  return $ NotM $ Lam (cnvh hid) (Abs (Id $ I.absName b) b')@@ -367,7 +369,7 @@  cc <- lift $ liftIO $ readIORef c  let Just npar = fst $ cdorigin cc  return $ NotM $ App Nothing (NotM OKVal) (Const c) (foldl (\x _ -> NotM $ ALConPar x) as' [1..npar])-tomyExp (I.Pi (C.Arg hid _ x) b) = do+tomyExp (I.Pi (C.Dom hid _ x) b) = do  let y    = I.absBody b      name = I.absName b  x' <- tomyType x@@ -388,6 +390,7 @@    return $ Meta m   _ -> tomyExp t tomyExp (I.DontCare _) = return $ NotM $ dontCare+tomyExp (I.Shared p) = tomyExp $ I.derefPtr p  tomyExps [] = return $ NotM ALNil tomyExps (C.Arg hid _ a : as) = do@@ -410,10 +413,11 @@ fmExp m (I.Level (I.Max as)) = any (fmLevel m) as fmExp m (I.Def _ as) = fmExps m as fmExp m (I.Con _ as) = fmExps m as-fmExp m (I.Pi x y)  = fmType m (C.unArg x) || fmType m (I.unAbs y)+fmExp m (I.Pi x y)  = fmType m (C.unDom x) || fmType m (I.unAbs y) fmExp m (I.Sort _) = False fmExp m (I.MetaV mid _) = mid == m fmExp m (I.DontCare _) = False+fmExp m (I.Shared p) = fmExp m $ I.derefPtr p  fmExps m [] = False fmExps m (a : as) = fmExp m (C.unArg a) || fmExps m as@@ -453,7 +457,7 @@ frommyExp (NotM e) =  case e of   App _ _ (Var v) as ->-   frommyExps 0 as (I.Var (fromIntegral v) [])+   frommyExps 0 as (I.Var v [])   App _ _ (Const c) as -> do    cdef <- lift $ readIORef c    let (iscon, name) = cdorigin cdef@@ -465,7 +469,7 @@   Pi _ hid _ x (Abs mid y) -> do    x' <- frommyType x    y' <- frommyType y-   return $ I.Pi (C.Arg (icnvh hid) C.Relevant x') (I.Abs (case mid of {NoId -> "x"; Id id -> id}) y')+   return $ I.Pi (C.Dom (icnvh hid) C.Relevant x') (I.Abs (case mid of {NoId -> "x"; Id id -> id}) y')    -- maybe have case for Pi where possdep is False which produces Fun (and has to unweaken y), return $ I.Fun (C.Arg (icnvh hid) x') y'   Sort (Set l) ->    return $ I.Sort (I.mkType (fromIntegral l))@@ -506,6 +510,7 @@   addend x (I.Var h xs) = I.Var h (xs ++ [x])   addend x (I.Con h xs) = I.Con h (xs ++ [x])   addend x (I.Def h xs) = I.Def h (xs ++ [x])+  addend x (I.Shared p) = addend x (I.derefPtr p)   addend _ _ = __IMPOSSIBLE__  -- --------------------------------@@ -562,7 +567,7 @@       let Id id = mid       tel <- ctel ctx       t' <- frommyType t-      return $ I.ExtendTel (C.Arg (icnvh hid) C.Relevant t') (I.Abs id tel)+      return $ I.ExtendTel (C.Dom (icnvh hid) C.Relevant t') (I.Abs id tel)  tel <- ctel $ reverse ids  let getperms 0 [] perm nv = return (perm, nv)      getperms n [] _ _ = __IMPOSSIBLE__@@ -677,7 +682,7 @@ findClauseDeep m = do   sig <- getImportedSignature   let res = do-        def <- Map.elems $ MB.sigDefinitions sig+        def <- HMap.elems $ MB.sigDefinitions sig         MB.Function{MB.funClauses = cs} <- [MB.theDef def]         c <- cs         unless (peelbinds False findMeta $ I.clauseBody c) []@@ -692,43 +697,44 @@                   I.NoBody -> d                   I.Body e -> f e     findMeta e =-     case e of+     case I.ignoreSharing e of       I.Var _ as -> findMetas as       I.Lam _ b -> findMeta (I.absBody b)       I.Lit{} -> False       I.Level (I.Max as) -> any (fmLevel m) as       I.Def _ as -> findMetas as       I.Con _ as -> findMetas as-      I.Pi it ot -> findMetat (C.unArg it) || findMetat (I.unAbs ot)+      I.Pi it ot -> findMetat (C.unDom it) || findMetat (I.unAbs ot)       I.Sort{} -> False       I.MetaV m' _  -> m == m'       I.DontCare _ -> False+      I.Shared{} -> __IMPOSSIBLE__     findMetas = any (findMeta . C.unArg)     findMetat (I.El _ e) = findMeta e     toplevel e =-     case e of+     case I.ignoreSharing e of       I.MetaV{} -> True       _ -> False  -- --------------------------------------- -matchType :: Integer -> Integer -> I.Type -> I.Type -> Maybe (Nat, Nat) -- Nat is deffreevars of const, Nat is ctx length of target type, left arg is const type, right is target type+matchType :: Int -> Int -> I.Type -> I.Type -> Maybe (Nat, Nat) -- Nat is deffreevars of const, Nat is ctx length of target type, left arg is const type, right is target type matchType cdfv tctx ctyp ttyp = trmodps cdfv ctyp  where   trmodps 0 ctyp = tr 0 0 ctyp-  trmodps n ctyp = case ctyp of-   I.El _ (I.Pi _ ot) -> trmodps (n - 1) (I.absBody ot)+  trmodps n ctyp = case I.ignoreSharing $ I.unEl ctyp of+   I.Pi _ ot -> trmodps (n - 1) (I.absBody ot)    _ -> __IMPOSSIBLE__   tr narg na ctyp =    case ft 0 0 Just ctyp ttyp of     Just n -> Just (n, narg)-    Nothing -> case ctyp of-     I.El _ (I.Pi _ (I.Abs _ ot)) -> tr (narg + 1) (na + 1) ot-     I.El _ (I.Pi _ (I.NoAbs _ ot)) -> tr (narg + 1) na ot+    Nothing -> case I.ignoreSharing $ I.unEl ctyp of+     I.Pi _ (I.Abs _ ot) -> tr (narg + 1) (na + 1) ot+     I.Pi _ (I.NoAbs _ ot) -> tr (narg + 1) na ot      _ -> Nothing    where     ft nl n c (I.El _ e1) (I.El _ e2) = f nl n c e1 e2-    f nl n c e1 e2 = case e1 of+    f nl n c e1 e2 = case I.ignoreSharing e1 of      I.Var v1 as1 | v1 < nl -> case e2 of       I.Var v2 as2 | v1 == v2 -> fs nl (n + 1) c as1 as2       _ -> Nothing@@ -736,14 +742,14 @@      I.Var v1 as1 -> case e2 of       I.Var v2 as2 | cdfv + na + nl - v1 == tctx + nl - v2 -> fs nl (n + 1) c as1 as2       _ -> Nothing-     _ -> case (e1, e2) of+     _ -> case (I.ignoreSharing e1, I.ignoreSharing e2) of       (I.MetaV{}, _) -> c n       (_, I.MetaV{}) -> c n       (I.Lam hid1 b1, I.Lam hid2 b2) | hid1 == hid2 -> f (nl + 1) n c (I.absBody b1) (I.absBody b2)       (I.Lit lit1, I.Lit lit2) | lit1 == lit2 -> c (n + 1)       (I.Def n1 as1, I.Def n2 as2) | n1 == n2 -> fs nl (n + 1) c as1 as2       (I.Con n1 as1, I.Con n2 as2) | n1 == n2 -> fs nl (n + 1) c as1 as2-      (I.Pi (C.Arg hid1 rel1 it1) ot1, I.Pi (C.Arg hid2 rel2 it2) ot2) | hid1 == hid2 -> ft nl n (\n -> ft (nl + 1) n c (I.absBody ot1) (I.absBody ot2)) it1 it2+      (I.Pi (C.Dom hid1 rel1 it1) ot1, I.Pi (C.Dom hid2 rel2 it2) ot2) | hid1 == hid2 -> ft nl n (\n -> ft (nl + 1) n c (I.absBody ot1) (I.absBody ot2)) it1 it2       (I.Sort{}, I.Sort{}) -> c n -- sloppy       _ -> Nothing     fs nl n c es1 es2 = case (es1, es2) of
+ src/full/Agda/Compiler/CallCompiler.hs view
@@ -0,0 +1,83 @@+{-# LANGUAGE CPP #-}++------------------------------------------------------------------------+-- | A command which calls a compiler+------------------------------------------------------------------------++module Agda.Compiler.CallCompiler where++import qualified Control.Exception as E+import Control.Monad.Trans+import Data.List as L+import System.Exit+import System.IO+import System.Process++import Agda.TypeChecking.Monad++import Agda.Utils.Impossible+#include "../undefined.h"++-- | Calls a compiler:+--+-- * Checks the exit code to see if the compiler exits successfully.+--   If not, then an exception is raised, containing the text the+--   compiler printed to stderr (if any).+--+-- * Uses the debug printout machinery to relay any progress+--   information the compiler prints to stdout.++callCompiler+  :: FilePath+     -- ^ The path to the compiler+  -> [String]+     -- ^ Command-line arguments.+  -> TCM ()+callCompiler cmd args = do+  merrors <- callCompiler' cmd args+  case merrors of+    Nothing     -> return ()+    Just errors -> typeError (CompilationError errors)++-- | Generalisation of @callCompiler@ where the raised exception is+-- returned.+callCompiler'+  :: FilePath+     -- ^ The path to the compiler+  -> [String]+     -- ^ Command-line arguments.+  -> TCM (Maybe String)+callCompiler' cmd args = do+  reportSLn "" 1 $ "Calling: " ++ intercalate " " (cmd : args)+  (_, out, err, p) <-+    liftIO $ createProcess+               (proc cmd args) { std_err = CreatePipe+                               , std_out = CreatePipe+                               }++  -- In -v0 mode we throw away any progress information printed to+  -- stdout.+  case out of+    Nothing  -> __IMPOSSIBLE__+    Just out -> forkTCM $ do+      -- The handle should be in text mode.+      liftIO $ hSetBinaryMode out False+      progressInfo <- liftIO $ hGetContents out+      mapM_ (reportSLn "" 1) $ lines progressInfo++  errors <- liftIO $ case err of+    Nothing  -> __IMPOSSIBLE__+    Just err -> do+      -- The handle should be in text mode.+      hSetBinaryMode err False+      hGetContents err++  exitcode <- liftIO $ do+    -- Ensure that the output has been read before waiting for the+    -- process.+    E.evaluate (length errors)+    waitForProcess p++  case exitcode of+    ExitFailure _ -> return $ Just errors+    _             -> return Nothing
src/full/Agda/Compiler/Epic/CompileState.hs view
@@ -27,6 +27,7 @@ #include "../../undefined.h" import Agda.Utils.Impossible import Agda.Utils.Monad+import qualified Agda.Utils.HashMap as HM   -- | Stuff we need in our compiler@@ -67,7 +68,7 @@ getType :: QName -> Compile TCM Type getType q = do     map <- lift (gets (sigDefinitions . stImports))-    return $ maybe __IMPOSSIBLE__ defType (M.lookup q map)+    return $ maybe __IMPOSSIBLE__ defType (HM.lookup q map)  -- | Create a name which can be used in Epic code from a QName. unqname :: QName -> Var@@ -109,7 +110,7 @@ getConData :: QName -> Compile TCM QName getConData con = do     lmap <- lift (gets (TM.sigDefinitions . TM.stImports))-    case M.lookup con lmap of+    case HM.lookup con lmap of         Just def -> case theDef def of             c@(TM.Constructor{}) -> return $ TM.conData c             _                 -> __IMPOSSIBLE__@@ -118,7 +119,7 @@ getDataCon :: QName -> Compile TCM [QName] getDataCon con = do     lmap <- lift (gets (TM.sigDefinitions . TM.stImports))-    case M.lookup con lmap of+    case HM.lookup con lmap of         Just def -> case theDef def of             d@(TM.Datatype{}) -> return $ TM.dataCons d             r@(TM.Record{})   -> return [ TM.recCon r]
src/full/Agda/Compiler/Epic/Compiler.hs view
@@ -13,23 +13,28 @@ import Data.Maybe import Data.Monoid import qualified Language.Haskell.Exts.Syntax as Haskell-import System.Directory+import System.Directory ( canonicalizePath, createDirectoryIfMissing+                        , getCurrentDirectory, setCurrentDirectory+                        ) import System.Exit import System.FilePath hiding (normalise) import System.Process hiding (env)  import Paths_Agda+import Agda.Compiler.CallCompiler import Agda.Compiler.MAlonzo.Pretty -- TODO: Move shared code to Compiler.* import Agda.Compiler.MAlonzo.Primitives (checkTypeOfMain) import Agda.Interaction.FindFile import Agda.Interaction.Options import Agda.Interaction.Imports+import Agda.Syntax.Common (Delayed(..)) import qualified Agda.Syntax.Concrete.Name as CN import Agda.Syntax.Internal hiding (Term(..)) import Agda.TypeChecking.Monad import Agda.TypeChecking.Monad.Builtin import Agda.TypeChecking.Serialise import Agda.Utils.FileName+import qualified Agda.Utils.HashMap as HMap  import qualified Agda.TypeChecking.Pretty as P @@ -120,7 +125,7 @@                         "Compiling: " ++ show (iModuleName i)                     resetNameSupply                     initialAnalysis i-                    let defns = M.toList $ sigDefinitions $ iSignature i+                    let defns = HMap.toList $ sigDefinitions $ iSignature i                     -- Epic cannot parse files with no definitions                     if (not $ null defns) then do                         code <- compileDefns defns@@ -142,7 +147,7 @@ initialAnalysis inter = do   Prim.initialPrims   modify $ \s -> s {curModule = mempty}-  let defs = M.toList $ sigDefinitions $ iSignature inter+  let defs = HMap.toList $ sigDefinitions $ iSignature inter   forM_ defs $ \(q, def) -> do     addDefName q     case theDef def of@@ -154,7 +159,7 @@                 putConstrTag suc (PrimTag "primSuc")             _ -> return ()       Constructor {conPars = np} -> do-        putForcedArgs q . drop (fromIntegral np) . ForceC.makeForcedArgs $ defType def+        putForcedArgs q . drop np . ForceC.makeForcedArgs $ defType def         putConArity q =<< lift (constructorArity q)       f@(Function{}) -> do         when ("main" == show (qnameName q)) $ do@@ -256,10 +261,5 @@           -- , "-trace"           , "-i", dataDir </> "stdagda" <.> "c"           ] ++ flags epicFlags-    lift $ reportSLn "" 1 $-      "calling: " ++ unwords (epic : epicCommand)-    res <- liftIO $ system (unwords (epic : epicCommand))-                  -- rawSystem epic epicCommand-    case res of-        ExitSuccess   -> return ()-        ExitFailure i -> epicError $ "Epic returned " ++ show res ++ ", which should not happen. Please report this as a bug."++    lift $ callCompiler epic epicCommand
src/full/Agda/Compiler/Epic/Epic.hs view
@@ -103,7 +103,7 @@ prettyEpicLit l = case l of     LInt n    -> show n ++ "L"     LChar c   -> show (ord c)-    LString s -> "Con 1" <+> many [show s, "Con 0 ()"]+    LString s -> show s     LFloat f  -> show f  typVar :: Var -> String
src/full/Agda/Compiler/Epic/Erasure.hs view
@@ -137,9 +137,9 @@         SI.Pi  a b -> mkRel a : initialRels (SI.unAbs b) rel         _       -> []   where-    mkRel :: SC.Arg SI.Type -> Relevance-    mkRel a | ignoreForced (SC.argRelevance a) = Irr-    mkRel a = case SI.unEl (SC.unArg a) of+    mkRel :: SC.Dom SI.Type -> Relevance+    mkRel a | ignoreForced (SC.domRelevance a) = Irr+    mkRel a = case SI.unEl (SC.unDom a) of        SI.Sort _ -> Irr        _         -> rel 
src/full/Agda/Compiler/Epic/ForceConstrs.hs view
@@ -23,10 +23,11 @@     T.Pi  arg ab  -> isRel arg : makeForcedArgs (T.unAbs ab)     _ -> []   where-    isRel :: S.Arg T.Type -> Forced-    isRel arg = case S.argRelevance arg of+    isRel :: S.Dom T.Type -> Forced+    isRel arg = case S.domRelevance arg of       S.Relevant   -> NotForced       S.Irrelevant -> Forced+      S.UnusedArg  -> Forced       S.NonStrict  -> Forced -- can never be executed       S.Forced     -> Forced -- It can be inferred 
src/full/Agda/Compiler/Epic/Forcing.hs view
@@ -20,7 +20,8 @@ import Agda.TypeChecking.Monad import Agda.TypeChecking.Rules.LHS.Unify import Agda.TypeChecking.Rules.LHS.Instantiate-import Agda.TypeChecking.Substitute (raiseFrom, raise, substs, apply, TelV(..))+import Agda.TypeChecking.Substitute+  (raiseFrom, raise, applySubst, apply, wkS, raiseS, dropS, (++#), TelV(..)) import qualified Agda.TypeChecking.Substitute as S import Agda.TypeChecking.Pretty as P import Agda.TypeChecking.Reduce@@ -29,6 +30,7 @@ import Agda.Utils.Monad import Agda.Utils.Permutation import Agda.Utils.Size+import qualified Agda.Utils.HashMap as HM  import Agda.Compiler.Epic.AuxAST import Agda.Compiler.Epic.CompileState@@ -48,7 +50,7 @@ dataParametersTCM :: QName -> TCM Nat dataParametersTCM name = do     m <- (gets (sigDefinitions . stImports))-    return $ maybe __IMPOSSIBLE__ (defnPars . theDef) (M.lookup name m)+    return $ maybe __IMPOSSIBLE__ (defnPars . theDef) (HM.lookup name m)   where     defnPars :: Defn -> Nat     defnPars (Datatype {dataPars = p}) = p@@ -100,7 +102,7 @@       , text "term:" <+> prettyTCM term       , text "to:"   <+> prettyTCM (unAbs to)       ]-    (st, arg) <- case SI.unEl . unArg $ t' of+    (st, arg) <- case SI.unEl . unDom $ t' of             SI.Def st arg -> return (st, arg)             s          -> do               report 10 $ vcat@@ -113,15 +115,18 @@     -- Because: parameters occurs in the type of constructors but are not bound by it.     pars <- dataParameters st     report 10 $ text "apply in insertTele"-    TelV ctele ctyp <- lift $ telView =<< maybe (return $ unArg t')-                            (`piApplyM'` take (fromIntegral pars) arg) ins-+    TelV ctele ctyp <- lift $ telView =<< maybe (return $ unDom t')+                            (`piApplyM'` genericTake pars arg) ins+--                            (`piApplyM'` take (fromIntegral pars) arg) ins+{- OLD CODE:     () <- if length (take (fromIntegral pars) arg) == fromIntegral pars         then return ()         else __IMPOSSIBLE__+-}+    when (genericLength arg < pars) __IMPOSSIBLE__     -- we deal with absBody to directly since we remove t     return ( ctele +:+  (S.subst term $ S.raiseFrom 1 (size ctele) (unAbs to))-           , (ctele, S.raise (size ctele) $ unArg t , ctyp)+           , (ctele, S.raise (size ctele) $ unDom t , ctyp)            )   where     -- Append the telescope, we raise since we add a new binding and all the previous@@ -149,7 +154,7 @@ remForced fs = do     defs <- lift (gets (sigDefinitions . stImports))     forM fs $ \f -> case f of-        Fun{} -> case funQName f >>= flip M.lookup defs of+        Fun{} -> case funQName f >>= flip HM.lookup defs of             Nothing -> __IMPOSSIBLE__             Just def -> do                 TelV tele _ <- lift $ telView (defType def)@@ -201,32 +206,26 @@                     -- unify the telescope type with the return type of the constructor                     unif <- case (unEl ntyp, unEl ctyp) of                         (SI.Def st a1, SI.Def st' a2) | st == st' -> do-                            typPars <- fromIntegral <$> dataParameters st+                            typPars <- dataParameters st                             setType <- getType st                             report 10 $ vcat                               [ text "ntyp:" <+> prettyTCM ntyp                               , text "ctyp:" <+> prettyTCM ctyp                               ]                             unifyI (takeTele (n + length as) tele'')-                                   (map fromIntegral $ [0 .. n + length as])+                                   [0 .. n + length as]                                    (setType `apply` take typPars a1)                                    (drop typPars a1)                                    (drop typPars a2)                         _ -> __IMPOSSIBLE__                     let-                        lower = map (raise (-1)) . drop 1-                        isOk t = case t of-                          SI.Var n xs | n >= 0 -> all (isOk . unArg) xs-                          SI.Con _ xs -> all (isOk . unArg) xs-                          SI.Def f xs -> all (isOk . unArg) xs-                          _ -> error $ show t+                        lower = wkS (-1) . dropS 1                         subT 0 tel = let ss = [fromMaybe (SI.Var n []) t-                                              | (n , t) <- zip [0..] (unif ++ repeat Nothing)]-                                      in (S.substs ss tel, lower ss)+                                                | (n , t) <- zip [0..] unif] ++#+                                              raiseS (length unif)+                                      in (applySubst ss tel, lower ss)                         subT n (ExtendTel a t) = let                                (tb' , ss) = subT (n - 1) (unAbs t)-                               a' | all isOk (take 100 ss) = S.substs ss a-                                  | True    = __IMPOSSIBLE__                             in (ExtendTel a $ Abs (absName t) tb', lower ss)                         subT _ _ = __IMPOSSIBLE__                         (tele'''', _) = subT (n + length as) tele''@@ -251,7 +250,7 @@ replaceForced (vars,_) tele [] _ e = forcedExpr vars tele e replaceForced (vars,uvars) tele (fvar : fvars) unif e = do     let n = fromMaybe __IMPOSSIBLE__ $ elemIndex fvar uvars-    mpos <- findPosition (fromIntegral n) unif+    mpos <- findPosition n unif     case mpos of         Nothing -> case unif !! n of             Nothing | fvar `notElem` fv e ->@@ -271,7 +270,7 @@                 subst fvar v <$> replaceForced (vars, uvars)                                                tele fvars unif (Let v te e)         Just (pos , term) -> do-            (build, v) <- buildTerm (uvars !! fromInteger pos) (fromIntegral n) term+            (build, v) <- buildTerm (uvars !! pos) n term             build . subst fvar v <$> replaceForced (vars, uvars) tele fvars unif                                      e   where@@ -284,7 +283,7 @@ buildTerm var idx (SI.Con c args) = do     vs <- replicateM (length args) newName     (pos , arg) <- fromMaybe __IMPOSSIBLE__ <$> findPosition idx (map (Just . unArg) args)-    (fun' , v) <- buildTerm (vs !! fromInteger pos) idx arg+    (fun' , v) <- buildTerm (vs !! pos) idx arg     tag <- getConstrTag c     let fun e = casee (Var var) [Branch tag c vs e]     return (fun . fun' , v)
src/full/Agda/Compiler/Epic/FromAgda.hs view
@@ -43,13 +43,13 @@       epDef = compiledEpic $ defCompiledRep defini   in case theDef defini of     d@(Datatype {}) -> do -- become functions returning unit-        vars <- replicateM (fromIntegral $ dataPars d + dataIxs d) newName+        vars <- replicateM (dataPars d + dataIxs d) newName         return . return $ Fun True n' (Just n) ("datatype: " ++ show n) vars UNIT     f@(Function{}) -> do         let projArgs = maybe 0 (pred . snd) (funProjection f)         ccs  <- reverseCCBody projArgs <$> normaliseStatic (funCompiled f)         let len   = (+ projArgs) . length . clausePats . head .  funClauses $ f-            toEta = fromIntegral (arity (defType defini)) - len+            toEta = arity (defType defini) - len         -- forcing <- lift $ gets (optForcing . stPersistentOptions)         lift $ reportSDoc "epic.fromagda" 5 $ text "compiling fun:" <+> prettyTCM n         lift $ reportSDoc "epic.fromagda" 5 $ text "len:" <+> (text . show) len@@ -71,7 +71,7 @@           Just (T.Def sharp []) | sharp == n -> return <$> mkFun n n' "primSharp" 3           _    -> return <$> mkCon n tag arit     r@(Record{}) -> do-        vars <- replicateM (fromIntegral $ recPars r) newName+        vars <- replicateM (recPars r) newName         return . return $ Fun True n' (Just n) ("record: " ++ show n) vars UNIT     a@(Axiom{}) -> do -- Axioms get their code from COMPILED_EPIC pragmas         case epDef of@@ -80,7 +80,7 @@             Just x  -> return . return $ EpicFun n' (Just n) ("COMPILED_EPIC: " ++ show n) x     p@(Primitive{}) -> do -- Primitives use primitive functions from AgdaPrelude.e of the same name.                           -- Hopefully they are defined!-      let ar = fromIntegral $ arity $ defType defini+      let ar = arity $ defType defini       return <$> mkFun n n' (primName p) ar   where     mkFun q = mkFunGen q apps ("primitive: " ++)@@ -129,11 +129,13 @@ reverseCCBody :: Int -> CC.CompiledClauses -> CC.CompiledClauses reverseCCBody c cc = case cc of     CC.Case n (CC.Branches cbr lbr cabr) -> CC.Case (c+n)-        $ CC.Branches (M.map (reverseCCBody c) cbr)+        $ CC.Branches (M.map (fmap $ reverseCCBody c) cbr)           (M.map (reverseCCBody c) lbr)           (fmap  (reverseCCBody c) cabr)-    CC.Done i t -> CC.Done i (S.substs (map (flip T.Var [])-                               (reverse $ take (length i) [fromIntegral c..])) t)+    CC.Done i t -> CC.Done i (S.applySubst+                                (S.parallelS $ map (flip T.Var []) $+                                   reverse $ take (length i) [c..])+                                t)     CC.Fail     -> CC.Fail  -- | Translate from Agda's desugared pattern matching (CompiledClauses) to our AuxAST.@@ -200,8 +202,8 @@                    -- TODO: Handle other literals                    _ -> epicError $ "case on literal not supported: " ++ show l            -- Con branch-           else forM (M.toList (CC.conBranches nc)) $ \(b, cc) -> do-               arit  <- getConArity b+           else forM (M.toList (CC.conBranches nc)) $ \(b, CC.WithArity ar cc) -> do+               arit  <- getConArity b -- Andreas, 2012-10-12: is the constructor arity @ar@ from Agda the same as the one from the Epic backen?                tag  <- getConstrTag b                vars <- replicateM arit newName                cc'  <- compileClauses' (replaceAt casedvar env vars) omniDefault cc@@ -217,9 +219,9 @@ --   names in the position. substTerm :: [Var] -> T.Term -> Compile TCM Expr substTerm env term = case term of-    T.Var ind args -> case length env <= fromIntegral ind of+    T.Var ind args -> case length env <= ind of         True  -> __IMPOSSIBLE__-        False -> apps (env !! fromIntegral ind) <$> mapM (substTerm env . unArg) args+        False -> apps (env !! ind) <$> mapM (substTerm env . unArg) args     T.Lam _ (Abs _ te) -> do        name <- newName        Lam name <$> substTerm (name : env) te@@ -242,6 +244,7 @@     T.Con q args -> do         let con = unqname q         apps con <$> mapM (substTerm env . unArg) args+    T.Shared p -> substTerm env $ derefPtr p     T.Pi _ _ -> return UNIT     T.Sort _  -> return UNIT     T.MetaV _ _ -> return UNIT
src/full/Agda/Compiler/Epic/Injection.hs view
@@ -24,6 +24,7 @@ import Agda.TypeChecking.Telescope import Agda.Utils.Monad import Agda.Utils.Size+import qualified Agda.Utils.HashMap as HM  import Agda.Compiler.Epic.CompileState import qualified Agda.Compiler.Epic.FromAgda as FA@@ -43,12 +44,12 @@     injFuns <- solve newNames (catMaybes funs)     defs' <- forM defs $ \(q, def) -> case q `isIn` injFuns of         Nothing -> return (q, def)-        Just inj@(InjectiveFun var arity) -> case theDef def of+        Just inj@(InjectiveFun nvar arity) -> case theDef def of             f@(Function{})   -> do                 modifyEI $ \s -> s { injectiveFuns = M.insert q inj (injectiveFuns s) }-                let ns = replicate (fromIntegral arity) (Arg NotHidden Relevant "")-                return $ (,) q $ def {theDef = f { funCompiled = Done ns-                                                                      (Var (arity - var - 1) []) } }+                let ns = replicate arity (Arg NotHidden Relevant "")+                return $ (,) q $ def { theDef = f { funCompiled = Done ns $+                                                      var $ arity - nvar - 1 } }             _                -> __IMPOSSIBLE__      lift $ reportSLn "epic.injection" 10 $ "injfuns: " ++ show injFuns@@ -61,8 +62,8 @@ replaceFunCC :: QName -> CompiledClauses -> Compile TCM () replaceFunCC name cc = do     lift $ modify $ \s ->-        s { stSignature = (stSignature s) { sigDefinitions = M.adjust replaceDef name (sigDefinitions (stSignature s)) }-          , stImports   = (stImports   s) { sigDefinitions = M.adjust replaceDef name (sigDefinitions (stImports   s)) }+        s { stSignature = (stSignature s) { sigDefinitions = HM.adjust replaceDef name (sigDefinitions (stSignature s)) }+          , stImports   = (stImports   s) { sigDefinitions = HM.adjust replaceDef name (sigDefinitions (stImports   s)) }           }   where     replaceDef :: Definition -> Definition@@ -87,7 +88,7 @@         cli <- forM cls $ \ cl -> isInjectiveHere nam i  cl         let cli' = catMaybes cli         return $ if length cli == length cli'-             then Just ((nam, InjectiveFun (fromIntegral i) (fromIntegral total)), concat cli')+             then Just ((nam, InjectiveFun i total), concat cli')              else Nothing  remAbs :: ClauseBody -> Term@@ -104,7 +105,7 @@  patternToTerm :: Nat -> Pattern -> Term patternToTerm n p = case p of-    VarP v          -> Var n []+    VarP v          -> var n     DotP t          -> t     ConP c typ args -> Con c $ zipWith (\ arg t -> arg {unArg = t}) args                              $ snd@@ -121,11 +122,11 @@     LitP l          -> 0  substForDot :: [Arg Pattern] -> Substitution-substForDot ps = map (flip Var []) (makeSubst 0 0 $ reverse $ calcDots ps)+substForDot = makeSubst 0 0 . reverse . calcDots   where-    makeSubst i accum [] = [i + accum ..]+    makeSubst i accum [] = raiseS (i + accum)     makeSubst i accum (True  : ps) = makeSubst i (accum +1) ps-    makeSubst i accum (False : ps) = i + accum : makeSubst (i+1) accum ps+    makeSubst i accum (False : ps) = var (i + accum) :# makeSubst (i+1) accum ps      calcDots = concatMap calcDots' . map unArg     calcDots' p = case p of@@ -141,13 +142,13 @@ isInjectiveHere nam idx Clause {clauseBody = body} | isNoBody body = return emptyC isInjectiveHere nam idx clause = do     let t    = patternToTerm idxR $ unArg $ clausePats clause !! idx-        t'   = substs (substForDot $ clausePats clause) t+        t'   = applySubst (substForDot $ clausePats clause) t         idxR = sum . map (nrBinds . unArg) . genericDrop (idx + 1) $ clausePats clause         body = remAbs $ clauseBody clause     body' <- lift $ reduce body     injFs <- gets (injectiveFuns . importedModules)-    res <- (t' <: body') (M.insert nam (InjectiveFun (fromIntegral idx)-                                                     (genericLength (clausePats clause))) injFs)+    res <- (t' <: body') (M.insert nam (InjectiveFun idx+                                                     (length (clausePats clause))) injFs)     lift $ reportSDoc "epic.injection" 20 $ vcat       [ text "isInjective:" <+> text (show nam)       , text "at Index   :" <+> text (show idx)@@ -176,8 +177,8 @@ litCon _          = False  insertAt :: (Nat,Term) -> Term -> Term-insertAt (index, ins) = substs [if i == index then ins else Var i [] | i <- [0 .. ]]-+insertAt (index, ins) =+  applySubst ([var i | i <- [0 .. index - 1]] ++# ins :# raiseS (index + 1))  solve :: [QName] -> [((QName, InjectiveFun), [(QName,QName)])] -> Compile TCM [(QName, InjectiveFun)] solve newNames xs = do@@ -248,7 +249,7 @@     if genericLength args2 /= arit         then return Nothing         else do-            arg <- lift $ reduce $ unArg $ args2 !! fromIntegral argn+            arg <- lift $ reduce $ unArg $ args2 !! argn             (t1 <: arg) injs -- (Var n1 []    <: Var n2 [])    nam idx = return $ if n1 == n2 then emptyC else Nothing (Var n1 args1 <: Var n2 args2) injs | n1 == n2 && length args1 == length args2 = do@@ -304,7 +305,7 @@     let g1s = eqGroups ts !!! n1         g2s = eqGroups ts !!! n2         gs  = S.union g1s g2s-    ifM (not . and <$> sequence [unifiable e1 e2 | e1 <- S.toList g1s, e2 <- S.toList g2s])+    ifM (not <$> andM [unifiable e1 e2 | e1 <- S.toList g1s, e2 <- S.toList g2s])         (return Nothing) $         return $ Just $ ts             { eqGroups    = M.delete n2 $ M.insert n1 gs (eqGroups ts)
src/full/Agda/Compiler/Epic/NatDetection.hs view
@@ -13,23 +13,25 @@ import qualified Data.Map as M import Data.Maybe -import Agda.TypeChecking.Monad+import Agda.Syntax.Common import Agda.Syntax.Internal+import Agda.TypeChecking.Monad import Agda.TypeChecking.Substitute-import Agda.Syntax.Common+import Agda.Utils.Monad (andM)  import Agda.Compiler.Epic.CompileState import Agda.Compiler.Epic.Interface  #include "../../undefined.h" import Agda.Utils.Impossible+import qualified Agda.Utils.HashMap as HM  -- | Get a list of all the datatypes that look like nats. The [QName] is on the --   form [zeroConstr, sucConstr] getNatish :: Compile TCM [(ForcedArgs, [QName])] getNatish = do   sig <- lift (gets (sigDefinitions . stImports))-  let defs = M.toList sig+  let defs = HM.toList sig   fmap catMaybes $ forM defs $ \(q, def) ->     case theDef def of       d@(Datatype {}) -> isNatish q d@@ -40,15 +42,15 @@ isNatish q d = do -- A datatype ...     case dataCons d of         constrs | length constrs == 2 -> do -- with two constructors ...-            b <- and <$> mapM constrInScope constrs+            b <- andM $ map constrInScope constrs             if b               then do                 z <- zip constrs <$> mapM getForcedArgs constrs                 case sortBy (compare `on` nrRel . snd) z of                   [(cz,fz), (cs,fs)] -> do                     sig <- lift (gets (sigDefinitions . stImports))-                    let ts = defType $ sig M.! cs-                        nr = fromIntegral $ dataPars d+                    let ts = defType $ sig HM.! cs+                        nr = dataPars d                     return $ do                      guard (nrRel fz == 0) -- where one constructor has zero arguments ...                      guard (nrRel fs == 1) -- and the other one one argument ...@@ -65,7 +67,7 @@ -- | Check if argument n is recursive isRec :: Int -> Type -> QName -> Bool isRec 0 (El _ t) dat = case t of-    Pi  arg _ -> argIsDef (unArg arg) dat+    Pi  arg _ -> argIsDef (unDom arg) dat     _         -> False isRec n (El _ t) dat = case t of     Pi  _ ab  -> isRec (n - 1) (unAbs ab) dat
src/full/Agda/Compiler/Epic/Primitive.hs view
@@ -15,6 +15,7 @@ import qualified Agda.Syntax.Internal as T import Agda.TypeChecking.Monad hiding (defName) import Agda.TypeChecking.Monad.Builtin+import Agda.Utils.Monad (andM)  import Agda.Compiler.Epic.AuxAST import Agda.Compiler.Epic.CompileState@@ -92,7 +93,7 @@         if all isJust builtins            then do                 let names = map (defName . fromMaybe __IMPOSSIBLE__) builtins-                b <- and <$>  mapM constrInScope names+                b <- andM $ map constrInScope names                 if b then return $ Just (transf names) else return Nothing            else return Nothing 
src/full/Agda/Compiler/Epic/Smashing.hs view
@@ -32,6 +32,7 @@  import Agda.Utils.Monad import Agda.Utils.Size+import qualified Agda.Utils.HashMap as HM  #include "../../undefined.h" import Agda.Utils.Impossible@@ -46,7 +47,7 @@ smash'em funs = do     defs <- lift (gets (sigDefinitions . stImports))     funs' <- forM funs $ \f -> case f of-      AA.Fun{} -> case funQName f >>= flip M.lookup defs of+      AA.Fun{} -> case funQName f >>= flip HM.lookup defs of           Nothing -> do               lift $ reportSDoc "epic.smashing" 10 $ vcat                 [ (text . show) f <+> text " was not found"]@@ -79,7 +80,7 @@ inferable visited dat args = do   lift $ reportSLn "epic.smashing" 10 $ "  inferring:" ++ (show dat)   defs <- lift (gets (sigDefinitions . stImports))-  let def = fromMaybe __IMPOSSIBLE__ $ M.lookup dat defs+  let def = fromMaybe __IMPOSSIBLE__ $ HM.lookup dat defs   case theDef def of       d@Datatype{} -> do           case dataCons d of@@ -95,7 +96,7 @@   where     inferableArgs c pars = do         defs <- lift (gets (sigDefinitions . stImports))-        let def = fromMaybe __IMPOSSIBLE__ $ M.lookup c defs+        let def = fromMaybe __IMPOSSIBLE__ $ HM.lookup c defs         forc <- getForcedArgs c         TelV tel _ <- lift $ telView (defType def `apply` genericTake pars args)         tag <- getConstrTag c@@ -104,7 +105,7 @@           , text "tele" <+> prettyTCM tel           , text "constr:" <+> prettyTCM c           ]-        (AA.Con tag c <$>) <$> sequence <$> forM (notForced forc $ flattenTel tel) (inferableTerm visited' . unEl . unArg)+        (AA.Con tag c <$>) <$> sequence <$> forM (notForced forc $ flattenTel tel) (inferableTerm visited' . unEl . unDom)     visited' = S.insert dat visited  inferableTerm visited t = case t of
src/full/Agda/Compiler/Epic/Static.hs view
@@ -19,11 +19,13 @@ import Agda.TypeChecking.Monad.Base import Agda.TypeChecking.Monad.Builtin import Agda.TypeChecking.Monad.Options+import Agda.TypeChecking.Monad.Sharing import Agda.TypeChecking.Reduce import Agda.TypeChecking.Substitute import Agda.TypeChecking.Pretty  import Agda.Utils.Monad+import qualified Agda.Utils.HashMap as HM  import Agda.Compiler.Epic.CompileState @@ -36,7 +38,7 @@ evaluateCC :: CompiledClauses -> Compile TCM CompiledClauses evaluateCC ccs = case ccs of     Case n brs -> do-        cbrs <- forM (M.toList $ conBranches brs) $ \(c, cc) -> (,) c <$> evaluateCC cc+        cbrs <- forM (M.toList $ conBranches brs) $ \(c, WithArity n cc) -> (,) c <$> (WithArity n <$> evaluateCC cc)         lbrs <- forM (M.toList $ litBranches brs) $ \(l, cc) -> (,) l <$> evaluateCC cc         cab <- case catchAllBranch brs of             Nothing -> return Nothing@@ -52,7 +54,7 @@ etaExpand :: Term -> Compile TCM Term etaExpand def@(Def n ts) = do     defs <- lift (gets (sigDefinitions . stImports))-    let f   = maybe __IMPOSSIBLE__ theDef (M.lookup n defs)+    let f   = maybe __IMPOSSIBLE__ theDef (HM.lookup n defs)         len = length . clausePats . head .  funClauses $ f         toEta :: Num a => a         toEta = fromIntegral $ len - length ts@@ -86,6 +88,7 @@     MetaV i args -> return $ MetaV i args     Level l      -> return $ Level l     DontCare i   -> return $ DontCare i+    Shared{}     -> updateSharedTermT evaluateTerm term   where     evaluateTerms :: Args -> Compile TCM Args     evaluateTerms as = forM as $ \x -> do@@ -95,7 +98,7 @@     isStatic :: QName -> Compile TCM Bool     isStatic q = do       defs <- lift (gets (sigDefinitions . stImports))-      return $ case fmap theDef $ M.lookup q defs of+      return $ case fmap theDef $ HM.lookup q defs of           Nothing -> False           Just (f@Function{}) -> funStatic f           Just _              -> False
src/full/Agda/Compiler/HaskellTypes.hs view
@@ -12,9 +12,10 @@ import Agda.Syntax.Common import Agda.Syntax.Internal import Agda.TypeChecking.Monad+import Agda.TypeChecking.Monad.Builtin import Agda.TypeChecking.Pretty import Agda.TypeChecking.Reduce-import Agda.TypeChecking.Rules.Builtin.Coinduction+-- import Agda.TypeChecking.Rules.Builtin.Coinduction import Agda.TypeChecking.Substitute import Agda.TypeChecking.Free import Agda.Utils.Monad@@ -85,7 +86,7 @@   a <- reduce a   case unEl a of     Sort _  -> return hsStar-    Pi a b  -> hsKFun <$> haskellKind (unArg a) <*> underAbstraction a b haskellKind+    Pi a b  -> hsKFun <$> haskellKind (unDom a) <*> underAbstraction a b haskellKind     Def d _ -> do       d <- compiledHaskell . defCompiledRep <$> getConstInfo d       case d of@@ -118,15 +119,16 @@             _      -> err         Def d args -> hsApp <$> getHsType d <*> fromArgs args         Pi a b ->-          if isBinderUsed b+          if isBinderUsed b  -- Andreas, 2012-04-03.  Q: could we rely on Abs/NoAbs instead of again checking freeness of variable?           then underAbstraction a b $ \b ->             hsForall <$> getHsVar 0 <*>-              (hsFun <$> fromType (unArg a) <*> fromType b)-          else hsFun <$> fromType (unArg a) <*> fromType (absApp b __IMPOSSIBLE__)+              (hsFun <$> fromType (unDom a) <*> fromType b)+          else hsFun <$> fromType (unDom a) <*> fromType (absApp b __IMPOSSIBLE__)         Con c args -> hsApp <$> getHsType c <*> fromArgs args         Lam{}      -> err         Level{}    -> return hsUnit         Lit{}      -> return hsUnit         Sort{}     -> return hsUnit+        Shared p   -> fromTerm $ derefPtr p         MetaV{}    -> err         DontCare{} -> err
src/full/Agda/Compiler/JS/Compiler.hs view
@@ -5,9 +5,11 @@ import Prelude hiding ( null, writeFile ) import Control.Monad.Reader ( liftIO ) import Control.Monad.State ( get, put )-import Data.List ( intercalate, map, filter, isPrefixOf, concat, genericDrop, genericLength )+import Data.List ( intercalate, map, filter, isPrefixOf, concat, genericDrop, genericLength, partition ) import Data.Set ( Set, empty, null, insert, difference, delete ) import Data.Map ( Map, fold, singleton, fromList, toList, toAscList, insertWith, elems )+import qualified Data.Set as Set+import qualified Data.Map as Map import System.Directory ( createDirectoryIfMissing ) import System.FilePath ( pathSeparator, splitFileName, (</>) ) @@ -23,7 +25,8 @@   ( Name, Args, Type,     Clause(Clause), Pattern(VarP,DotP,LitP,ConP), Abs(Abs),     ClauseBody(Body,NoBody,Bind),-    Term(Var,Lam,Lit,Level,Def,Con,Pi,Sort,MetaV,DontCare),+    Term(Var,Lam,Lit,Level,Def,Con,Pi,Sort,MetaV,DontCare,Shared),+    derefPtr,     toTopLevelModuleName, clausePats, clauseBody, arity, unEl, unAbs ) import Agda.TypeChecking.Substitute ( absBody ) import Agda.Syntax.Literal ( Literal(LitInt,LitFloat,LitString,LitChar,LitQName) )@@ -42,9 +45,10 @@ import Agda.TypeChecking.Reduce ( instantiateFull, normalise ) import Agda.Utils.FileName ( filePath ) import Agda.Utils.Function ( iterate' )-import Agda.Utils.Monad ( (<$>), (<*>), bracket, ifM )+import Agda.Utils.Monad ( (<$>), (<*>), localState, ifM ) import Agda.Utils.IO.UTF8 ( writeFile ) import Agda.Utils.Impossible ( Impossible(Impossible), throwImpossible )+import qualified Agda.Utils.HashMap as HMap import Agda.Compiler.MAlonzo.Misc ( curDefs, curIF, curMName, setInterface ) import Agda.Compiler.MAlonzo.Primitives ( repl ) @@ -66,7 +70,7 @@ compilerMain :: Interface -> TCM () compilerMain mainI =   -- Preserve the state (the compiler modifies the state).-  bracket get put $ \_ -> do+  localState $ do      -- Compute the output directory.     opts <- commandLineOptions@@ -154,8 +158,17 @@ -- Reorder a list of exports to ensure def-before-use. -- Note that this can diverge in the case when there is no such reordering. +-- Only top-level values are evaluated before definitions are added to the+-- module, so we put those last, ordered in dependency order. There can't be+-- any recursion between top-level values (unless termination checking has been+-- disabled and someone's written a non-sensical program), so reordering will+-- terminate.+ reorder :: [Export] -> [Export]-reorder = reorder' empty+reorder es = datas ++ funs ++ reorder' (Set.fromList $ map expName $ datas ++ funs) vals+  where+    (vs, funs)    = partition isTopLevelValue es+    (datas, vals) = partition isEmptyObject vs  reorder' :: Set [MemberId] -> [Export] -> [Export] reorder' defs [] = []@@ -165,6 +178,16 @@     True -> e : (reorder' (insert (expName e) defs) es)     False -> reorder' defs (insertAfter us e es) +isTopLevelValue :: Export -> Bool+isTopLevelValue (Export _ e) = case e of+  Lambda{} -> False+  _        -> True++isEmptyObject :: Export -> Bool+isEmptyObject (Export _ e) = case e of+  Object m -> Map.null m+  _        -> False+ insertAfter :: Set [MemberId] -> Export -> [Export] -> [Export] insertAfter us e []                 = [e] insertAfter us e (f:fs) | null us   = e : f : fs@@ -178,7 +201,7 @@ curModule = do   m <- (jsMod <$> curMName)   is <- map jsMod <$> (iImportedModules <$> curIF)-  es <- mapM definition =<< (toList <$> curDefs)+  es <- mapM definition =<< (HMap.toList <$> curDefs)   return (Module m (reorder es))  definition :: (QName,Definition) -> TCM Export@@ -326,6 +349,7 @@ term (Lam   _ at)         = Lambda 1 <$> term (absBody at) term (Lit   l)            = return (literal l) term (Level l)            = term =<< reallyUnLevelView l+term (Shared p)           = term $ derefPtr p term (Def q as) = do   d <- getConstInfo q   case theDef d of
src/full/Agda/Compiler/JS/Substitution.hs view
@@ -1,7 +1,7 @@ module Agda.Compiler.JS.Substitution where  import Prelude hiding ( map, lookup )-import Data.Generics ( Data, Typeable )+import Data.Typeable ( Typeable ) import Data.Map ( Map, empty, toList, unionWith, singleton, findWithDefault ) import qualified Data.Map as M ( map ) import Data.Map ( Map )
src/full/Agda/Compiler/JS/Syntax.hs view
@@ -2,7 +2,7 @@   #-} module Agda.Compiler.JS.Syntax where -import Data.Generics ( Data, Typeable )+import Data.Typeable ( Typeable ) import Data.Map ( Map, fold ) import Data.Set ( Set, empty, singleton, union ) @@ -28,29 +28,29 @@   BinOp Exp String Exp |   PreOp String Exp |   Const String-  deriving (Typeable, Data, Show)+  deriving (Typeable, Show)  -- Local identifiers are named by De Bruijn indices. -- Global identifiers are named by string lists. -- Object members are named by strings.  newtype LocalId = LocalId Nat-  deriving (Typeable, Data, Eq, Ord, Show)+  deriving (Typeable, Eq, Ord, Show)  newtype GlobalId = GlobalId [String]-  deriving (Typeable, Data, Eq, Ord, Show)+  deriving (Typeable, Eq, Ord, Show)  newtype MemberId = MemberId String-  deriving (Typeable, Data, Eq, Ord, Show)+  deriving (Typeable, Eq, Ord, Show)  -- The top-level compilation unit is a module, which names -- the GId of its exports, and a list of definitions  data Export = Export { expName :: [MemberId], defn :: Exp }-  deriving (Typeable, Data, Show)+  deriving (Typeable, Show)  data Module = Module { modName :: GlobalId, exports :: [Export] }-  deriving (Typeable, Data, Show)+  deriving (Typeable, Show)  -- Note that modules are allowed to be recursive, via the Self expression, -- which is bound to the exported module.
src/full/Agda/Compiler/MAlonzo/Compiler.hs view
@@ -3,7 +3,7 @@ module Agda.Compiler.MAlonzo.Compiler where  import Control.Applicative-import qualified Control.Exception as E+import Control.Monad ((<=<)) import Control.Monad.Reader import Control.Monad.State import Data.Char@@ -14,13 +14,10 @@ import qualified Language.Haskell.Exts.Parser as HS import qualified Language.Haskell.Exts.Syntax as HS import System.Cmd-import System.Directory-import System.Exit-import System.IO-import System.Time-import System.Process-import System.FilePath hiding (normalise, (<.>))+import System.Directory (createDirectoryIfMissing)+import System.FilePath hiding (normalise) +import Agda.Compiler.CallCompiler import Agda.Compiler.MAlonzo.Misc import Agda.Compiler.MAlonzo.Pretty import Agda.Compiler.MAlonzo.Primitives@@ -32,24 +29,26 @@ import Agda.Syntax.Internal import Agda.Syntax.Literal import Agda.TypeChecking.Monad+import Agda.TypeChecking.Monad.Builtin import Agda.TypeChecking.Monad.Options import Agda.TypeChecking.Reduce-import Agda.TypeChecking.Rules.Builtin.Coinduction+-- import Agda.TypeChecking.Rules.Builtin.Coinduction import Agda.TypeChecking.Pretty import Agda.TypeChecking.Substitute+import Agda.TypeChecking.Telescope import Agda.TypeChecking.Level (reallyUnLevelView) import Agda.Utils.FileName import Agda.Utils.Monad-import qualified Agda.Utils.IO.Locale as LocIO import qualified Agda.Utils.IO.UTF8 as UTF8 import Agda.Utils.Impossible+import qualified Agda.Utils.HashMap as HMap  #include "../../undefined.h"  compilerMain :: Interface -> TCM () compilerMain mainI =   -- Preserve the state (the compiler modifies the state).-  bracket get put $ \_ -> do+  localState $ do      -- Compute the output directory.     opts <- commandLineOptions@@ -107,9 +106,8 @@ definitions :: Definitions -> TCM [HS.Decl] definitions defs = do   kit <- coinductionKit-  M.fold (liftM2 (++) . (definition kit <.> instantiateFull))-         declsForPrim-         defs+  HMap.foldr (liftM2 (++) . (definition kit <=< instantiateFull))+             declsForPrim defs  -- | Note that the INFINITY, SHARP and FLAT builtins are translated as -- follows (if a 'CoinductionKit' is given):@@ -120,17 +118,20 @@ --   sharp :: a -> a --   sharp x = x -----   flat :: forall a. () -> forall b. () -> b -> b---   flat _ _ x = x+--   flat :: a -> a+--   flat x = x -- @  definition :: Maybe CoinductionKit -> Definition -> TCM [HS.Decl] -- ignore irrelevant definitions-definition kit (Defn Forced     _ _  _ _ _ _) = __IMPOSSIBLE__-definition kit (Defn NonStrict  _ _  _ _ _ _) = __IMPOSSIBLE__-definition kit (Defn Irrelevant _ _  _ _ _ _) = return []-definition kit (Defn Relevant   q ty _ _ compiled d) = do-  checkTypeOfMain q ty+{- Andreas, 2012-10-02: Invariant no longer holds+definition kit (Defn Forced     _ _  _ _ _ _ _ _) = __IMPOSSIBLE__+definition kit (Defn UnusedArg  _ _  _ _ _ _ _ _) = __IMPOSSIBLE__+definition kit (Defn NonStrict  _ _  _ _ _ _ _ _) = __IMPOSSIBLE__+-}+definition kit (Defn Irrelevant _ _  _ _ _ _ _ _) = return []+definition kit (Defn _          q ty _ _ _ _ compiled d) = do+  checkTypeOfMain q ty $ do   (infodecl q :) <$> case d of      _ | Just (HsDefn ty hs) <- compiledHaskell compiled ->@@ -168,9 +169,9 @@           x    = ihname "x" 0       return $         [ HS.TypeSig dummy [flat] $ fakeType $-            "forall a. () -> forall b. () -> b -> b"+            "forall a. a -> a"         , HS.FunBind [HS.Match dummy flat-                               [HS.PWildCard, HS.PWildCard, HS.PVar x]+                               [HS.PVar x]                                Nothing                                (HS.UnGuardedRhs (HS.Var (HS.UnQual x)))                                (HS.BDecls [])]@@ -242,7 +243,7 @@ conArityAndPars :: QName -> TCM (Nat, Nat) conArityAndPars q = do   def <- getConstInfo q-  TelV tel _ <- telViewM $ defType def+  TelV tel _ <- telView $ defType def   let Constructor{ conPars = np } = theDef def       n = genericLength (telToList tel)   return (n - np, np)@@ -301,7 +302,7 @@   irr (LitP {})   = return False   irr (ConP q _ ps) =     (&&) <$> singleConstructorType q-         <*> (and <$> mapM irr' ps)+         <*> (andM $ L.map irr' ps)    -- | Irrelevant patterns are naturally irrefutable.   irr' (Arg _ Irrelevant _) = return $ True@@ -319,7 +320,7 @@ --   Types are extracted as @()@. --   @DontCare@ outside of irrelevant arguments is extracted as @error@. term :: Term -> ReaderT Nat TCM HS.Exp-term tm0 = case tm0 of+term tm0 = case ignoreSharing tm0 of   Var   i as -> do n <- ask; apps (hsVarUQ $ ihname "v" (n - i - 1)) as   Lam   _ at -> do n <- ask; HS.Lambda dummy [HS.PVar $ ihname "v" n] <$>                               local (1+) (term $ absBody at)@@ -335,6 +336,7 @@   Sort  _    -> return HS.unit_con   MetaV _ _  -> mazerror "hit MetaV"   DontCare _ -> return $ rtmError $ "hit DontCare"+  Shared{}   -> __IMPOSSIBLE__   where apps =  foldM (\h a -> HS.App h <$> term' a)  -- | Irrelevant arguments are replaced by Haskells' ().@@ -444,6 +446,7 @@         , "ExistentialQuantification"         , "ScopedTypeVariables"         , "NoMonomorphismRestriction"+        , "Rank2Types"         ]  rteModule :: HS.Module@@ -466,11 +469,19 @@   ]   where     parse = HS.parseWithMode-              HS.defaultParseMode{HS.extensions = [HS.ExplicitForall]}-+              HS.defaultParseMode{HS.extensions = [explicitForAll]}     ok (HS.ParseOk d)   = d     ok HS.ParseFailed{} = __IMPOSSIBLE__ +explicitForAll :: HS.Extension+explicitForAll =+-- GHC 7.0.1 cannot parse the following CPP conditional+-- error: missing binary operator before token "("+#if MIN_VERSION_haskell_src_exts(1,12,0)+  HS.ExplicitForAll+#else+  HS.ExplicitForall+#endif  compileDir :: TCM FilePath compileDir = do@@ -511,6 +522,7 @@   let overridableArgs =         [ "-O"         , "-o", mdir </> show outputName+        , "-Werror"         ]       otherArgs       =         [ "-i" ++ mdir@@ -519,7 +531,6 @@         , "--make"         , "-fwarn-incomplete-patterns"         , "-fno-warn-overlapping-patterns"-        , "-Werror"         ]       args     = overridableArgs ++ opts ++ otherArgs       compiler = "ghc"@@ -527,23 +538,4 @@   -- Note: Some versions of GHC use stderr for progress reports. For   -- those versions of GHC we don't print any progress information   -- unless an error is encountered.--  reportSLn "" 1 $ "calling: " ++ L.intercalate " " (compiler : args)-  (_, _, err, p) <--    liftIO $ createProcess (proc compiler args){ std_err = CreatePipe }--  errors <- liftIO $ case err of-    Nothing  -> __IMPOSSIBLE__-    Just err -> do-      -- The handle should be in text mode.-      hSetBinaryMode err False-      liftIO $ LocIO.hGetContents err--  exitcode <- liftIO $ do-    -- Ensure that the output has been read before waiting for the-    -- process.-    E.evaluate (length errors)-    waitForProcess p-  case exitcode of-    ExitFailure _ -> typeError (CompilationError errors)-    _             -> return ()+  callCompiler compiler args
src/full/Agda/Compiler/MAlonzo/Misc.hs view
@@ -3,7 +3,6 @@ module Agda.Compiler.MAlonzo.Misc where  import Control.Monad.State-import Data.Generics import Data.List as L import Data.Map as M import Data.Set as S@@ -11,7 +10,6 @@ import Data.Function import qualified Language.Haskell.Exts.Syntax as HS import System.IO-import System.Time  import Agda.Interaction.Imports import Agda.Syntax.Common@@ -85,9 +83,12 @@ ihname s i = HS.Ident $ s ++ show i  unqhname :: String -> QName -> HS.Name+{- NOT A GOOD IDEA, see Issue 728 unqhname s q | ("d", "main") == (s, show(qnameName q)) = HS.Ident "main"              | otherwise = ihname s (idnum $ nameId $ qnameName $ q)-  where idnum (NameId x _) = fromIntegral x+-}+unqhname s q = ihname s (idnum $ nameId $ qnameName $ q)+   where idnum (NameId x _) = fromIntegral x  -- the toplevel module containing the given one tlmodOf :: ModuleName -> TCM HS.ModuleName@@ -124,7 +125,9 @@  -- qualify name s by the module of builtin b bltQual :: String -> String -> TCM HS.QName-bltQual b s = do (Def q _) <- getBuiltin b; xqual q (HS.Ident s)+bltQual b s = do+  Def q _ <- ignoreSharing <$> getBuiltin b+  xqual q (HS.Ident s)  -- sub-naming for cascaded definitions for concsecutive clauses dsubname q i | i == 0    = unqhname "d"                     q@@ -187,26 +190,3 @@  dummy :: a dummy = error "MAlonzo : this dummy value should not have been eval'ed."-------------------------------------------------------- For Debugging----------------------------------------------------gshow' :: Data a => a -> String-gshow' = ( \t ->-           "("-           ++ showConstr (toConstr t)-           ++ concat (gmapQ ((++) " " . gshow') t)-           ++ ")" )-         `extQ` (show :: String -> String)-         `extQ` (show :: Name -> String)-         `extQ` (show :: QName -> String)-         `extQ` (show :: ModuleName -> String)-         `extQ` (gshow' . M.toList :: M.Map QName [AbstractName] -> String)-         `extQ` (gshow' . M.toList :: M.Map QName [AbstractModule] -> String)-         `extQ` (gshow' . M.toList :: M.Map ModuleName Section -> String)-         `extQ` (gshow' . M.toList :: M.Map QName Definition -> String)-         `extQ` (gshow' . M.toList :: M.Map TermHead [Pattern] -> String)-         `extQ` (gshow' . M.toList :: M.Map TermHead [Arg Pattern] -> String)-         `extQ` (gshow' . M.toList :: M.Map String (Builtin String) -> String)-         `extQ` (show :: Scope -> String)
src/full/Agda/Compiler/MAlonzo/Pretty.hs view
@@ -2,16 +2,33 @@ -- Pretty-printing of Haskell modules ------------------------------------------------------------------------ +{-# LANGUAGE FlexibleContexts, FlexibleInstances,+             MultiParamTypeClasses, TemplateHaskell #-}+ module Agda.Compiler.MAlonzo.Pretty where -import Data.Generics+import Data.Generics.Geniplate import qualified Language.Haskell.Exts.Pretty as Pretty+import qualified Language.Haskell.Exts.Syntax as HS  import Agda.Compiler.MAlonzo.Encode --- | Inserts disambiguating parentheses and encodes module names just--- before pretty-printing.+-- | Encodes module names just before pretty-printing. -prettyPrint :: (Pretty.Pretty a, Data a) => a -> String+prettyPrint :: (Pretty.Pretty a, TransformBi HS.ModuleName (Wrap a)) =>+               a -> String prettyPrint = Pretty.prettyPrint .-              everywhere (mkT encodeModuleName)+              unwrap .+              transformBi encodeModuleName .+              Wrap++-- | A wrapper type used to avoid orphan instances.++newtype Wrap a = Wrap { unwrap :: a }++-- Some TransformBiT instances.++instanceTransformBiT [ [t| String |] ] [t| (HS.ModuleName, Wrap HS.Exp)        |]+instanceTransformBiT [ [t| String |] ] [t| (HS.ModuleName, Wrap HS.Module)     |]+instanceTransformBiT [ [t| String |] ] [t| (HS.ModuleName, Wrap HS.ModuleName) |]+instanceTransformBiT [ [t| String |] ] [t| (HS.ModuleName, Wrap HS.QName)      |]
src/full/Agda/Compiler/MAlonzo/Primitives.hs view
@@ -1,3 +1,4 @@+{-# LANGUAGE CPP #-} module Agda.Compiler.MAlonzo.Primitives where  import Control.Monad.Reader@@ -18,29 +19,64 @@ import Agda.TypeChecking.Substitute import Agda.TypeChecking.Pretty import Agda.Utils.Monad+import Agda.Utils.Impossible+import qualified Agda.Utils.HashMap as HMap +#include "../../undefined.h"++{- OLD -- | Check that the main function has type IO a, for some a. checkTypeOfMain :: QName -> Type -> TCM () checkTypeOfMain q ty   | show (qnameName q) /= "main" = return ()   | otherwise = do-    Def io _ <- primIO+    Def io _ <- ignoreSharing <$> primIO     ty <- normalise ty-    case unEl ty of+    case ignoreSharing $ unEl ty of       Def d _ | d == io -> return ()       _                 -> do         err <- fsep $           pwords "The type of main should be" ++           [prettyTCM io] ++ pwords " A, for some A. The given type is" ++ [prettyTCM ty]         typeError $ GenericError $ show err+-} +-- | Check that the main function has type IO a, for some a.+checkTypeOfMain :: QName -> Type -> TCM [HS.Decl] -> TCM [HS.Decl]+checkTypeOfMain q ty ret+  | show (qnameName q) /= "main" = ret+  | otherwise = do+    Def io _ <- ignoreSharing <$> primIO+    ty <- normalise ty+    case ignoreSharing $ unEl ty of+      Def d _ | d == io -> (mainAlias :) <$> ret+      _                 -> do+        err <- fsep $+          pwords "The type of main should be" +++          [prettyTCM io] ++ pwords " A, for some A. The given type is" ++ [prettyTCM ty]+        typeError $ GenericError $ show err+  where+    mainAlias = HS.FunBind [HS.Match dummy mainLHS [] Nothing mainRHS $ HS.BDecls [] ]+    mainLHS   = HS.Ident "main"+    mainRHS   = HS.UnGuardedRhs $ HS.Var $ HS.UnQual $ unqhname "d" q+ -- Haskell modules to be imported for BUILT-INs importsForPrim :: TCM [HS.ModuleName] importsForPrim =   xForPrim $   L.map (\(s, ms) -> (s, return (L.map HS.ModuleName ms))) $-  [ "CHAR" |-> ["Data.Char"]-  -- , "IO" |-> ["System.IO"]+  [ "CHAR"           |-> ["Data.Char"]+  , "primIsDigit"    |-> ["Data.Char"]+  , "primIsLower"    |-> ["Data.Char"]+  , "primIsDigit"    |-> ["Data.Char"]+  , "primIsAlpha"    |-> ["Data.Char"]+  , "primIsSpace"    |-> ["Data.Char"]+  , "primIsAscii"    |-> ["Data.Char"]+  , "primIsLatin1"   |-> ["Data.Char"]+  , "primIsPrint"    |-> ["Data.Char"]+  , "primIsHexDigit" |-> ["Data.Char"]+  , "primToUpper"    |-> ["Data.Char"]+  , "primToLower"    |-> ["Data.Char"]   ]   where (|->) = (,) @@ -107,10 +143,15 @@  xForPrim :: [(String, TCM [a])] -> TCM [a] xForPrim table = do-  qs <- keys   <$> curDefs+  qs <- HMap.keys <$> curDefs   bs <- toList <$> gets stBuiltinThings+  let getName (Builtin (Def q _))    = q+      getName (Builtin (Con q _))    = q+      getName (Builtin (Shared p))   = getName (Builtin $ derefPtr p)+      getName (Builtin _)            = __IMPOSSIBLE__+      getName (Prim (PrimFun q _ _)) = q   concat <$> sequence [ maybe (return []) id $ L.lookup s table-                        | (s, Builtin (Def q _)) <- bs, q `elem` qs ]+                        | (s, def) <- bs, getName def `elem` qs ]   -- Definition bodies for primitive functions@@ -165,7 +206,7 @@   , "primIsAscii"        |-> pred "Data.Char.isAscii"   , "primIsLatin1"       |-> pred "Data.Char.isLatin1"   , "primIsPrint"        |-> pred "Data.Char.isPrint"-  , "primIsHExDigit"     |-> pred "Data.Char.isHexDigit"+  , "primIsHexDigit"     |-> pred "Data.Char.isHexDigit"   , "primToUpper"        |-> return "Data.Char.toUpper"   , "primToLower"        |-> return "Data.Char.toLower"   , "primCharToNat" |-> do toN <- bltQual' "NATURAL" mazIntToNat@@ -218,7 +259,9 @@   unimplemented = typeError $ NotImplemented s    lam x t = Lam Hidden (Abs x t)+{- UNUSED   var x   = Arg Hidden Relevant (Var x [])+-}  ---------------------- 
src/full/Agda/Interaction/BasicOps.hs view
@@ -17,7 +17,7 @@ import Agda.Syntax.Position import Agda.Syntax.Abstract as A hiding (Open) import Agda.Syntax.Common-import Agda.Syntax.Info(ExprInfo(..),MetaInfo(..))+import Agda.Syntax.Info(ExprInfo(..),MetaInfo(..),emptyMetaInfo) import Agda.Syntax.Internal as I import Agda.Syntax.Translation.InternalToAbstract import Agda.Syntax.Translation.AbstractToConcrete@@ -29,7 +29,7 @@  import Agda.TypeChecker import Agda.TypeChecking.Conversion-import Agda.TypeChecking.Monad as M+import Agda.TypeChecking.Monad as M hiding (MetaInfo) import Agda.TypeChecking.MetaVars import Agda.TypeChecking.Reduce import Agda.TypeChecking.Substitute@@ -39,7 +39,7 @@ import Agda.TypeChecking.Records import Agda.TypeChecking.Irrelevance (wakeIrrelevantVars) import Agda.TypeChecking.Pretty (prettyTCM)-import Agda.TypeChecking.Eliminators (unElim)+-- UNUSED: import Agda.TypeChecking.Eliminators (unElim) import qualified Agda.TypeChecking.Pretty as TP  import Agda.Utils.List@@ -82,7 +82,8 @@ 		    let t' = t `piApply` ctx 		    v	<- checkExpr e t' 		    case mvInstantiation mv of-			InstV v' -> equalTerm t' v (v' `apply` ctx)+			InstV v' -> whenM ((Irrelevant /=) <$> asks envRelevance) $+                                      equalTerm t' v (v' `apply` ctx) 			_	 -> updateMeta mi v 		    reify v 		 IsSort{} -> __IMPOSSIBLE__@@ -93,7 +94,7 @@   mis <- getInteractionPoints   r <- getInteractionRange ii   updateMetaVarRange mi $ maybe r id mr-  giveExpr mi e `catchError` \err -> case errError err of+  giveExpr mi e `catchError` \err -> case err of     PatternErr _ -> do       err <- withInteractionId ii $ TP.text "Failed to give" TP.<+> prettyTCM e       typeError $ GenericError $ show err@@ -129,8 +130,9 @@ 				    { Agda.Syntax.Info.metaRange = r                                     , Agda.Syntax.Info.metaScope = scope { scopePrecedence = ArgumentCtx } 				    , metaNumber = Nothing+                                    , metaNameSuggestion = "" 				    }-                      in App (ExprRange $ r) e (defaultArg $ unnamed metaVar)+                      in App (ExprRange $ r) e (defaultNamedArg metaVar)                  --ToDo: The position of metaVar is not correct                  --ToDo: The fixity of metavars is not correct -- fixed? MT @@ -151,6 +153,7 @@   data Rewrite =  AsIs | Instantiated | HeadNormal | Normalised+    deriving (Read)  --rewrite :: Rewrite -> Term -> TCM Term rewrite AsIs	     t = return t@@ -171,7 +174,7 @@       | JustSort b | CmpSorts Comparison b b       | Guard (OutputConstraint a b) ProblemId       | Assign b a | TypedAssign b a a-      | IsEmptyType a | FindInScopeOF b+      | IsEmptyType a | FindInScopeOF b a [(a,a)]   deriving (Functor)  -- | A subset of 'OutputConstraint'.@@ -198,7 +201,7 @@       Assign i _           -> i       TypedAssign i _ _    -> i       IsEmptyType _        -> __IMPOSSIBLE__   -- Should never be used on IsEmpty constraints-      FindInScopeOF _      -> __IMPOSSIBLE__+      FindInScopeOF _ _ _  -> __IMPOSSIBLE__  instance Reify ProblemConstraint (Closure (OutputForm Expr Expr)) where   reify (PConstr pid cl) = enterClosure cl $ \c -> buildClosure =<< (OutputForm pid <$> reify c)@@ -230,10 +233,14 @@           OpenIFS{}  -> __IMPOSSIBLE__           InstS{} -> __IMPOSSIBLE__           InstV{} -> __IMPOSSIBLE__-    reify (FindInScope m) = do+    reify (FindInScope m cands) = do       m' <- reify (MetaV m [])-      return $ FindInScopeOF m' -- IFSTODO-    reify (IsEmpty a) = IsEmptyType <$> reify a+      ctxArgs <- getContextArgs+      t <- getMetaType m+      t' <- reify t+      cands' <- mapM (\(tm,ty) -> (,) <$> reify tm <*> reify ty) cands+      return $ FindInScopeOF m' t' cands' -- IFSTODO+    reify (IsEmpty r a) = IsEmptyType <$> reify a  showComparison :: Comparison -> String showComparison CmpEq  = " = "@@ -257,7 +264,9 @@     show (Assign m e)           = show m ++ " := " ++ show e     show (TypedAssign m e a)    = show m ++ " := " ++ show e ++ " :? " ++ show a     show (IsEmptyType a)        = "Is empty: " ++ show a-    show (FindInScopeOF s)      = "Find in Scope: " ++ show s+    show (FindInScopeOF s t cs) = "Resolve implicit argument " ++ showCand (s,t) ++ ". Candidates: [" +++                                    intercalate ", " (map showCand cs) ++ "]"+      where showCand (tm,ty) = show tm ++ " : " ++ show ty  instance (ToConcrete a c, ToConcrete b d) =>          ToConcrete (OutputForm a b) (OutputForm c d) where@@ -285,7 +294,9 @@     toConcrete (TypedAssign m e a) = TypedAssign <$> toConcrete m <*> toConcreteCtx TopCtx e                                                                   <*> toConcreteCtx TopCtx a     toConcrete (IsEmptyType a) = IsEmptyType <$> toConcreteCtx TopCtx a-    toConcrete (FindInScopeOF s) = FindInScopeOF <$> toConcrete s+    toConcrete (FindInScopeOF s t cs) =+      FindInScopeOF <$> toConcrete s <*> toConcrete t+                    <*> mapM (\(tm,ty) -> (,) <$> toConcrete tm <*> toConcrete ty) cs  instance (Pretty a, Pretty b) => Pretty (OutputConstraint' a b) where   pretty (OfType' e t) = pretty e <+> text ":" <+> pretty t@@ -297,8 +308,14 @@ --ToDo: Move somewhere else instance ToConcrete InteractionId C.Expr where     toConcrete (InteractionId i) = return $ C.QuestionMark noRange (Just i)+{- UNUSED instance ToConcrete MetaId C.Expr where-    toConcrete (MetaId i) = return $ C.Underscore noRange (Just i)+    toConcrete x@(MetaId i) = do+      return $ C.Underscore noRange (Just $ "_" ++ show i)+-}+instance ToConcrete NamedMeta C.Expr where+    toConcrete i = do+      return $ C.Underscore noRange (Just $ show i)  judgToOutputForm :: Judgement a c -> OutputConstraint a c judgToOutputForm (HasType e t) = OfType e t@@ -316,7 +333,7 @@     toOutputForm (ii, mi, e) = do       mv <- getMetaInfo <$> lookupMeta mi       withMetaInfo mv $ do-        let m = QuestionMark $ MetaInfo noRange emptyScopeInfo (Just $ fromIntegral ii)+        let m = QuestionMark $ emptyMetaInfo { metaNumber = Just $ fromIntegral ii }         abstractToConcrete_ $ OutputForm 0 $ Assign m e  getSolvedInteractionPoints :: TCM [(InteractionId, MetaId, Expr)]@@ -340,25 +357,30 @@           BlockedConst{}                 -> unsol           PostponedTypeCheckingProblem{} -> unsol -typeOfMetaMI :: Rewrite -> MetaId -> TCM (OutputConstraint Expr MetaId)+typeOfMetaMI :: Rewrite -> MetaId -> TCM (OutputConstraint Expr NamedMeta) typeOfMetaMI norm mi =      do mv <- lookupMeta mi 	withMetaInfo (getMetaInfo mv) $ 	  rewriteJudg mv (mvJudgement mv)    where     rewriteJudg mv (HasType i t) = do+      ms <- getMetaNameSuggestion i       t <- rewrite norm t       vs <- getContextArgs+      let x = NamedMeta ms i       reportSDoc "interactive.meta" 10 $ TP.vcat         [ TP.text $ unwords ["permuting", show i, "with", show $ mvPermutation mv]         , TP.nest 2 $ TP.vcat           [ TP.text "len  =" TP.<+> TP.text (show $ length vs)           , TP.text "args =" TP.<+> prettyTCM vs           , TP.text "t    =" TP.<+> prettyTCM t+          , TP.text "x    =" TP.<+> TP.text (show x)           ]         ]-      OfType i <$> reify (t `piApply` permute (takeP (size vs) $ mvPermutation mv) vs)-    rewriteJudg mv (IsSort i t) = return $ JustSort i+      OfType x <$> reify (t `piApply` permute (takeP (size vs) $ mvPermutation mv) vs)+    rewriteJudg mv (IsSort i t) = do+      ms <- getMetaNameSuggestion i+      return $ JustSort $ NamedMeta ms i   typeOfMeta :: Rewrite -> InteractionId -> TCM (OutputConstraint Expr InteractionId)@@ -371,7 +393,7 @@ typesOfVisibleMetas norm =   liftTCM $ mapM (typeOfMeta norm) =<< getInteractionPoints -typesOfHiddenMetas :: Rewrite -> TCM [OutputConstraint Expr MetaId]+typesOfHiddenMetas :: Rewrite -> TCM [OutputConstraint Expr NamedMeta] typesOfHiddenMetas norm = liftTCM $ do   is    <- getInteractionMetas   store <- Map.filterWithKey (openAndImplicit is) <$> getMetaStore@@ -394,7 +416,7 @@ 	visible _	     = __IMPOSSIBLE__         reifyContext xs = reverse <$> zipWithM out [1..] xs -        out i (Arg h _ (x, t)) = escapeContext i $ do+        out i (Dom h _ (x, t)) = escapeContext i $ do           t' <- reify =<< rewrite norm t           return $ OfType x t' @@ -424,22 +446,22 @@  withMetaId :: MetaId -> TCM a -> TCM a withMetaId m ret = do-  info <- lookupMeta m-  withMetaInfo (mvInfo info) ret+  mv <- lookupMeta m+  withMetaInfo' mv ret  -- The intro tactic  -- Returns the terms (as strings) that can be -- used to refine the goal. Uses the coverage checker -- to find out which constructors are possible.-introTactic :: InteractionId -> TCM [String]-introTactic ii = do+introTactic :: Bool -> InteractionId -> TCM [String]+introTactic pmLambda ii = do   mi <- lookupInteractionId ii   mv <- lookupMeta mi   withMetaInfo (getMetaInfo mv) $ case mvJudgement mv of     HasType _ t -> do         t <- reduce =<< piApply t <$> getContextArgs-        case unEl t of+        case ignoreSharing $ unEl t of           I.Def d _ -> do             def <- getConstInfo d             case theDef def of@@ -464,27 +486,34 @@      introFun tel = addCtxTel tel' $ do         imp <- showImplicitArguments-        let okHiding h = imp || h == NotHidden-        vars <- mapM showTCM [ Arg h Relevant (I.Var i [])-                             | (h, i) <- zip hs $ reverse [0..n - 1]-                             , okHiding h-                             ]-        return [ unwords $ ["λ"] ++ vars ++ ["→", "?"] ]+        let okHiding0 h = imp || h == NotHidden+            -- if none of the vars were displayed, we would get a parse error+            -- thus, we switch to displaying all+            allHidden   = null (filter okHiding0 hs)+            okHiding    = if allHidden then const True else okHiding0+        vars <- -- setShowImplicitArguments (imp || allHidden) $+                (if allHidden then withShowAllArguments else id) $+                  mapM showTCM [ Arg h Relevant (var i)+                               | (h, i) <- zip hs $ downFrom n+                               , okHiding h+                               ]+        if pmLambda+           then return [ unwords $ ["λ", "{"] ++ vars ++ ["→", "?", "}"] ]+           else return [ unwords $ ["λ"]      ++ vars ++ ["→", "?"] ]       where         n = size tel-        hs   = map argHiding $ telToList tel+        hs   = map domHiding $ telToList tel         tel' = telFromList [ fmap makeName b | b <- telToList tel ]         makeName ("_", t) = ("x", t)         makeName (x, t)   = (x, t)      introData t = do-      let tel  = telFromList [defaultArg ("_", t)]-          perm = idP 1+      let tel  = telFromList [domFromArg $ defaultArg ("_", t)]           pat  = [defaultArg (I.VarP "c")]-      r <- split CoInductive tel perm pat 0+      r <- splitLast CoInductive tel pat       case r of         Left err -> return []-        Right cs -> mapM showTCM $ concatMap (conName . scPats) cs+        Right cov -> mapM showTCM $ concatMap (conName . scPats) $ splitClauses cov      introRec d = do       hfs <- getRecordFieldNames d@@ -517,7 +546,7 @@           M.withCurrentModule current $             withScope_ scope $               addContext (zipWith' (fmap . (,))-                                   (map snd $ scopeLocals scope)+                                   (reverse $ map snd $ scopeLocals scope)                                    (map (fmap snd) $ telToList tel)) $                 m 
src/full/Agda/Interaction/CommandLine/CommandLine.hs view
@@ -10,7 +10,6 @@ import Data.Map as Map import Data.List as List import Data.Maybe-import qualified Agda.Utils.IO.Locale as LocIO  import Agda.Interaction.BasicOps as BasicOps hiding (parseExpr) import Agda.Interaction.Monad@@ -69,16 +68,16 @@ 			do  case matchCommand cmd cmds of 				Right c	-> go =<< liftTCM (c args) 				Left []	->-				    do	liftIO $ LocIO.putStrLn $ "Unknown command '" ++ cmd ++ "'"+				    do	liftIO $ putStrLn $ "Unknown command '" ++ cmd ++ "'" 					loop 				Left xs	->-				    do	liftIO $ LocIO.putStrLn $ "More than one command match: " ++ concat (intersperse ", " xs)+				    do	liftIO $ putStrLn $ "More than one command match: " ++ concat (intersperse ", " xs) 					loop 		    Just _ -> 			do  go =<< liftTCM (eval $ fromJust ms) 	    `catchError` \e -> 		do  s <- liftTCM $ prettyError e-		    liftIO $ LocIO.putStrLn s+		    liftIO $ putStrLn s 		    loop  -- | The interaction loop.@@ -100,8 +99,8 @@               Nothing -> emptyScopeInfo 	  `catchError` \e -> do 	    s <- prettyError e-	    liftIO $ LocIO.putStrLn s-	    liftIO $ LocIO.putStrLn "Failed."+	    liftIO $ putStrLn s+	    liftIO $ putStrLn "Failed."  	commands = 	    [ "quit"	    |>  \_ -> return $ Return ()@@ -130,13 +129,13 @@ loadFile reload [file] =     do	setInputFile file 	reload-loadFile _ _ = liftIO $ LocIO.putStrLn ":load file"+loadFile _ _ = liftIO $ putStrLn ":load file"  showConstraints :: [String] -> TCM () showConstraints [] =     do	cs <- BasicOps.getConstraints-	liftIO $ LocIO.putStrLn $ unlines (List.map show cs)-showConstraints _ = liftIO $ LocIO.putStrLn ":constraints [cid]"+	liftIO $ putStrLn $ unlines (List.map show cs)+showConstraints _ = liftIO $ putStrLn ":constraints [cid]"   showMetas :: [String] -> TCM ()@@ -146,21 +145,21 @@ 	  s <- typeOfMeta AsIs i 	  r <- getInteractionRange i 	  d <- showA s-	  liftIO $ LocIO.putStrLn $ d ++ " " ++ show r+	  liftIO $ putStrLn $ d ++ " " ++ show r showMetas [m,"normal"] =     do	i <- InteractionId <$> readM m 	withInteractionId i $ do 	  s <- showA =<< typeOfMeta Normalised i 	  r <- getInteractionRange i-	  liftIO $ LocIO.putStrLn $ s ++ " " ++ show r+	  liftIO $ putStrLn $ s ++ " " ++ show r showMetas [] =     do  interactionMetas <- typesOfVisibleMetas AsIs         hiddenMetas      <- typesOfHiddenMetas  AsIs-        mapM_ (liftIO . LocIO.putStrLn) =<< mapM showII interactionMetas+        mapM_ (liftIO . putStrLn) =<< mapM showII interactionMetas 	mapM_ print' hiddenMetas     where 	showII o = withInteractionId (outputFormId $ OutputForm 0 o) $ showA o-	showM  o = withMetaId (outputFormId $ OutputForm 0 o) $ showA o+	showM  o = withMetaId (nmid $ outputFormId $ OutputForm 0 o) $ showA o  	metaId (OfType i _) = i 	metaId (JustType i) = i@@ -168,23 +167,23 @@ 	metaId (Assign i e) = i 	metaId _ = __IMPOSSIBLE__ 	print' x = do-	    r <- getMetaRange (metaId x)+	    r <- getMetaRange $ nmid $ metaId x 	    d <- showM x-	    liftIO $ LocIO.putStrLn $ d ++ "  [ at " ++ show r ++ " ]"-showMetas _ = liftIO $ LocIO.putStrLn $ ":meta [metaid]"+	    liftIO $ putStrLn $ d ++ "  [ at " ++ show r ++ " ]"+showMetas _ = liftIO $ putStrLn $ ":meta [metaid]"   showScope :: TCM () showScope = do   scope <- getScope-  liftIO $ LocIO.print scope+  liftIO $ print scope  metaParseExpr ::  InteractionId -> String -> TCM A.Expr metaParseExpr ii s =     do	m <- lookupInteractionId ii         scope <- getMetaScope <$> lookupMeta m         r <- getRange <$> lookupMeta m-        --liftIO $ LocIO.putStrLn $ show scope+        --liftIO $ putStrLn $ show scope         let pos = case rStart r of                     Nothing  -> __IMPOSSIBLE__                     Just pos -> pos@@ -204,7 +203,7 @@ giveMeta s | length s >= 2 =     do  actOnMeta s (\ii -> \e  -> give ii Nothing e)         return ()-giveMeta _ = liftIO $ LocIO.putStrLn $ ": give" ++ " metaid expr"+giveMeta _ = liftIO $ putStrLn $ ": give" ++ " metaid expr"   @@ -212,7 +211,7 @@ refineMeta s | length s >= 2 =     do  actOnMeta s (\ii -> \e  -> refine ii Nothing e)         return ()-refineMeta _ = liftIO $ LocIO.putStrLn $ ": refine" ++ " metaid expr"+refineMeta _ = liftIO $ putStrLn $ ": refine" ++ " metaid expr"   @@ -223,8 +222,8 @@ evalIn :: [String] -> TCM () evalIn s | length s >= 2 =     do	d <- actOnMeta s $ \_ e -> prettyA =<< evalInCurrent e-        liftIO $ LocIO.print d-evalIn _ = liftIO $ LocIO.putStrLn ":eval metaid expr"+        liftIO $ print d+evalIn _ = liftIO $ putStrLn ":eval metaid expr"  parseExpr :: String -> TCM A.Expr parseExpr s = do@@ -236,7 +235,7 @@     do	e <- parseExpr s         v <- evalInCurrent e 	e <- prettyTCM v-	liftIO $ LocIO.putStrLn $ show e+	liftIO $ putStrLn $ show e 	return Continue     where 	evalInCurrent e = do@@ -250,22 +249,22 @@     do  e  <- parseExpr (unwords s)         e0 <- typeInCurrent Normalised e         e1 <- typeInCurrent AsIs e-	liftIO . LocIO.putStrLn =<< showA e1+	liftIO . putStrLn =<< showA e1  typeIn :: [String] -> TCM () typeIn s@(_:_:_) =     actOnMeta s $ \i e ->     do	e1 <- typeInMeta i Normalised e         e2 <- typeInMeta i AsIs e-	liftIO . LocIO.putStrLn =<< showA e1-typeIn _ = liftIO $ LocIO.putStrLn ":typeIn meta expr"+	liftIO . putStrLn =<< showA e1+typeIn _ = liftIO $ putStrLn ":typeIn meta expr"  showContext :: [String] -> TCM () showContext (meta:args) = do     i <- InteractionId <$> readM meta     mi <- lookupMeta =<< lookupInteractionId i     withMetaInfo (getMetaInfo mi) $ do-    ctx <- List.map unArg . telToList <$> getContextTelescope+    ctx <- List.map unDom . telToList <$> getContextTelescope     zipWithM_ display ctx $ reverse $ zipWith const [1..] ctx     where 	display (x, t) n = do@@ -273,8 +272,8 @@ 		    ["normal"] -> normalise $ raise n t 		    _	       -> return $ raise n t 	    d <- prettyTCM t-	    liftIO $ LocIO.print $ text x <+> text ":" <+> d-showContext _ = liftIO $ LocIO.putStrLn ":Context meta"+	    liftIO $ print $ text x <+> text ":" <+> d+showContext _ = liftIO $ putStrLn ":Context meta"  -- | The logo that prints when Agda is started in interactive mode. splashScreen :: String@@ -294,7 +293,7 @@  -- | The help message help :: [Command a] -> IO ()-help cs = LocIO.putStr $ unlines $+help cs = putStr $ unlines $     [ "Command overview" ] ++ List.map explain cs ++     [ "<exp> Infer type of expression <exp> and evaluate it." ]     where
src/full/Agda/Interaction/EmacsCommand.hs view
@@ -1,16 +1,20 @@ --------------------------------------------------------------------------- | Low-level code for instructing Emacs to do things+-- | Code for instructing Emacs to do things ------------------------------------------------------------------------  {-# LANGUAGE TypeSynonymInstances, FlexibleInstances #-}  module Agda.Interaction.EmacsCommand   ( Lisp(..)+  , response   , putResponse+  , display_info'+  , clearRunningInfo+  , displayRunningInfo   ) where -import qualified Agda.Utils.IO.Locale as LocIO import Agda.Utils.Pretty+import Agda.Utils.String  -- | Simple Emacs Lisp expressions. @@ -30,16 +34,56 @@   pretty (L xs)     = parens (hsep (map pretty xs))   pretty (Q x)      = text "'" <> pretty x -instance Pretty String where pretty = text+instance Pretty String where+  pretty = text -instance Pretty a => Show (Lisp a) where show = show . pretty+instance Pretty a => Show (Lisp a) where+  show = show . pretty  -- | Formats a response command.-+--+--   Replaces @'\n'@ with spaces to ensure that each command is a+--   single line. response :: Lisp String -> String-response l = show (text "agda2_mode_code" <+> pretty l)+response = (++ "\n") . map replaceNewLines . show . pretty+  where+  replaceNewLines '\n' = ' '+  replaceNewLines c    = c  -- | Writes a response command to standard output.  putResponse :: Lisp String -> IO ()-putResponse = LocIO.putStrLn . response+putResponse = putStr . response++-- | @display_info' append header content@ displays @content@ (with+-- header @header@) in some suitable way. If @append@ is @True@, then+-- the content is appended to previous content (if any), otherwise any+-- previous content is deleted.++display_info' :: Bool -> String -> String -> Lisp String+display_info' append bufname content =+    L [ A "agda2-info-action"+      , A (quote bufname)+      , A (quote content)+      , A (if append then "t" else "nil")+      ]++------------------------------------------------------------------------+-- Running info++-- | The name of the running info buffer.++runningInfoBufferName :: String+runningInfoBufferName = "*Type-checking*"++-- | Clear the running info buffer.++clearRunningInfo :: Lisp String+clearRunningInfo =+    display_info' False runningInfoBufferName ""++-- | Display running information about what the type-checker is up to.++displayRunningInfo :: String -> Lisp String+displayRunningInfo s =+    display_info' True runningInfoBufferName s
src/full/Agda/Interaction/Exceptions.hs view
@@ -3,8 +3,8 @@ -} module Agda.Interaction.Exceptions where -import Prelude hiding (catch)-import Control.Exception+import Prelude+import Control.Exception as E import Control.Monad.Trans import System.Exit @@ -17,6 +17,6 @@ -- | Note that 'failOnException' only catches 'ParseError's.  failOnException :: (Range -> String -> IO a) -> IO a -> IO a-failOnException h m = m `catch` handleParseException handler+failOnException h m = m `E.catch` handleParseException handler     where 	handler x = h (getRange x) (show x)
src/full/Agda/Interaction/FindFile.hs view
@@ -26,7 +26,6 @@ import Data.Map (Map) import qualified Data.Map as Map import System.FilePath-import System.Directory  import Agda.Syntax.Concrete import Agda.Syntax.Parser@@ -105,7 +104,7 @@                                   [".agda", ".lagda"]                     ]       existingFiles <--        liftIO $ filterM (doesFileExist . filePath) files+        liftIO $ filterM (doesFileExistCaseSensitive . filePath) files       return $ case nub existingFiles of         []     -> (Left (NotFound files), modFile)         [file] -> (Right file, Map.insert m file modFile)@@ -121,7 +120,7 @@ findInterfaceFile :: TopLevelModuleName -> TCM (Maybe AbsolutePath) findInterfaceFile m = do   f  <- toIFile <$> findFile m-  ex <- liftIO $ doesFileExist $ filePath f+  ex <- liftIO $ doesFileExistCaseSensitive $ filePath f   return $ if ex then Just f else Nothing  -- | Ensures that the module name matches the file name. The file
+ src/full/Agda/Interaction/GhcTop.hs view
@@ -0,0 +1,124 @@+{-# LANGUAGE CPP, ScopedTypeVariables, FlexibleInstances #-}+module Agda.Interaction.GhcTop+    ( mimicGHCi+    ) where++import Data.List+import Data.Maybe+import Control.Monad.Error+import Control.Monad.State++import System.Directory+import System.Environment+import System.IO++import Agda.Utils.Pretty+import Agda.Utils.String++import Agda.TypeChecking.Monad++import Agda.Interaction.Response+import Agda.Interaction.InteractionTop+import Agda.Interaction.EmacsCommand+import Agda.Interaction.Highlighting.Emacs++----------------------------------++-- | 'mimicGHCi' is a fake ghci interpreter for the Emacs frontend+--   and for interaction tests.+--+--   'mimicGHCi' reads the Emacs frontend commands from stdin,+--   interprets them and print the result into stdout.++mimicGHCi :: TCM ()+mimicGHCi = do++    liftIO $ hSetBuffering stdout NoBuffering++    modify $ \st -> st { stInteractionOutputCallback =+                           liftIO . putStrLn . show <=< lispifyResponse }++    opts <- commandLineOptions+    _ <- interact' `runCommandM` initCommandState { optionsOnReload = opts }+    return ()+  where++    interact' :: CommandM ()+    interact' = do+        liftIO $ putStr "Agda2> "+        b <- liftIO isEOF+        if b then return () else do+            r <- liftIO getLine+            _ <- return $! length r     -- force to read the full input line+            case dropWhile (==' ') r of+                ""  -> return ()+                ('-':'-':_) -> return ()+                _ -> case listToMaybe $ reads r of+                    Just (x, "")  -> runInteraction x+                    Just (_, rem) -> liftIO $ putStrLn $ "not consumed: " ++ rem+                    _ ->             liftIO $ putStrLn $ "cannot read: " ++ r+            interact'+++-- | Convert Response to an elisp value for the interactive emacs frontend.++lispifyResponse :: Response -> TCM (Lisp String)+lispifyResponse (Resp_HighlightingInfo info modFile) =+  lispifyHighlightingInfo info modFile+lispifyResponse (Resp_DisplayInfo info) = return $ case info of+    Info_CompilationOk -> f "The module was successfully compiled." "*Compilation result*"+    Info_Constraints s -> f s "*Constraints*"+    Info_AllGoals s -> f s "*All Goals*"+    Info_Auto s -> f s "*Auto*"+    Info_Error s -> f s "*Error*"++    Info_NormalForm s -> f (render s) "*Normal Form*"   -- show?+    Info_InferredType s -> f (render s) "*Inferred Type*"+    Info_CurrentGoal s -> f (render s) "*Current Goal*"+    Info_GoalType s -> f (render s) "*Goal type etc.*"+    Info_ModuleContents s -> f (render s) "*Module contents*"+    Info_Context s -> f (render s) "*Context*"+    Info_Intro s -> f (render s) "*Intro*"+  where f content bufname = display_info' False bufname content+lispifyResponse Resp_ClearHighlighting = return $ L [ A "agda2-highlight-clear" ]+lispifyResponse Resp_ClearRunningInfo = return $ clearRunningInfo+lispifyResponse (Resp_RunningInfo s) = return $ displayRunningInfo $ s ++ "\n"+lispifyResponse (Resp_Status s)+    = return $ L [ A "agda2-status-action"+                 , A (quote $ intercalate "," $ catMaybes [checked, showImpl])+                 ]+  where+    boolToMaybe b x = if b then Just x else Nothing++    checked  = boolToMaybe (sChecked               s) "Checked"+    showImpl = boolToMaybe (sShowImplicitArguments s) "ShowImplicit"++lispifyResponse (Resp_JumpToError f p) = return $ lastTag 3 $+  L [ A "agda2-goto", Q $ L [A (quote f), A ".", A (show p)] ]+lispifyResponse (Resp_InteractionPoints is) = return $ lastTag 1 $+  L [A "agda2-goals-action", Q $ L $ map showNumIId is]+lispifyResponse (Resp_GiveAction ii s)+    = return $ L [A "agda2-give-action", showNumIId ii, A s']+  where+    s' = case s of+        Give_String str -> quote str+        Give_Paren      -> "'paren"+        Give_NoParen    -> "'no-paren"+lispifyResponse (Resp_MakeCaseAction cs) = return $ lastTag 2 $+  L [A "agda2-make-case-action", Q $ L $ map (A . quote) cs]+lispifyResponse (Resp_MakeCase cmd pcs) = return $ lastTag 2 $+  L [A cmd, Q $ L $ map (A . quote) pcs]+lispifyResponse (Resp_SolveAll ps) = return $ lastTag 2 $+  L [A "agda2-solveAll-action", Q . L $ concatMap prn ps]+  where+    prn (ii,e)= [showNumIId ii, A $ quote $ show e]++-- | Adds a \"last\" tag to a response.++lastTag :: Integer -> Lisp String -> Lisp String+lastTag n r = Cons (Cons (A "last") (A $ show n)) r++-- | Show an iteraction point identifier as an elisp expression.++showNumIId :: InteractionId -> Lisp String+showNumIId = A . tail . show
− src/full/Agda/Interaction/GhciTop.hs
@@ -1,1083 +0,0 @@-{-# LANGUAGE CPP, TypeSynonymInstances, FlexibleInstances #-}-{-# OPTIONS -fno-cse #-}--module Agda.Interaction.GhciTop-  ( module Agda.Interaction.GhciTop-  , module Agda.TypeChecker-  , module Agda.TypeChecking.MetaVars-  , module Agda.TypeChecking.Reduce-  , module Agda.TypeChecking.Errors--  , module Agda.Syntax.Position-  , module Agda.Syntax.Parser---  , module SC  -- trivial clash removal: remove all!---  , module SA---  , module SI-  , module Agda.Syntax.Scope.Base-  , module Agda.Syntax.Scope.Monad-  , module Agda.Syntax.Translation.ConcreteToAbstract-  , module Agda.Syntax.Translation.AbstractToConcrete-  , module Agda.Syntax.Translation.InternalToAbstract-  , module Agda.Syntax.Abstract.Name--  , module Agda.Interaction.Exceptions--  , mkAbsolute-  )-  where--import System.Directory-import qualified System.IO as IO-import System.IO.Unsafe-import Data.Char-import Data.Maybe-import Data.IORef-import Data.Function-import Control.Applicative--import Agda.Utils.Fresh-import Agda.Utils.Monad-import Agda.Utils.Pretty as P-import Agda.Utils.String-import Agda.Utils.FileName-import qualified Agda.Utils.Trie as Trie-import Agda.Utils.Tuple-import qualified Agda.Utils.IO.UTF8 as UTF8--import Control.Monad.Error-import Control.Monad.Reader-import Control.Monad.State hiding (State)-import Control.Exception-import Data.List as List-import qualified Data.Map as Map-import System.Exit-import qualified System.Mem as System-import System.Time-import Text.PrettyPrint--import Agda.TypeChecker-import Agda.TypeChecking.Monad as TM-  hiding (initState, setCommandLineOptions)-import qualified Agda.TypeChecking.Monad as TM-import Agda.TypeChecking.MetaVars-import Agda.TypeChecking.Reduce-import Agda.TypeChecking.Errors--import Agda.Syntax.Fixity-import Agda.Syntax.Position-import Agda.Syntax.Parser-import qualified Agda.Syntax.Parser.Tokens as T-import Agda.Syntax.Concrete as SC-import Agda.Syntax.Common as SCo-import Agda.Syntax.Concrete.Name as CN-import Agda.Syntax.Concrete.Pretty ()-import Agda.Syntax.Abstract as SA-import Agda.Syntax.Abstract.Pretty-import Agda.Syntax.Internal as SI-import Agda.Syntax.Scope.Base-import Agda.Syntax.Scope.Monad hiding (bindName, withCurrentModule)-import qualified Agda.Syntax.Info as Info-import Agda.Syntax.Translation.ConcreteToAbstract-import Agda.Syntax.Translation.AbstractToConcrete hiding (withScope)-import Agda.Syntax.Translation.InternalToAbstract-import Agda.Syntax.Abstract.Name--import Agda.Interaction.EmacsCommand-import Agda.Interaction.Exceptions-import Agda.Interaction.FindFile-import Agda.Interaction.Options-import Agda.Interaction.MakeCase-import qualified Agda.Interaction.BasicOps as B-import Agda.Interaction.Highlighting.Emacs-import Agda.Interaction.Highlighting.Generate-import qualified Agda.Interaction.Imports as Imp--import Agda.Termination.TermCheck--import qualified Agda.Compiler.Epic.Compiler as Epic-import qualified Agda.Compiler.MAlonzo.Compiler as MAlonzo-import qualified Agda.Compiler.JS.Compiler as JS--import qualified Agda.Auto.Auto as Auto--#include "../undefined.h"-import Agda.Utils.Impossible--data State = State-  { theTCState           :: TCState-  , theInteractionPoints :: [InteractionId]-    -- ^ The interaction points of the buffer, in the order in which-    --   they appear in the buffer. The interaction points are-    --   recorded in 'theTCState', but when new interaction points are-    --   added by give or refine Agda does not ensure that the ranges-    --   of later interaction points are updated.-  , theCurrentFile       :: Maybe (AbsolutePath, ClockTime)-    -- ^ The file which the state applies to. Only stored if the-    -- module was successfully type checked (potentially with-    -- warnings). The 'ClockTime' is the modification time stamp of-    -- the file when it was last loaded.-  }--initState :: State-initState = State-  { theTCState           = TM.initState-  , theInteractionPoints = []-  , theCurrentFile       = Nothing-  }--{-# NOINLINE theState #-}-theState :: IORef State-theState = unsafePerformIO $ newIORef initState---- | Can the command run even if the relevant file has not been loaded--- into the state?--data Independence-  = Independent (Maybe [FilePath])-    -- ^ Yes. If the argument is @'Just' is@, then @is@ is used as the-    -- command's include directories.-  | Dependent-    -- No.---- | An interactive computation.--data Interaction = Interaction-  { independence :: Independence-    -- ^ Is the command independent?-  , command :: TCM (Maybe ModuleName)-    -- ^ If a module name is returned, then syntax highlighting-    -- information will be written for the given module (by 'ioTCM').-  }---- ^ Is the command independent?--isIndependent :: Interaction -> Bool-isIndependent i = case independence i of-  Independent {} -> True-  Dependent   {} -> False---- | Run a TCM computation in the current state. Should only---   be used for debugging.-ioTCM_ :: TCM a -> IO a-ioTCM_ m = do-  tcs <- readIORef theState-  result <- runTCM $ do-    put $ theTCState tcs-    x <- withEnv initEnv m-    s <- get-    return (x, s)-  case result of-    Right (x, s) -> do-      writeIORef theState $ tcs { theTCState = s }-      return x-    Left err -> do-      Right doc <- runTCM $ prettyTCM err-      putStrLn $ render doc-      return __IMPOSSIBLE__-{--  Right (x, s) <- runTCM $ do-    put $ theTCState tcs-    x <- withEnv initEnv m-    s <- get-    return (x, s)-  writeIORef theState $ tcs { theTCState = s }-  return x--}---- | Runs a 'TCM' computation. All calls from the Emacs mode should be--- wrapped in this function.--ioTCM :: FilePath-         -- ^ The current file. If this file does not match-         -- 'theCurrentFile', and the 'Interaction' is not-         -- \"independent\", then an error is raised.-      -> Maybe FilePath-         -- ^ Syntax highlighting information will be written to this-         -- file, if any.-      -> Interaction-      -> IO ()-ioTCM current highlightingFile cmd = infoOnException $ do-#if MIN_VERSION_base(4,2,0)-  -- Ensure that UTF-8 is used for communication with the Emacs mode.-  IO.hSetEncoding IO.stdout IO.utf8-#endif--  current <- absolute current--  -- Read the state.-  State { theTCState = st } <- readIORef theState--  -- Run the computation.-  r <- runTCM $ catchError (do-           put st-           x  <- withEnv initEnv $ do-                   case independence cmd of-                     Dependent             -> ensureFileLoaded current-                     Independent Nothing   ->-                       -- Make sure that the include directories have-                       -- been set.-                       setCommandLineOptions =<< commandLineOptions-                     Independent (Just is) -> do-                       ex <- liftIO $ doesFileExist $ filePath current-                       setIncludeDirs is $-                         if ex then ProjectRoot current else CurrentDir-                   command cmd-           st <- get-           return (Right (x, st))-         ) (\e -> do-           pers <- stPersistent <$> get-           s    <- prettyError e-           return (Left (pers, s, e))-         )--  -- Upon success: update the state. Upon failure: update the-  -- persistent state, and, for independent commands, the current-  -- file.-  case r of-    Right (Right (m, st')) ->-      modifyIORef theState $ \s ->-        s { theTCState = st'-          }-    Right (Left (pers, _, _)) -> do-      modifyIORef theState $ \s ->-        s { theTCState = (theTCState s) { stPersistent = pers }-          }-    Left _ -> return ()-  when (isIndependent cmd) $-    case r of-      Right (Right _) -> return ()-      _               ->-        modifyIORef theState $ \s ->-          s { theCurrentFile = Nothing-            }--  -- Write out syntax highlighting info.-  case highlightingFile of-    Nothing -> return ()-    Just f  -> do-      let errHi e s = errHighlighting e-                        `mplus`-                      ((\h -> (h, Map.empty)) <$>-                           generateErrorInfo (getRange e) s)-      UTF8.writeFile f $-        showHighlightingInfo $-          case r of-            Right (Right (mm, st')) -> do-              m  <- mm-              mi <- Map.lookup (SA.toTopLevelModuleName m)-                               (stVisitedModules st')-              return ( iHighlighting $ miInterface mi-                     , stModuleToSource st'-                     )-            Right (Left (_ , s, e)) -> errHi e (Just s)-            Left e                  -> errHi e Nothing--  -- If an error was encountered, display an error message and exit-  -- with an error code; otherwise, inform Emacs about the buffer's-  -- goals (if current matches the new current file).-  let errStatus = Status { sChecked               = False-                         , sShowImplicitArguments =-                             optShowImplicit $ stPragmaOptions st-                         }-  case r of-    Right (Left (_, s, e)) -> displayErrorAndExit errStatus (getRange e) s-    Left e                 -> displayErrorAndExit errStatus (getRange e) $-                                tcErrString e-    Right (Right _)        -> do-      f <- theCurrentFile <$> readIORef theState-      case f of-        Just (f, _) | f === current -> do-          is <- theInteractionPoints <$> liftIO (readIORef theState)-          liftIO $ putResponse $-            L [A "agda2-goals-action", Q $ L $ List.map showNumIId is]-        _ -> return ()---- | @cmd_load m includes@ loads the module in file @m@, using--- @includes@ as the include directories.--cmd_load :: FilePath -> [FilePath] -> Interaction-cmd_load m includes =-  cmd_load' m includes True (\_ -> command cmd_metas >> return ())---- | @cmd_load' m includes cmd cmd2@ loads the module in file @m@,--- using @includes@ as the include directories.------ If type checking completes without any exceptions having been--- encountered then the command @cmd r@ is executed, where @r@ is the--- result of 'Imp.typeCheck'.--cmd_load' :: FilePath -> [FilePath]-          -> Bool -- ^ Allow unsolved meta-variables?-          -> ((Interface, Maybe Imp.Warnings) -> TCM ())-          -> Interaction-cmd_load' file includes unsolvedOK cmd =-  Interaction (Independent (Just includes)) $ do-    -- Forget the previous "current file" and interaction points.-    liftIO $ modifyIORef theState $ \s ->-      s { theInteractionPoints = []-        , theCurrentFile       = Nothing-        }--    f <- liftIO $ absolute file-    t <- liftIO $ getModificationTime file--    -- All options (except for the verbosity setting) are reset when a-    -- file is reloaded, including the choice of whether or not to-    -- display implicit arguments. (At this point the include-    -- directories have already been set, so they are preserved.)-    opts <- commandLineOptions-    setCommandLineOptions $-      defaultOptions { optIncludeDirs   = optIncludeDirs opts-                     , optPragmaOptions =-                         (optPragmaOptions defaultOptions)-                           { optAllowUnsolved = unsolvedOK-                           , optVerbose       = optVerbose (optPragmaOptions opts)-                           }-                     }--    -- Reset the state, preserving options and decoded modules. Note-    -- that if the include directories have changed, then the decoded-    -- modules are reset when cmd_load' is run by ioTCM.-    resetState--    ok <- Imp.typeCheck f--    -- The module type checked. If the file was not changed while the-    -- type checker was running then the interaction points and the-    -- "current file" are stored.-    t' <- liftIO $ getModificationTime file-    when (t == t') $ do-      is <- sortInteractionPoints =<< getInteractionPoints-      liftIO $ modifyIORef theState $ \s ->-        s { theInteractionPoints = is-          , theCurrentFile       = Just (f, t)-          }--    cmd ok--    liftIO System.performGC--    return $ Just $ iModuleName (fst ok)---- | Available backends.--data Backend = MAlonzo | Epic | JS---- | @cmd_compile b m includes@ compiles the module in file @m@ using--- the backend @b@, using @includes@ as the include directories.--cmd_compile :: Backend -> FilePath -> [FilePath] -> Interaction-cmd_compile b file includes =-  cmd_load' file includes False (\(i, mw) ->-    case mw of-      Nothing -> do-        case b of-          MAlonzo -> MAlonzo.compilerMain i-          Epic    -> Epic.compilerMain i-          JS      -> JS.compilerMain i-        display_info "*Compilation result*"-                     "The module was successfully compiled."-      Just w ->-        display_info errorTitle $ unlines-          [ "You can only compile modules without unsolved metavariables"-          , "or termination checking problems."-          ])--cmd_constraints :: Interaction-cmd_constraints = Interaction Dependent $ do-    cs <- map show <$> B.getConstraints-    display_info "*Constraints*" (unlines cs)-    return Nothing---- Show unsolved metas. If there are no unsolved metas but unsolved constraints--- show those instead.-cmd_metas :: Interaction-cmd_metas = Interaction Dependent $ do -- CL.showMetas []-  ims <- B.typesOfVisibleMetas B.AsIs-  -- Show unsolved implicit arguments normalised.-  hms <- B.typesOfHiddenMetas B.Normalised-  if not $ null ims && null hms-    then do-      di <- mapM (\i -> B.withInteractionId (B.outputFormId $ B.OutputForm 0 i) (showATop i)) ims-      dh <- mapM showA' hms-      display_info "*All Goals*" $ unlines $ di ++ dh-      return Nothing-    else do-      cs <- B.getConstraints-      if null cs-        then display_info "*All Goals*" "" >> return Nothing-        else command cmd_constraints-  where-    metaId (B.OfType i _) = i-    metaId (B.JustType i) = i-    metaId (B.JustSort i) = i-    metaId (B.Assign i e) = i-    metaId _ = __IMPOSSIBLE__-    showA' m = do-      r <- getMetaRange (metaId m)-      d <- B.withMetaId (B.outputFormId $ B.OutputForm 0 m) (showATop m)-      return $ d ++ "  [ at " ++ show r ++ " ]"---- | If the range is 'noRange', then the string comes from the--- minibuffer rather than the goal.--type GoalCommand = InteractionId -> Range -> String -> Interaction--cmd_give :: GoalCommand-cmd_give = give_gen B.give $ \rng s ce ->-  case ce of-    ce | rng == noRange -> quote (show ce)-    SC.Paren _ _ -> "'paren"-    _            -> "'no-paren"--cmd_refine :: GoalCommand-cmd_refine = give_gen B.refine $ \_ s -> quote . show--give_gen give_ref mk_newtxt ii rng s = Interaction Dependent $-  give_gen' give_ref mk_newtxt ii rng s--give_gen' give_ref mk_newtxt ii rng s = do-  scope     <- getInteractionScope ii-  (ae, iis) <- give_ref ii Nothing =<< B.parseExprIn ii rng s-  let newtxt = A . mk_newtxt rng s $ abstractToConcrete (makeEnv scope) ae-  iis       <- sortInteractionPoints iis-  liftIO $ modifyIORef theState $ \s ->-             s { theInteractionPoints =-                   replace ii iis (theInteractionPoints s) }-  liftIO $ putResponse $ L [A "agda2-give-action", showNumIId ii, newtxt]-  command cmd_metas-  return Nothing-  where-  -- Substitutes xs for x in ys.-  replace x xs ys = concatMap (\y -> if y == x then xs else [y]) ys--cmd_intro :: GoalCommand-cmd_intro ii rng _ = Interaction Dependent $ do-  ss <- B.introTactic ii-  B.withInteractionId ii $ case ss of-    []    -> do-      display_infoD "*Intro*" $ text "No introduction forms found."-      return Nothing-    [s]   -> command $ cmd_refine ii rng s-    _:_:_ -> do-      display_infoD "*Intro*" $-        sep [ text "Don't know which constructor to introduce of"-            , let mkOr []     = []-                  mkOr [x, y] = [text x <+> text "or" <+> text y]-                  mkOr (x:xs) = text x : mkOr xs-              in nest 2 $ fsep $ punctuate comma (mkOr ss)-            ]-      return Nothing--cmd_refine_or_intro :: GoalCommand-cmd_refine_or_intro ii rng s =-  (if null s then cmd_intro else cmd_refine) ii rng s--cmd_auto :: GoalCommand-cmd_auto ii rng s = Interaction Dependent $ do-  (res, msg) <- Auto.auto ii rng s-  case res of-   Left xs -> do-    mapM_ (\(ii, s) -> do-      liftIO $ modifyIORef theState $ \s ->-        s { theInteractionPoints = filter (/= ii) (theInteractionPoints s) }-      liftIO $ putResponse $ L [A "agda2-give-action", showNumIId ii, A $ quote s]-     ) xs-    case msg of-     Nothing -> command cmd_metas >> return ()-     Just msg -> display_info "*Auto*" msg-    return Nothing-   Right (Left cs) -> do-    case msg of-     Nothing -> return ()-     Just msg -> display_info "*Auto*" msg-    liftIO $ putResponse $-     Cons (A "last")-          (L [ A "agda2-make-case-action",-               Q $ L $ List.map (A . quote) cs-             ])-    return Nothing-   Right (Right s) -> give_gen' B.refine (\_ s -> quote . show) ii rng s---- | Sorts interaction points based on their ranges.--sortInteractionPoints :: [InteractionId] -> TCM [InteractionId]-sortInteractionPoints is =-  map fst . sortBy (compare `on` snd) <$>-    mapM (\i -> (,) i <$> getInteractionRange i) is---- | Pretty-prints the type of the meta-variable.--prettyTypeOfMeta :: B.Rewrite -> InteractionId -> TCM Doc-prettyTypeOfMeta norm ii = do-  form <- B.typeOfMeta norm ii-  case form of-    B.OfType _ e -> prettyATop e-    _            -> text <$> showATop form---- | Pretty-prints the context of the given meta-variable.--prettyContext-  :: B.Rewrite      -- ^ Normalise?-  -> Bool           -- ^ Print the elements in reverse order?-  -> InteractionId-  -> TCM Doc-prettyContext norm rev ii = B.withInteractionId ii $ do-  ctx <- B.contextOfMeta ii norm-  es  <- mapM (prettyATop . B.ofExpr) ctx-  ns  <- mapM (showATop   . B.ofName) ctx-  let shuffle = if rev then reverse else id-  return $ align 10 $ filter (not . null. fst) $ shuffle $ zip ns (map (text ":" <+>) es)--cmd_context :: B.Rewrite -> GoalCommand-cmd_context norm ii _ _ = Interaction Dependent $ do-  display_infoD "*Context*" =<< prettyContext norm False ii-  return Nothing--cmd_infer :: B.Rewrite -> GoalCommand-cmd_infer norm ii rng s = Interaction Dependent $ do-  display_infoD "*Inferred Type*"-    =<< B.withInteractionId ii-          (prettyATop =<< B.typeInMeta ii norm =<< B.parseExprIn ii rng s)-  return Nothing--cmd_goal_type :: B.Rewrite -> GoalCommand-cmd_goal_type norm ii _ _ = Interaction Dependent $ do-  s <- B.withInteractionId ii $ prettyTypeOfMeta norm ii-  display_infoD "*Current Goal*" s-  return Nothing---- | Displays the current goal, the given document, and the current--- context.--cmd_goal_type_context_and doc norm ii _ _ = do-  goal <- B.withInteractionId ii $ prettyTypeOfMeta norm ii-  ctx  <- prettyContext norm True ii-  display_infoD "*Goal type etc.*"-                (text "Goal:" <+> goal $+$-                 doc $+$-                 text (replicate 60 '\x2014') $+$-                 ctx)-  return Nothing---- | Displays the current goal and context.--cmd_goal_type_context :: B.Rewrite -> GoalCommand-cmd_goal_type_context norm ii rng s = Interaction Dependent $-  cmd_goal_type_context_and P.empty norm ii rng s---- | Displays the current goal and context /and/ infers the type of an--- expression.--cmd_goal_type_context_infer :: B.Rewrite -> GoalCommand-cmd_goal_type_context_infer norm ii rng s =-  Interaction Dependent $ do-    typ <- B.withInteractionId ii $-             prettyATop =<< B.typeInMeta ii norm =<< B.parseExprIn ii rng s-    cmd_goal_type_context_and (text "Have:" <+> typ) norm ii rng s---- | Shows all the top-level names in the given module, along with--- their types.--showModuleContents :: Range -> String -> TCM ()-showModuleContents rng s = do-  (modules, types) <- B.moduleContents rng s-  types' <- mapM (\(x, t) -> do-                    t <- prettyTCM t-                    return (show x, text ":" <+> t))-                 types-  display_infoD "*Module contents*" $-    text "Modules" $$-    nest 2 (vcat $ map (text . show) modules) $$-    text "Names" $$-    nest 2 (align 10 types')---- | Shows all the top-level names in the given module, along with--- their types. Uses the scope of the given goal.--cmd_show_module_contents :: GoalCommand-cmd_show_module_contents ii rng s = Interaction Dependent $ do-  B.withInteractionId ii $ showModuleContents rng s-  return Nothing---- | Shows all the top-level names in the given module, along with--- their types. Uses the top-level scope.--cmd_show_module_contents_toplevel :: String -> Interaction-cmd_show_module_contents_toplevel s = Interaction Dependent $ do-  B.atTopLevel $ showModuleContents noRange s-  return Nothing---- | Sets the command line options and updates the status information.--setCommandLineOptions :: CommandLineOptions -> TCM ()-setCommandLineOptions opts = do-  TM.setCommandLineOptions opts-  liftIO . displayStatus =<< status---- | Status information.--data Status = Status-  { sShowImplicitArguments :: Bool-    -- ^ Are implicit arguments displayed?-  , sChecked               :: Bool-    -- ^ Has the module been successfully type checked?-  }---- | Computes some status information.--status :: TCM Status-status = do-  showImpl <- showImplicitArguments--  -- Check if the file was successfully type checked, and has not-  -- changed since. Note: This code does not check if any dependencies-  -- have changed, and uses a time stamp to check for changes.-  cur      <- theCurrentFile <$> liftIO (readIORef theState)-  checked  <- case cur of-    Nothing     -> return False-    Just (f, t) -> do-      t' <- liftIO $ getModificationTime $ filePath f-      case t == t' of-        False -> return False-        True  ->-          not . miWarnings . maybe __IMPOSSIBLE__ id <$>-            (getVisitedModule =<<-               maybe __IMPOSSIBLE__ id .-                 Map.lookup f <$> sourceToModule)--  return $ Status { sShowImplicitArguments = showImpl-                  , sChecked               = checked-                  }---- | Shows status information.--showStatus :: Status -> String-showStatus s = intercalate "," $ catMaybes [checked, showImpl]-  where-  boolToMaybe b x = if b then Just x else Nothing--  checked  = boolToMaybe (sChecked               s) "Checked"-  showImpl = boolToMaybe (sShowImplicitArguments s) "ShowImplicit"---- | Displays\/updates status information.--displayStatus :: Status -> IO ()-displayStatus s =-  putResponse $ L [A "agda2-status-action", A (quote $ showStatus s)]---- | @display_info' header content@ displays @content@ (with header--- @header@) in some suitable way.--display_info' :: String -> String -> IO ()-display_info' bufname content =-  putResponse $-    L [ A "agda2-info-action"-      , A (quote bufname)-      , A (quote content)-      ]---- | @display_info@ does what 'display_info'' does, but additionally--- displays some status information (see 'status' and--- 'displayStatus').--display_info :: String -> String -> TCM ()-display_info bufname content = do-  liftIO . displayStatus =<< status-  liftIO $ display_info' bufname content---- | Like 'display_info', but takes a 'Doc' instead of a 'String'.--display_infoD :: String -> Doc -> TCM ()-display_infoD bufname content = display_info bufname (render content)--showNumIId = A . tail . show--takenNameStr :: TCM [String]-takenNameStr = do-  xss <- sequence [ List.map (fst . unArg) <$> getContext-                  , Map.keys <$> asks envLetBindings-                  , List.map qnameName . Map.keys . sigDefinitions <$> getSignature-		  ]-  return $ concat [ parts $ nameConcrete x | x <- concat xss]-  where-    parts x = [ s | Id s <- nameParts x ]--refreshStr :: [String] -> String -> ([String], String)-refreshStr taken s = go nameModifiers where-  go (m:mods) = let s' = s ++ m in-                if s' `elem` taken then go mods else (s':taken, s')-  go _        = __IMPOSSIBLE__--nameModifiers = "" : "'" : "''" : [show i | i <-[3..]]--cmd_make_case :: GoalCommand-cmd_make_case ii rng s = Interaction Dependent $ do-  (casectxt , cs) <- makeCase ii rng s-  B.withInteractionId ii $ do-    hidden <- showImplicitArguments-    pcs <- mapM prettyA $ List.map (extlam_dropLLifted casectxt hidden) cs-    liftIO $ putResponse $-      Cons (A "last")-           (L [ A (emacscmd casectxt)-              , Q $ L $ List.map (A . quote . (extlam_dropName casectxt) . render) pcs-              ])-  return Nothing-  where-    render = renderStyle (style { mode = OneLineMode })-    emacscmd :: CaseContext -> String-    emacscmd FunctionDef = "agda2-make-case-action"-    emacscmd (ExtendedLambda _ _) = "agda2-make-case-action-extendlam"--    -- Drops pattern added to extended lambda functions when lambda lifting them-    extlam_dropLLifted :: CaseContext -> Bool -> SA.Clause -> SA.Clause-    extlam_dropLLifted FunctionDef _ x = x-    extlam_dropLLifted (ExtendedLambda h nh) hidden (SA.Clause (SA.LHS info name nps ps) rhs decl)-      = let n = if hidden then h else nh-        in-         (SA.Clause (SA.LHS info name (drop n nps) ps) rhs decl)--    -- very dirty hack, string manipulation by dropping the function name-    -- and replacing " = " with " -> "-    extlam_dropName :: CaseContext -> String -> String-    extlam_dropName FunctionDef x = x-    extlam_dropName (ExtendedLambda _ _) x = unwords $ map (\ y -> if y == "=" then "→" else y) $ drop 1 $ words x--cmd_solveAll :: Interaction-cmd_solveAll = Interaction Dependent $ do-  out <- getInsts-  liftIO $ putResponse $-    Cons (A "last")-         (L [ A "agda2-solveAll-action"-            , Q . L $ concatMap prn out-            ])-  return Nothing-  where-  getInsts = mapM lowr =<< B.getSolvedInteractionPoints-    where-      lowr (i, m, e) = do-        mi <- getMetaInfo <$> lookupMeta m-        e <- withMetaInfo mi $ lowerMeta <$> abstractToConcreteCtx TopCtx e-        return (i, e)-  prn (ii,e)= [showNumIId ii, A $ quote $ show e]--class LowerMeta a where lowerMeta :: a -> a-instance LowerMeta SC.Expr where-  lowerMeta = go where-    go e = case e of-      Ident _              -> e-      SC.Lit _             -> e-      SC.QuestionMark _ _  -> preMeta-      SC.Underscore _ _    -> preUscore-      SC.App r e1 ae2      -> case appView e of-        SC.AppView (SC.QuestionMark _ _) _ -> preMeta-        SC.AppView (SC.Underscore   _ _) _ -> preUscore-        _ -> SC.App r (go e1) (lowerMeta ae2)-      SC.WithApp r e es	   -> SC.WithApp r (lowerMeta e) (lowerMeta es)-      SC.Lam r bs e1       -> SC.Lam r (lowerMeta bs) (go e1)-      SC.AbsurdLam r h     -> SC.AbsurdLam r h-      SC.ExtendedLam r cs  -> SC.ExtendedLam r cs-      SC.Fun r ae1 e2      -> SC.Fun r (lowerMeta ae1) (go e2)-      SC.Pi tb e1          -> SC.Pi (lowerMeta tb) (go e1)-      SC.Set _             -> e-      SC.Prop _            -> e-      SC.SetN _ _          -> e-      SC.ETel tel          -> SC.ETel (lowerMeta tel)-      SC.Let r ds e1       -> SC.Let r (lowerMeta ds) (go e1)-      Paren r e1           -> case go e1 of-        q@(SC.QuestionMark _ Nothing) -> q-        e2                            -> Paren r e2-      Absurd _          -> e-      As r n e1         -> As r n (go e1)-      SC.Dot r e	-> SC.Dot r (go e)-      SC.RawApp r es	-> SC.RawApp r (lowerMeta es)-      SC.OpApp r x es	-> SC.OpApp r x (lowerMeta es)-      SC.Rec r fs	-> SC.Rec r (List.map (id -*- lowerMeta) fs)-      SC.RecUpdate r e fs -> SC.RecUpdate r (lowerMeta e) (List.map (id -*- lowerMeta) fs)-      SC.HiddenArg r e	-> SC.HiddenArg r (lowerMeta e)-      SC.InstanceArg r e  -> SC.InstanceArg r (lowerMeta e)-      SC.QuoteGoal r x e  -> SC.QuoteGoal r x (lowerMeta e)-      e@SC.Quote{}      -> e-      e@SC.QuoteTerm{}  -> e-      e@SC.Unquote{}    -> e-      SC.DontCare e     -> SC.DontCare (lowerMeta e)--instance LowerMeta (OpApp SC.Expr) where-  lowerMeta (Ordinary e) = Ordinary $ lowerMeta e-  lowerMeta (SyntaxBindingLambda r bs e) = SyntaxBindingLambda r (lowerMeta bs) (lowerMeta e)---instance LowerMeta SC.LamBinding where-  lowerMeta b@(SC.DomainFree _ _ _) = b-  lowerMeta (SC.DomainFull tb)    = SC.DomainFull (lowerMeta tb)--instance LowerMeta SC.TypedBindings where-  lowerMeta (SC.TypedBindings r bs) = SC.TypedBindings r (lowerMeta bs)--instance LowerMeta SC.TypedBinding where-  lowerMeta (SC.TBind r ns e) = SC.TBind r ns (lowerMeta e)-  lowerMeta (SC.TNoBind e)    = SC.TNoBind (lowerMeta e)--instance LowerMeta SC.RHS where-    lowerMeta (SC.RHS e)    = SC.RHS (lowerMeta e)-    lowerMeta  SC.AbsurdRHS = SC.AbsurdRHS--instance LowerMeta (Maybe SC.Expr) where-    lowerMeta (Just e) = Just (lowerMeta e)-    lowerMeta Nothing  = Nothing--instance LowerMeta SC.Declaration where-  lowerMeta = go where-    go d = case d of-      TypeSig rel n e1              -> TypeSig rel n (lowerMeta e1)-      SC.Field n e1                 -> SC.Field n (lowerMeta e1)-      FunClause lhs rhs whcl        -> FunClause lhs (lowerMeta rhs) (lowerMeta whcl)-      SC.DataSig r ind n tel e1     -> SC.DataSig r ind n-                                         (lowerMeta tel) (lowerMeta e1)-      Data r ind n tel e1 cs        -> Data r ind n-                                         (lowerMeta tel) (lowerMeta e1) (lowerMeta cs)-      SC.RecordSig r n tel e1       -> SC.RecordSig r n-                                         (lowerMeta tel) (lowerMeta e1)-      SC.Record r n c tel e1 cs     -> SC.Record r n c-                                         (lowerMeta tel) (lowerMeta e1) (lowerMeta cs)-      Infix _ _                     -> d-      Syntax _ _                     -> d-      SC.Mutual r ds                -> SC.Mutual r (lowerMeta ds)-      Abstract r ds                 -> Abstract r (lowerMeta ds)-      Private r ds                  -> Private r (lowerMeta ds)-      Postulate r sigs              -> Postulate r (lowerMeta sigs)-      SC.Primitive r sigs           -> SC.Primitive r (lowerMeta sigs)-      SC.Open _ _ _                 -> d-      SC.Import _ _ _ _ _           -> d-      SC.Pragma _                   -> d-      ModuleMacro r n modapp op dir -> ModuleMacro r n-                                         (lowerMeta modapp) op dir-      SC.Module r qn tel ds         -> SC.Module r qn (lowerMeta tel) (lowerMeta ds)--instance LowerMeta SC.ModuleApplication where-  lowerMeta (SC.SectionApp r tel e) = SC.SectionApp r (lowerMeta tel) (lowerMeta e)-  lowerMeta (SC.RecordModuleIFS r rec) = SC.RecordModuleIFS r rec--instance LowerMeta SC.WhereClause where-  lowerMeta SC.NoWhere		= SC.NoWhere-  lowerMeta (SC.AnyWhere ds)	= SC.AnyWhere $ lowerMeta ds-  lowerMeta (SC.SomeWhere m ds) = SC.SomeWhere m $ lowerMeta ds--instance LowerMeta a => LowerMeta [a] where-  lowerMeta as = List.map lowerMeta as--instance LowerMeta a => LowerMeta (Arg a) where-  lowerMeta aa = fmap lowerMeta aa--instance LowerMeta a => LowerMeta (Named name a) where-  lowerMeta aa = fmap lowerMeta aa---preMeta   = SC.QuestionMark noRange Nothing-preUscore = SC.Underscore   noRange Nothing--cmd_compute :: Bool -- ^ Ignore abstract?-               -> GoalCommand-cmd_compute ignore ii rng s = Interaction Dependent $ do-  e <- B.parseExprIn ii rng s-  d <- B.withInteractionId ii $ do-         let c = B.evalInCurrent e-         v <- if ignore then ignoreAbstractMode c else c-         prettyATop v-  display_info "*Normal Form*" (show d)-  return Nothing---- | Parses and scope checks an expression (using the \"inside scope\"--- as the scope), performs the given command with the expression as--- input, and displays the result.--parseAndDoAtToplevel-  :: (SA.Expr -> TCM SA.Expr)-     -- ^ The command to perform.-  -> String-     -- ^ The name to use for the buffer displaying the output.-  -> String-     -- ^ The expression to parse.-  -> Interaction-parseAndDoAtToplevel cmd title s = Interaction Dependent $ do-  e <- liftIO $ parse exprParser s-  display_info title =<<-    B.atTopLevel (showA =<< cmd =<< concreteToAbstract_ e)-  return Nothing---- | Parse the given expression (as if it were defined at the--- top-level of the current module) and infer its type.--cmd_infer_toplevel-  :: B.Rewrite  -- ^ Normalise the type?-  -> String-  -> Interaction-cmd_infer_toplevel norm =-  parseAndDoAtToplevel (B.typeInCurrent norm) "*Inferred Type*"---- | Parse and type check the given expression (as if it were defined--- at the top-level of the current module) and normalise it.--cmd_compute_toplevel :: Bool -- ^ Ignore abstract?-                     -> String -> Interaction-cmd_compute_toplevel ignore =-  parseAndDoAtToplevel (if ignore then ignoreAbstractMode . c-                                  else inConcreteMode . c)-                       "*Normal Form*"-  where c = B.evalInCurrent----------------------------------------------------------------------------- Syntax highlighting---- | @cmd_write_highlighting_info source target@ writes syntax--- highlighting information for the module in @source@ into @target@.------ If the module does not exist, or its module name is malformed or--- cannot be determined, or the module has not already been visited,--- or the cached info is out of date, then the representation of \"no--- highlighting information available\" is instead written to--- @target@.------ This command is used to load syntax highlighting information when a--- new file is opened, and it would probably be annoying if jumping to--- the definition of an identifier reset the proof state, so this--- command tries not to do that. One result of this is that the--- command uses the current include directories, whatever they happen--- to be.--cmd_write_highlighting_info :: FilePath -> FilePath -> Interaction-cmd_write_highlighting_info source target =-  Interaction (Independent Nothing) $ do-    liftIO . UTF8.writeFile target . showHighlightingInfo =<< do-      ex <- liftIO $ doesFileExist source-      case ex of-        False -> return Nothing-        True  -> do-          mmi <- (getVisitedModule =<<-                    moduleName =<< liftIO (absolute source))-                   `catchError`-                 \_ -> return Nothing-          case mmi of-            Nothing -> return Nothing-            Just mi -> do-              sourceT <- liftIO $ getModificationTime source-              if sourceT <= miTimeStamp mi-               then do-                modFile <- stModuleToSource <$> get-                return $ Just (iHighlighting $ miInterface mi, modFile)-               else-                return Nothing-    return Nothing---- | Tells the Emacs mode to go to the first error position (if any).--tellEmacsToJumpToError :: Range -> IO ()-tellEmacsToJumpToError r = do-  case rStart r of-    Nothing                                    -> return ()-    Just (Pn { srcFile = Nothing })            -> return ()-    Just (Pn { srcFile = Just f, posPos = p }) ->-      putResponse $-        L [ A "annotation-goto"-          , Q $ L [A (quote $ filePath f), A ".", A (show p)]-          ]----------------------------------------------------------------------------- Implicit arguments---- | Tells Agda whether or not to show implicit arguments.--showImplicitArgs :: Bool -- ^ Show them?-                 -> Interaction-showImplicitArgs showImpl = Interaction Dependent $ do-  opts <- commandLineOptions-  setCommandLineOptions $-    opts { optPragmaOptions =-             (optPragmaOptions opts) { optShowImplicit = showImpl } }-  return Nothing---- | Toggle display of implicit arguments.--toggleImplicitArgs :: Interaction-toggleImplicitArgs = Interaction Dependent $ do-  opts <- commandLineOptions-  let ps = optPragmaOptions opts-  setCommandLineOptions $-    opts { optPragmaOptions =-             ps { optShowImplicit = not $ optShowImplicit ps } }-  return Nothing----------------------------------------------------------------------------- Error handling---- | When an error message is displayed the following title should be--- used, if appropriate.--errorTitle :: String-errorTitle = "*Error*"---- | Displays an error, instructs Emacs to jump to the site of the--- error, and terminates the program. Because this function may switch--- the focus to another file the status information is also updated.--displayErrorAndExit :: Status-                       -- ^ The new status information.-                    -> Range -> String -> IO a-displayErrorAndExit status r s = do-  display_info' errorTitle s-  tellEmacsToJumpToError r-  displayStatus status-  exitWith (ExitFailure 1)---- | Outermost error handler.--infoOnException m =-  failOnException (displayErrorAndExit s) m `catchImpossible` \e ->-    displayErrorAndExit s noRange (show e)-  where-  s = Status { sChecked               = False-             , sShowImplicitArguments = False-               -- Educated guess... This field is not important, so it-               -- does not really matter if it is displayed-               -- incorrectly when an unexpected error has occurred.-             }---- | Raises an error if the given file is not the one currently--- loaded.--ensureFileLoaded :: AbsolutePath -> TCM ()-ensureFileLoaded current = do-  f <- theCurrentFile <$> liftIO (readIORef theState)-  when (Just current /= (fst <$> f)) $-    typeError $ GenericError "Error: First load the file."---- Helpers for testing ------------------------------------------------------getCurrentFile :: IO FilePath-getCurrentFile = do-  mf <- theCurrentFile <$> readIORef theState-  case mf of-    Nothing     -> error "command: No file loaded!"-    Just (f, _) -> return (filePath f)---- | Changes the 'Interaction' so that its first action is to turn off--- all debug messages.--makeSilent :: Interaction -> Interaction-makeSilent i = i { command = do-  opts <- commandLineOptions-  TM.setCommandLineOptions $ opts-    { optPragmaOptions =-        (optPragmaOptions opts)-          { optVerbose = Trie.singleton [] 0 }-    }-  command i }--top_command' :: FilePath -> Interaction -> IO ()-top_command' f cmd = ioTCM f Nothing $ makeSilent cmd--goal_command :: InteractionId -> GoalCommand -> String -> IO ()-goal_command i cmd s = do-  f <- getCurrentFile-  -- TODO: Test with other ranges as well.-  ioTCM f Nothing $ makeSilent $ cmd i noRange s
src/full/Agda/Interaction/Highlighting/Emacs.hs view
@@ -3,30 +3,40 @@ -- | Functions which give precise syntax highlighting info to Emacs.  module Agda.Interaction.Highlighting.Emacs-  ( showHighlightingInfo+  ( lispifyHighlightingInfo   , Agda.Interaction.Highlighting.Emacs.tests   ) where  import Agda.Interaction.FindFile import Agda.Interaction.Highlighting.Precise import Agda.Interaction.Highlighting.Range+import Agda.Interaction.EmacsCommand import Agda.Syntax.Abstract (QName) import Agda.Syntax.Common import qualified Agda.Syntax.Position as P import Agda.Syntax.Translation.ConcreteToAbstract (TopLevelInfo) import Agda.TypeChecking.Errors (prettyError)+import Agda.TypeChecking.Monad+  (TCM, envHighlightingMethod, HighlightingMethod(..)) import Agda.Utils.FileName+import qualified Agda.Utils.IO.UTF8 as UTF8 import Agda.Utils.String import Agda.Utils.TestHelpers  import Agda.Utils.Impossible #include "../../undefined.h" +import Control.Applicative+import qualified Control.Exception as E+import Control.Monad.Reader import Control.Monad.Trans+import Data.Char import Data.List import qualified Data.Map as Map-import Data.Char import Data.Maybe+import Data.Monoid+import qualified System.Directory as D+import qualified System.IO as IO  ------------------------------------------------------------------------ -- Read/show functions@@ -56,35 +66,52 @@ showMetaInfo :: ModuleToSource                 -- ^ Must contain a mapping for the definition site's                 -- module, if any.-             -> (Range, MetaInfo) -> String+             -> (Range, MetaInfo) -> Lisp String showMetaInfo modFile (r, m) =-     "("-  ++ show (from r)-  ++ " "-  ++ show (to r)-  ++ " ("-  ++ concat (intersperse " " (toAtoms m))-  ++ ")"-  ++ (maybe " nil" ((" " ++) . quote) $ note m)-  ++ defSite-  ++ ")"+    L $ ((map (A . show) [from r, to r])+           +++         [L $ map A $ toAtoms m]+           +++         (A $ maybe "nil" quote $ note m)+         :+          defSite)   where   defSite = case definitionSite m of-    Nothing     -> ""+    Nothing     -> []     Just (m, p) -> case Map.lookup m modFile of       Nothing -> __IMPOSSIBLE__-      Just f  -> " (" ++ quote (filePath f) ++ " . " ++ show p ++ ")"+      Just f  -> [Cons (A $ quote $ filePath f) (A $ show p)] --- | Shows syntax highlighting information in an Emacsy fashion.+-- | Turns syntax highlighting information into a list of+-- S-expressions. -showHighlightingInfo-  :: Maybe (HighlightingInfo, ModuleToSource)-     -- ^ The 'ModuleToSource' must contain a mapping for every-     -- definition site's module.-  -> String-showHighlightingInfo Nothing             = ""-showHighlightingInfo (Just (h, modFile)) =-  "(" ++ unlines (map (showMetaInfo modFile) h) ++ ")"+lispifyHighlightingInfo+  :: HighlightingInfo+  -> ModuleToSource+     -- ^ Must contain a mapping for every definition site's module.+  -> TCM (Lisp String)+lispifyHighlightingInfo h modFile = do+  method <- envHighlightingMethod <$> ask+  liftIO $ case ranges h of+    _             | method == Direct                   -> direct+    ((_, mi) : _) | otherAspects mi == [TypeChecks] ||+                    mi == mempty                       -> direct+    _                                                  -> indirect+  where+  info     = map (showMetaInfo modFile) (ranges h)++  direct   = return $ L (A "agda2-highlight-add-annotations" :+                         map Q info)++  indirect = do+    dir <- D.getTemporaryDirectory+    f   <- E.bracket (IO.openTempFile dir "agda2-mode")+                     (IO.hClose . snd) $ \ (f, h) -> do+             UTF8.hPutStr h (show $ L info)+             return f+    return $ L [ A "agda2-highlight-load-and-delete-action"+               , A (quote f)+               ]  ------------------------------------------------------------------------ -- All tests
src/full/Agda/Interaction/Highlighting/Generate.hs view
@@ -1,25 +1,34 @@-{-# LANGUAGE CPP, Rank2Types, RelaxedPolyRec #-}+{-# LANGUAGE CPP, FlexibleContexts, RelaxedPolyRec #-}  -- | Generates data used for precise syntax highlighting.  module Agda.Interaction.Highlighting.Generate-  ( generateSyntaxInfo-  , generateErrorInfo+  ( Level(..)+  , generateAndPrintSyntaxInfo+  , generateTokenInfo+  , printErrorInfo+  , printUnsolvedInfo+  , printHighlightingInfo+  , highlightAsTypeChecked   , Agda.Interaction.Highlighting.Generate.tests-  )-  where+  ) where  import Agda.Interaction.FindFile+import Agda.Interaction.Response (Response(Resp_HighlightingInfo))+import Agda.Interaction.Highlighting.Emacs   hiding (tests) import Agda.Interaction.Highlighting.Precise hiding (tests) import Agda.Interaction.Highlighting.Range   hiding (tests)+import Agda.Interaction.EmacsCommand import qualified Agda.TypeChecking.Errors as E import Agda.TypeChecking.MetaVars (isBlockedTerm)-import Agda.TypeChecking.Monad.Options (reportSLn)+import Agda.TypeChecking.Monad.Options (reportSLn, reportSDoc) import Agda.TypeChecking.Monad   hiding (MetaInfo, Primitive, Constructor, Record, Function, Datatype) import qualified Agda.TypeChecking.Monad as M+import Agda.TypeChecking.Pretty import qualified Agda.TypeChecking.Reduce as R import qualified Agda.Syntax.Abstract as A+import Agda.Syntax.Common (Delayed(..)) import qualified Agda.Syntax.Common as SC import qualified Agda.Syntax.Concrete as C import qualified Agda.Syntax.Info as SI@@ -32,316 +41,384 @@ import qualified Agda.Syntax.Translation.ConcreteToAbstract as CA import Agda.Utils.List import Agda.Utils.TestHelpers+import Agda.Utils.HashMap (HashMap)+import qualified Agda.Utils.HashMap as HMap import Control.Monad import Control.Monad.Trans import Control.Monad.State+import Control.Monad.Reader import Control.Applicative+import Control.Arrow ((***)) import Data.Monoid import Data.Function-import Agda.Utils.Generics+import Data.Generics.Geniplate import Agda.Utils.FileName+import qualified Agda.Utils.IO.UTF8 as UTF8+import Agda.Utils.Monad+import Data.HashSet (HashSet)+import qualified Data.HashSet as HSet import Data.Map (Map) import qualified Data.Map as Map import Data.Maybe-import Data.Sequence (Seq, (><)) import Data.List ((\\), isPrefixOf)-import qualified Data.Sequence as Seq import qualified Data.Foldable as Fold (toList, fold, foldMap)+import System.Directory+import System.IO  import Agda.Utils.Impossible #include "../../undefined.h" --- | Generates syntax highlighting information for an error,--- represented as a range and an optional string. The error range is--- completed so that there are no gaps in it.+-- | @highlightAsTypeChecked rPre r m@ runs @m@ and returns its+-- result. Some code may additionally be highlighted: ----- Nothing is generated unless the file name component of the range is--- defined.+-- * If @r@ is non-empty and not a sub-range of @rPre@ (after+--   'P.continuousPerLine' has been applied to both): @r@ is+--   highlighted as being type-checked while @m@ is running (this+--   highlighting is removed if @m@ completes /successfully/).+--+-- * Otherwise: Highlighting is removed for @rPre - r@ before @m@+--   runs, and if @m@ completes successfully, then @rPre - r@ is+--   highlighted as being type-checked. -generateErrorInfo :: P.Range -> Maybe String -> Maybe HighlightingInfo-generateErrorInfo r s =-  case P.rStart r of-    Nothing                                          -> Nothing-    Just (P.Pn { P.srcFile = Nothing })              -> Nothing-    Just (P.Pn { P.srcFile = Just f, P.posPos = p }) ->-      Just $ compress $ generateErrorFile r s+highlightAsTypeChecked+  :: MonadTCM tcm+  => P.Range+  -> P.Range+  -> tcm a+  -> tcm a+highlightAsTypeChecked rPre r m+  | r /= P.noRange && delta == rPre' = wrap r'    highlight clear+  | otherwise                        = wrap delta clear     highlight+  where+  rPre'     = rToR (P.continuousPerLine rPre)+  r'        = rToR (P.continuousPerLine r)+  delta     = rPre' `minus` r'+  clear     = mempty+  highlight = mempty { otherAspects = [TypeChecks] } --- | Generates syntax highlighting information for an error,--- represented as a range and an optional string. The error range is--- completed so that there are no gaps in it.+  wrap rs x y = do+    p rs x+    v <- m+    p rs y+    return v+    where+    p rs x = printHighlightingInfo (singletonC rs x) -generateErrorFile :: P.Range -> Maybe String -> File-generateErrorFile r s =-  several (rToR $ P.continuousPerLine r)-          (mempty { otherAspects = [Error]-                  , note         = s-                  })+-- | Lispify and print the given highlighting information. --- | Generates syntax highlighting information.+printHighlightingInfo :: MonadTCM tcm => HighlightingInfo -> tcm ()+printHighlightingInfo x = do+  liftTCM $ reportSLn "highlighting" 50 $+    "Printing highlighting info:\n" ++ show x+  unless (null $ ranges x) $ do+    st <- get+    liftTCM $ stInteractionOutputCallback st+                (Resp_HighlightingInfo x (stModuleToSource st)) -generateSyntaxInfo-  :: AbsolutePath          -- ^ The module to highlight.-  -> Maybe TCErr           -- ^ 'Nothing' if the module has been-                           --   successfully type checked (perhaps-                           --   with warnings), otherwise the-                           --   offending error.-                           ---                           --   Precondition: The range of the error-                           --   must match the file name given in the-                           --   previous argument.-  -> CA.TopLevelInfo       -- ^ The abstract syntax of the module.-  -> [M.TerminationError]  -- ^ Termination checking problems.-  -> TCM HighlightingInfo-generateSyntaxInfo file mErr top termErrs = do-  reportSLn "import.iface.create" 15  $-      "Generating syntax info for " ++ filePath file ++ ' ' : maybe "(No TCErr)" (const "(with TCErr)") mErr ++ "."+-- | Highlighting levels. -  M.withScope_ (CA.insideScope top) $ M.ignoreAbstractMode $ do+data Level+  = Full [TerminationError]+    -- ^ Full highlighting. Should only be used after typechecking has+    -- completed successfully.+    --+    -- The list of termination problems is also highlighted.+    --+    -- Precondition: The termination problems must be located in the+    -- module that is highlighted.+  | Partial+    -- ^ Highlighting without disambiguation of overloaded+    -- constructors.++-- | Generate syntax highlighting information for the given+-- declaration, and (if appropriate) print it. If the+-- 'HighlightingLevel' is @'Full' something@, then the state is+-- additionally updated with the new highlighting info (in case of a+-- conflict new info takes precedence over old info).+--+-- The procedure makes use of some of the token highlighting info in+-- 'stTokens' (that corresponding to the interval covered by the+-- declaration). If the 'HighlightingLevel' is @'Full' something@,+-- then this token highlighting info is additionally removed from+-- 'stTokens'.++generateAndPrintSyntaxInfo :: A.Declaration -> Level -> TCM ()+generateAndPrintSyntaxInfo decl hlLevel = do+  file <- envCurrentPath <$> ask++  reportSLn "import.iface.create" 15 $+      "Generating syntax info for " ++ filePath file ++ ' ' :+        case hlLevel of+            Full    {} -> "(final)"+            Partial {} -> "(first approximation)"+        ++ "."++  M.ignoreAbstractMode $ do     modMap <- sourceToModule-    tokens <- liftIO $ Pa.parseFile' Pa.tokensParser file-    kinds  <- nameKinds mErr decls-    let nameInfo = mconcat $ map (generate modMap file kinds)-                                 (Fold.toList names)+    kinds  <- nameKinds hlLevel decl++    let nameInfo = mconcat $ map (generate modMap file kinds) names+     -- Constructors are only highlighted after type checking, since they     -- can be overloaded.-    constructorInfo <- case mErr of-      Nothing -> generateConstructorInfo modMap file kinds decls-      Just _  -> return mempty-    metaInfo <- case mErr of-      Nothing -> computeUnsolvedMetaWarnings-      Just _  -> return mempty-    errorInfo <- case mErr of-      Nothing -> return mempty-      Just e  -> let r = P.getRange e in-        case P.rStart r of-          Just p | P.srcFile p == Just file ->-            generateErrorFile r . Just <$> E.prettyError e-          _ -> __IMPOSSIBLE__+    constructorInfo <- case hlLevel of+      Full _ -> generateConstructorInfo modMap file kinds decl+      _      -> return mempty++    let (from, to) = case P.rangeToInterval (P.getRange decl) of+          Nothing -> __IMPOSSIBLE__+          Just i  -> let conv = toInteger . P.posPos in+                     (conv $ P.iStart i, conv $ P.iEnd i)+    (prevTokens, (curTokens, postTokens)) <-+      (id *** splitAtC to) . splitAtC from . stTokens <$> get+     -- theRest needs to be placed before nameInfo here since record     -- field declarations contain QNames. constructorInfo also needs     -- to be placed before nameInfo since, when typechecking is done,-    -- constructors are included in both lists. Finally tokInfo is-    -- placed last since token highlighting is more crude than the-    -- others.-    return $ compress $ mconcat-      [ errorInfo-      , constructorInfo-      , theRest modMap-      , nameInfo-      , metaInfo-      , termInfo-      , tokInfo tokens-      ]-  where-    decls = CA.topLevelDecls top--    -- Converts an aspect and a range to a file.-    aToF a r = several (rToR r) (mempty { aspect = Just a })+    -- constructors are included in both lists. Finally the token+    -- information is placed last since token highlighting is more+    -- crude than the others.+    let syntaxInfo = compress (mconcat [ constructorInfo+                                       , theRest modMap file+                                       , nameInfo+                                       , termInfo+                                       ])+                       `mappend`+                     curTokens -    tokInfo = Fold.foldMap tokenToFile-      where-      tokenToFile :: T.Token -> File-      tokenToFile (T.TokSetN (i, _))               = aToF PrimitiveType (P.getRange i)-      tokenToFile (T.TokKeyword T.KwSet  i)        = aToF PrimitiveType (P.getRange i)-      tokenToFile (T.TokKeyword T.KwProp i)        = aToF PrimitiveType (P.getRange i)-      tokenToFile (T.TokKeyword T.KwForall i)      = aToF Symbol (P.getRange i)-      tokenToFile (T.TokKeyword _ i)               = aToF Keyword (P.getRange i)-      tokenToFile (T.TokSymbol  _ i)               = aToF Symbol (P.getRange i)-      tokenToFile (T.TokLiteral (L.LitInt    r _)) = aToF Number r-      tokenToFile (T.TokLiteral (L.LitFloat  r _)) = aToF Number r-      tokenToFile (T.TokLiteral (L.LitString r _)) = aToF String r-      tokenToFile (T.TokLiteral (L.LitChar   r _)) = aToF String r-      tokenToFile (T.TokLiteral (L.LitQName  r _)) = aToF String r-      tokenToFile (T.TokComment (i, _))            = aToF Comment (P.getRange i)-      tokenToFile (T.TokTeX (i, _))                = aToF Comment (P.getRange i)-      tokenToFile (T.TokId {})                     = mempty-      tokenToFile (T.TokQId {})                    = mempty-      tokenToFile (T.TokString {})                 = mempty-      tokenToFile (T.TokDummy {})                  = mempty-      tokenToFile (T.TokEOF {})                    = mempty+    case hlLevel of+      Full _ -> modify (\st ->+                  st { stSyntaxInfo = syntaxInfo `mappend` stSyntaxInfo st+                     , stTokens     = prevTokens `mappend` postTokens+                     })+      _      -> return () -    termInfo = functionDefs `mappend` callSites+    ifTopLevelAndHighlightingLevelIs NonInteractive $+      printHighlightingInfo syntaxInfo+  where+  -- Highlighting of termination problems.+  termInfo = case hlLevel of+    Full termErrs -> functionDefs `mappend` callSites       where       m            = mempty { otherAspects = [TerminationProblem] }-      functionDefs = Fold.foldMap (\x -> several (rToR $ bindingSite x) m) $+      functionDefs = Fold.foldMap (\x -> singleton (rToR $ bindingSite x) m) $                      concatMap M.termErrFunctions termErrs-      callSites    = Fold.foldMap (\r -> several (rToR r) m) $+      callSites    = Fold.foldMap (\r -> singleton (rToR r) m) $                      concatMap (map M.callInfoRange . M.termErrCalls) termErrs+    _ -> mempty -    -- All names mentioned in the syntax tree (not bound variables).-    names = everything' (><) (Seq.empty `mkQ`  getName-                                        `extQ` getAmbiguous)-                        decls-      where-      getName :: A.QName -> Seq A.AmbiguousQName-      getName n | isPrefixOf extendlambdaname $ show $ A.qnameName n = mempty-                | otherwise                                          = Seq.singleton (A.AmbQ [n])+  -- All names mentioned in the syntax tree (not bound variables).+  names :: [A.AmbiguousQName]+  names =+    (map (A.AmbQ . (:[])) $+     filter (not . extendedLambda) $+     universeBi decl) +++    universeBi decl+    where+    extendedLambda :: A.QName -> Bool+    extendedLambda n = extendlambdaname `isPrefixOf` show (A.qnameName n) +  -- Bound variables, dotted patterns, record fields, module names,+  -- the "as" and "to" symbols.+  theRest modMap file = mconcat+    [ Fold.foldMap getFieldDecl   $ universeBi decl+    , Fold.foldMap getVarAndField $ universeBi decl+    , Fold.foldMap getLet         $ universeBi decl+    , Fold.foldMap getLam         $ universeBi decl+    , Fold.foldMap getTyped       $ universeBi decl+    , Fold.foldMap getPattern     $ universeBi decl+    , Fold.foldMap getModuleName  $ universeBi decl+    , Fold.foldMap getModuleInfo  $ universeBi decl+    ]+    where+    bound n = nameToFile modMap file []+                         (A.nameConcrete n)+                         (\isOp -> mempty { aspect = Just $ Name (Just Bound) isOp })+                         (Just $ A.nameBindingSite n)+    field m n = nameToFile modMap file m n+                           (\isOp -> mempty { aspect = Just $ Name (Just Field) isOp })+                           Nothing+    asName n = nameToFile modMap file []+                          n+                          (\isOp -> mempty { aspect = Just $ Name (Just Module) isOp })+                          Nothing+    mod isTopLevelModule n =+      nameToFile modMap file []+                 (A.nameConcrete n)+                 (\isOp -> mempty { aspect = Just $ Name (Just Module) isOp })+                 (Just $ (if isTopLevelModule then P.beginningOfFile else id)+                           (A.nameBindingSite n)) -      getAmbiguous :: A.AmbiguousQName -> Seq A.AmbiguousQName-      getAmbiguous = Seq.singleton+    getVarAndField :: A.Expr -> File+    getVarAndField (A.Var x)    = bound x+    getVarAndField (A.Rec _ fs) = mconcat $ map (field [] . fst) fs+    getVarAndField _            = mempty -    -- Bound variables, dotted patterns, record fields, module names,-    -- the "as" and "to" symbols.-    theRest modMap = everything' mappend query decls-      where-      query :: GenericQ File-      query = mempty         `mkQ`-              getFieldDecl   `extQ`-              getVarAndField `extQ`-              getLet         `extQ`-              getLam         `extQ`-              getTyped       `extQ`-              getPattern     `extQ`-              getModuleName  `extQ`-              getModuleInfo+    getLet :: A.LetBinding -> File+    getLet (A.LetBind _ _ x _ _) = bound x+    getLet A.LetPatBind{}        = mempty+    getLet A.LetApply{}          = mempty+    getLet A.LetOpen{}           = mempty -      bound n = nameToFile modMap file []-                           (A.nameConcrete n)-                           (\isOp -> mempty { aspect = Just $ Name (Just Bound) isOp })-                           (Just $ A.nameBindingSite n)-      field m n = nameToFile modMap file m n-                             (\isOp -> mempty { aspect = Just $ Name (Just Field) isOp })-                             Nothing-      asName n = nameToFile modMap file []-                            n-                            (\isOp -> mempty { aspect = Just $ Name (Just Module) isOp })-                            Nothing-      mod isTopLevelModule n =-        nameToFile modMap file []-                   (A.nameConcrete n)-                   (\isOp -> mempty { aspect = Just $ Name (Just Module) isOp })-                   (Just $ (if isTopLevelModule then P.beginningOfFile else id)-                             (A.nameBindingSite n))+    getLam :: A.LamBinding -> File+    getLam (A.DomainFree _ _ x) = bound x+    getLam (A.DomainFull {})  = mempty -      getVarAndField :: A.Expr -> File-      getVarAndField (A.Var x)    = bound x-      getVarAndField (A.Rec _ fs) = mconcat $ map (field [] . fst) fs-      getVarAndField _            = mempty+    getTyped :: A.TypedBinding -> File+    getTyped (A.TBind _ xs _) = mconcat $ map bound xs+    getTyped (A.TNoBind {})   = mempty -      getLet :: A.LetBinding -> File-      getLet (A.LetBind _ _ x _ _) = bound x-      getLet A.LetApply{}          = mempty-      getLet A.LetOpen{}           = mempty+    getPattern :: A.Pattern -> File+    getPattern (A.VarP x)    = bound x+    getPattern (A.AsP _ x _) = bound x+    getPattern (A.DotP pi _) =+      singleton (rToR $ P.getRange pi)+                (mempty { otherAspects = [DottedPattern] })+    getPattern _             = mempty -      getLam :: A.LamBinding -> File-      getLam (A.DomainFree _ _ x) = bound x-      getLam (A.DomainFull {})  = mempty+    getFieldDecl :: A.Declaration -> File+    getFieldDecl (A.RecDef _ _ _ _ _ _ fs) = Fold.foldMap extractField fs+      where+      extractField (A.ScopedDecl _ ds) = Fold.foldMap extractField ds+      extractField (A.Field _ x _)     = field (concreteQualifier x)+                                               (concreteBase x)+      extractField _                   = mempty+    getFieldDecl _                   = mempty -      getTyped :: A.TypedBinding -> File-      getTyped (A.TBind _ xs _) = mconcat $ map bound xs-      getTyped (A.TNoBind {})   = mempty+    getModuleName :: A.ModuleName -> File+    getModuleName m@(A.MName { A.mnameToList = xs }) =+      mconcat $ map (mod isTopLevelModule) xs+      where+      isTopLevelModule =+        case catMaybes $+             map (join .+                  fmap P.srcFile .+                  P.rStart .+                  A.nameBindingSite) xs of+          f : _ -> Map.lookup f modMap ==+                   Just (C.toTopLevelModuleName $ A.mnameToConcrete m)+          []    -> False -      getPattern :: A.Pattern -> File-      getPattern (A.VarP x)    = bound x-      getPattern (A.AsP _ x _) = bound x-      getPattern (A.DotP pi _) =-        several (rToR $ P.getRange pi)-                (mempty { otherAspects = [DottedPattern] })-      getPattern _             = mempty+    getModuleInfo :: SI.ModuleInfo -> File+    getModuleInfo (SI.ModuleInfo { SI.minfoAsTo   = asTo+                                 , SI.minfoAsName = name }) =+      singleton (rToR asTo) (mempty { aspect = Just Symbol })+        `mappend`+      maybe mempty asName name -      getFieldDecl :: A.Declaration -> File-      getFieldDecl (A.RecDef _ _ _ _ _ fs) = Fold.foldMap extractField fs-        where-        extractField (A.ScopedDecl _ ds) = Fold.foldMap extractField ds-        extractField (A.Field _ x _)     = field (concreteQualifier x)-                                                 (concreteBase x)-        extractField _                   = mempty-      getFieldDecl _                   = mempty+-- | Generate and return the syntax highlighting information for the+-- tokens in the given file. -      getModuleName :: A.ModuleName -> File-      getModuleName m@(A.MName { A.mnameToList = xs }) =-        mconcat $ map (mod isTopLevelModule) xs-        where-        isTopLevelModule =-          case catMaybes $-               map (join .-                    fmap P.srcFile .-                    P.rStart .-                    A.nameBindingSite) xs of-            f : _ -> Map.lookup f modMap ==-                     Just (C.toTopLevelModuleName $ A.mnameToConcrete m)-            []    -> False+generateTokenInfo+  :: AbsolutePath          -- ^ The module to highlight.+  -> TCM CompressedFile+generateTokenInfo file = do+  tokens <- liftIO $ Pa.parseFile' Pa.tokensParser file+  return $ merge $ map tokenToCFile tokens+  where+  -- Converts an aspect and a range to a file.+  aToF a r = singletonC (rToR r) (mempty { aspect = Just a }) -      getModuleInfo :: SI.ModuleInfo -> File-      getModuleInfo (SI.ModuleInfo { SI.minfoAsTo   = asTo-                                   , SI.minfoAsName = name }) =-        aToF Symbol asTo `mappend` maybe mempty asName name+  -- Merges /sorted, non-overlapping/ compressed files.+  merge = CompressedFile . concat . map ranges +  tokenToCFile :: T.Token -> CompressedFile+  tokenToCFile (T.TokSetN (i, _))               = aToF PrimitiveType (P.getRange i)+  tokenToCFile (T.TokKeyword T.KwSet  i)        = aToF PrimitiveType (P.getRange i)+  tokenToCFile (T.TokKeyword T.KwProp i)        = aToF PrimitiveType (P.getRange i)+  tokenToCFile (T.TokKeyword T.KwForall i)      = aToF Symbol (P.getRange i)+  tokenToCFile (T.TokKeyword _ i)               = aToF Keyword (P.getRange i)+  tokenToCFile (T.TokSymbol  _ i)               = aToF Symbol (P.getRange i)+  tokenToCFile (T.TokLiteral (L.LitInt    r _)) = aToF Number r+  tokenToCFile (T.TokLiteral (L.LitFloat  r _)) = aToF Number r+  tokenToCFile (T.TokLiteral (L.LitString r _)) = aToF String r+  tokenToCFile (T.TokLiteral (L.LitChar   r _)) = aToF String r+  tokenToCFile (T.TokLiteral (L.LitQName  r _)) = aToF String r+  tokenToCFile (T.TokComment (i, _))            = aToF Comment (P.getRange i)+  tokenToCFile (T.TokTeX (i, _))                = aToF Comment (P.getRange i)+  tokenToCFile (T.TokId {})                     = mempty+  tokenToCFile (T.TokQId {})                    = mempty+  tokenToCFile (T.TokString {})                 = mempty+  tokenToCFile (T.TokDummy {})                  = mempty+  tokenToCFile (T.TokEOF {})                    = mempty+ -- | A function mapping names to the kind of name they stand for.  type NameKinds = A.QName -> Maybe NameKind  -- | Builds a 'NameKinds' function. -nameKinds :: Maybe TCErr  -- ^ 'Nothing' if type checking completed-                          --   successfully.-          -> [A.Declaration]+nameKinds :: Level+             -- ^ This should only be @'Full' something@ if+             -- type-checking completed successfully (without any+             -- errors).+          -> A.Declaration           -> TCM NameKinds-nameKinds mErr decls = do+nameKinds hlLevel decl = do   imported <- fix . stImports <$> get-  local    <- case mErr of-    Nothing -> fix . stSignature <$> get-    Just _  -> return $+  local    <- case hlLevel of+    Full _ -> fix . stSignature <$> get+    _      -> return $       -- Traverses the syntax tree and constructs a map from qualified       -- names to name kinds. TODO: Handle open public.-      everything' union (Map.empty `mkQ` getDecl) decls-  let merged = Map.union local imported-  return (\n -> Map.lookup n merged)+      foldr ($) HMap.empty $ map declToKind $ universeBi decl+  let merged = HMap.union local imported+  return (\n -> HMap.lookup n merged)   where-  fix = Map.map (defnToNameKind . theDef) . sigDefinitions+  fix = HMap.map (defnToKind . theDef) . sigDefinitions    -- | The 'M.Axiom' constructor is used to represent various things   -- which are not really axioms, so when maps are merged 'Postulate's-  -- are thrown away whenever possible. The 'getDef' and 'getDecl'-  -- functions below can return several explanations for one qualified-  -- name; the 'Postulate's are bogus.-  union = Map.unionWith dropPostulates+  -- are thrown away whenever possible. The 'declToKind' function+  -- below can return several explanations for one qualified name; the+  -- 'Postulate's are bogus.+  insert = HMap.insertWith dropPostulates     where     dropPostulates Postulate k = k     dropPostulates k         _ = k -  defnToNameKind :: Defn -> NameKind-  defnToNameKind (M.Axiom {})                     = Postulate-  defnToNameKind (M.Function {})                  = Function-  defnToNameKind (M.Datatype {})                  = Datatype-  defnToNameKind (M.Record {})                    = Record-  defnToNameKind (M.Constructor { M.conInd = i }) = Constructor i-  defnToNameKind (M.Primitive {})                 = Primitive+  defnToKind :: Defn -> NameKind+  defnToKind (M.Axiom {})                     = Postulate+  defnToKind (M.Function {})                  = Function+  defnToKind (M.Datatype {})                  = Datatype+  defnToKind (M.Record {})                    = Record+  defnToKind (M.Constructor { M.conInd = i }) = Constructor i+  defnToKind (M.Primitive {})                 = Primitive    getAxiomName :: A.Declaration -> A.QName   getAxiomName (A.Axiom _ _ q _) = q   getAxiomName _                 = __IMPOSSIBLE__ -  getDecl :: A.Declaration -> Map A.QName NameKind-  getDecl (A.Axiom _ _ q _)   = Map.singleton q Postulate-  getDecl (A.Field _ q _)     = Map.singleton q Function+  declToKind :: A.Declaration ->+                HashMap A.QName NameKind -> HashMap A.QName NameKind+  declToKind (A.Axiom _ _ q _)      = insert q Postulate+  declToKind (A.Field _ q _)        = insert q Function     -- Note that the name q can be used both as a field name and as a     -- projection function. Highlighting of field names is taken care     -- of by "theRest" above, which does not use NameKinds.-  getDecl (A.Primitive _ q _) = Map.singleton q Primitive-  getDecl (A.Mutual {})       = Map.empty-  getDecl (A.Section {})      = Map.empty-  getDecl (A.Apply {})        = Map.empty-  getDecl (A.Import {})       = Map.empty-  getDecl (A.Pragma {})       = Map.empty-  getDecl (A.ScopedDecl {})   = Map.empty-  getDecl (A.Open {})         = Map.empty-  getDecl (A.FunDef  _ q _)       = Map.singleton q Function-  getDecl (A.DataSig _ q _ _)       = Map.singleton q Datatype-  getDecl (A.DataDef _ q _ cs)    = Map.singleton q Datatype `union`-                                   (Map.unions $-                                    map (\q -> Map.singleton q (Constructor SC.Inductive)) $-                                    map getAxiomName cs)-  getDecl (A.RecSig _ q _ _)      = Map.singleton q Record-  getDecl (A.RecDef _ q c _ _ _)  = Map.singleton q Record `union`-                                   case c of-                                     Nothing -> Map.empty-                                     Just q ->-                                       Map.singleton q (Constructor SC.Inductive)+  declToKind (A.Primitive _ q _)    = insert q Primitive+  declToKind (A.Mutual {})          = id+  declToKind (A.Section {})         = id+  declToKind (A.Apply {})           = id+  declToKind (A.Import {})          = id+  declToKind (A.Pragma {})          = id+  declToKind (A.ScopedDecl {})      = id+  declToKind (A.Open {})            = id+  declToKind (A.FunDef  _ q _ _)    = insert q Function+  declToKind (A.DataSig _ q _ _)    = insert q Datatype+  declToKind (A.DataDef _ q _ cs)   = \m ->+                                      insert q Datatype $+                                      foldr (\d -> insert (getAxiomName d)+                                                          (Constructor SC.Inductive))+                                            m cs+  declToKind (A.RecSig _ q _ _)     = insert q Record+  declToKind (A.RecDef _ q _ c _ _ _) = insert q Record .+                                      case c of+                                        Nothing -> id+                                        Just q  -> insert q (Constructor SC.Inductive)  -- | Generates syntax highlighting information for all constructors--- occurring in patterns and expressions in the given declarations.+-- occurring in patterns and expressions in the given declaration. -- -- This function should only be called after type checking. -- Constructors can be overloaded, and the overloading is resolved by@@ -351,71 +428,130 @@   :: SourceToModule  -- ^ Maps source file paths to module names.   -> AbsolutePath    -- ^ The module to highlight.   -> NameKinds-  -> [A.Declaration]+  -> A.Declaration   -> TCM File-generateConstructorInfo modMap file kinds decls = do-  -- Extract all defined names from the declaration list.-  let names = Fold.toList $ Fold.foldMap A.allNames decls+generateConstructorInfo modMap file kinds decl = do+  -- Extract all defined names from the declaration.+  let names = Fold.toList (A.allNames decl)    -- Look up the corresponding declarations in the internal syntax.   defMap <- M.sigDefinitions <$> M.getSignature-  let defs = catMaybes $ map (flip Map.lookup defMap) names+  let defs = catMaybes $ map (flip HMap.lookup defMap) names    -- Instantiate meta variables.   clauses <- R.instantiateFull $ concatMap M.defClauses defs   types   <- R.instantiateFull $ map defType defs -  -- Find all constructors occurring in type signatures or clauses-  -- within the given declarations.-  constrs <- everything' (liftM2 (><)) query (types, clauses)+  let -- Find all patterns and terms.+      patterns = universeBi (types, clauses)+      terms    = universeBi (types, clauses) +      -- Find all constructors in the patterns and terms.+      constrs = concatMap getConstructorP patterns +++                concatMap getConstructor  terms++  -- Find all constructors in right-hand sides of delayed definitions.+  delayed <- evalStateT (getDelayed terms) HSet.empty+   -- Return suitable syntax highlighting information.-  return $ Fold.fold $ fmap (generate modMap file kinds . mkAmb) constrs+  return $ Fold.fold $ fmap (generate modMap file kinds . mkAmb)+                            (delayed ++ constrs)   where   mkAmb q = A.AmbQ [q] -  query :: GenericQ (TCM (Seq A.QName))-  query = return mempty   `mkQ`-          getConstructor  `extQ`-          getConstructorP+  -- Finds names corresponding to delayed definitions occurring at the+  -- top of the given terms, as well as in the found definition's+  -- right-hand sides. Only definitions from the current file are+  -- considered.+  --+  -- Constructors occurring in the delayed definitions' right-hand+  -- sides are returned.+  --+  -- The set is used to avoid inspecting the same definition multiple+  -- times. -  getConstructor :: I.Term -> TCM (Seq A.QName)-  getConstructor (I.Con q _) = return $ Seq.singleton q-  getConstructor (I.Def c _)-    | fmap P.srcFile (P.rStart (P.getRange c)) == Just (Just file)-                             = retrieveCoconstructor c-  getConstructor _           = return Seq.empty+  getDelayed :: [I.Term] -> StateT (HashSet A.QName) TCM [A.QName]+  getDelayed ts = concat <$> mapM getT ts+    where+    getT t = do+      lift $ reportSDoc "highlighting.delayed" 50 $+        text "Inspecting sub-term:" <+> prettyTCM t -  getConstructorP :: I.Pattern -> TCM (Seq A.QName)-  getConstructorP (I.ConP q _ _) = return $ Seq.singleton q-  getConstructorP _              = return Seq.empty+      seen <- get+      case t of+        I.Def q _ | not (q `HSet.member` seen)+                      &&+                    fmap P.srcFile (P.rStart (P.getRange q)) ==+                      Just (Just file)+                  -> getQ q+        _         -> return [] -  retrieveCoconstructor :: A.QName -> TCM (Seq A.QName)-  retrieveCoconstructor c = do-    def <- getConstInfo c-    case defDelayed def of-      -- Not a coconstructor.-      NotDelayed -> return Seq.empty+    getQ q = do+      lift $ reportSDoc "highlighting.delayed" 30 $+        text "Inspecting name:" <+> prettyTCM q -      Delayed -> do-        clauses <- R.instantiateFull $ defClauses def-        case clauses of-          [I.Clause{ I.clauseBody = body }] -> case getRHS body of-            Just (I.Con c args) -> do-              s <- everything' (liftM2 (><)) query args-              return $ Seq.singleton c >< s+      def <- lift $ getConstInfo q+      case defDelayed def of+        NotDelayed -> return []+        Delayed    -> do+          lift $ reportSDoc "highlighting.delayed" 10 $+            text "Found delayed definition:" <+> prettyTCM q -            -- The meta variable could not be instantiated.-            Just (I.MetaV {})   -> return Seq.empty+          -- Mark the definition as seen.+          modify (HSet.insert q) -            _                   -> __IMPOSSIBLE__+          -- All sub-terms in the delayed definition's right-hand+          -- sides.+          terms <- universeBi . concat . map (getRHS . I.clauseBody) <$>+                     lift (R.instantiateFull $ defClauses def) -          _ -> __IMPOSSIBLE__-    where-      getRHS (I.Body v)   = Just v-      getRHS I.NoBody     = Nothing-      getRHS (I.Bind b)   = getRHS (I.unAbs b)+          -- Find the constructors and continue the search.+          (concatMap getConstructor terms ++) <$> getDelayed terms +    getRHS (I.Body v)   = [v]+    getRHS I.NoBody     = []+    getRHS (I.Bind b)   = getRHS (I.unAbs b)++  getConstructorP :: I.Pattern -> [A.QName]+  getConstructorP (I.ConP q _ _) = [q]+  getConstructorP _              = []++  getConstructor :: I.Term -> [A.QName]+  getConstructor (I.Con q _) = [q]+  getConstructor _           = []++-- | Prints syntax highlighting info for an error.++printErrorInfo :: TCErr -> TCM ()+printErrorInfo e = do+  file <- envCurrentPath <$> ask+  let r = P.getRange e+  case P.rStart r of+    Just x | P.srcFile x == Just file -> do+      s <- E.prettyError e++      -- Erase previous highlighting.+      p (P.continuousPerLine r) mempty++      -- Print new highlighting.+      p r $ mempty { otherAspects = [Error]+                   , note         = Just s+                   }+    _ -> internalError . ("invalid range when printing error: " ++) =<< E.prettyError e+  where+  p r x = printHighlightingInfo $ singletonC (rToR r) x++-- | Generates and prints syntax highlighting information for unsolved+-- meta-variables and certain unsolved constraints.++printUnsolvedInfo :: TCM ()+printUnsolvedInfo = do+  metaInfo       <- computeUnsolvedMetaWarnings+  constraintInfo <- computeUnsolvedConstraints++  printHighlightingInfo+    (compress $ metaInfo `mappend` constraintInfo)+ -- | Generates syntax highlighting information for unsolved meta -- variables. @@ -430,9 +566,20 @@   ms <- filterM notBlocked =<< getOpenMetas    rs <- mapM getMetaRange (ms \\ is)-  return $ several (concatMap (rToR . P.continuousPerLine) rs)-         $ mempty { otherAspects = [UnsolvedMeta] }+  return $ several (map (rToR . P.continuousPerLine) rs)+                   (mempty { otherAspects = [UnsolvedMeta] }) +-- | Generates syntax highlighting information for unsolved constraints+-- that are not connected to a meta variable.++computeUnsolvedConstraints :: TCM File+computeUnsolvedConstraints = do+  cs <- getAllConstraints+  -- get ranges of emptyness constraints+  let rs = [ r | PConstr{ theConstraint = Closure{ clValue = IsEmpty r t }} <- cs ]+  return $ several (map (rToR . P.continuousPerLine) rs)+                   (mempty { otherAspects = [UnsolvedConstraint] })+ -- | Generates a suitable file for a possibly ambiguous name.  generate :: SourceToModule@@ -477,13 +624,13 @@ nameToFile modMap file xs x m mR =   -- We don't care if we get any funny ranges.   if all (== Just file) fileNames then-    several rs' ((m isOp) { definitionSite = mFilePos })+    several (map rToR rs)+            ((m $ C.isOperator x) { definitionSite = mFilePos })    else     mempty   where   fileNames  = catMaybes $ map (fmap P.srcFile . P.rStart . P.getRange) (x : xs)-  (rs, isOp) = getRanges x-  rs'        = rs ++ concatMap (fst . getRanges) xs+  rs         = map P.getRange (x : xs)   mFilePos   = do     r <- mR     P.Pn { P.srcFile = Just f, P.posPos = p } <- P.rStart r@@ -516,35 +663,6 @@ concreteBase      = A.nameConcrete . A.qnameName concreteQualifier = map A.nameConcrete . A.mnameToList . A.qnameModule bindingSite       = A.nameBindingSite . A.qnameName---- | Like 'everything', but modified so that it does not descend into--- everything.--everything' :: (r -> r -> r) -> GenericQ r -> GenericQ r-everything' (+) = everythingBut-                    (+)-                    (False `mkQ` isString-                           `extQ` isAQName `extQ` isAName `extQ` isCName-                           `extQ` isScope `extQ` isMap1 `extQ` isMap2-                           `extQ` isAmbiguous)-  where-  isString    :: String                        -> Bool-  isAQName    :: A.QName                       -> Bool-  isAName     :: A.Name                        -> Bool-  isCName     :: C.Name                        -> Bool-  isScope     :: S.ScopeInfo                   -> Bool-  isMap1      :: Map A.QName A.QName           -> Bool-  isMap2      :: Map A.ModuleName A.ModuleName -> Bool-  isAmbiguous :: A.AmbiguousQName              -> Bool--  isString    = const True-  isAQName    = const True-  isAName     = const True-  isCName     = const True-  isScope     = const True-  isMap1      = const True-  isMap2      = const True-  isAmbiguous = const True  ------------------------------------------------------------------------ -- All tests
+ src/full/Agda/Interaction/Highlighting/Generate.hs-boot view
@@ -0,0 +1,10 @@+module Agda.Interaction.Highlighting.Generate where+import Agda.TypeChecking.Monad.Base+import Agda.Syntax.Position (Range)++highlightAsTypeChecked+  :: MonadTCM tcm+  => Range+  -> Range+  -> tcm a+  -> tcm a
+ src/full/Agda/Interaction/Highlighting/LaTeX.hs view
@@ -0,0 +1,455 @@+{-# LANGUAGE CPP, ViewPatterns #-}++-- | Function for generating highlighted and aligned LaTeX from literate+-- Agda source.++module Agda.Interaction.Highlighting.LaTeX+  ( generateLaTeX+  ) where++import Data.Char+import Data.Maybe+import Data.Function+import Data.List+import Control.Monad.RWS+import Control.Monad.Error+import Control.Monad.Trans+import System.Directory+import System.FilePath+import System.Process+import System.Exit+import Data.Text (Text)+import qualified Data.Text          as T+import qualified Data.Text.Encoding as E+import qualified Data.ByteString    as BS++import qualified Data.List as List+import qualified Data.Map  as Map++import Paths_Agda++import Agda.Syntax.Common+import qualified Agda.Syntax.Abstract as A+import Agda.Interaction.Highlighting.Precise+import Agda.TypeChecking.Monad (TCM)+import qualified Agda.TypeChecking.Monad as TCM+import Agda.Interaction.Options+import Agda.Compiler.CallCompiler+import qualified Agda.Utils.IO.UTF8 as UTF8++#include "../../undefined.h"+import Agda.Utils.Impossible++------------------------------------------------------------------------+-- * Datatypes.++-- | The @LaTeX@ monad is a combination of @ErrorT@ and @RWS@. The error+-- part is just used to keep track whether we finished or not, the+-- reader part isn't used, the writer is where the output goes and the+-- state is for keeping track of the tokens and some other useful info.+type LaTeX = ErrorT String (RWS () Text State)++data State = State+  { tokens     :: Tokens+  , column     :: Int     -- ^ Column number, used for polytable alignment.+  , indent     :: Int     -- ^ Indentation level, also for alignment.+  , indentPrev :: Int+  , inCode     :: Bool    -- ^ Keeps track of whether we are in a code+                          -- block or not.+  }++type Tokens = [Token]++data Token = Token+  { string   :: Text+  , info     :: MetaInfo+  , position :: Integer  -- ^ Is not used currently, but could+                         -- potentially be used for hyperlinks as in+                         -- the HTML output?+  }++-- | Run function for the @LaTeX@ monad.+runLaTeX :: LaTeX a -> () -> State -> (Either String a, State, Text)+runLaTeX = runRWS . runErrorT++emptyState :: State+emptyState = State+  { tokens     = []+  , column     = 0+  , indent     = 0+  , indentPrev = 0+  , inCode     = False+  }++------------------------------------------------------------------------+-- * Some helpers.++(<+>) = T.append++isInfixOf' :: Text -> Text -> Maybe (Text, Text)+isInfixOf' needle haystack = go (T.tails haystack) 0+  where+  go []                                         n = Nothing+  go ((T.stripPrefix needle -> Just suf) : xss) n = Just (T.take n haystack, suf)+  go (_                                  : xss) n = go xss (n + 1)++isSpaces :: Text -> Bool+isSpaces (T.uncons -> Nothing)     = True+isSpaces (T.uncons -> Just (c, s)) | isSpace c = isSpaces s+                                   | otherwise = False++isSpaces _                         = __IMPOSSIBLE__++-- | Yields the next token, taking special care to begin/end code+-- blocks. Junk occuring before and after the code blocks is separated+-- into separate tokens, this makes it easier to keep track of whether+-- we are in a code block or not.+nextToken' :: LaTeX Token+nextToken' = do+  toks <- gets tokens+  case toks of+    []     -> throwError "Done"++    -- Clean begin/end code block or a LaTeX comment.+    t : ts | string t == beginCode || string t == endCode ||+             T.singleton '%' == T.take 1 (T.stripStart (string t)) -> do++      modify $ \s -> s { tokens = ts }+      return t++    t : ts -> do+      modify $ \s -> s { tokens = ts }++      inCode <- gets inCode+      let code = if inCode then endCode else beginCode++      case code `isInfixOf'` string t of+        Nothing -> do++          -- Spaces take care of their own column tracking.+          unless (isSpaces (string t)) $ do+            moveColumn $ T.length $ string t++          return t++        Just (pre, suf) -> do+          let t'  = t { string = code }+          let t'' = t { string = suf }+          modify $ \s -> s { tokens = t' : t'' : tokens s }++          unless (isSpaces pre) $ do+            moveColumn $ T.length pre++          return $ t { string = pre }++nextToken :: LaTeX Text+nextToken = string `fmap` nextToken'++resetColumn :: LaTeX ()+resetColumn = modify $ \s -> s { column = 0 }++moveColumn :: Int -> LaTeX ()+moveColumn i = modify $ \s -> s { column = i + column s }++moveIndent :: Int -> LaTeX ()+moveIndent i = modify $ \s -> s { indent = i + indent s }++resetIndent :: LaTeX ()+resetIndent = modify $ \s -> s { indent = 0 }++setIndentPrev :: Int -> LaTeX ()+setIndentPrev i = modify $ \s -> s { indentPrev = i }++resetIndentPrev :: LaTeX ()+resetIndentPrev = modify $ \s -> s { indentPrev = 0 }++setInCode :: LaTeX ()+setInCode = modify $ \s -> s { inCode = True }++unsetInCode :: LaTeX ()+unsetInCode = modify $ \s -> s { inCode = False }++------------------------------------------------------------------------+-- * LaTeX and polytable strings.++-- Polytable, http://www.ctan.org/pkg/polytable, is used for code+-- alignment, similar to lhs2TeX's approach.++nl        = T.pack "%\n"+beginCode = T.pack "\\begin{code}"+endCode   = T.pack "\\end{code}"++ptOpen     = T.pack "\\>"+ptOpen'  i = ptOpen <+> T.pack ("[" ++ show i ++ "]")+ptClose    = T.pack "\\<"+ptClose' i = ptClose <+> T.pack ("[" ++ show i ++ "]")+ptNL       = nl <+> T.pack "\\\\\n"++cmdPrefix   = T.pack "\\Agda"+cmdArg    x = T.singleton '{' <+> x <+> T.singleton '}'+cmdIndent i = cmdPrefix <+> T.pack "Indent" <+>+                  cmdArg (T.pack (show i)) <+> cmdArg T.empty++infixl'     = T.pack "infixl"+infix'      = T.pack "infix"+infixr'     = T.pack "infixr"++------------------------------------------------------------------------+-- * Automaton.++-- | The start state, @nonCode@, prints non-code (the LaTeX part of+-- literate Agda) until it sees a @beginBlock@.+nonCode :: LaTeX ()+nonCode = do+  tok <- nextToken++  if tok == beginCode++     then do+       tell tok+       resetColumn+       setInCode+       code++     else do+       tell tok+       nonCode++-- | Deals with code blocks. Every token, except spaces, is pretty+-- printed as a LaTeX command.+code :: LaTeX ()+code = do++  col <- gets column+  when (col == 0) $ do+    tell ptOpen++  tok' <- nextToken'+  let tok = string tok'++  when (tok == endCode) $ do+    tell $ ptClose <+> tok+    unsetInCode+    nonCode++  when (tok `elem` [ infixl', infix', infixr' ]) $ do+    tell $ cmdPrefix <+> T.pack "Keyword" <+> cmdArg tok+    fixity+    code++  when (isSpaces tok) $ do+    spaces $ T.group tok+    code++  case aspect (info tok') of+    Nothing -> tell $ escape tok+    Just a  -> tell $ cmdPrefix <+> T.pack (cmd a) <+> cmdArg (escape tok)+  code++  where+  cmd :: Aspect -> String+  cmd (Name mKind _) = maybe __IMPOSSIBLE__ showKind mKind+    where+    showKind :: NameKind -> String+    showKind (Constructor Inductive)   = "InductiveConstructor"+    showKind (Constructor CoInductive) = "CoinductiveConstructor"+    showKind k                         = show k+  cmd a              = show a++-- Escapes special characters.+escape :: Text -> Text+escape (T.uncons -> Nothing)     = T.empty+escape (T.uncons -> Just (c, s)) = T.pack (replace c) <+> escape s+  where+  replace :: Char -> String+  replace c = case c of+    '_'  -> "\\_"+    '{'  -> "\\{"+    '}'  -> "\\}"+    '#'  -> "\\#"+    '$'  -> "\\$"+    '&'  -> "\\&"+    '%'  -> "\\%"+    '~'  -> "\textasciitilde"+    '^'  -> "\textasciicircum"+    '\\' -> "\textbackslash"+    _    -> [ c ]+escape _                         = __IMPOSSIBLE__++-- | Fixity declarations need a special treatment. The operations in+-- declarations like:+--+--     infix num op1 op2 op3+--+-- are treated as comments and thus grouped together with the newlines+-- that follow, which results incorrect LaTeX output -- the following+-- state remedies the problem by breaking on newlines.+fixity :: LaTeX ()+fixity = do+  tok <- nextToken++  case T.breakOn (T.pack "\n") tok of++    -- Spaces.+    (sps, nls) | nls == T.empty && isSpaces sps -> do+        spaces $ T.group sps+        fixity++    -- Fixity level.+    (num, nls) | nls == T.empty -> do+        tell $ cmdPrefix <+> T.pack "Number" <+> cmdArg num+        fixity++    -- Operations followed by newlines.+    (ops, nls) | otherwise      -> do+        tell $ escape ops+        spaces (T.group nls)+++-- | Spaces are grouped before processed, because multiple consecutive+-- spaces determine the alignment of the code and consecutive newline+-- characters need special treatment as well.+spaces :: [Text] -> LaTeX ()+spaces []                                 = return ()+spaces ((T.uncons -> Nothing)       : ss) = __IMPOSSIBLE__++-- Single spaces are ignored.+spaces ((T.uncons -> Just (' ', s)) : []) | T.null s = do+  moveColumn 1+  tell $ T.singleton ' '++-- Multiple spaces.+spaces (s@(T.uncons -> Just (' ', _)) : ss) = do+  let len = T.length s++  col <- gets column+  moveColumn len++  if col == 0+     then do++       -- FIX: What's going on here?+       ind     <- gets indent+       indPrev <- gets indentPrev++       if ind == len+          then do+            tell $ ptOpen' indPrev+          else do+            if len < ind+               then do+                 resetIndent+                 resetIndentPrev+                 tell $ ptOpen' $ if indPrev == 0 ||+                                         len == indPrev+                                     then 0+                                     else ind - indPrev - len+               else do+                 moveIndent $ len - ind+                 setIndentPrev ind+                 tell $ ptOpen' ind++       tell $ cmdIndent len+       tell $ ptClose' len <+> nl <+> ptOpen' len+     else do+       tell $ T.singleton ' '+       col <- gets column+       tell $ ptClose' col <+> nl <+> ptOpen' col++  spaces ss++-- Newlines.+spaces (s@(T.uncons -> Just ('\n', _)) : ss) = do+  resetColumn+  tell $ ptClose <+> T.replicate (T.length s) ptNL+  spaces ss++-- Treat tabs as if they were spaces.+spaces (s@(T.uncons -> Just ('\t', _)) : ss) =+  spaces $ T.replicate (T.length s) (T.singleton ' ') : ss+spaces (_                              : ss) = __IMPOSSIBLE__++------------------------------------------------------------------------+-- * Main.++defaultStyFile = "agda.sty"++-- | The only exported function. It's (only) called in @Main.hs@.+generateLaTeX :: A.ModuleName -> HighlightingInfo -> TCM ()+generateLaTeX mod hi = do++  options <- TCM.commandLineOptions++  -- There is a default directory given by 'defaultLaTeXDir'.+  let dir = optLaTeXDir options+  liftIO $ createDirectoryIfMissing True dir++  TCM.reportSLn "latex" 1 $ unlines+    [ ""+    , "Checking if " ++ defaultStyFile ++ " is found by the LaTeX environment."+    ]++  merrors <- callCompiler' "kpsewhich" [ defaultStyFile ]++  when (isJust merrors) $ do+    TCM.reportSLn "latex" 1 $ unlines+      [ ""+      , defaultStyFile ++ " was not found. Copying a default version of " +++          defaultStyFile+      , "into the working directory."+      ]++    liftIO $ do+      styFile <- getDataFileName defaultStyFile+      liftIO $ copyFile styFile defaultStyFile++  liftIO $ do+    source <- UTF8.readTextFile (modToFile mod <.> "lagda")+    let latex = E.encodeUtf8 $ toLaTeX source hi+    BS.writeFile (dir </> modToFile mod <.> "tex") latex++  where+  modToFile :: A.ModuleName -> FilePath+  modToFile mod = go $ show mod+    where+    go []         = []+    go ('.' : cs) = pathSeparator : go cs+    go (c   : cs) = c             : go cs++-- | Transforms the source code into LaTeX.+toLaTeX :: String -> HighlightingInfo -> Text+toLaTeX source hi++  = processTokens++  -- Head the list (the grouped chars contain the same meta info) and+  -- collect the characters into a string.+  . map (\xs -> case xs of+                    (mi, (pos, _)) : _ ->+                        Token { string   = T.pack $ map (\(_, (_, c)) -> c) xs+                              , info     = maybe mempty id mi+                              , position = pos+                              }+                    []                 -> __IMPOSSIBLE__)++  . List.groupBy ((==) `on` fst)  -- Characters which share the same+                                  -- meta info are the same token, so+                                  -- group them together.++  -- Look up the meta info at each position in the highlighting info.+  . map (\(pos, char) ->+        (Map.lookup pos infoMap, (pos, char)))++  -- Add position in file to each character.+  . zip [1..]+  $ source+  where+  infoMap = toMap (decompress hi)++processTokens :: Tokens -> Text+processTokens ts =+  case x of+    Left "Done" -> s+    _           -> __IMPOSSIBLE__+  where+  (x, _, s) = runLaTeX nonCode () (emptyState { tokens = ts })
src/full/Agda/Interaction/Highlighting/Precise.hs view
@@ -3,19 +3,31 @@ -- | Types used for precise syntax highlighting.  module Agda.Interaction.Highlighting.Precise-  ( Aspect(..)+  ( -- * Files+    Aspect(..)   , NameKind(..)   , OtherAspect(..)   , MetaInfo(..)   , File   , HighlightingInfo+    -- ** Creation   , singleton   , several+    -- ** Inspection   , smallestPos   , toMap-  , CompressedFile+    -- * Compressed files+  , CompressedFile(..)+  , compressedFileInvariant   , compress   , decompress+    -- ** Creation+  , singletonC+  , severalC+  , splitAtC+    -- ** Inspection+  , smallestPosC+    -- * Tests   , Agda.Interaction.Highlighting.Precise.tests   ) where @@ -25,15 +37,18 @@ import Data.List import Data.Function import Data.Monoid+import Control.Applicative ((<$>), (<*>))+import Control.Arrow ((&&&)) import Control.Monad-import Agda.Utils.QuickCheck+import Agda.Utils.QuickCheck hiding (ranges) import Data.Map (Map) import qualified Data.Map as Map-import Data.Generics (Typeable, Data)+import Data.Typeable (Typeable)  import qualified Agda.Syntax.Abstract.Name as A import qualified Agda.Syntax.Common as C import qualified Agda.Syntax.Concrete as SC+import qualified Agda.Syntax.Position as P  import Agda.Interaction.Highlighting.Range @@ -51,7 +66,7 @@   | Symbol                     -- ^ Symbols like forall, =, ->, etc.   | PrimitiveType              -- ^ Things like Set and Prop.   | Name (Maybe NameKind) Bool -- ^ Is the name an operator part?-    deriving (Eq, Show, Typeable, Data)+    deriving (Eq, Show, Typeable)  data NameKind   = Bound                   -- ^ Bound variable.@@ -63,7 +78,7 @@   | Postulate   | Primitive               -- ^ Primitive.   | Record                  -- ^ Record type.-    deriving (Eq, Show, Typeable, Data)+    deriving (Eq, Show, Typeable)  -- | Other aspects. (These can overlap with each other and with -- 'Aspect's.)@@ -72,11 +87,16 @@   = Error   | DottedPattern   | UnsolvedMeta+  | UnsolvedConstraint+    -- ^ Unsolved constraint not connected to meta-variable. This+    -- could for instance be an emptyness constraint.   | TerminationProblem   | IncompletePattern     -- ^ When this constructor is used it is probably a good idea to     -- include a 'note' explaining why the pattern is incomplete.-    deriving (Eq, Show, Enum, Bounded, Typeable, Data)+  | TypeChecks+    -- ^ Code which is being type-checked.+    deriving (Eq, Show, Enum, Bounded, Typeable)  -- | Meta information which can be associated with a -- character\/character range.@@ -93,41 +113,32 @@     -- ^ The definition site of the annotated thing, if applicable and     --   known. File positions are counted from 1.   }-  deriving (Eq, Show, Typeable, Data)+  deriving (Eq, Show, Typeable)  -- | A 'File' is a mapping from file positions to meta information. -- -- The first position in the file has number 1.  newtype File = File { mapping :: Map Integer MetaInfo }-  deriving (Eq, Show, Typeable, Data)---- | Returns the smallest position, if any, in the 'File'.--smallestPos :: File -> Maybe Integer-smallestPos = fmap (fst . fst) . Map.minViewWithKey . mapping+  deriving (Eq, Show, Typeable) --- | Syntax highlighting information for a given source file.+-- | Syntax highlighting information.  type HighlightingInfo = CompressedFile  ------------------------------------------------------------------------ -- Creation --- | @'singleton' r m@ is a file whose positions are those in @r@, and--- in which every position is associated with @m@.--singleton :: Range -> MetaInfo -> File-singleton r m = File {- mapping = Map.fromAscList [ (p, m) | p <- toList r ] }+-- | @'singleton' rs m@ is a file whose positions are those in @rs@,+-- and in which every position is associated with @m@. -prop_singleton r m =-  compress (singleton r m) ==-    if null (toList r) then [] else [(r, m)]+singleton :: Ranges -> MetaInfo -> File+singleton rs m = File {+ mapping = Map.fromAscList [ (p, m) | p <- rangesToPositions rs ] } --- | Like 'singleton', but with several ranges instead of only one.+-- | Like 'singleton', but with several 'Ranges' instead of only one. -several :: [Range] -> MetaInfo -> File+several :: [Ranges] -> MetaInfo -> File several rs m = mconcat $ map (\r -> singleton r m) rs  ------------------------------------------------------------------------@@ -170,6 +181,11 @@ ------------------------------------------------------------------------ -- Inspection +-- | Returns the smallest position, if any, in the 'File'.++smallestPos :: File -> Maybe Integer+smallestPos = fmap (fst . fst) . Map.minViewWithKey . mapping+ -- | Convert the 'File' to a map from file positions (counting from 1) -- to meta information. @@ -177,18 +193,35 @@ toMap = mapping  --------------------------------------------------------------------------- Compression+-- Compressed files  -- | A compressed 'File', in which consecutive positions with the same -- 'MetaInfo' are stored together. -type CompressedFile = [(Range, MetaInfo)]+newtype CompressedFile =+  CompressedFile { ranges :: [(Range, MetaInfo)] }+  deriving (Eq, Show, Typeable) +-- | Invariant for compressed files.+--+-- Note that these files are not required to be /maximally/+-- compressed, because ranges are allowed to be empty, and the+-- 'MetaInfo's in adjacent ranges are allowed to be equal.++compressedFileInvariant :: CompressedFile -> Bool+compressedFileInvariant (CompressedFile []) = True+compressedFileInvariant (CompressedFile f)  =+  all rangeInvariant rs &&+  all (not . empty) rs &&+  and (zipWith (<=) (map to $ init rs) (map from $ tail rs))+  where rs = map fst f+ -- | Compresses a file by merging consecutive positions with equal -- meta information into longer ranges.  compress :: File -> CompressedFile-compress f = map join $ groupBy' p (Map.toAscList $ mapping f)+compress f =+  CompressedFile $ map join $ groupBy' p (Map.toAscList $ mapping f)   where   p (pos1, m1) (pos2, m2) = pos2 == pos1 + 1 && m1 == m2   join pms = ( Range { from = head ps, to = last ps + 1 }@@ -203,20 +236,107 @@   File .   Map.fromList .   concat .-  map (\(r, m) -> [ (p, m) | p <- toList r ])+  map (\(r, m) -> [ (p, m) | p <- rangeToPositions r ]) .+  ranges  prop_compress f =-  decompress c == f-  &&-  and (map (rangeInvariant . fst) c)+  compressedFileInvariant c   &&-  and [ not (overlapping r1 r2) | (r1, r2) <- allPairs (map fst c) ]+  decompress c == f+  where c = compress f++------------------------------------------------------------------------+-- Operations that work directly with compressed files++-- | @'singletonC' rs m@ is a file whose positions are those in @rs@,+-- and in which every position is associated with @m@.++singletonC :: Ranges -> MetaInfo -> CompressedFile+singletonC (Ranges rs) m =+  CompressedFile [(r, m) | r <- rs, not (empty r)]++prop_singleton rs m = singleton rs m == decompress (singletonC rs m)++-- | Like 'singletonR', but with a list of 'Ranges' instead of a+-- single one.++severalC :: [Ranges] -> MetaInfo -> CompressedFile+severalC rss m = mconcat $ map (\rs -> singletonC rs m) rss++prop_several rss m = several rss m == decompress (severalC rss m)++-- | Merges compressed files.++mergeC :: CompressedFile -> CompressedFile -> CompressedFile+mergeC (CompressedFile f1) (CompressedFile f2) =+  CompressedFile (mrg f1 f2)   where-    c = compress f+  mrg []             f2             = f2+  mrg f1             []             = f1+  mrg (p1@(i1,_):f1) (p2@(i2,_):f2)+    | to i1 <= from i2 = p1 : mrg f1      (p2:f2)+    | to i2 <= from i1 = p2 : mrg (p1:f1) f2+    | to i1 <= to i2   = ps1 ++ mrg f1 (ps2 ++ f2)+    | otherwise        = ps1 ++ mrg (ps2 ++ f1) f2+      where (ps1, ps2) = fuse p1 p2 -    allPairs []       = []-    allPairs (x : xs) = map ((,) x) xs ++ allPairs xs+  -- Precondition: The ranges are overlapping.+  fuse (i1, m1) (i2, m2) =+    ( fix [ (Range { from = a, to = b }, ma)+          , (Range { from = b, to = c }, mergeMetaInfo m1 m2)+          ]+    , fix [ (Range { from = c, to = d }, md)+          ]+    )+    where+    [(a, ma), (b, _), (c, _), (d, md)] =+      sortBy (compare `on` fst)+             [(from i1, m1), (to i1, m1), (from i2, m2), (to i2, m2)]+    fix = filter (not . empty . fst) +prop_merge f1 f2 =+  merge f1 f2 == decompress (mergeC (compress f1) (compress f2))++instance Monoid CompressedFile where+  mempty  = CompressedFile []+  mappend = mergeC++-- | @splitAtC p f@ splits the compressed file @f@ into @(f1, f2)@,+-- where all the positions in @f1@ are @< p@, and all the positions+-- in @f2@ are @>= p@.++splitAtC :: Integer -> CompressedFile ->+            (CompressedFile, CompressedFile)+splitAtC p f = (CompressedFile f1, CompressedFile f2)+  where+  (f1, f2) = split $ ranges f++  split [] = ([], [])+  split (rx@(r,x) : f)+    | p <= from r = ([], rx:f)+    | to r <= p   = (rx:f1, f2)+    | otherwise   = ([ (toP, x) ], (fromP, x) : f)+    where (f1, f2) = split f+          toP      = Range { from = from r, to = p    }+          fromP    = Range { from = p,      to = to r }++prop_splitAtC p f =+  all (<  p) (positions f1) &&+  all (>= p) (positions f2) &&+  decompress (mergeC f1 f2) == decompress f+  where+  (f1, f2) = splitAtC p f++  positions = Map.keys . toMap . decompress++-- | Returns the smallest position, if any, in the 'CompressedFile'.++smallestPosC :: CompressedFile -> Maybe Integer+smallestPosC (CompressedFile [])           = Nothing+smallestPosC (CompressedFile ((r, _) : _)) = Just (from r)++prop_smallestPos f = smallestPos (decompress f) == smallestPosC f+ ------------------------------------------------------------------------ -- Generators @@ -227,6 +347,9 @@               , (1, liftM2 Name (maybeGen arbitrary) arbitrary)               ] +  shrink Name{} = [Comment]+  shrink _      = []+ instance CoArbitrary Aspect where   coarbitrary Comment       = variant 0   coarbitrary Keyword       = variant 1@@ -249,6 +372,9 @@                                  , Record                                  ] +  shrink Constructor{} = [Bound]+  shrink _             = []+ instance CoArbitrary NameKind where   coarbitrary Bound             = variant 0   coarbitrary (Constructor ind) = variant 1 . coarbitrary ind@@ -276,6 +402,12 @@                      , note = note, definitionSite = defSite })     where string = listOfElements "abcdefABCDEF/\\.\"'@()åäö\n" +  shrink (MetaInfo a o n d) =+    [ MetaInfo a o n d | a <- shrink a ] +++    [ MetaInfo a o n d | o <- shrink o ] +++    [ MetaInfo a o n d | n <- shrink n ] +++    [ MetaInfo a o n d | d <- shrink d ]+ instance CoArbitrary MetaInfo where   coarbitrary (MetaInfo aspect otherAspects note defSite) =     coarbitrary aspect .@@ -285,10 +417,28 @@  instance Arbitrary File where   arbitrary = fmap (File . Map.fromList) $ listOf arbitrary+  shrink    = map (File . Map.fromList) . shrink . Map.toList . toMap  instance CoArbitrary File where   coarbitrary (File rs) = coarbitrary (Map.toAscList rs) +instance Arbitrary CompressedFile where+  arbitrary = do+    rs <- (\ns1 ns2 -> toRanges $ sort $+                         ns1 ++ concatMap (\n -> [n, succ n]) ns2) <$>+            arbitrary <*> arbitrary+    CompressedFile <$> mapM (\r -> (,) r <$> arbitrary) rs+    where+    toRanges (f : t : rs)+      | f == t    = toRanges (t : rs)+      | otherwise = Range { from = f, to = t } :+                    toRanges (case rs of+                                f : rs | t == f -> rs+                                _               -> rs)+    toRanges _ = []++  shrink (CompressedFile f) = CompressedFile <$> shrink f+ ------------------------------------------------------------------------ -- All tests @@ -296,6 +446,18 @@  tests :: IO Bool tests = runTests "Agda.Interaction.Highlighting.Precise"-  [ quickCheck' prop_singleton+  [ quickCheck' compressedFileInvariant+  , quickCheck' (all compressedFileInvariant . shrink)+  , quickCheck' (\r m -> compressedFileInvariant $ singletonC r m)+  , quickCheck' (\rs m -> compressedFileInvariant $ severalC rs m)+  , quickCheck' (\f1 f2 -> compressedFileInvariant $ mergeC f1 f2)+  , quickCheck' (\i f -> all compressedFileInvariant $+                         (\(f1, f2) -> [f1, f2]) $+                         splitAtC i f)   , quickCheck' prop_compress+  , quickCheck' prop_singleton+  , quickCheck' prop_several+  , quickCheck' prop_merge+  , quickCheck' prop_splitAtC+  , quickCheck' prop_smallestPos   ]
src/full/Agda/Interaction/Highlighting/Range.hs view
@@ -5,21 +5,25 @@ module Agda.Interaction.Highlighting.Range   ( Range(..)   , rangeInvariant+  , Ranges(..)+  , rangesInvariant   , overlapping-  , toList-  , getRanges-  , getRangesA+  , empty+  , rangeToPositions+  , rangesToPositions   , rToR+  , minus   , Agda.Interaction.Highlighting.Range.tests   ) where -import Agda.Utils.QuickCheck+import Control.Applicative ((<$>)) import Data.List-import Data.Generics (Typeable, Data)-import Agda.Utils.TestHelpers-import qualified Agda.Syntax.Abstract as A-import qualified Agda.Syntax.Concrete as C+import Data.Typeable (Typeable)+ import qualified Agda.Syntax.Position as P+import Agda.Utils.List+import Agda.Utils.TestHelpers+import Agda.Utils.QuickCheck  -- | Character ranges. The first character in the file has position 1. -- Note that the 'to' position is considered to be outside of the@@ -28,13 +32,28 @@ -- Invariant: @'from' '<=' 'to'@.  data Range = Range { from, to :: Integer }-             deriving (Eq, Ord, Show, Typeable, Data)+             deriving (Eq, Ord, Show, Typeable)  -- | The 'Range' invariant.  rangeInvariant :: Range -> Bool rangeInvariant r = from r <= to r +-- | Zero or more consecutive and separated ranges.++newtype Ranges = Ranges [Range]+  deriving (Eq, Show)++-- | The 'Ranges' invariant.++rangesInvariant :: Ranges -> Bool+rangesInvariant (Ranges []) = True+rangesInvariant (Ranges rs) =+  and (zipWith (<) (map to $ init rs) (map from $ tail rs))++------------------------------------------------------------------------+-- Queries+ -- | 'True' iff the ranges overlap. -- -- The ranges are assumed to be well-formed.@@ -43,34 +62,30 @@ overlapping r1 r2 = not $   to r1 <= from r2 || to r2 <= from r1 --- | Converts a range to a list of positions.+-- | 'True' iff the range is empty. -toList :: Range -> [Integer]-toList r = [from r .. to r - 1]+empty :: Range -> Bool+empty r = to r <= from r  ------------------------------------------------------------------------ -- Conversion --- | Calculates a set of ranges associated with a name.------ For an operator the ranges associated with the NameParts are--- returned. Otherwise the range associated with the Name is returned.------ A boolean, indicating operatorness, is also returned.+-- | Converts a range to a list of positions. -getRanges :: C.Name -> ([Range], Bool)-getRanges n = (rToR $ P.getRange n, C.isOperator n)+rangeToPositions :: Range -> [Integer]+rangeToPositions r = [from r .. to r - 1] --- | Like 'getRanges', but for 'A.QName's. Note that the module part--- of the name is thrown away; only the base part is used.+-- | Converts several ranges to a list of positions. -getRangesA :: A.QName -> ([Range], Bool)-getRangesA = getRanges . A.nameConcrete . A.qnameName+rangesToPositions :: Ranges -> [Integer]+rangesToPositions (Ranges rs) = concatMap rangeToPositions rs --- | Converts a 'P.Range' to a list of 'Range's.+prop_rangesToPositions rs = sorted (rangesToPositions rs) -rToR :: P.Range -> [Range]-rToR (P.Range is) = map iToR is+-- | Converts a 'P.Range' to a 'Ranges'.++rToR :: P.Range -> Ranges+rToR (P.Range is) = Ranges (map iToR is)   where   iToR (P.Interval { P.iStart = P.Pn { P.posPos = pos1 }                    , P.iEnd   = P.Pn { P.posPos = pos2 }@@ -78,6 +93,33 @@     Range { from = toInteger pos1, to = toInteger pos2 }  ------------------------------------------------------------------------+-- Operations++-- | @minus xs ys@ computes the difference between @xs@ and @ys@: the+-- result contains those positions which are present in @xs@ but not+-- in @ys@.+--+-- Linear in the lengths of the input ranges.++minus :: Ranges -> Ranges -> Ranges+minus (Ranges rs1) (Ranges rs2) = Ranges (m rs1 rs2)+  where+  m []     _      = []+  m xs     []     = xs+  m (x:xs) (y:ys)+    | empty y         = m (x:xs) ys+    | to x < from y   = x : m xs (y:ys)+    | to y < from x   = m (x:xs) ys+    | from x < from y = Range { from = from x, to = from y } :+                        m (Range { from = from y, to = to x } : xs) (y:ys)+    | to y < to x     = m (Range { from = to y, to = to x } : xs) ys+    | otherwise       = m xs (y:ys)++prop_minus xs ys =+  rangesToPositions (xs `minus` ys) ==+  rangesToPositions xs \\ rangesToPositions ys++------------------------------------------------------------------------ -- Generators  instance Arbitrary Range where@@ -88,6 +130,9 @@ instance CoArbitrary Range where   coarbitrary (Range f t) = coarbitrary f . coarbitrary t +instance Arbitrary Ranges where+  arbitrary = rToR <$> arbitrary+ ------------------------------------------------------------------------ -- All tests @@ -96,4 +141,9 @@ tests :: IO Bool tests = runTests "Agda.Interaction.Highlighting.Range"   [ quickCheck' rangeInvariant+  , quickCheck' rangesInvariant+  , quickCheck' (rangesInvariant . rToR)+  , quickCheck' (\r1 r2 -> rangesInvariant $ r1 `minus` r2)+  , quickCheck' prop_rangesToPositions+  , quickCheck' prop_minus   ]
src/full/Agda/Interaction/Highlighting/Vim.hs view
@@ -4,6 +4,7 @@  import Control.Monad.Trans import Data.Char+import Data.Function ( on ) import Data.Set ( Set ) import Data.Map ( Map ) import System.FilePath@@ -23,7 +24,8 @@ #include "../../undefined.h" import Agda.Utils.Impossible -on f g x y = f (g x) (g y)+-- defined in Data.Function+-- on f g x y = f (g x) (g y)  vimFile :: FilePath -> FilePath vimFile file =@@ -46,8 +48,8 @@ match cat ws	= "syn match " ++ cat ++ " \"" ++ 		    concat (List.intersperse "\\|" $ map escape ws) ++ "\"" -matches :: [String] -> [String] -> [String] -> [String] -> [String]-matches cons icons defs idefs =+matches :: [String] -> [String] -> [String] -> [String] -> [String] -> [String] -> [String]+matches cons icons defs idefs flds iflds =     map snd     $ List.sortBy (compare `on` fst)     $ cons' ++ defs' ++ icons' ++ idefs'@@ -56,6 +58,8 @@ 	icons' = foo "agdaInfixConstructor" $ classify length icons 	defs'  = foo "agdaFunction"	    $ classify length defs 	idefs' = foo "agdaInfixFunction"    $ classify length idefs+	flds'  = foo "agdaProjection"	    $ classify length flds+	iflds' = foo "agdaInfixProjection"  $ classify length iflds  	classify f = List.groupBy ((==) `on` f) 		     . List.sortBy (compare `on` f)@@ -64,16 +68,19 @@ 	foo cat = map (length . head /\ match cat)  toVim :: NamesInScope -> String-toVim ns = unlines $ matches mcons micons mdefs midefs+toVim ns = unlines $ matches mcons micons mdefs midefs mflds miflds     where 	cons = [ x | (x, def:_) <- Map.toList ns, anameKind def == ConName ] 	defs = [ x | (x, def:_) <- Map.toList ns, anameKind def == DefName ]+	flds = [ x | (x, fld:_) <- Map.toList ns, anameKind fld == FldName ]  	mcons = map show cons 	mdefs = map show defs+	mflds = map show flds  	micons = concatMap parts cons 	midefs = concatMap parts defs+	miflds = concatMap parts flds  	parts (NoName _ _) = [] 	parts (Name _ [_]) = []
src/full/Agda/Interaction/Imports.hs view
@@ -4,23 +4,26 @@ -} module Agda.Interaction.Imports where -import Prelude hiding (catch)+import Prelude  import Control.Arrow import Control.Monad.Error+import Control.Monad.Reader import Control.Monad.State import qualified Control.Exception as E++import Data.Function (on) import qualified Data.Map as Map import qualified Data.List as List import qualified Data.Set as Set+import qualified Data.Foldable as Fold (toList) import qualified Data.ByteString.Lazy as BS import Data.List import Data.Maybe+import Data.Monoid (mempty, mappend) import Data.Map (Map) import Data.Set (Set)-import System.Directory-import System.Time-import qualified Agda.Utils.IO.Locale as LocIO+import System.Directory (doesFileExist, getModificationTime, removeFile) import System.FilePath hiding (splitPath)  import Agda.Syntax.Position@@ -35,6 +38,7 @@  import Agda.Termination.TermCheck +import Agda.TypeChecking.Errors import Agda.TypeChecking.Reduce import Agda.TypeChecking.Monad import Agda.TypeChecking.Monad.Builtin@@ -42,8 +46,10 @@ import Agda.TypeChecking.Primitive import Agda.TypeChecker +import Agda.Interaction.EmacsCommand import Agda.Interaction.FindFile import Agda.Interaction.Options+import Agda.Interaction.Response (Response(Resp_RunningInfo)) import Agda.Interaction.Highlighting.Precise (HighlightingInfo) import Agda.Interaction.Highlighting.Generate import Agda.Interaction.Highlighting.Vim@@ -54,6 +60,7 @@ import Agda.Utils.IO.Binary import Agda.Utils.Pretty import Agda.Utils.Fresh+import Agda.Utils.Time  import Agda.Utils.Impossible #include "../undefined.h"@@ -79,24 +86,25 @@             Just b1 = Map.lookup b bs             Just b2 = Map.lookup b bi     mapM_ check (map fst $ Map.toList $ Map.intersection bs bi)-    addImportedThings sig bi (iHaskellImports i)+    addImportedThings sig bi (iHaskellImports i) (iPatternSyns i)     reportSLn "import.iface.merge" 20 $       "  Rebinding primitives " ++ show prim     prim <- Map.fromList <$> mapM rebind prim     modify $ \st -> st { stImportedBuiltins = stImportedBuiltins st `Map.union` prim 		       }     where-	rebind x = do+	rebind (x, q) = do 	    PrimImpl _ pf <- lookupPrimitiveFunction x-	    return (x, Prim pf)+	    return (x, Prim $ pf { primFunName = q })  addImportedThings ::-  Signature -> BuiltinThings PrimFun -> Set String -> TCM ()-addImportedThings isig ibuiltin hsImports =+  Signature -> BuiltinThings PrimFun -> Set String -> A.PatternSynDefns -> TCM ()+addImportedThings isig ibuiltin hsImports patsyns =   modify $ \st -> st     { stImports          = unionSignatures [stImports st, isig]     , stImportedBuiltins = Map.union (stImportedBuiltins st) ibuiltin     , stHaskellImports   = Set.union (stHaskellImports st) hsImports+    , stPatternSynImports = Map.union (stPatternSynImports st) patsyns     }  -- | Scope checks the given module. A proper version of the module@@ -107,7 +115,7 @@     reportSLn "import.scope" 5 $ "Scope checking " ++ show x     verboseS "import.scope" 10 $ do       visited <- Map.keys <$> getVisitedModules-      liftIO $ LocIO.putStrLn $+      reportSLn "" 0 $         "  visited: " ++ intercalate ", " (map (render . pretty) visited)     i <- fst <$> getInterface x     addImport x@@ -149,30 +157,6 @@                 }           return r --- | Warnings.------ Invariant: The fields are never empty at the same time.--data Warnings = Warnings-  { terminationProblems   :: [TerminationError]-    -- ^ Termination checking problems are not reported if-    -- 'optTerminationCheck' is 'False'.-  , unsolvedMetaVariables :: [Range]-    -- ^ Meta-variable problems are reported as type errors unless-    -- 'optAllowUnsolved' is 'True'.-  , unsolvedConstraints   :: Constraints-    -- ^ Same as 'unsolvedMetaVariables'.-  }---- | Turns warnings into an error. Even if several errors are possible--- only one is raised.--warningsToError :: Warnings -> TypeError-warningsToError (Warnings [] [] [])    = __IMPOSSIBLE__-warningsToError (Warnings _ w@(_:_) _) = UnsolvedMetas w-warningsToError (Warnings _ _ w@(_:_)) = UnsolvedConstraints w-warningsToError (Warnings w@(_:_) _ _) = TerminationCheckFailed w- -- | Type checks the given module (if necessary).  typeCheck :: AbsolutePath -> TCM (Interface, Maybe Warnings)@@ -206,9 +190,10 @@                        -- be preserved?               -> TCM (Interface, Either Warnings ClockTime) getInterface' x includeStateChanges =+  withIncreasedModuleNestingLevel $   -- Preserve the pragma options unless includeStateChanges is True.-  bracket (stPragmaOptions <$> get)-          (unless includeStateChanges . setPragmaOptions) $ \_ -> do+  bracket_ (stPragmaOptions <$> get)+           (unless includeStateChanges . setPragmaOptions) $ do    -- Forget the pragma options (locally).    setCommandLineOptions . stPersistentOptions . stPersistent =<< get @@ -241,7 +226,10 @@     visited <- isVisited x     reportSLn "import.iface" 5 $ if visited then "  We've been here. Don't merge."                                  else "  New module. Let's check it out."-    unless (visited || stateChangesIncluded) $ mergeInterface i+    unless (visited || stateChangesIncluded) $ do+      mergeInterface i+      ifTopLevelAndHighlightingLevelIs NonInteractive $+        highlightFromInterface i file      modify (\s -> s { stCurrentModule = Just $ iModuleName i }) @@ -255,7 +243,7 @@     where       isCached file = do         let ifile = filePath $ toIFile file-        exist <- liftIO $ doesFileExist ifile+        exist <- liftIO $ doesFileExistCaseSensitive ifile         if not exist           then return False           else do@@ -265,6 +253,18 @@               Just (mi, mt) | mt >= t -> True               _                       -> False +      -- Formats the "Checking", "Finished" and "Skipping" messages.+      chaseMsg kind file = do+        nesting <- envModuleNestingLevel <$> ask+        let s = genericReplicate nesting ' ' ++ kind +++                " " ++ render (pretty x) +++                case file of+                  Nothing -> "."+                  Just f  -> " (" ++ f ++ ")."+        ifM (envEmacs <$> ask)+            (get >>= \st -> stInteractionOutputCallback st $ Resp_RunningInfo s)+            (reportSLn "" 1 s)+       skip file = do         -- Examine the mtime of the interface file. If it is newer than the         -- stored version (in stDecodedModules), or if there is no stored version,@@ -301,52 +301,63 @@                 -- liftIO close	-- Close the interface file. See above.                 typeCheck file               else do-                unless cached $ reportSLn "" 1 $-                  "Skipping " ++ render (pretty x) ++-                    " (" ++ ifile ++ ")."+                unless cached $ chaseMsg "Skipping" (Just ifile)                 -- We set the pragma options of the skipped file here,                 -- because if the top-level file is skipped we want the                 -- pragmas to apply to interactive commands in the UI.                 mapM_ setOptionsFromPragma (iPragmaOptions i)                 return (False, (i, Right t)) -      typeCheck file =-        let ret a = do-              reportSLn "" 1 $ "Finished " ++ render (pretty x) ++ "."-              return a-        in do+      typeCheck file = do+          let withMsgs m = do+                chaseMsg "Checking" (Just $ filePath file)+                x <- m+                chaseMsg "Finished" Nothing+                return x+           -- Do the type checking.-          reportSLn "" 1 $ "Checking " ++ render (pretty x) ++ " (" ++ filePath file ++ ")."+           if includeStateChanges then do-            r <- createInterface file x+            r <- withMsgs $ createInterface file x              -- Merge the signature with the signature for imported             -- things.             sig <- getSignature-            addImportedThings sig Map.empty Set.empty+            patsyns <- getPatternSyns+            addImportedThings sig Map.empty Set.empty patsyns             setSignature emptySignature+            setPatternSyns Map.empty -            ret (True, r)+            return (True, r)            else do             ms       <- getImportPath+            emacs    <- envEmacs <$> ask+            nesting  <- envModuleNestingLevel <$> ask             mf       <- stModuleToSource <$> get             vs       <- getVisitedModules             ds       <- getDecodedModules             opts     <- stPersistentOptions . stPersistent <$> get             isig     <- getImportedSignature             ibuiltin <- gets stImportedBuiltins+            ipatsyns <- getPatternSynImports+            ho       <- stInteractionOutputCallback <$> get             -- Every interface is treated in isolation. Note: Changes             -- to stDecodedModules are not preserved if an error is             -- encountered in an imported module.             r <- liftIO $ runTCM $-                   withImportPath ms $ do+                   withImportPath ms $+                   local (\e -> e { envEmacs              = emacs+                                  , envModuleNestingLevel = nesting+                                  }) $ do                      setDecodedModules ds                      setCommandLineOptions opts-                     modify $ \s -> s { stModuleToSource = mf }+                     modify $ \s -> s { stModuleToSource     = mf+                                      , stInteractionOutputCallback = ho+                                      }                      setVisitedModules vs-                     addImportedThings isig ibuiltin Set.empty+                     addImportedThings isig ibuiltin Set.empty ipatsyns -                     r <- createInterface file x+                     r <- withMsgs $ createInterface file x                       mf        <- stModuleToSource <$> get                      ds        <- getDecodedModules@@ -363,13 +374,29 @@                 Right (r, update) -> do                   update                   case r of-                    (_, Right _) -> do-                      r <- skip file-                      ret r-                    _ ->-                      ret (False, r)+                    (_, Right _) ->+                      -- We skip the file which has just been type-checked to+                      -- be able to forget some of the local state from+                      -- checking the module.+                      -- Note that this doesn't actually read the interface+                      -- file, only the cached interface.+                      skip file+                    _ -> return (False, r) +-- | Print the highlighting information contained in the given+-- interface. +highlightFromInterface+  :: Interface+  -> AbsolutePath+     -- ^ The corresponding file.+  -> TCM ()+highlightFromInterface i file = do+  reportSLn "import.iface" 5 $+    "Generating syntax info for " ++ filePath file +++    " (read from interface)."+  printHighlightingInfo (iHighlighting i)+ readInterface :: FilePath -> TCM (Maybe Interface) readInterface file = do     -- Decode the interface file@@ -389,9 +416,9 @@   -- Catch exceptions   `catchError` handler   where-    handler e = case errError e of+    handler e = case e of       IOException _ e -> do-        liftIO $ LocIO.putStrLn $ "IO exception: " ++ show e+        reportSLn "" 0 $ "IO exception: " ++ show e         return Nothing   -- Work-around for file locking bug.                          -- TODO: What does this refer to? Please                          -- document.@@ -424,12 +451,17 @@   :: AbsolutePath          -- ^ The file to type check.   -> C.TopLevelModuleName  -- ^ The expected module name.   -> TCM (Interface, Either Warnings ClockTime)-createInterface file mname = do-    reportSLn "import.iface.create" 5  $+createInterface file mname =+  local (\e -> e { envCurrentPath = file }) $ do+    modFile       <- stModuleToSource <$> get+    fileTokenInfo <- generateTokenInfo file+    modify $ \st -> st { stTokens = fileTokenInfo }++    reportSLn "import.iface.create" 5 $       "Creating interface for " ++ render (pretty mname) ++ "."     verboseS "import.iface.create" 10 $ do       visited <- Map.keys <$> getVisitedModules-      liftIO $ LocIO.putStrLn $+      reportSLn "" 0 $         "  visited: " ++ intercalate ", " (map (render . pretty) visited)      previousHsImports <- getHaskellImports@@ -444,75 +476,55 @@     mapM_ setOptionsFromPragma options     topLevel <- concreteToAbstract_ (TopLevel top) -    termErrs <- catchError (do-      -- Type checking.-      checkDecls (topLevelDecls topLevel)-      unfreezeMetas--      -- Count number of metas-      verboseS "profile.metas" 10 $ do-        MetaId n <- fresh-        tickN "metas" n+    let ds = topLevelDecls topLevel -      -- Termination checking.-      termErrs <- ifM (optTerminationCheck <$> pragmaOptions)-                      (termDecls $ topLevelDecls topLevel)-                      (return [])-      mapM_ (\e -> reportSLn "term.warn.no" 2-                     (show (termErrFunctions e) ++-                      " do(es) NOT pass the termination checker."))-            termErrs-      return termErrs-      ) (\e -> do-        -- If there is an error syntax highlighting info can still be-        -- generated.-        case rStart $ getRange e of-          Just (Pn { srcFile = Just f }) | f == file -> do-            syntaxInfo <- generateSyntaxInfo file (Just e) topLevel []-            modFile    <- stModuleToSource <$> get-            -- The highlighting info is included with the error.-            case errHighlighting e of-              Just _  -> __IMPOSSIBLE__-              Nothing ->-                throwError $ e { errHighlighting =-                                   Just (syntaxInfo, modFile) }-          _ -> throwError e-      )+    ifTopLevelAndHighlightingLevelIs NonInteractive $ do+      -- Generate and print approximate syntax highlighting info.+      printHighlightingInfo fileTokenInfo+      mapM_ (\d -> generateAndPrintSyntaxInfo d Partial) ds -    -- Generate syntax highlighting info.-    syntaxInfo <- generateSyntaxInfo file Nothing topLevel termErrs+    catchError (checkDecls ds) $ \e -> do+      ifTopLevelAndHighlightingLevelIs NonInteractive $+        printErrorInfo e+      throwError e -    -- Generate Vim file.-    whenM (optGenerateVimFile <$> commandLineOptions) $-	withScope_ (insideScope topLevel) $ generateVimFile $ filePath file+    unfreezeMetas -    -- Print stats-    stats <- Map.toList <$> getStatistics-    case stats of-      []      -> return ()-      _       -> reportS "profile" 1 $ unlines $-        [ "Ticks for " ++ show (pretty mname) ] ++-        [ "  " ++ s ++ " = " ++ show n-        | (s, n) <- sortBy (compare `on` snd) stats ]+    -- Count number of metas+    verboseS "profile.metas" 10 $ do+      MetaId n <- fresh+      tickN "metas" (fromIntegral n) -    -- Check if there are unsolved meta-variables...-    unsolvedOK    <- optAllowUnsolved <$> pragmaOptions-    unsolvedMetas <- List.nub <$> (mapM getMetaRange =<< getOpenMetas)-    unless (null unsolvedMetas || unsolvedOK) $-      typeError $ UnsolvedMetas unsolvedMetas+    -- Move any remaining token highlighting to stSyntaxInfo.+    ifTopLevelAndHighlightingLevelIs NonInteractive $+      printHighlightingInfo . stTokens =<< get+    modify $ \st ->+      st { stTokens     = mempty+         , stSyntaxInfo = stSyntaxInfo st `mappend` stTokens st+         } -    -- ...or unsolved constraints-    unsolvedConstraints <- getAllConstraints-    unless (null unsolvedConstraints || unsolvedOK) $-      typeError $ UnsolvedConstraints unsolvedConstraints+    whenM (optGenerateVimFile <$> commandLineOptions) $+      -- Generate Vim file.+      withScope_ (insideScope topLevel) $ generateVimFile $ filePath file      setScope $ outsideScope topLevel      reportSLn "scope.top" 50 $ "SCOPE " ++ show (insideScope topLevel) +    syntaxInfo <- stSyntaxInfo <$> get     i <- buildInterface topLevel syntaxInfo previousHsImports options -    if and [ null termErrs, null unsolvedMetas, null unsolvedConstraints ]+    -- TODO: It would be nice if unsolved things were highlighted+    -- after every mutual block.++    termErrs            <- Fold.toList <$> stTermErrs <$> get+    unsolvedMetas       <- List.nub <$> (mapM getMetaRange =<< getOpenMetas)+    unsolvedConstraints <- getAllConstraints++    ifTopLevelAndHighlightingLevelIs NonInteractive $+      printUnsolvedInfo++    r <- if and [ null termErrs, null unsolvedMetas, null unsolvedConstraints ]      then do       -- The file was successfully type-checked (and no warnings were       -- encountered), so the interface should be written out.@@ -522,6 +534,17 @@      else       return (i, Left $ Warnings termErrs unsolvedMetas unsolvedConstraints) +    -- Print stats+    stats <- Map.toList <$> getStatistics+    case stats of+      []      -> return ()+      _       -> reportS "profile" 1 $ unlines $+        [ "Ticks for " ++ show (pretty mname) ] +++        [ "  " ++ s ++ " = " ++ show n+        | (s, n) <- sortBy (compare `on` snd) stats ]++    return r+ -- | Builds an interface for the current module, which should already -- have been successfully type checked. @@ -543,7 +566,8 @@     builtin <- gets stLocalBuiltins     ms      <- getImports     hsImps  <- getHaskellImports-    let	builtin' = Map.mapWithKey (\x b -> fmap (const x) b) builtin+    patsyns <- getPatternSyns+    let	builtin' = Map.mapWithKey (\x b -> fmap (\pf -> (x, primFunName pf)) b) builtin     reportSLn "import.iface" 7 "  instantiating all meta variables"     i <- instantiateFull $ Interface 			{ iImportedModules = Set.toList ms@@ -556,6 +580,7 @@                                                             previousHsImports                         , iHighlighting    = syntaxInfo                         , iPragmaOptions   = pragmas+                        , iPatternSyns     = patsyns 			}     reportSLn "import.iface" 7 "  interface complete"     return i
+ src/full/Agda/Interaction/InteractionTop.hs view
@@ -0,0 +1,1034 @@+{-# LANGUAGE CPP, TypeSynonymInstances, FlexibleInstances,+             MultiParamTypeClasses, Rank2Types,+             GeneralizedNewtypeDeriving, ScopedTypeVariables,+             GADTs #-}+{-# OPTIONS -fno-cse #-}++module Agda.Interaction.InteractionTop+  ( module Agda.Interaction.InteractionTop+  )+  where++import System.Directory+import qualified System.IO as IO+import Data.Maybe+import Data.Function+import Control.Applicative hiding (empty)+import qualified Control.Exception as E++import Agda.Utils.Pretty+import Agda.Utils.String+import Agda.Utils.FileName+import Agda.Utils.Tuple+import qualified Agda.Utils.IO.UTF8 as UTF8++import Control.Monad.Identity+import Control.Monad.Error+import Control.Monad.Reader+import Control.Monad.State+import Data.List as List+import qualified Data.Map as Map+import qualified System.Mem as System++import Agda.TypeChecking.Monad as TM+  hiding (initState, setCommandLineOptions)+import qualified Agda.TypeChecking.Monad as TM+import Agda.TypeChecking.Errors++import Agda.Syntax.Fixity+import Agda.Syntax.Position+import Agda.Syntax.Parser+import Agda.Syntax.Concrete as SC+import Agda.Syntax.Common as SCo+import Agda.Syntax.Concrete.Pretty ()+import Agda.Syntax.Abstract as SA+import Agda.Syntax.Abstract.Pretty+import Agda.Syntax.Translation.ConcreteToAbstract+import Agda.Syntax.Translation.AbstractToConcrete hiding (withScope)++import Agda.Interaction.Exceptions+import Agda.Interaction.FindFile+import Agda.Interaction.Options+import Agda.Interaction.MakeCase+import Agda.Interaction.Response+import qualified Agda.Interaction.BasicOps as B+import Agda.Interaction.Highlighting.Emacs+import Agda.Interaction.Highlighting.Generate+import Agda.Interaction.Highlighting.Precise hiding (Postulate)+import qualified Agda.Interaction.Imports as Imp++import qualified Agda.Compiler.Epic.Compiler as Epic+import qualified Agda.Compiler.MAlonzo.Compiler as MAlonzo+import qualified Agda.Compiler.JS.Compiler as JS++import qualified Agda.Auto.Auto as Auto+import qualified Agda.Utils.HashMap as HMap+import Agda.Utils.Time++#include "../undefined.h"+import Agda.Utils.Impossible++------------------------------------------++-- | Auxiliary state of an interactive computation.++data CommandState = CommandState+  { theInteractionPoints :: [InteractionId]+    -- ^ The interaction points of the buffer, in the order in which+    --   they appear in the buffer. The interaction points are+    --   recorded in 'theTCState', but when new interaction points are+    --   added by give or refine Agda does not ensure that the ranges+    --   of later interaction points are updated.+  , theCurrentFile       :: Maybe (AbsolutePath, ClockTime)+    -- ^ The file which the state applies to. Only stored if the+    -- module was successfully type checked (potentially with+    -- warnings). The 'ClockTime' is the modification time stamp of+    -- the file when it was last loaded.+  , optionsOnReload :: CommandLineOptions+    -- ^ Reset the options on each reload to these.+  }++-- | Initial auxiliary interaction state++initCommandState :: CommandState+initCommandState = CommandState+  { theInteractionPoints = []+  , theCurrentFile       = Nothing+  , optionsOnReload      = defaultOptions+  }+++-- | Monad for computing answers to interactive commands.+--+--   'CommandM' is 'TCM' extended with state 'CommandState'.+--+--   'StateT' is in a newtype wrapper because we would like to prevent+--   the accidental use of 'lift'.+--   Instead of 'lift' one can use 'liftCommandM', see below.++newtype CommandM a = CommandM { unCommandM :: StateT CommandState TCM a }+    deriving (Monad, MonadIO, Functor, MonadState CommandState, MonadError TCErr)++-- | Wrapped 'runStateT' for 'CommandM'.++runCommandM :: CommandM a -> CommandState -> TCM (a, CommandState)+runCommandM = runStateT . unCommandM++-- | lift a TCM action to CommandM.+--+--   'liftCommandM' is a customized form of 'lift' for 'StateT'.+--   At the end of the lifted action 'stInteractionOutputCallback' is set+--   to its original value because the value is lost during the execution+--   of some TCM actions.++liftCommandM :: TCM a -> CommandM a+liftCommandM m = CommandM $ lift $ do+    outf <- gets stInteractionOutputCallback+    a <- m+    modify $ \st -> st { stInteractionOutputCallback = outf }+    return a++-- | Build an opposite action to 'lift' for state monads.++revLift+    :: MonadState st m+    => (forall c . m c -> st -> k (c, st))      -- ^ run+    -> (forall b . k b -> m b)                  -- ^ lift+    -> (forall x . (m a -> k x) -> k x) -> m a  -- ^ reverse lift in double negative position+revLift run lift f = do+    st <- get+    (a, st) <- lift $ f (`run` st)+    put st+    return a++-- | Opposite of 'liftIO' for 'CommandM'.+--   Use only if main errors are already catched.++commandMToIO :: (forall x . (CommandM a -> IO x) -> IO x) -> CommandM a+commandMToIO ci_i = revLift runCommandM liftCommandM $ \ct -> revLift runSafeTCM liftIO $ ci_i . (. ct)++-- | 'runSafeTCM' runs a safe 'TMC' action (a 'TCM' action which cannot fail)++runSafeTCM :: TCM a -> TCState -> IO (a, TCState)+runSafeTCM m st = do+    x <- runTCM $ do+        put st+        a <- m+        st <- get+        return (a, st)+    case x of+        Right x -> return x+        Left _  -> __IMPOSSIBLE__   -- cannot happen if 'm' is safe++-- | Lift a TCM action transformer to a CommandM action transformer.++liftCommandMT :: (forall a . TCM a -> TCM a) -> CommandM a -> CommandM a+liftCommandMT f m = revLift runCommandM liftCommandM $ f . ($ m)++-- | Put a response by the callback function given by 'stInteractionOutputCallback'.++putResponse :: Response -> CommandM ()+putResponse x = liftCommandM $ do+  callback <- stInteractionOutputCallback <$> get+  callback x++{- UNUSED++-- | Changes the 'Interaction' so that its first action is to turn off+-- all debug messages.++makeSilent :: Interaction -> Interaction+makeSilent i = i { command = do+  opts <- liftCommandM commandLineOptions+  liftCommandM $ TM.setCommandLineOptions $ opts+    { optPragmaOptions =+        (optPragmaOptions opts)+          { optVerbose = Trie.singleton [] 0 }+    }+  command i }+-}+++-- | Run an 'IOTCM' value, catch the exceptions, emit output+--+--   If an error happens the state of 'CommandM' does not change,+--   but stPersistent may change (which contains successfully+--   loaded interfaces for example).++runInteraction :: IOTCM -> CommandM ()+runInteraction (IOTCM current highlighting highlightingMethod cmd)+    = handleNastyErrors+    $ inEmacs+    $ do+        current <- liftIO $ absolute current++        res <- (`catchError` (return . Just)) $ do++            -- Raises an error if the given file is not the one currently+            -- loaded.+            cf <- gets theCurrentFile+            when (not (independent cmd) && Just current /= (fst <$> cf)) $+                liftCommandM $ typeError $ GenericError "Error: First load the file."++            interpret cmd++            cf <- gets theCurrentFile+            when (Just current == (fst <$> cf)) $+                putResponse . Resp_InteractionPoints =<< gets theInteractionPoints+            return Nothing++        maybe (return ()) handleErr res++  where+    inEmacs = liftCommandMT $ withEnv $ initEnv+            { envEmacs              = True+            , envHighlightingLevel  = highlighting+            , envHighlightingMethod = highlightingMethod+            }++    -- | Handle nasty errors like stack space overflow (issue 637)+    -- We assume that the input action handles other kind of errors.+    handleNastyErrors :: CommandM () -> CommandM ()+    handleNastyErrors m = commandMToIO $ \toIO ->+        toIO m `E.catch` (toIO . handleErr . Exception noRange . (show :: E.SomeException -> String))++    -- | Displays an error and instructs Emacs to jump to the site of the+    -- error. Because this function may switch the focus to another file+    -- the status information is also updated.+    handleErr e = do+        s <- liftCommandM $ prettyError e+        x <- liftCommandM . gets $ optShowImplicit . stPragmaOptions+        let+        mapM_ putResponse $+            [ Resp_DisplayInfo $ Info_Error s ] +++            tellEmacsToJumpToError (getRange e) +++            [ Resp_Status $ Status { sChecked = False+                                   , sShowImplicitArguments = x+                                   } ]+++----------------------------------------------------------------------------+-- | An interactive computation.++data Interaction+    -- | @cmd_load m includes@ loads the module in file @m@, using+    -- @includes@ as the include directories.+  = Cmd_load            FilePath [FilePath]++    -- | @cmd_compile b m includes@ compiles the module in file @m@ using+    -- the backend @b@, using @includes@ as the include directories.+  | Cmd_compile         Backend FilePath [FilePath]++  | Cmd_constraints++    -- | Show unsolved metas. If there are no unsolved metas but unsolved constraints+    -- show those instead.+  | Cmd_metas++    -- | Shows all the top-level names in the given module, along with+    -- their types. Uses the top-level scope.+  | Cmd_show_module_contents_toplevel+                        String++  | Cmd_solveAll++    -- | Parse the given expression (as if it were defined at the+    -- top-level of the current module) and infer its type.+  | Cmd_infer_toplevel  B.Rewrite  -- Normalise the type?+                        String+++    -- | Parse and type check the given expression (as if it were defined+    -- at the top-level of the current module) and normalise it.+  | Cmd_compute_toplevel Bool -- Ignore abstract?+                         String++    ------------------------------------------------------------------------+    -- Syntax highlighting++    -- | @cmd_load_highlighting_info source@ loads syntax highlighting+    -- information for the module in @source@, and asks Emacs to apply+    -- highlighting info from this file.+    --+    -- If the module does not exist, or its module name is malformed or+    -- cannot be determined, or the module has not already been visited,+    -- or the cached info is out of date, then no highlighting information+    -- is printed.+    --+    -- This command is used to load syntax highlighting information when a+    -- new file is opened, and it would probably be annoying if jumping to+    -- the definition of an identifier reset the proof state, so this+    -- command tries not to do that. One result of this is that the+    -- command uses the current include directories, whatever they happen+    -- to be.+  | Cmd_load_highlighting_info+                        FilePath++    ------------------------------------------------------------------------+    -- Implicit arguments++    -- | Tells Agda whether or not to show implicit arguments.+  | ShowImplicitArgs    Bool -- Show them?+++    -- | Toggle display of implicit arguments.+  | ToggleImplicitArgs++    ------------------------------------------------------------------------+    -- | Goal commands+    --+    -- If the range is 'noRange', then the string comes from the+    -- minibuffer rather than the goal.++  | Cmd_give            InteractionId Range String++  | Cmd_refine          InteractionId Range String++  | Cmd_intro           Bool InteractionId Range String++  | Cmd_refine_or_intro Bool InteractionId Range String++  | Cmd_auto            InteractionId Range String++  | Cmd_context         B.Rewrite InteractionId Range String++  | Cmd_infer           B.Rewrite InteractionId Range String++  | Cmd_goal_type       B.Rewrite InteractionId Range String++    -- | Displays the current goal and context.+  | Cmd_goal_type_context B.Rewrite InteractionId Range String++    -- | Displays the current goal and context /and/ infers the type of an+    -- expression.+  | Cmd_goal_type_context_infer+                        B.Rewrite InteractionId Range String++    -- | Shows all the top-level names in the given module, along with+    -- their types. Uses the scope of the given goal.+  | Cmd_show_module_contents+                        InteractionId Range String++  | Cmd_make_case       InteractionId Range String++  | Cmd_compute         Bool -- Ignore abstract?+                        InteractionId Range String+        deriving Read++data IOTCM+    = IOTCM+        FilePath+         -- -^ The current file. If this file does not match+         -- 'theCurrentFile, and the 'Interaction' is not+         -- \"independent\", then an error is raised.+        HighlightingLevel+        HighlightingMethod+        Interaction+         -- -^ What to do+            deriving Read++---------------------------------------------------------+-- Read instances+++-- | The 'Parse' monad.+--   'StateT' state holds the remaining input.++type Parse a = ErrorT String (StateT String Identity) a++-- | Converter from the type of 'reads' to 'Parse'+--   The first paramter is part of the error message+--   in case the parse fails.++readsToParse :: String -> (String -> Maybe (a, String)) -> Parse a+readsToParse s f = do+    st <- lift get+    case f st of+        Nothing -> throwError s+        Just (a, st) -> do+            lift $ put st+            return a++parseToReadsPrec :: Parse a -> Int -> String -> [(a, String)]+parseToReadsPrec p i s = case runIdentity . flip runStateT s . runErrorT $ parens' p of+    (Right a, s) -> [(a,s)]+    _ -> []++-- | Demand an exact string.++exact :: String -> Parse ()+exact s = readsToParse (show s) $ fmap (\x -> ((),x)) . stripPrefix s . dropWhile (==' ')++readParse :: Read a => Parse a+readParse = readsToParse "read failed" $ listToMaybe . reads++parens' :: Parse a -> Parse a+parens' p = do+    exact "("+    x <- p+    exact ")"+    return x+  `mplus`+    p++instance Read InteractionId where+    readsPrec = parseToReadsPrec $+        fmap InteractionId readParse++instance Read Range where+    readsPrec = parseToReadsPrec $ do+                exact "Range"+                fmap Range readParse+          `mplus` do+                exact "noRange"+                return noRange++instance Read Interval where+    readsPrec = parseToReadsPrec $ do+        exact "Interval"+        liftM2 Interval readParse readParse++instance Read AbsolutePath where+    readsPrec = parseToReadsPrec $ do+        exact "mkAbsolute"+        fmap mkAbsolute readParse++instance Read Position where+    readsPrec = parseToReadsPrec $ do+        exact "Pn"+        liftM4 Pn readParse readParse readParse readParse++---------------------------------------------------------++-- | Can the command run even if the relevant file has not been loaded+--   into the state?++independent :: Interaction -> Bool+independent (Cmd_load {})    = True+independent (Cmd_compile {}) = True+independent (Cmd_load_highlighting_info {}) = True+independent _                = False++-- | Interpret an interaction++interpret :: Interaction -> CommandM ()++interpret (Cmd_load m includes) =+  cmd_load' m includes True $ \_ -> interpret Cmd_metas++interpret (Cmd_compile b file includes) =+  cmd_load' file includes False $ \(i, mw) -> do+    case mw of+      Nothing -> do+        liftCommandM $ case b of+          MAlonzo -> MAlonzo.compilerMain i+          Epic    -> Epic.compilerMain i+          JS      -> JS.compilerMain i+        display_info $ Info_CompilationOk+      Just w ->+        display_info $ Info_Error $ unlines+          [ "You can only compile modules without unsolved metavariables"+          , "or termination checking problems."+          ]++interpret Cmd_constraints =+    display_info . Info_Constraints . unlines . map show =<< liftCommandM B.getConstraints++interpret Cmd_metas = do -- CL.showMetas []+  ims <- liftCommandM $ B.typesOfVisibleMetas B.AsIs+  -- Show unsolved implicit arguments normalised.+  hms <- liftCommandM $ B.typesOfHiddenMetas B.Normalised+  if not $ null ims && null hms+    then do+      di <- liftCommandM $ forM ims $ \i -> B.withInteractionId (B.outputFormId $ B.OutputForm 0 i) (showATop i)+      dh <- liftCommandM $ mapM showA' hms+      display_info $ Info_AllGoals $ unlines $ di ++ dh+    else do+      cs <- liftCommandM B.getConstraints+      if null cs+        then display_info $ Info_AllGoals ""+        else interpret Cmd_constraints+  where+    metaId (B.OfType i _) = i+    metaId (B.JustType i) = i+    metaId (B.JustSort i) = i+    metaId (B.Assign i e) = i+    metaId _ = __IMPOSSIBLE__+    showA' :: B.OutputConstraint SA.Expr NamedMeta -> TCM String+    showA' m = do+      let i = nmid $ metaId m+      r <- getMetaRange i+      d <- B.withMetaId i (showATop m)+      return $ d ++ "  [ at " ++ show r ++ " ]"++interpret (Cmd_show_module_contents_toplevel s) =+  liftCommandMT B.atTopLevel $ showModuleContents noRange s++interpret Cmd_solveAll = do+  out <- liftCommandM $ mapM lowr =<< B.getSolvedInteractionPoints+  putResponse $ Resp_SolveAll out+  where+      lowr (i, m, e) = do+        mi <- getMetaInfo <$> lookupMeta m+        e <- withMetaInfo mi $ lowerMeta <$> abstractToConcreteCtx TopCtx e+        return (i, e)++interpret (Cmd_infer_toplevel norm s) =+  parseAndDoAtToplevel (B.typeInCurrent norm) Info_InferredType s++interpret (Cmd_compute_toplevel ignore s) =+  parseAndDoAtToplevel (if ignore then ignoreAbstractMode . c+                                  else inConcreteMode . c)+                       Info_NormalForm+                       s+  where c = B.evalInCurrent++interpret (ShowImplicitArgs showImpl) = do+  opts <- liftCommandM commandLineOptions+  setCommandLineOptions' $+    opts { optPragmaOptions =+             (optPragmaOptions opts) { optShowImplicit = showImpl } }++interpret ToggleImplicitArgs = do+  opts <- liftCommandM commandLineOptions+  let ps = optPragmaOptions opts+  setCommandLineOptions' $+    opts { optPragmaOptions =+             ps { optShowImplicit = not $ optShowImplicit ps } }++interpret (Cmd_load_highlighting_info source) = do+    -- Make sure that the include directories have+    -- been set.+    setCommandLineOptions' =<< liftCommandM commandLineOptions++    resp <- liftCommandM $ liftIO . tellToUpdateHighlighting =<< do+      ex <- liftIO $ doesFileExist source+      case ex of+        False -> return Nothing+        True  -> do+          mmi <- (getVisitedModule =<<+                    moduleName =<< liftIO (absolute source))+                   `catchError`+                 \_ -> return Nothing+          case mmi of+            Nothing -> return Nothing+            Just mi -> do+              sourceT <- liftIO $ getModificationTime source+              if sourceT <= miTimeStamp mi+               then do+                modFile <- gets stModuleToSource+                return $ Just (iHighlighting $ miInterface mi, modFile)+               else+                return Nothing+    mapM_ putResponse resp++interpret (Cmd_give ii rng s) = give_gen ii rng s B.give $ \rng s ce ->+  case ce of+    ce | rng == noRange -> Give_String $ show ce+    SC.Paren _ _ -> Give_Paren+    _            -> Give_NoParen++interpret (Cmd_refine ii rng s) = give_gen ii rng s B.refine $ \_ s -> Give_String . show++interpret (Cmd_intro pmLambda ii rng _) = do+  ss <- liftCommandM $ B.introTactic pmLambda ii+  liftCommandMT (B.withInteractionId ii) $ case ss of+    []    -> do+      display_info $ Info_Intro $ text "No introduction forms found."+    [s]   -> do+      interpret $ Cmd_refine ii rng s+    _:_:_ -> do+      display_info $ Info_Intro $+        sep [ text "Don't know which constructor to introduce of"+            , let mkOr []     = []+                  mkOr [x, y] = [text x <+> text "or" <+> text y]+                  mkOr (x:xs) = text x : mkOr xs+              in nest 2 $ fsep $ punctuate comma (mkOr ss)+            ]++interpret (Cmd_refine_or_intro pmLambda ii r s) = interpret $+  (if null s then Cmd_intro pmLambda else Cmd_refine) ii r s++interpret (Cmd_auto ii rng s) = do+  (res, msg) <- liftCommandM $ Auto.auto ii rng s+  case res of+   Left xs -> do+    forM_ xs $ \(ii, s) -> do+      modify $ \st -> st { theInteractionPoints = filter (/= ii) (theInteractionPoints st) }+      putResponse $ Resp_GiveAction ii $ Give_String s+    case msg of+     Nothing -> interpret Cmd_metas+     Just msg -> display_info $ Info_Auto msg+   Right (Left cs) -> do+    case msg of+     Nothing -> return ()+     Just msg -> display_info $ Info_Auto msg+    putResponse $ Resp_MakeCaseAction cs+   Right (Right s) -> give_gen' B.refine (\_ s -> Give_String . show) ii rng s++interpret (Cmd_context norm ii _ _) =+  display_info . Info_Context =<< liftCommandM (prettyContext norm False ii)++interpret (Cmd_infer norm ii rng s) =+  display_info . Info_InferredType+    =<< liftCommandM (B.withInteractionId ii+          (prettyATop =<< B.typeInMeta ii norm =<< B.parseExprIn ii rng s))++interpret (Cmd_goal_type norm ii _ _) =+  display_info . Info_CurrentGoal+    =<< liftCommandM (B.withInteractionId ii $ prettyTypeOfMeta norm ii)++interpret (Cmd_goal_type_context norm ii rng s) =+  cmd_goal_type_context_and empty norm ii rng s++interpret (Cmd_goal_type_context_infer norm ii rng s) = do+  typ <- liftCommandM $ B.withInteractionId ii $+           prettyATop =<< B.typeInMeta ii norm =<< B.parseExprIn ii rng s+  cmd_goal_type_context_and (text "Have:" <+> typ) norm ii rng s++interpret (Cmd_show_module_contents ii rng s) =+  liftCommandMT (B.withInteractionId ii) $ showModuleContents rng s++interpret (Cmd_make_case ii rng s) = do+  (casectxt , cs) <- liftCommandM $ makeCase ii rng s+  liftCommandMT (B.withInteractionId ii) $ do+    hidden <- liftCommandM $ showImplicitArguments+    pcs <- liftCommandM $ mapM prettyA $ List.map (extlam_dropLLifted casectxt hidden) cs+    putResponse $ Resp_MakeCase (emacscmd casectxt) (List.map (extlam_dropName casectxt . render) pcs)+  where+    render = renderStyle (style { mode = OneLineMode })++    emacscmd :: CaseContext -> String+    emacscmd FunctionDef = "agda2-make-case-action"+    emacscmd (ExtendedLambda _ _) = "agda2-make-case-action-extendlam"++    -- very dirty hack, string manipulation by dropping the function name+    -- and replacing " = " with " -> "+    extlam_dropName :: CaseContext -> String -> String+    extlam_dropName FunctionDef x = x+    extlam_dropName (ExtendedLambda _ _) x+        = unwords $ map (\ y -> if y == "=" then "→" else y) $ drop 1 $ words x++    -- Drops pattern added to extended lambda functions when lambda lifting them+    extlam_dropLLifted :: CaseContext -> Bool -> SA.Clause -> SA.Clause+    extlam_dropLLifted FunctionDef _ x = x+    extlam_dropLLifted (ExtendedLambda h nh) hidden (SA.Clause (SA.LHS info (SA.LHSProj{}) ps) rhs decl) = __IMPOSSIBLE__+    extlam_dropLLifted (ExtendedLambda h nh) hidden (SA.Clause (SA.LHS info (SA.LHSHead name nps) ps) rhs decl)+      = let n = if hidden then h + nh else nh+        in+         (SA.Clause (SA.LHS info (SA.LHSHead name (drop n nps)) ps) rhs decl)++interpret (Cmd_compute ignore ii rng s) = do+  e <- liftCommandM $ B.parseExprIn ii rng s+  d <- liftCommandM $ B.withInteractionId ii $ do+         let c = B.evalInCurrent e+         v <- if ignore then ignoreAbstractMode c else c+         prettyATop v+  display_info $ Info_NormalForm d++type GoalCommand = InteractionId -> Range -> String -> Interaction++-- | @cmd_load' m includes cmd cmd2@ loads the module in file @m@,+-- using @includes@ as the include directories.+--+-- If type checking completes without any exceptions having been+-- encountered then the command @cmd r@ is executed, where @r@ is the+-- result of 'Imp.typeCheck'.++cmd_load' :: FilePath -> [FilePath]+          -> Bool -- ^ Allow unsolved meta-variables?+          -> ((Interface, Maybe Warnings) -> CommandM ())+          -> CommandM ()+cmd_load' file includes unsolvedOK cmd = do+    f <- liftIO $ absolute file+    ex <- liftIO $ doesFileExist $ filePath f+    liftCommandM $ setIncludeDirs includes $+      if ex then ProjectRoot f else CurrentDir++    -- Forget the previous "current file" and interaction points.+    modify $ \st -> st { theInteractionPoints = []+                       , theCurrentFile       = Nothing+                       }++    t <- liftIO $ getModificationTime file++    -- All options (except for the verbosity setting) are reset when a+    -- file is reloaded, including the choice of whether or not to+    -- display implicit arguments. (At this point the include+    -- directories have already been set, so they are preserved.)+    opts <- liftCommandM $ commandLineOptions+    defaultOptions <- gets optionsOnReload+    setCommandLineOptions' $+      defaultOptions { optIncludeDirs   = optIncludeDirs opts+                     , optPragmaOptions =+                         (optPragmaOptions defaultOptions)+                           { optAllowUnsolved = unsolvedOK+                           , optVerbose       = optVerbose (optPragmaOptions opts)+                           }+                     }++    -- Reset the state, preserving options and decoded modules. Note+    -- that if the include directories have changed, then the decoded+    -- modules are reset when cmd_load' is run by ioTCM.+    liftCommandM resetState++    -- Clear the info buffer to make room for information about which+    -- module is currently being type-checked.+    putResponse Resp_ClearRunningInfo++    -- Remove any prior syntax highlighting.+    putResponse Resp_ClearHighlighting++    ok <- liftCommandM $ Imp.typeCheck f++    -- The module type checked. If the file was not changed while the+    -- type checker was running then the interaction points and the+    -- "current file" are stored.+    t' <- liftIO $ getModificationTime file+    when (t == t') $ do+      is <- liftCommandM $ sortInteractionPoints =<< getInteractionPoints+      modify $ \st -> st { theInteractionPoints = is+                         , theCurrentFile       = Just (f, t)+                         }++    cmd ok++    liftIO System.performGC++-- | Available backends.++data Backend = MAlonzo | Epic | JS+    deriving (Show, Read)+++give_gen ii rng s give_ref mk_newtxt =+  give_gen' give_ref mk_newtxt ii rng s++give_gen' give_ref mk_newtxt ii rng s = do+  scope     <- liftCommandM $ getInteractionScope ii+  (ae, iis) <- liftCommandM $ give_ref ii Nothing =<< B.parseExprIn ii rng s+  iis       <- liftCommandM $ sortInteractionPoints iis+  modify $ \st -> st { theInteractionPoints =+                           replace ii iis (theInteractionPoints st) }+  putResponse $ Resp_GiveAction ii $ mk_newtxt rng s $ abstractToConcrete (makeEnv scope) ae+  interpret Cmd_metas+  where+  -- Substitutes xs for x in ys.+  replace x xs ys = concatMap (\y -> if y == x then xs else [y]) ys++-- | Sorts interaction points based on their ranges.++sortInteractionPoints :: [InteractionId] -> TCM [InteractionId]+sortInteractionPoints is =+  map fst . sortBy (compare `on` snd) <$>+    mapM (\i -> (,) i <$> getInteractionRange i) is++-- | Pretty-prints the type of the meta-variable.++prettyTypeOfMeta :: B.Rewrite -> InteractionId -> TCM Doc+prettyTypeOfMeta norm ii = do+  form <- B.typeOfMeta norm ii+  case form of+    B.OfType _ e -> prettyATop e+    _            -> text <$> showATop form++-- | Pretty-prints the context of the given meta-variable.++prettyContext+  :: B.Rewrite      -- ^ Normalise?+  -> Bool           -- ^ Print the elements in reverse order?+  -> InteractionId+  -> TCM Doc+prettyContext norm rev ii = B.withInteractionId ii $ do+  ctx <- B.contextOfMeta ii norm+  es  <- mapM (prettyATop . B.ofExpr) ctx+  ns  <- mapM (showATop   . B.ofName) ctx+  let shuffle = if rev then reverse else id+  return $ align 10 $ filter (not . null. fst) $ shuffle $ zip ns (map (text ":" <+>) es)++-- | Displays the current goal, the given document, and the current+-- context.++cmd_goal_type_context_and doc norm ii _ _ = do+  goal <- liftCommandM $ B.withInteractionId ii $ prettyTypeOfMeta norm ii+  ctx  <- liftCommandM $ prettyContext norm True ii+  display_info $ Info_GoalType+                (text "Goal:" <+> goal $+$+                 doc $+$+                 text (replicate 60 '\x2014') $+$+                 ctx)++-- | Shows all the top-level names in the given module, along with+-- their types.++showModuleContents :: Range -> String -> CommandM ()+showModuleContents rng s = do+  (modules, types) <- liftCommandM $ B.moduleContents rng s+  types' <- liftCommandM $ mapM (\(x, t) -> do+                    t <- prettyTCM t+                    return (show x, text ":" <+> t))+                 types+  display_info $ Info_ModuleContents $+    text "Modules" $$+    nest 2 (vcat $ map (text . show) modules) $$+    text "Names" $$+    nest 2 (align 10 types')++-- | Sets the command line options and updates the status information.++setCommandLineOptions' :: CommandLineOptions -> CommandM ()+setCommandLineOptions' opts = do+    liftCommandM $ TM.setCommandLineOptions opts+    displayStatus+++-- | Computes some status information.++status :: CommandM Status+status = do+  cf <- gets theCurrentFile+  showImpl <- liftCommandM showImplicitArguments++  -- Check if the file was successfully type checked, and has not+  -- changed since. Note: This code does not check if any dependencies+  -- have changed, and uses a time stamp to check for changes.+  checked  <- liftCommandM $ case cf of+    Nothing     -> return False+    Just (f, t) -> do+      t' <- liftIO $ getModificationTime $ filePath f+      case t == t' of+        False -> return False+        True  ->+          not . miWarnings . maybe __IMPOSSIBLE__ id <$>+            (getVisitedModule =<<+               maybe __IMPOSSIBLE__ id .+                 Map.lookup f <$> sourceToModule)++  return $ Status { sShowImplicitArguments = showImpl+                  , sChecked               = checked+                  }++-- | Displays\/updates status information.++displayStatus :: CommandM ()+displayStatus =+  putResponse . Resp_Status  =<< status++-- | @display_info@ does what @'display_info'' False@ does, but+-- additionally displays some status information (see 'status' and+-- 'displayStatus').++display_info :: DisplayInfo -> CommandM ()+display_info info = do+  displayStatus+  putResponse $ Resp_DisplayInfo info++takenNameStr :: TCM [String]+takenNameStr = do+  xss <- sequence [ List.map (fst . unDom) <$> getContext+                  , Map.keys <$> asks envLetBindings+                  , List.map qnameName . HMap.keys . sigDefinitions <$> getSignature+		  ]+  return $ concat [ parts $ nameConcrete x | x <- concat xss]+  where+    parts x = [ s | Id s <- nameParts x ]++refreshStr :: [String] -> String -> ([String], String)+refreshStr taken s = go nameModifiers where+  go (m:mods) = let s' = s ++ m in+                if s' `elem` taken then go mods else (s':taken, s')+  go _        = __IMPOSSIBLE__++nameModifiers = "" : "'" : "''" : [show i | i <-[3..]]+++class LowerMeta a where lowerMeta :: a -> a+instance LowerMeta SC.Expr where+  lowerMeta = go where+    go e = case e of+      Ident _              -> e+      SC.Lit _             -> e+      SC.QuestionMark _ _  -> preMeta+      SC.Underscore _ _    -> preUscore+      SC.App r e1 ae2      -> case appView e of+        SC.AppView (SC.QuestionMark _ _) _ -> preMeta+        SC.AppView (SC.Underscore   _ _) _ -> preUscore+        _ -> SC.App r (go e1) (lowerMeta ae2)+      SC.WithApp r e es	   -> SC.WithApp r (lowerMeta e) (lowerMeta es)+      SC.Lam r bs e1       -> SC.Lam r (lowerMeta bs) (go e1)+      SC.AbsurdLam r h     -> SC.AbsurdLam r h+      SC.ExtendedLam r cs  -> SC.ExtendedLam r cs+      SC.Fun r ae1 e2      -> SC.Fun r (lowerMeta ae1) (go e2)+      SC.Pi tb e1          -> SC.Pi (lowerMeta tb) (go e1)+      SC.Set _             -> e+      SC.Prop _            -> e+      SC.SetN _ _          -> e+      SC.ETel tel          -> SC.ETel (lowerMeta tel)+      SC.Let r ds e1       -> SC.Let r (lowerMeta ds) (go e1)+      Paren r e1           -> case go e1 of+        q@(SC.QuestionMark _ Nothing) -> q+        e2                            -> Paren r e2+      Absurd _          -> e+      As r n e1         -> As r n (go e1)+      SC.Dot r e	-> SC.Dot r (go e)+      SC.RawApp r es	-> SC.RawApp r (lowerMeta es)+      SC.OpApp r x es	-> SC.OpApp r x (lowerMeta es)+      SC.Rec r fs	-> SC.Rec r (List.map (id -*- lowerMeta) fs)+      SC.RecUpdate r e fs -> SC.RecUpdate r (lowerMeta e) (List.map (id -*- lowerMeta) fs)+      SC.HiddenArg r e	-> SC.HiddenArg r (lowerMeta e)+      SC.InstanceArg r e  -> SC.InstanceArg r (lowerMeta e)+      SC.QuoteGoal r x e  -> SC.QuoteGoal r x (lowerMeta e)+      e@SC.Quote{}      -> e+      e@SC.QuoteTerm{}  -> e+      e@SC.Unquote{}    -> e+      SC.DontCare e     -> SC.DontCare (lowerMeta e)++instance LowerMeta (OpApp SC.Expr) where+  lowerMeta (Ordinary e) = Ordinary $ lowerMeta e+  lowerMeta (SyntaxBindingLambda r bs e) = SyntaxBindingLambda r (lowerMeta bs) (lowerMeta e)++instance LowerMeta SC.LamBinding where+  lowerMeta b@(SC.DomainFree _ _ _) = b+  lowerMeta (SC.DomainFull tb)    = SC.DomainFull (lowerMeta tb)++instance LowerMeta SC.TypedBindings where+  lowerMeta (SC.TypedBindings r bs) = SC.TypedBindings r (lowerMeta bs)++instance LowerMeta SC.TypedBinding where+  lowerMeta (SC.TBind r ns e) = SC.TBind r ns (lowerMeta e)+  lowerMeta (SC.TNoBind e)    = SC.TNoBind (lowerMeta e)++instance LowerMeta SC.RHS where+    lowerMeta (SC.RHS e)    = SC.RHS (lowerMeta e)+    lowerMeta  SC.AbsurdRHS = SC.AbsurdRHS++instance LowerMeta (Maybe SC.Expr) where+    lowerMeta (Just e) = Just (lowerMeta e)+    lowerMeta Nothing  = Nothing++instance LowerMeta SC.Declaration where+  lowerMeta = go where+    go d = case d of+      TypeSig rel n e1              -> TypeSig rel n (lowerMeta e1)+      SC.Field n e1                 -> SC.Field n (lowerMeta e1)+      FunClause lhs rhs whcl        -> FunClause lhs (lowerMeta rhs) (lowerMeta whcl)+      SC.DataSig r ind n tel e1     -> SC.DataSig r ind n+                                         (lowerMeta tel) (lowerMeta e1)+      Data r ind n tel e1 cs        -> Data r ind n+                                         (lowerMeta tel) (lowerMeta e1) (lowerMeta cs)+      SC.RecordSig r n tel e1       -> SC.RecordSig r n+                                         (lowerMeta tel) (lowerMeta e1)+      SC.Record r n ind c tel e1 cs  -> SC.Record r n ind c+                                         (lowerMeta tel) (lowerMeta e1) (lowerMeta cs)+      Infix _ _                     -> d+      Syntax _ _                    -> d+      SC.PatternSyn _ _ _ _         -> d+      SC.Mutual r ds                -> SC.Mutual r (lowerMeta ds)+      Abstract r ds                 -> Abstract r (lowerMeta ds)+      Private r ds                  -> Private r (lowerMeta ds)+      Postulate r sigs              -> Postulate r (lowerMeta sigs)+      SC.Primitive r sigs           -> SC.Primitive r (lowerMeta sigs)+      SC.Open _ _ _                 -> d+      SC.Import _ _ _ _ _           -> d+      SC.Pragma _                   -> d+      ModuleMacro r n modapp op dir -> ModuleMacro r n+                                         (lowerMeta modapp) op dir+      SC.Module r qn tel ds         -> SC.Module r qn (lowerMeta tel) (lowerMeta ds)++instance LowerMeta SC.ModuleApplication where+  lowerMeta (SC.SectionApp r tel e) = SC.SectionApp r (lowerMeta tel) (lowerMeta e)+  lowerMeta (SC.RecordModuleIFS r rec) = SC.RecordModuleIFS r rec++instance LowerMeta SC.WhereClause where+  lowerMeta SC.NoWhere		= SC.NoWhere+  lowerMeta (SC.AnyWhere ds)	= SC.AnyWhere $ lowerMeta ds+  lowerMeta (SC.SomeWhere m ds) = SC.SomeWhere m $ lowerMeta ds++instance LowerMeta a => LowerMeta [a] where+  lowerMeta as = List.map lowerMeta as++instance LowerMeta a => LowerMeta (Arg a) where+  lowerMeta aa = fmap lowerMeta aa++instance LowerMeta a => LowerMeta (Named name a) where+  lowerMeta aa = fmap lowerMeta aa+++preMeta   = SC.QuestionMark noRange Nothing+preUscore = SC.Underscore   noRange Nothing++-- | Parses and scope checks an expression (using the \"inside scope\"+-- as the scope), performs the given command with the expression as+-- input, and displays the result.++parseAndDoAtToplevel+  :: (SA.Expr -> TCM SA.Expr)+     -- ^ The command to perform.+  -> (Doc -> DisplayInfo)+     -- ^ The name to use for the buffer displaying the output.+  -> String+     -- ^ The expression to parse.+  -> CommandM ()+parseAndDoAtToplevel cmd title s = do+  e <- liftIO $ parse exprParser s+  display_info . title =<<+    liftCommandM (B.atTopLevel $ prettyA =<< cmd =<< concreteToAbstract_ e)++-- | Tell to highlight the code using the given highlighting+-- info (unless it is @Nothing@).++tellToUpdateHighlighting+  :: Maybe (HighlightingInfo, ModuleToSource) -> IO [Response]+tellToUpdateHighlighting Nothing                = return []+tellToUpdateHighlighting (Just (info, modFile)) =+  return [Resp_HighlightingInfo info modFile]++-- | Tells the Emacs mode to go to the first error position (if any).++tellEmacsToJumpToError :: Range -> [Response]+tellEmacsToJumpToError r =+  case rStart r of+    Nothing                                    -> []+    Just (Pn { srcFile = Nothing })            -> []+    Just (Pn { srcFile = Just f, posPos = p }) ->+       [ Resp_JumpToError (filePath f) p ]
src/full/Agda/Interaction/MakeCase.hs view
@@ -6,6 +6,7 @@ import Control.Applicative import Control.Monad hiding (mapM, mapM_) import Control.Monad.State hiding (mapM, mapM_)+import Data.Maybe import qualified Data.Map as Map import Data.Traversable import Data.List@@ -32,6 +33,7 @@  import Agda.Utils.Size import Agda.Utils.Permutation+import qualified Agda.Utils.HashMap as HMap  #include "../undefined.h" import Agda.Utils.Impossible@@ -52,7 +54,7 @@ findClause m = do   sig <- getImportedSignature   let res = do-        def <- Map.elems $ sigDefinitions sig+        def <- HMap.elems $ sigDefinitions sig         Function{funClauses = cs} <- [theDef def]         c <- cs         unless (rhsIsm $ clauseBody c) []@@ -64,7 +66,7 @@         , text "expected rhs to be meta var" <+> (text $ show m)         , text "but could not find it in the signature"         ]-      reportSDoc "interaction.case" 20 $ vcat $ map (text . show) (Map.elems $ sigDefinitions sig)  -- you asked for it!+      reportSDoc "interaction.case" 100 $ vcat $ map (text . show) (HMap.elems $ sigDefinitions sig)  -- you asked for it!       typeError $ GenericError "Right hand side must be a single hole when making a case distinction."     [(n,c)] | isPrefixOf extendlambdaname $ show $ A.qnameName n -> do                                                Just (h , nh) <- Map.lookup n <$> getExtLambdaTele@@ -74,7 +76,7 @@   where     rhsIsm (Bind b)   = rhsIsm $ unAbs b     rhsIsm NoBody     = False-    rhsIsm (Body e)   = case e of+    rhsIsm (Body e)   = case ignoreSharing e of       MetaV m' _  -> m == m'       _           -> False @@ -92,15 +94,46 @@       , text "ps      =" <+> text (show ps)       ]     ]-  var         <- deBruijnIndex =<< parseExprIn hole rng s-  z           <- splitClauseWithAbs clause var-  (case z of-    Left err        -> typeError . GenericError . show =<< prettyTCM err-    Right (Left cl) -> ((:[]) <$> makeAbsurdClause f cl)-    Right (Right c) -> (mapM (makeAbstractClause f) c)) >>= (\ x -> return (casectxt , x))+  vars <- mapM (\s -> deBruijnIndex =<< parseExprIn hole rng s) $ words s+  (,) casectxt <$> split f vars clause+  where+  split :: QName -> [Nat] -> Clause -> TCM [A.Clause]+  split f [] clause =+    (:[]) <$> makeAbstractClause f (clauseToSplitClause clause)+  split f (var : vars) clause = do+    z <- splitClauseWithAbs clause var+    case z of+      Left err          -> typeError . GenericError . show =<<+                             prettyTCM err+      Right (Left cl)   -> (:[]) <$> makeAbsurdClause f cl+      Right (Right cov)+        | null vars -> mapM (makeAbstractClause f) $ splitClauses cov+        | otherwise -> concat <$> do+            mapM (\cl -> split f (mapMaybe (newVar cl) vars)+                                 (splitClauseToClause cl))+                 $ splitClauses cov+    where+    -- Note that the body of the created clause is the body of the+    -- argument to split.+    splitClauseToClause :: SplitClause -> Clause+    splitClauseToClause c = Clause+      { clauseRange = noRange+      , clauseTel   = scTel c+      , clausePerm  = scPerm c+      , clausePats  = scPats c+      , clauseBody  = clauseBody clause+      } +  -- Finds the new variable corresponding to an old one, if any.+  newVar :: SplitClause -> Nat -> Maybe Nat+  newVar c x = case ignoreSharing $ applySubst (scSubst c) (Var x []) of+    Var x [] -> Just x+    _        -> Nothing++  -- NOTE: clauseToSplitClause moved to Coverage.hs+ makeAbsurdClause :: QName -> SplitClause -> TCM A.Clause-makeAbsurdClause f (SClause tel perm ps _) = do+makeAbsurdClause f (SClause tel perm ps _ _) = do   reportSDoc "interaction.case" 10 $ vcat     [ text "Interaction.MakeCase.makeCase: split clause:"     , nest 2 $ vcat@@ -113,17 +146,16 @@   withCurrentModule (qnameModule f) $ do     -- Normalise the dot patterns     ps <- addCtxTel tel $ normalise ps-    inContext [] $ reify $ NamedClause f $ Clause noRange tel perm ps NoBody+    inContext [] $ reify $ QNamed f $ Clause noRange tel perm ps NoBody +-- | Make a clause with a question mark as rhs. makeAbstractClause :: QName -> SplitClause -> TCM A.Clause makeAbstractClause f cl = do   A.Clause lhs _ _ <- makeAbsurdClause f cl   return $ mkClause lhs   where     mkClause :: A.LHS -> A.Clause-    mkClause lhs = A.Clause lhs (A.RHS $ A.QuestionMark info) []-      where-        info = A.MetaInfo noRange emptyScopeInfo Nothing+    mkClause lhs = A.Clause lhs (A.RHS $ A.QuestionMark A.emptyMetaInfo) []  deBruijnIndex :: A.Expr -> TCM Nat deBruijnIndex e = do@@ -131,7 +163,7 @@ --            Context.wakeIrrelevantVars $             applyRelevanceToContext Irrelevant $               inferExpr e-  case v of+  case ignoreSharing v of     Var n _ -> return n     _       -> typeError . GenericError . show =<< (fsep $                 pwords "The scrutinee of a case distinction must be a variable,"
src/full/Agda/Interaction/Options.hs view
@@ -11,6 +11,7 @@     , parsePragmaOptions     , parsePluginOptions     , defaultOptions+    , defaultInteractionOptions     , defaultVerbosity     , standardOptions_     , unsafePragmaOptions@@ -49,24 +50,27 @@  data CommandLineOptions =     Options { optProgramName          :: String-	    , optInputFile            :: Maybe FilePath-	    , optIncludeDirs          :: Either [FilePath] [AbsolutePath]+            , optInputFile            :: Maybe FilePath+            , optIncludeDirs          :: Either [FilePath] [AbsolutePath]               -- ^ 'Left' is used temporarily, before the paths have               -- been made absolute. An empty 'Left' list is               -- interpreted as @["."]@ (see               -- 'Agda.TypeChecking.Monad.Options.makeIncludeDirsAbsolute').-	    , optShowVersion          :: Bool-	    , optShowHelp             :: Bool-	    , optInteractive          :: Bool-	    , optRunTests             :: Bool-	    , optCompile              :: Bool-	    , optEpicCompile          :: Bool-	    , optJSCompile            :: Bool+            , optShowVersion          :: Bool+            , optShowHelp             :: Bool+            , optInteractive          :: Bool+            , optRunTests             :: Bool+            , optGHCiInteraction      :: Bool+            , optCompile              :: Bool+            , optEpicCompile          :: Bool+            , optJSCompile            :: Bool             , optCompileDir           :: Maybe FilePath               -- ^ In the absence of a path the project root is used. 	    , optGenerateVimFile      :: Bool+            , optGenerateLaTeX        :: Bool 	    , optGenerateHTML         :: Bool 	    , optDependencyGraph      :: Maybe FilePath+	    , optLaTeXDir             :: FilePath 	    , optHTMLDir              :: FilePath 	    , optCSSFile              :: Maybe FilePath 	    , optIgnoreInterfaces     :: Bool@@ -82,6 +86,7 @@  data PragmaOptions = PragmaOptions   { optShowImplicit              :: Bool+  , optShowIrrelevant            :: Bool   , optVerbose                   :: Verbosity   , optProofIrrelevance          :: Bool   , optAllowUnsolved             :: Bool@@ -97,6 +102,7 @@   , optIrrelevantProjections     :: Bool   , optExperimentalIrrelevance   :: Bool  -- ^ irrelevant levels, irrelevant data matching   , optWithoutK                  :: Bool+  , optCopatterns                :: Bool  -- ^ definitions by copattern matching   }   deriving Show @@ -112,25 +118,38 @@ mapFlag :: (String -> String) -> OptDescr a -> OptDescr a mapFlag f (Option _ long arg descr) = Option [] (map f long) arg descr +-- | For batch usage. defaultVerbosity :: Verbosity defaultVerbosity = Trie.singleton [] 1 +-- | For interactive usage, do not print any debug messages+--   by default.+defaultInteractionVerbosity :: Verbosity+defaultInteractionVerbosity = Trie.singleton [] 0++defaultInteractionOptions :: PragmaOptions+defaultInteractionOptions = defaultPragmaOptions+  { optVerbose = defaultInteractionVerbosity }+ defaultOptions :: CommandLineOptions defaultOptions =     Options { optProgramName          = "agda"-	    , optInputFile            = Nothing-	    , optIncludeDirs          = Left []-	    , optShowVersion          = False-	    , optShowHelp             = False-	    , optInteractive          = False-	    , optRunTests             = False-	    , optCompile              = False-	    , optEpicCompile          = False-	    , optJSCompile            = False+            , optInputFile            = Nothing+            , optIncludeDirs          = Left []+            , optShowVersion          = False+            , optShowHelp             = False+            , optInteractive          = False+            , optRunTests             = False+            , optGHCiInteraction      = False+            , optCompile              = False+            , optEpicCompile          = False+            , optJSCompile            = False             , optCompileDir           = Nothing 	    , optGenerateVimFile      = False+            , optGenerateLaTeX        = False 	    , optGenerateHTML         = False 	    , optDependencyGraph      = Nothing+	    , optLaTeXDir             = defaultLaTeXDir 	    , optHTMLDir              = defaultHTMLDir 	    , optCSSFile              = Nothing 	    , optIgnoreInterfaces     = False@@ -139,11 +158,12 @@             , optPragmaOptions        = defaultPragmaOptions             , optEpicFlags            = []             , optSafe                 = False-	    }+            }  defaultPragmaOptions :: PragmaOptions defaultPragmaOptions = PragmaOptions   { optShowImplicit              = False+  , optShowIrrelevant            = False   , optVerbose                   = defaultVerbosity   , optProofIrrelevance          = False   , optExperimentalIrrelevance   = False@@ -159,8 +179,13 @@   , optGuardingTypeConstructors  = False   , optUniversePolymorphism      = True   , optWithoutK                  = False+  , optCopatterns                = False   } +-- | The default output directory for LaTeX.++defaultLaTeXDir = "latex"+ -- | The default output directory for HTML.  defaultHTMLDir = "html"@@ -181,16 +206,20 @@ checkOpts opts   | not (atMostOne [optAllowUnsolved . p, optCompile]) = Left       "Unsolved meta variables are not allowed when compiling.\n"-  | not (atMostOne [optInteractive, optCompile, optEpicCompile, optJSCompile]) =-      Left "Choose at most one: compiler/interactive mode.\n"-  | not (atMostOne [optGenerateHTML, optInteractive]) =-      Left "Choose at most one: HTML generator or interactive mode.\n"-  | not (atMostOne [isJust . optDependencyGraph, optInteractive]) =-      Left "Choose at most one: Dependency graph generator or interactive mode.\n"+  | not (atMostOne [optGHCiInteraction, isJust . optInputFile]) =+      Left "Choose at most one: input file or --interaction.\n"+  | not (atMostOne $ interactive ++ [optCompile, optEpicCompile, optJSCompile]) =+      Left "Choose at most one: compilers/--interactive/--interaction.\n"+  | not (atMostOne $ interactive ++ [optGenerateHTML]) =+      Left "Choose at most one: --html/--interactive/--interaction.\n"+  | not (atMostOne $ interactive ++ [isJust . optDependencyGraph]) =+      Left "Choose at most one: --dependency-graph/--interactive/--interaction.\n"   | not (atMostOne [ optUniversePolymorphism . p                    , not . optUniverseCheck . p                    ]) =       Left "Cannot have both universe polymorphism and type in type.\n"+  | not (atMostOne $ interactive ++ [optGenerateLaTeX]) =+      Left "Choose at most one: --latex/--interactive/--interaction.\n"   | (not . null . optEpicFlags $ opts)       && not (optEpicCompile opts) =       Left "Cannot set Epic flags without using the Epic backend.\n"@@ -200,6 +229,8 @@    p = optPragmaOptions +  interactive = [optInteractive, optGHCiInteraction]+ -- Check for unsafe pramas. Gives a list of used unsafe flags.  unsafePragmaOptions :: PragmaOptions -> [String]@@ -212,7 +243,8 @@   [ "--sized-types"                              | optSizedTypes opts                ] ++   [ "--injective-type-constructors"              | optInjectiveTypeConstructors opts ] ++   [ "--guardedness-preserving-type-constructors" | optGuardingTypeConstructors opts  ] ++-  [ "--experimental-irrelevance"                 | optExperimentalIrrelevance opts   ]+  [ "--experimental-irrelevance"                 | optExperimentalIrrelevance opts   ] +++  [ "--copatterns"                               | optCopatterns opts   ]  -- The default pragma options should be considered safe @@ -220,15 +252,15 @@ defaultPragmaOptionsSafe     | null unsafe = return True     | otherwise   = do putStrLn $ "Following pragmas are default but not safe: "-                                  ++ intercalate ", " unsafe+                                        ++ intercalate ", " unsafe                        return False   where unsafe = unsafePragmaOptions defaultPragmaOptions  inputFlag :: FilePath -> Flag CommandLineOptions inputFlag f o =     case optInputFile o of-	Nothing  -> return $ o { optInputFile = Just f }-	Just _	 -> throwError "only one input file allowed"+        Nothing  -> return $ o { optInputFile = Just f }+        Just _   -> throwError "only one input file allowed"  versionFlag                  o = return $ o { optShowVersion               = True  } helpFlag                     o = return $ o { optShowHelp                  = True  }@@ -239,8 +271,12 @@ ignoreInterfacesFlag         o = return $ o { optIgnoreInterfaces          = True  } allowUnsolvedFlag            o = return $ o { optAllowUnsolved             = True  } showImplicitFlag             o = return $ o { optShowImplicit              = True  }+showIrrelevantFlag           o = return $ o { optShowIrrelevant            = True  } runTestsFlag                 o = return $ o { optRunTests                  = True  }+ghciInteractionFlag          o = return $ o { optGHCiInteraction           = True  } vimFlag                      o = return $ o { optGenerateVimFile           = True  }+latexFlag                    o = return $ o { optGenerateLaTeX             = True  }+latexDirFlag               d o = return $ o { optLaTeXDir                  = d     } noPositivityFlag             o = return $ o { optDisablePositivity         = True  } dontTerminationCheckFlag     o = return $ o { optTerminationCheck          = False } dontCompletenessCheckFlag    o = return $ o { optCompletenessCheck         = False }@@ -253,11 +289,12 @@ noUniversePolymorphismFlag   o = return $ o { optUniversePolymorphism      = False } noForcingFlag                o = return $ o { optForcing                   = False } withoutKFlag                 o = return $ o { optWithoutK                  = True  }+copatternsFlag               o = return $ o { optCopatterns                = True  }  interactiveFlag  o = return $ o { optInteractive    = True                                 , optPragmaOptions  = (optPragmaOptions o)                                                         { optAllowUnsolved = True }-		                }+                                } compileFlag      o = return $ o { optCompile    = True } compileEpicFlag  o = return $ o { optEpicCompile = True} compileJSFlag    o = return $ o { optJSCompile = True}@@ -274,8 +311,8 @@   where ds = either id (const []) $ optIncludeDirs o  verboseFlag s o =-    do	(k,n) <- parseVerbose s-	return $ o { optVerbose = Trie.insert k n $ optVerbose o }+    do  (k,n) <- parseVerbose s+        return $ o { optVerbose = Trie.insert k n $ optVerbose o }   where     parseVerbose s = case wordsBy (`elem` ":.") s of       []  -> usage@@ -293,14 +330,16 @@ integerArgument :: String -> String -> Either String Int integerArgument flag s =     readM s `catchError` \_ ->-	throwError $ "option '" ++ flag ++ "' requires an integer argument"+        throwError $ "option '" ++ flag ++ "' requires an integer argument"  standardOptions :: [OptDescr (Flag CommandLineOptions)] standardOptions =-    [ Option ['V']  ["version"]	(NoArg versionFlag) "show version number"-    , Option ['?']  ["help"]	(NoArg helpFlag)    "show this help"+    [ Option ['V']  ["version"] (NoArg versionFlag) "show version number"+    , Option ['?']  ["help"]    (NoArg helpFlag)    "show this help"     , Option ['I']  ["interactive"] (NoArg interactiveFlag)-		    "start in interactive mode"+                    "start in interactive mode"+    , Option []     ["interaction"] (NoArg ghciInteractionFlag)+                    "for use with the Emacs mode"     , Option ['c']  ["compile"] (NoArg compileFlag)                     "compile program using the MAlonzo backend (experimental)"     , Option []     ["epic"] (NoArg compileEpicFlag) "compile program using the Epic backend"@@ -315,6 +354,11 @@ 		    "run internal test suite"     , Option []	    ["vim"] (NoArg vimFlag) 		    "generate Vim highlighting files"+    , Option []	    ["latex"] (NoArg latexFlag)+                    "generate LaTeX with highlighted source code"+    , Option []	    ["latex-dir"] (ReqArg latexDirFlag "DIR")+                    ("directory in which LaTeX files are placed (default: " +++                     defaultLaTeXDir ++ ")")     , Option []	    ["html"] (NoArg htmlFlag) 		    "generate HTML files with highlighted source code"     , Option []	    ["dependency-graph"] (ReqArg dependencyGraphFlag "FILE")@@ -343,6 +387,8 @@ pragmaOptions =     [ Option []	    ["show-implicit"] (NoArg showImplicitFlag) 		    "show implicit arguments when printing"+    , Option []	    ["show-irrelevant"] (NoArg showIrrelevantFlag)+		    "show irrelevant arguments when printing"     , Option ['v']  ["verbose"]	(ReqArg verboseFlag "N")                     "set verbosity level to N"     -- , Option []	    ["proof-irrelevance"] (NoArg proofIrrelevanceFlag)@@ -375,6 +421,8 @@                     "enable potentially unsound irrelevance features (irrelevant levels, irrelevant data matching)"     , Option []     ["without-K"] (NoArg withoutKFlag)                     "disable the K rule (maybe)"+    , Option []     ["copatterns"] (NoArg copatternsFlag)+                    "enable definitions by copattern matching"     ]  -- | Used for printing usage info.@@ -427,7 +475,7 @@     where 	header progName = unlines [ "Agda" 				  , ""-				  , "Usage: " ++ progName ++ " [OPTIONS...] FILE"+				  , "Usage: " ++ progName ++ " [OPTIONS...] [FILE]" 				  ]          pluginMsg (name, help, inherited, opts)
+ src/full/Agda/Interaction/Response.hs view
@@ -0,0 +1,115 @@+------------------------------------------------------------------------+-- | Data type for all interactive responses+------------------------------------------------------------------------+{-# LANGUAGE CPP, TypeSynonymInstances, FlexibleInstances #-}++module Agda.Interaction.Response+  ( Response (..)+  , DisplayInfo (..)+  , Status (..)+  , GiveResult (..)+  , InteractionOutputCallback+  , defaultInteractionOutputCallback+  ) where++import Agda.Interaction.Highlighting.Precise+import Agda.Interaction.FindFile (ModuleToSource)+--import Agda.Interaction.MakeCase+import Agda.TypeChecking.Monad.Base+import Agda.Syntax.Concrete (Expr)+import Agda.Utils.Pretty++import Data.Int++#include "../undefined.h"+import Agda.Utils.Impossible++-- | Responses for any interactive interface+--+--   Note that the response is given in pieces and incrementally,+--   so the user can have timely response even during long computations.++data Response+    = Resp_HighlightingInfo HighlightingInfo ModuleToSource+    | Resp_Status Status+    | Resp_JumpToError FilePath Int32+    | Resp_InteractionPoints [InteractionId]+    | Resp_GiveAction InteractionId GiveResult+    | Resp_MakeCaseAction [String]+    | Resp_MakeCase String [String]+    | Resp_SolveAll [(InteractionId, Expr)]+    | Resp_DisplayInfo DisplayInfo+    | Resp_RunningInfo String+    | Resp_ClearRunningInfo+    | Resp_ClearHighlighting++-- | Info to display at the end of an interactive command++data DisplayInfo+    = Info_CompilationOk+    | Info_Constraints String+    | Info_AllGoals String+    | Info_Error String+        -- ^ When an error message is displayed this constructor should be+        -- used, if appropriate.+    | Info_Intro Doc+        -- ^ 'Info_Intro' denotes two different types of errors+        --   TODO: split these into separate constructors+    | Info_Auto String+        -- ^ 'Info_Auto' denotes either an error or a success (when 'Resp_GiveAction' is present)+        --   TODO: split these into separate constructors+    | Info_ModuleContents Doc+    | Info_NormalForm Doc+    | Info_GoalType Doc+    | Info_CurrentGoal Doc+    | Info_InferredType Doc+    | Info_Context Doc+        deriving Show++-- | Status information.++data Status = Status+  { sShowImplicitArguments :: Bool+    -- ^ Are implicit arguments displayed?+  , sChecked               :: Bool+    -- ^ Has the module been successfully type checked?+  }++-- | Give action result+--+--   Comment derived from agda2-mode.el+--+--   If 'GiveResult' is 'Give_String s', then the goal is replaced by 's',+--   and otherwise the text inside the goal is retained (parenthesised+--   if 'GiveResult' is 'Give_Paren').++data GiveResult+    = Give_String String+    | Give_Paren+    | Give_NoParen++-- | Callback fuction to call when there is a response+--   to give to the interactive frontend.+--+--   Note that the response is given in pieces and incrementally,+--   so the user can have timely response even during long computations.+--+--   Typical 'InteractionOutputCallback' functions:+--+--    * Convert the response into a 'String' representation and+--      print it on standard output+--      (suitable for inter-process communication).+--+--    * Put the response into a mutable variable stored in the+--      closure of the 'InteractionOutputCallback' function.+--      (suitable for intra-process communication).++type InteractionOutputCallback = Response -> TCM ()++-- | The default 'InteractionOutputCallback' function+--   is set to @__@@IMPOSSIBLE__@ because in this way it is easier to+--   recognize that some response is lost due to an uninitialized+--   'InteractionOutputCallback' function.++defaultInteractionOutputCallback :: InteractionOutputCallback+defaultInteractionOutputCallback = __IMPOSSIBLE__
+ src/full/Agda/Interaction/Response.hs-boot view
@@ -0,0 +1,11 @@+module Agda.Interaction.Response+  ( InteractionOutputCallback+  , defaultInteractionOutputCallback+  ) where++import {-# SOURCE #-} Agda.TypeChecking.Monad.Base++data Response++type InteractionOutputCallback = Response -> TCM ()+defaultInteractionOutputCallback :: InteractionOutputCallback
src/full/Agda/Main.hs view
@@ -1,4 +1,5 @@ {-# LANGUAGE CPP #-}+{-# LANGUAGE PatternGuards #-}  {-| Agda main module. -}@@ -16,8 +17,6 @@ import System.Environment import System.Exit import System.FilePath-import qualified Agda.Utils.IO.Locale as LocIO-import System.Time  import Agda.Syntax.Position import Agda.Syntax.Parser@@ -28,16 +27,16 @@ import Agda.Syntax.Translation.AbstractToConcrete import Agda.Syntax.Translation.InternalToAbstract import Agda.Syntax.Abstract.Name-import Agda.Syntax.Strict import Agda.Syntax.Scope.Base  import Agda.Interaction.Exceptions import Agda.Interaction.CommandLine.CommandLine import Agda.Interaction.Options import Agda.Interaction.Monad-import Agda.Interaction.GhciTop ()      -- to make sure it compiles+import Agda.Interaction.GhcTop (mimicGHCi) import qualified Agda.Interaction.Imports as Imp import qualified Agda.Interaction.Highlighting.Dot as Dot+import qualified Agda.Interaction.Highlighting.LaTeX as LaTeX import Agda.Interaction.Highlighting.HTML  import Agda.TypeChecker@@ -82,6 +81,7 @@           unless ok exitFailure       | isNothing (optInputFile opts)           && not (optInteractive opts)+          && not (optGHCiInteraction opts)                             -> liftIO printUsage       | otherwise           -> do           setCommandLineOptions opts@@ -89,18 +89,23 @@   where     checkFile :: TCM ()     checkFile = do-      i       <- optInteractive <$> liftTCM commandLineOptions-      compile <- optCompile     <$> liftTCM commandLineOptions-      epic    <- optEpicCompile <$> liftTCM commandLineOptions-      js      <- optJSCompile   <$> liftTCM commandLineOptions-      when i $ liftIO $ LocIO.putStr splashScreen+      i       <- optInteractive     <$> liftTCM commandLineOptions+      ghci    <- optGHCiInteraction <$> liftTCM commandLineOptions+      compile <- optCompile         <$> liftTCM commandLineOptions+      epic    <- optEpicCompile     <$> liftTCM commandLineOptions+      js      <- optJSCompile       <$> liftTCM commandLineOptions+      when i $ liftIO $ putStr splashScreen       let failIfNoInt (Just i) = return i           -- The allowed combinations of command-line           -- options should rule out Nothing here.           failIfNoInt Nothing  = __IMPOSSIBLE__ +          failIfInt x Nothing  = x+          failIfInt _ (Just _) = __IMPOSSIBLE__+           interaction :: TCM (Maybe Interface) -> TCM ()           interaction | i         = runIM . interactionLoop+                      | ghci      = (failIfInt mimicGHCi =<<)                       | compile   = (MAlonzo.compilerMain =<<) . (failIfNoInt =<<)                       | epic      = (Epic.compilerMain    =<<) . (failIfNoInt =<<)                       | js        = (JS.compilerMain      =<<) . (failIfNoInt =<<)@@ -115,12 +120,12 @@           unsolvedOK <- optAllowUnsolved <$> pragmaOptions            result <- case mw of-            Just (Imp.Warnings [] [] []) -> __IMPOSSIBLE__-            Just (Imp.Warnings _ unsolved@(_:_) _)+            Just (Warnings [] [] []) -> __IMPOSSIBLE__+            Just (Warnings _ unsolved@(_:_) _)               | not unsolvedOK -> typeError $ UnsolvedMetas unsolved-            Just (Imp.Warnings _ _ unsolved@(_:_))+            Just (Warnings _ _ unsolved@(_:_))               | not unsolvedOK -> typeError $ UnsolvedConstraints unsolved-            Just (Imp.Warnings termErrs@(_:_) _ _) ->+            Just (Warnings termErrs@(_:_) _ _) ->               typeError $ TerminationCheckFailed termErrs             Just _  -> return Nothing             Nothing -> return $ Just i@@ -131,40 +136,39 @@           whenM (isJust . optDependencyGraph <$> commandLineOptions) $             Dot.generateDot $ i +          whenM (optGenerateLaTeX <$> commandLineOptions) $+            LaTeX.generateLaTeX (iModuleName i) (iHighlighting i)+           return result  -- | Print usage information. printUsage :: IO () printUsage = do   progName <- getProgName-  LocIO.putStr $ usage standardOptions_ [] progName+  putStr $ usage standardOptions_ [] progName  -- | Print version information. printVersion :: IO () printVersion =-  LocIO.putStrLn $ "Agda version " ++ version+  putStrLn $ "Agda version " ++ version  -- | What to do for bad options. optionError :: String -> IO () optionError err = do-  LocIO.putStrLn $ "Error: " ++ err+  putStrLn $ "Error: " ++ err   printUsage   exitFailure  -- | Main main :: IO () main = do-#if MIN_VERSION_base(4,2,0)-    -- Ensure that UTF-8 is used for functions in Agda.Utils.IO.Locale-    IO.hSetEncoding IO.stdout IO.utf8-#endif     r <- runTCM $ runAgda `catchError` \err -> do       s <- prettyError err-      liftIO $ LocIO.putStrLn s+      liftIO $ putStrLn s       throwError err     case r of       Right _ -> exitSuccess       Left _  -> exitFailure   `catchImpossible` \e -> do-    LocIO.putStr $ show e+    putStr $ show e     exitFailure
src/full/Agda/Syntax/Abstract.hs view
@@ -1,4 +1,7 @@-{-# LANGUAGE DeriveDataTypeable, DeriveFunctor, DeriveFoldable, DeriveTraversable, CPP #-}+{-# LANGUAGE DeriveDataTypeable, DeriveFunctor, DeriveFoldable,+             DeriveTraversable, CPP, TemplateHaskell,+             MultiParamTypeClasses, FlexibleInstances,+             TypeSynonymInstances #-} {-| The abstract syntax. This is what you get after desugaring and scope     analysis of the concrete syntax. The type checker works on abstract syntax,     producing internal syntax ("Agda.Syntax.Internal").@@ -8,14 +11,14 @@     , module Agda.Syntax.Abstract.Name     ) where -import Prelude hiding (foldr)+import Prelude hiding (foldl, foldr) import Control.Applicative import Data.Sequence (Seq, (<|), (><)) import qualified Data.Sequence as Seq import Data.Foldable as Fold import Data.Traversable import Data.Map (Map)-import Data.Generics (Typeable, Data)+import Data.Typeable (Typeable)  import qualified Agda.Syntax.Concrete as C import Agda.Syntax.Concrete.Pretty ()@@ -27,6 +30,7 @@ import Agda.Syntax.Literal import Agda.Syntax.Scope.Base +import Agda.Utils.Geniplate import Agda.Utils.Tuple  #include "../undefined.h"@@ -34,7 +38,7 @@  data Expr         = Var  Name			     -- ^ Bound variables-        | Def  QName			     -- ^ Constants (i.e. axioms, functions, and datatypes)+        | Def  QName			     -- ^ Constants (i.e. axioms, functions, projections, and datatypes)         | Con  AmbiguousQName		     -- ^ Constructors 	| Lit Literal			     -- ^ Literals 	| QuestionMark MetaInfo		     -- ^ meta variable for interaction@@ -46,42 +50,43 @@         | ExtendedLam ExprInfo DefInfo QName [Clause]         | Pi   ExprInfo Telescope Expr	     -- ^ 	| Fun  ExprInfo (Arg Expr) Expr	     -- ^ independent function space-        | Set  ExprInfo Nat		     -- ^ Set, Set1, Set2, ...+        | Set  ExprInfo Integer              -- ^ Set, Set1, Set2, ...         | Prop ExprInfo			     -- ^         | Let  ExprInfo [LetBinding] Expr    -- ^         | ETel Telescope                     -- ^ only used when printing telescopes 	| Rec  ExprInfo [(C.Name, Expr)]     -- ^ record construction 	| RecUpdate ExprInfo Expr [(C.Name, Expr)]     -- ^ record update 	| ScopedExpr ScopeInfo Expr	     -- ^ scope annotation-        | QuoteGoal ExprInfo Name Expr       -- ^+        | QuoteGoal ExprInfo Name Expr       -- ^ binds @Name@ to current type in @Expr@         | Quote ExprInfo                     -- ^         | QuoteTerm ExprInfo                 -- ^         | Unquote ExprInfo                   -- ^ The splicing construct: unquote ...         | DontCare Expr                      -- ^ for printing DontCare from Syntax.Internal-  deriving (Typeable, Data, Show)+        | PatternSyn QName+  deriving (Typeable, Show)  data Declaration 	= Axiom      DefInfo Relevance QName Expr          -- ^ postulate 	| Field      DefInfo QName (Arg Expr)		   -- ^ record field 	| Primitive  DefInfo QName Expr			   -- ^ primitive function-	| Mutual     DeclInfo [Declaration]                -- ^ a bunch of mutually recursive definitions+	| Mutual     MutualInfo [Declaration]              -- ^ a bunch of mutually recursive definitions 	| Section    ModuleInfo ModuleName [TypedBindings] [Declaration] 	| Apply	     ModuleInfo ModuleName ModuleApplication (Map QName QName) (Map ModuleName ModuleName) 	| Import     ModuleInfo ModuleName 	| Pragma     Range	Pragma         | Open       ModuleInfo ModuleName           -- ^ only retained for highlighting purposes-        | FunDef     DefInfo QName [Clause]+        | FunDef     DefInfo QName Delayed [Clause] -- ^ sequence of function clauses         | DataSig    DefInfo QName Telescope Expr -- ^ lone data signature             -- ^ the 'LamBinding's are 'DomainFree' and binds the parameters of the datatype.         | DataDef    DefInfo QName [LamBinding] [Constructor]             -- ^ the 'LamBinding's are 'DomainFree' and binds the parameters of the datatype.         | RecSig     DefInfo QName Telescope Expr -- ^ lone record signature-        | RecDef     DefInfo QName (Maybe QName) [LamBinding] Expr [Declaration]+        | RecDef     DefInfo QName (Maybe Induction) (Maybe QName) [LamBinding] Expr [Declaration]             -- ^ The 'Expr' gives the constructor type telescope, @(x1 : A1)..(xn : An) -> Prop@,             --   and the optional name is the constructor's name. 	| ScopedDecl ScopeInfo [Declaration]  -- ^ scope annotation-        deriving (Typeable, Data, Show)+        deriving (Typeable, Show)  class GetDefInfo a where   getDefInfo :: a -> Maybe DefInfo@@ -91,16 +96,16 @@   getDefInfo (Field i _ _) = Just i   getDefInfo (Primitive i _ _) = Just i   getDefInfo (ScopedDecl _ (d:_)) = getDefInfo d-  getDefInfo (FunDef i _ _) = Just i+  getDefInfo (FunDef i _ _ _) = Just i   getDefInfo (DataSig i _ _ _) = Just i   getDefInfo (DataDef i _ _ _) = Just i   getDefInfo (RecSig i _ _ _) = Just i-  getDefInfo (RecDef i _ _ _ _ _) = Just i+  getDefInfo (RecDef i _ _ _ _ _ _) = Just i   getDefInfo _ = Nothing  data ModuleApplication = SectionApp [TypedBindings] ModuleName [NamedArg Expr]                        | RecordModuleIFS ModuleName-  deriving (Typeable, Data, Show)+  deriving (Typeable, Show)  data Pragma = OptionsPragma [String] 	    | BuiltinPragma String Expr@@ -111,27 +116,29 @@             | CompiledJSPragma QName String             | StaticPragma QName             | EtaPragma QName-  deriving (Typeable, Data, Show)+  deriving (Typeable, Show)  data LetBinding = LetBind LetInfo Relevance Name Expr Expr    -- ^ LetBind info rel name type defn+                | LetPatBind LetInfo Pattern Expr -- ^ irrefutable pattern binding                 | LetApply ModuleInfo ModuleName ModuleApplication (Map QName QName) (Map ModuleName ModuleName)                 | LetOpen ModuleInfo ModuleName     -- ^ only for highlighting and abstractToConcrete-  deriving (Typeable, Data, Show)+  deriving (Typeable, Show)  -- | Only 'Axiom's. type TypeSignature  = Declaration type Constructor    = TypeSignature+type Field          = TypeSignature  -- | A lambda binding is either domain free or typed. data LamBinding 	= DomainFree Hiding Relevance Name  -- ^ . @x@ or @{x}@ or @.x@ or @.{x}@ 	| DomainFull TypedBindings  -- ^ . @(xs:e)@ or @{xs:e}@-  deriving (Typeable, Data, Show)+  deriving (Typeable, Show)  -- | Typed bindings with hiding information. data TypedBindings = TypedBindings Range (Arg TypedBinding) 	    -- ^ . @(xs : e)@ or @{xs : e}@-  deriving (Typeable, Data, Show)+  deriving (Typeable, Show)  -- | A typed binding. Appears in dependent function spaces, typed lambdas, and --   telescopes. I might be tempting to simplify this to only bind a single@@ -141,15 +148,19 @@ --   you have to. data TypedBinding = TBind Range [Name] Expr 		  | TNoBind Expr-  deriving (Typeable, Data, Show)+  deriving (Typeable, Show)  type Telescope	= [TypedBindings]  -- | We could throw away @where@ clauses at this point and translate them to --   @let@. It's not obvious how to remember that the @let@ was really a --   @where@ clause though, so for the time being we keep it here.-data Clause	= Clause LHS RHS [Declaration]-  deriving (Typeable, Data, Show)+data Clause	= Clause+  { clauseLHS        :: LHS+  , clauseRHS        :: RHS+  , clauseWhereDecls :: [Declaration]+  } deriving (Typeable, Show)+ data RHS	= RHS Expr 		| AbsurdRHS 		| WithRHS QName [Expr] [Clause] -- ^ The 'QName' is the name of the with function.@@ -157,24 +168,113 @@                     -- ^ The 'QName's are the names of the generated with functions.                     --   One for each 'Expr'.                     --   The RHS shouldn't be another RewriteRHS-  deriving (Typeable, Data, Show)+  deriving (Typeable, Show) -data LHS	= LHS LHSInfo QName [NamedArg Pattern] [Pattern]-  deriving (Typeable, Data, Show)+-- | The lhs of a clause in spine view (inside-out).+--   Projection patterns are contained in @spLhsPats@,+--   represented as @DefP d []@.+data SpineLHS = SpineLHS+  { spLhsInfo     :: LHSInfo             -- ^ Range.+  , spLhsDefName  :: QName               -- ^ Name of function we are defining.+  , spLhsPats     :: [NamedArg Pattern]  -- ^ Function parameters (patterns).+  , spLhsWithPats :: [Pattern]           -- ^ @with@ patterns (after @|@).+  }+  deriving (Typeable, Show) +-- | The lhs of a clause in projection-application view (outside-in).+--   Projection patters are represented as 'LHSProj's.+data LHS = LHS+  { lhsInfo     :: LHSInfo               -- ^ Range.+  , lhsCore     :: LHSCore               -- ^ Copatterns.+  , lhsWithPats :: [Pattern]             -- ^ @with@ patterns (after @|@).+  }+  deriving (Typeable, Show)++-- | The lhs minus @with@-patterns in projection-application view.+--   Parameterised over the type @e@ of dot patterns.+data LHSCore' e+    -- | The head applied to ordinary patterns.+  = LHSHead  { lhsDefName  :: QName                    -- ^ Head @f@.+             , lhsPats     :: [NamedArg (Pattern' e)]  -- ^ Applied to patterns @ps@.+             }+    -- | Projection+  | LHSProj  { lhsDestructor :: QName+               -- ^ Record projection identifier.+             , lhsPatsLeft   :: [NamedArg (Pattern' e)]+               -- ^ Indices of the projection.+               --   Currently none @[]@, since we do not have indexed records.+             , lhsFocus      :: NamedArg (LHSCore' e)+               -- ^ Main branch.+             , lhsPatsRight  :: [NamedArg (Pattern' e)]+               -- ^ Further applied to patterns.+             }+  deriving (Typeable, Show, Functor, Foldable, Traversable)++type LHSCore = LHSCore' Expr++lhsToSpine :: LHS -> SpineLHS+lhsToSpine (LHS i core wps) = SpineLHS i f ps wps+  where QNamed f ps = lhsCoreToSpine core++lhsCoreToSpine :: LHSCore' e -> QNamed [NamedArg (Pattern' e)]+lhsCoreToSpine (LHSHead f ps) = QNamed f ps+lhsCoreToSpine (LHSProj d ps1 h ps2) = (++ (p : ps2)) <$> lhsCoreToSpine (namedArg h)+  where p = updateNamedArg (const $ DefP i d ps1) h+        i = PatRange noRange++-- spineToLhsCore ::++-- | Used for checking pattern linearity.+lhsCoreAllPatterns :: LHSCore' e -> [Pattern' e]+lhsCoreAllPatterns = map namedArg . qnamed . lhsCoreToSpine+{- OLD code, dumps projection patterns, superfluous+lhsCoreAllPatterns (LHSHead f ps) = map namedArg ps+lhsCoreAllPatterns (LHSProj d ps1 l ps2) =+  map namedArg ps1 +++  lhsCoreAllPatterns (namedArg l) +++  map namedArg ps2+-}++-- | Used in AbstractToConcrete.+lhsCoreToPattern :: LHSCore -> Pattern+lhsCoreToPattern lc =+  case lc of+    LHSHead f aps -> DefP noInfo f aps+    LHSProj d aps1 lhscore aps2 -> DefP noInfo d $+      aps1 ++ fmap (fmap lhsCoreToPattern) lhscore : aps2+  where noInfo = PatRange noRange -- TODO, preserve range!++mapLHSHead :: (QName -> [NamedArg Pattern] -> LHSCore) -> LHSCore -> LHSCore+mapLHSHead f (LHSHead x ps)        = f x ps+mapLHSHead f (LHSProj d ps1 l ps2) =+  LHSProj d ps1 (fmap (fmap (mapLHSHead f)) l) ps2++{- UNUSED+mapLHSHeadM :: (Monad m) => (QName -> [NamedArg Pattern] -> m LHSCore) -> LHSCore -> m LHSCore+mapLHSHeadM f (LHSHead x ps)        = f x ps+mapLHSHeadM f (LHSProj d ps1 l ps2) = do+  l <- mapLHSHead f l+  return $ LHSProj d ps1 l ps2+-}+ -- | Parameterised over the type of dot patterns.-data Pattern' e	= VarP Name-		| ConP PatInfo AmbiguousQName [NamedArg (Pattern' e)]-		| DefP PatInfo QName          [NamedArg (Pattern' e)]  -- ^ defined pattern-		| WildP PatInfo-		| AsP PatInfo Name (Pattern' e)-		| DotP PatInfo e-		| AbsurdP PatInfo-		| LitP Literal-		| ImplicitP PatInfo	-- ^ generated at type checking for implicit arguments-  deriving (Typeable, Data, Show, Functor, Foldable, Traversable)+data Pattern' e+  = VarP Name+  | ConP PatInfo AmbiguousQName [NamedArg (Pattern' e)]+  | DefP PatInfo QName          [NamedArg (Pattern' e)]+    -- ^ Defined pattern: function definition @f ps@ or destructor pattern @d p ps@.+  | WildP PatInfo+  | AsP PatInfo Name (Pattern' e)+  | DotP PatInfo e+  | AbsurdP PatInfo+  | LitP Literal+  | ImplicitP PatInfo+    -- ^ Generated at type checking for implicit arguments.+  | PatternSynP PatInfo QName [NamedArg (Pattern' e)]+  deriving (Typeable, Show, Functor, Foldable, Traversable) -type Pattern = Pattern' Expr+type Pattern  = Pattern' Expr+type Patterns = [NamedArg Pattern]  {--------------------------------------------------------------------------     Instances@@ -192,63 +292,69 @@     getRange (TNoBind e)   = getRange e  instance HasRange Expr where-    getRange (Var x)		= getRange x-    getRange (Def x)		= getRange x-    getRange (Con x)		= getRange x-    getRange (Lit l)		= getRange l-    getRange (QuestionMark i)	= getRange i-    getRange (Underscore  i)	= getRange i-    getRange (App i _ _)	= getRange i-    getRange (WithApp i _ _)	= getRange i-    getRange (Lam i _ _)	= getRange i-    getRange (AbsurdLam i _)    = getRange i-    getRange (ExtendedLam i _ _ _)  = getRange i-    getRange (Pi i _ _)		= getRange i-    getRange (Fun i _ _)	= getRange i-    getRange (Set i _)		= getRange i-    getRange (Prop i)		= getRange i-    getRange (Let i _ _)	= getRange i-    getRange (Rec i _)		= getRange i-    getRange (RecUpdate i _ _)  = getRange i-    getRange (ETel tel)         = getRange tel-    getRange (ScopedExpr _ e)	= getRange e-    getRange (QuoteGoal _ _ e)	= getRange e-    getRange (Quote i)  	= getRange i-    getRange (QuoteTerm i)  	= getRange i-    getRange (Unquote i)  	= getRange i-    getRange (DontCare{})       = noRange+    getRange (Var x)		   = getRange x+    getRange (Def x)		   = getRange x+    getRange (Con x)		   = getRange x+    getRange (Lit l)		   = getRange l+    getRange (QuestionMark i)	   = getRange i+    getRange (Underscore  i)	   = getRange i+    getRange (App i _ _)	   = getRange i+    getRange (WithApp i _ _)	   = getRange i+    getRange (Lam i _ _)	   = getRange i+    getRange (AbsurdLam i _)       = getRange i+    getRange (ExtendedLam i _ _ _) = getRange i+    getRange (Pi i _ _)		   = getRange i+    getRange (Fun i _ _)	   = getRange i+    getRange (Set i _)		   = getRange i+    getRange (Prop i)		   = getRange i+    getRange (Let i _ _)	   = getRange i+    getRange (Rec i _)		   = getRange i+    getRange (RecUpdate i _ _)     = getRange i+    getRange (ETel tel)            = getRange tel+    getRange (ScopedExpr _ e)	   = getRange e+    getRange (QuoteGoal _ _ e)	   = getRange e+    getRange (Quote i)  	   = getRange i+    getRange (QuoteTerm i)  	   = getRange i+    getRange (Unquote i)  	   = getRange i+    getRange (DontCare{})          = noRange+    getRange (PatternSyn x)        = getRange x  instance HasRange Declaration where-    getRange (Axiom      i _ _ _       ) = getRange i-    getRange (Field      i _ _         ) = getRange i-    getRange (Mutual     i _           ) = getRange i-    getRange (Section    i _ _ _       ) = getRange i-    getRange (Apply	 i _ _ _ _     ) = getRange i-    getRange (Import     i _	       ) = getRange i-    getRange (Primitive  i _ _	       ) = getRange i-    getRange (Pragma	 i _	       ) = getRange i-    getRange (Open       i _           ) = getRange i-    getRange (ScopedDecl _ d	       ) = getRange d-    getRange (FunDef  i _ _         ) = getRange i-    getRange (DataSig i _ _ _       ) = getRange i-    getRange (DataDef i _ _ _       ) = getRange i-    getRange (RecSig  i _ _ _       ) = getRange i-    getRange (RecDef  i _ _ _ _ _   ) = getRange i+    getRange (Axiom      i _ _ _    ) = getRange i+    getRange (Field      i _ _      ) = getRange i+    getRange (Mutual     i _        ) = getRange i+    getRange (Section    i _ _ _    ) = getRange i+    getRange (Apply	 i _ _ _ _  ) = getRange i+    getRange (Import     i _	    ) = getRange i+    getRange (Primitive  i _ _	    ) = getRange i+    getRange (Pragma	 i _	    ) = getRange i+    getRange (Open       i _        ) = getRange i+    getRange (ScopedDecl _ d	    ) = getRange d+    getRange (FunDef     i _ _ _    ) = getRange i+    getRange (DataSig    i _ _ _    ) = getRange i+    getRange (DataDef    i _ _ _    ) = getRange i+    getRange (RecSig     i _ _ _    ) = getRange i+    getRange (RecDef   i _ _ _ _ _ _) = getRange i  instance HasRange (Pattern' e) where-    getRange (VarP x)	   = getRange x-    getRange (ConP i _ _)  = getRange i-    getRange (DefP i _ _)  = getRange i-    getRange (WildP i)	   = getRange i-    getRange (ImplicitP i) = getRange i-    getRange (AsP i _ _)   = getRange i-    getRange (DotP i _)    = getRange i-    getRange (AbsurdP i)   = getRange i-    getRange (LitP l)	   = getRange l+    getRange (VarP x)	         = getRange x+    getRange (ConP i _ _)        = getRange i+    getRange (DefP i _ _)        = getRange i+    getRange (WildP i)	         = getRange i+    getRange (ImplicitP i)       = getRange i+    getRange (AsP i _ _)         = getRange i+    getRange (DotP i _)          = getRange i+    getRange (AbsurdP i)         = getRange i+    getRange (LitP l)	         = getRange l+    getRange (PatternSynP i _ _) = getRange i  instance HasRange LHS where-    getRange (LHS i _ _ _) = getRange i+    getRange (LHS i _ _)   = getRange i +instance HasRange (LHSCore' e) where+    getRange (LHSHead f ps) = fuseRange f ps+    getRange (LHSProj d ps1 lhscore ps2) = d `fuseRange` ps1 `fuseRange` lhscore `fuseRange` ps2+ instance HasRange Clause where     getRange (Clause lhs rhs ds) = getRange (lhs,rhs,ds) @@ -260,9 +366,23 @@  instance HasRange LetBinding where     getRange (LetBind  i _ _ _ _     ) = getRange i+    getRange (LetPatBind  i _ _      ) = getRange i     getRange (LetApply i _ _ _ _     ) = getRange i     getRange (LetOpen  i _           ) = getRange i +-- setRange for patterns applies the range to the outermost pattern constructor+instance SetRange (Pattern' a) where+    setRange r (VarP x)             = VarP (setRange r x)+    setRange r (ConP _ ns as)       = ConP (PatRange r) (AmbQ $ map (setRange r) $ unAmbQ ns) as+    setRange r (DefP _ n as)        = DefP (PatRange r) (setRange r n) as+    setRange r (WildP _)            = WildP (PatRange r)+    setRange r (ImplicitP _)        = ImplicitP (PatRange r)+    setRange r (AsP _ n p)          = AsP (PatRange r) (setRange r n) p+    setRange r (DotP _ e)           = DotP (PatRange r) e+    setRange r (AbsurdP _)          = AbsurdP (PatRange r)+    setRange r (LitP l)             = LitP (setRange r l)+    setRange r (PatternSynP _ n as) = PatternSynP (PatRange r) (setRange r n) as+ instance KillRange LamBinding where   killRange (DomainFree h r x) = killRange1 (DomainFree h r) x   killRange (DomainFull b)     = killRange1 DomainFull b@@ -275,31 +395,34 @@   killRange (TNoBind e)    = killRange1 TNoBind e  instance KillRange Expr where-  killRange (Var x)          = killRange1 Var x-  killRange (Def x)          = killRange1 Def x-  killRange (Con x)          = killRange1 Con x-  killRange (Lit l)          = killRange1 Lit l-  killRange (QuestionMark i) = killRange1 QuestionMark i-  killRange (Underscore  i)  = killRange1 Underscore i-  killRange (App i e1 e2)    = killRange3 App i e1 e2-  killRange (WithApp i e es) = killRange3 WithApp i e es-  killRange (Lam i b e)      = killRange3 Lam i b e-  killRange (AbsurdLam i h)  = killRange1 AbsurdLam i h-  killRange (ExtendedLam i name di pes) = killRange4 ExtendedLam i name di pes --(\_ -> ExtendedLam i def {-name di si-}) i pes-  killRange (Pi i a b)       = killRange3 Pi i a b-  killRange (Fun i a b)      = killRange3 Fun i a b-  killRange (Set i n)        = Set (killRange i) n-  killRange (Prop i)         = killRange1 Prop i-  killRange (Let i ds e)     = killRange3 Let i ds e-  killRange (Rec i fs)       = Rec (killRange i) (map (id -*- killRange) fs)-  killRange (RecUpdate i e fs) = RecUpdate (killRange i) (killRange e) (map (id -*- killRange) fs)-  killRange (ETel tel)       = killRange1 ETel tel-  killRange (ScopedExpr s e) = killRange1 (ScopedExpr s) e-  killRange (QuoteGoal i x e)= killRange3 QuoteGoal i x e-  killRange (Quote i)        = killRange1 Quote i-  killRange (QuoteTerm i)    = killRange1 QuoteTerm i-  killRange (Unquote i)      = killRange1 Unquote i-  killRange (DontCare e)     = DontCare e+  killRange (Var x)                = killRange1 Var x+  killRange (Def x)                = killRange1 Def x+  killRange (Con x)                = killRange1 Con x+  killRange (Lit l)                = killRange1 Lit l+  killRange (QuestionMark i)       = killRange1 QuestionMark i+  killRange (Underscore  i)        = killRange1 Underscore i+  killRange (App i e1 e2)          = killRange3 App i e1 e2+  killRange (WithApp i e es)       = killRange3 WithApp i e es+  killRange (Lam i b e)            = killRange3 Lam i b e+  killRange (AbsurdLam i h)        = killRange1 AbsurdLam i h+  killRange (ExtendedLam i n d ps) = killRange4 ExtendedLam i n d ps+  killRange (Pi i a b)             = killRange3 Pi i a b+  killRange (Fun i a b)            = killRange3 Fun i a b+  killRange (Set i n)              = Set (killRange i) n+  killRange (Prop i)               = killRange1 Prop i+  killRange (Let i ds e)           = killRange3 Let i ds e+  killRange (Rec i fs)             = Rec (killRange i) (map (id -*- killRange) fs)+  killRange (RecUpdate i e fs)     = RecUpdate (killRange i)+                                               (killRange e)+                                               (map (id -*- killRange) fs)+  killRange (ETel tel)             = killRange1 ETel tel+  killRange (ScopedExpr s e)       = killRange1 (ScopedExpr s) e+  killRange (QuoteGoal i x e)      = killRange3 QuoteGoal i x e+  killRange (Quote i)              = killRange1 Quote i+  killRange (QuoteTerm i)          = killRange1 QuoteTerm i+  killRange (Unquote i)            = killRange1 Unquote i+  killRange (DontCare e)           = DontCare e+  killRange (PatternSyn x)         = killRange1 PatternSyn x  instance KillRange Relevance where   killRange rel = rel -- no range to kill@@ -316,11 +439,11 @@   killRange (Pragma     i a           ) = Pragma (killRange i) a   killRange (Open       i x           ) = killRange2 Open       i x   killRange (ScopedDecl a d           ) = killRange1 (ScopedDecl a) d-  killRange (FunDef  i a b       ) = killRange3 FunDef  i a b-  killRange (DataSig i a b c     ) = killRange3 DataSig i a b c-  killRange (DataDef i a b c     ) = killRange4 DataDef i a b c-  killRange (RecSig  i a b c     ) = killRange4 RecSig  i a b c-  killRange (RecDef  i a b c d e ) = killRange6 RecDef  i a b c d e+  killRange (FunDef  i a b c          ) = killRange4 FunDef  i a b c+  killRange (DataSig i a b c          ) = killRange4 DataSig i a b c+  killRange (DataDef i a b c          ) = killRange4 DataDef i a b c+  killRange (RecSig  i a b c          ) = killRange4 RecSig  i a b c+  killRange (RecDef  i a b c d e f    ) = killRange7 RecDef  i a b c d e f  instance KillRange ModuleApplication where   killRange (SectionApp a b c  ) = killRange3 SectionApp a b c@@ -330,19 +453,24 @@   killRange (ThingWithFixity c f) = ThingWithFixity (killRange c) f  instance KillRange e => KillRange (Pattern' e) where-  killRange (VarP x)      = killRange1 VarP x-  killRange (ConP i a b)  = killRange3 ConP i a b-  killRange (DefP i a b)  = killRange3 DefP i a b-  killRange (WildP i)     = killRange1 WildP i-  killRange (ImplicitP i) = killRange1 ImplicitP i-  killRange (AsP i a b)   = killRange3 AsP i a b-  killRange (DotP i a)    = killRange2 DotP i a-  killRange (AbsurdP i)   = killRange1 AbsurdP i-  killRange (LitP l)      = killRange1 LitP l+  killRange (VarP x)            = killRange1 VarP x+  killRange (ConP i a b)        = killRange3 ConP i a b+  killRange (DefP i a b)        = killRange3 DefP i a b+  killRange (WildP i)           = killRange1 WildP i+  killRange (ImplicitP i)       = killRange1 ImplicitP i+  killRange (AsP i a b)         = killRange3 AsP i a b+  killRange (DotP i a)          = killRange2 DotP i a+  killRange (AbsurdP i)         = killRange1 AbsurdP i+  killRange (LitP l)            = killRange1 LitP l+  killRange (PatternSynP i a p) = killRange3 PatternSynP i a p  instance KillRange LHS where-  killRange (LHS i a b c) = killRange4 LHS i a b c+  killRange (LHS i a b)   = killRange3 LHS i a b +instance KillRange e => KillRange (LHSCore' e) where+  killRange (LHSHead a b)     = killRange2 LHSHead a b+  killRange (LHSProj a b c d) = killRange4 LHSProj a b c d+ instance KillRange Clause where   killRange (Clause lhs rhs ds) = killRange3 Clause lhs rhs ds @@ -354,9 +482,21 @@  instance KillRange LetBinding where   killRange (LetBind  i rel a b c   ) = killRange5 LetBind  i rel a b c+  killRange (LetPatBind i a b       ) = killRange3 LetPatBind i a b   killRange (LetApply i a b c d     ) = killRange3 LetApply i a b c d   killRange (LetOpen  i x           ) = killRange2 LetOpen  i x +instanceUniverseBiT' [] [t| (Declaration, QName)          |]+instanceUniverseBiT' [] [t| (Declaration, AmbiguousQName) |]+instanceUniverseBiT' [] [t| (Declaration, Expr)           |]+instanceUniverseBiT' [] [t| (Declaration, LetBinding)     |]+instanceUniverseBiT' [] [t| (Declaration, LamBinding)     |]+instanceUniverseBiT' [] [t| (Declaration, TypedBinding)   |]+instanceUniverseBiT' [] [t| (Declaration, Pattern)        |]+instanceUniverseBiT' [] [t| (Declaration, Declaration)    |]+instanceUniverseBiT' [] [t| (Declaration, ModuleName)     |]+instanceUniverseBiT' [] [t| (Declaration, ModuleInfo)     |]+ ------------------------------------------------------------------------ -- Queries ------------------------------------------------------------------------@@ -374,9 +514,9 @@ allNames (DataSig _ q _ _)        = Seq.singleton q allNames (DataDef _ q _ decls)    = q <| Fold.foldMap allNames decls allNames (RecSig _ q _ _)         = Seq.singleton q-allNames (RecDef _ q c _ _ decls) =+allNames (RecDef _ q _ c _ _ decls) =   q <| foldMap Seq.singleton c >< Fold.foldMap allNames decls-allNames (FunDef _ q cls)         = q <| Fold.foldMap allNamesC cls+allNames (FunDef _ q _ cls)       = q <| Fold.foldMap allNamesC cls   where   allNamesC :: Clause -> Seq QName   allNamesC (Clause _ rhs decls) = allNamesR rhs ><@@ -418,6 +558,7 @@   allNamesE QuoteTerm {}            = Seq.empty   allNamesE Unquote {}              = Seq.empty   allNamesE DontCare {}             = Seq.empty+  allNamesE (PatternSyn x)          = Seq.empty    allNamesLam :: LamBinding -> Seq QName   allNamesLam DomainFree {}      = Seq.empty@@ -429,12 +570,13 @@    allNamesLet :: LetBinding -> Seq QName   allNamesLet (LetBind _ _ _ e1 e2)  = Fold.foldMap allNamesE [e1, e2]+  allNamesLet (LetPatBind _ _ e)     = allNamesE e   allNamesLet (LetApply _ _ app _ _) = allNamesApp app   allNamesLet LetOpen {}             = Seq.empty    allNamesApp :: ModuleApplication -> Seq QName   allNamesApp (SectionApp bindss _ es) = Fold.foldMap allNamesBinds bindss ><-                                         Fold.foldMap allNamesE (map (namedThing . unArg) es)+                                         Fold.foldMap allNamesE (map namedArg es)   allNamesApp RecordModuleIFS {}       = Seq.empty  allNames (Section _ _ _ decls) = Fold.foldMap allNames decls@@ -462,15 +604,106 @@   anyAbstract = Fold.any anyAbstract  instance AnyAbstract Declaration where-  anyAbstract (Axiom i _ _ _)     = defAbstract i == AbstractDef-  anyAbstract (Field i _ _)       = defAbstract i == AbstractDef-  anyAbstract (Mutual     _ ds)   = anyAbstract ds-  anyAbstract (ScopedDecl _ ds)   = anyAbstract ds-  anyAbstract (Section _ _ _ ds)  = anyAbstract ds-  anyAbstract (FunDef i _ _)       = defAbstract i == AbstractDef-  anyAbstract (DataDef i _ _ _)    = defAbstract i == AbstractDef-  anyAbstract (RecDef i _ _ _ _ _) = defAbstract i == AbstractDef-  anyAbstract (DataSig i _ _ _)    = defAbstract i == AbstractDef-  anyAbstract (RecSig i _ _ _)     = defAbstract i == AbstractDef-  anyAbstract _                    = __IMPOSSIBLE__+  anyAbstract (Axiom i _ _ _)        = defAbstract i == AbstractDef+  anyAbstract (Field i _ _)          = defAbstract i == AbstractDef+  anyAbstract (Mutual     _ ds)      = anyAbstract ds+  anyAbstract (ScopedDecl _ ds)      = anyAbstract ds+  anyAbstract (Section _ _ _ ds)     = anyAbstract ds+  anyAbstract (FunDef i _ _ _)       = defAbstract i == AbstractDef+  anyAbstract (DataDef i _ _ _)      = defAbstract i == AbstractDef+  anyAbstract (RecDef i _ _ _ _ _ _) = defAbstract i == AbstractDef+  anyAbstract (DataSig i _ _ _)      = defAbstract i == AbstractDef+  anyAbstract (RecSig i _ _ _)       = defAbstract i == AbstractDef+  anyAbstract _                      = __IMPOSSIBLE__ +app   = foldl (App (ExprRange noRange))++patternToExpr :: Pattern -> Expr+patternToExpr (VarP x)            = Var x+patternToExpr (ConP _ c ps)       =+          Con c `app` map (fmap (fmap patternToExpr)) ps+patternToExpr (DefP _ f ps)       =+          Def f `app` map (fmap (fmap patternToExpr)) ps+patternToExpr (WildP _)           = Underscore emptyMetaInfo+patternToExpr (AsP _ _ p)         = patternToExpr p+patternToExpr (DotP _ e)          = e+patternToExpr (AbsurdP _)         = Underscore emptyMetaInfo  -- TODO: could this happen?+patternToExpr (LitP l)            = Lit l+patternToExpr (ImplicitP _)       = Underscore emptyMetaInfo+patternToExpr (PatternSynP _ _ _) = __IMPOSSIBLE__++type PatternSynDefn = ([Name], Pattern)+type PatternSynDefns = Map QName PatternSynDefn++lambdaLiftExpr :: [Name] -> Expr -> Expr+lambdaLiftExpr []     e = e+lambdaLiftExpr (n:ns) e = Lam (ExprRange noRange)+                                     (DomainFree NotHidden Relevant n) $+                                     lambdaLiftExpr ns e++substPattern :: [(Name, Pattern)] -> Pattern -> Pattern+substPattern s p = case p of+  VarP z      -> case lookup z s of+    Nothing -> p+    Just x  -> x+  ConP i q ps -> ConP i q (fmap (fmap (fmap (substPattern s))) ps)+  WildP i     -> p+  DotP i e    -> DotP i (substExpr (map (fmap patternToExpr) s) e)+  AbsurdP i   -> p+  LitP l      -> p+  _           -> __IMPOSSIBLE__ -- Implicits (generated at TC time),+                                -- pattern synonyms (already gone), and+                                -- @-patterns (not supported anyways).++substExpr :: [(Name, Expr)] -> Expr -> Expr+substExpr s e = case e of+  Var n -> case lookup n s of+    Nothing -> e+    Just z  -> z+  Def _                 -> e+  Con _	                -> e+  Lit _                 -> e+  QuestionMark _        -> e+  Underscore   _        -> e+  App  i e e'           -> App i (substExpr s e)+                                 (fmap (fmap (substExpr s)) e')+  WithApp i e es        -> WithApp i (substExpr s e)+                                     (fmap (substExpr s) es)+  Lam  i lb e           -> Lam i lb (substExpr s e)+  AbsurdLam i h         -> e+  ExtendedLam i di n cs -> __IMPOSSIBLE__   -- Maybe later...+  Pi   i t e            -> Pi i (fmap (substTypedBindings s) t)+                                (substExpr s e)+  Fun  i ae e           -> Fun i (fmap (substExpr s) ae)+                                 (substExpr s e)+  Set  i n              -> e+  Prop i                -> e+  Let  i ls e           -> Let i (fmap (substLetBinding s) ls)+                                 (substExpr s e)+  ETel t                -> e+  Rec  i nes            -> Rec i (fmap (fmap (substExpr s)) nes)+  RecUpdate i e nes     -> RecUpdate i (substExpr s e)+                                       (fmap (fmap (substExpr s)) nes)+  -- XXX: Do we need to do more with ScopedExprs?+  ScopedExpr si e       -> ScopedExpr si (substExpr s e)+  QuoteGoal i n e       -> QuoteGoal i n (substExpr s e)+  Quote i               -> e+  QuoteTerm i           -> e+  Unquote i             -> e+  DontCare e            -> DontCare (substExpr s e)+  PatternSyn x          -> e++substLetBinding :: [(Name, Expr)] -> LetBinding -> LetBinding+substLetBinding s lb = case lb of+  LetBind i r n e e' -> LetBind i r n (substExpr s e) (substExpr s e')+  LetPatBind i p e   -> LetPatBind i p (substExpr s e) -- Andreas, 2012-06-04: what about the pattern p+  _                  -> lb++substTypedBindings :: [(Name, Expr)] -> TypedBindings -> TypedBindings+substTypedBindings s (TypedBindings r atb) = TypedBindings r+    (fmap (substTypedBinding s) atb)++substTypedBinding :: [(Name, Expr)] -> TypedBinding -> TypedBinding+substTypedBinding s tb = case tb of+  TBind r ns e -> TBind r ns $ substExpr s e+  TNoBind e    -> TNoBind $ substExpr s e
+ src/full/Agda/Syntax/Abstract/Copatterns.hs view
@@ -0,0 +1,422 @@+{-# LANGUAGE CPP, TupleSections, PatternGuards, DeriveFunctor, StandaloneDeriving, ScopedTypeVariables, TypeSynonymInstances, FlexibleContexts,  FlexibleInstances #-}+module Agda.Syntax.Abstract.Copatterns (translateCopatternClauses) where++import Prelude hiding (mapM)++import Control.Applicative+import Control.Monad hiding (mapM)+import Control.Monad.Writer hiding (mapM)++import Data.Function+import Data.List++import Data.Traversable as T++import Agda.Syntax.Abstract+import Agda.Syntax.Abstract.Name as A+import Agda.Syntax.Common+import qualified Agda.Syntax.Concrete.Name as C+import Agda.Syntax.Info+import Agda.Syntax.Position+import Agda.Syntax.Scope.Base+import Agda.Syntax.Scope.Monad++import Agda.TypeChecking.Monad.Base (TypeError(..), Call(..), typeError,+                                     TCErr(..))+import Agda.Utils.List+import Agda.Utils.Tuple++#include "../../undefined.h"+import Agda.Utils.Impossible++{- Andreas 2012-04-07, 2012-05-08++   Translating copatterns into record expressions++This is a preliminary solution until we have proper copattern type+checking and evaluation.++Example 1:++  record Stream (A : Set) : Set where+    field+      head : A+      tail : Stream A+  open Stream++  alternate : Stream Nat+  (      head alternate ) = zero+  (head (tail alternate)) = suc zero+  (tail (tail alternate)) = alternate++with pathes++  Path [head]      zero+  Path [tail,head] (suc zero)+  Path [tail,tail] alternate++is translated into++  alternate = record+    { head = zero+    ; tail = record+      { head = suc zero+      ; tail = alternate+      }+    }++Example 2:++  record State (S A : Set) : Set where+    constructor state+    field+      runState : S → A × S+  open State++  record Monad (M : Set → Set) : Set1 where+    constructor monad+    field+      return : {A : Set}   → A → M A+      _>>=_  : {A B : Set} → M A → (A → M B) → M B+  open Monad++  stateMonad : {S : Set} → Monad (State S)+  runState (return stateMonad a  ) s  = a , s+  runState (_>>=_  stateMonad m k) s₀ =+    let as₁ = runState m s₀+    in  runState (k (proj₁ as₁)) (proj₂ as₁)++with pathes++  Path [(return,[a]  ), (runstate,[s ])] (a,s)+  Path [(_>>=_, [m,k]), (runstate,[s₀])] (let...)++is translated to++  stateMonad = record+    { return = λ a → record { runState = λ s → a , s }+    ; _>>=_  = λ m k → record { runState = λ s₀ →+        let as₁ = runState m s₀+        in  runState (k (proj₁ as₁)) (proj₂ as₁)+    }++Example 3:++  swap3 : {A B C X : Set} → (X → A) × ((X → B) × C) → (X → C) × (X → (B × A))+  fst (swap3 t) x       = snd (snd t)+  fst (snd (swap3 t) y) = fst (snd t) y+  snd (snd (swap3 t) z) = fst t z++with pathes++  Path [(fst,[x])]            (snd (snd t))+  Path [(snd,[y]), (fst,[])]  (fst (snd t) y)+  Path [(snd,[z]), (snd,[])]  (fst t z)++ist translated to++  swap3 t = record+    { fst = λ x → snd (snd t)+    ; snd = λ y → record+      { fst = fst (snd t) y+      ; snd = (fst t z){z := y}+      }+    }++How to translate:+- group clauses into those with same LHSCore and same withpatterns++-}++translateCopatternClauses :: [Clause] -> ScopeM (Delayed, [Clause])+translateCopatternClauses cs = if all noCopats cs then return (NotDelayed, cs) else (Delayed,) <$> do+  pcs :: [ProjPath Clause] <- mapM clauseToPath cs+  let cps :: [(Clause, [ProjPath Expr])]+      cps = groupClauses pcs+{-+      cps = map ((theContent . head) /\ map (fmap (rhsExpr . clauseRHS))) $+              groupBy ((==) `on` clauseLHS . theContent) pcs+-}+  ces <- mapM (mapSndM pathToRecord) $+    map (mapSnd $ sortBy (compare `on` thePath)) cps+  return $ map (\ (c, e) -> c { clauseRHS = RHS e }) ces+  where+    noCopats Clause{ clauseLHS = LHS _ LHSHead{} _ } = True+    noCopats _                                       = False+    rhsExpr (RHS e) = e+    rhsExpr _       = __IMPOSSIBLE__++-- | A sequence of decisions @b@ leading to a head @a@.+data Path a b = Path+  { thePath    :: [a] -- ^ the list of choices+  , theContent :: b+  } deriving (Functor)  -- NB: this means @Path a@ is a functor for any @a@++mapContent :: (b -> c) -> Path a b -> Path a c+mapContent f (Path p c) = Path p (f c)++data ProjEntry = ProjEntry+  { projPE :: QName+  , patsPE :: [NamedArg Name] -- ^ currently we only support variable patterns+  } deriving (Eq, Ord)++type ProjPath = Path ProjEntry++instance HasRange ProjEntry where+  getRange (ProjEntry p ps) = getRange (p,ps)++-- | This is a n^2 grouping algorithm which uses only alpha-equality+groupClauses :: [ProjPath Clause] -> [(Clause, [ProjPath Expr])]+groupClauses [] = []+groupClauses (pc@(Path p c) : pcs) = (c, Path p (rhs c) : grp) : groupClauses rest+  where+    (grp, rest) = collect pcs+    -- Collect l splits l into pc's group and the remainder+    -- If the lhs of the next clause is alpha-equivalent to the current lhs+    -- then add the next clause to this group, performing the alpha-conversion+    collect (Path p' c' : pcs) | Just rho <- alpha (clauseLHS c') (clauseLHS c) =+      mapFst (Path p' (rename' rho (rhs c')) :) $ collect pcs+    -- we go through all the clauses, since they could be in random order...+    collect (pc : pcs) = mapSnd (pc :) $ collect pcs+    collect []         = ([], [])++    rhs             = rhsExpr . clauseRHS+    rhsExpr (RHS e) = e+    rhsExpr _       = __IMPOSSIBLE__++clauseToPath :: Clause -> ScopeM (ProjPath Clause)+clauseToPath (Clause (LHS i lhs wps) (RHS e) []) =+  fmap (\ lhs -> Clause (LHS i lhs wps) (RHS e) []) <$> lhsToPath [] lhs+clauseToPath (Clause lhs (RHS e) (_:_)) = typeError $ NotImplemented $ "copattern clauses with where declarations"+clauseToPath (Clause lhs _ wheredecls) = typeError $ NotImplemented $ "copattern clauses with absurd, with or rewrite right hand side"++lhsToPath :: [ProjEntry] -> LHSCore -> ScopeM (ProjPath LHSCore)+lhsToPath acc lhs@LHSHead{}         = return $ Path acc lhs+lhsToPath acc (LHSProj f [] lhs ps) | Just xs <- mapM (T.mapM (T.mapM fromVarP)) ps =+    lhsToPath (ProjEntry f xs : acc) $ namedArg lhs+  where fromVarP :: Pattern -> Maybe Name+        fromVarP (VarP n) = Just n+        fromVarP _        = Nothing+lhsToPath acc (LHSProj f _ lhs _)   = typeError $ NotImplemented $+  "copatterns with patterns before the principal argument"++-- | Expects a sorted list.+pathToRecord :: [ProjPath Expr] -> ScopeM Expr+pathToRecord []          = __IMPOSSIBLE__+pathToRecord [Path [] e] = return e+pathToRecord pps =+  case pathHeads pps of+    Nothing  -> typeError $ GenericError $ "overlapping copattern clauses"+    Just pps -> do+      pes <- mapM (mapSndM pathToRecord) $ groupPathes pps+      let ei = ExprRange $ getRange $ map fst pes+      Rec ei <$> mapM abstractions pes++        where+          abstractions :: (ProjEntry, Expr) -> ScopeM (C.Name, Expr)+          abstractions (ProjEntry p xs, e) = (C.unqualify $ qnameToConcrete p,) <$>+            foldr abstract (return e) xs++          abstract :: NamedArg Name -> ScopeM Expr -> ScopeM Expr+          abstract (Arg h r (Named Nothing x)) me =+            Lam (ExprRange noRange) (DomainFree h r x) <$> me+          abstract (Arg _ _ (Named Just{} _)) me = typeError $ NotImplemented $+            "named arguments in projection patterns"++-- | Similar to 'groupClauses'.+groupPathes :: [(ProjEntry, ProjPath Expr)] -> [(ProjEntry, [ProjPath Expr])]+groupPathes [] = []+groupPathes ((pe@(ProjEntry p xs), path) : pps) = (pe, path : grp) : groupPathes rest+  -- Now group all following pps that have the same projection p+  -- We expect that they have alpha-equivalent xs+  where+    (grp, rest) = collect pps+    collect l@((ProjEntry p' xs', path) : pps) | p == p', Just rho <- alpha xs' xs =+      -- add the alpha-converted path to the group+      -- NOTE: because the path contains only projections and pattern vars+      -- we only alpha-convert the content (rhs Expr)+      -- When the path will contain dot patterns, we have to rename in them+      mapFst (mapContent (rename' rho) path :) $ collect pps+    collect l = ([], l) -- null or different projection: close group++pathHeads :: [Path a b] -> Maybe [(a, Path a b)]+pathHeads = mapM pathSplit++pathSplit :: Path a b -> Maybe (a, Path a b)+pathSplit (Path []     b) = Nothing+pathSplit (Path (a:as) b) = Just (a, Path as b)+++-- * Alpha conversion++type NameMap = [(Name,Name)]++class Rename e where+  rename :: (Name -> Maybe Name) -> e -> e+  rename' :: NameMap -> e -> e+  rename' rho = rename (flip lookup rho)++instance Rename Expr where+  rename rho e =+    case e of+      Var x                 -> Var $ maybe x id (rho x)+      Def f                 -> e+      Con c                 -> e+      Lit l                 -> e+      QuestionMark i        -> e+      Underscore i          -> e+      App i e es            -> App i (rename rho e) (rename rho es)+      WithApp i e es        -> WithApp i (rename rho e) (rename rho es)+      Lam i lb e            -> Lam i (rename rho lb) (rename rho e)+      AbsurdLam{}           -> e+      ExtendedLam i i' n cs -> ExtendedLam i i' n (rename rho cs)+      Pi i tel e            -> Pi i (rename rho tel) (rename rho e)+      Fun i a e             -> Fun i (rename rho a) (rename rho e)+      Set{}                 -> e+      Prop{}                -> e+      Let i bs e            -> Let i (rename rho bs) (rename rho e)+      ETel tel              -> ETel (rename rho tel)+      Rec i fes             -> Rec i $ map (id -*- rename rho) fes+      RecUpdate i e fes     -> RecUpdate i (rename rho e) $ map (id -*- rename rho) fes+      ScopedExpr i e        -> ScopedExpr i (rename rho e)+      QuoteGoal i n e       -> QuoteGoal i n (rename rho e)+      Quote i               -> e+      QuoteTerm i           -> e+      Unquote i             -> e+      DontCare e            -> DontCare (rename rho e)+      PatternSyn n          -> e++instance Rename LetBinding where+  rename rho e =+      case e of+        LetBind i r n e e' -> LetBind i r n (rename rho e) (rename rho e')+        LetPatBind i p e   -> LetPatBind i (rename rho p) (rename rho e)+        LetApply{}         -> e+        LetOpen{}          -> e++instance Rename LamBinding where+  rename rho e =+      case e of+        DomainFree{} -> e+        DomainFull tb -> DomainFull (rename rho tb)++instance Rename TypedBindings where+  rename rho (TypedBindings r tb) = TypedBindings r (rename rho tb)++instance Rename TypedBinding where+  rename rho (TBind r ns e) = TBind r ns (rename rho e)+  rename rho (TNoBind    e) = TNoBind (rename rho e)++instance Rename Clause where+  rename rho (Clause lhs rhs wheredecls) =+    Clause (rename rho lhs) (rename rho rhs) (rename rho wheredecls)++instance Rename RHS where+  rename rho e = case e of+      RHS e                 -> RHS (rename rho e)+      AbsurdRHS             -> e+      WithRHS n es cs       -> WithRHS n (rename rho es) (rename rho cs)+      RewriteRHS ns es r ds -> RewriteRHS ns (rename rho es) (rename rho r) (rename rho ds)++instance Rename LHS where+  rename rho (LHS i core ps) = LHS i (rename rho core) (rename rho ps)++instance Rename LHSCore where+  rename rho = fmap (rename rho) -- only rename in dot patterns+{-+  rename rho = ren where+    ren e = case e of+      LHSHead f ps           -> LHSHead f (ren ps)+      LHSProj d ps1 core ps2 -> LHSProj d (ren ps1) (ren core) (ren ps2)+-}++instance Rename Pattern where+  rename rho = fmap (rename rho) -- only rename in dot patterns++instance Rename Declaration where+  rename rho d = __IMPOSSIBLE__++instance Rename a => Rename (Arg a) where+  rename rho = fmap (rename rho)++instance Rename a => Rename (Named n a) where+  rename rho = fmap (rename rho)++instance Rename a => Rename [a] where+  rename rho = map (rename rho)+++++-- | Alpha-Equivalence of patterns, ignoring dot patterns+class Alpha t where+  alpha :: t -> t -> Maybe NameMap+  alpha t t' = fmap snd $ runWriterT $ alpha' t t'++  alpha' :: t -> t -> WriterT NameMap Maybe ()+  alpha' t t' = WriterT $ fmap ((),) $ alpha t t'++instance Alpha Name where+  alpha' x x' = tell1 (x, x')++instance Alpha (Pattern' e) where+  alpha' p p' =+    case (p,p') of+      ((VarP x)             , (VarP x')             ) -> tell1 (x, x')+      ((ConP _ x ps)        , (ConP _ x' ps')       ) -> guard (x == x') >> alpha' ps ps'+      ((DefP _ x ps)        , (DefP _ x' ps')       ) -> guard (x == x') >> alpha' ps ps'+      ((WildP _)            , (WildP _)             ) -> return ()+      ((AsP _ x p)          , (AsP _ x' p')         ) -> tell1 (x, x') >> alpha' p p'+      ((DotP _ _)           , (DotP _ _)            ) -> return ()+      (AbsurdP{}            , AbsurdP{}             ) -> return ()+      ((LitP l)             , (LitP l')             ) -> guard (l == l')+      (ImplicitP{}          , ImplicitP{}           ) -> return ()+      ((PatternSynP _ x ps) , (PatternSynP _ x' ps')) -> guard (x == x') >> alpha' ps ps'+      (_                    , _                     ) -> fail "not alpha equivalent"++tell1 :: (MonadWriter [a] m) => a -> m ()+tell1 a = tell [a]++deriving instance Eq AmbiguousQName++instance Alpha (LHSCore' e) where+  alpha' (LHSHead f ps) (LHSHead f' ps') = guard (f == f') >> alpha' ps ps'+  alpha' (LHSProj d ps1 lhs ps2) (LHSProj d' ps1' lhs' ps2') =+     guard (d == d') >> alpha' ps1 ps1' >> alpha' lhs lhs' >> alpha' ps2 ps2'+  alpha' _ _ = fail "not alpha equivalent"++instance Alpha LHS where+  alpha' (LHS _ core wps) (LHS _ core' wps') = alpha' core core' >> alpha' wps wps'++instance Alpha a => Alpha (Arg a) where+  alpha' a a' = alpha' (unArg a) (unArg a')++instance (Eq n, Alpha a) => Alpha (Named n a) where+  alpha' a a' = guard (nameOf a == nameOf a') >> alpha' (namedThing a) (namedThing a')++instance Alpha a => Alpha [a] where+  alpha' l l' = guard (length l == length l') >> zipWithM_ alpha' l l'++-- | Literal equality of patterns, ignoring dot patterns+instance Eq (Pattern' e) where+  p == p' =+    case (p,p') of+      ((VarP x)             , (VarP x')             ) -> x === x'+      ((ConP _ x ps)        , (ConP _ x' ps')       ) -> x == x' && ps == ps'+      ((DefP _ x ps)        , (DefP _ x' ps')       ) -> x == x' && ps == ps'+      ((WildP _)            , (WildP _)             ) -> True+      ((AsP _ x p)          , (AsP _ x' p')         ) -> x === x' && p == p'+      ((DotP _ _)           , (DotP _ _)            ) -> True+      (AbsurdP{}            , AbsurdP{}             ) -> True+      ((LitP l)             , (LitP l')             ) -> l == l'+      (ImplicitP{}          , ImplicitP{}           ) -> True+      ((PatternSynP _ x ps) , (PatternSynP _ x' ps')) -> x == x' && ps == ps'+      (_                    , _                     ) -> False+    where (A.Name _ (C.Name _ x) _ _) === (A.Name _ (C.Name _ x') _ _) = True+          (A.Name _ C.NoName{}   _ _) === (A.Name _ C.NoName{}    _ _) = True+          _                           === _                            = False++deriving instance Eq (LHSCore' e)++instance Eq LHS where+  (LHS _ core wps) == (LHS _ core' wps') = core == core' && wps == wps'
src/full/Agda/Syntax/Abstract/Name.hs view
@@ -1,13 +1,20 @@-{-# LANGUAGE CPP, DeriveDataTypeable, GeneralizedNewtypeDeriving, FlexibleContexts #-}+{-# LANGUAGE CPP,+  DeriveDataTypeable, GeneralizedNewtypeDeriving,+  DeriveFunctor, DeriveFoldable, DeriveTraversable,+  FlexibleContexts #-}  {-| Abstract names should carry unique identifiers and stuff. Not right now though. -} module Agda.Syntax.Abstract.Name where  import Control.Monad.State-import Data.Generics (Typeable, Data)++import Data.Foldable (Foldable)+import Data.Traversable (Traversable)+import Data.Typeable (Typeable) import Data.List import Data.Function+import Data.Hashable  import Agda.Syntax.Position import Agda.Syntax.Common@@ -31,7 +38,7 @@ 		 , nameBindingSite :: Range 		 , nameFixity	   :: Fixity' 		 }-    deriving (Typeable, Data)+    deriving (Typeable)  -- | Qualified names are non-empty lists of names. Equality on qualified names --   are just equality on the last name, i.e. the module part is just@@ -42,32 +49,44 @@ data QName = QName { qnameModule :: ModuleName 		   , qnameName	 :: Name 		   }-    deriving (Typeable, Data)+    deriving (Typeable) +-- | Something preceeded by a qualified name.+data QNamed a = QNamed+  { qname  :: QName+  , qnamed :: a+  }+  deriving (Typeable, Show, Functor, Foldable, Traversable)+ -- | A module name is just a qualified name. -- -- The 'SetRange' instance for module names sets all individual ranges -- to the given one. newtype ModuleName = MName { mnameToList :: [Name] }-  deriving (Eq, Ord, Typeable, Data)+  deriving (Eq, Ord, Typeable)  -- | Ambiguous qualified names. Used for overloaded constructors. -- -- Invariant: All the names in the list must have the same concrete, -- unqualified name. newtype AmbiguousQName = AmbQ { unAmbQ :: [QName] }-  deriving (Typeable, Data, HasRange, Show)+  deriving (Typeable, HasRange, Show)  instance HasRange ModuleName where   getRange (MName []) = noRange   getRange (MName xs) = getRange xs +-- | A module is anonymous if the qualification path ends in an underscore.+isAnonymousModuleName :: ModuleName -> Bool+isAnonymousModuleName (MName []) = False+isAnonymousModuleName (MName ms) = C.isNoName $ nameConcrete $ last ms+ -- | Sets the ranges of the individual names in the module name to -- match those of the corresponding concrete names. If the concrete -- names are fewer than the number of module name name parts, then the -- initial name parts get the range 'noRange'. ----- @C.D.E `withRangesOf` [A, B]@ returns @C.D.E@ but with ranges set+-- @C.D.E \`withRangesOf\` [A, B]@ returns @C.D.E@ but with ranges set -- as follows: -- -- * @C@: 'noRange'.@@ -193,7 +212,7 @@ freshNoName_ :: (MonadState s m, HasFresh NameId s) => m Name freshNoName_ = freshNoName noRange --- | Get the next version of the concrete name. For instance, @nextName "x" = "x'"@.+-- | Get the next version of the concrete name. For instance, @nextName "x" = "x₁"@. --   The name must not be a 'NoName'. nextName :: Name -> Name nextName x = x { nameConcrete = C.Name noRange $ nextSuf ps }@@ -219,6 +238,10 @@ instance Show Name where   show x = show (nameConcrete x) -- ++ "|" ++ show (nameId x) +instance Hashable Name where+  {-# INLINE hash #-}+  hash = hash . nameId+ instance Show QName where   show q = concat $ intersperse "." $ map show $ qnameToList q @@ -230,6 +253,10 @@  instance Ord QName where   compare = compare `on` qnameName++instance Hashable QName where+  {-# INLINE hash #-}+  hash = hash . qnameName  instance HasRange Name where   getRange = getRange . nameConcrete
src/full/Agda/Syntax/Abstract/Views.hs view
@@ -26,3 +26,10 @@ unAppView :: AppView -> Expr unAppView (Application h es) =   foldl (App (ExprRange noRange)) h es++-- | Check whether we are dealing with a universe.+isSet :: Expr -> Bool+isSet (ScopedExpr _ e) = isSet e+isSet (App _ e _)      = isSet e+isSet (Set{})          = True+isSet _                = False
src/full/Agda/Syntax/Common.hs view
@@ -5,10 +5,11 @@ -} module Agda.Syntax.Common where -import Data.Generics (Typeable, Data)+import Data.Typeable (Typeable) import Control.Applicative import Data.Foldable import Data.Traversable+import Data.Hashable import Test.QuickCheck  import Agda.Syntax.Position@@ -18,28 +19,59 @@ #include "../undefined.h" import Agda.Utils.Impossible +-- | Used to specify whether something should be delayed.+data Delayed = Delayed | NotDelayed+  deriving (Typeable, Show, Eq, Ord)+ data Induction = Inductive | CoInductive-  deriving (Typeable, Data, Show, Eq, Ord)+  deriving (Typeable, Eq, Ord) +instance Show Induction where+  show Inductive   = "inductive"+  show CoInductive = "coinductive"++instance HasRange Induction where+  getRange _ = noRange+ data Hiding  = Hidden | Instance | NotHidden-    deriving (Typeable, Data, Show, Eq, Ord)+    deriving (Typeable, Show, Eq, Ord) +instance KillRange Delayed   where killRange = id+instance KillRange Induction where killRange = id+instance KillRange Hiding    where killRange = id++---------------------------------------------------------------------------+-- * Relevance+---------------------------------------------------------------------------+ -- | A function argument can be relevant or irrelevant. --   See 'Agda.TypeChecking.Irrelevance'. data Relevance-  = Relevant    -- ^ the argument is (possibly) relevant at compile-time-  | NonStrict   -- ^ the argument may never flow into evaluation position.+  = Relevant    -- ^ The argument is (possibly) relevant at compile-time.+  | NonStrict   -- ^ The argument may never flow into evaluation position.                 --   Therefore, it is irrelevant at run-time.                 --   It is treated relevantly during equality checking.-  | Irrelevant  -- ^ the argument is irrelevant at compile- and runtime-  | Forced      -- ^ the argument can be skipped during equality checking-    deriving (Typeable, Data, Show, Eq)+  | Irrelevant  -- ^ The argument is irrelevant at compile- and runtime.+  | Forced      -- ^ The argument can be skipped during equality checking+                --   because its value is already determined by the type.+  | UnusedArg   -- ^ The polarity checker has determined that this argument+                --   is unused in the definition.  It can be skipped during+                --   equality checking but should be mined for solutions+                --   of meta-variables with relevance 'UnusedArg'+    deriving (Typeable, Show, Eq, Enum, Bounded) +instance Arbitrary Relevance where+  arbitrary = elements [minBound..maxBound]+ instance Ord Relevance where   (<=) = moreRelevant  -- | Information ordering.--- @Relevant `moreRelevant` Forced `moreRelevant` NonStrict `moreRelevant` Irrelevant@+-- @Relevant  \`moreRelevant\`+--  UnusedArg \`moreRelevant\`+--  Forced    \`moreRelevant\`+--  NonStrict \`moreRelevant\`+--  Irrelevant@ moreRelevant :: Relevance -> Relevance -> Bool moreRelevant r r' =   case (r, r') of@@ -50,24 +82,76 @@     (Relevant, _)   -> True     (_, Relevant)   -> False     -- second bottom+    (UnusedArg, _)  -> True+    (_, UnusedArg)  -> False+    -- third bottom     (Forced, _)     -> True     (_, Forced)     -> False     -- remaining case     (NonStrict,NonStrict) -> True -instance KillRange Induction where killRange = id-instance KillRange Hiding    where killRange = id+---------------------------------------------------------------------------+-- * Function type domain+--------------------------------------------------------------------------- +-- | Similar to 'Arg', but we need to distinguish+--   an irrelevance annotation in a function domain+--   (the domain itself is not irrelevant!)+--   from an irrelevant argument.+--+--   @Dom@ is used in 'Pi' of internal syntax, in 'Context' and 'Telescope'.+--   'Arg' is used for actual arguments ('Var', 'Con', 'Def' etc.)+--   and in 'Abstract' syntax and other situations.+data Dom e = Dom+  { domHiding    :: Hiding+  , domRelevance :: Relevance+  , unDom        :: e+  } deriving (Typeable, Eq, Ord, Functor, Foldable, Traversable)++argFromDom :: Dom a -> Arg a+argFromDom (Dom h r a) = Arg h r a++domFromArg :: Arg a -> Dom a+domFromArg (Arg h r a) = Dom h r a++mapDomHiding :: (Hiding -> Hiding) -> Dom a -> Dom a+mapDomHiding f dom = dom { domHiding = f (domHiding dom) }++mapDomRelevance :: (Relevance -> Relevance) -> Dom a -> Dom a+mapDomRelevance f dom = dom { domRelevance = f (domRelevance dom) }++instance HasRange a => HasRange (Dom a) where+    getRange = getRange . unDom++instance KillRange a => KillRange (Dom a) where+  killRange = fmap killRange++instance Sized a => Sized (Dom a) where+  size = size . unDom++instance Show a => Show (Dom a) where+    show = show . argFromDom++---------------------------------------------------------------------------+-- * Argument decoration+---------------------------------------------------------------------------+ -- | A function argument can be hidden and/or irrelevant. data Arg e  = Arg   { argHiding    :: Hiding   , argRelevance :: Relevance   , unArg :: e-  } deriving (Typeable, Data, Ord, Functor, Foldable, Traversable)+  } deriving (Typeable, Ord, Functor, Foldable, Traversable)  instance Eq a => Eq (Arg a) where   Arg h1 _ x1 == Arg h2 _ x2 = (h1, x1) == (h2, x2) +mapArgHiding :: (Hiding -> Hiding) -> Arg a -> Arg a+mapArgHiding f arg = arg { argHiding = f (argHiding arg) }++mapArgRelevance :: (Relevance -> Relevance) -> Arg a -> Arg a+mapArgRelevance f arg = arg { argRelevance = f (argRelevance arg) }+ makeInstance :: Arg a -> Arg a makeInstance a = a { argHiding = Instance } @@ -80,7 +164,7 @@ isHiddenArg :: Arg a -> Bool isHiddenArg arg = argHiding arg /= NotHidden --- | @xs `withArgsFrom` args@ translates @xs@ into a list of 'Arg's,+-- | @xs \`withArgsFrom\` args@ translates @xs@ into a list of 'Arg's, -- using the elements in @args@ to fill in the non-'unArg' fields. -- -- Precondition: The two lists should have equal length.@@ -107,13 +191,18 @@         showR Irrelevant s = "." ++ s         showR NonStrict  s = "?" ++ s         showR Forced     s = "!" ++ s+        showR UnusedArg  s = "k" ++ s -- constant         showR Relevant   s = "r" ++ s -- Andreas: I want to see it explicitly +---------------------------------------------------------------------------+-- * Named arguments+---------------------------------------------------------------------------+ data Named name a =     Named { nameOf     :: Maybe name 	  , namedThing :: a 	  }-    deriving (Eq, Ord, Typeable, Data, Functor, Foldable, Traversable)+    deriving (Eq, Ord, Typeable, Functor, Foldable, Traversable)  unnamed :: a -> Named name a unnamed = Named Nothing@@ -137,34 +226,54 @@ -- | Only 'Hidden' arguments can have names. type NamedArg a = Arg (Named String a) +-- | Get the content of a 'NamedArg'.+namedArg :: NamedArg a -> a+namedArg = namedThing . unArg++defaultNamedArg :: a -> NamedArg a+defaultNamedArg = defaultArg . unnamed++-- | The functor instance for 'NamedArg' would be ambiguous,+--   so we give it another name here.+updateNamedArg :: (a -> b) -> NamedArg a -> NamedArg b+updateNamedArg = fmap . fmap++---------------------------------------------------------------------------+-- * Infixity, access, abstract, etc.+---------------------------------------------------------------------------+ -- | Functions can be defined in both infix and prefix style. See --   'Agda.Syntax.Concrete.LHS'. data IsInfix = InfixDef | PrefixDef-    deriving (Typeable, Data, Show, Eq, Ord)+    deriving (Typeable, Show, Eq, Ord)  -- | Access modifier. data Access = PrivateAccess | PublicAccess             | OnlyQualified  -- ^ Visible from outside, but not exported when opening the module                              --   Used for qualified constructors.-    deriving (Typeable, Data, Show, Eq, Ord)+    deriving (Typeable, Show, Eq, Ord)  -- | Abstract or concrete data IsAbstract = AbstractDef | ConcreteDef-    deriving (Typeable, Data, Show, Eq, Ord)+    deriving (Typeable, Show, Eq, Ord) -type Nat    = Integer+type Nat    = Int type Arity  = Nat  -- | The unique identifier of a name. Second argument is the top-level module --   identifier.-data NameId = NameId Nat Integer-    deriving (Eq, Ord, Typeable, Data)+data NameId = NameId Integer Integer+    deriving (Eq, Ord, Typeable)  instance Enum NameId where   succ (NameId n m)	= NameId (n + 1) m   pred (NameId n m)	= NameId (n - 1) m   toEnum n		= __IMPOSSIBLE__  -- should not be used   fromEnum (NameId n _) = fromIntegral n++instance Hashable NameId where+  {-# INLINE hash #-}+  hash (NameId n m) = hash (n, m)  newtype Constr a = Constr a 
src/full/Agda/Syntax/Concrete.hs view
@@ -22,12 +22,11 @@     , ModuleApplication(..)     , TypeSignature     , Constructor-    , Field     , ImportDirective(..), UsingOrHiding(..), ImportedName(..)     , Renaming(..), AsName(..)     , defaultImportDir-    , OpenShortHand(..)-    , LHS(..), Pattern(..)+    , OpenShortHand(..), RewriteEqn, WithExpr+    , LHS(..), Pattern(..), LHSCore(..)     , RHS(..), WhereClause(..)     , Pragma(..)     , Module@@ -38,7 +37,7 @@     )     where -import Data.Generics (Typeable, Data)+import Data.Typeable (Typeable) import Data.Foldable hiding (concatMap) import Data.Traversable import Agda.Syntax.Position@@ -55,7 +54,7 @@ data OpApp e         = SyntaxBindingLambda !Range [LamBinding] e -- ^ an abstraction inside a special syntax declaration (see Issue 358 why we introduce this).         | Ordinary e-    deriving (Typeable, Data, Functor)+    deriving (Typeable, Functor)  fromOrdinary :: e -> OpApp e -> e fromOrdinary d (Ordinary e) = e@@ -66,10 +65,10 @@ 	= Ident QName			       -- ^ ex: @x@ 	| Lit Literal			       -- ^ ex: @1@ or @\"foo\"@ 	| QuestionMark !Range (Maybe Nat)      -- ^ ex: @?@ or @{! ... !}@-	| Underscore !Range (Maybe Nat)	       -- ^ ex: @_@+	| Underscore !Range (Maybe String)     -- ^ ex: @_@ or @_A_5@ 	| RawApp !Range [Expr]		       -- ^ before parsing operators 	| App !Range Expr (NamedArg Expr)      -- ^ ex: @e e@, @e {e}@, or @e {x = e}@-	| OpApp !Range Name [OpApp Expr]       -- ^ ex: @e + e@+	| OpApp !Range QName [OpApp Expr]      -- ^ ex: @e + e@         | WithApp !Range Expr [Expr]           -- ^ ex: @e | e1 | .. | en@ 	| HiddenArg !Range (Named String Expr) -- ^ ex: @{e}@ or @{x=e}@ 	| InstanceArg !Range (Named String Expr) -- ^ ex: @{{e}}@ or @{{x=e}}@@@ -80,7 +79,7 @@ 	| Pi Telescope Expr		       -- ^ ex: @(xs:e) -> e@ or @{xs:e} -> e@ 	| Set !Range			       -- ^ ex: @Set@ 	| Prop !Range			       -- ^ ex: @Prop@-	| SetN !Range Nat		       -- ^ ex: @Set0, Set1, ..@+	| SetN !Range Integer                  -- ^ ex: @Set0, Set1, ..@ 	| Rec !Range [(Name, Expr)]	       -- ^ ex: @record {x = a; y = b}@ 	| RecUpdate !Range Expr [(Name, Expr)] -- ^ ex: @record e {x = a; y = b}@ 	| Let !Range [Declaration] Expr	       -- ^ ex: @let Ds in e@@@ -94,44 +93,44 @@         | QuoteTerm !Range                     -- ^ ex: @quoteTerm@, should be applied to a term         | Unquote !Range                       -- ^ ex: @unquote@, should be applied to a term of type @Term@         | DontCare Expr                        -- ^ to print irrelevant things-    deriving (Typeable, Data)+    deriving (Typeable)   -- | Concrete patterns. No literals in patterns at the moment. data Pattern-	= IdentP QName-	| AppP Pattern (NamedArg Pattern)-	| RawAppP !Range [Pattern]-	| OpAppP !Range Name [Pattern]-	| HiddenP !Range (Named String Pattern)-	| InstanceP !Range (Named String Pattern)-	| ParenP !Range Pattern-	| WildP !Range-	| AbsurdP !Range-	| AsP !Range Name Pattern-	| DotP !Range Expr-	| LitP Literal-    deriving (Typeable, Data)+	= IdentP QName                            -- ^ @c@ or @x@+	| AppP Pattern (NamedArg Pattern)         -- ^ @p p'@ or @p {x = p'}@+	| RawAppP !Range [Pattern]                -- ^ @p1..pn@ before parsing operators+	| OpAppP !Range QName [Pattern]           -- ^ eg: @p => p'@ for operator @_=>_@+	| HiddenP !Range (Named String Pattern)   -- ^ @{p}@ or @{x = p}@+	| InstanceP !Range (Named String Pattern) -- ^ @{{p}}@ or @{{x = p}}@+	| ParenP !Range Pattern                   -- ^ @(p)@+	| WildP !Range                            -- ^ @_@+	| AbsurdP !Range                          -- ^ @()@+	| AsP !Range Name Pattern                 -- ^ @x\@p@ unused+	| DotP !Range Expr                        -- ^ @.e@+	| LitP Literal                            -- ^ @0@, @1@, etc.+    deriving (Typeable)   -- | A lambda binding is either domain free or typed. data LamBinding 	= DomainFree Hiding Relevance BoundName -- ^ . @x@ or @{x}@ or @.x@ or @.{x}@ or @{.x}@ 	| DomainFull TypedBindings              -- ^ . @(xs : e)@ or @{xs : e}@-    deriving (Typeable, Data)+    deriving (Typeable)   -- | A sequence of typed bindings with hiding information. Appears in dependent --   function spaces, typed lambdas, and telescopes. data TypedBindings = TypedBindings !Range (Arg TypedBinding) 	-- ^ . @(xs : e)@ or @{xs : e}@-    deriving (Typeable, Data)+    deriving (Typeable)   data BoundName = BName { boundName   :: Name                        , bnameFixity :: Fixity'                        }-    deriving (Typeable, Data)+    deriving (Typeable)  mkBoundName_ :: Name -> BoundName mkBoundName_ x = BName x defaultFixity'@@ -140,7 +139,7 @@ data TypedBinding 	= TBind !Range [BoundName] Expr   -- Binding @x1,..,xn:A@ 	| TNoBind Expr		    -- No binding @A@, equivalent to @_ : A@.-    deriving (Typeable, Data)+    deriving (Typeable)   -- | A telescope is a sequence of typed bindings. Bound variables are in scope@@ -154,25 +153,46 @@     We use fixity information to see which name is actually defined. -}-data LHS = LHS { lhsOriginalPattern :: Pattern-               , lhsWithPattern     :: [Pattern]-               , lhsRewriteEqn      :: [RewriteEqn]-               , lhsWithExpr        :: [WithExpr]+data LHS = LHS { lhsOriginalPattern :: Pattern       -- ^ @f ps@+               , lhsWithPattern     :: [Pattern]     -- ^ @| p@ (many)+               , lhsRewriteEqn      :: [RewriteEqn]  -- ^ @rewrite e@ (many)+               , lhsWithExpr        :: [WithExpr]    -- ^ @with e@ (many)                }          -- ^ original pattern, with-patterns, rewrite equations and with-expressions          | Ellipsis Range [Pattern] [RewriteEqn] [WithExpr]          -- ^ new with-patterns, rewrite equations and with-expressions-  deriving (Typeable, Data)+  deriving (Typeable)  type RewriteEqn = Expr type WithExpr   = Expr +-- | Processed (scope-checked) intermediate form of the core @f ps@ of 'LHS'.+--   Corresponds to 'lhsOriginalPattern'.+data LHSCore+  = LHSHead  { lhsDefName  :: Name                -- ^ @f@+             , lhsPats     :: [NamedArg Pattern]  -- ^ @ps@+             }+  | LHSProj  { lhsDestructor :: QName      -- ^ record projection identifier+             , lhsPatsLeft   :: [NamedArg Pattern]  -- ^ side patterns+             , lhsFocus      :: NamedArg LHSCore    -- ^ main branch+             , lhsPatsRight  :: [NamedArg Pattern]  -- ^ side patterns+             }+  deriving (Typeable)++{- TRASH+lhsCoreToPattern :: LHSCore -> Pattern+lhsCoreToPattern (LHSHead f args) = OpAppP (fuseRange f args) (unqualify f) args+lhsCoreToPattern (LHSProj d ps1 lhscore ps2) = OpAppP (fuseRange d ps) (unqualify) ps+  where p = lhsCoreToPattern lhscore+        ps = ps1 ++ p : ps2+-}+ data RHS = AbsurdRHS 	 | RHS Expr-    deriving (Typeable, Data)+    deriving (Typeable)  data WhereClause = NoWhere | AnyWhere [Declaration] | SomeWhere Name [Declaration]-  deriving (Typeable, Data)+  deriving (Typeable)   -- | The things you are allowed to say when you shuffle names between name@@ -184,20 +204,21 @@ 	    , renaming		:: [Renaming] 	    , publicOpen	:: Bool	-- ^ Only for @open@. Exports the opened names from the current module. 	    }-    deriving (Typeable, Data)+    deriving (Typeable) +-- | Default is directive is @private@ (use everything, but do not export). defaultImportDir :: ImportDirective defaultImportDir = ImportDirective noRange (Hiding []) [] False  data UsingOrHiding 	= Hiding [ImportedName] 	| Using  [ImportedName]-    deriving (Typeable, Data)+    deriving (Typeable)  -- | An imported name can be a module or a defined name data ImportedName = ImportedModule  { importedName :: Name } 		  | ImportedName    { importedName :: Name }-    deriving (Typeable, Data, Eq, Ord)+    deriving (Typeable, Eq, Ord)  instance Show ImportedName where     show (ImportedModule x) = "module " ++ show x@@ -211,7 +232,7 @@                            -- ^ The range of the \"to\" keyword. Retained                            --   for highlighting purposes.                          }-    deriving (Typeable, Data)+    deriving (Typeable)  data AsName = AsName { asName  :: Name                        -- ^ The \"as\" name.@@ -219,7 +240,7 @@                        -- ^ The range of the \"as\" keyword. Retained                        --   for highlighting purposes.                      }-    deriving (Typeable, Data, Show)+    deriving (Typeable, Show)  {--------------------------------------------------------------------------     Declarations@@ -228,9 +249,8 @@ -- | Just type signatures. type TypeSignature   = Declaration --- | A constructor or field declaration is just a type signature.+-- | A data constructor declaration is just a type signature. type Constructor = TypeSignature-type Field	 = TypeSignature  {-| The representation type of a declaration. The comments indicate     which type in the intended family the constructor targets.@@ -243,10 +263,11 @@ 	| DataSig     !Range Induction Name [LamBinding] Expr -- ^ lone data signature in mutual block 	| Data        !Range Induction Name [LamBinding] (Maybe Expr) [Constructor] 	| RecordSig   !Range Name [LamBinding] Expr -- ^ lone record signature in mutual block-	| Record      !Range Name (Maybe Name) [LamBinding] (Maybe Expr) [Declaration]+	| Record      !Range Name (Maybe Induction) (Maybe Name) [LamBinding] (Maybe Expr) [Declaration]           -- ^ The optional name is a name for the record constructor. 	| Infix Fixity [Name]         | Syntax      Name Notation -- ^ notation declaration for a name+        | PatternSyn  !Range Name [Name] Pattern 	| Mutual      !Range [Declaration] 	| Abstract    !Range [Declaration] 	| Private     !Range [Declaration]@@ -257,14 +278,14 @@ 	| ModuleMacro !Range  Name ModuleApplication OpenShortHand ImportDirective 	| Module      !Range QName [TypedBindings] [Declaration] 	| Pragma      Pragma-    deriving (Typeable, Data)+    deriving (Typeable)  data ModuleApplication = SectionApp Range [TypedBindings] Expr                        | RecordModuleIFS Range QName-    deriving (Typeable, Data)+    deriving (Typeable)  data OpenShortHand = DoOpen | DontOpen-    deriving (Typeable, Data, Show)+    deriving (Typeable, Show)  -- Pragmas ---------------------------------------------------------------- @@ -281,7 +302,8 @@               -- module name.             | ImpossiblePragma !Range             | EtaPragma !Range QName-    deriving (Typeable, Data)+            | NoTerminationCheckPragma !Range+    deriving (Typeable)  --------------------------------------------------------------------------- @@ -312,8 +334,9 @@ 	vApp (AppView e es) arg = AppView e (es ++ [arg]) appView (RawApp _ (e:es)) = AppView e $ map arg es     where-	arg (HiddenArg _ e) = Arg Hidden    Relevant e-	arg e		    = Arg NotHidden Relevant (unnamed e)+	arg (HiddenArg   _ e) = Arg Hidden    Relevant e+	arg (InstanceArg _ e) = Arg Instance  Relevant e+	arg e		      = Arg NotHidden Relevant (unnamed e) appView e = AppView e []  {--------------------------------------------------------------------------@@ -328,7 +351,7 @@     AppP p p'            -> patternHead p     RawAppP _ []         -> __IMPOSSIBLE__     RawAppP _ (p:_)      -> patternHead p-    OpAppP _ name ps     -> return $ name+    OpAppP _ name ps     -> return $ unqualify name     HiddenP _ (namedPat) -> patternHead (namedThing namedPat)     ParenP _ p           -> patternHead p     WildP _              -> Nothing@@ -345,9 +368,9 @@ patternNames p =   case p of     IdentP x             -> [unqualify x]-    AppP p p'            -> concatMap patternNames [p, namedThing $ unArg p']+    AppP p p'            -> concatMap patternNames [p, namedArg p']     RawAppP _ ps         -> concatMap patternNames  ps-    OpAppP _ name ps     -> name : concatMap patternNames ps+    OpAppP _ name ps     -> unqualify name : concatMap patternNames ps     HiddenP _ (namedPat) -> patternNames (namedThing namedPat)     ParenP _ p           -> patternNames p     WildP _              -> []@@ -435,7 +458,7 @@     getRange (DataSig r _ _ _ _)       = r     getRange (Data r _ _ _ _ _)	       = r     getRange (RecordSig r _ _ _)       = r-    getRange (Record r _ _ _ _ _)      = r+    getRange (Record r _ _ _ _ _ _)    = r     getRange (Mutual r _)	       = r     getRange (Abstract r _)	       = r     getRange (Open r _ _)	       = r@@ -447,12 +470,17 @@     getRange (Module r _ _ _)	       = r     getRange (Infix f _)	       = getRange f     getRange (Syntax n _)              = getRange n+    getRange (PatternSyn r _ _ _)      = r     getRange (Pragma p)		       = getRange p  instance HasRange LHS where   getRange (LHS p ps eqns ws) = fuseRange p (fuseRange ps (eqns ++ ws))   getRange (Ellipsis r _ _ _) = r +instance HasRange LHSCore where+  getRange (LHSHead f ps) = fuseRange f ps+  getRange (LHSProj d ps1 lhscore ps2) = d `fuseRange` ps1 `fuseRange` lhscore `fuseRange` ps2+ instance HasRange RHS where     getRange AbsurdRHS = noRange     getRange (RHS e)   = getRange e@@ -469,6 +497,7 @@     getRange (ImportPragma r _)           = r     getRange (ImpossiblePragma r)         = r     getRange (EtaPragma r _)              = r+    getRange (NoTerminationCheckPragma r) = r  instance HasRange UsingOrHiding where     getRange (Using xs)	    = getRange xs@@ -500,3 +529,139 @@     getRange (HiddenP r _)	= r     getRange (InstanceP r _)	= r     getRange (DotP r _)		= r++instance KillRange AsName where+  killRange (AsName n _) = killRange1 (flip AsName noRange) n++instance KillRange BoundName where+  killRange (BName n f) = killRange2 BName n f++instance KillRange Declaration where+  killRange (TypeSig r n e)         = killRange2 (TypeSig r) n e+  killRange (Field n a)             = killRange2 Field n a+  killRange (FunClause l r w)       = killRange3 FunClause l r w+  killRange (DataSig _ i n l e)     = killRange4 (DataSig noRange) i n l e+  killRange (Data _ i n l e c)      = killRange4 (Data noRange i) n l e c+  killRange (RecordSig _ n l e)     = killRange3 (RecordSig noRange) n l e+  killRange (Record _ n mi mn k e d)= killRange6 (Record noRange) n mi mn k e d+  killRange (Infix f n)             = killRange2 Infix f n+  killRange (Syntax n no)           = killRange1 (\n -> Syntax n no) n+  killRange (PatternSyn _ n ns p)   = killRange3 (PatternSyn noRange) n ns p+  killRange (Mutual _ d)            = killRange1 (Mutual noRange) d+  killRange (Abstract _ d)          = killRange1 (Abstract noRange) d+  killRange (Private _ d)           = killRange1 (Private noRange) d+  killRange (Postulate _ t)         = killRange1 (Postulate noRange) t+  killRange (Primitive _ t)         = killRange1 (Primitive noRange) t+  killRange (Open _ q i)            = killRange2 (Open noRange) q i+  killRange (Import _ q a o i)      = killRange3 (\q a -> Import noRange q a o) q a i+  killRange (ModuleMacro _ n m o i) = killRange3 (\n m -> ModuleMacro noRange n m o) n m i+  killRange (Module _ q t d)        = killRange3 (Module noRange) q t d+  killRange (Pragma p)              = killRange1 Pragma p++instance KillRange Expr where+  killRange (Ident q)           = killRange1 Ident q+  killRange (Lit l)             = killRange1 Lit l+  killRange (QuestionMark _ n)  = QuestionMark noRange n+  killRange (Underscore _ n)    = Underscore noRange n+  killRange (RawApp _ e)        = killRange1 (RawApp noRange) e+  killRange (App _ e a)         = killRange2 (App noRange) e a+  killRange (OpApp _ n o)       = killRange2 (OpApp noRange) n o+  killRange (WithApp _ e es)    = killRange2 (WithApp noRange) e es+  killRange (HiddenArg _ n)     = killRange1 (HiddenArg noRange) n+  killRange (InstanceArg _ n)   = killRange1 (InstanceArg noRange) n+  killRange (Lam _ l e)         = killRange2 (Lam noRange) l e+  killRange (AbsurdLam _ h)     = killRange1 (AbsurdLam noRange) h+  killRange (ExtendedLam _ lrw) = killRange1 (ExtendedLam noRange) lrw+  killRange (Fun _ e1 e2)       = killRange2 (Fun noRange) e1 e2+  killRange (Pi t e)            = killRange2 Pi t e+  killRange (Set _)             = Set noRange+  killRange (Prop _)            = Prop noRange+  killRange (SetN _ n)          = SetN noRange n+  killRange (Rec _ ne)          = killRange1 (Rec noRange) ne+  killRange (RecUpdate _ e ne)  = killRange2 (RecUpdate noRange) e ne+  killRange (Let _ d e)         = killRange2 (Let noRange) d e+  killRange (Paren _ e)         = killRange1 (Paren noRange) e+  killRange (Absurd _)          = Absurd noRange+  killRange (As _ n e)          = killRange2 (As noRange) n e+  killRange (Dot _ e)           = killRange1 (Dot noRange) e+  killRange (ETel t)            = killRange1 ETel t+  killRange (QuoteGoal _ n e)   = killRange2 (QuoteGoal noRange) n e+  killRange (Quote _)           = Quote noRange+  killRange (QuoteTerm _)       = QuoteTerm noRange+  killRange (Unquote _)         = Unquote noRange+  killRange (DontCare e)        = killRange1 DontCare e++instance KillRange ImportDirective where+  killRange (ImportDirective _ u r p) =+    killRange2 (\u r -> ImportDirective noRange u r p) u r++instance KillRange ImportedName where+  killRange (ImportedModule n) = killRange1 ImportedModule n+  killRange (ImportedName   n) = killRange1 ImportedName   n++instance KillRange LamBinding where+  killRange (DomainFree h r b) = killRange2 (\h -> DomainFree h r) h b+  killRange (DomainFull t)     = killRange1 DomainFull t++instance KillRange LHS where+  killRange (LHS p ps r w)     = killRange4 LHS p ps r w+  killRange (Ellipsis _ p r w) = killRange3 (Ellipsis noRange) p r w++instance KillRange ModuleApplication where+  killRange (SectionApp _ t e)    = killRange2 (SectionApp noRange) t e+  killRange (RecordModuleIFS _ q) = killRange1 (RecordModuleIFS noRange) q++instance KillRange e => KillRange (OpApp e) where+  killRange (SyntaxBindingLambda _ l e) = killRange2 (SyntaxBindingLambda noRange) l e+  killRange (Ordinary e)                = killRange1 Ordinary e++instance KillRange Pattern where+  killRange (IdentP q)      = killRange1 IdentP q+  killRange (AppP p n)      = killRange2 AppP p n+  killRange (RawAppP _ p)   = killRange1 (RawAppP noRange) p+  killRange (OpAppP _ n p)  = killRange2 (OpAppP noRange) n p+  killRange (HiddenP _ n)   = killRange1 (HiddenP noRange) n+  killRange (InstanceP _ n) = killRange1 (InstanceP noRange) n+  killRange (ParenP _ p)    = killRange1 (ParenP noRange) p+  killRange (WildP _)       = WildP noRange+  killRange (AbsurdP _)     = AbsurdP noRange+  killRange (AsP _ n p)     = killRange2 (AsP noRange) n p+  killRange (DotP _ e)      = killRange1 (DotP noRange) e+  killRange (LitP l)        = killRange1 LitP l++instance KillRange Pragma where+  killRange (OptionsPragma _ s)           = OptionsPragma noRange s+  killRange (BuiltinPragma _ s e)         = killRange1 (BuiltinPragma noRange s) e+  killRange (CompiledDataPragma _ q s ss) = killRange1 (\q -> CompiledDataPragma noRange q s ss) q+  killRange (CompiledTypePragma _ q s)    = killRange1 (\q -> CompiledTypePragma noRange q s) q+  killRange (CompiledPragma _ q s)        = killRange1 (\q -> CompiledPragma noRange q s) q+  killRange (CompiledEpicPragma _ q s)    = killRange1 (\q -> CompiledEpicPragma noRange q s) q+  killRange (CompiledJSPragma _ q s)      = killRange1 (\q -> CompiledJSPragma noRange q s) q+  killRange (StaticPragma _ q)            = killRange1 (StaticPragma noRange) q+  killRange (ImportPragma _ s)            = ImportPragma noRange s+  killRange (ImpossiblePragma _)          = ImpossiblePragma noRange+  killRange (EtaPragma _ q)               = killRange1 (EtaPragma noRange) q+  killRange (NoTerminationCheckPragma _)  = NoTerminationCheckPragma noRange++instance KillRange Renaming where+  killRange (Renaming i n _) = killRange2 (\i n -> Renaming i n noRange) i n++instance KillRange RHS where+  killRange AbsurdRHS = AbsurdRHS+  killRange (RHS e)   = killRange1 RHS e++instance KillRange TypedBinding where+  killRange (TBind _ b e) = killRange2 (TBind noRange) b e+  killRange (TNoBind e)   = killRange1 TNoBind e++instance KillRange TypedBindings where+  killRange (TypedBindings _ t) = killRange1 (TypedBindings noRange) t++instance KillRange UsingOrHiding where+  killRange (Hiding i) = killRange1 Hiding i+  killRange (Using  i) = killRange1 Using  i++instance KillRange WhereClause where+  killRange NoWhere         = NoWhere+  killRange (AnyWhere d)    = killRange1 AnyWhere d+  killRange (SomeWhere n d) = killRange2 SomeWhere n d
src/full/Agda/Syntax/Concrete/Definitions.hs view
@@ -7,18 +7,18 @@     , DeclarationException(..)     , Nice, runNice     , niceDeclarations-    , notSoNiceDeclarations+    , notSoNiceDeclaration     ) where  import Control.Arrow ((***), (&&&)) import Control.Applicative-import Data.Generics (Typeable, Data)+import Data.Typeable (Typeable) import Data.Foldable hiding (concatMap, mapM_, notElem, elem, all) import qualified Data.Map as Map import Data.Map (Map) import Control.Monad.Error import Control.Monad.State-import Data.List+import Data.List as List import Data.Maybe import Data.Traversable (traverse) @@ -56,7 +56,7 @@             -- ^ Axioms and functions can be declared irrelevant.         | NiceField Range Fixity' Access IsAbstract Name (Arg Expr)         | PrimitiveFunction Range Fixity' Access IsAbstract Name Expr-        | NiceMutual Range [NiceDeclaration]+        | NiceMutual Range TerminationCheck [NiceDeclaration]         | NiceModule Range Access IsAbstract QName Telescope [Declaration]         | NiceModuleMacro Range Access IsAbstract Name ModuleApplication OpenShortHand ImportDirective         | NiceOpen Range QName ImportDirective@@ -64,12 +64,19 @@         | NicePragma Range Pragma         | NiceRecSig Range Fixity' Access Name [LamBinding] Expr         | NiceDataSig Range Fixity' Access Name [LamBinding] Expr-        | FunSig Range Fixity' Access Relevance Name Expr-        | FunDef  Range [Declaration] Fixity' IsAbstract Name [Clause] -- ^ block of function clauses (we have seen the type signature before)+        | NiceFunClause Range Access IsAbstract TerminationCheck Declaration+          -- ^ a uncategorized function clause, could be a function clause+          --   without type signature or a pattern lhs (e.g. for irrefutable let)x+        | FunSig Range Fixity' Access Relevance TerminationCheck Name Expr+        | FunDef  Range [Declaration] Fixity' IsAbstract TerminationCheck Name [Clause] -- ^ block of function clauses (we have seen the type signature before)         | DataDef Range Fixity' IsAbstract Name [LamBinding] [NiceConstructor]-        | RecDef Range Fixity' IsAbstract Name (Maybe (ThingWithFixity Name)) [LamBinding] [NiceDeclaration]-    deriving (Typeable, Data, Show)+        | RecDef Range Fixity' IsAbstract Name (Maybe Induction) (Maybe (ThingWithFixity Name)) [LamBinding] [NiceDeclaration]+        | NicePatternSyn Range Fixity' Name [Name] Pattern+    deriving (Typeable, Show) +-- | Termination check? (Default = True).+type TerminationCheck = Bool+ -- | Only 'Axiom's. type NiceConstructor = NiceTypeSignature @@ -79,15 +86,17 @@ -- | One clause in a function definition. There is no guarantee that the 'LHS' --   actually declares the 'Name'. We will have to check that later. data Clause = Clause Name LHS RHS WhereClause [Clause]-    deriving (Typeable, Data, Show)+    deriving (Typeable, Show)  -- | The exception type. data DeclarationException         = MultipleFixityDecls [(Name, [Fixity'])]         | MissingDefinition Name         | MissingWithClauses Name-        | MissingTypeSignature LHS+        | MissingTypeSignature LHS -- Andreas 2012-06-02: currently unused, remove after a while -- Fredrik 2012-09-20: now used, can we keep it?         | MissingDataSignature Name+        | WrongDefinition Name DataRecOrFun DataRecOrFun+        | WrongParameters Name         | NotAllowedInMutual NiceDeclaration         | UnknownNamesInFixityDecl [Name]         | Codata Range@@ -95,6 +104,7 @@         | UselessPrivate Range         | UselessAbstract Range         | AmbiguousFunClauses LHS [Name] -- ^ in a mutual block, a clause could belong to any of the @[Name]@ type signatures+        | InvalidNoTerminationCheckPragma Range     deriving (Typeable)  instance HasRange DeclarationException where@@ -103,6 +113,8 @@     getRange (MissingWithClauses x)        = getRange x     getRange (MissingTypeSignature x)      = getRange x     getRange (MissingDataSignature x)      = getRange x+    getRange (WrongDefinition x k k')      = getRange x+    getRange (WrongParameters x)           = getRange x     getRange (AmbiguousFunClauses lhs xs)  = getRange lhs     getRange (NotAllowedInMutual x)        = getRange x     getRange (UnknownNamesInFixityDecl xs) = getRange . head $ xs@@ -110,23 +122,26 @@     getRange (DeclarationPanic _)          = noRange     getRange (UselessPrivate r)            = r     getRange (UselessAbstract r)           = r+    getRange (InvalidNoTerminationCheckPragma r) = r  instance HasRange NiceDeclaration where   getRange (Axiom r _ _ _ _ _)             = r   getRange (NiceField r _ _ _ _ _)         = r-  getRange (NiceMutual r _)                = r+  getRange (NiceMutual r _ _)              = r   getRange (NiceModule r _ _ _ _ _)        = r   getRange (NiceModuleMacro r _ _ _ _ _ _) = r   getRange (NiceOpen r _ _)                = r   getRange (NiceImport r _ _ _ _)          = r   getRange (NicePragma r _)                = r   getRange (PrimitiveFunction r _ _ _ _ _) = r-  getRange (FunSig r _ _ _ _ _)            = r-  getRange (FunDef r _ _ _ _ _)            = r+  getRange (FunSig r _ _ _ _ _ _)          = r+  getRange (FunDef r _ _ _ _ _ _)          = r   getRange (DataDef r _ _ _ _ _)           = r-  getRange (RecDef r _ _ _ _ _ _)          = r+  getRange (RecDef r _ _ _ _ _ _ _)        = r   getRange (NiceRecSig r _ _ _ _ _)        = r   getRange (NiceDataSig r _ _ _ _ _)       = r+  getRange (NicePatternSyn r _ _ _ _)      = r+  getRange (NiceFunClause r _ _ _ _)       = r  instance Error DeclarationException where   noMsg  = strMsg ""@@ -147,6 +162,11 @@     pwords "Missing type signature for left hand side" ++ [pretty x]   show (MissingDataSignature x) = show $ fsep $     pwords "Missing type signature for " ++ [pretty x]+  show (WrongDefinition x k k') = show $ fsep $ pretty x :+    pwords ("has been declared as a " ++ show k +++      ", but is being defined as a " ++ show k')+  show (WrongParameters x) = show $ fsep $+    pwords "List of parameters does not match previous signature for" ++ [pretty x]   show (AmbiguousFunClauses lhs xs) = show $ fsep $     pwords "More than one matching type signature for left hand side" ++ [pretty lhs] ++     pwords "it could belong to any of:" ++ map pretty xs@@ -156,6 +176,8 @@     pwords "Using private here has no effect. Move it to the type signatures to make the definitions private."   show (UselessAbstract _)      = show $ fsep $     pwords "Using abstract here has no effect. Move it to the definitions to make them abstract."+  show (InvalidNoTerminationCheckPragma _) = show $ fsep $+    pwords "The NO_TERMINATION_CHECK pragma can only preceed a mutual block or a function definition."   show (NotAllowedInMutual nd) = show $ fsep $     [text $ decl nd] ++ pwords "are not allowed in mutual blocks"     where@@ -168,6 +190,7 @@       decl (NiceImport{})        = "Import statements"       decl (NicePragma{})        = "Pragmas"       decl (PrimitiveFunction{}) = "Primitive declarations"+      decl (NicePatternSyn{})    = "Pattern synonyms"       decl _ = __IMPOSSIBLE__   show (Codata _) =     "The codata construction has been removed. " ++@@ -183,11 +206,37 @@   | NotInMutual -- ^ we are nicifying decls not in a mutual block     deriving (Eq, Show) -data DataRecOrFun = DataName | RecName | FunName+-- | The kind of the forward declaration, remembering the parameters.+data DataRecOrFun+  = DataName Params           -- ^ name of a data with parameters+  | RecName  Params           -- ^ name of a record with parameters+  | FunName  TerminationCheck -- ^ name of a function   deriving (Eq, Ord) +type Params = [Hiding]++instance Show DataRecOrFun where+  show (DataName n) = "data type" --  "with " ++ show n ++ " visible parameters"+  show (RecName n)  = "record type" -- "with " ++ show n ++ " visible parameters"+  show (FunName{})  = "function"++isFunName :: DataRecOrFun -> Bool+isFunName (FunName{}) = True+isFunName _           = False++sameKind :: DataRecOrFun -> DataRecOrFun -> Bool+sameKind DataName{} DataName{} = True+sameKind RecName{} RecName{} = True+sameKind FunName{} FunName{} = True+sameKind _ _ = False++terminationCheck :: DataRecOrFun -> Bool+terminationCheck (FunName tc) = tc+terminationCheck _            = True++type LoneSigs = [(DataRecOrFun, Name)] data NiceEnv = NiceEnv-  { loneSigs :: [(DataRecOrFun, Name)]   -- ^ lone type signatures that wait for their fun.clauses+  { loneSigs :: LoneSigs -- ^ lone type signatures that wait for their definition   , fixs     :: Map Name Fixity'   } @@ -199,24 +248,28 @@  type Nice = StateT NiceEnv (Either DeclarationException) +{- Andreas, 2012-04-30 MOVED to Utils.Monad localState :: Nice a -> Nice a localState m = bracket get put (const m)+-}  addLoneSig :: DataRecOrFun -> Name -> Nice () addLoneSig k x = modify $ \ niceEnv -> niceEnv { loneSigs = (k, x) : loneSigs niceEnv } -removeLoneSig :: DataRecOrFun -> Name -> Nice ()-removeLoneSig k x = modify $ \ niceEnv -> niceEnv { loneSigs = delete (k, x) $ loneSigs niceEnv }+removeLoneSig :: Name -> Nice ()+removeLoneSig x = modify $ \ niceEnv ->+  niceEnv { loneSigs = filter (\ (k', x') -> x /= x') $ loneSigs niceEnv } -hasSig :: DataRecOrFun -> Name -> Nice Bool-hasSig k x = gets $ elem (k, x) . loneSigs+-- | Search for forward type signature that+getSig :: Name -> Nice (Maybe DataRecOrFun)+getSig n = gets $ fmap fst . List.find (\ (k, x) -> x == n) . loneSigs  noLoneSigs :: Nice Bool noLoneSigs = gets $ null . loneSigs -checkLoneSigs :: Nice ()-checkLoneSigs = do-  xs <- gets loneSigs+-- | Ensure that all forward declarations have been given a definition.+checkLoneSigs :: LoneSigs -> Nice ()+checkLoneSigs xs =   case xs of     []       -> return ()     (_, x):_ -> throwError $ MissingDefinition x@@ -229,14 +282,39 @@  data DeclKind = LoneSig DataRecOrFun Name | LoneDef DataRecOrFun Name | OtherDecl -declKind (FunSig _ _ _ _ x _)      = LoneSig FunName x-declKind (NiceRecSig _ _ _ x _ _)  = LoneSig RecName x-declKind (NiceDataSig _ _ _ x _ _) = LoneSig DataName x-declKind (FunDef _ _ _ _ x _)      = LoneDef FunName x-declKind (DataDef _ _ _ x _ _)     = LoneDef DataName x-declKind (RecDef _ _ _ x _ _ _)    = LoneDef RecName x-declKind _                         = OtherDecl+declKind (FunSig _ _ _ _ tc x _)      = LoneSig (FunName tc) x+declKind (NiceRecSig _ _ _ x pars _)  = LoneSig (RecName $ parameters pars) x+declKind (NiceDataSig _ _ _ x pars _) = LoneSig (DataName $ parameters pars) x+declKind (FunDef _ _ _ _ tc x _)      = LoneDef (FunName tc) x+declKind (DataDef _ _ _ x pars _)     = LoneDef (DataName $ parameters pars) x+declKind (RecDef _ _ _ x _ _ pars _)  = LoneDef (RecName $ parameters pars) x+declKind _                            = OtherDecl +-- | Compute visible parameters of a data or record signature or definition.+parameters :: [LamBinding] -> Params+parameters = List.concat . List.map numP where+  numP (DomainFree h _ _) = [h]+  numP (DomainFull (TypedBindings _ (Arg h _ (TBind _ xs _)))) = List.replicate (length xs) h+  numP (DomainFull (TypedBindings _ (Arg _ _ (TNoBind{})))) =  __IMPOSSIBLE__++{- OLD:++-- | Compute number of visible parameters of a data or record signature or definition.+numberOfPars :: [LamBinding] -> Params+numberOfPars = List.sum . List.map numP where+  numP (DomainFree NotHidden _ _) = 1+  numP (DomainFull (TypedBindings _ (Arg NotHidden _ (TBind _ xs _)))) = length xs+  numP (DomainFull (TypedBindings _ (Arg _ _ (TNoBind{})))) =  __IMPOSSIBLE__+  numP _ = 0  -- hidden / instance argument+-- | Compute number of parameters of a data or record signature or definition.+numberOfPars :: [LamBinding] -> Int+numberOfPars = List.sum . List.map numP where+  numP (DomainFree{}) = 1+  numP (DomainFull (TypedBindings _ arg)) = nP $ unArg arg where+    nP (TBind _ xs _) = length xs+    nP (TNoBind _)    = __IMPOSSIBLE__+-}+ niceDeclarations :: [Declaration] -> Nice [NiceDeclaration] niceDeclarations ds = do   fixs <- fixities ds@@ -244,7 +322,7 @@     []  -> localState $ do       put $ initNiceEnv { fixs = fixs }       ds <- nice ds-      checkLoneSigs+      checkLoneSigs =<< gets loneSigs       modify $ \s -> s { loneSigs = [] }       inferMutualBlocks ds     xs  -> throwError $ UnknownNamesInFixityDecl xs@@ -260,9 +338,10 @@       DataSig _ _ x _ _                            -> [x]       Data _ _ x _ _ cs                            -> x : concatMap declaredNames cs       RecordSig _ x _ _                            -> [x]-      Record _ x c _ _ _                           -> x : foldMap (:[]) c+      Record _ x _ c _ _ _                         -> x : foldMap (:[]) c       Infix _ _                                    -> []       Syntax _ _                                   -> []+      PatternSyn _ x _ _                           -> [x]       Mutual _ ds                                  -> concatMap declaredNames ds       Abstract _ ds                                -> concatMap declaredNames ds       Private _ ds                                 -> concatMap declaredNames ds@@ -282,76 +361,65 @@         LoneDef _ x -> __IMPOSSIBLE__         LoneSig k x -> do           addLoneSig k x-          (ds0, ds1) <- untilAllDefined ds-          (NiceMutual (getRange (d : ds0)) (d : ds0) :) <$> inferMutualBlocks ds1+          (tc, (ds0, ds1)) <- untilAllDefined (terminationCheck k) ds++          -- Record modules are, for performance reasons, not always+          -- placed in mutual blocks.+          let prefix = case (d, ds0) of+                (NiceRecSig{}, [r@RecDef{}]) -> ([d, r] ++)+                _                            ->+                  (NiceMutual (getRange (d : ds0)) tc (d : ds0) :)+          prefix <$> inferMutualBlocks ds1       where-        untilAllDefined ds = do+        untilAllDefined :: TerminationCheck+          -> [NiceDeclaration]+          -> Nice (TerminationCheck, ([NiceDeclaration], [NiceDeclaration]))+        untilAllDefined tc ds = do           done <- noLoneSigs-          if done then return ([], ds) else+          if done then return (tc, ([], ds)) else             case ds of-              []     -> __IMPOSSIBLE__ <$ checkLoneSigs+              []     -> __IMPOSSIBLE__ <$ (checkLoneSigs =<< gets loneSigs)               d : ds -> case declKind d of-                LoneSig k x -> addLoneSig    k x >> cons d (untilAllDefined ds)-                LoneDef k x -> removeLoneSig k x >> cons d (untilAllDefined ds)-                OtherDecl   -> cons d (untilAllDefined ds)+                LoneSig k x -> addLoneSig  k x >> cons d (untilAllDefined (tc && terminationCheck k) ds)+                LoneDef k x -> removeLoneSig x >> cons d (untilAllDefined (tc && terminationCheck k) ds)+                OtherDecl   -> cons d (untilAllDefined tc ds)           where-            cons d = fmap ((d :) *** id)+            cons d = fmap (id *** (d :) *** id)      nice :: [Declaration] -> Nice [NiceDeclaration]     nice [] = return []+    nice (Pragma (NoTerminationCheckPragma r) : ds@(Mutual{} : _)) = do+      ds <- nice ds+      case ds of+        NiceMutual r _ ds' : ds -> return $ NiceMutual r False ds' : ds+        _ -> __IMPOSSIBLE__+    nice (Pragma (NoTerminationCheckPragma r) : d@TypeSig{} : ds) =+      niceTypeSig False d ds+    nice (Pragma (NoTerminationCheckPragma r) : d@FunClause{} : ds) =+      niceFunClause False d ds     nice (d:ds) = do       case d of-        TypeSig rel x t -> do-           fx <- getFixity x-           -- register x as lone type signature, to recognize clauses later-           addLoneSig FunName x-           ds <- nice ds-           return $ FunSig (getRange d) fx PublicAccess rel x t : ds-        cl@(FunClause lhs _ _) -> do-          xs <- gets $ map snd . filter ((== FunName) . fst) . loneSigs-          -- for each type signature 'x' waiting for clauses, we try-          -- if we have some clauses for 'x'-          fixs <- gets fixs-          case filter (\ (x,(fits,rest)) -> not $ null fits) $-                  map (\ x -> (x, span (couldBeFunClauseOf (Map.lookup x fixs) x) $ d : ds)) xs of-            -- case: clauses match none of the sigs-            -- treat it as a function clause without a type signature-            [] -> case lhs of-              LHS p [] _ _ | IdentP (QName x) <- removeSingletonRawAppP p -> do-                ds <- nice ds-                d  <- mkFunDef Relevant x Nothing [cl] -- fun def without type signature is relevant-                return $ d ++ ds-              _ -> throwError $ MissingTypeSignature lhs-            -- case: clauses match exactly one of the sigs-            [(x,(fits,rest))] -> do-               removeLoneSig FunName x-               cs  <- mkClauses x $ expandEllipsis fits-               ds1 <- nice rest-               fx  <- getFixity x-               d   <- return $ FunDef (getRange fits) fits fx ConcreteDef x cs-               return $ d : ds1-            -- case: clauses match more than one sigs (ambiguity)-            l -> throwError $ AmbiguousFunClauses lhs (map fst l) -- "ambiguous function clause; cannot assign it uniquely to one type signature"-+        TypeSig{} -> niceTypeSig True d ds+        FunClause{} -> niceFunClause True d ds         Field x t                     -> (++) <$> niceAxioms [ d ] <*> nice ds         DataSig r CoInductive x tel t -> throwError (Codata r)         Data r CoInductive x tel t cs -> throwError (Codata r)         DataSig r Inductive   x tel t -> do-          addLoneSig DataName x+          addLoneSig (DataName $ parameters tel) x           (++) <$> dataOrRec DataDef NiceDataSig niceAxioms r x tel (Just t) Nothing                <*> nice ds         Data r Inductive x tel t cs -> do-          t <- defaultTypeSig DataName x t+          t <- defaultTypeSig (DataName $ parameters tel) x t           (++) <$> dataOrRec DataDef NiceDataSig niceAxioms r x tel t (Just cs)                <*> nice ds         RecordSig r x tel t -> do-          addLoneSig RecName x+          addLoneSig (RecName $ parameters tel) x           fx <- getFixity x           (NiceRecSig r fx PublicAccess x tel t :) <$> nice ds-        Record r x c tel t cs -> do-          t <- defaultTypeSig RecName x t+        Record r x i c tel t cs -> do+          t <- defaultTypeSig (RecName $ parameters tel) x t           c <- traverse (\c -> ThingWithFixity c <$> getFixity c) c-          (++) <$> dataOrRec (\x1 x2 x3 x4 -> RecDef x1 x2 x3 x4 c) NiceRecSig+          (++) <$> dataOrRec (\x1 x2 x3 x4 -> RecDef x1 x2 x3 x4 i c) NiceRecSig                              niceDeclarations r x tel t (Just cs)                <*> nice ds         Mutual r ds' ->@@ -376,18 +444,77 @@          Infix _ _           -> nice ds         Syntax _ _          -> nice ds+        PatternSyn r n as p -> do+          fx <- getFixity n+          (NicePatternSyn r fx n as p :) <$> nice ds         Open r x is         -> (NiceOpen r x is :) <$> nice ds         Import r x as op is -> (NiceImport r x as op is :) <$> nice ds +        Pragma (NoTerminationCheckPragma r) ->+          throwError $ InvalidNoTerminationCheckPragma r         Pragma p            -> (NicePragma (getRange p) p :) <$> nice ds +    niceFunClause :: TerminationCheck -> Declaration -> [Declaration] -> Nice [NiceDeclaration]+    niceFunClause termCheck d@(FunClause lhs _ _) ds = do+          xs <- gets $ map snd . filter (isFunName . fst) . loneSigs+          -- for each type signature 'x' waiting for clauses, we try+          -- if we have some clauses for 'x'+          fixs <- gets fixs+{- OLD CODE, a bit dense+          case filter (\ (x,(fits,rest)) -> not $ null fits) $+                  map (\ x -> (x, span (couldBeFunClauseOf (Map.lookup x fixs) x) $ d : ds)) xs of+-}+          case [ (x, (fits, rest))+               | x <- xs+               , let (fits, rest) =+                      span (couldBeFunClauseOf (Map.lookup x fixs) x) (d : ds)+               , not (null fits)+               ] of+            -- case: clauses match none of the sigs+            -- then the lhs can only be a single identifier+            -- treat it as a function clause without a type signature+            [] -> case lhs of+              LHS p [] _ _ | IdentP (QName x) <- removeSingletonRawAppP p -> do+                ds <- nice ds+                d  <- mkFunDef Relevant termCheck x Nothing [d] -- fun def without type signature is relevant+                return $ d ++ ds+              _ -> do+                ds <- nice ds+                return $ NiceFunClause (getRange d) PublicAccess ConcreteDef termCheck d : ds+-- OLD:             _ -> throwError $ MissingTypeSignature lhs+-- error now raised in ConcreteToAbstract+            -- case: clauses match exactly one of the sigs+            [(x,(fits,rest))] -> do+               removeLoneSig x+               cs  <- mkClauses x $ expandEllipsis fits+               ds1 <- nice rest+               fx  <- getFixity x+               d   <- return $ FunDef (getRange fits) fits fx ConcreteDef termCheck x cs+               return $ d : ds1+            -- case: clauses match more than one sigs (ambiguity)+            l -> throwError $ AmbiguousFunClauses lhs (map fst l) -- "ambiguous function clause; cannot assign it uniquely to one type signature"+    niceFunClause _ _ _ = __IMPOSSIBLE__++    niceTypeSig :: TerminationCheck -> Declaration -> [Declaration] -> Nice [NiceDeclaration]+    niceTypeSig termCheck d@(TypeSig rel x t) ds = do+      fx <- getFixity x+      -- register x as lone type signature, to recognize clauses later+      addLoneSig (FunName termCheck) x+      ds <- nice ds+      return $ FunSig (getRange d) fx PublicAccess rel termCheck x t : ds+    niceTypeSig _ _ _ = __IMPOSSIBLE__+     -- We could add a default type signature here, but at the moment we can't     -- infer the type of a record or datatype, so better to just fail here.+    defaultTypeSig :: DataRecOrFun -> Name -> Maybe Expr -> Nice (Maybe Expr)     defaultTypeSig k x t@Just{} = return t-    defaultTypeSig k x Nothing  =-      ifM (hasSig k x)-          (Nothing <$ removeLoneSig k x)-          (throwError $ MissingDataSignature x)+    defaultTypeSig k x Nothing  = do+      mk <- getSig x+      case mk of+        Nothing -> throwError $ MissingDataSignature x+        Just k' | k == k'       -> Nothing <$ removeLoneSig x+                | sameKind k k' -> throwError $ WrongParameters x+                | otherwise     -> throwError $ WrongDefinition x k' k      dataOrRec mkDef mkSig niceD r x tel mt mcs = do       mds <- traverse niceD mcs@@ -420,11 +547,11 @@     toPrim _                     = __IMPOSSIBLE__      -- Create a function definition.-    mkFunDef rel x mt ds0 = do+    mkFunDef rel termCheck x mt ds0 = do       cs <- mkClauses x $ expandEllipsis ds0       f  <- getFixity x-      return [ FunSig (fuseRange x t) f PublicAccess rel x t-             , FunDef (getRange ds0) ds0 f ConcreteDef x cs ]+      return [ FunSig (fuseRange x t) f PublicAccess rel termCheck x t+             , FunDef (getRange ds0) ds0 f ConcreteDef termCheck x cs ]         where           t = case mt of                 Just t  -> t@@ -512,7 +639,7 @@     isFunClauseOf x (FunClause (LHS p _ _ _) _ _) =      -- p is the whole left hand side, excluding "with" patterns and clauses       case removeSingletonRawAppP p of-        IdentP (QName q)    -> x == q+        IdentP (QName q)    -> x == q  -- lhs is just an identifier         _                   -> True             -- more complicated lhss must come with type signatures, so we just assume             -- it's part of the current definition@@ -526,22 +653,23 @@     mkOldMutual :: Range -> [NiceDeclaration] -> Nice NiceDeclaration     mkOldMutual r ds = do         -- Check that there aren't any missing definitions-        case filter (`notElem` defNames) sigNames of-          []       -> return ()-          (_, x):_ -> throwError $ MissingDefinition x+        checkLoneSigs loneNames         -- Check that there are no declarations that aren't allowed in old style mutual blocks         case [ d | (d, OtherDecl) <- zip ds $ map declKind ds ] of           []  -> return ()+          (NiceFunClause _ _ _ _ (FunClause lhs _ _)):_ -> throwError $ MissingTypeSignature lhs           d:_ -> throwError $ NotAllowedInMutual d-        return $ NiceMutual r $ sigs ++ other+        return $ NiceMutual r True $ sigs ++ other  -- termCheck is adjusted later       where         -- Pull type signatures to the top         (sigs, other) = partition isTypeSig ds         isTypeSig d | LoneSig{} <- declKind d = True         isTypeSig _ = False -        sigNames = [ (k, x) | LoneSig k x <- map declKind ds ]-        defNames = [ (k, x) | LoneDef k x <- map declKind ds ]+        sigNames  = [ (k, x) | LoneSig k x <- map declKind ds ]+        defNames  = [ (k, x) | LoneDef k x <- map declKind ds ]+        -- compute the set difference with equality just on names+        loneNames = filter (\ (_, x) -> not (List.any (\ (_, x') -> x == x') defNames)) sigNames      abstractBlock _ [] = return []     abstractBlock r ds@@ -572,11 +700,12 @@         case d of             NiceField r f a _ x e            -> NiceField r f a AbstractDef x e             PrimitiveFunction r f a _ x e    -> PrimitiveFunction r f a AbstractDef x e-            NiceMutual r ds                  -> NiceMutual r (map mkAbstract ds)+            NiceMutual r termCheck ds        -> NiceMutual r termCheck (map mkAbstract ds)             NiceModuleMacro r a _ x ma op is -> NiceModuleMacro r a AbstractDef x ma op is-            FunDef r ds f _ x cs             -> FunDef r ds f AbstractDef x (map mkAbstractClause cs)+            FunDef r ds f _ tc x cs          -> FunDef r ds f AbstractDef tc x (map mkAbstractClause cs)             DataDef r f _ x ps cs            -> DataDef r f AbstractDef x ps $ map mkAbstract cs-            RecDef r f _ x c ps cs           -> RecDef r f AbstractDef x c ps $ map mkAbstract cs+            RecDef r f _ x i c ps cs         -> RecDef r f AbstractDef x i c ps $ map mkAbstract cs+            NiceFunClause r a _ termCheck d  -> NiceFunClause r a AbstractDef termCheck d             NiceModule{}                     -> d             Axiom{}                          -> d             NicePragma{}                     -> d@@ -585,6 +714,7 @@             FunSig{}                         -> d             NiceRecSig{}                     -> d             NiceDataSig{}                    -> d+            NicePatternSyn{}                 -> d      mkAbstractClause (Clause x lhs rhs wh with) =         Clause x lhs rhs (mkAbstractWhere wh) (map mkAbstractClause with)@@ -599,18 +729,20 @@             Axiom r f _ rel x e              -> Axiom r f PrivateAccess rel x e             NiceField r f _ a x e            -> NiceField r f PrivateAccess a x e             PrimitiveFunction r f _ a x e    -> PrimitiveFunction r f PrivateAccess a x e-            NiceMutual r ds                  -> NiceMutual r (map mkPrivate ds)+            NiceMutual r termCheck ds        -> NiceMutual r termCheck (map mkPrivate ds)             NiceModule r _ a x tel ds        -> NiceModule r PrivateAccess a x tel ds             NiceModuleMacro r _ a x ma op is -> NiceModuleMacro r PrivateAccess a x ma op is-            FunSig r f _ rel x e           -> FunSig r f PrivateAccess rel x e-            NiceRecSig r f _ x ls t        -> NiceRecSig r f PrivateAccess x ls t-            NiceDataSig r f _ x ls t       -> NiceDataSig r f PrivateAccess x ls t+            FunSig r f _ rel tc x e          -> FunSig r f PrivateAccess rel tc x e+            NiceRecSig r f _ x ls t          -> NiceRecSig r f PrivateAccess x ls t+            NiceDataSig r f _ x ls t         -> NiceDataSig r f PrivateAccess x ls t+            NiceFunClause r _ a termCheck d  -> NiceFunClause r PrivateAccess a termCheck d             NicePragma _ _                   -> d             NiceOpen _ _ _                   -> d             NiceImport _ _ _ _ _             -> d             FunDef{}                         -> d             DataDef{}                        -> d             RecDef{}                         -> d+            NicePatternSyn _ _ _ _ _         -> d      mkPrivateClause (Clause x lhs rhs wh with) =         Clause x lhs rhs (mkPrivateWhere wh) (map mkPrivateClause with)@@ -652,6 +784,36 @@   _              -> fixities ds fixities [] = return $ Map.empty ++-- Andreas, 2012-04-07+-- The following function is only used twice, for building a Let, and for+-- printing an error message.+notSoNiceDeclaration :: NiceDeclaration -> Declaration+notSoNiceDeclaration d =+    case d of+      Axiom _ _ _ rel x e              -> TypeSig rel x e+      NiceField _ _ _ _ x argt         -> Field x argt+      PrimitiveFunction r _ _ _ x e    -> Primitive r [TypeSig Relevant x e]+      NiceMutual r _ ds                -> Mutual r $ map notSoNiceDeclaration ds+      NiceModule r _ _ x tel ds        -> Module r x tel ds+      NiceModuleMacro r _ _ x ma o dir -> ModuleMacro r x ma o dir+      NiceOpen r x dir                 -> Open r x dir+      NiceImport r x as o dir          -> Import r x as o dir+      NicePragma _ p                   -> Pragma p+      NiceRecSig r _ _ x bs e          -> RecordSig r x bs e+      NiceDataSig r _ _ x bs e         -> DataSig r Inductive x bs e+      NiceFunClause _ _ _ _ d          -> d+      FunSig _ _ _ rel tc x e          -> TypeSig rel x e+      FunDef r [d] _ _ _ _ _           -> d+      FunDef r ds _ _ _ _ _            -> Mutual r ds -- Andreas, 2012-04-07 Hack!+      DataDef r _ _ x bs cs            -> Data r Inductive x bs Nothing $ map notSoNiceDeclaration cs+      RecDef r _ _ x i c bs ds         -> Record r x i (unThing <$> c) bs Nothing $ map notSoNiceDeclaration ds+        where unThing (ThingWithFixity c _) = c+      NicePatternSyn r _ n as p        -> PatternSyn r n as p++{-+-- Andreas, 2012-03-08 the following function is only used twice,+-- both just on a single declaration. notSoNiceDeclarations :: [NiceDeclaration] -> [Declaration] notSoNiceDeclarations = concatMap notNice   where@@ -659,7 +821,7 @@       Axiom _ _ _ rel x e              -> [TypeSig rel x e]       NiceField _ _ _ _ x argt         -> [Field x argt]       PrimitiveFunction r _ _ _ x e    -> [Primitive r [TypeSig Relevant x e]]-      NiceMutual _ ds                  -> concatMap notNice ds+      NiceMutual _ _ ds                -> concatMap notNice ds       NiceModule r _ _ x tel ds        -> [Module r x tel ds]       NiceModuleMacro r _ _ x ma o dir -> [ModuleMacro r x ma o dir]       NiceOpen r x dir                 -> [Open r x dir]@@ -667,8 +829,10 @@       NicePragma _ p                   -> [Pragma p]       NiceRecSig r _ _ x bs e          -> [RecordSig r x bs e]       NiceDataSig r _ _ x bs e         -> [DataSig r Inductive x bs e]-      FunSig _ _ _ rel x e             -> [TypeSig rel x e]-      FunDef _ ds _ _ _ _              -> ds+      FunSig _ _ _ rel tc x e          -> [TypeSig rel x e]+      FunDef _ ds _ _ _ _ _            -> ds       DataDef r _ _ x bs cs            -> [Data r Inductive x bs Nothing $ concatMap notNice cs]       RecDef r _ _ x c bs ds           -> [Record r x (unThing <$> c) bs Nothing $ concatMap notNice ds]         where unThing (ThingWithFixity c _) = c+      NicePatternSyn r _ n as p        -> [PatternSyn r n as p]+-}
src/full/Agda/Syntax/Concrete/Name.hs view
@@ -9,7 +9,7 @@  import Data.List import Data.Maybe-import Data.Generics (Typeable, Data)+import Data.Typeable (Typeable)  import System.FilePath @@ -33,10 +33,10 @@ -} data Name = Name !Range [NamePart] 	  | NoName !Range NameId-    deriving (Typeable, Data)+    deriving (Typeable)  data NamePart = Hole | Id String-    deriving (Typeable, Data)+    deriving (Typeable)  -- | @noName_ = 'noName' 'noRange'@ noName_ :: Name@@ -124,7 +124,7 @@ --     lookup table for namespace names). data QName = Qual  Name QName            | QName Name-  deriving (Typeable, Data, Eq, Ord)+  deriving (Typeable, Eq, Ord)  -- | Top-level module names. --@@ -132,7 +132,7 @@  newtype TopLevelModuleName   = TopLevelModuleName { moduleNameParts :: [String] }-  deriving (Show, Eq, Ord, Typeable, Data)+  deriving (Show, Eq, Ord, Typeable)  -- | Turns a qualified name into a 'TopLevelModuleName'. The qualified -- name is assumed to represent a top-level module name.@@ -205,6 +205,10 @@ instance SetRange Name where   setRange r (Name _ ps)  = Name r ps   setRange r (NoName _ i) = NoName r i++instance SetRange QName where+  setRange r (QName x)  = QName (setRange r x)+  setRange r (Qual n x) = Qual (setRange r n) (setRange r x)  instance KillRange QName where   killRange (QName x) = QName $ killRange x
src/full/Agda/Syntax/Concrete/Operators.hs view
@@ -3,7 +3,7 @@ {-| The parser doesn't know about operators and parses everything as normal     function application. This module contains the functions that parses the     operators properly. For a stand-alone implementation of this see-    @src\/prototyping\/mixfix@.+    @src\/prototyping\/mixfix\/old@.      It also contains the function that puts parenthesis back given the     precedence of the context.@@ -11,14 +11,28 @@ module Agda.Syntax.Concrete.Operators     ( parseApplication     , parseLHS+    , parsePattern+    , parsePatternSyn     , paren     , mparen+    -- exports for Copatterns+    , validConPattern+    , patternAppView+    , fullParen+    , buildParser+    , parsePat+    , getDefinedNames+    , UseBoundNames(..)+    , qualifierModules+    , patternQNames     ) where  import Control.Applicative+import Control.Monad import Control.Monad.Trans import Data.Typeable import Data.Traversable (traverse)+import qualified Data.Traversable as Trav import qualified Data.Map as Map import qualified Data.Set as Set import Data.Set (Set)@@ -27,7 +41,7 @@  import Agda.Syntax.Concrete.Pretty () import Agda.Syntax.Common-import Agda.Syntax.Concrete+import Agda.Syntax.Concrete hiding (appView) import Agda.Syntax.Concrete.Operators.Parser import qualified Agda.Syntax.Abstract.Name as A import Agda.Syntax.Position@@ -36,11 +50,12 @@ import Agda.Syntax.Scope.Base import Agda.Syntax.Scope.Monad -import Agda.TypeChecking.Monad.Base (typeError, TypeError(..))+import Agda.TypeChecking.Monad.Base (typeError, TypeError(..), LHSOrPatSyn(..)) import Agda.TypeChecking.Monad.State (getScope) import Agda.TypeChecking.Monad.Options import Agda.TypeChecking.Monad.Statistics +import Agda.Utils.Either import Agda.Utils.ReadP import Agda.Utils.Monad import Agda.Utils.Tuple@@ -55,47 +70,52 @@ -- * Building the parser --------------------------------------------------------------------------- -partsInScope :: ScopeM (Set Name)-partsInScope = do-    (names, ops) <- localNames+partsInScope :: FlatScope -> ScopeM (Set QName)+partsInScope flat = do+    (names, ops) <- localNames flat     let xs = concatMap parts names ++ concatMap notationNames ops     return $ Set.fromList xs     where-        parts (NoName _ _)   = []-        parts x@(Name _ [_]) = [x]-        parts x@(Name _ xs)  = x : [ Name noRange [i] | i@(Id {}) <- xs ]+        qual xs x = foldr Qual (QName x) xs+        parts q = parts' (init $ qnameParts q) (unqualify q)+        parts' ms (NoName _ _)   = []+        parts' ms x@(Name _ [_]) = [qual ms x]+                                   -- The first part should be qualified, but not the rest+        parts' ms x@(Name _ xs)  = qual ms x : qual ms (Name noRange [first]) : [ QName $ Name noRange [i] | i <- iparts ]+          where+            first:iparts = [ i | i@(Id {}) <- xs ] +type FlatScope = Map.Map QName [AbstractName]+ -- | Compute all unqualified defined names in scope and their fixities.-getDefinedNames :: [KindOfName] -> ScopeM [(Name, Fixity')]-getDefinedNames kinds = do-  names <- nsNames . everythingInScope <$> getScope-  reportSLn "scope.operators" 20 $ "everythingInScope: " ++ show names-  return [ (x, A.nameFixity $ A.qnameName $ anameName d)-         | (x, ds) <- Map.assocs names-         , d       <- take 1 ds-         , anameKind d `elem` kinds-         ]+getDefinedNames :: [KindOfName] -> FlatScope -> [(QName, Fixity')]+getDefinedNames kinds names =+  [ (x, A.nameFixity $ A.qnameName $ anameName d)+  | (x, ds) <- Map.toList names+  , d       <- take 1 ds+  , anameKind d `elem` kinds+  ]  -- | Compute all names (first component) and operators (second component) in --   scope.-localNames :: ScopeM ([Name], [NewNotation])-localNames = do-  defs   <- getDefinedNames [DefName, ConName]+localNames :: FlatScope -> ScopeM ([QName], [NewNotation])+localNames flat = do+  let defs = getDefinedNames allKindsOfNames flat   locals <- scopeLocals <$> getScope   return $ split $ uniqBy fst $ map localOp locals ++ defs   where-    localOp (x, y) = (x, A.nameFixity y)+    localOp (x, y) = (QName x, A.nameFixity y)     split ops = ([ x | Left x <- zs], [ y | Right y <- zs ])         where             zs = concatMap opOrNot ops -    opOrNot (x, Fixity' fx syn) = Left x-                                :  case x of+    opOrNot (q, Fixity' fx syn) = Left q+                                :  case unqualify q of                                       Name _ [_] -> []-                                      _ -> [Right (x, fx, syntaxOf x)]+                                      x -> [Right (q, fx, syntaxOf x)]                                 ++ case syn of                                     [] -> []-                                    _ -> [Right (x, fx, syn)]+                                    _ -> [Right (q, fx, syn)]  data UseBoundNames = UseBoundNames | DontUseBoundNames @@ -144,13 +164,20 @@   (False,False) -> Nonfix  -notationNames :: NewNotation -> [Name]-notationNames (_, _, ps) = [Name noRange [Id x] | IdPart x <- ps ]+notationNames :: NewNotation -> [QName]+notationNames (q, _, ps) = zipWith ($) (requal : repeat QName) [Name noRange [Id x] | IdPart x <- ps ]+  where+    ms       = init (qnameParts q)+    requal x = foldr Qual (QName x) ms -buildParser :: forall e. IsExpr e => Range -> UseBoundNames -> ScopeM (ReadP e e)-buildParser r use = do-    (names, ops) <- localNames-    cons         <- getDefinedNames [ConName]+buildParser :: forall e. IsExpr e => Range -> FlatScope -> UseBoundNames -> ScopeM (ReadP e e)+buildParser r flat use = do+    (names, ops) <- localNames flat+    let cons = getDefinedNames [ConName, PatternSynName] flat+    reportSLn "scope.operators" 50 $ unlines+      [ "names = " ++ show names+      , "ops   = " ++ show ops+      , "cons  = " ++ show cons ]     let conparts   = Set.fromList $ concatMap notationNames $ map oldToNewNotation cons         opsparts   = Set.fromList $ concatMap notationNames $ ops         allParts   = Set.union conparts opsparts@@ -169,13 +196,9 @@         ++ map (nonfixP . opP p) non -- for things with no outer "holes"         ++ [ const $ atomP isAtom ]     where---        level :: NewNotation -> Nat+        level :: NewNotation -> Integer         level (_name, fixity, _syn) = fixityLevel fixity -        on f g x y = f (g x) (g y)-         isinfixl, isinfixr, isinfix, nonfix, isprefix, ispostfix :: NewNotation -> Bool          isinfixl (_, LeftAssoc _ _, syn)  = isInfix syn@@ -222,7 +245,7 @@  instance IsExpr Expr where     exprView e = case e of-        Ident (QName x) -> LocalV x+        Ident x         -> LocalV x         App _ e1 e2     -> AppV e1 e2         OpApp r d es    -> OpAppV d es         HiddenArg _ e   -> HiddenArgV e@@ -232,7 +255,7 @@         Underscore{}    -> WildV e         _               -> OtherV e     unExprView e = case e of-        LocalV x      -> Ident (QName x)+        LocalV x      -> Ident x         AppV e1 e2    -> App (fuseRange e1 e2) e1 e2         OpAppV d es   -> OpApp (fuseRange d es) d es         HiddenArgV e  -> HiddenArg (getRange e) e@@ -245,94 +268,281 @@  instance IsExpr Pattern where     exprView e = case e of-        IdentP (QName x) -> LocalV x-        AppP e1 e2       -> AppV e1 e2-        OpAppP r d es    -> OpAppV d (map Ordinary es)-        HiddenP _ e      -> HiddenArgV e-        InstanceP _ e    -> InstanceArgV e-        ParenP _ e       -> ParenV e-        WildP{}          -> WildV e-        _                -> OtherV e+        IdentP x      -> LocalV x+        AppP e1 e2    -> AppV e1 e2+        OpAppP r d es -> OpAppV d (map Ordinary es)+        HiddenP _ e   -> HiddenArgV e+        InstanceP _ e -> InstanceArgV e+        ParenP _ e    -> ParenV e+        WildP{}       -> WildV e+        _             -> OtherV e     unExprView e = case e of-        LocalV x         -> IdentP (QName x)-        AppV e1 e2       -> AppP e1 e2-        OpAppV d es      -> let ess :: [Pattern]-                                ess = (map (fromOrdinary __IMPOSSIBLE__) es)-                            in OpAppP (fuseRange d es) d ess-        HiddenArgV e     -> HiddenP (getRange e) e-        InstanceArgV e   -> InstanceP (getRange e) e-        ParenV e         -> ParenP (getRange e) e-        LamV _ _         -> __IMPOSSIBLE__-        WildV e          -> e-        OtherV e         -> e+        LocalV x       -> IdentP x+        AppV e1 e2     -> AppP e1 e2+        OpAppV d es    -> let ess :: [Pattern]+                              ess = (map (fromOrdinary __IMPOSSIBLE__) es)+                          in OpAppP (fuseRange d es) d ess+        HiddenArgV e   -> HiddenP (getRange e) e+        InstanceArgV e -> InstanceP (getRange e) e+        ParenV e       -> ParenP (getRange e) e+        LamV _ _       -> __IMPOSSIBLE__+        WildV e        -> e+        OtherV e       -> e +{- TRASH+instance IsExpr LHSCore where+    exprView e = case e of+        LHSHead f ps -> foldl AppV (LocalV f) $ map exprView ps+        LHSProj d ps1 e ps2 -> foldl AppV (LocalV d) $+          map exprView ps1 ++ exprView e : map exprView ps2+    unExprView e = LHSHead f ps+      where p :: Pattern+            p = unExprView+            (f, ps) = lhsArgs p+-} +---------------------------------------------------------------------------+-- * Helpers for pattern and lhs parsing+--------------------------------------------------------------------------- +-- Andreas, 2011-11-24 moved here from ConcreteToAbstract+lhsArgs :: Pattern -> (Name, [NamedArg Pattern])+lhsArgs p = case lhsArgs' p of+              Just (x, args) -> (x, args)+              Nothing        -> __IMPOSSIBLE__++-- | @lhsArgs' p@ splits a lhs @f ps@, given as a pattern @p@,+--   into @(f, ps)@.+lhsArgs' :: Pattern -> Maybe (Name, [NamedArg Pattern])+lhsArgs' p = case patternAppView p of+    Arg _ _ (Named _ (IdentP (QName x))) : ps -> Just (x, ps)+    _                                         -> Nothing++-- | View a pattern @p@ as a list @p0 .. pn@ where @p0@ is the identifier+--   (in most cases a constructor).+--+--  Pattern needs to be parsed already (operators resolved).+patternAppView :: Pattern -> [NamedArg Pattern]+patternAppView p = case p of+    AppP p arg    -> patternAppView p ++ [arg]+    OpAppP _ x ps -> mkHead (IdentP x) : map notHidden ps+    ParenP _ p    -> patternAppView p+    RawAppP _ _   -> __IMPOSSIBLE__+    _             -> [ mkHead p ]+  where mkHead    = Arg NotHidden Relevant . unnamed+        notHidden = Arg NotHidden Relevant . unnamed++ --------------------------------------------------------------------------- -- * Parse functions ---------------------------------------------------------------------------  -- | Returns the list of possible parses.-parsePattern :: ReadP Pattern Pattern -> Pattern -> [Pattern]-parsePattern prs p = case p of-    AppP p (Arg h r q) -> fullParen' <$> (AppP <$> parsePattern prs p <*> (Arg h r <$> traverse (parsePattern prs) q))-    RawAppP _ ps     -> fullParen' <$> (parsePattern prs =<< parse prs ps)-    OpAppP r d ps    -> fullParen' . OpAppP r d <$> mapM (parsePattern prs) ps+parsePat :: ReadP Pattern Pattern -> Pattern -> [Pattern]+parsePat prs p = case p of+    AppP p (Arg h r q) -> fullParen' <$> (AppP <$> parsePat prs p <*> (Arg h r <$> traverse (parsePat prs) q))+    RawAppP _ ps     -> fullParen' <$> (parsePat prs =<< parse prs ps)+    OpAppP r d ps    -> fullParen' . OpAppP r d <$> mapM (parsePat prs) ps     HiddenP _ _      -> fail "bad hidden argument"     InstanceP _ _    -> fail "bad instance argument"-    AsP r x p        -> AsP r x <$> parsePattern prs p+    AsP r x p        -> AsP r x <$> parsePat prs p     DotP r e         -> return $ DotP r e-    ParenP r p       -> fullParen' <$> parsePattern prs p+    ParenP r p       -> fullParen' <$> parsePat prs p     WildP _          -> return p     AbsurdP _        -> return p     LitP _           -> return p     IdentP _         -> return p  +{- Implement parsing of copattern left hand sides, e.g.++  record Tree (A : Set) : Set where+    field+      label : A+      child : Bool -> Tree A++  -- corecursive function defined by copattern matching+  alternate : {A : Set}(a b : A) -> Tree A+  -- shallow copatterns+         label (alternate a b)              = a+         child (alternate a b) True         = alternate b a+  -- deep copatterns:+  label (child (alternate a b) False)       = b+  child (child (alternate a b) False) True  = alternate a b+  child (child (alternate a b) False) False = alternate a b++  Delivers an infinite tree++                   a+              b        b+            a   a    a   a+           b b b b  b b b b+                 ...++  Each lhs is a pattern tree with a distinct path of destructors+  ("child", "label") from the root to the defined symbol ("alternate").+  All branches besides this distinct path are patterns.++  Syntax.Concrete.LHSCore represents a lhs+   - the destructor path+   - the side patterns+   - the defined function symbol+   - the applied patterns+-}++type ParseLHS = Either Pattern (Name, LHSCore)++parseLHS' :: LHSOrPatSyn -> Maybe Name -> Pattern -> ScopeM ParseLHS+parseLHS' lhsOrPatSyn top p = do+    let ms = qualifierModules $ patternQNames p+    flat <- flattenScope ms <$> getScope+    patP <- buildParser (getRange p) flat DontUseBoundNames+    let cons = getNames [ConName, PatternSynName] flat+    let flds = getNames [FldName] flat+    case [ res | p' <- parsePat patP p+               , res <- validPattern (PatternCheckConfig top cons flds) p' ] of+        [(p,lhs)] -> return lhs+        []        -> typeError $ NoParseForLHS lhsOrPatSyn p+        rs        -> typeError $ AmbiguousParseForLHS lhsOrPatSyn p $+                       map (fullParen . fst) rs+    where+        getNames kinds flat = map fst $ getDefinedNames kinds flat++        -- validPattern returns an empty or singleton list (morally a Maybe)+        validPattern :: PatternCheckConfig -> Pattern -> [(Pattern, ParseLHS)]+        validPattern conf p = case (classifyPattern conf p, top) of+            (Just r@(Left _), Nothing) -> [(p, r)] -- expect pattern+            (Just r@(Right _), Just{}) -> [(p, r)] -- expect lhs+            _ -> []++-- | Name sets for classifying a pattern.+data PatternCheckConfig = PatternCheckConfig+  { topName  :: Maybe Name  -- ^ name of defined symbol+  , conNames :: [QName]     -- ^ valid constructor names+  , fldNames :: [QName]     -- ^ valid field names+  }++-- | Returns zero or one classified patterns.+classifyPattern :: PatternCheckConfig -> Pattern -> Maybe ParseLHS+classifyPattern conf p =+  case patternAppView p of++    -- case @f ps@+    Arg _ _ (Named _ (IdentP x@(QName f))) : ps | Just f == topName conf -> do+      guard $ all validPat ps+      return $ Right (f, LHSHead f ps)++    -- case @d ps@+    Arg _ _ (Named _ (IdentP x)) : ps | x `elem` fldNames conf -> do+      -- ps0 :: [NamedArg ParseLHS]+      ps0 <- mapM classPat ps+      let (ps1, rest) = span (isLeft . namedArg) ps0+      (p2, ps3) <- uncons rest -- when (null rest): no field pattern or def pattern found+      guard $ all (isLeft . namedArg) ps3+      let (f, lhs)      = fromR p2+          (ps', _:ps'') = splitAt (length ps1) ps+      return $ Right (f, LHSProj x ps' lhs ps'')++    -- case: ordinary pattern+    _ -> do+      guard $ validConPattern (conNames conf) p+      return $ Left p++  where -- allNames = conNames conf ++ fldNames conf+        validPat = validConPattern (conNames conf) . namedArg+        classPat :: NamedArg Pattern -> Maybe (NamedArg ParseLHS)+        classPat = Trav.mapM (Trav.mapM (classifyPattern conf))+        fromR :: NamedArg (Either a (b, c)) -> (b, NamedArg c)+        fromR (Arg h r (Named n (Right (b, c)))) = (b, Arg h r (Named n c))+        fromR (Arg h r (Named n (Left  a     ))) = __IMPOSSIBLE__+++ -- | Parses a left-hand side, and makes sure that it defined the expected name. --   TODO: check the arities of constructors. There is a possible ambiguity with --   postfix constructors: --      Assume _ * is a constructor. Then 'true *' can be parsed as either the --      intended _* applied to true, or as true applied to a variable *. If we --      check arities this problem won't appear.-parseLHS :: Maybe Name -> Pattern -> ScopeM Pattern+parseLHS :: Name -> Pattern -> ScopeM LHSCore parseLHS top p = do-    patP <- buildParser (getRange p) DontUseBoundNames-    cons <- getNames [ConName]-    case filter (validPattern top cons) $ parsePattern patP p of-        [p] -> return p-        []  -> typeError $ NoParseForLHS p-        ps  -> typeError $ AmbiguousParseForLHS p $ map fullParen ps-    where-        getNames kinds = map fst <$> getDefinedNames kinds+  res <- parseLHS' IsLHS (Just top) p+  case res of+    Right (f, lhs) -> return lhs+    _ -> typeError $ NoParseForLHS IsLHS p -        validPattern :: Maybe Name -> [Name] -> Pattern -> Bool-        validPattern (Just top) cons p = case appView p of-            IdentP (QName x) : ps -> x == top && all (validPat cons) ps-            _                     -> False-        validPattern Nothing cons p = validPat cons p+-- | Parses a pattern.+--   TODO: check the arities of constructors. There is a possible ambiguity with+--   postfix constructors:+--      Assume _ * is a constructor. Then 'true *' can be parsed as either the+--      intended _* applied to true, or as true applied to a variable *. If we+--      check arities this problem won't appear.+parsePattern :: Pattern -> ScopeM Pattern+parsePattern = parsePatternOrSyn IsLHS -        validPat :: [Name] -> Pattern -> Bool-        validPat cons p = case appView p of-            [_]                   -> True-            IdentP (QName x) : ps -> elem x cons && all (validPat cons) ps-            ps                    -> all (validPat cons) ps+parsePatternSyn :: Pattern -> ScopeM Pattern+parsePatternSyn = parsePatternOrSyn IsPatSyn -        appView :: Pattern -> [Pattern]-        appView p = case p of-            AppP p a         -> appView p ++ [namedThing (unArg a)]-            OpAppP _ op ps   -> IdentP (QName op) : ps-            ParenP _ p       -> appView p-            RawAppP _ _      -> __IMPOSSIBLE__-            HiddenP _ _      -> __IMPOSSIBLE__-            InstanceP _ _    -> __IMPOSSIBLE__-            _                -> [p]+parsePatternOrSyn :: LHSOrPatSyn -> Pattern -> ScopeM Pattern+parsePatternOrSyn lhsOrPatSyn p = do+  res <- parseLHS' lhsOrPatSyn Nothing p+  case res of+    Left p -> return p+    _      -> typeError $ NoParseForLHS lhsOrPatSyn p +-- | Helper function for 'parseLHS' and 'parsePattern'.+validConPattern :: [QName] -> Pattern -> Bool+validConPattern cons p = case appView p of+    [_]           -> True+    IdentP x : ps -> elem x cons && all (validConPattern cons) ps+    _             -> False+-- Andreas, 2012-06-04: I do not know why the following line was+-- the catch-all case.  It seems that the new catch-all works also+-- and is more logical.+--    ps            -> all (validConPattern cons) ps++-- | Helper function for 'parseLHS' and 'parsePattern'.+appView :: Pattern -> [Pattern]+appView p = case p of+    AppP p a         -> appView p ++ [namedThing (unArg a)]+    OpAppP _ op ps   -> IdentP op : ps+    ParenP _ p       -> appView p+    RawAppP _ _      -> __IMPOSSIBLE__+    HiddenP _ _      -> __IMPOSSIBLE__+    InstanceP _ _    -> __IMPOSSIBLE__+    _                -> [p]++-- | Collect all names in a pattern into a list of qualified names.+patternQNames :: Pattern -> [QName]+patternQNames p = case p of+  RawAppP _ ps     -> concatMap patternQNames ps+  IdentP q         -> [q]+  ParenP _ p       -> patternQNames p+  HiddenP _ p      -> patternQNames (namedThing p)+  InstanceP _ p    -> patternQNames (namedThing p)+  OpAppP r d ps    -> __IMPOSSIBLE__+  AppP{}           -> __IMPOSSIBLE__+  AsP{}            -> __IMPOSSIBLE__+  AbsurdP{}        -> []+  WildP{}          -> []+  DotP{}           -> []+  LitP{}           -> []++-- | Return all qualifiers occuring in a list of 'QName's.+--   Each qualifier is returned as a list of names, e.g.+--   for @Data.Nat._+_@ we return the list @[Data,Nat]@.+qualifierModules :: [QName] -> [[Name]]+qualifierModules qs =+  nub $ filter (not . null) $ map (init . qnameParts) qs++-- | Parse a list of expressions into an application. parseApplication :: [Expr] -> ScopeM Expr parseApplication [e] = return e parseApplication es = do     -- Build the parser-    p <- buildParser (getRange es) UseBoundNames+    let ms = qualifierModules [ q | Ident q <- es ]+    flat <- flattenScope ms <$> getScope+    p <- buildParser (getRange es) flat UseBoundNames      -- Parse     case parse p es of@@ -340,14 +550,16 @@         []  -> do           -- When the parser fails and a name is not in scope, it is more           -- useful to say that to the user rather than just "failed".-          inScope <- partsInScope-          case [ QName x | Ident (QName x) <- es, not (Set.member x inScope) ] of+          inScope <- partsInScope flat+          case [ x | Ident x <- es, not (Set.member x inScope) ] of                []  -> typeError $ NoParseForApplication es                xs  -> typeError $ NotInScope xs          es' -> typeError $ AmbiguousParseForApplication es $ map fullParen es' --- Inserting parenthesis --------------------------------------------------+---------------------------------------------------------------------------+-- * Inserting parenthesis+---------------------------------------------------------------------------  fullParen :: IsExpr e => e -> e fullParen e = case exprView $ fullParen' e of@@ -373,7 +585,7 @@     where         par = unExprView . ParenV -paren :: Monad m => (Name -> m Fixity) -> Expr -> m (Precedence -> Expr)+paren :: Monad m => (QName -> m Fixity) -> Expr -> m (Precedence -> Expr) paren _   e@(App _ _ _)        = return $ \p -> mparen (appBrackets p) e paren f   e@(OpApp _ op _)     = do fx <- f op; return $ \p -> mparen (opBrackets fx p) e paren _   e@(Lam _ _ _)        = return $ \p -> mparen (lamBrackets p) e
src/full/Agda/Syntax/Concrete/Operators/Parser.hs view
@@ -15,11 +15,11 @@ import Agda.Utils.Impossible  data ExprView e-    = LocalV Name+    = LocalV QName     | WildV e     | OtherV e     | AppV e (NamedArg e)-    | OpAppV Name [OpApp e]+    | OpAppV QName [OpApp e]     | HiddenArgV (Named String e)     | InstanceArgV (Named String e)     | LamV [LamBinding] e@@ -63,16 +63,17 @@ -- Specific combinators  -- | Parse a specific identifier as a NamePart-partP :: IsExpr e => String -> ReadP e (Range, NamePart)-partP s = do+partP :: IsExpr e => [Name] -> String -> ReadP e Range+partP ms s = do     tok <- get-    case isLocal s tok of+    case isLocal tok of       Just p  -> return p       Nothing -> pfail     where-	isLocal x e = case exprView e of-	    LocalV (Name r [Id y]) | x == y -> Just (r, Id y)-	    _			            -> Nothing+        str = show (foldr Qual (QName (Name noRange [Id s])) ms)+	isLocal e = case exprView e of+	    LocalV y | str == show y -> Just (getRange y)+	    _			     -> Nothing  binop :: IsExpr e => ReadP e (NewNotation,Range,[e]) -> ReadP e (e -> e -> ReadP a e) binop middleP = do@@ -97,16 +98,16 @@ -- place as where the holes are discarded, however that would require a dependently -- typed function (or duplicated code) opP :: IsExpr e => ReadP e e -> NewNotation -> ReadP e (NewNotation,Range,[e])-opP p nsyn@(_,_,syn) = do-  (range,es) <- worker $ removeExternalHoles syn+opP p nsyn@(q,_,syn) = do+  (range,es) <- worker (init $ qnameParts q) $ removeExternalHoles syn   return (nsyn,range,es)- where worker [IdPart x] = do (r, part) <- partP x; return (r,[])-       worker (IdPart x : _ : xs) = do-            (r1, part)    <- partP x-	    e             <- p-	    (r2 , es) <- worker xs+ where worker ms [IdPart x] = do r <- partP ms x; return (r,[])+       worker ms (IdPart x : _ : xs) = do+            r1        <- partP ms x+	    e         <- p+	    (r2 , es) <- worker [] xs -- only the first part is qualified             return (fuseRanges r1 r2, e : es)-       worker x = __IMPOSSIBLE__ -- holes and non-holes must be alternated.+       worker _ x = __IMPOSSIBLE__ -- holes and non-holes must be alternated.         removeExternalHoles = reverse . removeLeadingHoles . reverse . removeLeadingHoles            where removeLeadingHoles = dropWhile isAHole@@ -131,7 +132,7 @@  rebuildBinding :: ExprView e -> ReadP a LamBinding   -- Andreas, 2011-04-07 put just 'Relevant' here, is this correct?-rebuildBinding (LocalV name) = return $ DomainFree NotHidden Relevant (mkBoundName_ name)+rebuildBinding (LocalV (QName name)) = return $ DomainFree NotHidden Relevant (mkBoundName_ name) rebuildBinding (WildV e)     =   return $ DomainFree NotHidden Relevant (mkBoundName_ $ Name noRange [Hole]) rebuildBinding _ = fail "variable name expected"@@ -201,7 +202,7 @@ 	    HiddenArgV e <- exprView <$> satisfy (isHidden . exprView) 	    return $ Arg Hidden Relevant e -atomP :: IsExpr e => (Name -> Bool) -> ReadP e e+atomP :: IsExpr e => (QName -> Bool) -> ReadP e e atomP p = do     e <- get     case exprView e of
src/full/Agda/Syntax/Concrete/Pretty.hs view
@@ -8,6 +8,7 @@ import Data.Char  import Agda.Syntax.Common+import Agda.Syntax.Position import Agda.Syntax.Concrete import Agda.Syntax.Fixity import Agda.Syntax.Literal@@ -46,7 +47,12 @@ pHidden NotHidden   = pretty  pRelevance :: Pretty a => Relevance -> a -> Doc+pRelevance rel a =+  let d = pretty a+  in  if render d == "_" then d else pretty rel <> d+{- pRelevance Forced     a = pretty a+pRelevance UnusedArg  a = pretty a pRelevance Relevant   a = pretty a pRelevance Irrelevant a =   let d = pretty a@@ -54,11 +60,6 @@ pRelevance NonStrict a =   let d = pretty a   in  if render d == "_" then d else text ".." <> d--{- UNUSED--- | Use for printing non-dependent function types-prettyWithRelevance :: Pretty a => Arg a -> Doc-prettyWithRelevance a = pRelevance (argRelevance a) a -}  instance Pretty (ThingWithFixity Name) where@@ -91,6 +92,7 @@  instance Pretty Relevance where   pretty Forced     = empty+  pretty UnusedArg  = empty   pretty Relevant   = empty   pretty Irrelevant = text "."   pretty NonStrict  = text ".."@@ -109,7 +111,8 @@ 	    Ident x	     -> pretty x 	    Lit l	     -> pretty l 	    QuestionMark _ n -> text "?" <> maybe empty (text . show) n-	    Underscore _ n   -> underscore <> maybe empty (text . show) n+	    Underscore _ n   -> maybe underscore text n+--	    Underscore _ n   -> underscore <> maybe empty (text . show) n 	    App _ _ _	     -> 		case appView e of 		    AppView e1 args	->@@ -118,13 +121,7 @@ -- 			    , nest 2 $ fsep $ map pretty args -- 			    ] 	    RawApp _ es   -> fsep $ map pretty es-	    OpApp _ (Name _ xs) es -> fsep $ prOp xs es-		where-		    prOp (Hole : xs) (e : es) = pretty e : prOp xs es-		    prOp (Hole : _)  []       = __IMPOSSIBLE__-		    prOp (Id x : xs) es       = text x : prOp xs es-		    prOp []	     es       = map pretty es-	    OpApp _ (NoName _ _) _ -> __IMPOSSIBLE__+	    OpApp _ q es -> fsep $ prettyOpApp q es  	    WithApp _ e es -> fsep $ 	      pretty e : map ((text "|" <+>) . pretty) es@@ -139,7 +136,7 @@             AbsurdLam _ Instance -> lambda <+> text "{{}}"             AbsurdLam _ Hidden -> lambda <+> text "{}" 	    ExtendedLam _ pes ->-		lambda <+> braces (fsep $ punctuate (text ";") (map (\(x,y,z) -> prettyClause x y z) pes))+		lambda <+> braces' (fsep $ punctuate (text ";") (map (\(x,y,z) -> prettyClause x y z) pes))                    where prettyClause lhs rhs wh = sep [ pretty lhs                                                        , nest 2 $ pretty' rhs                                                        ] $$ nest 2 (pretty wh)@@ -247,6 +244,13 @@       pThing thing (e : es) = fsep $ (text thing <+> pretty e) 			           : map ((text "|" <+>) . pretty) es +instance Show LHSCore where show = show . pretty+instance Pretty LHSCore where+  pretty (LHSHead f ps) = sep $ pretty f : map (parens . pretty) ps+  pretty (LHSProj d ps lhscore ps') = sep $+    pretty d : map (parens . pretty) ps +++    parens (pretty lhscore) : map (parens . pretty) ps'+ instance Pretty [Declaration] where   pretty = vcat . map pretty @@ -308,19 +312,25 @@ 			    , pretty e 			    ] 		    ]-	    Record _ x con tel (Just e) cs ->+	    Record _ x ind con tel me cs -> 		sep [ hsep  [ text "record" 			    , pretty x 			    , fcat (map pretty tel) 			    ]-		    , nest 2 $ hsep+		    , nest 2 $ pType me+		    ] $$ nest 2 (vcat $ pInd +++                                        pCon +++                                        map pretty cs)+              where pType (Just e) = hsep 			    [ text ":" 			    , pretty e 			    , text "where" 			    ]-		    ] $$ nest 2 (vcat $ maybe [] (\c -> [text "constructor" <+> pretty c])-                                              con ++-                                        map pretty cs)+                    pType Nothing  =+                              text "where"+                    pInd = maybe [] (\i -> [text $ show i]) ind+                    pCon = maybe [] (\c -> [text "constructor" <+> pretty c]) con+{- ELIMINATED CUT-AND-PASTE CODE 	    Record _ x con tel Nothing cs -> 		sep [ hsep  [ text "record" 			    , pretty x@@ -330,10 +340,12 @@ 		    ] $$ nest 2 (vcat $ maybe [] (\c -> [text "constructor" <+> pretty c])                                               con ++                                         map pretty cs)-+-}             Infix f xs	-> 		pretty f <+> (fsep $ punctuate comma $ map pretty xs)             Syntax n xs -> text "syntax" <+> pretty n <+> text "..."+            PatternSyn _ n as p -> text "pattern" <+> pretty n <+> fsep (map pretty as)+                                     <+> text "=" <+> pretty p 	    Mutual _ ds	    -> namedBlock "mutual" ds 	    Abstract _ ds   -> namedBlock "abstract" ds 	    Private _ ds    -> namedBlock "private" ds@@ -396,6 +408,7 @@       hsep $ [text "IMPOSSIBLE"]     pretty (EtaPragma _ x) =       hsep $ [text "ETA", pretty x]+    pretty (NoTerminationCheckPragma _) = text "NO_TERMINATION_CHECK"  instance Pretty Fixity where     pretty (LeftAssoc _ n)  = text "infixl" <+> text (show n)@@ -418,25 +431,31 @@ instance Pretty Pattern where     pretty p = 	case p of-	    IdentP x	       -> pretty x-	    AppP p1 p2	       -> sep [ pretty p1, nest 2 $ pretty p2 ]-	    RawAppP _ ps       -> fsep $ map pretty ps-	    OpAppP _ (Name _ xs) ps -> fsep $ prOp xs ps-		where-		    prOp (Hole : xs) (e : es) = pretty e : prOp xs es-		    prOp (Hole : _)  []	      = __IMPOSSIBLE__-		    prOp (Id x : xs) es       = text x : prOp xs es-		    prOp []	     []       = []-		    prOp []	     es       = map pretty es-	    OpAppP _ (NoName _ _) _ -> __IMPOSSIBLE__-	    HiddenP _ p	       -> braces' $ pretty p-	    InstanceP _ p      -> dbraces $ pretty p-	    ParenP _ p	       -> parens $ pretty p-	    WildP _	       -> underscore-	    AsP _ x p	       -> pretty x <> text "@" <> pretty p-	    DotP _ p	       -> text "." <> pretty p-	    AbsurdP _	       -> text "()"-	    LitP l	       -> pretty l+	    IdentP x      -> pretty x+	    AppP p1 p2    -> sep [ pretty p1, nest 2 $ pretty p2 ]+	    RawAppP _ ps  -> fsep $ map pretty ps+	    OpAppP _ q ps -> fsep $ prettyOpApp q ps+	    HiddenP _ p   -> braces' $ pretty p+	    InstanceP _ p -> dbraces $ pretty p+	    ParenP _ p    -> parens $ pretty p+	    WildP _       -> underscore+	    AsP _ x p     -> pretty x <> text "@" <> pretty p+	    DotP _ p      -> text "." <> pretty p+	    AbsurdP _     -> text "()"+	    LitP l        -> pretty l++prettyOpApp :: Pretty a => QName -> [a] -> [Doc]+prettyOpApp q es = prOp ms xs es+  where+    ms = init (qnameParts q)+    xs = case unqualify q of+           Name _ xs -> xs+           NoName{}  -> __IMPOSSIBLE__+    prOp ms (Hole : xs) (e : es) = pretty e : prOp ms xs es+    prOp _  (Hole : _)  []       = __IMPOSSIBLE__+    prOp ms (Id x : xs) es       = pretty (foldr Qual (QName (Name noRange $ [Id x])) ms) : prOp [] xs es+    prOp _  []	     []          = []+    prOp _  []	     es          = map pretty es  instance Pretty ImportDirective where     pretty i =
src/full/Agda/Syntax/Fixity.hs view
@@ -4,7 +4,7 @@ -} module Agda.Syntax.Fixity where -import Data.Generics (Typeable, Data)+import Data.Typeable (Typeable) import Data.Foldable import Data.Traversable @@ -18,15 +18,15 @@ data Fixity' = Fixity'     {theFixity :: Fixity,      theNotation :: Notation}-  deriving (Typeable, Data, Show, Eq)+  deriving (Typeable, Show, Eq) -data ThingWithFixity x = ThingWithFixity x Fixity' deriving (Functor,Foldable,Traversable,Typeable,Data,Show)+data ThingWithFixity x = ThingWithFixity x Fixity' deriving (Functor,Foldable,Traversable,Typeable,Show) -- | All the notation information related to a name.-type NewNotation = (Name, Fixity, Notation)+type NewNotation = (QName, Fixity, Notation)  -- | If an operator has no specific notation, recover it from its name.-oldToNewNotation :: (Name, Fixity') -> NewNotation-oldToNewNotation (name, Fixity' f []) = (name, f, syntaxOf name)+oldToNewNotation :: (QName, Fixity') -> NewNotation+oldToNewNotation (name, Fixity' f []) = (name, f, syntaxOf $ unqualify name) oldToNewNotation (name, Fixity' f syn) = (name, f, syn)  syntaxOf :: Name -> Notation@@ -41,13 +41,13 @@  defaultFixity' = Fixity' defaultFixity defaultNotation -noFixity = NonAssoc noRange (negate 666)+noFixity = NonAssoc noRange (negate 666) -- ts,ts,ts, why the number of the beast?  Revelation 13, 18  -- | Fixity of operators.-data Fixity = LeftAssoc  Range Nat-	    | RightAssoc Range Nat-	    | NonAssoc   Range Nat-    deriving (Typeable, Data, Show)+data Fixity = LeftAssoc  Range Integer+	    | RightAssoc Range Integer+	    | NonAssoc   Range Integer+    deriving (Typeable, Show)  instance Eq Fixity where     LeftAssoc _ n   == LeftAssoc _ m	= n == m@@ -55,7 +55,7 @@     NonAssoc _ n    == NonAssoc _ m	= n == m     _		    == _		= False -fixityLevel :: Fixity -> Nat+fixityLevel :: Fixity -> Integer fixityLevel (LeftAssoc	_ n) = n fixityLevel (RightAssoc _ n) = n fixityLevel (NonAssoc	_ n) = n@@ -69,7 +69,7 @@ 		| LeftOperandCtx Fixity | RightOperandCtx Fixity 		| FunctionCtx | ArgumentCtx | InsideOperandCtx                 | WithFunCtx | WithArgCtx | DotPatternCtx-    deriving (Show,Typeable,Data)+    deriving (Show,Typeable)   -- | The precedence corresponding to a possibly hidden argument.@@ -135,3 +135,11 @@     getRange (LeftAssoc  r _)	= r     getRange (RightAssoc r _)	= r     getRange (NonAssoc   r _)	= r++instance KillRange Fixity where+  killRange (LeftAssoc  _ n) = LeftAssoc  noRange n+  killRange (RightAssoc _ n) = RightAssoc noRange n+  killRange (NonAssoc   _ n) = NonAssoc   noRange n++instance KillRange Fixity' where+  killRange (Fixity' f n) = killRange1 (flip Fixity' n) f
src/full/Agda/Syntax/Info.hs view
@@ -7,7 +7,7 @@  module Agda.Syntax.Info where -import Data.Generics (Typeable, Data)+import Data.Typeable (Typeable) import Text.Show.Functions  import qualified Agda.Syntax.Concrete.Name as C@@ -15,7 +15,7 @@ import Agda.Syntax.Position import Agda.Syntax.Concrete import Agda.Syntax.Fixity-import Agda.Syntax.Scope.Base (ScopeInfo)+import Agda.Syntax.Scope.Base (ScopeInfo, emptyScopeInfo)  {--------------------------------------------------------------------------     No information@@ -31,9 +31,18 @@ 	MetaInfo { metaRange	:: Range 		 , metaScope	:: ScopeInfo 		 , metaNumber	:: Maybe Nat+                 , metaNameSuggestion :: String 		 }-  deriving (Typeable, Data, Show)+  deriving (Typeable, Show) +emptyMetaInfo :: MetaInfo+emptyMetaInfo = MetaInfo+  { metaRange          = noRange+  , metaScope          = emptyScopeInfo+  , metaNumber         = Nothing+  , metaNameSuggestion = ""+  }+ instance HasRange MetaInfo where   getRange = metaRange @@ -51,7 +60,7 @@ 	| ExprSource Range (Precedence -> Expr) 	    -- ^ Even if we store the original expression we have to know 	    --	 whether to put parenthesis around it.-  deriving (Typeable, Data, Show)+  deriving (Typeable, Show)  instance HasRange ExprInfo where   getRange (ExprRange  r  ) = r@@ -77,13 +86,16 @@                    , minfoDirective :: Maybe ImportDirective                      -- Retained for abstractToConcrete of ModuleMacro 		   }-  deriving (Typeable, Data)+  deriving (Typeable)  deriving instance (Show OpenShortHand, Show ImportDirective) => Show ModuleInfo  instance HasRange ModuleInfo where   getRange = minfoRange +instance SetRange ModuleInfo where+  setRange r i = i { minfoRange = r }+ instance KillRange ModuleInfo where   killRange m = m { minfoRange = killRange $ minfoRange m } @@ -92,7 +104,7 @@ ---------------------------------------------------------------------------  newtype LetInfo = LetRange Range-  deriving (Typeable, Data, Show)+  deriving (Typeable, Show)  instance HasRange LetInfo where   getRange (LetRange r)   = r@@ -110,7 +122,7 @@ 		, defAbstract :: IsAbstract 		, defInfo     :: DeclInfo 		}-  deriving (Typeable, Data, Show)+  deriving (Typeable, Show)  mkDefInfo :: Name -> Fixity' -> Access -> IsAbstract -> Range -> DefInfo mkDefInfo x f a ab r = DefInfo f a ab (DeclInfo x r)@@ -118,6 +130,9 @@ instance HasRange DefInfo where   getRange = getRange . defInfo +instance SetRange DefInfo where+  setRange r i = i { defInfo = setRange r (defInfo i) }+ instance KillRange DefInfo where   killRange i = i { defInfo = killRange $ defInfo i } @@ -129,20 +144,39 @@ 	DeclInfo { declName  :: Name 		 , declRange :: Range 		 }-  deriving (Typeable, Data, Show)+  deriving (Typeable, Show)  instance HasRange DeclInfo where   getRange = declRange +instance SetRange DeclInfo where+  setRange r i = i { declRange = r }+ instance KillRange DeclInfo where   killRange i = i { declRange = killRange $ declRange i }  {--------------------------------------------------------------------------+    Mutual block information+ --------------------------------------------------------------------------}++data MutualInfo =+     MutualInfo { mutualTermCheck :: Bool  -- ^ termination check (default=True)+		, mutualRange     :: Range+		}+  deriving (Typeable, Show)++instance HasRange MutualInfo where+  getRange = mutualRange++instance KillRange MutualInfo where+  killRange i = i { mutualRange = killRange $ mutualRange i }++{--------------------------------------------------------------------------     Left hand side information  --------------------------------------------------------------------------}  newtype LHSInfo = LHSRange Range-  deriving (Typeable, Data, Show)+  deriving (Typeable, Show)  instance HasRange LHSInfo where   getRange (LHSRange r) = r@@ -159,7 +193,7 @@  data PatInfo = PatRange Range 	     | PatSource Range (Precedence -> Pattern)-  deriving (Typeable, Data)+  deriving (Typeable)  instance Show PatInfo where   show (PatRange r) = "PatRange " ++ show r
src/full/Agda/Syntax/Internal.hs view
@@ -1,17 +1,23 @@ {-# LANGUAGE CPP, DeriveDataTypeable, GeneralizedNewtypeDeriving,-             DeriveFunctor, DeriveFoldable, DeriveTraversable #-}+             DeriveFunctor, DeriveFoldable, DeriveTraversable,+             TemplateHaskell,+             MultiParamTypeClasses, FlexibleInstances,+             TypeSynonymInstances #-}  module Agda.Syntax.Internal     ( module Agda.Syntax.Internal     , module Agda.Syntax.Abstract.Name+    , module Agda.Utils.Pointer     ) where  import Prelude hiding (foldr) import Control.Applicative-import Data.Generics (Typeable, Data)+import Control.Parallel+import Data.Typeable (Typeable) import Data.Foldable import Data.Traversable import Data.Function+import Data.Maybe import qualified Data.List as List  import Agda.Syntax.Position@@ -19,9 +25,11 @@ import Agda.Syntax.Literal import Agda.Syntax.Abstract.Name +import Agda.Utils.Geniplate import Agda.Utils.Monad import Agda.Utils.Size import Agda.Utils.Permutation+import Agda.Utils.Pointer  #include "../undefined.h" import Agda.Utils.Impossible@@ -33,28 +41,58 @@ --     every constant, even if the definition is an empty --     list of clauses. ---data Term = Var Nat Args-	  | Lam Hiding (Abs Term)   -- ^ terms are beta normal+data Term = Var {-# UNPACK #-} !Int Args             -- ^ @x vs@ neutral+	  | Lam Hiding (Abs Term)    -- ^ terms are beta normal 	  | Lit Literal-	  | Def QName Args-	  | Con QName Args-	  | Pi (Arg Type) (Abs Type)+	  | Def QName Args           -- ^ @f vs@, possibly a redex+	  | Con QName Args           -- ^ @c vs@+	  | Pi (Dom Type) (Abs Type) -- ^ dependent or non-dependent function space 	  | Sort Sort           | Level Level-	  | MetaV MetaId Args-          | DontCare Term  -- ^ irrelevant stuff-  deriving (Typeable, Data, Show)+	  | MetaV {-# UNPACK #-} !MetaId Args+          | DontCare Term+            -- ^ Irrelevant stuff in relevant position, but created+            --   in an irrelevant context.  Basically, an internal+            --   version of the irrelevance axiom @.irrAx : .A -> A@.+          | Shared !(Ptr Term)+            -- ^ Explicit sharing+  deriving (Typeable, Show) -data Type = El Sort Term-  deriving (Typeable, Data, Show)+-- | Type of argument lists.+--+type Args = [Arg Term] +-- | Eliminations, subsuming applications and projections.+--   Used for a view which exposes the head of a neutral term.+-- data Elim = Apply (Arg Term) | Proj QName -- ^ name of a record projection   deriving (Show) --- | Top sort (Set\omega).-topSort :: Type-topSort = El Inf (Sort Inf)+-- | Binder.+--   'Abs': The bound variable might appear in the body.+--   'NoAbs' is pseudo-binder, it does not introduce a fresh variable,+--      similar to the @const@ of Haskell.+data Abs a = Abs   { absName :: String, unAbs :: a }+               -- ^ The body has (at least) one free variable.+               --   Danger: 'unAbs' doesn't shift variables properly+           | NoAbs { absName :: String, unAbs :: a }+  deriving (Typeable, Functor, Foldable, Traversable) +-- | Types are terms with a sort annotation.+--+data Type = El { getSort :: Sort, unEl :: Term }+  deriving (Typeable, Show)++-- | Sequence of types. An argument of the first type is bound in later types+--   and so on.+data Tele a = EmptyTel+	    | ExtendTel a (Abs (Tele a))  -- ^ 'Abs' is never 'NoAbs'.+  deriving (Typeable, Show, Functor, Foldable, Traversable)++type Telescope = Tele (Dom Type)++-- | Sorts.+-- data Sort = Type Level 	  | Prop  -- ignore me           | Inf@@ -62,35 +100,266 @@             -- ^ if the free variable occurs in the second sort             --   the whole thing should reduce to Inf, otherwise             --   it's the normal Lub-  deriving (Typeable, Data, Show)+  deriving (Typeable, Show) +-- | A level is a maximum expression of 0..n plus expressions+--   each of which is a number or an atom plus a number.+-- newtype Level = Max [PlusLevel]-  deriving (Show, Typeable, Data)+  deriving (Show, Typeable)  data PlusLevel = ClosedLevel Integer                | Plus Integer LevelAtom-  deriving (Show, Typeable, Data)+  deriving (Show, Typeable)  data LevelAtom = MetaLevel MetaId Args                | BlockedLevel MetaId Term                | NeutralLevel Term                | UnreducedLevel Term-  deriving (Show, Typeable, Data)+  deriving (Show, Typeable) +-- | A meta variable identifier is just a natural number.+--+newtype MetaId = MetaId Nat+    deriving (Eq, Ord, Num, Real, Enum, Integral, Typeable)+ -- | Something where a meta variable may block reduction. data Blocked t = Blocked MetaId t                | NotBlocked t-    deriving (Typeable, Data, Eq, Ord, Functor, Foldable, Traversable)+    deriving (Typeable, Eq, Ord, Functor, Foldable, Traversable) +instance Applicative Blocked where+  pure = notBlocked+  Blocked x f  <*> e = Blocked x $ f (ignoreBlocking e)+  NotBlocked f <*> e = f <$> e+++---------------------------------------------------------------------------+-- * Definitions+---------------------------------------------------------------------------++-- | A clause is a list of patterns and the clause body should @Bind@.+--+--  The telescope contains the types of the pattern variables and the+--  permutation is how to get from the order the variables occur in+--  the patterns to the order they occur in the telescope. The body+--  binds the variables in the order they appear in the patterns.+--+--  @clauseTel ~ permute clausePerm (patternVars clausPats)@+--+--  For the purpose of the permutation and the body dot patterns count+--  as variables. TODO: Change this!+data Clause = Clause+    { clauseRange     :: Range+    , clauseTel       :: Telescope+    , clausePerm      :: Permutation+    , clausePats      :: [Arg Pattern]+    , clauseBody      :: ClauseBody+    }+  deriving (Typeable, Show)+data ClauseBody = Body Term+		| Bind (Abs ClauseBody)+		| NoBody    -- ^ for absurd clauses.+  deriving (Typeable, Show)++instance HasRange Clause where+  getRange = clauseRange++-- | Patterns are variables, constructors, or wildcards.+--   @QName@ is used in @ConP@ rather than @Name@ since+--     a constructor might come from a particular namespace.+--     This also meshes well with the fact that values (i.e.+--     the arguments we are matching with) use @QName@.+--+data Pattern = VarP String  -- name suggestion+             | DotP Term+	     | ConP QName (Maybe (Arg Type)) [Arg Pattern]+               -- ^ The type is @'Just' t@' iff the pattern is a+               -- record pattern. The scope used for the type is given+               -- by any outer scope plus the clause's telescope+               -- ('clauseTel').+	     | LitP Literal+  deriving (Typeable, Show)++-- | Extract pattern variables in left-to-right order.+--   A 'DotP' is also treated as variable (see docu for 'Clause').+patternVars :: Arg Pattern -> [Arg (Either String Term)]+patternVars (Arg h r (VarP x)     ) = [Arg h r $ Left x]+patternVars (Arg h r (DotP t)     ) = [Arg h r $ Right t]+patternVars (Arg h r (ConP _ _ ps)) = List.concat $ map patternVars ps+patternVars (Arg h r (LitP l)     ) = []++-- | Does the pattern perform a match that could fail?+properlyMatching :: Pattern -> Bool+properlyMatching VarP{} = False+properlyMatching DotP{} = False+properlyMatching LitP{} = True+properlyMatching (ConP _ mt ps) = List.or $ isNothing mt -- not a record cons+  : map (properlyMatching . unArg) ps  -- or one of subpatterns is a proper m++---------------------------------------------------------------------------+-- * Smart constructors+---------------------------------------------------------------------------++ignoreSharing :: Term -> Term+-- ignoreSharing (Shared p) = ignoreSharing $ derefPtr p+ignoreSharing v          = v++ignoreSharingType :: Type -> Type+-- ignoreSharingType (El s v) = El s (ignoreSharing v)+ignoreSharingType v = v++shared :: Term -> Term+-- shared v@Shared{}   = v+-- shared v@(Var _ []) = v+-- shared v            = Shared (newPtr v)+shared v = v++sharedType :: Type -> Type+-- sharedType (El s v) = El s (shared v)+sharedType v = v++-- | Typically m would be TCM and f would be Blocked.+updateSharedFM :: (Monad m, Applicative m, Traversable f) => (Term -> m (f Term)) -> Term -> m (f Term)+updateSharedFM f v0@(Shared p) = do+  fv <- f (derefPtr p)+  flip traverse fv $ \v ->+    case derefPtr (setPtr v p) of+      Var _ [] -> return v+      _        -> compressPointerChain v0 `pseq` return v0+updateSharedFM f v = f v++updateSharedM :: Monad m => (Term -> m Term) -> Term -> m Term+updateSharedM f v0@(Shared p) = do+  v <- f (derefPtr p)+  case derefPtr (setPtr v p) of+    Var _ [] -> return v+    _        -> compressPointerChain v0 `pseq` return v0+updateSharedM f v = f v++updateShared :: (Term -> Term) -> Term -> Term+updateShared f v0@(Shared p) =+  case derefPtr (setPtr (f $ derefPtr p) p) of+    v@(Var _ []) -> v+    _            -> compressPointerChain v0 `pseq` v0+updateShared f v = f v++pointerChain :: Term -> [Ptr Term]+pointerChain (Shared p) = p : pointerChain (derefPtr p)+pointerChain _          = []++-- Redirect all top-level pointers to point to the last pointer. So, after+-- compression there are at most two top-level indirections.+compressPointerChain :: Term -> Term+compressPointerChain v =+  case reverse $ pointerChain v of+    p:_:ps@(_:_) -> setPointers (Shared p) ps+    _            -> v+  where+    setPointers _ [] = v+    setPointers u (p : ps) =+      setPtr u p `seq` setPointers u ps++-- | An unapplied variable.+var :: Nat -> Term+var i = Var i []++-- | A dummy type.+typeDontCare :: Type+typeDontCare = El Prop (Sort Prop)++-- | Top sort (Set\omega).+topSort :: Type+topSort = El Inf (Sort Inf)++set0      = set 0+set n     = sort $ mkType n+prop      = sort Prop+sort s    = El (sSuc s) $ Sort s+varSort n = Type $ Max [Plus 0 $ NeutralLevel $ Var n []]++-- | Get the next higher sort.+sSuc :: Sort -> Sort+sSuc Prop            = mkType 1+sSuc Inf             = Inf+sSuc (DLub a b)      = DLub (sSuc a) (fmap sSuc b)+sSuc (Type l)        = Type $ levelSuc l++levelSuc (Max []) = Max [ClosedLevel 1]+levelSuc (Max as) = Max $ map inc as+  where inc (ClosedLevel n) = ClosedLevel (n + 1)+        inc (Plus n l)      = Plus (n + 1) l++mkType n = Type $ Max [ClosedLevel n | n > 0]++impossibleTerm :: String -> Int -> Term+impossibleTerm file line = Lit $ LitString noRange $ unlines+  [ "An internal error has occurred. Please report this as a bug."+  , "Location of the error: " ++ file ++ ":" ++ show line+  ]++---------------------------------------------------------------------------+-- * Handling blocked terms.+---------------------------------------------------------------------------++blockingMeta :: Blocked t -> Maybe MetaId+blockingMeta (Blocked m _) = Just m+blockingMeta (NotBlocked _) = Nothing++blocked :: MetaId -> a -> Blocked a+blocked x = Blocked x++notBlocked :: a -> Blocked a+notBlocked = NotBlocked++ignoreBlocking :: Blocked a -> a+ignoreBlocking (Blocked _ x) = x+ignoreBlocking (NotBlocked x) = x++---------------------------------------------------------------------------+-- * Simple operations on terms and types.+---------------------------------------------------------------------------++-- | Removing a topmost 'DontCare' constructor.+stripDontCare :: Term -> Term+stripDontCare v = case ignoreSharing v of+  DontCare v -> v+  _          -> v++-- | Doesn't do any reduction.+arity :: Type -> Nat+arity t = case ignoreSharing $ unEl t of+  Pi  _ b -> 1 + arity (unAbs b)+  _       -> 0++-- | Suggest a name for the first argument of a function of the given type.+argName :: Type -> String+argName = argN . ignoreSharing . unEl+    where+	argN (Pi _ b)  = "." ++ absName b+	argN _	  = __IMPOSSIBLE__++---------------------------------------------------------------------------+-- * Show instances.+---------------------------------------------------------------------------++instance Show a => Show (Abs a) where+  showsPrec p (Abs x a) = showParen (p > 0) $+    showString "Abs " . shows x . showString " " . showsPrec 10 a+  showsPrec p (NoAbs x a) = showParen (p > 0) $+    showString "NoAbs " . shows x . showString " " . showsPrec 10 a++instance Show MetaId where+    show (MetaId n) = "_" ++ show n+ instance Show t => Show (Blocked t) where   showsPrec p (Blocked m x) = showParen (p > 0) $     showString "Blocked " . shows m . showString " " . showsPrec 10 x   showsPrec p (NotBlocked x) = showsPrec p x -instance Applicative Blocked where-  pure = notBlocked-  Blocked x f  <*> e = Blocked x $ f (ignoreBlocking e)-  NotBlocked f <*> e = f <$> e+---------------------------------------------------------------------------+-- * Sized instances.+---------------------------------------------------------------------------  instance Sized Term where   size v = case v of@@ -104,6 +373,7 @@     Pi a b      -> 1 + size a + size b     Sort s      -> 1     DontCare mv -> size mv+    Shared p    -> size (derefPtr p)  instance Sized Type where   size = size . unEl@@ -113,14 +383,25 @@  instance Sized PlusLevel where   size (ClosedLevel _) = 1-  size (Plus _ a) = size a+  size (Plus _ a)      = size a  instance Sized LevelAtom where-  size (MetaLevel _ vs) = 1 + Prelude.sum (map size vs)+  size (MetaLevel _   vs) = 1 + Prelude.sum (map size vs)   size (BlockedLevel _ v) = size v-  size (NeutralLevel v) = size v+  size (NeutralLevel   v) = size v   size (UnreducedLevel v) = size v +instance Sized (Tele a) where+  size  EmptyTel	 = 0+  size (ExtendTel _ tel) = 1 + size tel++instance Sized a => Sized (Abs a) where+  size = size . unAbs++---------------------------------------------------------------------------+-- * KillRange instances.+---------------------------------------------------------------------------+ instance KillRange Term where   killRange v = case v of     Var i vs    -> killRange1 (Var i) vs@@ -133,6 +414,7 @@     Pi a b      -> killRange2 Pi a b     Sort s      -> killRange1 Sort s     DontCare mv -> killRange1 DontCare mv+    Shared p    -> Shared $ updatePtr killRange p  instance KillRange Level where   killRange (Max as) = killRange1 Max as@@ -172,156 +454,12 @@ instance KillRange a => KillRange (Abs a) where   killRange = fmap killRange --- | Type of argument lists.----type Args = [Arg Term]---- | Sequence of types. An argument of the first type is bound in later types---   and so on.-data Tele a = EmptyTel-	    | ExtendTel a (Abs (Tele a))  -- ^ Abs is never NoAbs.-  deriving (Typeable, Data, Show, Functor, Foldable, Traversable)--type Telescope = Tele (Arg Type)--instance Sized (Tele a) where-  size  EmptyTel	 = 0-  size (ExtendTel _ tel) = 1 + size tel---- | The body has (at least) one free variable.-data Abs a = Abs String a-           | NoAbs String a-  deriving (Typeable, Data, Functor, Foldable, Traversable)---- | Danger: doesn't shift variables properly-unAbs :: Abs a -> a-unAbs (Abs   _ v) = v-unAbs (NoAbs _ v) = v--absName :: Abs a -> String-absName (Abs   x _) = x-absName (NoAbs x _) = x--instance Show a => Show (Abs a) where-  showsPrec p (Abs x a) = showParen (p > 0) $-    showString "Abs " . shows x . showString " " . showsPrec 10 a-  showsPrec p (NoAbs x a) = showParen (p > 0) $-    showString "NoAbs " . shows x . showString " " . showsPrec 10 a--instance Sized a => Sized (Abs a) where-  size = size . unAbs------- Definitions------- | A clause is a list of patterns and the clause body should @Bind@.------  The telescope contains the types of the pattern variables and the---  permutation is how to get from the order the variables occur in---  the patterns to the order they occur in the telescope. The body---  binds the variables in the order they appear in the patterns.------  For the purpose of the permutation and the body dot patterns count---  as variables. TODO: Change this!-data Clause = Clause-    { clauseRange     :: Range-    , clauseTel       :: Telescope-    , clausePerm      :: Permutation-    , clausePats      :: [Arg Pattern]-    , clauseBody      :: ClauseBody-    }-  deriving (Typeable, Data, Show)-data ClauseBody = Body Term-		| Bind (Abs ClauseBody)-		| NoBody    -- ^ for absurd clauses.-  deriving (Typeable, Data, Show)--instance HasRange Clause where-  getRange = clauseRange---- | Patterns are variables, constructors, or wildcards.---   @QName@ is used in @ConP@ rather than @Name@ since---     a constructor might come from a particular namespace.---     This also meshes well with the fact that values (i.e.---     the arguments we are matching with) use @QName@.----data Pattern = VarP String  -- name suggestion-             | DotP Term-	     | ConP QName (Maybe (Arg Type)) [Arg Pattern]-               -- ^ The type is @'Just' t@' iff the pattern is a-               -- record pattern. The scope used for the type is given-               -- by any outer scope plus the clause's telescope-               -- ('clauseTel').-	     | LitP Literal-  deriving (Typeable, Data, Show)--newtype MetaId = MetaId Nat-    deriving (Eq, Ord, Num, Real, Enum, Integral, Typeable, Data)--instance Show MetaId where-    show (MetaId n) = "_" ++ show n---- | Doesn't do any reduction.-arity :: Type -> Nat-arity t = case unEl t of-  Pi  _ b -> 1 + arity (unAbs b)-  _       -> 0---- | Suggest a name for the first argument of a function of the given type.-argName :: Type -> String-argName = argN . unEl-    where-	argN (Pi _ b)  = "." ++ absName b-	argN _	  = __IMPOSSIBLE__-- ------------------------------------------------------------------------------ * Smart constructors+-- * UniverseBi instances. --------------------------------------------------------------------------- -blockingMeta :: Blocked t -> Maybe MetaId-blockingMeta (Blocked m _) = Just m-blockingMeta (NotBlocked _) = Nothing--blocked :: MetaId -> a -> Blocked a-blocked x = Blocked x--notBlocked :: a -> Blocked a-notBlocked = NotBlocked--ignoreBlocking :: Blocked a -> a-ignoreBlocking (Blocked _ x) = x-ignoreBlocking (NotBlocked x) = x--set0      = set 0-set n     = sort $ mkType n-prop      = sort Prop-sort s    = El (sSuc s) $ Sort s-varSort n = Type $ Max [Plus 0 $ NeutralLevel $ Var n []]---- | Get the next higher sort.-sSuc :: Sort -> Sort-sSuc Prop            = mkType 1-sSuc Inf             = Inf-sSuc (DLub a b)      = DLub (sSuc a) (fmap sSuc b)-sSuc (Type l)        = Type $ levelSuc l--levelSuc (Max []) = Max [ClosedLevel 1]-levelSuc (Max as) = Max $ map inc as-  where inc (ClosedLevel n) = ClosedLevel (n + 1)-        inc (Plus n l)      = Plus (n + 1) l--mkType n = Type $ Max [ClosedLevel n | n > 0]--getSort :: Type -> Sort-getSort (El s _) = s--unEl :: Type -> Term-unEl (El _ t) = t--impossibleTerm :: String -> Int -> Term-impossibleTerm file line = Lit $ LitString noRange $ unlines-  [ "An internal error has occurred. Please report this as a bug."-  , "Location of the error: " ++ file ++ ":" ++ show line-  ]+instanceUniverseBiT' [] [t| (([Type], [Clause]), Pattern) |]+instanceUniverseBiT' [] [t| (Args, Pattern)               |]+instanceUniverseBiT' [] [t| (([Type], [Clause]), Term)    |]+instanceUniverseBiT' [] [t| (Args, Term)                  |]+instanceUniverseBiT' [] [t| ([Term], Term)                |]
src/full/Agda/Syntax/Internal/Generic.hs view
@@ -22,6 +22,11 @@   traverseTermM f = traverse (traverseTermM f)   foldTerm f = foldMap (foldTerm f) +instance TermLike a => TermLike (Dom a) where+  traverseTerm  f = fmap (traverseTerm f)+  traverseTermM f = traverse (traverseTermM f)+  foldTerm f = foldMap (foldTerm f)+ instance TermLike a => TermLike [a] where   traverseTerm f = fmap (traverseTerm f)   traverseTermM f = traverse (traverseTermM f)@@ -42,6 +47,11 @@   traverseTermM f = traverse (traverseTermM f)   foldTerm f = foldMap (foldTerm f) +instance TermLike a => TermLike (Ptr a) where+  traverseTerm f = fmap (traverseTerm f)+  traverseTermM f = traverse (traverseTermM f)+  foldTerm f = foldMap (foldTerm f)+ instance TermLike Term where   traverseTerm f t = case t of     Var i xs    -> f $ Var i $ traverseTerm f xs@@ -54,6 +64,7 @@     Lit _       -> f t     Sort _      -> f t     DontCare mv -> f $ DontCare $ traverseTerm f mv+    Shared p    -> f $ Shared $ traverseTerm f p    traverseTermM f t = case t of     Var i xs    -> f =<< Var i <$> traverseTermM f xs@@ -66,6 +77,7 @@     Lit _       -> f t     Sort _      -> f t     DontCare mv -> f =<< DontCare <$> traverseTermM f mv+    Shared p    -> f =<< Shared <$> traverseTermM f p    foldTerm f t = f t `mappend` case t of     Var i xs    -> foldTerm f xs@@ -78,6 +90,7 @@     Lit _       -> mempty     Sort _      -> mempty     DontCare mv -> foldTerm f mv+    Shared p    -> foldTerm f p  instance TermLike Level where   traverseTerm f  (Max as) = Max $ traverseTerm f as@@ -115,3 +128,8 @@   traverseTerm f (El s t) = El s $ traverseTerm f t   traverseTermM f (El s t) = El s <$> traverseTermM f t   foldTerm f (El s t) = foldTerm f t++-- | Put it in a monad to make it possible to do strictly.+copyTerm :: (TermLike a, Applicative m, Monad m) => a -> m a+copyTerm = traverseTermM return+
src/full/Agda/Syntax/Literal.hs view
@@ -1,7 +1,7 @@ {-# LANGUAGE DeriveDataTypeable #-} module Agda.Syntax.Literal where -import Data.Generics (Typeable, Data)+import Data.Typeable (Typeable) import Agda.Syntax.Position import Agda.Syntax.Abstract.Name @@ -10,7 +10,18 @@ 	     | LitString Range String 	     | LitChar   Range Char              | LitQName  Range QName-  deriving (Typeable, Data, Show)+  deriving (Typeable)++instance Show Literal where+  showsPrec p l = showParen (p > 9) $ case l of+    LitInt _ n    -> sh "LitInt" n+    LitFloat _ x  -> sh "LitFloat" x+    LitString _ s -> sh "LitString" s+    LitChar _ c   -> sh "LitChar" c+    LitQName _ q  -> sh "LitQName" q+    where+      sh :: Show a => String -> a -> ShowS+      sh c x = showString (c ++ " ") . shows x  instance Eq Literal where   LitInt _ n    == LitInt _ m    = n == m
src/full/Agda/Syntax/Notation.hs view
@@ -8,7 +8,7 @@ import Control.Monad.Error (throwError) import Data.List import Data.Maybe-import Data.Generics (Typeable, Data)+import Data.Typeable (Typeable)  import System.FilePath @@ -46,7 +46,7 @@ data GenPart = BindHole Int  -- ^ Argument is the position of the hole (with binding) where the binding should occur.              | NormalHole Int -- ^ Argument is where the expression should go              | IdPart String-  deriving (Data, Typeable, Show, Eq)+  deriving (Typeable, Show, Eq)  -- | Get a flat list of identifier parts of a notation. stringParts :: Notation -> [String]
src/full/Agda/Syntax/Parser.hs view
@@ -24,7 +24,6 @@ import qualified Agda.Syntax.Parser.Monad as M import qualified Agda.Syntax.Parser.Parser as P import Agda.Syntax.Parser.Lexer-import Agda.Syntax.Strict import Agda.Syntax.Concrete import Agda.Syntax.Parser.Tokens @@ -33,11 +32,11 @@ ------------------------------------------------------------------------ -- Wrapping parse results -wrap :: Strict a => ParseResult a -> a+wrap :: ParseResult a -> a wrap (ParseOk _ x)	= x wrap (ParseFailed err)	= throw err -wrapM:: (Strict a, Monad m) => m (ParseResult a) -> m a+wrapM:: Monad m => m (ParseResult a) -> m a wrapM m =     do	r <- m 	case r of@@ -54,25 +53,25 @@   , parseFlags :: ParseFlags   } -parse :: Strict a => Parser a -> String -> IO a+parse :: Parser a -> String -> IO a parse p = wrapM . return . M.parse (parseFlags p) [normal] (parser p) -parseFile :: Strict a => Parser a -> AbsolutePath -> IO a+parseFile :: Parser a -> AbsolutePath -> IO a parseFile p = wrapM . M.parseFile (parseFlags p) [normal] (parser p) -parseLiterate :: Strict a => Parser a -> String -> IO a+parseLiterate :: Parser a -> String -> IO a parseLiterate p =   wrapM . return . M.parse (parseFlags p) [literate, code] (parser p) -parseLiterateFile :: Strict a => Parser a -> AbsolutePath -> IO a+parseLiterateFile :: Parser a -> AbsolutePath -> IO a parseLiterateFile p =   wrapM . M.parseFile (parseFlags p) [literate, code] (parser p) -parsePosString :: Strict a => Parser a -> Position -> String -> IO a+parsePosString :: Parser a -> Position -> String -> IO a parsePosString p pos =   wrapM . return . M.parsePosString pos (parseFlags p) [normal] (parser p) -parseFile' :: Strict a => Parser a -> AbsolutePath -> IO a+parseFile' :: Parser a -> AbsolutePath -> IO a parseFile' p file =   if "lagda" `isSuffixOf` filePath file then     Agda.Syntax.Parser.parseLiterateFile p file
src/full/Agda/Syntax/Parser/LexActions.hs view
@@ -215,7 +215,9 @@ 	    [x]	-> return $ tok $ Left  x 	    xs	-> return $ tok $ Right xs     where-	-- Compute the ranges for the substrings (separated by '.') of a name.+	-- Compute the ranges for the substrings (separated by '.') of+	-- a name. Dots are included: the intervals generated for+	-- "A.B.x" correspond to "A.", "B." and "x". 	mkName :: Interval -> [String] -> [(Interval, String)] 	mkName _ []	= [] 	mkName i [x]	= [(i, x)]@@ -223,9 +225,9 @@ 	    where 		p0 = iStart i 		p1 = iEnd i-		p' = movePosByString p0 x+		p' = movePos (movePosByString p0 x) '.' 		i0 = Interval p0 p'-		i1 = Interval (movePos p' '.') p1+		i1 = Interval p' p1   {--------------------------------------------------------------------------
src/full/Agda/Syntax/Parser/Lexer.x view
@@ -73,22 +73,23 @@ <pragma_> $white_notab ;  -- Pragmas-<0,code>    "{-#"		{ begin pragma }-<pragma_>   "{-#"		{ symbol SymOpenPragma }-<pragma_>   "#-}"		{ endWith $ symbol SymClosePragma }-<pragma_>   "OPTIONS"		{ keyword KwOPTIONS }-<pragma_>   "BUILTIN"		{ keyword KwBUILTIN }-<pragma_>   "COMPILED_DATA"	{ keyword KwCOMPILED_DATA }-<pragma_>   "COMPILED_TYPE"	{ keyword KwCOMPILED_TYPE }-<pragma_>   "COMPILED"	        { keyword KwCOMPILED }-<pragma_>   "COMPILED_EPIC"     { keyword KwCOMPILED_EPIC }-<pragma_>   "COMPILED_JS"       { keyword KwCOMPILED_JS }-<pragma_>   "STATIC"            { keyword KwSTATIC }-<pragma_>   "IMPORT"	        { keyword KwIMPORT }-<pragma_>   "IMPOSSIBLE"	{ keyword KwIMPOSSIBLE }-<pragma_>   "ETA"               { keyword KwETA }-<pragma_>   "LINE"		{ keyword KwLINE }-<pragma_>   . # [ $white ] +    { withInterval $ TokString }+<0,code>    "{-#"		   { begin pragma }+<pragma_>   "{-#"		   { symbol SymOpenPragma }+<pragma_>   "#-}"		   { endWith $ symbol SymClosePragma }+<pragma_>   "OPTIONS"              { keyword KwOPTIONS }+<pragma_>   "BUILTIN"              { keyword KwBUILTIN }+<pragma_>   "COMPILED_DATA"        { keyword KwCOMPILED_DATA }+<pragma_>   "COMPILED_TYPE"        { keyword KwCOMPILED_TYPE }+<pragma_>   "COMPILED"             { keyword KwCOMPILED }+<pragma_>   "COMPILED_EPIC"        { keyword KwCOMPILED_EPIC }+<pragma_>   "COMPILED_JS"          { keyword KwCOMPILED_JS }+<pragma_>   "STATIC"               { keyword KwSTATIC }+<pragma_>   "IMPORT"               { keyword KwIMPORT }+<pragma_>   "IMPOSSIBLE"           { keyword KwIMPOSSIBLE }+<pragma_>   "ETA"                  { keyword KwETA }+<pragma_>   "NO_TERMINATION_CHECK" { keyword KwNO_TERMINATION_CHECK }+<pragma_>   "LINE"                 { keyword KwLINE }+<pragma_>   . # [ $white ] +       { withInterval $ TokString }  -- Comments     -- We need to rule out pragmas here. Usually longest match would take@@ -142,6 +143,8 @@ <0,code> codata		{ keyword KwCoData } <0,code> record		{ keyword KwRecord } <0,code> constructor    { keyword KwConstructor }+<0,code> inductive      { keyword KwInductive }+<0,code> coinductive    { keyword KwCoInductive } <0,code> infix		{ keyword KwInfix } <0,code> infixl		{ keyword KwInfixL } <0,code> infixr		{ keyword KwInfixR }@@ -156,7 +159,8 @@ <0,code> quote		{ keyword KwQuote } <0,code> quoteTerm	{ keyword KwQuoteTerm } <0,code> unquote	{ keyword KwUnquote }-<0,code> syntax         { keyword KwSyntax }+<0,code> syntax		{ keyword KwSyntax }+<0,code> pattern	{ keyword KwPatternSyn }  -- The parser is responsible to put the lexer in the imp_dir_ state when it -- expects an import directive keyword. This means that if you run the
src/full/Agda/Syntax/Parser/Parser.y view
@@ -1,9 +1,20 @@ { {-# OPTIONS_GHC -fno-warn-incomplete-patterns                 -fno-warn-deprecated-flags #-}-{-# LANGUAGE BangPatterns #-}+{-# LANGUAGE BangPatterns, PatternGuards #-} {-| The parser is generated by Happy (<http://www.haskell.org/happy>).--}+ -+ - Ideally, ranges should be as precise as possible, to get messages that+ - emphasize precisely the faulting term(s) upon error.+ -+ - However, interactive highlighting is only applied at the end of each+ - mutual block, keywords are only highlighted once (see+ - `TypeChecking.Rules.Decl'). So if the ranges of two declarations+ - interleave, one must ensure that keyword ranges are not included in+ - the intersection. (Otherwise they are uncolored by the interactive+ - highlighting.)+ -+ -} module Agda.Syntax.Parser.Parser (       moduleParser     , exprParser@@ -31,9 +42,11 @@ import Agda.Syntax.Notation import Agda.Syntax.Literal +import Agda.Utils.Hash import Agda.Utils.Monad import Agda.Utils.QuickCheck import Agda.Utils.TestHelpers+import Agda.Utils.Tuple }  %name tokensParser Tokens@@ -69,6 +82,8 @@     'codata'        { TokKeyword KwCoData $$ }     'record'        { TokKeyword KwRecord $$ }     'constructor'   { TokKeyword KwConstructor $$ }+    'inductive'     { TokKeyword KwInductive $$ }+    'coinductive'   { TokKeyword KwCoInductive $$ }     'field'         { TokKeyword KwField $$ }     'infix'         { TokKeyword KwInfix $$ }     'infixl'        { TokKeyword KwInfixL $$ }@@ -80,11 +95,13 @@     'Set'           { TokKeyword KwSet $$ }     'forall'        { TokKeyword KwForall $$ }     'syntax'        { TokKeyword KwSyntax $$ }+    'pattern'       { TokKeyword KwPatternSyn $$ }     'OPTIONS'       { TokKeyword KwOPTIONS $$ }     'BUILTIN'       { TokKeyword KwBUILTIN $$ }     'IMPORT'        { TokKeyword KwIMPORT $$ }     'IMPOSSIBLE'    { TokKeyword KwIMPOSSIBLE $$ }     'ETA'           { TokKeyword KwETA $$ }+    'NO_TERMINATION_CHECK' { TokKeyword KwNO_TERMINATION_CHECK $$ }     'COMPILED'      { TokKeyword KwCOMPILED $$ }     'COMPILED_DATA' { TokKeyword KwCOMPILED_DATA $$ }     'COMPILED_TYPE' { TokKeyword KwCOMPILED_TYPE $$ }@@ -168,6 +185,8 @@     | 'codata'	    { TokKeyword KwCoData $1 }     | 'record'	    { TokKeyword KwRecord $1 }     | 'constructor' { TokKeyword KwConstructor $1 }+    | 'inductive'   { TokKeyword KwInductive $1 }+    | 'coinductive' { TokKeyword KwCoInductive $1 }     | 'field'       { TokKeyword KwField $1 }     | 'infix'	    { TokKeyword KwInfix $1 }     | 'infixl'	    { TokKeyword KwInfixL $1 }@@ -179,6 +198,7 @@     | 'Set'	    { TokKeyword KwSet $1 }     | 'forall'	    { TokKeyword KwForall $1 }     | 'syntax'      { TokKeyword KwSyntax $1 }+    | 'pattern'     { TokKeyword KwPatternSyn $1 }     | 'OPTIONS'	    { TokKeyword KwOPTIONS $1 }     | 'BUILTIN'     { TokKeyword KwBUILTIN $1 }     | 'IMPORT'      { TokKeyword KwIMPORT $1 }@@ -190,6 +210,7 @@     | 'STATIC'       { TokKeyword KwSTATIC $1 }     | 'IMPOSSIBLE'    { TokKeyword KwIMPOSSIBLE $1 }     | 'ETA'           { TokKeyword KwETA $1 }+    | 'NO_TERMINATION_CHECK' { TokKeyword KwNO_TERMINATION_CHECK $1 }     | 'quoteGoal'     { TokKeyword KwQuoteGoal $1 }     | 'quote'         { TokKeyword KwQuote $1 }     | 'quoteTerm'     { TokKeyword KwQuoteTerm $1 }@@ -315,7 +336,7 @@ 	 posPos (fromJust (rStart (getRange $1))) > 2       then parseErrorAt (fromJust (rStart (getRange $2))) 	 "Expecting '}}', found separated '}'s."-      else return $ fuseRange (getRange $1) (getRange ($2))+      else return $ getRange ($1, $2)     }  {- UNUSED@@ -486,7 +507,9 @@ Expr   : TeleArrow Expr                      { Pi $1 $2 }   | 'forall' ForallBindings Expr        { forallPi $2 $3 }-  | Application3 '->' Expr              { Fun (fuseRange $1 $3) (RawApp (getRange $1) $1) $3 }+  | Application3 '->' Expr              { Fun (getRange ($1,$2,$3))+                                              (RawApp (getRange $1) $1)+                                              $3 }   | Expr1 %prec LOWEST                  { $1 }  -- Level 1: Application@@ -509,8 +532,15 @@  -- Level 2: Lambdas and lets Expr2-    : '\\' LamBindings Expr	   { Lam (fuseRange $1 $3) $2 $3 }-    | '\\'  '{' LamClauses '}'     { ExtendedLam (fuseRange $1 (fuseRange $2 $4)) (reverse $3) }+    : '\\' LamBindings Expr	   { Lam (getRange ($1,$2,$3)) $2 $3 }+    | ExtendedOrAbsurdLam          { $1 }+    | 'let' Declarations 'in' Expr { Let (getRange ($1,$2,$3,$4)) $2 $4 }+    | Expr3			   { $1 }+    | 'quoteGoal' Id 'in' Expr     { QuoteGoal (getRange ($1,$2,$3,$4)) $2 $4 }++ExtendedOrAbsurdLam :: { Expr }+ExtendedOrAbsurdLam+    : '\\'  '{' LamClauses '}'     { ExtendedLam (getRange ($1,$2,$3,$4)) (reverse $3) }     | '\\' AbsurdLamBindings       {% case $2 of                                        Left (bs, h) -> if null bs then return $ AbsurdLam r h else                                                        return $ Lam r bs (AbsurdLam r h)@@ -520,9 +550,6 @@                                                      return $ ExtendedLam (fuseRange $1 es)                                                                      [(p [] [], AbsurdRHS, NoWhere)]                                    }-    | 'let' Declarations 'in' Expr { Let (fuseRange $1 $4) $2 $4 }-    | Expr3			   { $1 }-    | 'quoteGoal' Id 'in' Expr     { QuoteGoal (getRange ($1,$4)) $2 $4}  Application3 :: { [Expr] } Application3@@ -531,8 +558,9 @@  -- Level 3: Atoms Expr3Curly-    : '{' Expr '}'			{ HiddenArg (fuseRange $1 $3) (unnamed $2) }-    | '{' Id '=' Expr '}'		{ HiddenArg (fuseRange $1 $5) (named (show $2) $4) }+    : '{' Expr '}'			{ HiddenArg (getRange ($1,$2,$3)) (unnamed $2) }+    | '{' Id '=' Expr '}'		{ HiddenArg (getRange ($1,$2,$3,$4,$5))+                                            (named (show $2) $4) }     | '{' '}'				{ let r = fuseRange $1 $2 in HiddenArg r $ unnamed $ Absurd r }  Expr3NoCurly@@ -546,15 +574,17 @@     | 'quoteTerm'                       { QuoteTerm (getRange $1) }     | 'unquote'                         { Unquote (getRange $1) }     | setN				{ SetN (getRange (fst $1)) (snd $1) }-    | '{{' Expr DoubleCloseBrace			{ InstanceArg (fuseRange $1 $3) (unnamed $2) }-    | '{{' Id '=' Expr DoubleCloseBrace		{ InstanceArg (fuseRange $1 $5) (named (show $2) $4) }-    | '(' Expr ')'			{ Paren (fuseRange $1 $3) $2 }+    | '{{' Expr DoubleCloseBrace			{ InstanceArg (getRange ($1,$2,$3))+                                                          (unnamed $2) }+    | '{{' Id '=' Expr DoubleCloseBrace		{ InstanceArg (getRange ($1,$2,$3,$4,$5))+                                                          (named (show $2) $4) }+    | '(' Expr ')'			{ Paren (getRange ($1,$2,$3)) $2 }     | '(' ')'				{ Absurd (fuseRange $1 $2) }     | '{{' DoubleCloseBrace             { let r = fuseRange $1 $2 in InstanceArg r $ unnamed $ Absurd r }-    | Id '@' Expr3			{ As (fuseRange $1 $3) $1 $3 }+    | Id '@' Expr3			{ As (getRange ($1,$2,$3)) $1 $3 }     | '.' Expr3				{ Dot (fuseRange $1 $2) $2 }-    | 'record' '{' FieldAssignments '}' { Rec (getRange ($1,$4)) $3 }-    | 'record' Expr3NoCurly '{' FieldAssignments '}' { RecUpdate (getRange ($1,$5)) $2 $4 }+    | 'record' '{' FieldAssignments '}' { Rec (getRange ($1,$2,$3,$4)) $3 }+    | 'record' Expr3NoCurly '{' FieldAssignments '}' { RecUpdate (getRange ($1,$2,$3,$4,$5)) $2 $4 }  Expr3     : Expr3Curly			{ $1 }@@ -595,20 +625,21 @@ -- Andreas, 2011-04-27: or ..(x1 .. xn : A) or ..{y1 .. ym : B} TypedBindings :: { TypedBindings } TypedBindings-    : '.' '(' TBind ')'    { TypedBindings (fuseRange $2 $4) (Arg NotHidden         Irrelevant $3) }-    | '.' '{' TBind '}'    { TypedBindings (fuseRange $2 $4) (Arg Hidden            Irrelevant $3) }-    | '.' '{{' TBind DoubleCloseBrace  { TypedBindings (fuseRange $1 $3) (Arg Instance Irrelevant $3) }-    | '..' '(' TBind ')'    { TypedBindings (fuseRange $2 $4) (Arg NotHidden         NonStrict $3) }-    | '..' '{' TBind '}'    { TypedBindings (fuseRange $2 $4) (Arg Hidden            NonStrict $3) }-    | '..' '{{' TBind DoubleCloseBrace  { TypedBindings (fuseRange $1 $3) (Arg Instance NonStrict $3) }-    | '(' TBind ')'        { TypedBindings (fuseRange $1 $3) (Arg NotHidden         Relevant $2) }-    | '{{' TBind DoubleCloseBrace      { TypedBindings (fuseRange $1 $3) (Arg Instance Relevant $2) }-    | '{' TBind '}'        { TypedBindings (fuseRange $1 $3) (Arg Hidden            Relevant $2) }+    : '.' '(' TBind ')'    { TypedBindings (getRange ($2,$3,$4)) (Arg NotHidden         Irrelevant $3) }+    | '.' '{' TBind '}'    { TypedBindings (getRange ($2,$3,$4)) (Arg Hidden            Irrelevant $3) }+    | '.' '{{' TBind DoubleCloseBrace  { TypedBindings (getRange ($2,$3,$4))+                                         (Arg Instance Irrelevant $3) }+    | '..' '(' TBind ')'    { TypedBindings (getRange ($2,$3,$4)) (Arg NotHidden         NonStrict $3) }+    | '..' '{' TBind '}'    { TypedBindings (getRange ($2,$3,$4)) (Arg Hidden            NonStrict $3) }+    | '..' '{{' TBind DoubleCloseBrace  { TypedBindings (getRange ($2,$3,$4)) (Arg Instance NonStrict $3) }+    | '(' TBind ')'        { TypedBindings (getRange ($1,$2,$3)) (Arg NotHidden         Relevant $2) }+    | '{{' TBind DoubleCloseBrace      { TypedBindings (getRange ($1,$2,$3)) (Arg Instance Relevant $2) }+    | '{' TBind '}'        { TypedBindings (getRange ($1,$2,$3)) (Arg Hidden            Relevant $2) }   -- x1 .. xn:A TBind :: { TypedBinding }-TBind : CommaBIds ':' Expr  { TBind (fuseRange $1 $3) (map mkBoundName_ $1) $3 }+TBind : CommaBIds ':' Expr  { TBind (getRange ($1,$2,$3)) (map mkBoundName_ $1) $3 }   -- A non-empty sequence of lambda bindings.@@ -747,11 +778,11 @@  --------------------------------------------------------------------------}  -- You can rename imports-ImportImportDirective :: { (Maybe AsName, ImportDirective) }-ImportImportDirective-    : ImportDirective	    { (Nothing, $1) }-    | id Id ImportDirective {% isName "as" $1 >>-                               return (Just (AsName $2 (getRange (fst $1))), $3) }+-- ImportImportDirective :: { (Maybe AsName, ImportDirective) }+-- ImportImportDirective+--     : ImportDirective	    { (Nothing, $1) }+--     | id Id ImportDirective {% isName "as" $1 >>+--                                return (Just (AsName $2 (getRange (fst $1))), $3) }  -- Import directives ImportDirective :: { ImportDirective }@@ -768,17 +799,17 @@     : UsingOrHiding RenamingDir	{ ImportDirective (fuseRange (snd $1) (snd $2)) (fst $1) (fst $2) False }     | RenamingDir		{ ImportDirective (getRange (snd $1)) (Hiding []) (fst $1) False }     | UsingOrHiding		{ ImportDirective (getRange (snd $1)) (fst $1) [] False }-    | {- empty -}		{ ImportDirective noRange (Hiding []) [] False }+    | {- empty -}		{ defaultImportDir }  UsingOrHiding :: { (UsingOrHiding , Range) } UsingOrHiding-    : 'using' '(' CommaImportNames ')'   { (Using $3 , fuseRange $1 $4) }+    : 'using' '(' CommaImportNames ')'   { (Using $3 , getRange ($1,$2,$3,$4)) } 	-- only using can have an empty list-    | 'hiding' '(' CommaImportNames1 ')' { (Hiding $3 , fuseRange $1 $4) }+    | 'hiding' '(' CommaImportNames1 ')' { (Hiding $3 , getRange ($1,$2,$3,$4)) }  RenamingDir :: { ([Renaming] , Range) } RenamingDir-    : 'renaming' '(' Renamings ')'	{ ($3 , fuseRange $1 $4) }+    : 'renaming' '(' Renamings ')'	{ ($3 , getRange ($1,$2,$3,$4)) }  -- Renamings of the form 'x to y' Renamings :: { [Renaming] }@@ -821,7 +852,7 @@ LHS : Expr1 RewriteEquations WithExpressions         {% exprToLHS $1 >>= \p -> return (p $2 $3) }     | '...' WithPats RewriteEquations WithExpressions-        { Ellipsis (fuseRange $1 $3) $2 $3 $4 }+        { Ellipsis (getRange ($1,$2,$3,$4)) $2 $3 $4 }  WithPats :: { [Pattern] } WithPats : {- empty -}	{ [] }@@ -857,9 +888,8 @@ -- Top-level definitions. Declaration :: { [Declaration] } Declaration-    : RelTypeSig    { [$1] }  -- Possibly dotted type signature.-    | Fields        { $1   }-    | FunClause	    { [$1] }+    : Fields	    {  $1  }+    | FunClause     {  $1  }     | Data	    { [$1] }     | DataSig	    { [$1] }  -- lone data type signature in mutual block     | Record	    { [$1] }@@ -870,12 +900,13 @@     | Private	    { [$1] }     | Postulate	    { [$1] }     | Primitive	    { [$1] }-    | Open	    { [$1] }-    | Import	    { [$1] }+    | Open	    {  $1  }+--    | Import	    { [$1] }     | ModuleMacro   { [$1] }     | Module	    { [$1] }     | Pragma	    { [$1] }     | Syntax        { [$1] }+    | PatternSyn    { [$1] }   {--------------------------------------------------------------------------@@ -887,12 +918,6 @@ TypeSigs :: { [Declaration] } TypeSigs : SpaceIds ':' Expr { map (flip (TypeSig Relevant) $3) $1 } --- Some declaration can include relevance information (axioms, functions)-RelTypeSig :: { Declaration }-RelTypeSig-    : '.' Id ':' Expr   { TypeSig Irrelevant $2 $4 }-    | Id ':' Expr       { TypeSig Relevant $1 $3 }- RelTypeSigs :: { [Declaration] } RelTypeSigs : MaybeDottedIds ':' Expr { map (\ (Arg _ rel x) -> TypeSig rel x $3) $1 } @@ -904,44 +929,50 @@  -- Function declarations. The left hand side is parsed as an expression to allow -- declarations like 'x::xs ++ ys = e', when '::' has higher precedence than '++'.-FunClause :: { Declaration }-FunClause : LHS RHS WhereClause	{ FunClause $1 $2 $3 }+-- FunClause also handle possibly dotted type signatures.+FunClause :: { [Declaration] }+FunClause : LHS RHS WhereClause	{% funClauseOrTypeSigs $1 $2 $3 } -RHS :: { RHS }-RHS : '=' Expr	    { RHS $2 }-    | {- empty -}   { AbsurdRHS }+RHS :: { RHSOrTypeSigs }+RHS : '=' Expr	    { JustRHS (RHS $2) }+    | ':' Expr      { TypeSigsRHS $2 }+    | {- empty -}   { JustRHS AbsurdRHS }  -- Data declaration. Can be local. Data :: { Declaration } Data : 'data' Id TypedUntypedBindings ':' Expr 'where'-            Constructors	{ Data (getRange ($1, $6, $7)) Inductive $2 $3 (Just $5) $7 }+            Constructors	{ Data (getRange ($1,$2,$3,$4,$5,$6,$7)) Inductive $2 $3 (Just $5) $7 }      | 'codata' Id TypedUntypedBindings ':' Expr 'where'-            Constructors	{ Data (getRange ($1, $6, $7)) CoInductive $2 $3 (Just $5) $7 }+            Constructors	{ Data (getRange ($1,$2,$3,$4,$5,$6,$7)) CoInductive $2 $3 (Just $5) $7 }    -- New cases when we already had a DataSig.  Then one can omit the sort.      | 'data' Id TypedUntypedBindings 'where'-	    Constructors	{ Data (getRange ($1, $4, $5)) Inductive $2 $3 Nothing $5 }+	    Constructors	{ Data (getRange ($1,$2,$3,$4,$5)) Inductive $2 $3 Nothing $5 }      | 'codata' Id TypedUntypedBindings 'where'-	    Constructors	{ Data (getRange ($1, $4, $5)) CoInductive $2 $3 Nothing $5 }+	    Constructors	{ Data (getRange ($1,$2,$3,$4,$5)) CoInductive $2 $3 Nothing $5 }  -- Data type signature. Found in mutual blocks. DataSig :: { Declaration } DataSig : 'data' Id TypedUntypedBindings ':' Expr-  { DataSig (fuseRange $1 $5) Inductive $2 $3 $5 }+  { DataSig (getRange ($1,$2,$3,$4,$5)) Inductive $2 $3 $5 } +-- Andreas, 2012-03-16:  The Expr3NoCurly instead of Id in everything+-- following 'record' is to remove the (harmless) shift/reduce conflict+-- introduced by record update expressions.+ -- Record declarations. Record :: { Declaration }-Record : 'record' Id TypedUntypedBindings ':' Expr 'where'+Record : 'record' Expr3NoCurly TypedUntypedBindings ':' Expr 'where' 	    RecordDeclarations-         { Record (getRange ($1, $6, $7)) $2 (fst $7) $3 (Just $5) (snd $7) }-       | 'record' Id TypedUntypedBindings 'where'+         {% exprToName $2 >>= \ n -> return $ Record (getRange ($1,$2,$3,$4,$5,$6,$7)) n (fst3 $7) (snd3 $7) $3 (Just $5) (thd3 $7) }+       | 'record' Expr3NoCurly TypedUntypedBindings 'where' 	    RecordDeclarations-         { Record (getRange ($1, $4, $5)) $2 (fst $5) $3 Nothing (snd $5) }+         {% exprToName $2 >>= \ n -> return $ Record (getRange ($1,$2,$3,$4,$5)) n (fst3 $5) (snd3 $5) $3 Nothing (thd3 $5) }  -- Record type signature. In mutual blocks. RecordSig :: { Declaration }-RecordSig : 'record' Id TypedUntypedBindings ':' Expr-  { RecordSig (fuseRange $1 $5) $2 $3 $5 }+RecordSig : 'record' Expr3NoCurly TypedUntypedBindings ':' Expr+  {% exprToName $2 >>= \ n -> return $ RecordSig (getRange ($1,$2,$3,$4,$5)) n $3 $5 }  -- Declaration of record constructor name. RecordConstructorName :: { Name }@@ -949,9 +980,9 @@  -- Fixity declarations. Infix :: { Declaration }-Infix : 'infix'  Int SpaceBIds  { Infix (NonAssoc (fuseRange $1 $3) $2) $3 }-      | 'infixl' Int SpaceBIds  { Infix (LeftAssoc (fuseRange $1 $3) $2) $3 }-      | 'infixr' Int SpaceBIds  { Infix (RightAssoc (fuseRange $1 $3) $2) $3 }+Infix : 'infix'  Int SpaceBIds  { Infix (NonAssoc (getRange ($1,$3)) $2) $3 }+      | 'infixl' Int SpaceBIds  { Infix (LeftAssoc (getRange ($1,$3)) $2) $3 }+      | 'infixr' Int SpaceBIds  { Infix (RightAssoc (getRange ($1,$3)) $2) $3 }  -- Field declarations. Fields :: { [Declaration] }@@ -992,6 +1023,13 @@     _ -> parseError "syntax declarations are allowed only for simple names (without holes)" } +-- Pattern synonyms.+PatternSyn :: { Declaration }+PatternSyn : 'pattern' SpaceIds '=' Expr {% do+  p <- exprToPattern $4+  return (PatternSyn (getRange ($1,$2,$3,$4)) (head $2) (tail $2) p)+  }+ SimpleIds :: { [String] } SimpleIds : SimpleId { [$1] }           | SimpleIds SimpleId {$1 ++ [$2]}@@ -1009,29 +1047,80 @@ SimpleId :: { String } SimpleId : id  { snd $1 } +MaybeOpen :: { Maybe Range }+MaybeOpen : 'open'      { Just (getRange $1) }+          | {- empty -} { Nothing }  -- Open-Open :: { Declaration }-Open : 'open' ModuleName OpenArgs ImportDirective {+Open :: { [Declaration] }+Open : MaybeOpen 'import' ModuleName OpenArgs ImportDirective {%     let+    { doOpen = maybe DontOpen (const DoOpen) $1+    ; m   = $3+    ; es  = $4+    ; dir = $5+    ; r   = getRange (m, es, dir)+    ; mr  = getRange m+    ; unique = hash $ show $ fmap (const (Nothing :: Maybe ())) r+         -- turn range into unique id, but delete file path+         -- which is absolute and messes up suite of failing tests+         -- (different hashs on different installations)+         -- TODO: Don't use (insecure) hashes in this way.+    ; fresh = Name mr [ Id $ ".#" ++ show m ++ "-" ++ show unique ]+    ; impStm asR = Import mr m (Just (AsName fresh asR)) DontOpen defaultImportDir+    ; appStm m' es =+        let r = getRange (m, es) in+        Private r+          [ ModuleMacro r m'+             (SectionApp (getRange es) []+               (RawApp (getRange es) (Ident (QName fresh) : es)))+             doOpen dir+          ]+    ; (initArgs, last2Args) = splitAt (length es - 2) es+    ; parseAsClause = case last2Args of+      { [ Ident (QName (Name asR [Id x]))+        , Ident (QName m')+        ] | x == "as" -> Just (asR, m')+      ; _ -> Nothing+      }+    } in+    case es of+      { [] -> return [Import mr m Nothing doOpen dir]+      ; _ | Just (asR, m') <- parseAsClause ->+              if null initArgs then return+                 [ Import (getRange (m, asR, m', dir)) m+                     (Just (AsName m' asR)) doOpen dir+                 ]+              else return [ impStm asR, appStm m' initArgs ]+          | DontOpen <- doOpen -> parseErrorAt (fromJust $ rStart $ getRange $2) "An import statement with module instantiation does not actually import the module.  This statement achieves nothing.  Either add the `open' keyword or bind the instantiated module with an `as' clause."+          | otherwise -> return+              [ impStm noRange+              , appStm (noName $ beginningOf $ getRange m) es+              ]+      }+  }+  |'open' ModuleName OpenArgs ImportDirective {+    let     { m   = $2     ; es  = $3     ; dir = $4-    ; r   = getRange ($1, m, es, dir)+    ; r   = getRange (m, es, dir)     } in-    case es of-    { []  -> Open r m dir-	; _   -> Private r [ ModuleMacro r (noName $ beginningOf $ getRange $2)+    [ case es of+      { []  -> Open r m dir+      ; _   -> Private r [ ModuleMacro r (noName $ beginningOf $ getRange m) 			     (SectionApp (getRange (m , es)) [] (RawApp (fuseRange m es) (Ident m : es))) 			     DoOpen dir-                       ]-    }+                         ]+      }+    ]   }   | 'open' ModuleName '{{' '...' DoubleCloseBrace ImportDirective {-    let r = getRange ($1, $2, $3, $4) in-    Private r [ ModuleMacro r (noName $ beginningOf $ getRange $2)+    let r = getRange $2 in+    [ Private r [ ModuleMacro r (noName $ beginningOf $ getRange $2)     	      	(RecordModuleIFS r $2) DoOpen $6-        ]+                ]+    ]   }  OpenArgs :: { [Expr] }@@ -1040,7 +1129,7 @@  ModuleApplication :: { [TypedBindings] -> Parser ModuleApplication } ModuleApplication : ModuleName '{{' '...' DoubleCloseBrace { (\ts ->-		    if null ts then return $ RecordModuleIFS (getRange ($1, $4)) $1+		    if null ts then return $ RecordModuleIFS (getRange ($1,$2,$3,$4)) $1 		    else parseError "No bindings allowed for record module with non-canonical implicits" ) 		    } 		  | ModuleName OpenArgs {@@ -1050,32 +1139,30 @@ -- Module instantiation ModuleMacro :: { Declaration } ModuleMacro : 'module' Id TypedUntypedBindings '=' ModuleApplication ImportDirective-		    {% do {ma <- $5 (map addType $3); return $ ModuleMacro (getRange ($1, ma, $6)) $2 ma DontOpen $6 } }+		    {% do {ma <- $5 (map addType $3); return $ ModuleMacro (getRange ($1, $2, ma, $6)) $2 ma DontOpen $6 } } 	    | 'open' 'module' Id TypedUntypedBindings '=' ModuleApplication ImportDirective-		    {% do {ma <- $6 (map addType $4); return $ ModuleMacro (getRange ($1, ma, $7)) $3 ma DoOpen $7 } }---- Import-Import :: { Declaration }-Import : 'import' ModuleName ImportImportDirective-	    { Import (getRange ($1,$2,snd $3)) $2 (fst $3) DontOpen (snd $3) }-       | 'open' 'import' ModuleName ImportImportDirective-	    { Import (getRange ($1,$3,snd $4)) $3 (fst $4) DoOpen (snd $4) }+		    {% do {ma <- $6 (map addType $4); return $ ModuleMacro (getRange ($1, $2, $3, ma, $7)) $3 ma DoOpen $7 } }  -- Module Module :: { Declaration } Module : 'module' Id TypedUntypedBindings 'where' Declarations0-		    { Module (getRange ($1,$4,$5)) (QName $2) (map addType $3) $5 }+		    { Module (getRange ($1,$2,$3,$4,$5)) (QName $2) (map addType $3) $5 }+       | 'module' Underscore TypedUntypedBindings 'where' Declarations0+		    { Module (getRange ($1,$2,$3,$4,$5)) (QName $2) (map addType $3) $5 } +Underscore :: { Name }+Underscore : '_' { noName (getRange $1) }+ -- The top-level consist of a bunch of import and open followed by a top-level module. TopLevel :: { [Declaration] } TopLevel : TopModule       { [$1] }-	 | Import TopLevel { $1 : $2 }-	 | Open   TopLevel { $1 : $2 }+--	 | Import TopLevel { $1 : $2 }+	 | Open   TopLevel { $1 ++ $2 }  -- The top-level module can have a qualified name. TopModule :: { Declaration } TopModule : 'module' ModuleName TypedUntypedBindings 'where' Declarations0-		    { Module (getRange ($1,$4,$5)) $2 (map addType $3) $5 }+		    { Module (getRange ($1,$2,$3,$4,$5)) $2 (map addType $3) $5 }  Pragma :: { Declaration } Pragma : DeclarationPragma  { Pragma $1 }@@ -1086,71 +1173,77 @@  DeclarationPragma :: { Pragma } DeclarationPragma-  : BuiltinPragma      { $1 }-  | CompiledPragma     { $1 }-  | CompiledDataPragma { $1 }-  | CompiledTypePragma { $1 }-  | CompiledEpicPragma { $1 }-  | CompiledJSPragma   { $1 }-  | StaticPragma       { $1 }-  | ImportPragma       { $1 }-  | ImpossiblePragma   { $1 }-  | RecordEtaPragma    { $1 }+  : BuiltinPragma            { $1 }+  | CompiledPragma           { $1 }+  | CompiledDataPragma       { $1 }+  | CompiledTypePragma       { $1 }+  | CompiledEpicPragma       { $1 }+  | CompiledJSPragma         { $1 }+  | StaticPragma             { $1 }+  | ImportPragma             { $1 }+  | ImpossiblePragma         { $1 }+  | RecordEtaPragma          { $1 }+  | NoTerminationCheckPragma { $1 }  OptionsPragma :: { Pragma }-OptionsPragma : '{-#' 'OPTIONS' PragmaStrings '#-}' { OptionsPragma (fuseRange $1 $4) $3 }+OptionsPragma : '{-#' 'OPTIONS' PragmaStrings '#-}' { OptionsPragma (getRange ($1,$2,$4)) $3 }  BuiltinPragma :: { Pragma } BuiltinPragma     : '{-#' 'BUILTIN' string PragmaName '#-}'-      { BuiltinPragma (fuseRange $1 $5) (snd $3) (Ident $4) }+      { BuiltinPragma (getRange ($1,$2,fst $3,$4,$5)) (snd $3) (Ident $4) }  CompiledPragma :: { Pragma } CompiledPragma   : '{-#' 'COMPILED' PragmaName PragmaStrings '#-}'-    { CompiledPragma (fuseRange $1 $5) $3 (unwords $4) }+    { CompiledPragma (getRange ($1,$2,$3,$5)) $3 (unwords $4) }  CompiledTypePragma :: { Pragma } CompiledTypePragma   : '{-#' 'COMPILED_TYPE' PragmaName PragmaStrings '#-}'-    { CompiledTypePragma (fuseRange $1 $5) $3 (unwords $4) }+    { CompiledTypePragma (getRange ($1,$2,$3,$5)) $3 (unwords $4) }  CompiledDataPragma :: { Pragma } CompiledDataPragma   : '{-#' 'COMPILED_DATA' PragmaName string PragmaStrings '#-}'-    { CompiledDataPragma (fuseRange $1 $6) $3 (snd $4) $5 }+    { CompiledDataPragma (getRange ($1,$2,$3,fst $4,$6)) $3 (snd $4) $5 }  CompiledEpicPragma :: { Pragma } CompiledEpicPragma   : '{-#' 'COMPILED_EPIC' PragmaName PragmaStrings '#-}'-    { CompiledEpicPragma (fuseRange $1 $5) $3 (unwords $4) }+    { CompiledEpicPragma (getRange ($1,$2,$3,$5)) $3 (unwords $4) }  CompiledJSPragma :: { Pragma } CompiledJSPragma   : '{-#' 'COMPILED_JS' PragmaName PragmaStrings '#-}'-    { CompiledJSPragma (fuseRange $1 $5) $3 (unwords $4) }+    { CompiledJSPragma (getRange ($1,$2,$3,$5)) $3 (unwords $4) }  StaticPragma :: { Pragma } StaticPragma   : '{-#' 'STATIC' PragmaName '#-}'-    { StaticPragma (fuseRange $1 $4) $3 }+    { StaticPragma (getRange ($1,$2,$3,$4)) $3 }  RecordEtaPragma :: { Pragma } RecordEtaPragma   : '{-#' 'ETA' PragmaName '#-}'-    { EtaPragma (fuseRange $1 $4) $3 }+    { EtaPragma (getRange ($1,$2,$3,$4)) $3 } +NoTerminationCheckPragma :: { Pragma }+NoTerminationCheckPragma+  : '{-#' 'NO_TERMINATION_CHECK' '#-}'+    { NoTerminationCheckPragma (getRange ($1,$2,$3)) }+ ImportPragma :: { Pragma } ImportPragma   : '{-#' 'IMPORT' string '#-}'     {% let s = snd $3 in        if validHaskellModuleName s-       then return $ ImportPragma (fuseRange $1 $4) s+       then return $ ImportPragma (getRange ($1,$2,fst $3,$4)) s        else parseError $ "Malformed module name: " ++ s ++ "."     }  ImpossiblePragma :: { Pragma }-  : '{-#' 'IMPOSSIBLE' '#-}'  { ImpossiblePragma (fuseRange $1 $3) }+  : '{-#' 'IMPOSSIBLE' '#-}'  { ImpossiblePragma (getRange ($1,$2,$3)) }  {--------------------------------------------------------------------------     Sequences of declarations@@ -1198,13 +1291,23 @@     | TypeSignatures { $1 }  -- Record declarations, including an optional record constructor name.-RecordDeclarations :: { (Maybe Name, [Declaration]) }+RecordDeclarations :: { (Maybe Induction, Maybe Name, [Declaration]) } RecordDeclarations-    : vopen                                          close { (Nothing, []) }-    | vopen RecordConstructorName                    close { (Just $2, []) }-    | vopen RecordConstructorName semi Declarations1 close { (Just $2, reverse $4) }-    | vopen                            Declarations1 close { (Nothing, reverse $2) }+    : vopen                                          close { (Nothing, Nothing, []) }+    | vopen RecordConstructorName                    close { (Nothing, Just $2, []) }+    | vopen RecordConstructorName semi Declarations1 close { (Nothing, Just $2, reverse $4) }+    | vopen                            Declarations1 close { (Nothing, Nothing, reverse $2) }+    | vopen RecordInduction                                               close { (Just $2, Nothing, []) }+    | vopen RecordInduction semi RecordConstructorName                    close { (Just $2, Just $4, []) }+    | vopen RecordInduction semi RecordConstructorName semi Declarations1 close { (Just $2, Just $4, reverse $6) }+    | vopen RecordInduction semi                            Declarations1 close { (Just $2, Nothing, reverse $4) } +-- Declaration of record as 'inductive' or 'coinductive'.+RecordInduction :: { Induction }+RecordInduction+   : 'inductive'   { Inductive }+   | 'coinductive' { CoInductive }+ -- Arbitrary declarations Declarations :: { [Declaration] } Declarations@@ -1395,7 +1498,34 @@ opAppExprToPattern (SyntaxBindingLambda _ _ _) = parseError "syntax binding lambda cannot appear in a pattern" opAppExprToPattern (Ordinary e) = exprToPattern e +-- | Turn an expression into a name. Fails if the expression is not a+--   valid identifier.+exprToName :: Expr -> Parser Name+exprToName (Ident (QName x)) = return x+exprToName e =+  let Just pos = rStart $ getRange e in+  parseErrorAt pos $ "Not a valid identifier: " ++ show e+ parsePanic s = parseError $ "Internal parser error: " ++ s ++ ". Please report this as a bug."++{- RHS or type signature -}++data RHSOrTypeSigs = JustRHS RHS+                   | TypeSigsRHS Expr++namesOfPattern :: Pattern -> Maybe [(Relevance, Name)]+namesOfPattern (IdentP (QName i))         = Just [(Relevant, i)]+namesOfPattern (DotP _ (Ident (QName i))) = Just [(Irrelevant, i)]+namesOfPattern (RawAppP _ ps)             = fmap concat $ mapM namesOfPattern ps+namesOfPattern _                          = Nothing++funClauseOrTypeSigs :: LHS -> RHSOrTypeSigs -> WhereClause -> Parser [Declaration]+funClauseOrTypeSigs lhs (JustRHS   rhs) wh = return [FunClause lhs rhs wh]+funClauseOrTypeSigs lhs (TypeSigsRHS e) wh+  | NoWhere <- wh,+    LHS p [] [] [] <- lhs,+    Just names <- namesOfPattern p = return $ map (\(x,y) -> TypeSig x y e) names+  | otherwise                      = parseError "Illegal function clause or type signature"  {--------------------------------------------------------------------------     Tests
src/full/Agda/Syntax/Parser/Tokens.hs view
@@ -16,11 +16,12 @@ 	| KwOpen | KwImport | KwModule | KwPrimitive 	| KwInfix | KwInfixL | KwInfixR | KwWith | KwRewrite 	| KwSet | KwProp | KwForall | KwRecord | KwConstructor | KwField+        | KwInductive | KwCoInductive 	| KwHiding | KwUsing | KwRenaming | KwTo | KwPublic 	| KwOPTIONS | KwBUILTIN | KwLINE 	| KwCOMPILED_DATA | KwCOMPILED_TYPE | KwCOMPILED | KwCOMPILED_EPIC | KwCOMPILED_JS-	| KwIMPORT | KwIMPOSSIBLE | KwETA | KwSTATIC-	| KwQuoteGoal | KwQuote | KwQuoteTerm | KwUnquote | KwSyntax+	| KwIMPORT | KwIMPOSSIBLE | KwETA | KwNO_TERMINATION_CHECK | KwSTATIC+	| KwQuoteGoal | KwQuote | KwQuoteTerm | KwUnquote | KwSyntax | KwPatternSyn     deriving (Eq, Show)  layoutKeywords :: [Keyword]@@ -43,7 +44,9 @@ 	= TokKeyword Keyword Interval 	  -- Identifiers and operators 	| TokId		(Interval, String)-	| TokQId	[(Interval, String)] -- non empty namespace+	| TokQId	[(Interval, String)]+                        -- Non-empty namespace. The intervals for+                        -- "A.B.x" correspond to "A.", "B." and "x". 	  -- Literals 	| TokLiteral	Literal 	  -- Special symbols
src/full/Agda/Syntax/Position.hs view
@@ -1,11 +1,12 @@-{-# LANGUAGE CPP, DeriveDataTypeable #-}+{-# LANGUAGE CPP, DeriveDataTypeable, DeriveFunctor, TypeSynonymInstances, FlexibleInstances, ScopedTypeVariables #-}  {-| Position information for syntax. Crucial for giving good error messages. -}  module Agda.Syntax.Position   ( -- * Positions-    Position(..)+    Position+  , Position'(..)   , positionInvariant   , startPos   , movePos@@ -13,13 +14,15 @@   , backupPos      -- * Intervals-  , Interval(..)+  , Interval+  , Interval'(..)   , intervalInvariant   , takeI   , dropI      -- * Ranges-  , Range(..)+  , Range+  , Range'(..)   , rangeInvariant   , noRange   , posToRange@@ -42,7 +45,7 @@   , tests   ) where -import Data.Generics (Typeable, Data)+import Data.Typeable (Typeable) import Data.List import Data.Function import Data.Set (Set, (\\))@@ -70,35 +73,41 @@ -- messages for the user. -- -- Note the invariant which positions have to satisfy: 'positionInvariant'.-data Position = Pn { srcFile :: Maybe AbsolutePath-                     -- ^ File.-                   , posPos  :: !Int32-                     -- ^ Position.-		   , posLine :: !Int32-                     -- ^ Line number, counting from 1.-		   , posCol  :: !Int32-                     -- ^ Column number, counting from 1.-		   }-    deriving (Typeable, Data)+data Position' a = Pn+  { srcFile :: a+    -- ^ File.+  , posPos  :: !Int32+    -- ^ Position.+  , posLine :: !Int32+    -- ^ Line number, counting from 1.+  , posCol  :: !Int32+    -- ^ Column number, counting from 1.+  }+    deriving (Typeable, Functor) +type SrcFile  = Maybe AbsolutePath+type Position = Position' SrcFile+ positionInvariant :: Position -> Bool positionInvariant p =   posPos p > 0 && posLine p > 0 && posCol p > 0  importantPart p = (srcFile p, posPos p) -instance Eq Position where+instance Eq a => Eq (Position' a) where   (==) = (==) `on` importantPart -instance Ord Position where+instance Ord a => Ord (Position' a) where   compare = compare `on` importantPart  -- | An interval. The @iEnd@ position is not included in the interval. -- -- Note the invariant which intervals have to satisfy: 'intervalInvariant'.-data Interval = Interval { iStart, iEnd :: !Position }-    deriving (Typeable, Data, Eq, Ord)+data Interval' a = Interval { iStart, iEnd :: !(Position' a) }+    deriving (Typeable, Eq, Ord, Functor) +type Interval = Interval' SrcFile+ intervalInvariant :: Interval -> Bool intervalInvariant i =   all positionInvariant [iStart i, iEnd i] &&@@ -113,9 +122,11 @@ -- consecutive and separated. -- -- Note the invariant which ranges have to satisfy: 'rangeInvariant'.-newtype Range = Range [Interval]-  deriving (Typeable, Data, Eq, Ord)+newtype Range' a = Range [Interval' a]+  deriving (Typeable, Eq, Ord, Functor) +type Range = Range' SrcFile+ rangeInvariant :: Range -> Bool rangeInvariant (Range []) = True rangeInvariant (Range is) =@@ -142,8 +153,17 @@     getRange (x,y,z) = getRange (x,(y,z))  instance (HasRange a, HasRange b, HasRange c, HasRange d) => HasRange (a,b,c,d) where-    getRange (x,y,z,w) = getRange (x,(y,(z, w)))+    getRange (x,y,z,w) = getRange (x,(y,(z,w))) +instance (HasRange a, HasRange b, HasRange c, HasRange d, HasRange e) => HasRange (a,b,c,d,e) where+    getRange (x,y,z,w,v) = getRange (x,(y,(z,(w,v))))++instance (HasRange a, HasRange b, HasRange c, HasRange d, HasRange e, HasRange f) => HasRange (a,b,c,d,e,f) where+    getRange (x,y,z,w,v,u) = getRange (x,(y,(z,(w,(v,u)))))++instance (HasRange a, HasRange b, HasRange c, HasRange d, HasRange e, HasRange f, HasRange g) => HasRange (a,b,c,d,e,f,g) where+    getRange (x,y,z,w,v,u,t) = getRange (x,(y,(z,(w,(v,(u,t))))))+ instance HasRange a => HasRange (Maybe a) where     getRange Nothing  = noRange     getRange (Just a) = getRange a@@ -178,6 +198,10 @@ instance (KillRange a, KillRange b) => KillRange (a, b) where   killRange (x, y) = (killRange x, killRange y) +instance (KillRange a, KillRange b, KillRange c) =>+         KillRange (a, b, c) where+  killRange (x, y, z) = killRange3 (,,) x y z+ instance KillRange a => KillRange (Maybe a) where   killRange = fmap killRange @@ -189,11 +213,11 @@     Pretty printing  --------------------------------------------------------------------------} -instance Show Position where+instance Show a => Show (Position' (Maybe a)) where     show (Pn Nothing  _ l c) = show l ++ "," ++ show c-    show (Pn (Just f) _ l c) = filePath f ++ ":" ++ show l ++ "," ++ show c+    show (Pn (Just f) _ l c) = show f ++ ":" ++ show l ++ "," ++ show c -instance Show Interval where+instance Show a => Show (Interval' (Maybe a)) where     show (Interval s e) = file ++ start ++ "-" ++ end 	where 	    f	= srcFile s@@ -203,13 +227,13 @@ 	    ec	= posCol e 	    file = case f of                      Nothing -> ""-                     Just f  -> filePath f ++ ":"+                     Just f  -> show f ++ ":" 	    start = show sl ++ "," ++ show sc 	    end 		| sl == el  = show ec 		| otherwise = show el ++ "," ++ show ec -instance Show Range where+instance Show a => Show (Range' (Maybe a)) where   show r = case rangeToInterval r of     Nothing -> ""     Just i  -> show i@@ -269,7 +293,7 @@                  | otherwise = Range [Interval p2 p1]  -- | Converts a range to an interval, if possible.-rangeToInterval :: Range -> Maybe Interval+rangeToInterval :: Range' a -> Maybe (Interval' a) rangeToInterval (Range [])   = Nothing rangeToInterval (Range is)   = Just $ Interval { iStart = iStart (head is)                                                , iEnd   = iEnd   (last is)@@ -284,7 +308,7 @@ -- | Removes gaps between intervals on the same line. continuousPerLine :: Range -> Range continuousPerLine (Range [])     = Range []-continuousPerLine (Range (i:is)) = Range $ fuse i $ sortBy (compare `on` iStart) is+continuousPerLine (Range (i:is)) = Range $ fuse i is   where     fuse i [] = [i]     fuse i (j:is)@@ -339,7 +363,7 @@   Just (Pn { srcFile = f }) -> posToRange p p     where p = startPos f --- | @x `withRangeOf` y@ sets the range of @x@ to the range of @y@.+-- | @x \`withRangeOf\` y@ sets the range of @x@ to the range of @y@. withRangeOf :: (SetRange t, HasRange u) => t -> u -> t x `withRangeOf` y = setRange (getRange y) x @@ -409,7 +433,7 @@  prop_beginningOfFile r = rangeInvariant (beginningOfFile r) -instance Arbitrary Position where+instance Arbitrary a => Arbitrary (Position' a) where   arbitrary = do     srcFile                    <- arbitrary     NonZero (NonNegative pos') <- arbitrary@@ -421,7 +445,7 @@  -- | Sets the 'srcFile' components of the interval. -setFile :: Maybe AbsolutePath -> Interval -> Interval+setFile :: SrcFile -> Interval -> Interval setFile f (Interval p1 p2) =   Interval (p1 { srcFile = f }) (p2 { srcFile = f }) @@ -435,9 +459,9 @@     intervalInvariant i' &&     srcFile (iStart i) == srcFile (iStart i') -instance Arbitrary Interval where+instance (Arbitrary a, Ord a) => Arbitrary (Interval' a) where   arbitrary = do-    (p1, p2) <- liftM2 (,) arbitrary arbitrary+    (p1, p2 :: Position' a) <- liftM2 (,) arbitrary arbitrary     let [p1', p2'] = sort [p1, p2 { srcFile = srcFile p1 }]     return (Interval p1' p2') 
src/full/Agda/Syntax/Scope/Base.hs view
@@ -1,4 +1,4 @@-{-# LANGUAGE CPP, DeriveDataTypeable, GADTs, ScopedTypeVariables, TupleSections #-}+{-# LANGUAGE CPP, DeriveDataTypeable, GADTs, ScopedTypeVariables, TupleSections, RankNTypes #-}  {-| This module defines the notion of a scope and operations on scopes. -}@@ -6,7 +6,7 @@  import Control.Arrow ((***), (&&&)) import Control.Applicative-import Data.Generics (Typeable, Data)+import Data.Typeable (Typeable) import Data.List import Data.Map (Map) import qualified Data.Map as Map@@ -31,15 +31,16 @@ -- | A scope is a named collection of names partitioned into public and private --   names. data Scope = Scope-      { scopeName          :: A.ModuleName-      , scopeParents       :: [A.ModuleName]-      , scopeNameSpaces    :: [(NameSpaceId, NameSpace)]-      , scopeImports       :: Map C.QName A.ModuleName+      { scopeName           :: A.ModuleName+      , scopeParents        :: [A.ModuleName]+      , scopeNameSpaces     :: [(NameSpaceId, NameSpace)]+      , scopeImports        :: Map C.QName A.ModuleName+      , scopeDatatypeModule :: Bool       }-  deriving (Typeable, Data)+  deriving (Typeable)  data NameSpaceId = PrivateNS | PublicNS | ImportedNS | OnlyQualifiedNS-  deriving (Typeable, Data, Eq, Bounded, Enum)+  deriving (Typeable, Eq, Bounded, Enum)  localNameSpace :: Access -> NameSpaceId localNameSpace PublicAccess  = PublicNS@@ -61,7 +62,7 @@       , scopeLocals	:: LocalVars       , scopePrecedence :: Precedence       }-  deriving (Typeable, Data)+  deriving (Typeable)  -- | Local variables type LocalVars = [(C.Name, A.Name)]@@ -73,7 +74,7 @@       { nsNames	  :: NamesInScope       , nsModules :: ModulesInScope       }-  deriving (Typeable, Data)+  deriving (Typeable)  type ThingsInScope a = Map C.Name [a] type NamesInScope    = ThingsInScope AbstractName@@ -101,22 +102,25 @@   inScopeTag = ModuleTag  -- | We distinguish constructor names from other names.-data KindOfName = ConName | DefName-  deriving (Eq, Show, Typeable, Data)+data KindOfName = ConName | FldName | DefName | PatternSynName+  deriving (Eq, Show, Typeable, Enum, Bounded) +allKindsOfNames :: [KindOfName]+allKindsOfNames = [minBound..maxBound]+ -- | Apart from the name, we also record whether it's a constructor or not and --   what the fixity is. data AbstractName = AbsName       { anameName   :: A.QName       , anameKind   :: KindOfName       }-  deriving (Typeable, Data)+  deriving (Typeable)  -- | For modules we record the arity. I'm not sure that it's every used anywhere. data AbstractModule = AbsModule       { amodName    :: A.ModuleName       }-  deriving (Typeable, Data)+  deriving (Typeable)  instance Eq AbstractName where   (==) = (==) `on` anameName@@ -234,11 +238,12 @@  -- | The empty scope. emptyScope :: Scope-emptyScope = Scope { scopeName	     = noModuleName-                   , scopeParents    = []-		   , scopeNameSpaces = [ (nsid, emptyNameSpace) | nsid <- [minBound..maxBound] ]-                   , scopeImports    = Map.empty-		   }+emptyScope = Scope { scopeName	         = noModuleName+                   , scopeParents        = []+		   , scopeNameSpaces     = [ (nsid, emptyNameSpace) | nsid <- [minBound..maxBound] ]+                   , scopeImports        = Map.empty+		   , scopeDatatypeModule = False+                   }  -- | The empty scope info. emptyScopeInfo :: ScopeInfo@@ -473,6 +478,45 @@       Just s  -> scopeParents s       Nothing -> __IMPOSSIBLE__     current = this : parents++-- | Compute a flattened scope. Only include unqualified names or names+-- qualified by modules in the first argument.+flattenScope :: [[C.Name]] -> ScopeInfo -> Map C.QName [AbstractName]+flattenScope ms scope =+  -- Map.filterKeys (\q -> elem (init $ C.qnameParts q) ([]:ms)) $+  Map.unionWith (++)+    (build ms allNamesInScope root)+    imported+  where+    current = moduleScope $ scopeCurrent scope+    root    = mergeScopes $ current : map moduleScope (scopeParents current)++    imported = Map.unionsWith (++)+               [ qual c (build ms' exportedNamesInScope $ moduleScope a)+               | (c, a) <- Map.toList $ scopeImports root+               , let m   = C.qnameParts c+                     ms' = map (drop (length m)) $ filter (m `isPrefixOf`) ms+               , not $ null ms' ]+    qual c = Map.mapKeys (q c)+      where+        q (C.QName x)  = C.Qual x+        q (C.Qual m x) = C.Qual m . q x++    build :: [[C.Name]] -> (forall a. InScope a => Scope -> ThingsInScope a) -> Scope -> Map C.QName [AbstractName]+    build ms getNames s =+      Map.unionWith (++)+        (Map.mapKeys (\x -> C.QName x) (getNames s))+        $ Map.unionsWith (++) $+          [ Map.mapKeys (\y -> C.Qual x y) $ build ms' exportedNamesInScope $ moduleScope m+          | (x, mods) <- Map.toList (getNames s)+          , let ms' = [ ms' | m':ms' <- ms, m' == x ]+          , not $ null ms'+          , AbsModule m <- mods ]++    moduleScope :: A.ModuleName -> Scope+    moduleScope name = case Map.lookup name (scopeModules scope) of+      Nothing -> __IMPOSSIBLE__+      Just s  -> s  -- | Look up a name in the scope scopeLookup :: InScope a => C.QName -> ScopeInfo -> [a]
src/full/Agda/Syntax/Scope/Monad.hs view
@@ -46,6 +46,11 @@ notInScope :: C.QName -> ScopeM a notInScope x = typeError $ NotInScope [x] +isDatatypeModule :: A.ModuleName -> ScopeM Bool+isDatatypeModule m = do+   sc <- getScope+   return $ maybe __IMPOSSIBLE__ scopeDatatypeModule (Map.lookup m (scopeModules sc))+ -- * General operations  getCurrentModule :: ScopeM A.ModuleName@@ -82,12 +87,14 @@ getCurrentScope :: ScopeM Scope getCurrentScope = getNamedScope =<< getCurrentModule --- | Create a new module with an empty scope-createModule :: A.ModuleName -> ScopeM ()-createModule m = do+-- | Create a new module with an empty scope (Bool is True if it is a datatype module)+createModule :: Bool -> A.ModuleName -> ScopeM ()+createModule b m = do   s <- getCurrentScope   let parents = scopeName s : scopeParents s-  modifyScopes $ Map.insert m emptyScope { scopeName = m, scopeParents = parents }+  modifyScopes $ Map.insert m emptyScope { scopeName           = m+                                         , scopeParents        = parents+                                         , scopeDatatypeModule = b }  -- | Apply a function to the scope info. modifyScopeInfo :: (ScopeInfo -> ScopeInfo) -> ScopeM ()@@ -184,7 +191,9 @@  data ResolvedName = VarName A.Name                   | DefinedName Access AbstractName+                  | FieldName AbstractName           -- ^ record fields names need to be distinguished to parse copatterns                   | ConstructorName [AbstractName]+                  | PatternSynResName AbstractName                   | UnknownName   deriving (Show) @@ -200,6 +209,9 @@       ds | all ((==ConName) . anameKind . fst) ds ->         return $ ConstructorName                $ map (\ (d, _) -> updateConcreteName d $ unqualify x) ds+      [(d, a)] | anameKind d == FldName -> return $ FieldName $ updateConcreteName d (unqualify x)+      [(d, a)] | anameKind d == PatternSynName ->+                  return $ PatternSynResName (updateConcreteName d $ unqualify x)       [(d, a)] -> return $ DefinedName a $ updateConcreteName d (unqualify x)       ds  -> typeError $ AmbiguousName x (map (anameName . fst) ds)   where@@ -223,13 +235,15 @@   case r of     VarName y          -> return $ nameFixity y     DefinedName _ d    -> return $ nameFixity $ qnameName $ anameName d+    FieldName d        -> return $ nameFixity $ qnameName $ anameName d     ConstructorName ds       | null fs        -> __IMPOSSIBLE__       | allEqual fs    -> return $ head fs       | otherwise      -> return defaultFixity'       where         fs = map (nameFixity . qnameName . anameName) ds-    UnknownName        -> __IMPOSSIBLE__+    PatternSynResName n -> return $ nameFixity $ qnameName $ anameName n+    UnknownName         -> __IMPOSSIBLE__  -- * Binding names @@ -244,13 +258,15 @@ bindName acc kind x y = do   r  <- resolveName (C.QName x)   ys <- case r of+    FieldName d        -> typeError $ ClashingDefinition (C.QName x) $ anameName d     DefinedName _ d    -> typeError $ ClashingDefinition (C.QName x) $ anameName d     VarName z          -> typeError $ ClashingDefinition (C.QName x) $ A.qualify (mnameFromList []) z     ConstructorName [] -> __IMPOSSIBLE__     ConstructorName ds       | kind == ConName && all ((==ConName) . anameKind) ds -> return [ AbsName y kind ]       | otherwise -> typeError $ ClashingDefinition (C.QName x) $ anameName (head' ds)-    UnknownName        -> return [AbsName y kind]+    PatternSynResName n -> typeError $ ClashingDefinition (C.QName x) $ anameName n+    UnknownName         -> return [AbsName y kind]   modifyCurrentScope $ addNamesToScope (localNameSpace acc) x ys   where     head' []    = {- ' -} __IMPOSSIBLE__@@ -355,7 +371,7 @@           addMod x y            -- We need to copy the contents of included modules recursively-          s0 <- lift $ createModule y >> getNamedScope x+          s0 <- lift $ createModule False y >> getNamedScope x           s  <- withCurrentModule' y $ copy y s0           lift $ modifyNamedScope y (const s)           return y
− src/full/Agda/Syntax/Strict.hs
@@ -1,100 +0,0 @@-{-# LANGUAGE CPP #-}--module Agda.Syntax.Strict where--import Data.Generics (everything)--import Agda.Syntax.Common-import Agda.Syntax.Internal-import Agda.Syntax.Parser.Tokens-import qualified Agda.Syntax.Concrete as C-import qualified Agda.Syntax.Concrete.Definitions as C--#include "../undefined.h"-import Agda.Utils.Impossible---- | @force@ is the recursive @const 0@ function, to force Haskell to evaluate.-class Strict a where-    force :: a -> Int--instance Strict Term where-    force t = case t of-	Var _ ts    -> force ts-	Def _ ts    -> force ts-	Con _ ts    -> force ts-	Lam _ t     -> force t-	Lit _	    -> 0-        Level l     -> force l-	Pi a b	    -> force (a,b)-	Sort s	    -> force s-	MetaV _ ts  -> force ts-        DontCare mt -> force mt--instance Strict Type where-    force (El s t) = force (s,t)--instance Strict Sort where-    force s = case s of-	Type n     -> force n-	Prop       -> 0-        Inf        -> 0-        DLub s1 s2 -> force (s1, s2)--instance Strict Level where-  force (Max as) = force as--instance Strict PlusLevel where-  force ClosedLevel{} = 0-  force (Plus _ l) = force l--instance Strict LevelAtom where-  force l = case l of-    MetaLevel _ vs   -> force vs-    NeutralLevel v   -> force v-    BlockedLevel _ v -> force v-    UnreducedLevel v -> force v--instance Strict ClauseBody where-    force (Body t)   = force t-    force (Bind b)   = force b-    force  NoBody    = 0--instance Strict C.Expr where-    force e = everything (+) (const 1) e--instance Strict C.Declaration where-    force e = everything (+) (const 1) e--instance Strict C.Pragma where-    force e = everything (+) (const 1) e--instance Strict C.NiceDeclaration where-    force d = everything (+) (const 1) d--instance (Strict a, Strict b) => Strict (a,b) where-    force (x,y) = force x + force y--instance Strict a => Strict (Arg a) where-    force = force . unArg--instance Strict a => Strict [a] where-    force = sum . map force--instance Strict a => Strict (Maybe a) where-    force = maybe 0 force--instance Strict a => Strict (Abs a) where-    force = force . unAbs--instance Strict Token where-  -- TODO: This is just a dummy instance. Why can't we just use the-  -- NFData derivation provided by Drift?-  force = (`seq` 0)--infixr 0 $!!--($!!) :: Strict a => (a -> b) -> a -> b-f $!! x = force x `seq` f x--strict :: Strict a => a -> a-strict x = id $!! x
src/full/Agda/Syntax/Translation/AbstractToConcrete.hs view
@@ -35,6 +35,7 @@ import Agda.Syntax.Common import Agda.Syntax.Position import Agda.Syntax.Info+import Agda.Syntax.Internal (MetaId(..)) import Agda.Syntax.Fixity import Agda.Syntax.Concrete as C import Agda.Syntax.Concrete.Pretty@@ -43,7 +44,7 @@ import Agda.Syntax.Scope.Base  import Agda.TypeChecking.Monad.State (getScope)-import Agda.TypeChecking.Monad.Base  (TCM)+import Agda.TypeChecking.Monad.Base  (TCM, NamedMeta(..))  import Agda.Utils.Maybe import Agda.Utils.Monad hiding (bracket)@@ -311,9 +312,9 @@     toConcrete (A.QuestionMark i)   = return $ C.QuestionMark                                                 (getRange i)                                                 (metaNumber i)-    toConcrete (A.Underscore i)     = return $ C.Underscore-                                                (getRange i)-                                                (metaNumber i)+    toConcrete (A.Underscore i)     = return $+      C.Underscore (getRange i) $+       fmap (show . NamedMeta (metaNameSuggestion i) . MetaId) (metaNumber i)      toConcrete e@(A.App i e1 e2)    =         tryToRecoverOpApp e@@ -350,10 +351,14 @@                     (bs@(A.DomainFull _ : _), e)   -> (b:bs, e)                     _                              -> ([b], e)             lamView e = ([], e)-    toConcrete (A.ExtendedLam i di qname cs) = do+    toConcrete (A.ExtendedLam i di qname cs) =+        bracket lamBrackets $ do           decls <- toConcrete cs-          let removeApp (C.RawAppP r (lam:es)) = C.RawAppP r es-              removeApp (C.AppP p np) = namedThing $ unArg np+              -- we know all lhs are of the form `.extlam p1 p2 ... pn`,+              -- with the name .extlam leftmost. It is our mission to remove it.+          let removeApp (C.RawAppP r (_:es)) = C.RawAppP r es+              removeApp (C.AppP (C.IdentP _) np) = namedArg np+              removeApp (C.AppP p np) = (C.AppP (removeApp p) np)               removeApp _ = __IMPOSSIBLE__           let decl2clause (C.FunClause lhs rhs wh) = (lhs {lhsOriginalPattern = removeApp $ lhsOriginalPattern lhs},rhs,wh)               decl2clause _ = __IMPOSSIBLE__@@ -373,10 +378,14 @@         bracket piBrackets         $ do a' <- toConcreteCtx (if irr then DotPatternCtx else FunctionSpaceDomainCtx) a              b' <- toConcreteCtx TopCtx b-             return $ C.Fun (getRange i) (addDot a' $ mkArg a') b'+             return $ C.Fun (getRange i) (addRel a' $ mkArg a') b'         where-            irr        = argRelevance a == Irrelevant-            addDot a e = if irr then Dot (getRange a) e else e+            irr        = argRelevance a `elem` [Irrelevant, NonStrict]+            addRel a e = case argRelevance a of+                           Irrelevant -> addDot a e+                           NonStrict  -> addDot a (addDot a e)+                           _          -> e+            addDot a e = Dot (getRange a) e             mkArg (Arg Hidden    r e) = HiddenArg (getRange e) (unnamed e)             mkArg (Arg Instance  r e) = InstanceArg (getRange e) (unnamed e)             mkArg (Arg NotHidden r e) = e@@ -419,13 +428,16 @@     toConcrete (A.QuoteTerm i) = return $ C.QuoteTerm (getRange i)     toConcrete (A.Unquote i) = return $ C.Unquote (getRange i) +    -- Andreas, 2012-04-02: TODO!  print DontCare as irrAxiom     -- Andreas, 2010-10-05 print irrelevant things as ordinary things-    toConcrete (A.DontCare e) = toConcrete e+    toConcrete (A.DontCare e) = C.Dot r . C.Paren r  <$> toConcrete e+       where r = getRange e --    toConcrete (A.DontCare e) = C.DontCare <$> toConcreteCtx TopCtx e {-     -- Andreas, 2010-09-21 abuse C.Underscore to print irrelevant things     toConcrete (A.DontCare) = return $ C.Underscore noRange Nothing -}+    toConcrete (A.PatternSyn n) = C.Ident <$> toConcrete n  makeDomainFree :: A.LamBinding -> A.LamBinding makeDomainFree b@(A.DomainFull (A.TypedBindings r (Arg h rel (A.TBind _ [x] t)))) =@@ -465,12 +477,17 @@                 , C.FunClause (C.LHS (C.IdentP $ C.QName x) [] [] [])                               e C.NoWhere                 ]+    -- TODO: bind variables+    bindToConcrete (LetPatBind i p e) ret = do+        p <- toConcrete p+        e <- toConcrete e+        ret [ C.FunClause (C.LHS p [] [] []) (C.RHS e) NoWhere ]     bindToConcrete (LetApply i x modapp _ _) ret = do       x' <- unqualify <$> toConcrete x       modapp <- toConcrete modapp       let r = getRange modapp           open = maybe DontOpen id $ minfoOpenShort i-          dir  = maybe (ImportDirective r (Hiding []) [] False) id $ minfoDirective i+          dir  = maybe defaultImportDir{ importDirRange = r } id $ minfoDirective i       -- This is no use since toAbstract LetDefs is in localToAbstract.       local (openModule' x dir id) $         ret [ C.ModuleMacro (getRange i) x' modapp open dir ]@@ -493,8 +510,8 @@     ret . AnyWhere =<< declsToConcrete ds  mergeSigAndDef :: [C.Declaration] -> [C.Declaration]-mergeSigAndDef (C.RecordSig _ x bs e : C.Record r y c _ Nothing fs : ds)-  | x == y = C.Record r y c bs (Just e) fs : mergeSigAndDef ds+mergeSigAndDef (C.RecordSig _ x bs e : C.Record r y ind c _ Nothing fs : ds)+  | x == y = C.Record r y ind c bs (Just e) fs : mergeSigAndDef ds mergeSigAndDef (C.DataSig _ _ x bs e : C.Data r i y _ Nothing cs : ds)   | x == y = C.Data r i y bs (Just e) cs : mergeSigAndDef ds mergeSigAndDef (d : ds) = d : mergeSigAndDef ds@@ -610,7 +627,7 @@       return [C.Primitive (getRange i) [C.TypeSig Relevant x' t']]         -- Primitives are always relevant. -  toConcrete (A.FunDef i _ cs) =+  toConcrete (A.FunDef i _ _ cs) =     withAbstractPrivate i $ concat <$> toConcrete cs    toConcrete (A.DataSig i x bs t) =@@ -633,11 +650,11 @@       t' <- toConcreteCtx TopCtx t       return [ C.RecordSig (getRange i) x' (map C.DomainFull tel') t' ] -  toConcrete (A.RecDef  i x c bs t cs) =+  toConcrete (A.RecDef  i x ind c bs t cs) =     withAbstractPrivate i $     bindToConcrete (map makeDomainFree bs) $ \tel' -> do       (x',cs') <- (unsafeQNameToName -*- id) <$> toConcrete (x, map Constr cs)-      return [ C.Record (getRange i) x' Nothing tel' Nothing cs' ]+      return [ C.Record (getRange i) x' ind Nothing tel' Nothing cs' ]    toConcrete (A.Mutual i ds) = declsToConcrete ds @@ -652,7 +669,7 @@     modapp <- toConcrete modapp     let r = getRange modapp         open = maybe DontOpen id $ minfoOpenShort i-        dir  = maybe (ImportDirective r (Hiding []) [] False) id $ minfoDirective i+        dir  = maybe defaultImportDir{ importDirRange = r } id $ minfoDirective i     return [ C.ModuleMacro (getRange i) x modapp open dir ]    toConcrete (A.Import i x) = do@@ -669,6 +686,7 @@     x <- toConcrete x     return [C.Open (getRange i) x defaultImportDir] + data RangeAndPragma = RangeAndPragma Range A.Pragma  instance ToConcrete RangeAndPragma C.Pragma where@@ -699,19 +717,40 @@  -- Left hand sides -------------------------------------------------------- -noImplicitArgs = filter (noImplicit . namedThing . unArg)+noImplicitArgs = filter (noImplicit . namedArg) noImplicitPats = filter noImplicit  noImplicit (A.ImplicitP _) = False noImplicit _               = True  instance ToConcrete A.LHS C.LHS where-    bindToConcrete (A.LHS i x args wps) ret = do+    bindToConcrete (A.LHS i lhscore wps) ret = do+      bindToConcreteCtx TopCtx lhscore $ \lhs ->+        bindToConcreteCtx TopCtx (noImplicitPats wps) $ \wps ->+          ret $ C.LHS lhs wps [] []+{-+    bindToConcrete (A.LHS i (A.LHSHead x args) wps) ret = do       bindToConcreteCtx TopCtx (A.DefP info x args) $ \lhs ->         bindToConcreteCtx TopCtx (noImplicitPats wps) $ \wps ->           ret $ C.LHS lhs wps [] []       where info = PatRange (getRange i)+-} +instance ToConcrete A.LHSCore C.Pattern where+    bindToConcrete = bindToConcrete . lhsCoreToPattern+{-+    bindToConcrete (A.LHSHead x args) ret = do+      bindToConcreteCtx TopCtx (A.DefP info x args) $ \ lhs ->+        ret $ lhs+      where info = PatRange noRange -- seems to be unused anyway+    bindToConcrete (A.LHSProj d ps1 lhscore ps2) ret = do+      d <- toConcrete d+      bindToConcrete ps1 $ \ ps1 ->+        bindToConcrete lhscore $ \ p ->+          bindToConcrete ps2 $ \ ps2 ->+            ret $ makePattern d ps1 p ps2+  -}+ appBrackets' :: [arg] -> Precedence -> Bool appBrackets' []    _   = False appBrackets' (_:_) ctx = appBrackets ctx@@ -744,12 +783,14 @@         return $ C.DotP (getRange i) e     -- just for debugging purposes (shouldn't show up in practise)     toConcrete (A.ImplicitP i) = return $ C.IdentP (C.QName $ C.Name noRange [C.Id "(implicit)"])+    toConcrete (A.PatternSynP i n _) = IdentP <$> toConcrete n + -- Helpers for recovering C.OpApp ------------------------------------------  data Hd = HdVar A.Name | HdCon A.QName | HdDef A.QName -cOpApp :: Range -> C.Name -> [C.Expr] -> C.Expr+cOpApp :: Range -> C.QName -> [C.Expr] -> C.Expr cOpApp r n es = C.OpApp r n (map Ordinary es)  tryToRecoverOpApp :: A.Expr -> AbsToCon C.Expr -> AbsToCon C.Expr@@ -771,83 +812,96 @@       DefP _ f            ps -> Just (HdDef f, ps)       _                      -> Nothing -recoverOpApp :: (ToConcrete a c, HasRange c) =>-                ((Precedence -> Bool) -> AbsToCon c -> AbsToCon c) ->-                (Range -> C.Name -> [c] -> c) -> (a -> Maybe (Hd, [NamedArg a])) -> a ->-                AbsToCon c -> AbsToCon c-recoverOpApp bracket opApp view e mdefault = case view e of-  Nothing -> mdefault+recoverOpApp :: (ToConcrete a c, HasRange c)+  => ((Precedence -> Bool) -> AbsToCon c -> AbsToCon c)+  -> (Range -> C.QName -> [c] -> c)+  -> (a -> Maybe (Hd, [NamedArg a]))+  ->  a+  -> AbsToCon c+  -> AbsToCon c+recoverOpApp bracket opApp view e mDefault = case view e of+  Nothing -> mDefault   Just (hd, args)     | all notHidden args  -> do-      let  args' = map (namedThing . unArg) args+      let  args' = map namedArg args       case hd of-        HdVar n | isNoName n -> mdefault-                | otherwise  -> do-          x <- toConcrete n-          doCName (theFixity $ nameFixity n) x args'-        HdDef qn -> doQName qn args'-        HdCon qn -> doQName qn args'-    | otherwise -> mdefault+        HdVar  n+          | isNoName n    -> mDefault+          | otherwise     -> doQNameHelper id        C.QName  n args'+        HdDef qn          -> doQNameHelper qnameName id      qn args'+        HdCon qn          -> doQNameHelper qnameName id      qn args'+    | otherwise           -> mDefault   where -  isNoName x = C.isNoName $ A.nameConcrete x+  isNoName :: A.Name -> Bool+  isNoName  x = C.isNoName $ A.nameConcrete x +  notHidden :: NamedArg a -> Bool   notHidden a = argHiding a == NotHidden -  -- qualified names can't use mixfix syntax-  doQName qn as = do-    x <- toConcrete qn-    case x of-      C.QName x -> doCName (theFixity $ nameFixity $ qnameName qn) x as-      _         -> mdefault+  doQNameHelper fixityHelper conHelper n as = do+    x <- toConcrete n+    doQName (theFixity $ nameFixity $ fixityHelper n) (conHelper x) as    -- fall-back (wrong number of arguments or no holes)-  doCName _ cn@(C.Name _ xs) es-    | length xs == 1        = mdefault-    | length es /= numHoles = mdefault-    | List.null es          = mdefault-    where numHoles = length [ () | Hole <- xs ]-          msg = "doCName " ++ showList xs "" ++ " on " ++ show (length es) ++ " args"+  doQName _ n es+    | length xs == 1        = mDefault+    | length es /= numHoles = mDefault+    | List.null es          = mDefault+    where+      xs       = C.nameParts $ C.unqualify n+      numHoles = length (filter (== Hole) xs)+      msg      = concat [ "doQName "+                        , showList xs ""+                        , " on "+                        , show (length es)+                        , " args" ]    -- binary case-  doCName fixity cn@(C.Name _ xs) as+  doQName fixity n as     | Hole <- head xs     , Hole <- last xs = do-        let a1     = head as-            an     = last as-            as'    = case as of-                       as@(_:_:_) -> init $ tail as-                       _          -> __IMPOSSIBLE__+        let a1  = head as+            an  = last as+            as' = case as of+                    as@(_ : _ : _) -> init $ tail as+                    _              -> __IMPOSSIBLE__         e1 <- toConcreteCtx (LeftOperandCtx fixity) a1         es <- mapM (toConcreteCtx InsideOperandCtx) as'         en <- toConcreteCtx (RightOperandCtx fixity) an         bracket (opBrackets fixity)-            $ return $ opApp (getRange (e1,en)) cn ([e1] ++ es ++ [en])+          $ return $ opApp (getRange (e1, en)) n ([e1] ++ es ++ [en])+    where+      xs = C.nameParts $ C.unqualify n    -- prefix-  doCName fixity cn@(C.Name _ xs) as+  doQName fixity n as     | Hole <- last xs = do         let an  = last as             as' = case as of-                    as@(_:_) -> init as-                    _        -> __IMPOSSIBLE__+                    as@(_ : _) -> init as+                    _          -> __IMPOSSIBLE__         es <- mapM (toConcreteCtx InsideOperandCtx) as'         en <- toConcreteCtx (RightOperandCtx fixity) an         bracket (opBrackets fixity)-            $ return $ opApp (getRange (cn,en)) cn (es ++ [en])+          $ return $ opApp (getRange (n, en)) n (es ++ [en])+    where+      xs = C.nameParts $ C.unqualify n    -- postfix-  doCName fixity cn@(C.Name _ xs) as+  doQName fixity n as     | Hole <- head xs = do-        let a1     = head as-            as'    = tail as+        let a1  = head as+            as' = tail as         e1 <- toConcreteCtx (LeftOperandCtx fixity) a1         es <- mapM (toConcreteCtx InsideOperandCtx) as'         bracket (opBrackets fixity)-            $ return $ opApp (getRange (e1,cn)) cn ([e1] ++ es)+          $ return $ opApp (getRange (e1, n)) n ([e1] ++ es)+    where+      xs = C.nameParts $ C.unqualify n    -- roundfix-  doCName _ cn as = do+  doQName _ n as = do     es <- mapM (toConcreteCtx InsideOperandCtx) as     bracket roundFixBrackets-      $ return $ opApp (getRange cn) cn es+      $ return $ opApp (getRange n) n es
src/full/Agda/Syntax/Translation/ConcreteToAbstract.hs view
@@ -1,5 +1,6 @@ {-# LANGUAGE CPP, MultiParamTypeClasses, FunctionalDependencies,-             FlexibleInstances, UndecidableInstances, OverlappingInstances+             FlexibleInstances, UndecidableInstances, OverlappingInstances,+             ScopedTypeVariables   #-}  {-| Translation from "Agda.Syntax.Concrete" to "Agda.Syntax.Abstract". Involves scope analysis,@@ -26,28 +27,28 @@ import Control.Monad.Reader hiding (mapM) import Control.Monad.Error hiding (mapM) import Data.Typeable-import Data.Traversable (mapM)-import Data.List ((\\), nub)+import Data.Traversable (mapM, traverse)+import Data.List ((\\), nub, foldl') import qualified Data.Map as Map  import Agda.Syntax.Concrete as C hiding (topLevelModuleName) import Agda.Syntax.Concrete.Operators+-- import qualified Agda.Syntax.Concrete.Copatterns as Cop -- merged into Operators import Agda.Syntax.Abstract as A+import Agda.Syntax.Abstract.Copatterns import Agda.Syntax.Position import Agda.Syntax.Common import Agda.Syntax.Info import Agda.Syntax.Concrete.Definitions as C-import Agda.Syntax.Concrete.Operators import Agda.Syntax.Concrete.Pretty import Agda.Syntax.Abstract.Pretty import Agda.Syntax.Fixity import Agda.Syntax.Notation import Agda.Syntax.Scope.Base import Agda.Syntax.Scope.Monad-import Agda.Syntax.Strict  import Agda.TypeChecking.Monad.Base (TypeError(..), Call(..), typeError,-                                     TCErr(..), TCErr'(..), extendlambdaname)+                                     TCErr(..), extendlambdaname) import Agda.TypeChecking.Monad.Trace (traceCall, traceCallCPS, setCurrentRange) import Agda.TypeChecking.Monad.State import Agda.TypeChecking.Monad.Options@@ -85,26 +86,12 @@ printScope :: String -> Int -> String -> ScopeM () printScope tag v s = verboseS ("scope." ++ tag) v $ do   scope <- getScope-  reportSLn "" 0 $ s ++ " " ++ show scope+  reportSDoc "" 0 $ return $ vcat [ text s, text $ show scope ]  {--------------------------------------------------------------------------     Helpers  --------------------------------------------------------------------------} -lhsArgs :: C.Pattern -> (C.Name, [NamedArg C.Pattern])-lhsArgs p = case appView p of-    Arg _ _ (Named _ (IdentP (C.QName x))) : ps -> (x, ps)-    _                                         -> __IMPOSSIBLE__-    where-        mkHead    = Arg NotHidden Relevant . unnamed-        notHidden = Arg NotHidden Relevant . unnamed-        appView p = case p of-            AppP p arg    -> appView p ++ [arg]-            OpAppP _ x ps -> mkHead (IdentP $ C.QName x) : map notHidden ps-            ParenP _ p    -> appView p-            RawAppP _ _   -> __IMPOSSIBLE__-            _             -> [ mkHead p ]- annotateDecl :: ScopeM A.Declaration -> ScopeM A.Declaration annotateDecl m = annotateDecls $ (:[]) <$> m @@ -134,15 +121,18 @@     xs = concatMap vars ps     vars :: A.Pattern' e -> [C.Name]     vars p = case p of-      A.VarP x        -> [nameConcrete x]-      A.ConP _ _ args -> concatMap (vars . namedThing . unArg) args-      A.WildP _       -> []-      A.AsP _ x p     -> nameConcrete x : vars p-      A.DotP _ _      -> []-      A.AbsurdP _     -> []-      A.LitP _        -> []-      A.DefP _ _ args -> __IMPOSSIBLE__-      A.ImplicitP _   -> __IMPOSSIBLE__+      A.VarP x               -> [nameConcrete x]+      A.ConP _ _ args        -> concatMap (vars . namedArg) args+      A.WildP _              -> []+      A.AsP _ x p            -> nameConcrete x : vars p+      A.DotP _ _             -> []+      A.AbsurdP _            -> []+      A.LitP _               -> []+      A.DefP _ _ args        -> concatMap (vars . namedArg) args+        -- Projection pattern, @args@ should be empty unless we have+        -- indexed records.+      A.ImplicitP _          -> __IMPOSSIBLE__+      A.PatternSynP _ _ args -> concatMap (vars . namedArg) args  -- | Compute the type of the record constructor (with bogus target type) recordConstructorType :: [NiceDeclaration] -> C.Expr@@ -156,7 +146,8 @@     build (NiceField r f _ _ x (Arg h rel e) : fs) =         C.Pi [C.TypedBindings r $ Arg h rel (C.TBind r [BName x f] e)] $ build fs       where r = getRange x-    build (d : fs)                     = C.Let noRange (notSoNiceDeclarations [d]) $ build fs+    build (d : fs)                     = C.Let noRange [killRange $ notSoNiceDeclaration d] $+                                           build fs     build []                           = C.SetN noRange 0 -- todo: nicer  checkModuleApplication (C.SectionApp _ tel e) m0 x dir' =@@ -180,12 +171,12 @@     printScope "mod.inst" 20 "copied source module"     reportSLn "scope.mod.inst" 30 $ "renamings:\n  " ++ show renD ++ "\n  " ++ show renM     return ((A.SectionApp tel' m1 args'), renD, renM)-checkModuleApplication (C.RecordModuleIFS _ rec) m0 x dir' =+checkModuleApplication (C.RecordModuleIFS _ recN) m0 x dir' =   withCurrentModule m0 $ do-    m1 <- toAbstract $ OldModuleName rec+    m1 <- toAbstract $ OldModuleName recN     s <- getNamedScope m1     (s', (renM, renD)) <- copyScope m0 s-    s' <- applyImportDirectiveM rec dir' s'+    s' <- applyImportDirectiveM recN dir' s'     modifyCurrentScope $ const s'      printScope "mod.inst" 20 "copied record module"@@ -318,21 +309,26 @@ nameExpr :: AbstractName -> A.Expr nameExpr d = mk (anameKind d) $ anameName d   where-    mk DefName = Def-    mk ConName = Con . AmbQ . (:[])+    mk DefName        = Def+    mk FldName        = Def+    mk ConName        = Con . AmbQ . (:[])+    mk PatternSynName = A.PatternSyn  instance ToAbstract OldQName A.Expr where   toAbstract (OldQName x) = do     qx <- resolveName x     reportSLn "scope.name" 10 $ "resolved " ++ show x ++ ": " ++ show qx     case qx of-      VarName x'         -> return $ A.Var x'-      DefinedName _ d    -> return $ nameExpr d-      ConstructorName ds -> return $ A.Con $ AmbQ (map anameName ds)-      UnknownName        -> notInScope x+      VarName x'          -> return $ A.Var x'+      DefinedName _ d     -> return $ nameExpr d+      FieldName     d     -> return $ nameExpr d+      ConstructorName ds  -> return $ A.Con $ AmbQ (map anameName ds)+      UnknownName         -> notInScope x+      PatternSynResName d -> return $ nameExpr d  data APatName = VarPatName A.Name               | ConPatName [AbstractName]+              | PatternSynPatName AbstractName  instance ToAbstract PatName APatName where   toAbstract (PatName x) = do@@ -341,9 +337,11 @@     z  <- case (rx, x) of       -- TODO: warn about shadowing       (VarName y,       C.QName x)                          -> return $ Left x -- typeError $ RepeatedVariableInPattern y x+      (FieldName d,     C.QName x)                          -> return $ Left x       (DefinedName _ d, C.QName x) | DefName == anameKind d -> return $ Left x       (UnknownName,     C.QName x)                          -> return $ Left x-      (ConstructorName ds, _)                               -> return $ Right ds+      (ConstructorName ds, _)                               -> return $ Right (Left ds)+      (PatternSynResName d, _)                              -> return $ Right (Right d)       _                                                     ->         typeError $ GenericError $           "Cannot pattern match on " ++ show x ++ ", because it is not a constructor"@@ -353,10 +351,14 @@         p <- VarPatName <$> toAbstract (NewName x)         printLocals 10 "bound it:"         return p-      Right cs -> do-        reportSLn "scope.pat" 10 $ "it was a con: " ++ show (map anameName cs)-        return $ ConPatName cs+      Right (Left ds) -> do+        reportSLn "scope.pat" 10 $ "it was a con: " ++ show (map anameName ds)+        return $ ConPatName ds+      Right (Right d) -> do+        reportSLn "scope.pat" 10 $ "it was a pat syn: " ++ show (anameName d)+        return $ PatternSynPatName d + -- Should be a defined name. instance ToAbstract OldName A.QName where   toAbstract (OldName x) = do@@ -375,9 +377,10 @@ checkForModuleClash :: C.Name -> ScopeM () checkForModuleClash x = do   ms <- scopeLookup (C.QName x) <$> getScope-  unless (null ms) $+  unless (null ms) $ do+    reportSLn "scope.clash" 20 $ "clashing modules ms = " ++ show ms     setCurrentRange (getRange x) $-    typeError $ ShadowedModule $+      typeError $ ShadowedModule x $                 map ((`withRangeOf` x) . amodName) ms  instance ToAbstract NewModuleName A.ModuleName where@@ -385,7 +388,7 @@     checkForModuleClash x     m <- getCurrentModule     y <- freshQModule m x-    createModule y+    createModule False y     return y  instance ToAbstract NewModuleQName A.ModuleName where@@ -393,7 +396,7 @@     where       toAbs m (C.QName x)  = do         y <- freshQModule m x-        createModule y+        createModule False y         return y       toAbs m (C.Qual x q) = do         m' <- freshQModule m x@@ -477,13 +480,15 @@                     { metaRange  = r                     , metaScope  = scope                     , metaNumber = n+                    , metaNameSuggestion = ""                     }       C.Underscore r n -> do         scope <- getScope         return $ A.Underscore $ MetaInfo                     { metaRange  = r                     , metaScope  = scope-                    , metaNumber = n+                    , metaNumber = maybe Nothing __IMPOSSIBLE__ n+                    , metaNameSuggestion = maybe "" id n                     }    -- Raw application@@ -537,11 +542,11 @@             insertApp _ = __IMPOSSIBLE__             insertHead (C.LHS p wps eqs with) = C.LHS (insertApp p) wps eqs with             insertHead (C.Ellipsis r wps eqs with) = C.Ellipsis r wps eqs with-        scdef <- toAbstract (C.FunDef r [] defaultFixity' ConcreteDef cname+        scdef <- toAbstract (C.FunDef r [] defaultFixity' ConcreteDef True cname                                (map (\(lhs,rhs,wh) -> -- wh = NoWhere, see parser for more info                                       C.Clause cname (insertHead lhs) rhs wh []) cs))         case scdef of-          (A.ScopedDecl si [A.FunDef di qname' cs]) -> do+          (A.ScopedDecl si [A.FunDef di qname' NotDelayed cs]) -> do             setScope si             return $ A.ExtendedLam (ExprRange r) di qname' cs           _ -> __IMPOSSIBLE__@@ -557,7 +562,7 @@ -- Irrelevant non-dependent function type        C.Fun r e1 e2 -> do-        Arg h rel (e0, dotted) <- fmapM (toAbstractDot FunctionSpaceDomainCtx) $ mkArg e1+        Arg h rel (e0, dotted) <- traverse (toAbstractDot FunctionSpaceDomainCtx) $ mkArg e1         let e1 = Arg h (if dotted then Irrelevant else rel) e0         e2 <- toAbstractCtx TopCtx e2         let info = ExprRange r@@ -698,11 +703,18 @@ -- | runs Syntax.Concrete.Definitions.niceDeclarations on main module niceDecls :: [C.Declaration] -> ScopeM [NiceDeclaration] niceDecls ds = case runNice $ niceDeclarations ds of-  Left e   -> throwError $ TCErr Nothing $ Exception (getRange e) (show e)+  Left e   -> throwError $ Exception (getRange e) (show e)   Right ds -> return ds  instance ToAbstract [C.Declaration] [A.Declaration] where-  toAbstract ds = toAbstract =<< niceDecls ds+  toAbstract ds = do+    -- don't allow to switch off termination checker in --safe mode+    ds <- ifM (optSafe <$> commandLineOptions) (mapM noNoTermCheck ds) (return ds)+    toAbstract =<< niceDecls ds+   where+    noNoTermCheck (C.Pragma (NoTerminationCheckPragma r)) =+      typeError $ SafeFlagNoTerminationCheck+    noNoTermCheck d = return d  newtype LetDefs = LetDefs [C.Declaration] newtype LetDef = LetDef NiceDeclaration@@ -714,7 +726,7 @@ instance ToAbstract LetDef [A.LetBinding] where     toAbstract (LetDef d) =         case d of-            NiceMutual _ d@[C.FunSig _ fx _ rel x t, C.FunDef _ _ _ abstract _ [cl]] ->+            NiceMutual _ _ d@[C.FunSig _ fx _ rel _ x t, C.FunDef _ _ _ abstract _ _ [cl]] ->                 do  when (abstract == AbstractDef) $ do                       typeError $ GenericError $ "abstract not allowed in let expressions"                     e <- letToAbstract cl@@ -722,6 +734,15 @@                     x <- toAbstract (NewName $ C.BName x fx)                     return [ A.LetBind (LetRange $ getRange d) rel x t e ] +            -- irrefutable let binding, like  (x , y) = rhs+            NiceFunClause r PublicAccess ConcreteDef termCheck d@(C.FunClause (C.LHS p [] [] []) (C.RHS rhs) NoWhere) -> do+              rhs <- toAbstract rhs+              p   <- parsePattern p+              p   <- toAbstract p+              checkPatternLinearity [p]+              p   <- toAbstract p+              return [ A.LetPatBind (LetRange r) p rhs ]+             -- You can't open public in a let             NiceOpen r x dirs | not (C.publicOpen dirs) -> do               m       <- toAbstract (OldModuleName x)@@ -743,8 +764,17 @@             _   -> notAValidLetBinding d         where             letToAbstract (C.Clause top clhs@(C.LHS p [] [] []) (C.RHS rhs) NoWhere []) = do-                p    <- parseLHS (Just top) p+{-+                p    <- parseLHS top p                 localToAbstract (snd $ lhsArgs p) $ \args ->+-}+                (x, args) <- do+                  res <- parseLHS top p+                  case res of+                    C.LHSHead x args -> return (x, args)+                    C.LHSProj{} -> typeError $ GenericError $ "copatterns not allowed in let bindings"++                localToAbstract args $ \args ->                     do  rhs <- toAbstract rhs                         foldM lambda rhs (reverse args)  -- just reverse because these DomainFree             letToAbstract _ = notAValidLetBinding d@@ -770,15 +800,15 @@    -- Axiom     C.Axiom r f p rel x t -> do+      -- check that we do not postulate in --safe mode       clo <- commandLineOptions       when (optSafe clo) (typeError (SafeFlagPostulate x))-      t' <- toAbstractCtx TopCtx t-      y  <- freshAbstractQName f x-      bindName p DefName x y-      return [ A.Axiom (mkDefInfo x f p ConcreteDef r) rel y t' ]+      -- check the postulate+      toAbstractNiceAxiom d    -- Fields     C.NiceField r f p a x t -> do+      unless (p == PublicAccess) $ typeError $ GenericError "Record fields can not be private"       t' <- toAbstractCtx TopCtx t       y  <- freshAbstractQName f x       irrProj <- optIrrelevantProjections <$> pragmaOptions@@ -786,7 +816,7 @@         -- Andreas, 2010-09-24: irrelevant fields are not in scope         -- this ensures that projections out of irrelevant fields cannot occur         -- Ulf: unless you turn on --irrelevant-projections-        bindName p DefName x y+        bindName p FldName x y       return [ A.Field (mkDefInfo x f p a r) y t' ]    -- Primitive function@@ -797,10 +827,9 @@       return [ A.Primitive (mkDefInfo x f p a r) y t' ]    -- Definitions (possibly mutual)-    NiceMutual r ds -> do+    NiceMutual r termCheck ds -> do       ds' <- toAbstract ds-      return [ A.Mutual (DeclInfo C.noName_ r) ds' ]-                          -- TODO: what does the info mean here?+      return [ A.Mutual (MutualInfo termCheck r) ds' ]      C.NiceRecSig r f a x ls t -> withLocalVars $ do         let toTypeBinding :: C.LamBinding -> C.TypedBindings@@ -820,17 +849,26 @@                _            -> __IMPOSSIBLE__         ls' <- toAbstract (map toTypeBinding ls)         x'  <- freshAbstractQName f x+        {- -- Andreas, 2012-01-16: remember number of parameters+        bindName a (DataName (length ls)) x x' -}         bindName a DefName x x'         t' <- toAbstract t         return [ A.DataSig (mkDefInfo x f a ConcreteDef r) x' ls' t' ]   -- Type signatures-    C.FunSig r f p rel x t -> (:[]) <$> toAbstract (C.Axiom r f p rel x t)+    C.FunSig r f p rel tc x t -> toAbstractNiceAxiom (C.Axiom r f p rel x t)   -- Function definitions-    C.FunDef r ds f a x cs -> do+    C.FunDef r ds f a tc x cs -> do         printLocals 10 $ "checking def " ++ show x-        (x',cs') <- toAbstract (OldName x,cs)-        return [ A.FunDef (mkDefInfo x f PublicAccess a r) x' cs' ]+        (x',cs) <- toAbstract (OldName x,cs)+        (delayed, cs) <- translateCopatternClauses cs+        return [ A.FunDef (mkDefInfo x f PublicAccess a r) x' delayed cs ] +  -- Uncategorized function clauses+    C.NiceFunClause r acc abs termCheck (C.FunClause lhs rhs wcls) ->+      typeError $ GenericError $+        "Missing type signature for left hand side " ++ show lhs+    C.NiceFunClause{} -> __IMPOSSIBLE__+   -- Data definitions     C.DataDef r f a x pars cons -> withLocalVars $ do         printScope "scope.data.def" 20 ("checking DataDef for " ++ show x)@@ -848,7 +886,7 @@         -- Create the module for the qualified constructors         checkForModuleClash x -- disallow shadowing previously defined modules         let m = mnameFromList $ qnameToList x'-        createModule m+        createModule True m         bindModule p x m  -- make it a proper module         cons <- toAbstract (map (ConstrDecl NoRec m a p) cons)         -- Open the module@@ -860,7 +898,7 @@         conName _ = __IMPOSSIBLE__    -- Record definitions (mucho interesting)-    C.RecDef r f a x cm pars fields ->+    C.RecDef r f a x ind cm pars fields ->       withLocalVars $ do         -- Check that the generated module doesn't clash with a previously         -- defined module@@ -872,7 +910,7 @@         m0     <- getCurrentModule         let m = A.qualifyM m0 $ mnameFromList $ (:[]) $ last $ qnameToList x'         printScope "rec" 15 "before record"-        createModule m+        createModule False m         afields <- withCurrentModule m $ do           afields <- toAbstract fields           printScope "rec" 15 "checked fields"@@ -880,14 +918,24 @@         bindModule p x m         cm' <- mapM (\(ThingWithFixity c f) -> bindConstructorName m c f a p YesRec) cm         printScope "rec" 15 "record complete"-        return [ A.RecDef (mkDefInfo x f PublicAccess a r) x' cm' pars contel afields ]+        return [ A.RecDef (mkDefInfo x f PublicAccess a r) x' ind cm' pars contel afields ] +    -- Andreas, 2012-10-30 anonymous modules are like Coq sections     NiceModule r p a (C.QName name) tel ds ->       traceCall (ScopeCheckDeclaration $ NiceModule r p a (C.QName name) tel []) $ do+      (name, p, isSection) <- if not (C.isNoName name)+        then return (name, p, False)+        else do+          (i :: NameId) <- fresh+          return (C.NoName (getRange name) i, PrivateAccess, True)       aname <- toAbstract (NewModuleName name)-      x <- snd <$> scopeCheckModule r (C.QName name) aname tel ds+      ds <- snd <$> scopeCheckModule r (C.QName name) aname tel ds       bindModule p name aname-      return x+      -- if the module was anonymous open it public+      when isSection $+        openModule_ (C.QName name) $+          defaultImportDir { publicOpen = True }+      return ds      NiceModule _ _ _ C.Qual{} _ _ -> __IMPOSSIBLE__ @@ -962,11 +1010,38 @@                            })                         m ] +    NicePatternSyn r fx n as p -> do+      reportSLn "scope.pat" 10 $ "found nice pattern syn: " ++ show r +      isparameterised <- not . null <$> getLocalVars+      when isparameterised $ typeError $ NotSupported+          "pattern synonym in parameterised module"++      y <- freshAbstractQName fx n+      bindName PublicAccess PatternSynName n y+      defn <- withLocalVars $ do+               p'   <- killRange <$> (toAbstract =<< toAbstract =<< parsePatternSyn p)+               as'  <- mapM (\a -> unVarName =<< resolveName (C.QName a)) as+               return (as', p')+      modifyPatternSyns (Map.insert y defn)+      return []+      where unVarName (VarName a) = return a+            unVarName _           = typeError $ UnusedVariableInPatternSynonym++    where+      -- checking postulate or type sig. without checking safe flag+      toAbstractNiceAxiom (C.Axiom r f p rel x t) = do+        t' <- toAbstractCtx TopCtx t+        y  <- freshAbstractQName f x+        bindName p DefName x y+        return [ A.Axiom (mkDefInfo x f p ConcreteDef r) rel y t' ]+      toAbstractNiceAxiom _ = __IMPOSSIBLE__++ data IsRecordCon = YesRec | NoRec data ConstrDecl = ConstrDecl IsRecordCon A.ModuleName IsAbstract Access C.NiceDeclaration -bindConstructorName m x f a p rec = do+bindConstructorName m x f a p record = do   -- The abstract name is the qualified one   y <- withCurrentModule m $ freshAbstractQName f x   -- Bind it twice, once unqualified and once qualified@@ -979,17 +1054,17 @@     p' = case a of            AbstractDef -> PrivateAccess            _           -> p-    p'' = case (a, rec) of+    p'' = case (a, record) of             (AbstractDef, _) -> PrivateAccess             (_, YesRec)      -> OnlyQualified   -- record constructors aren't really in the record module             _                -> PublicAccess  instance ToAbstract ConstrDecl A.Declaration where-  toAbstract (ConstrDecl rec m a p (C.Axiom r f _ rel x t)) = do -- rel==Relevant+  toAbstract (ConstrDecl record m a p (C.Axiom r f _ rel x t)) = do -- rel==Relevant     t' <- toAbstractCtx TopCtx t     -- The abstract name is the qualified one     -- Bind it twice, once unqualified and once qualified-    y <- bindConstructorName m x f a p rec+    y <- bindConstructorName m x f a p record     printScope "con" 15 "bound constructor"     return $ A.Axiom (mkDefInfo x f p ConcreteDef r) rel y t' @@ -1046,11 +1121,16 @@       case e of         A.Def x -> return [ A.EtaPragma x ]         _       -> fail "Bad ETA pragma"+    -- NO_TERMINATION_CHECK is handled by the nicifier+    toAbstract (C.NoTerminationCheckPragma _) = __IMPOSSIBLE__  instance ToAbstract C.Clause A.Clause where     toAbstract (C.Clause top C.Ellipsis{} _ _ _) = fail "bad '...'" -- TODO: errors message     toAbstract (C.Clause top lhs@(C.LHS p wps eqs with) rhs wh wcs) = withLocalVars $ do-      let wcs' = map (expandEllipsis p wps) wcs+-- WAS:     let wcs' = map (expandEllipsis p wps) wcs+      -- Andreas, 2012-02-14: need to reset local vars before checking subclauses+      vars <- getLocalVars+      let wcs' = map (\ c -> setLocalVars vars >> do return $ expandEllipsis p wps c) wcs       lhs' <- toAbstract (LeftHandSide top p wps)       printLocals 10 "after lhs:"       let (whname, whds) = case wh of@@ -1085,9 +1165,16 @@   bindModule acc m am   return (x, ds) -data RightHandSide = RightHandSide [C.Expr] [C.Expr] [C.Clause] C.RHS [C.Declaration]+data RightHandSide = RightHandSide+  { rhsRewriteEqn :: [C.RewriteEqn]  -- ^ @rewrite e@ (many)+  , rhsWithExpr   :: [C.WithExpr]    -- ^ @with e@ (many)+  , rhsSubclauses :: [ScopeM C.Clause] -- ^ the subclauses spawned by a with (monadic because we need to reset the local vars before checking these clauses)+  , rhs           :: C.RHS+  , rhsWhereDecls :: [C.Declaration]+  }+ data AbstractRHS = AbsurdRHS'-                 | WithRHS' [A.Expr] [C.Clause]  -- ^ The with clauses haven't been translated yet+                 | WithRHS' [A.Expr] [ScopeM C.Clause]  -- ^ The with clauses haven't been translated yet                  | RHS' A.Expr                  | RewriteRHS' [A.Expr] AbstractRHS [A.Declaration] @@ -1110,7 +1197,7 @@     return $ RewriteRHS auxs eqs rhs wh   toAbstract (WithRHS' es cs) = do     aux <- withFunctionName "with-"-    A.WithRHS aux es <$> toAbstract cs+    A.WithRHS aux es <$> do toAbstract =<< sequence cs  instance ToAbstract RightHandSide AbstractRHS where   toAbstract (RightHandSide eqs@(_:_) es cs rhs wh) = do@@ -1139,67 +1226,132 @@ instance ToAbstract LeftHandSide A.LHS where     toAbstract (LeftHandSide top lhs wps) =       traceCall (ScopeCheckLHS top lhs) $ do-        p <- parseLHS (Just top) lhs+        lhscore <- parseLHS top lhs+        reportSLn "scope.lhs" 5 $ "parsed lhs: " ++ show lhscore         printLocals 10 "before lhs:"-        let (x, ps) = lhsArgs p-        x    <- withLocalVars $ setLocalVars [] >> toAbstract (OldName x)-        args <- toAbstract ps-        wps  <- toAbstract =<< mapM (parseLHS Nothing) wps-        checkPatternLinearity (map (namedThing . unArg) args ++ wps)+        -- error if copattern parsed but no --copatterns option+        haveCoPats <- optCopatterns <$> pragmaOptions+        unless haveCoPats $+          case lhscore of+            C.LHSHead x ps -> return ()+            C.LHSProj{} -> typeError $ NeedOptionCopatterns+        -- scope check patterns except for dot patterns+        lhscore <- toAbstract lhscore+        reportSLn "scope.lhs" 5 $ "parsed lhs patterns: " ++ show lhscore+        wps  <- toAbstract =<< mapM parsePattern wps+        checkPatternLinearity $ lhsCoreAllPatterns lhscore ++ wps         printLocals 10 "checked pattern:"-        args <- toAbstract args -- take care of dot patterns-        wps  <- toAbstract wps+        -- scope check dot patterns+        lhscore <- toAbstract lhscore+        reportSLn "scope.lhs" 5 $ "parsed lhs dot patterns: " ++ show lhscore+        wps     <- toAbstract wps         printLocals 10 "checked dots:"-        return $ A.LHS (LHSRange $ getRange (lhs, wps)) x args wps+        return $ A.LHS (LHSRange $ getRange (lhs, wps)) lhscore wps +-- does not check pattern linearity+instance ToAbstract C.LHSCore (A.LHSCore' C.Expr) where+    toAbstract (C.LHSHead x ps) = do+        x    <- withLocalVars $ setLocalVars [] >> toAbstract (OldName x)+        args <- toAbstract ps+        return $ A.LHSHead x args+    toAbstract (C.LHSProj d ps1 l ps2) = do+        qx <- resolveName d+        d  <- case qx of+                FieldName d -> return $ anameName d+                UnknownName -> notInScope d+                _           -> typeError $ GenericError $+                  "head of copattern needs to be a field identifier, but "+                  ++ show d ++ " isn't one"+        args1 <- toAbstract ps1+        l     <- toAbstract l+        args2 <- toAbstract ps2+        return $ A.LHSProj d args1 l args2+ instance ToAbstract c a => ToAbstract (Arg c) (Arg a) where     toAbstract (Arg h r e) = Arg h r <$> toAbstractCtx (hiddenArgumentCtx h) e  instance ToAbstract c a => ToAbstract (Named name c) (Named name a) where     toAbstract (Named n e) = Named n <$> toAbstract e +{- DOES NOT WORK ANYMORE with pattern synonyms+instance ToAbstract c a => ToAbstract (A.LHSCore' c) (A.LHSCore' a) where+    toAbstract = mapM toAbstract+-}++instance ToAbstract (A.LHSCore' C.Expr) (A.LHSCore' A.Expr) where+    toAbstract (A.LHSHead f ps)             = A.LHSHead f <$> mapM toAbstract ps+    toAbstract (A.LHSProj d ps lhscore ps') = A.LHSProj d <$> mapM toAbstract ps+      <*> mapM toAbstract lhscore <*> mapM toAbstract ps'+ -- Patterns are done in two phases. First everything but the dot patterns, and -- then the dot patterns. This is because dot patterns can refer to variables -- bound anywhere in the pattern. -instance ToAbstract c a => ToAbstract (A.Pattern' c) (A.Pattern' a) where-    toAbstract = mapM toAbstract+instance ToAbstract (A.Pattern' C.Expr) (A.Pattern' A.Expr) where+    toAbstract (A.VarP x)             = return $ A.VarP x+    toAbstract (A.ConP i ds as)       = A.ConP i ds <$> mapM toAbstract as+    toAbstract (A.DefP i x as)        = A.DefP i x <$> mapM toAbstract as+    toAbstract (A.WildP i)            = return $ A.WildP i+    toAbstract (A.AsP i x p)          = A.AsP i x <$> toAbstract p+    toAbstract (A.DotP i e)           = A.DotP i <$> toAbstract e+    toAbstract (A.AbsurdP i)          = return $ A.AbsurdP i+    toAbstract (A.LitP l)             = return $ A.LitP l+    toAbstract (A.ImplicitP i)        = return $ A.ImplicitP i+    toAbstract (A.PatternSynP i x as) = do+        p   <- lookupPatternSyn x+        as' <- mapM toAbstract as+        instPatternSyn p as'+      where+        instPatternSyn :: A.PatternSynDefn -> [NamedArg A.Pattern] -> ScopeM A.Pattern+        instPatternSyn (ns, p) as+            | length ns == length as = return $ substPattern s $ setRange (getRange i) p+            | otherwise              = typeError $ PatternSynonymArityMismatch x+          where+          s = zipWith' (\n a -> (n, namedThing (unArg a))) ns as + instance ToAbstract C.Pattern (A.Pattern' C.Expr) where      toAbstract p@(C.IdentP x) = do         px <- toAbstract (PatName x)         case px of-            VarPatName y  -> return $ VarP y-            ConPatName ds -> return $ ConP (PatRange (getRange p))-                                           (AmbQ $ map anameName ds)-                                           []+            VarPatName y        -> return $ VarP y+            ConPatName ds       -> return $ ConP (PatRange (getRange p))+                                                 (AmbQ $ map anameName ds)+                                                 []+            PatternSynPatName d -> return $ PatternSynP (PatRange (getRange p))+                                                        (anameName d) []      toAbstract p0@(AppP p q) = do         (p', q') <- toAbstract (p,q)         case p' of-            ConP _ x as -> return $ ConP info x (as ++ [q'])-            DefP _ x as -> return $ DefP info x (as ++ [q'])-            _           -> typeError $ InvalidPattern p0+            ConP _ x as        -> return $ ConP info x (as ++ [q'])+            DefP _ x as        -> return $ DefP info x (as ++ [q'])+            PatternSynP _ x as -> return $ PatternSynP info x (as ++ [q'])+            _                  -> typeError $ InvalidPattern p0         where             r = getRange p0             info = PatSource r $ \pr -> if appBrackets pr then ParenP r p0 else p0      toAbstract p0@(OpAppP r op ps) = do-        p <- toAbstract (IdentP $ C.QName op)+        p <- toAbstract (IdentP op)         ps <- toAbstract ps         case p of-          ConP _ x as -> return $ ConP info x (as ++ map (Arg NotHidden Relevant . unnamed) ps)-          DefP _ x as -> return $ DefP info x (as ++ map (Arg NotHidden Relevant. unnamed) ps)-          _           -> __IMPOSSIBLE__+          ConP        _ x as -> return $ ConP info x+                                    (as ++ map (Arg NotHidden Relevant . unnamed) ps)+          DefP        _ x as -> return $ DefP info x+                                    (as ++ map (Arg NotHidden Relevant . unnamed) ps)+          PatternSynP _ x as -> return $ PatternSynP info x+                                    (as ++ map (Arg NotHidden Relevant . unnamed) ps)+          _                  -> __IMPOSSIBLE__         where-            r = getRange p0+            r    = getRange p0             info = PatSource r $ \pr -> if appBrackets pr then ParenP r p0 else p0      -- Removed when parsing-    toAbstract (HiddenP _ _) = __IMPOSSIBLE__+    toAbstract (HiddenP _ _)   = __IMPOSSIBLE__     toAbstract (InstanceP _ _) = __IMPOSSIBLE__-    toAbstract (RawAppP _ _) = __IMPOSSIBLE__+    toAbstract (RawAppP _ _)   = __IMPOSSIBLE__      toAbstract p@(C.WildP r)    = return $ A.WildP (PatSource r $ const p)     toAbstract (C.ParenP _ p)   = toAbstract p@@ -1216,18 +1368,16 @@     toAbstract p0@(C.DotP r e) = return $ A.DotP info e         where info = PatSource r $ \_ -> p0     toAbstract p0@(C.AbsurdP r) = return $ A.AbsurdP info-        where-            info = PatSource r $ \_ -> p0+        where info = PatSource r $ \_ -> p0  -- | Turn an operator application into abstract syntax. Make sure to record the -- right precedences for the various arguments.-toAbstractOpApp :: C.Name -> [OpApp C.Expr] -> ScopeM A.Expr-toAbstractOpApp op@(C.NoName _ _) es = __IMPOSSIBLE__-toAbstractOpApp op@(C.Name _ _) es = do-    f  <- getFixity (C.QName op)+toAbstractOpApp :: C.QName -> [OpApp C.Expr] -> ScopeM A.Expr+toAbstractOpApp op es = do+    f  <- getFixity op     let (_,_,parts) = oldToNewNotation $ (op, f)-    op <- toAbstract (OldQName $ C.QName op)-    foldl app op <$> left (theFixity f) [p | p <- parts, not (isBindingHole p)] es+    op <- toAbstract (OldQName op)+    foldl' app op <$> left (theFixity f) [p | p <- parts, not (isBindingHole p)] es     where         app e arg = A.App (ExprRange (fuseRange e arg)) e                   $ Arg NotHidden Relevant $ unnamed arg
src/full/Agda/Syntax/Translation/InternalToAbstract.hs view
@@ -1,5 +1,6 @@ {-# LANGUAGE CPP, MultiParamTypeClasses, FunctionalDependencies,-             UndecidableInstances, TypeSynonymInstances, FlexibleInstances+             UndecidableInstances, TypeSynonymInstances, FlexibleInstances,+             ScopedTypeVariables   #-}  {-|@@ -13,7 +14,12 @@         - meta parameters         - shadowing -}-module Agda.Syntax.Translation.InternalToAbstract where+module Agda.Syntax.Translation.InternalToAbstract+  ( Reify(..)+  , ReifyWhen(..)+  , NamedClause+  , reifyPatterns+  ) where  import Prelude hiding (mapM_, mapM) import Control.Applicative@@ -26,7 +32,7 @@ import qualified Data.Map as Map import Data.Map (Map) import Data.List hiding (sort)-import Data.Traversable+import Data.Traversable as Trav  import Agda.Syntax.Literal import Agda.Syntax.Position@@ -39,7 +45,7 @@ import Agda.Syntax.Scope.Base import Agda.Syntax.Scope.Monad -import Agda.TypeChecking.Monad as M+import Agda.TypeChecking.Monad as M hiding (MetaInfo) import Agda.TypeChecking.Reduce import {-# SOURCE #-} Agda.TypeChecking.Records import Agda.TypeChecking.DisplayForm@@ -49,6 +55,7 @@ import Agda.TypeChecking.Free import Agda.TypeChecking.Substitute import Agda.TypeChecking.Telescope+import Agda.TypeChecking.DropArgs  import Agda.Utils.Monad import Agda.Utils.Tuple@@ -58,30 +65,66 @@ #include "../../undefined.h" import Agda.Utils.Impossible -apps :: (Expr, [Arg Expr]) -> TCM Expr-apps (e, []) = return e-apps (e, arg : args) | isHiddenArg arg =-    do  showImp <- showImplicitArguments-        if showImp then apps (App exprInfo e (unnamed <$> arg), args)-                   else apps (e, args)-apps (e, arg:args)          =-    apps (App exprInfo e (unnamed <$> arg), args)+-- Composition reified applications --------------------------------------- +napps :: Expr -> [NamedArg Expr] -> TCM Expr+napps e args = do+  dontShowImp <- not <$> showImplicitArguments+  let apply1 e arg | isHiddenArg arg && dontShowImp = e+                   | otherwise = App exprInfo e arg+  return $ foldl' apply1 e args++apps :: Expr -> [Arg Expr] -> TCM Expr+apps e args = napps e $ map (fmap unnamed) args++reifyApp :: Expr -> [Arg Term] -> TCM Expr+reifyApp e vs = apps e =<< reify vs++-- Omitting information ---------------------------------------------------+ exprInfo :: ExprInfo exprInfo = ExprRange noRange -reifyApp :: Expr -> [Arg Term] -> TCM Expr-reifyApp e vs = curry apps e =<< reify vs+underscore :: Expr+underscore = A.Underscore $ Info.emptyMetaInfo +-- Conditional reification to omitt terms that are not shown --------------++-- | @ReifyWhen@ is a auxiliary type class to reify 'Arg'.+--+--   @reifyWhen False@ should produce an 'underscore'.+--   This function serves to reify hidden/irrelevant things.+class Reify i a => ReifyWhen i a where+    reifyWhen :: Bool -> i -> TCM a+    reifyWhen _ = reify++instance Reify i Expr => ReifyWhen i Expr where+  reifyWhen True  i = reify i+  reifyWhen False t = return underscore++instance ReifyWhen i a => ReifyWhen (Arg i) (Arg a) where+  reifyWhen b = traverse (reifyWhen b)++instance ReifyWhen i a => ReifyWhen (Named n i) (Named n a) where+  reifyWhen b = traverse (reifyWhen b)++-- Reification ------------------------------------------------------------+ class Reify i a | i -> a where-    reify :: i -> TCM a+    reify     ::         i -> TCM a +instance Reify Expr Expr where+    reify = return+ instance Reify MetaId Expr where     reify x@(MetaId n) = liftTCM $ do-      mi  <- getMetaInfo <$> lookupMeta x-      let mi' = Info.MetaInfo (getRange mi)-                              (M.clScope mi)-                              (Just n)+      mi  <- mvInfo <$> lookupMeta x+      let mi' = Info.MetaInfo+                 { metaRange          = getRange $ miClosRange mi+                 , metaScope          = M.clScope $ miClosRange mi+                 , metaNumber         = Just n+                 , metaNameSuggestion = miNameSuggestion mi+                 }       ifM shouldReifyInteractionPoints           (do iis <- map (snd /\ fst) . Map.assocs                       <$> gets stInteractionPoints@@ -93,10 +136,10 @@  instance Reify DisplayTerm Expr where   reify d = case d of-    DTerm v -> reify v+    DTerm v -> reifyTerm False v     DDot  v -> reify v-    DCon c vs -> curry apps (A.Con (AmbQ [c])) =<< reify vs-    DDef f vs -> curry apps (A.Def f) =<< reify vs+    DCon c vs -> apps (A.Con (AmbQ [c])) =<< reify vs+    DDef f vs -> apps (A.Def f) =<< reify vs     DWithApp us vs -> do       us <- reify us       let wapp [e] = e@@ -116,15 +159,17 @@     else fallback  reifyDisplayFormP :: A.LHS -> TCM A.LHS-reifyDisplayFormP lhs@(A.LHS i x ps wps) =+reifyDisplayFormP lhs@(A.LHS i A.LHSProj{} wps) =+  typeError $ NotImplemented "reifyDisplayForm for copatterns"+reifyDisplayFormP lhs@(A.LHS i (A.LHSHead x ps) wps) =   ifM (not <$> displayFormsEnabled) (return lhs) $ do-    let vs = [ Arg h Relevant $ I.Var n [] | (n, h) <- zip [0..] $ map argHiding ps]+    let vs = [ Arg h Relevant $ I.var n | (n, h) <- zip [0..] $ map argHiding ps]     md <- liftTCM $ displayForm x vs     reportSLn "syntax.reify.display" 20 $       "display form of " ++ show x ++ " " ++ show ps ++ " " ++ show wps ++ ":\n  " ++ show md     case md of       Just d  | okDisplayForm d ->-        reifyDisplayFormP =<< displayLHS (map (namedThing . unArg) ps) wps d+        reifyDisplayFormP =<< displayLHS (map namedArg ps) wps d       _ -> return lhs   where     okDisplayForm (DWithApp (d : ds) []) =@@ -160,7 +205,7 @@       (f, vs, ds) -> do         ds <- mapM termToPat ds         vs <- mapM argToPat vs-        return $ LHS i f vs (ds ++ wps)+        return $ LHS i (LHSHead f vs) (ds ++ wps)       where         info = PatRange noRange         argToPat arg = fmap unnamed <$> traverse termToPat arg@@ -168,7 +213,7 @@         len = genericLength ps          termToPat :: DisplayTerm -> TCM A.Pattern-        termToPat (DTerm (I.Var n [])) = return $ ps !! fromIntegral n+        termToPat (DTerm (I.Var n [])) = return $ ps !! n         termToPat (DCon c vs) = A.ConP info (AmbQ [c]) <$> mapM argToPat vs         termToPat (DDot v) = A.DotP info <$> termToExpr v         termToPat (DDef _ []) = return $ A.WildP info@@ -181,51 +226,136 @@         -- TODO: restructure this to avoid having to repeat the code for reify         termToExpr :: Term -> TCM A.Expr         termToExpr (I.Var n [])-          | n < len = return $ patToTerm $ ps !! fromIntegral n+          | n < len = return $ A.patternToExpr $ ps !! n         termToExpr (I.Con c vs) =-          curry apps (A.Con (AmbQ [c])) =<< argsToExpr vs+          apps (A.Con (AmbQ [c])) =<< argsToExpr vs         termToExpr (I.Def f vs) =-          curry apps (A.Def f) =<< argsToExpr vs+          apps (A.Def f) =<< argsToExpr vs         termToExpr (I.Var n vs) =-          apps =<< (,) <$> reify (I.Var (n - len) []) <*> argsToExpr vs-        termToExpr _ = return $ A.Underscore minfo--        minfo = MetaInfo noRange emptyScopeInfo Nothing-        einfo = ExprRange noRange-        app = foldl (App einfo)--        patToTerm :: A.Pattern -> A.Expr-        patToTerm (A.VarP x)      = A.Var x-        patToTerm (A.ConP _ c ps) =-          A.Con c `app` map (fmap (fmap patToTerm)) ps-        patToTerm (A.DefP _ f ps) =-          A.Def f `app` map (fmap (fmap patToTerm)) ps-        patToTerm (A.WildP _)     = A.Underscore minfo-        patToTerm (A.AsP _ _ p)   = patToTerm p-        patToTerm (A.DotP _ e)    = e-        patToTerm (A.AbsurdP _)   = A.Underscore minfo  -- TODO: could this happen?-        patToTerm (A.LitP l)      = A.Lit l-        patToTerm (A.ImplicitP _) = A.Underscore minfo+          uncurry apps =<< (,) <$> reify (I.var (n - len)) <*> argsToExpr vs+        termToExpr _ = return underscore  instance Reify Literal Expr where   reify l@(LitInt    {}) = return (A.Lit l)   reify l@(LitFloat  {}) = return (A.Lit l)   reify l@(LitString {}) = return (A.Lit l)   reify l@(LitChar   {}) = return (A.Lit l)-  reify l@(LitQName   {}) = return (A.Lit l)+  reify l@(LitQName  {}) = return (A.Lit l)  instance Reify Term Expr where-  reify v = do+  reify v = reifyTerm True v++reifyTerm :: Bool -> Term -> TCM Expr+reifyTerm expandAnonDefs v = do     v <- instantiate v     case v of       I.Var n vs   -> do           x  <- liftTCM $ nameOfBV n `catchError` \_ -> freshName_ ("@" ++ show n)           reifyApp (A.Var x) vs-      I.Def x@(QName _ name) vs -> reifyDisplayForm x vs $ do+      I.Def x vs   -> reifyDisplayForm x vs $ reifyDef expandAnonDefs x vs+      I.Con x vs   -> do+        isR <- isGeneratedRecordConstructor x+        case isR of+          True -> do+            showImp <- showImplicitArguments+            let keep (a, v) = showImp || argHiding a == NotHidden+            r  <- getConstructorData x+            xs <- getRecordFieldNames r+            vs <- map unArg <$> reify vs+            return $ A.Rec exprInfo $ map (unArg *** id) $ filter keep $ zip xs vs+          False -> reifyDisplayForm x vs $ do+            ci <- getConstInfo x+            let Constructor{conPars = np} = theDef ci+            -- if we are the the module that defines constructor x+            -- then we have to drop at least the n module parameters+            n  <- getDefFreeVars x+            -- the number of parameters is greater (if the data decl has+            -- extra parameters) or equal (if not) to n+            when (n > np) __IMPOSSIBLE__+            let h = A.Con (AmbQ [x])+            if null vs then return h else do+            es <- reify vs+            -- Andreas, 2012-04-20: do not reify parameter arguments of constructor+            -- if the first regular constructor argument is hidden+            -- we turn it into a named argument, in order to avoid confusion+            -- with the parameter arguments which can be supplied in abstract syntax+            --+            -- Andreas, 2012-09-17: this does not remove all sources of confusion,+            -- since parameters could have the same name as regular arguments+            -- (see for example the parameter {i} to Data.Star.Star, which is also+            -- the first argument to the cons).+            -- @data Star {i}{I : Set i} ... where cons : {i :  I} ...@+            if (np == 0) then apps h es  -- if np==0 then n==0+            -- WAS: if (np == 0) then apps h $ genericDrop n es+             else do   -- get name of argument from type of constructor+              TelV tel _ <- telView (defType ci) -- need reducing version of telView because target of constructor could be a definition expanding into a function type+              let -- TelV tel _ = telView' (defType ci) -- WRONG, see test/suceed/NameFirstIfHidden+                  doms       = genericDrop np $ telToList tel+              case doms of+                -- Andreas, 2012-09-18+                -- If the first regular constructor argument is hidden,+                -- we keep the parameters to avoid confusion.+                (Dom Hidden _ _ : _) -> do+                  let us = genericReplicate (np - n) $ Arg Hidden Relevant underscore+                  apps h $ us ++ es+                -- otherwise, we drop all parameters+                _ -> apps h es+{- CODE FROM 2012-04-xx+              reportSLn "syntax.reify.con" 30 $ unlines+                [ "calling nameFirstIfHidden"+                , "doms = " ++ show doms+                , "es   = " ++ show es+                , "n    = " ++ show n+                , "np   = " ++ show np+                ]+              napps h $ genericDrop (n - np) $ nameFirstIfHidden doms es+-}+      I.Lam h b    -> do+        (x,e) <- reify b+        return $ A.Lam exprInfo (DomainFree h Relevant x) e+        -- Andreas, 2011-04-07 we do not need relevance information at internal Lambda+      I.Lit l        -> reify l+      I.Level l      -> reify l+      I.Pi a b       -> case b of+        NoAbs _ b -> uncurry (A.Fun $ exprInfo) <$> reify (a,b)+        b         -> do+          Arg h r a <- reify a+          (x, b)    <- reify b+          return $ A.Pi exprInfo [TypedBindings noRange $ Arg h r (TBind noRange [x] a)] b+      I.Sort s     -> reify s+      I.MetaV x vs -> uncurry apps =<< reify (x,vs)+      I.DontCare v -> A.DontCare <$> reifyTerm expandAnonDefs v+      I.Shared p   -> reifyTerm expandAnonDefs $ derefPtr p++    where+      -- Andreas, 2012-10-20  expand a copy in an anonymous module+      -- to improve error messages.+      -- Don't do this if we have just expanded into a display form,+      -- otherwise we loop!+      reifyDef True x@(QName m name) vs | A.isAnonymousModuleName m = do+        r <- reduceDefCopy x vs+        case r of+          YesReduction v -> do+            reportSLn "reify.anon" 20 $ unlines+              [ "reduction on defined ident. in anonymous module"+              , "x = " ++ show x+              , "v = " ++ show v+              ]+            reify v+          NoReduction () -> do+            reportSLn "reify.anon" 20 $ unlines+              [ "no reduction on defined ident. in anonymous module"+              , "x  = " ++ show x+              , "vs = " ++ show vs+              ]+            reifyDef' x vs+      reifyDef _ x vs = reifyDef' x vs++      reifyDef' x@(QName _ name) vs = do         mdefn <- liftTCM $ (Just <$> getConstInfo x) `catchError` \_ -> return Nothing-        (pad, vs) <-+        (pad, vs :: [NamedArg Term]) <-           case mdefn of-            Nothing -> (,) [] <$> (flip genericDrop vs <$> getDefFreeVars x)+            Nothing -> (,) [] <$> do map (fmap unnamed) <$> (flip genericDrop vs <$> getDefFreeVars x)             Just defn -> do               let def = theDef defn               -- This is tricky:@@ -239,77 +369,59 @@               -- We should drop this many arguments from the local context.               n <- getDefFreeVars x               -- These are the dropped projection arguments-              pad <- case def of+              (np, pad, dom) <-+                  case def of                       Function{ funProjection = Just (_, np) } -> do                         TelV tel _ <- telView (defType defn)                         scope <- getScope-                        let as       = take (np - 1) $ telToList tel-                            whocares = A.Underscore (Info.MetaInfo noRange scope Nothing)-                        return $ map (fmap $ const whocares) as-                      _ -> return []+                        let (as, dom:_) = splitAt (np - 1) $ telToList tel+                            whocares = A.Underscore $ Info.emptyMetaInfo { metaScope = scope }+                        return (np, map (argFromDom . (fmap $ const whocares)) as, dom)+                      _ -> return (0, [], __IMPOSSIBLE__)               -- Now pad' ++ vs' = drop n (pad ++ vs)               let pad' = genericDrop n pad+                  vs'  :: [Arg Term]                   vs'  = genericDrop (max 0 (n - size pad)) vs-              -- If showImplicit then keep the padding otherwise ignore it-              ifM showImplicitArguments-                  (return (pad', vs'))-                  (return ([], vs'))+              -- Andreas, 2012-04-21: get rid of hidden underscores {_}+              -- Keep non-hidden arguments of the padding+              showImp <- showImplicitArguments+              return (filter (not . isHiddenArg) pad',+                if not (null pad) && showImp && isHiddenArg (last pad)+                   then nameFirstIfHidden [dom] vs'+                   else map (fmap unnamed) vs')         df <- displayFormsEnabled         if df && isPrefixOf extendlambdaname (show name)           then do            reportSLn "int2abs.reifyterm.def" 10 $ "reifying extended lambda with definition: " ++ show x            info <- getConstInfo x-           cls <- mapM (reify . (NamedClause x)) $ defClauses info+           --drop lambda lifted arguments+           Just (h , nh) <- Map.lookup x <$> getExtLambdaTele+           let n = h + nh+           cls <- mapM (reify . (QNamed x) . (dropArgs n)) $ defClauses info            -- Karim: Currently Abs2Conc does not require a DefInfo thus we            -- use __IMPOSSIBLE__.-           reifyApp (A.ExtendedLam exprInfo __IMPOSSIBLE__ x cls) vs-          else-           let apps = foldl (\e a -> A.App exprInfo e (fmap unnamed a)) in-           reifyApp (A.Def x `apps` pad) vs-      I.Con x vs   -> do-        isR <- isGeneratedRecordConstructor x-        case isR of-          True -> do-            showImp <- showImplicitArguments-            let keep (a, v) = showImp || argHiding a == NotHidden-            r  <- getConstructorData x-            xs <- getRecordFieldNames r-            vs <- reify $ map unArg vs-            return $ A.Rec exprInfo $ map (unArg *** id) $ filter keep $ zip xs vs-          False -> reifyDisplayForm x vs $ do-            -- let hide a = a { argHiding = Hidden }-            Constructor{conPars = np} <- theDef <$> getConstInfo x-            scope <- getScope-            let whocares = A.Underscore (Info.MetaInfo noRange scope Nothing)-                us = replicate (fromIntegral np) $ Arg Hidden Relevant whocares-            n  <- getDefFreeVars x-            es <- reify vs-            apps (A.Con (AmbQ [x]), genericDrop n $ us ++ es)-      I.Lam h b    -> do-        (x,e) <- reify b-        return $ A.Lam exprInfo (DomainFree h Relevant x) e-        -- Andreas, 2011-04-07 we do not need relevance information at internal Lambda-      I.Lit l        -> reify l-      I.Level l      -> reify l-      I.Pi a b       -> case b of-        NoAbs _ b -> uncurry (A.Fun $ exprInfo) <$> reify (a,b)-        b         -> do-          Arg h r a <- reify a-          (x, b)    <- reify b-          return $ A.Pi exprInfo [TypedBindings noRange $ Arg h r (TBind noRange [x] a)] b-      I.Sort s     -> reify s-      I.MetaV x vs -> apps =<< reify (x,vs)-      I.DontCare v -> A.DontCare <$> reify v-{- Andreas: I want to see irrelevant, but not implicit arguments-        ifM showImplicitArguments-            (reify v)-            (return A.DontCare)--}-{- Andreas, 2011-09-09-      I.DontCare Nothing  -> return A.DontCare-      I.DontCare (Just v) -> reify v  -- leads to paradox error msg in test/fail/UnifyWithIrrelevantArgument--}+           napps (A.ExtendedLam exprInfo __IMPOSSIBLE__ x cls) =<< reify vs+          else do+           let apps = foldl' (\e a -> A.App exprInfo e (fmap unnamed a))+           napps (A.Def x `apps` pad) =<< reify vs +-- | @nameFirstIfHidden n (a1->...an->{x:a}->b) ({e} es) = {x = e} es@+nameFirstIfHidden :: [Dom (String, t)] -> [Arg a] -> [NamedArg a]+nameFirstIfHidden _         []                    = []+nameFirstIfHidden []        (_ : _)               = __IMPOSSIBLE__+nameFirstIfHidden (dom : _) (Arg Hidden r e : es) =+  Arg Hidden r (Named (Just $ fst $ unDom dom) e) : map (fmap unnamed) es+nameFirstIfHidden _         es                    = map (fmap unnamed) es++instance Reify i a => Reify (Named n i) (Named n a) where+  reify = traverse reify++-- | Skip reification of implicit and irrelevant args if option is off.+instance (ReifyWhen i a) => Reify (Arg i) (Arg a) where+  reify (Arg h r i) = Arg h r <$> do flip reifyWhen i =<< condition+    where condition = (return (h /= Hidden) `or2M` showImplicitArguments)+              `and2M` (return (r /= Irrelevant) `or2M` showIrrelevantArguments)+ instance Reify Elim Expr where   reify e = case e of     I.Apply v -> appl "apply" <$> reify v@@ -318,9 +430,8 @@       appl :: String -> Arg Expr -> Expr       appl s v = A.App exprInfo (A.Lit (LitString noRange s)) $ fmap unnamed v -data NamedClause = NamedClause QName I.Clause--- Named clause does not need 'Recursion' flag since I.Clause has it--- data NamedClause = NamedClause QName Recursion I.Clause+type NamedClause = QNamed I.Clause+-- data NamedClause = NamedClause QName I.Clause  instance Reify ClauseBody RHS where   reify NoBody     = return AbsurdRHS@@ -338,17 +449,17 @@     , "  wps  = " ++ show wps     , "  vars = " ++ show vars     ]-  let allps       = ps ++ map (defaultArg . unnamed) wps+  let allps       = ps ++ map defaultNamedArg wps       sps         = foldl (.) (strip vars) (map rearrangeBinding $ Set.toList vars) $ allps       (ps', wps') = splitAt (length sps - length wps) sps   reportSLn "syntax.reify.implicit" 30 $ unlines     [ "  ps'  = " ++ show ps'-    , "  wps' = " ++ show (map (namedThing . unArg) wps')+    , "  wps' = " ++ show (map namedArg wps')     ]-  return (ps', map (namedThing . unArg) wps')+  return (ps', map namedArg wps')   where     argsVars = Set.unions . map argVars-    argVars = patVars . namedThing . unArg+    argVars = patVars . namedArg     patVars p = case p of       A.VarP x      -> Set.singleton x       A.ConP _ _ ps -> argsVars ps@@ -359,6 +470,7 @@       A.LitP _      -> Set.empty       A.ImplicitP _ -> Set.empty       A.AsP _ _ p   -> patVars p+      A.PatternSynP _ _ _ -> __IMPOSSIBLE__ -- Set.empty      -- Pick the "best" place to bind the variable. Best in this case     -- is the left-most explicit binding site. But, of course we can't@@ -379,7 +491,7 @@           , noInterestingBindings p           , all (flip canStrip []) $ takeWhile ((Hidden ==) . argHiding) as           ]-          where p = namedThing $ unArg a+          where p = namedArg a          stripArg a = fmap (fmap stripPat) a @@ -393,6 +505,7 @@           A.LitP _      -> p           A.ImplicitP _ -> p           A.AsP i x p   -> A.AsP i x $ stripPat p+          A.PatternSynP _ _ _ -> __IMPOSSIBLE__ -- p          noInterestingBindings p =           Set.null $ dvs `Set.intersection` patVars p@@ -438,37 +551,39 @@     A.LitP _      -> Set.empty     A.ImplicitP _ -> Set.empty     A.AsP _ _ p   -> dotVars p+    A.PatternSynP _ _ _ -> __IMPOSSIBLE__ -- Set.empty  -- | Getting all(!) variables of an expression. --   It should only get free ones, but it does not matter to include --   the bound ones. instance DotVars A.Expr where   dotVars e = case e of-    A.ScopedExpr _ e -> dotVars e-    A.Var x          -> Set.singleton x -- add any expression variable-    A.Def _          -> Set.empty-    A.Con _          -> Set.empty-    A.Lit _          -> Set.empty-    A.QuestionMark _ -> Set.empty-    A.Underscore _   -> Set.empty-    A.App _ e1 e2    -> dotVars (e1, e2)-    A.WithApp _ e es -> dotVars (e, es)-    A.Lam _ _ e      -> dotVars e-    A.AbsurdLam _ _  -> Set.empty+    A.ScopedExpr _ e       -> dotVars e+    A.Var x                -> Set.singleton x -- add any expression variable+    A.Def _                -> Set.empty+    A.Con _                -> Set.empty+    A.Lit _                -> Set.empty+    A.QuestionMark _       -> Set.empty+    A.Underscore _         -> Set.empty+    A.App _ e1 e2          -> dotVars (e1, e2)+    A.WithApp _ e es       -> dotVars (e, es)+    A.Lam _ _ e            -> dotVars e+    A.AbsurdLam _ _        -> Set.empty     A.ExtendedLam _ _ _ cs -> dotVars cs-    A.Pi _ tel e     -> dotVars (tel, e)-    A.Fun _ a b      -> dotVars (a, b)-    A.Set _ _        -> Set.empty-    A.Prop _         -> Set.empty-    A.Let _ _ _      -> __IMPOSSIBLE__-    A.Rec _ es       -> dotVars $ map snd es-    A.RecUpdate _ e es -> dotVars (e, map snd es)-    A.ETel _         -> __IMPOSSIBLE__-    A.QuoteGoal {}   -> __IMPOSSIBLE__-    A.Quote {}       -> __IMPOSSIBLE__-    A.QuoteTerm {}   -> __IMPOSSIBLE__-    A.Unquote {}     -> __IMPOSSIBLE__-    A.DontCare v     -> dotVars v+    A.Pi _ tel e           -> dotVars (tel, e)+    A.Fun _ a b            -> dotVars (a, b)+    A.Set _ _              -> Set.empty+    A.Prop _               -> Set.empty+    A.Let _ _ _            -> __IMPOSSIBLE__+    A.Rec _ es             -> dotVars $ map snd es+    A.RecUpdate _ e es     -> dotVars (e, map snd es)+    A.ETel _               -> __IMPOSSIBLE__+    A.QuoteGoal {}         -> __IMPOSSIBLE__+    A.Quote {}             -> __IMPOSSIBLE__+    A.QuoteTerm {}         -> __IMPOSSIBLE__+    A.Unquote {}           -> __IMPOSSIBLE__+    A.DontCare v           -> dotVars v+    A.PatternSyn n         -> Set.empty  instance DotVars RHS where   dotVars (RHS e) = dotVars e@@ -505,28 +620,40 @@         let vars = Set.map show (dotVars t)         tick         if Set.member "()" vars-          then return $ A.DotP i $ A.Underscore mi+          then return $ A.DotP i $ underscore           else return $ A.DotP i t       I.LitP l             -> return (A.LitP l)       I.ConP c _ ps -> A.ConP i (AmbQ [c]) <$> reifyArgs ps       where         i = PatRange noRange-        mi = MetaInfo noRange emptyScopeInfo Nothing  instance Reify NamedClause A.Clause where-  reify (NamedClause f (I.Clause _ tel perm ps body)) = addCtxTel tel $ do+  reify (QNamed f (I.Clause _ tel perm ps body)) = addCtxTel tel $ do     ps  <- reifyPatterns tel perm ps-    lhs <- liftTCM $ reifyDisplayFormP $ LHS info f ps []+    lhs <- liftTCM $ reifyDisplayFormP $ LHS info (LHSHead f ps) []     nfv <- getDefFreeVars f     lhs <- stripImps $ dropParams nfv lhs     rhs <- reify body     return $ A.Clause lhs rhs []     where       info = LHSRange noRange-      dropParams n (LHS i f ps wps) = LHS i f (genericDrop n ps) wps-      stripImps (LHS i f ps wps) = do+      dropParams n (LHS i lhscore wps) =+        LHS i (mapLHSHead (\ f ps -> LHSHead f (genericDrop n ps)) lhscore) wps+      stripImps (LHS i lhscore wps) = do+          (wps', lhscore) <- stripIs lhscore+          return $ LHS i lhscore wps'+        where stripIs (LHSHead f ps) = do+                (ps, wps) <- stripImplicits ps wps+                return (wps, LHSHead f ps)+              stripIs (LHSProj d ps1 l ps2) = do+                Arg h r (Named n (wps, l)) <- Trav.mapM (Trav.mapM stripIs) l+                return (wps, LHSProj d ps1 (Arg h r (Named n l)) ps2)+{-+      dropParams n (LHS i (LHSHead f ps) wps) = LHS i (LHSHead f (genericDrop n ps)) wps+      stripImps (LHS i (LHSHead f ps) wps) = do         (ps, wps) <- stripImplicits ps wps-        return $ LHS i f ps wps+        return $ LHS i (LHSHead f ps) wps+-}  instance Reify Type Expr where     reify (I.El _ t) = reify t@@ -539,14 +666,13 @@                 I.Type (I.Max [I.ClosedLevel n]) -> return $ A.Set exprInfo n                 I.Type a -> do                   a <- reify a-                  return $ A.App exprInfo (A.Set exprInfo 0)-                                          (defaultArg (unnamed a))+                  return $ A.App exprInfo (A.Set exprInfo 0) (defaultNamedArg a)                 I.Prop       -> return $ A.Prop exprInfo                 I.Inf       -> A.Var <$> freshName_ "Setω"                 I.DLub s1 s2 -> do                   lub <- freshName_ "dLub" -- TODO: hack                   (e1,e2) <- reify (s1, I.Lam NotHidden $ fmap Sort s2)-                  let app x y = A.App exprInfo x (defaultArg $ unnamed y)+                  let app x y = A.App exprInfo x (defaultNamedArg y)                   return $ A.Var lub `app` e1 `app` e2  instance Reify Level Expr where@@ -561,7 +687,7 @@     s <- return $ if s == "_" && 0 `freeIn` v then "z" else s      x <- freshName_ s-    e <- addCtx x (defaultArg $ sort I.Prop) -- type doesn't matter+    e <- addCtx x dummyDom -- type doesn't matter          $ reify v     return (x,e) @@ -573,8 +699,8 @@     let r = getRange e     return $ TypedBindings r (Arg h rel (TBind r [x] e)) : bs -instance Reify i a => Reify (Arg i) (Arg a) where-    reify = traverse reify+instance Reify i a => Reify (Dom i) (Arg a) where+    reify (Dom h r i) = Arg h r <$> reify i  instance Reify i a => Reify [i] [a] where     reify = traverse reify
src/full/Agda/Termination/CallGraph.hs view
@@ -9,6 +9,7 @@ module Agda.Termination.CallGraph   ( -- * Structural orderings     Order(Mat), decr+  , increase, decrease   , (.*.)   , supremum, infimum   , decreasing, le, lt, unknown, orderMat@@ -89,6 +90,17 @@ instance HasZero Order where   zeroElement = Unknown +-- | Raw increase which does not cut off.+increase :: Int -> Order -> Order+increase i o = case o of+  Unknown -> Unknown+  Decr k  -> Decr $ k - i+  Mat m   -> Mat $ fmap (increase i) m++-- | Raw decrease which does not cut off.+decrease :: Int -> Order -> Order+decrease i o = increase (-i) o+ -- | Smart constructor for @Decr k :: Order@ which cuts off too big values. -- -- Possible values for @k@: @- ?cutoff '<=' k '<=' ?cutoff + 1@.@@ -214,10 +226,14 @@ okM m1 m2 = (rows $ size m2) == (cols $ size m1)  -- | The supremum of a (possibly empty) list of 'Order's.-+--   More information (i.e., more decrease) is bigger.+--   'Unknown' is no information, thus, smallest. supremum :: (?cutoff :: Int) => [Order] -> Order supremum = foldr maxO Unknown +-- | @('Order', 'maxO', '.*.')@ forms a semiring, with 'Unknown' as+-- zero and 'Le' as one.+ maxO :: (?cutoff :: Int) => Order -> Order -> Order maxO o1 o2 = case (o1,o2) of                (Decr k, Decr l) -> Decr (max k l) -- cut off not needed@@ -227,14 +243,11 @@                (Mat m,_) -> maxO (collapse m) o2                (_,Mat m) ->  maxO o1 (collapse m) --- | @('Order', 'max', '.*.')@ forms a semiring, with 'Unknown' as--- zero and 'Le' as one.- -- | The infimum of a (non empty) list of 'Order's.-+--  'Unknown' is the least element, thus, dominant. infimum :: (?cutoff :: Int) => [Order] -> Order-infimum (o:l) = foldl minO o l-infimum [] = __IMPOSSIBLE__+infimum (o:l) = foldl' minO o l+infimum []    = __IMPOSSIBLE__  minO :: (?cutoff :: Int) => Order -> Order -> Order minO o1 o2 = case (o1,o2) of@@ -435,6 +448,12 @@ union :: Monoid meta       => CallGraph meta -> CallGraph meta -> CallGraph meta union cs1 cs2 = CallGraph $ (Map.unionWith mappend `on` cg) cs1 cs2++-- | 'CallGraph' is a monoid under 'union'.++instance Monoid meta => Monoid (CallGraph meta) where+  mempty  = empty+  mappend = union  -- | Inserts a call into a call graph. 
src/full/Agda/Termination/Lexicographic.hs view
@@ -1,3 +1,4 @@+{-# LANGUAGE CPP #-} -- | Lexicographic order search, more or less as defined in --      \"A Predicative Analysis of Structural Recursion\" by --      Andreas Abel and Thorsten Altenkirch.@@ -230,7 +231,11 @@   , quickCheck' prop_fromDiagonals   , quickCheck' prop_newBehaviour   , quickCheckWith' stdArgs{ maxSuccess = 50+#if MIN_VERSION_QuickCheck(2,5,0)+                           , maxDiscardRatio = 4+#else                            , maxDiscard = 200+#endif                            , maxSize    = 20                            }                     prop_lexOrder
src/full/Agda/Termination/Matrix.hs view
@@ -1,3 +1,4 @@+{-# LANGUAGE GeneralizedNewtypeDeriving #-} -- | Naive implementation of simple matrix library.  -- Originally copied from Agda1 sources.@@ -96,7 +97,7 @@ -- | Type of matrices, parameterised on the type of values.  newtype Matrix i b = M { unM :: Array (MIx i) b }-  deriving (Eq, Ord)+  deriving (Eq, Ord, Functor)  matrixInvariant :: (Num i, Ix i) => Matrix i b -> Bool matrixInvariant m =
src/full/Agda/Termination/SparseMatrix.hs view
@@ -1,4 +1,4 @@-{-# LANGUAGE CPP #-}+{-# LANGUAGE CPP, DeriveFunctor #-}  {- | Sparse matrices. @@ -108,7 +108,7 @@ -- | Type of matrices, parameterised on the type of values.  data Matrix i b = M { size :: Size i, unM :: [(MIx i, b)] }-  deriving (Eq, Ord)+  deriving (Eq, Ord, Functor)  matrixInvariant :: (Num i, Ix i) => Matrix i b -> Bool matrixInvariant m = all (\ (MIx i j, b) -> 1 <= i && i <= rows sz@@ -334,7 +334,7 @@     => Semiring a -> Matrix i a -> Matrix i a -> Matrix i a mul semiring m1 m2 = M (Size { rows = rows (size m1), cols = cols (size m2) }) $   filter (\ (i,b) -> b /= Semiring.zero semiring) $-  [ (MIx i j, foldl (Semiring.add semiring) (Semiring.zero semiring) $+  [ (MIx i j, List.foldl' (Semiring.add semiring) (Semiring.zero semiring) $                 map snd $ interAssocWith (Semiring.mul semiring) v w)     | (i,v) <- toSparseRows m1     , (j,w) <- toSparseRows $ transpose m2 ]
src/full/Agda/Termination/TermCheck.hs view
@@ -1,4 +1,4 @@-{-# LANGUAGE CPP, PatternGuards, ImplicitParams #-}+{-# LANGUAGE CPP, PatternGuards, ImplicitParams, TupleSections #-}  {- Checking for Structural recursion    Authors: Andreas Abel, Nils Anders Danielsson, Ulf Norell,@@ -8,25 +8,30 @@  -}  module Agda.Termination.TermCheck-    ( termDecls+    ( termDecl     , Result, DeBruijnPat     ) where  import Control.Applicative import Control.Monad.Error+import Control.Monad.State+ import Data.List as List import qualified Data.Map as Map import Data.Map (Map) import qualified Data.Maybe as Maybe+import Data.Monoid import qualified Data.Set as Set import Data.Set (Set)  import qualified Agda.Syntax.Abstract as A+-- import Agda.Syntax.Abstract.Pretty (prettyA) import Agda.Syntax.Internal import qualified Agda.Syntax.Info as Info import Agda.Syntax.Position import Agda.Syntax.Common import Agda.Syntax.Literal (Literal(LitString))+import Agda.Syntax.Translation.InternalToAbstract  import Agda.Termination.CallGraph   as Term import qualified Agda.Termination.SparseMatrix as Term@@ -35,23 +40,28 @@ import Agda.TypeChecking.Monad import Agda.TypeChecking.Pretty import Agda.TypeChecking.Reduce (reduce, normalise, instantiate, instantiateFull)-import Agda.TypeChecking.Records (isRecordConstructor)+import Agda.TypeChecking.Records (isRecordConstructor, isRecord, isInductiveRecord) import Agda.TypeChecking.Rules.Builtin.Coinduction import Agda.TypeChecking.Rules.Term (isType_)-import Agda.TypeChecking.Substitute (abstract,raise,substs)+import Agda.TypeChecking.Substitute (abstract,raise) import Agda.TypeChecking.Telescope import Agda.TypeChecking.EtaContract import Agda.TypeChecking.Monad.Builtin-import Agda.TypeChecking.Monad.Signature (isProjection)+import Agda.TypeChecking.Monad.Signature (isProjection, mutuallyRecursive) import Agda.TypeChecking.Primitive (constructorForm) import Agda.TypeChecking.Level (reallyUnLevelView) import Agda.TypeChecking.Substitute+import Agda.TypeChecking.SizedTypes  import qualified Agda.Interaction.Highlighting.Range as R import Agda.Interaction.Options +import Agda.Utils.List import Agda.Utils.Size-import Agda.Utils.Monad (thread, (<$>), ifM)+import Agda.Utils.Monad ((<$>), mapM', forM', ifM)+-- import Agda.Utils.NubList+import Agda.Utils.Pointed+import Agda.Utils.Permutation  #include "../undefined.h" import Agda.Utils.Impossible@@ -60,12 +70,15 @@ type MutualNames = [QName]  -- | The result of termination checking a module.-+--   Must be 'Pointed' and a 'Monoid'. type Result = [TerminationError] +-- use of a NubList did not achieve the desired effect, now unnecessary+-- type Result = NubList TerminationError+ -- | Termination check a sequence of declarations. termDecls :: [A.Declaration] -> TCM Result-termDecls ds = fmap concat $ mapM termDecl ds+termDecls ds = concat <$> mapM termDecl ds  -- | Termination check a single declaration. termDecl :: A.Declaration -> TCM Result@@ -73,30 +86,27 @@   setScope scope   termDecls ds termDecl d = case d of-    A.Axiom {}            -> return []-    A.Field {}            -> return []-    A.Primitive {}        -> return []+    A.Axiom {}            -> return mempty+    A.Field {}            -> return mempty+    A.Primitive {}        -> return mempty     A.Mutual _ ds-      | [A.RecSig{}, A.RecDef _ r _ _ _ rds] <- unscopeDefs ds-                          -> do-        let m = mnameFromList $ qnameToList r-        setScopeFromDefs ds-        termSection m rds-    A.Mutual i ds  -> termMutual i ds+      | [A.RecSig{}, A.RecDef _ r _ _ _ _ rds] <- unscopeDefs ds+                          -> checkRecDef ds r rds+    A.Mutual i ds         -> termMutual i ds     A.Section _ x _ ds    -> termSection x ds-    A.Apply {}            -> return []-    A.Import {}           -> return []-    A.Pragma {}           -> return []-    A.Open {}             -> return []+    A.Apply {}            -> return mempty+    A.Import {}           -> return mempty+    A.Pragma {}           -> return mempty+    A.Open {}             -> return mempty         -- open is just an artifact from the concrete syntax     A.ScopedDecl{}        -> __IMPOSSIBLE__         -- taken care of above+    A.RecSig{}            -> return mempty+    A.RecDef _ r _ _ _ _ ds -> checkRecDef [] r ds     -- These should all be wrapped in mutual blocks     A.FunDef{}  -> __IMPOSSIBLE__     A.DataSig{} -> __IMPOSSIBLE__     A.DataDef{} -> __IMPOSSIBLE__-    A.RecSig{}  -> __IMPOSSIBLE__-    A.RecDef{}  -> __IMPOSSIBLE__   where     setScopeFromDefs = mapM_ setScopeFromDef     setScopeFromDef (A.ScopedDecl scope d) = setScope scope@@ -107,32 +117,36 @@     unscopeDef (A.ScopedDecl _ ds) = unscopeDefs ds     unscopeDef d = [d] -collectCalls :: (a -> TCM Calls) -> [a] -> TCM Calls-collectCalls f [] = return Term.empty-collectCalls f (a : as) = do c1 <- f a-                             c2 <- collectCalls f as-                             return (c1 `Term.union` c2)+    checkRecDef ds r rds = do+      setScopeFromDefs ds+      termSection (mnameFromList $ qnameToList r) rds  -- | Termination check a bunch of mutually inductive recursive definitions.-termMutual :: Info.DeclInfo -> [A.Declaration] -> TCM Result-termMutual i ds = if names == [] then return [] else-  do -- get list of sets of mutually defined names from the TCM+termMutual :: Info.MutualInfo -> [A.Declaration] -> TCM Result+termMutual i ds = if names == [] then return mempty else+  -- we set the range to avoid panics when printing error messages+  traceCall (SetRange (Info.mutualRange i)) $ do++  mutualBlock <- findMutualBlock (head names)+  let allNames = Set.elems mutualBlock++  if not (Info.mutualTermCheck i) then do+      reportSLn "term.warn.yes" 2 $ "Skipping termination check for " ++ show names+      forM_ allNames $ \ q -> setTerminates q True -- considered terminating!+      return mempty+   else do+     -- get list of sets of mutually defined names from the TCM      -- this includes local and auxiliary functions introduced      -- during type-checking       cutoff <- optTerminationDepth <$> pragmaOptions-     let ?cutoff = cutoff+     let ?cutoff = cutoff -- needed for Term.terminates       reportSLn "term.top" 10 $ "Termination checking " ++ show names ++        " with cutoff=" ++ show cutoff ++ "..."-     mutualBlock <- findMutualBlock (head names)-     let allNames = Set.elems mutualBlock -     -- collect all recursive calls in the block-     let collect use = collectCalls (termDef use allNames) allNames-      -- Get the name of size suc (if sized types are enabled)-     suc <- sizeSuc+     suc <- sizeSucName       -- The name of sharp (if available).      sharp <- fmap nameOfSharp <$> coinductionKit@@ -140,70 +154,143 @@      guardingTypeConstructors <-        optGuardingTypeConstructors <$> pragmaOptions -     -- first try to termination check ignoring the dot patterns      let conf = DBPConf            { useDotPatterns           = False            , guardingTypeConstructors = guardingTypeConstructors            , withSizeSuc              = suc            , sharp                    = sharp+           , currentTarget            = Nothing            }++     -- new check currently only makes a difference for copatterns+     -- since it is slow, only invoke it if --copatterns+     res <- ifM (optCopatterns <$> pragmaOptions)+       (forM' allNames $ termFunction conf names allNames) -- new check one after another+       (termMutual' conf names allNames) -- old check, all at once++     -- record result of termination check in signature+     let terminates = null res+     forM_ allNames $ \ q -> setTerminates q terminates+     return res++  where+  getName (A.FunDef i x delayed cs) = [x]+  getName (A.RecDef _ _ _ _ _ _ ds) = concatMap getName ds+  getName (A.Mutual _ ds)       = concatMap getName ds+  getName (A.Section _ _ _ ds)  = concatMap getName ds+  getName (A.ScopedDecl _ ds)   = concatMap getName ds+  getName _                     = []++  -- the mutual names mentioned in the abstract syntax+  names = concatMap getName ds+++-- | @termMutual' conf names allNames@ checks @allNames@ for termination.+--+--   @names@ is taken from the 'Abstract' syntax, so it contains only+--   the names the user has declared.  This is for error reporting.+--+--   @allNames@ is taken from 'Internal' syntax, it contains also+--   the definitions created by the type checker (e.g., with-functions).+--+termMutual' :: (?cutoff :: Int) => DBPConf -> [QName] -> MutualNames -> TCM Result+termMutual' conf names allNames = do++     -- collect all recursive calls in the block+     let collect conf = mapM' (termDef conf allNames) allNames++     -- first try to termination check ignoring the dot patterns      calls1 <- collect conf{ useDotPatterns = False }-     reportS "term.lex" 20 $ unlines-       [ "Calls (no dot patterns): " ++ show calls1-       ]-     reportSDoc "term.behaviours" 20 $ vcat-       [ text "Recursion behaviours (no dot patterns):"-       , nest 2 $ return $ Term.prettyBehaviour (Term.complete calls1)-       ]-     reportSDoc "term.matrices" 30 $ vcat-       [ text "Call matrices (no dot patterns):"-       , nest 2 $ pretty $ Term.complete calls1-       ]-     r <- do let r = Term.terminates calls1-             case r of-               Right _ -> return r-               Left _  -> do-                 -- Try again, but include the dot patterns this time.-                 calls2 <- collect conf{ useDotPatterns = True }-                 reportS "term.lex" 20 $ unlines-                   [ "Calls (dot patterns): " ++ show calls2-                   ]-                 reportSDoc "term.behaviours" 20 $ vcat-                   [ text "Recursion behaviours (dot patterns):"-                   , nest 2 $ return $-                       Term.prettyBehaviour (Term.complete calls2)-                   ]-                 reportSDoc "term.matrices" 30 $ vcat-                   [ text "Call matrices (dot patterns):"-                   , nest 2 $ pretty $ Term.complete calls2-                   ]-                 return $ Term.terminates calls2+     reportCalls "no " calls1++     r <- case Term.terminates calls1 of+            r@Right{} -> return r+            Left{}    -> do+              -- Try again, but include the dot patterns this time.+              calls2 <- collect conf{ useDotPatterns = True }+              reportCalls "" calls2+              return $ Term.terminates calls2      case r of        Left calls -> do-         return [TerminationError+         return $ point $ TerminationError                    { termErrFunctions = names-                     -- TODO: This could be changed to allNames.                    , termErrCalls     = Set.toList calls                    }-                ]        Right _ -> do          reportSLn "term.warn.yes" 2                      (show (names) ++ " does termination check")-         return []+         return mempty   where-  getName (A.FunDef i x cs)       = [x]-  getName (A.RecDef _ _ _ _ _ ds) = concatMap getName ds-  getName (A.Mutual _ ds)       = concatMap getName ds-  getName (A.Section _ _ _ ds)  = concatMap getName ds-  getName (A.ScopedDecl _ ds)   = concatMap getName ds-  getName _                     = [] -  -- the mutual names mentioned in the abstract syntax-  names = concatMap getName ds+reportCalls no calls = do+   reportS "term.lex" 20 $ unlines+     [ "Calls (" ++ no ++ "dot patterns): " ++ show calls+     ]+   reportSDoc "term.behaviours" 20 $ vcat+     [ text $ "Recursion behaviours (" ++ no ++ "dot patterns):"+     , nest 2 $ return $ Term.prettyBehaviour (Term.complete calls)+     ]+   reportSDoc "term.matrices" 30 $ vcat+     [ text $ "Call matrices (" ++ no ++ "dot patterns):"+     , nest 2 $ pretty $ Term.complete calls+     ] -  concat' :: Ord a => [Set a] -> [a]-  concat' = Set.toList . Set.unions+-- | @termFunction conf names allNames name@ checks @name@ for termination.+--+--   @names@ is taken from the 'Abstract' syntax, so it contains only+--   the names the user has declared.  This is for error reporting.+--+--   @allNames@ is taken from 'Internal' syntax, it contains also+--   the definitions created by the type checker (e.g., with-functions).+--+termFunction :: (?cutoff :: Int) => DBPConf -> [QName] -> MutualNames -> QName -> TCM Result+termFunction conf0 names allNames name = do +     let index = toInteger $ maybe __IMPOSSIBLE__ id $+           List.elemIndex name allNames++     conf <- do+       r <- typeEndsInDef =<< typeOfConst name+       reportTarget r+       return $ conf0 { currentTarget = r }++     -- collect all recursive calls in the block+     let collect conf = mapM' (termDef conf allNames) allNames++     -- first try to termination check ignoring the dot patterns+     calls1 <- collect conf{ useDotPatterns = False }+     reportCalls "no " calls1++     r <- case Term.terminatesFilter (== index) calls1 of+            r@Right{} -> return r+            Left{}    -> do+              -- Try again, but include the dot patterns this time.+              calls2 <- collect conf{ useDotPatterns = True }+              reportCalls "" calls2+              return $ Term.terminatesFilter (== index) calls2+     case r of+       Left calls -> do+         return $ point $ TerminationError+                   { termErrFunctions = if name `elem` names then [name] else []+                   , termErrCalls     = Set.toList calls+                   }+       Right _ -> do+         reportSLn "term.warn.yes" 2+                     (show (name) ++ " does termination check")+         return mempty+  where+    reportTarget r = reportSLn "term.target" 20 $ maybe+      ("  target type not recognized")+      (\ q -> "  target type ends in " ++ show q)+      r++typeEndsInDef :: Type -> TCM (Maybe QName)+typeEndsInDef t = do+  TelV _ core <- telView t+  case ignoreSharing $ unEl core of+    Def d vs -> return $ Just d+    _        -> return Nothing+ -- | Termination check a module. termSection :: ModuleName -> [A.Declaration] -> TCM Result termSection x ds = do@@ -228,8 +315,8 @@ 	      , nest 2 $ text ":" <+> (prettyTCM $ defType def) 	      ]         case (theDef def) of-          Function{ funClauses = cls } ->-            collectCalls (termClause use names name) cls+          Function{ funClauses = cls, funDelayed = delayed } ->+            mapM' (termClause use names name delayed) cls           _ -> return Term.empty  @@ -286,16 +373,45 @@  {- | Configuration parameters to termination checker. -}-data DBPConf = DBPConf { useDotPatterns           :: Bool-                       , guardingTypeConstructors :: Bool-                         -- ^ Do we assume that record and data type-                         --   constructors preserve guardedness?-                       , withSizeSuc              :: Maybe QName-                       , sharp                    :: Maybe QName-                         -- ^ The name of the sharp constructor, if-                         --   any.-                       }+data DBPConf = DBPConf+  { useDotPatterns           :: Bool+  , guardingTypeConstructors :: Bool+    -- ^ Do we assume that record and data type constructors preserve guardedness?+  , withSizeSuc              :: Maybe QName+  , sharp                    :: Maybe QName+    -- ^ The name of the sharp constructor, if any.+  , currentTarget            :: Maybe Target+    -- ^ Target type of the function we are currently termination checking.+    --   Only the constructors of 'Target' are considered guarding.+  } +type Target = QName++targetElem :: DBPConf -> [Target] -> Bool+targetElem conf ds = maybe False (`elem` ds) (currentTarget conf)++{-+-- | Check wether a 'Target" corresponds to the current one.+matchingTarget :: DBPConf -> Target -> TCM Bool+matchingTarget conf d = maybe (return True) (mutuallyRecursive d) (currentTarget conf)+-}++{-+-- | The target type of the considered recursive definition.+data Target+  = Set        -- ^ Constructing a Set (only meaningful with 'guardingTypeConstructors').+  | Data QName -- ^ Constructing a coinductive or mixed type (could be data or record).+  deriving (Eq, Show)++-- | Check wether a 'Target" corresponds to the current one.+matchingTarget :: DBPConf -> Target -> TCM Bool+matchingTarget conf t = maybe (return True) (match t) (currentTarget conf)+  where+    match Set      Set       = return True+    match (Data d) (Data d') = mutuallyRecursive d d'+    match _ _                = return False+-}+ {- | Convert a term (from a dot pattern) to a DeBruijn pattern. -} @@ -304,7 +420,7 @@   | not $ useDotPatterns conf = return $ unusedVar   | otherwise                 = do     t <- stripProjections =<< constructorForm t-    case t of+    case ignoreSharing t of       Var i []    -> return $ VarDBP i       Con c args  -> ConDBP c <$> mapM (termToDBP conf . unArg) args       Def s [arg]@@ -326,6 +442,7 @@       Inductive   -> ConDBP c <$> mapM (stripCoConstructors conf) args       CoInductive -> return unusedVar +{- Andreas, 2012-09-19 BAD CODE, RETIRED {- | stripBind i p b = Just (i', dbp, b')    converts a pattern into a de Bruijn pattern@@ -367,23 +484,67 @@         Just (i2, dbps, b2) -> return $ Just (i2, dbp:dbps, b2)         Nothing -> return Nothing     Nothing -> return Nothing+-} +-- | cf. 'TypeChecking.Coverage.Match.buildMPatterns'+openClause :: DBPConf -> Permutation -> [Pattern] -> ClauseBody -> TCM ([DeBruijnPat], Maybe Term)+openClause conf perm ps body = do+  -- invariant: xs has enough variables for the body+  unless (permRange perm == genericLength xs) __IMPOSSIBLE__+  dbps <- evalStateT (mapM build ps) xs+  return . (dbps,) $ case body `apply` map (defaultArg . var) xs of+    NoBody -> Nothing+    Body v -> Just v+    _      -> __IMPOSSIBLE__+  where+    -- length of the telescope+    n    = size perm+    -- the variables as a map from the body variables to the clause telescope+    xs   = permute (invertP perm) $ downFrom (size perm)++    tick = do x : xs <- get; put xs; return x++    build :: Pattern -> StateT [Nat] TCM DeBruijnPat+    build (VarP _)        = VarDBP <$> tick+    build (ConP con _ ps) = ConDBP con <$> mapM (build . unArg) ps+    build (DotP t)        = tick *> do lift $ termToDBP conf t+    build (LitP l)        = return $ LitDBP l++ -- | Extract recursive calls from one clause.-termClause :: DBPConf -> MutualNames -> QName -> Clause -> TCM Calls-termClause use names name (Clause { clauseTel  = tel-                                  , clausePerm = perm-                                  , clausePats = argPats'-                                  , clauseBody = body }) =+termClause :: DBPConf -> MutualNames -> QName -> Delayed -> Clause -> TCM Calls+termClause conf names name delayed+    (Clause { clauseTel  = tel+            , clausePerm = perm+            , clausePats = argPats'+            , clauseBody = body }) = do+  reportSDoc "term.check.clause" 25 $ vcat+    [ text "termClause"+    , nest 2 $ text "tel      =" <+> prettyTCM tel+    , nest 2 $ text ("perm     = " ++ show perm)+    -- how to get the following right?+    -- , nest 2 $ text "argPats' =" <+> do prettyA =<< reifyPatterns tel perm argPats'+    ]   addCtxTel tel $ do+    ps <- normalise $ map unArg argPats'+    (dbpats, res) <- openClause conf perm ps body+    case res of+       Nothing -> return Term.empty+       Just t -> do+          dbpats <- mapM (stripCoConstructors conf) dbpats+          termTerm conf names name delayed dbpats t++{-+  addCtxTel tel $ do     argPats' <- normalise argPats'     -- The termination checker doesn't know about reordered telescopes     let argPats = substs (renamingR perm) argPats'-    dbs <- stripBinds use (nVars - 1) (map unArg argPats) body+    dbs <- stripBinds conf (nVars - 1) (map unArg argPats) body     case dbs of        Nothing -> return Term.empty        Just (-1, dbpats, Body t) -> do-          dbpats <- mapM (stripCoConstructors use) dbpats-          termTerm use names name dbpats t+          dbpats <- mapM (stripCoConstructors conf) dbpats+          termTerm conf names name delayed dbpats t           -- note: convert dB levels into dB indices        Just (n, dbpats, Body t) -> internalError $ "termClause: misscalculated number of vars: guess=" ++ show nVars ++ ", real=" ++ show (nVars - 1 - n)        Just (n, dbpats, b)  -> internalError $ "termClause: not a Body" -- ++ show b@@ -392,20 +553,35 @@     boundVars (Bind b)   = 1 + boundVars (absBody b)     boundVars NoBody     = 0     boundVars (Body _)   = 0+-}  -- | Extract recursive calls from a term.-termTerm :: DBPConf -> MutualNames -> QName -> [DeBruijnPat] -> Term -> TCM Calls-termTerm conf names f pats0 t0 = do+termTerm :: DBPConf -> MutualNames -> QName -> Delayed -> [DeBruijnPat] -> Term -> TCM Calls+termTerm conf names f delayed pats0 t0 = do  cutoff <- optTerminationDepth <$> pragmaOptions  let ?cutoff = cutoff  do   reportSDoc "term.check.clause" 6-    (sep [ text "termination checking clause of" <+> prettyTCM f+    (sep [ text ("termination checking " +++             (if delayed == Delayed then "delayed " else "") ++ "clause of")+           <+> prettyTCM f          , nest 2 $ text "lhs:" <+> hsep (map prettyTCM pats0)          , nest 2 $ text "rhs:" <+> prettyTCM t0          ])-  loop pats0 Term.le t0+  {-+  -- if we are checking a delayed definition, we treat it as if there were+  -- a guarding coconstructor (sharp)+  let guarded = case delayed of+        Delayed    -> Term.lt+        NotDelayed -> Term.le+  -}+  let guarded = Term.le -- not initially guarded+  loop pats0 guarded t0   where+       -- only a delayed definition can be guarded+       ifDelayed o | Term.decreasing o && delayed == NotDelayed = Term.le+                   | otherwise                                  = o+        Just fInd = toInteger <$> List.elemIndex f names         -- sorts can contain arb. terms of type Nat,@@ -414,10 +590,18 @@        -- a subgrammar of Term, then we would not need this boilerplate.        loopSort :: (?cutoff :: Int) => [DeBruijnPat] -> Sort -> TCM Calls        loopSort pats s = do+         reportSDoc "term.sort" 20 $ text "extracting calls from sort" <+> prettyTCM s+         reportSDoc "term.sort" 50 $ text ("s = " ++ show s)+         -- s <- instantiateFull s -- Andreas, 2012-09-05 NOT NECESSARY+         -- instantiateFull resolves problems with reallyUnLevelView+         -- in the absense of level built-ins.+         -- However, the termination checker should only receive terms+         -- that are already fully instantiated.+          case s of            Type (Max [])              -> return Term.empty            Type (Max [ClosedLevel _]) -> return Term.empty-           Type t -> loop pats Term.unknown (Level t)+           Type t -> loop pats Term.unknown (Level t) -- no guarded levels            Prop   -> return Term.empty            Inf    -> return Term.empty            DLub s1 (NoAbs x s2) -> Term.union <$> loopSort pats s1 <*> loopSort pats s2@@ -438,7 +622,6 @@          -> TCM Calls        loop pats guarded t = do          t <- instantiate t          -- instantiate top-level MetaVar-         suc <- sizeSuc               -- Handles constructor applications.          let constructor@@ -453,7 +636,7 @@                   --   argument should be viewed as preserving                   --   guardedness.                -> TCM Calls-             constructor c ind args = collectCalls loopArg args+             constructor c ind args = mapM' loopArg args                where                loopArg (arg , preserves) = do                  loop pats g' (unArg arg)@@ -469,22 +652,22 @@                args2 <- mapM instantiateFull args1                 -- We have to reduce constructors in case they're reexported.-               let reduceCon (Con c vs) = (`apply` vs) <$> reduce (Con c [])  -- make sure we don't reduce the arguments-                   reduceCon t          = return t+               let reduceCon t = case ignoreSharing t of+                      Con c vs -> (`apply` vs) <$> reduce (Con c [])  -- make sure we don't reduce the arguments+                      _        -> return t                args2 <- mapM reduceCon args2                args  <- mapM etaContract args2                 -- If the function is a projection, then preserve guardedness                -- for its principal argument.-               isProj <- isProjection g+               isProj <- isProjectionButNotFlat g                let unguards = repeat Term.unknown-               let guards = maybe unguards -- not a proj. ==> unguarded-                              (\ _ -> guarded : unguards)-                                -- proj. => preserve g. of princ. arg. (counting starts with 1)-                              isProj+               let guards = if isProj then guarded : unguards+                                           -- proj => preserve guardedness of principal argument+                                      else unguards -- not a proj ==> unguarded                -- collect calls in the arguments of this call-               calls <- collectCalls (uncurry (loop pats)) (zip guards args)-               -- calls <- collectCalls (loop pats Term.unknown) args+               calls <- mapM' (uncurry (loop pats)) (zip guards args)+               -- calls <- mapM' (loop pats Term.unknown) args                  reportSDoc "term.found.call" 20@@ -501,8 +684,9 @@                   -- call is to one of the mutally recursive functions                   Just gInd' -> do -                     matrix <- compareArgs suc pats args-                     let (nrows, ncols, matrix') = addGuardedness guarded+                     matrix <- compareArgs (withSizeSuc conf) pats args+                     let (nrows, ncols, matrix') = addGuardedness+                            (ifDelayed guarded)  -- only delayed defs can be guarded                             (genericLength args) -- number of rows                             (genericLength pats) -- number of cols                             matrix@@ -530,58 +714,76 @@                          calls)  -         case t of+         case ignoreSharing t of              -- Constructed value.             Con c args               | Just c == sharp conf ->                 constructor c CoInductive $ zip args (repeat True)-              | otherwise ->-                constructor c Inductive $ zip args (repeat True)+              | otherwise -> do+                -- If we encounter a coinductive record constructor+                -- in a type mutual with the current target+                -- then we count it as guarding.+                ind <- do+                  r <- isRecordConstructor c+                  case r of+                    Nothing       -> return Inductive+                    Just (q, def) -> return . (\ b -> if b then CoInductive else Inductive) $+                      and [ recRecursive def+                          , recInduction def == CoInductive+                          , targetElem conf (q : recMutual def)+                          ]+                constructor c ind $ zip args (repeat True)              Def g args0               | guardingTypeConstructors conf -> do-                gDef <- theDef <$> getConstInfo g-                case gDef of+                def <- getConstInfo g+                let occs = defArgOccurrences def+                case theDef def of+{-                   Datatype {dataArgOccurrences = occs} -> con occs                   Record   {recArgOccurrences  = occs} -> con occs-                  _                                    -> fun+-}+                  Datatype{} -> con occs+                  Record{}   -> con occs+                  _          -> fun               | otherwise -> fun               where               -- Data or record type constructor.               con occs =                 constructor g Inductive $   -- guardedness preserving-                -- constructor g CoInductive $ -- guarding! (Andreas, 2011-04-10) -- does not work, might lead to infinite unfolding in eq. checking (Ripley!)                   zip args0 (map preserves occs ++ repeat False)                 where-                preserves Positive = True-                preserves Negative = False+                preserves = (StrictPos <=)   -- everything which is at least strictly positive+{- SPELLED OUT, this means:                 preserves Unused   = True+                preserves GuardPos = True+                preserves StrictPos = True+                preserves Mixed = False+-}                -- Call to defined function.               fun = function g args0              -- Abstraction. Preserves guardedness.-            Lam h (Abs x t) -> addCtxString x (Arg { argHiding    = h-                                                   , argRelevance = __IMPOSSIBLE__-                                                   , unArg        = __IMPOSSIBLE__-                                                   }) $+            Lam h (Abs x t) -> addCtxString_ x $               loop (map liftDBP pats) guarded t             Lam h (NoAbs _ t) -> loop pats guarded t              -- Neutral term. Destroys guardedness.-            Var i args -> collectCalls (loop pats Term.unknown) (map unArg args)+            Var i args -> mapM' (loop pats Term.unknown) (map unArg args)              -- Dependent function space.             Pi a (Abs x b) ->-               do g1 <- loopType pats Term.unknown (unArg a)+               do g1 <- loopType pats Term.unknown (unDom a)+                  a  <- maskSizeLt a                   g2 <- addCtxString x a $                         loopType (map liftDBP pats) piArgumentGuarded b                   return $ g1 `Term.union` g2              -- Non-dependent function space.             Pi a (NoAbs _ b) ->-               do g1 <- loopType pats Term.unknown (unArg a)+               do g1 <- loopType pats Term.unknown (unDom a)                   g2 <- loopType pats piArgumentGuarded b                   return $ g1 `Term.union` g2 @@ -599,18 +801,37 @@             DontCare t -> loop pats guarded t              -- Level.-            Level l -> loop pats guarded =<< reallyUnLevelView l+            Level l -> do+              l <- catchError (reallyUnLevelView l) $ const $ internalError $+                "Termination checker: cannot view level expression, " +++                "probably due to missing level built-ins."+              loop pats guarded l +            Shared{} -> __IMPOSSIBLE__+          where          -- Should function and Π type constructors be treated as          -- preserving guardedness in their right arguments?          piArgumentGuarded =            if guardingTypeConstructors conf then              guarded   -- preserving guardedness-             -- Term.lt      -- guarding! (Andreas, 2011-04-10)  -- SEE ABOVE             else              Term.unknown +-- | Rewrite type @tel -> Size< u@ to @tel -> Size@.+maskSizeLt :: Dom Type -> TCM (Dom Type)+maskSizeLt dom@(Dom h r a) = do+  (msize, msizelt) <- getBuiltinSize+  case (msize, msizelt) of+    (_ , Nothing) -> return dom+    (Nothing, _)  -> __IMPOSSIBLE__+    (Just size, Just sizelt) -> do+      TelV tel c <- telView a+      case ignoreSharingType a of+        El s (Def d [v]) | d == sizelt -> return $ Dom h r $+          abstract tel $ El s $ Def size []+        _ -> return dom+ {- | compareArgs suc pats ts       compare a list of de Bruijn patterns (=parameters) @pats@@@ -644,21 +865,9 @@  -- | Stripping off a record constructor is not counted as decrease, in --   contrast to a data constructor.-decreaseFromConstructor :: QName -> TCM Order-decreaseFromConstructor c = do-  isRC <- isRecordConstructor c-  return $ if isRC then Term.le else Term.lt--increaseFromConstructor :: (?cutoff :: Int) => QName -> TCM Order-increaseFromConstructor c = do-  isRC <- isRecordConstructor c-  return $ if isRC then Term.le else Term.decr (-1)--{--increaseFromConstructor c = negateOrder <$> decreaseFromConstructor c-  where negateOrder (Decr k) = Decr (- k)-        negateOrder _ = __IMPOSSIBLE__--}+--   A record constructor increases/decreases by 0, a data constructor by 1.+offsetFromConstructor :: QName -> TCM Int+offsetFromConstructor c = maybe 1 (const 0) <$> isRecordConstructor c  -- | Compute the sub patterns of a 'DeBruijnPat'. subPatterns :: DeBruijnPat -> [DeBruijnPat]@@ -678,16 +887,33 @@     cmp p' = (Term..*.) Term.lt (compareTerm' t p') -} +-- | For termination checking purposes flat should not be considered a+--   projection. That is, it flat doesn't preserve either structural order+--   or guardedness like other projections do.+--   Andreas, 2012-06-09: the same applies to projections of recursive records.+isProjectionButNotFlat :: QName -> TCM Bool+isProjectionButNotFlat qn = do+  flat <- fmap nameOfFlat <$> coinductionKit+  if Just qn == flat+    then return False+    else do+      mp <- isProjection qn+      case mp of+        Nothing     -> return False+        Just (r, _) -> isInductiveRecord r++ -- | Remove projections until a term is no longer a projection. --   Also, remove 'DontCare's. stripProjections :: Term -> TCM Term-stripProjections (DontCare t) = stripProjections t-stripProjections t@(Def qn ts@(~(r : _))) = do-  isProj <- isProjection qn-  case isProj of-    Just{} | not (null ts) -> stripProjections $ unArg r-    _ -> return t-stripProjections t = return t+stripProjections t = case ignoreSharing t of+  DontCare t -> stripProjections t+  Def qn ts@(~(r : _)) -> do+    isProj <- isProjectionButNotFlat qn+    case isProj of+      True | not (null ts) -> stripProjections $ unArg r+      _ -> return t+  _ -> return t  -- | Remove all projections from an algebraic term (not going under binders). class StripAllProjections a where@@ -702,62 +928,41 @@ instance StripAllProjections Term where   stripAllProjections t = do     t <- stripProjections t-    case t of+    case ignoreSharing t of       Con c ts -> Con c <$> stripAllProjections ts       Def d ts -> Def d <$> stripAllProjections ts       _ -> return t -{---- | Remove all projections from an algebraic term (not going under binders).-stripAllProjections :: Term -> TCM Term-stripAllProjections t = do-  t <- stripProjections t-  case t of-    Con c ts -> Con c <$> mapM stripAllProjections ts-    Def d ts -> Def d <$> mapM stripAllProjections ts-    _ -> return t--}- -- | compareTerm t dbpat --   Precondition: top meta variable resolved compareTerm' :: (?cutoff :: Int) => Maybe QName -> Term -> DeBruijnPat -> TCM Term.Order-compareTerm' _ (Var i _)      p = compareVar i p+compareTerm' suc (Shared x)   p = compareTerm' suc (derefPtr x) p+compareTerm' suc (Var i _)    p = compareVar suc i p compareTerm' suc (DontCare t) p = compareTerm' suc t p compareTerm' _ (Lit l)    (LitDBP l')   | l == l'   = return Term.le   | otherwise = return Term.unknown compareTerm' suc (Lit l) p = do   t <- constructorForm (Lit l)-  case t of+  case ignoreSharing t of     Lit _ -> return Term.unknown     _     -> compareTerm' suc t p -- Andreas, 2011-04-19 give subterm priority over matrix order compareTerm' _ t@Con{} (ConDBP c ps)-  | any (isSubTerm t) ps = decreaseFromConstructor c+  | any (isSubTerm t) ps = decrease <$> offsetFromConstructor c <*> return Term.le compareTerm' suc (Con c ts) (ConDBP c' ps)   | c == c' = compareConArgs suc ts ps compareTerm' suc (Def s ts) (ConDBP s' ps)   | s == s' && Just s == suc = compareConArgs suc ts ps -- new cases for counting constructors / projections -- register also increase-compareTerm' suc (Def s ts) p | Just s == suc = do-    os <- mapM (\ t -> compareTerm' suc (unArg t) p) ts-    return $ decr (-1) .*. infimum os-{- Andreas 2011-07-07 Projections are now being removed in a preprocess--- projections are size preserving-compareTerm' suc (Def qn ts) p = do-    isProj <- isProjection qn-    case isProj of-      -- strip off projection (n is the number of the record argument, counting starts with 1)-      Just n | length ts >= n && n >= 1 ->-        compareTerm' suc (unArg (ts !! (n - 1))) p-      -- not a projection or underapplied:-      _ -> return Term.unknown--}+compareTerm' suc (Def s [t]) p | Just s == suc = do+    -- Andreas, 2012-10-19 do not cut off here+    increase 1 <$> compareTerm' suc (unArg t) p+compareTerm' suc (Con c []) p = return Term.le compareTerm' suc (Con c ts) p = do-    os <- mapM (\ t -> compareTerm' suc (unArg t) p) ts-    oc <- increaseFromConstructor c-    return $ if (null os) then Term.unknown else oc .*. infimum os+    increase <$> offsetFromConstructor c+             <*> (infimum <$> mapM (\ t -> compareTerm' suc (unArg t) p) ts) compareTerm' suc t p | isSubTerm t p = return Term.le compareTerm' _ _ _ = return Term.unknown @@ -765,6 +970,7 @@ isSubTerm :: Term -> DeBruijnPat -> Bool isSubTerm t p = equal t p || properSubTerm t p   where+    equal (Shared p) dbp = equal (derefPtr p) dbp     equal (Con c ts) (ConDBP c' ps) =       and $ (c == c')           : (length ts == length ps)@@ -797,11 +1003,19 @@        -- allows examples like (x, y) < (Succ x, y) -} -compareVar :: (?cutoff :: Int) => Nat -> DeBruijnPat -> TCM Term.Order-compareVar i (VarDBP j)    = return $ if i == j then Term.le else Term.unknown-compareVar i (LitDBP _)    = return $ Term.unknown-compareVar i (ConDBP c ps) = do-  os <- mapM (compareVar i) ps-  let o = Term.supremum os-  oc <- decreaseFromConstructor c-  return $ (Term..*.) oc o+compareVar :: (?cutoff :: Int) => Maybe QName -> Nat -> DeBruijnPat -> TCM Term.Order+compareVar suc i (VarDBP j)    = compareVarVar suc i j+compareVar suc i (LitDBP _)    = return $ Term.unknown+compareVar suc i (ConDBP c ps) = do+  decrease <$> offsetFromConstructor c+           <*> (Term.supremum <$> mapM (compareVar suc i) ps)++-- | Compare two variables+compareVarVar :: (?cutoff :: Int) => Maybe QName -> Nat -> Nat -> TCM Term.Order+compareVarVar suc i j+  | i == j    = return Term.le+  | otherwise = do+      res <- isBounded i+      case res of+        BoundedNo  -> return Term.unknown+        BoundedLt v -> decrease 1 <$> compareTerm' suc v (VarDBP j)
src/full/Agda/Termination/Termination.hs view
@@ -9,24 +9,27 @@  module Agda.Termination.Termination   ( terminates+  , terminatesFilter   , Agda.Termination.Termination.tests   ) where  import Agda.Termination.Lexicographic import Agda.Termination.CallGraph import Agda.Termination.SparseMatrix+ import Agda.Utils.Either import Agda.Utils.TestHelpers-import Control.Arrow import Agda.Utils.QuickCheck-import qualified Data.Set as Set++import Control.Arrow++import Data.Array (Array) import qualified Data.Array as Array import Data.Set (Set) import qualified Data.Set as Set import Data.Map (Map) import qualified Data.Map as Map import Data.Monoid-import Data.Array (Array)  -- | TODO: This comment seems to be partly out of date. --@@ -56,6 +59,11 @@ terminates cs = let ccs = complete cs                 in                   checkIdems $ toList ccs++terminatesFilter :: (Ord meta, Monoid meta, ?cutoff :: Int) =>+  (Index -> Bool) -> CallGraph meta -> Either meta ()+terminatesFilter f cs = checkIdems $ filter f' $ toList $ complete cs+  where f' (c,m) = f (source c) && f (target c)  checkIdems :: (Ord meta, Monoid meta, ?cutoff :: Int) => [(Call,meta)] -> Either meta () checkIdems [] = Right ()
src/full/Agda/Tests.hs view
@@ -18,15 +18,18 @@ import Agda.Termination.Matrix                as TermMatrix (tests) import Agda.Termination.Semiring	      as TermRing   (tests) import Agda.Termination.SparseMatrix          as TermSparse (tests)+import Agda.TypeChecking.Irrelevance          as Irrel      (tests) import Agda.TypeChecking.Tests                as TypeChck   (tests) import Agda.Utils.Either	              as UtilEith   (tests) import Agda.Utils.FileName                    as UtilFile   (tests)+import Agda.Utils.Graph                       as UtilGrap   (tests) import Agda.Utils.List                        as UtilList   (tests) import Agda.Utils.Warshall                    as UtilWarsh  (tests)  testSuite :: IO Bool testSuite = runTests "QuickCheck test suite:"-  [ CompEnco.tests+  [ Irrel.tests+  , CompEnco.tests   , InteEmac.tests   , InteGene.tests   , IntePrec.tests@@ -43,6 +46,7 @@   , TypeChck.tests   , UtilEith.tests   , UtilFile.tests+  , UtilGrap.tests   , UtilList.tests   , UtilWarsh.tests   ]
src/full/Agda/TypeChecking/Abstract.hs view
@@ -14,7 +14,7 @@ piAbstractTerm :: Term -> Type -> Type -> Type piAbstractTerm v a b = fun a (abstractTerm v b)   where-    fun a b = El s $ Pi (Arg NotHidden Relevant a) $ mkAbs "w" b+    fun a b = El s $ Pi (Dom NotHidden Relevant a) $ mkAbs "w" b       where s = (sLub `on` getSort) a b  class AbstractTerm a where@@ -34,9 +34,13 @@     Sort s      -> Sort $ absT s     MetaV m vs  -> MetaV m $ absT vs     DontCare mv -> DontCare $ absT mv+    Shared p    -> Shared $ absT p     where       absT x = abstractTerm u x +instance AbstractTerm a => AbstractTerm (Ptr a) where+  abstractTerm u = fmap (abstractTerm u)+ instance AbstractTerm Type where   abstractTerm u (El s v) = El (abstractTerm u s) (abstractTerm u v) @@ -65,19 +69,21 @@ instance AbstractTerm a => AbstractTerm (Arg a) where   abstractTerm = fmap . abstractTerm +instance AbstractTerm a => AbstractTerm (Dom a) where+  abstractTerm = fmap . abstractTerm+ instance AbstractTerm a => AbstractTerm [a] where   abstractTerm = fmap . abstractTerm  instance AbstractTerm a => AbstractTerm (Maybe a) where   abstractTerm = fmap . abstractTerm -instance (Raise a, AbstractTerm a) => AbstractTerm (Abs a) where+instance (Subst a, AbstractTerm a) => AbstractTerm (Abs a) where   abstractTerm u (NoAbs x v) = NoAbs x $ abstractTerm u v-  abstractTerm u (Abs   x v) = Abs x $ rename swap $ abstractTerm (raise 1 u) v+  abstractTerm u (Abs   x v) = Abs x $ applySubst swap $ abstractTerm (raise 1 u) v     where-      swap 0 = 1-      swap 1 = 0-      swap i = i+      -- This swaps var 0 and var 1 (we hope)+      swap = var 1 :# liftS 1 (raiseS 1)  instance (AbstractTerm a, AbstractTerm b) => AbstractTerm (a, b) where   abstractTerm u (x, y) = (abstractTerm u x, abstractTerm u y)
src/full/Agda/TypeChecking/CompiledClause.hs view
@@ -1,24 +1,33 @@-{-# LANGUAGE TypeOperators, CPP, DeriveDataTypeable, DeriveFunctor #-}+{-# LANGUAGE TypeOperators, CPP, DeriveDataTypeable, DeriveFunctor, DeriveFoldable, DeriveTraversable #-} module Agda.TypeChecking.CompiledClause where  import qualified Data.Map as Map import Data.Map (Map) import Data.Monoid-import Data.Generics+import Data.Typeable (Typeable)+import Data.Foldable (Foldable)+import Data.Traversable (Traversable)  import Agda.Syntax.Common import Agda.Syntax.Internal import Agda.Syntax.Literal+ import Agda.Utils.Pretty+import Agda.Utils.Impossible+#include "../undefined.h"  type key :-> value = Map key value -data Case c = Branches { conBranches    :: QName   :-> c-                       , litBranches    :: Literal :-> c-                       , catchAllBranch :: Maybe c-                       }-  deriving (Typeable, Data, Functor)+data WithArity c = WithArity { arity :: Int, content :: c }+  deriving (Typeable, Functor, Foldable, Traversable) +data Case c = Branches+  { conBranches    :: QName :-> WithArity c -- ^ Map from constructor names to their arity and the case subtree+  , litBranches    :: Literal :-> c         -- ^ Map from literal to case subtree+  , catchAllBranch :: Maybe c               -- ^ (Possibly additional) catch-all clause+  }+  deriving (Typeable, Functor, Foldable, Traversable)+ data CompiledClauses   = Case Int (Case CompiledClauses)     -- ^ @Case n bs@ stands for a match on the @n@-th argument@@ -30,12 +39,19 @@     --   still reduce.   | Fail     -- ^ Absurd case.-  deriving (Typeable, Data)+  deriving (Typeable) +emptyBranches = Branches Map.empty Map.empty Nothing litCase l x = Branches Map.empty (Map.singleton l x) Nothing conCase c x = Branches (Map.singleton c x) Map.empty Nothing catchAll x  = Branches Map.empty Map.empty (Just x) +instance Monoid c => Monoid (WithArity c) where+ mempty = WithArity __IMPOSSIBLE__ mempty+ mappend (WithArity n1 c1) (WithArity n2 c2)+  | n1 == n2  = WithArity n1 $ mappend c1 c2+  | otherwise = __IMPOSSIBLE__   -- arity must match!+ instance Monoid m => Monoid (Case m) where   mempty = Branches Map.empty Map.empty Nothing   mappend (Branches cs  ls  m)@@ -49,6 +65,9 @@ instance Show CompiledClauses where   show = show . pretty +instance Pretty a => Pretty (WithArity a) where+  pretty = pretty . content+ instance Pretty a => Pretty (Case a) where   prettyPrec p (Branches cs ls m) =     mparens (p > 0) $ vcat $@@ -61,7 +80,7 @@              | (x, v) <- Map.toList m ]  instance Pretty CompiledClauses where-  pretty (Done hs t)  = text ("done" ++ show hs) <+> text (show t)+  pretty (Done hs t) = text ("done" ++ show hs) <+> text (show t)   pretty Fail        = text "fail"   pretty (Case n bs) =     sep [ text ("case " ++ show n ++ " of")
src/full/Agda/TypeChecking/CompiledClause/Compile.hs view
@@ -3,41 +3,102 @@  import Data.Monoid import qualified Data.Map as Map-import Data.List (genericReplicate, nubBy)+import Data.List (genericReplicate, nubBy, findIndex) import Data.Function  import Agda.Syntax.Common import Agda.Syntax.Internal import Agda.TypeChecking.CompiledClause+import Agda.TypeChecking.Coverage+import Agda.TypeChecking.Coverage.SplitTree import Agda.TypeChecking.Monad import Agda.TypeChecking.RecordPatterns import Agda.TypeChecking.Substitute import Agda.TypeChecking.Pretty-import Agda.Utils.List +import Agda.Utils.List import Agda.Utils.Impossible #include "../../undefined.h" +-- | Process function clauses into case tree.+--   This involves:+--   1. Coverage checking, generating a split tree.+--   2. Translation of lhs record patterns into rhs uses of projection.+--      Update the split tree.+--   3. Generating a case tree from the split tree.+--   Phases 1. and 2. are skipped if @Nothing@. compileClauses ::-  Bool -- ^ Translate record patterns?+  Maybe (QName, Type) -- ^ Translate record patterns and coverage check with given type?   -> [Clause] -> TCM CompiledClauses-compileClauses translate cs = do-  cs <- if translate then-          mapM translateRecordPatterns cs-         else-          return cs-  return $ compile [(clausePats c, clauseBody c) | c <- cs]+compileClauses mt cs = do+  let cls = [(clausePats c, clauseBody c) | c <- cs]+  case mt of+    Nothing -> return $ compile cls+    Just (q, t)  -> do+      splitTree <- coverageCheck q t cs+  {-+      splitTree <- translateSplitTree splitTree+      reportSDoc "tc.cc.splittree" 10 $ vcat+        [ text "translated split tree for" <+> prettyTCM q+        , text $ show splitTree+        ]+  -}+      -- cs <- mapM translateRecordPatterns cs+      reportSDoc "tc.cc" 50 $ do+        sep [ text "clauses before compilation"+            , (nest 2 . text . show) cs+            ] -- ++ map (nest 2 . text . show) cs+      let cc = compileWithSplitTree splitTree cls+      reportSDoc "tc.cc" 12 $ sep+        [ text "compiled clauses (still containing record splits)"+        , nest 2 $ text (show cc)+        ]+      cc <- translateCompiledClauses cc+      return cc  type Cl  = ([Arg Pattern], ClauseBody) type Cls = [Cl] +compileWithSplitTree :: SplitTree -> Cls -> CompiledClauses+compileWithSplitTree t cs = case t of+  SplitAt i ts ->+    -- the coverage checker does not count dot patterns as variables+    -- in case trees however, they count as variable patterns+    let n = i -- countInDotPatterns i cs+    in  Case n $ compiles ts $ splitOn n cs+  SplittingDone n -> compile cs+    -- after end of split tree, continue with left-to-right strategy++  where++    compiles :: SplitTrees -> Case Cls -> Case CompiledClauses+    compiles ts br@Branches{ conBranches = cons+                           , litBranches = lits+                           , catchAllBranch = Nothing }+      | Map.null lits = emptyBranches { conBranches = updCons cons }+      where+        updCons = Map.mapWithKey $ \ c cl -> case lookup c ts of+                    Nothing -> __IMPOSSIBLE__+                    Just t  -> fmap (compileWithSplitTree t) cl+    compiles ts br    = fmap compile br++    -- increase split index by number of dot patterns we have skipped+    countInDotPatterns :: Int -> [Cl] -> Int+    countInDotPatterns i [] = __IMPOSSIBLE__+    countInDotPatterns i ((ps, _) : _) = i + loop i (map unArg ps) where+      loop 0 ps            = 0+      loop i []            = __IMPOSSIBLE__+      loop i (DotP{} : ps) = 1 + loop i ps+      loop i (_      : ps) = loop (i - 1) ps++ compile :: Cls -> CompiledClauses compile cs = case nextSplit cs of   Just n  -> Case n $ fmap compile $ splitOn n cs   Nothing -> case map getBody cs of     -- It's possible to get more than one clause here due to     -- catch-all expansion.-    Just t : _  -> Done (map (fmap name) $ fst $ head cs) t+    Just t : _  -> Done (map (fmap name) $ fst $ head cs) (shared t)     Nothing : _ -> Fail     []          -> __IMPOSSIBLE__   where@@ -50,9 +111,12 @@     body (Body t)   = Just t     body NoBody     = Nothing +-- | Get the index of the next argument we need to split on.+--   This the number of the first pattern that does a match in the first clause. nextSplit :: Cls -> Maybe Int-nextSplit [] = __IMPOSSIBLE__-nextSplit ((ps, _):_) = mhead [ n | (a, n) <- zip ps [0..], isPat (unArg a) ]+nextSplit []          = __IMPOSSIBLE__+nextSplit ((ps, _):_) = findIndex isPat $ map unArg ps+  -- OLD, IDENTICAL: mhead [ n | (a, n) <- zip ps [0..], isPat (unArg a) ]   where     isPat VarP{} = False     isPat DotP{} = False@@ -64,7 +128,7 @@  splitC :: Int -> Cl -> Case Cl splitC n (ps, b) = case unArg p of-  ConP c _ qs -> conCase c (ps0 ++ qs ++ ps1, b)+  ConP c _ qs -> conCase c $ WithArity (length qs) (ps0 ++ qs ++ ps1, b)   LitP l      -> litCase l (ps0 ++ ps1, b)   _           -> catchAll (ps, b)   where@@ -99,7 +163,7 @@       case q of         ConP c _ qs' -> (ps0 ++ [defaultArg $ ConP c Nothing (genericReplicate m $ defaultArg $ VarP "_")] ++ ps1,                          substBody n' m (Con c (map var [m - 1, m - 2..0])) b)-          where m = fromIntegral $ length qs'+          where m = length qs'         LitP l -> (ps0 ++ [defaultArg $ LitP l] ++ ps1, substBody n' 0 (Lit l) b)         _ -> __IMPOSSIBLE__       where@@ -114,10 +178,10 @@          var x = defaultArg $ Var x [] -substBody :: Int -> Integer -> Term -> ClauseBody -> ClauseBody+substBody :: Int -> Int -> Term -> ClauseBody -> ClauseBody substBody _ _ _ NoBody = NoBody substBody 0 m v b = case b of-  Bind   b -> foldr (.) id (genericReplicate m (Bind . Abs "_")) $ subst v (absBody $ raise m b)+  Bind   b -> foldr (.) id (replicate m (Bind . Abs "_")) $ subst v (absBody $ raise m b)   _        -> __IMPOSSIBLE__ substBody n m v b = case b of   Bind b   -> Bind $ fmap (substBody (n - 1) m v) b
src/full/Agda/TypeChecking/CompiledClause/Compile.hs-boot view
@@ -4,4 +4,4 @@ import Agda.TypeChecking.CompiledClause import Agda.TypeChecking.Monad.Base -compileClauses :: Bool -> [Clause] -> TCM CompiledClauses+compileClauses :: Maybe (QName, Type) -> [Clause] -> TCM CompiledClauses
src/full/Agda/TypeChecking/CompiledClause/Match.hs view
@@ -29,14 +29,15 @@ match :: CompiledClauses -> MaybeReducedArgs -> (Args -> Args) -> Stack -> TCM (Reduced (Blocked Args) Term) match Fail args patch stack = return $ NoReduction $ NotBlocked (patch $ map ignoreReduced args) match (Done xs t) args _ _-  | m < n     = return $ YesReduction $ substs (reverse $ toTm args)+  | m < n     = return $ YesReduction $ applySubst (parallelS $ reverse $ toTm args)                                       $ foldr lam t (drop m xs)-  | otherwise = return $ YesReduction $ substs (reverse $ toTm args0) t `apply` map ignoreReduced args1+  | otherwise = return $ YesReduction $+                  applySubst (parallelS $ reverse $ toTm args0) t `apply` map ignoreReduced args1   where     n              = length xs     m              = length args     toTm           = map (unArg . ignoreReduced)-    (args0, args1) = splitAt n args+    (args0, args1) = splitAt n $ map (fmap $ fmap shared) args     lam x t        = Lam (argHiding x) (Abs (unArg x) t) match (Case n bs) args patch stack =   case genericSplitAt n args of@@ -56,22 +57,24 @@           patchCon c m args = patch (args0 ++ [Arg h r $ Con c vs] ++ args1)             where (args0, args1') = splitAt n args                   (vs, args1)     = splitAt m args1'-      case w of+      case ignoreSharing <$> w of         Blocked x _            -> return $ NoReduction $ Blocked x (patch $ map ignoreReduced args')         NotBlocked (MetaV x _) -> return $ NoReduction $ Blocked x (patch $ map ignoreReduced args')         NotBlocked (Lit l) -> case Map.lookup l (litBranches bs) of           Nothing -> match' stack''           Just cc -> match cc (args0 ++ args1) patchLit stack''           where-            stack'' = (++ stack') $ case cv of+            stack'' = (++ stack') $ case ignoreSharing cv of               Con c vs -> case Map.lookup c (conBranches bs) of                 Nothing -> []-                Just cc -> [(cc, args0 ++ map (MaybeRed red) vs ++ args1, patchCon c (length vs))]+                Just cc -> [(content cc, args0 ++ map (MaybeRed red) vs ++ args1, patchCon c (length vs))]               _        -> []         NotBlocked (Con c vs) -> case Map.lookup c (conBranches bs) of           Nothing -> match' stack'-          Just cc -> match cc (args0 ++ map (MaybeRed red) vs ++ args1)-                              (patchCon c (length vs)) stack'+          Just cc -> match (content cc)+                           (args0 ++ map (MaybeRed red) vs ++ args1)+                           (patchCon c (length vs))+                           stack'         NotBlocked _ -> return $ NoReduction $ NotBlocked (patch $ map ignoreReduced args')  match' :: Stack -> TCM (Reduced (Blocked Args) Term)@@ -79,7 +82,6 @@ match' [] = typeError $ GenericError "Incomplete pattern matching"  unfoldCorecursion v = case v of-  -- Andreas, 2011-10-03 removing DontCare here allow matching on irrelevant things-  DontCare v -> unfoldCorecursion v   Def f args -> unfoldDefinition True unfoldCorecursion (Def f []) f args+  Shared{}   -> fmap shared <$> unfoldCorecursion (ignoreSharing v) -- don't update when unfolding corecursion!   _          -> reduceB v
src/full/Agda/TypeChecking/Constraints.hs view
@@ -12,17 +12,22 @@ import Data.Set as Set  import Agda.Syntax.Common+import Agda.Syntax.Position import Agda.Syntax.Internal+import qualified Agda.Syntax.Abstract as A import Agda.Syntax.Scope.Base import Agda.TypeChecking.Monad import Agda.TypeChecking.Errors+import Agda.TypeChecking.InstanceArguments+import Agda.TypeChecking.Irrelevance (unusableRelevance) import Agda.TypeChecking.Pretty import Agda.TypeChecking.Reduce import Agda.TypeChecking.Substitute import Agda.TypeChecking.LevelConstraints+-- import Agda.TypeChecking.SizedTypes (solveSizeConstraints) import Agda.TypeChecking.MetaVars.Mention -import {-# SOURCE #-} Agda.TypeChecking.Rules.Term (checkExpr)+import {-# SOURCE #-} Agda.TypeChecking.Rules.Term (checkExpr, checkArguments) import {-# SOURCE #-} Agda.TypeChecking.Conversion import {-# SOURCE #-} Agda.TypeChecking.MetaVars import {-# SOURCE #-} Agda.TypeChecking.Empty@@ -40,7 +45,7 @@ catchConstraint :: Constraint -> TCM () -> TCM () catchConstraint c v = liftTCM $    catchError_ v $ \err ->-   case errError err of+   case err of         -- Not putting s (which should really be the what's already there) makes things go         -- a lot slower (+20% total time on standard library). How is that possible??         -- The problem is most likely that there are internal catchErrors which forgets the@@ -63,7 +68,13 @@         reportSDoc "tc.constr.add" 20 $ text "  simplified:" <+> prettyTCM c'         solveConstraint_ c'       else addConstraint' c'+    -- the added constraint can cause IFS constraints to be solved+    unless (isIFSConstraint c) $+       wakeConstraints (isIFSConstraint . clValue . theConstraint)   where+    isIFSConstraint :: Constraint -> Bool+    isIFSConstraint FindInScope{} = True+    isIFSConstraint _ = False     simpl :: Constraint -> TCM Constraint     simpl c = do       n <- genericLength <$> getContext@@ -103,9 +114,10 @@ ifNoConstraints_ :: TCM () -> TCM a -> (ProblemId -> TCM a) -> TCM a ifNoConstraints_ check ifNo ifCs = ifNoConstraints check (const ifNo) (\pid _ -> ifCs pid) --- | @guardConstraint cs c@ tries to solve constraints @cs@ first.---   If successful, it moves on to solve @c@, otherwise it returns---   a @Guarded c cs@.+-- | @guardConstraint c blocker@ tries to solve @blocker@ first.+--   If successful without constraints, it moves on to solve @c@, otherwise it+--   adds a @Guarded c cs@ constraint+--   to the @blocker@-generated constraints @cs@. guardConstraint :: Constraint -> TCM () -> TCM () guardConstraint c blocker =   ifNoConstraints_ blocker (solveConstraint_ c) (addConstraint . Guarded c)@@ -119,7 +131,7 @@ -- | Wake up the constraints depending on the given meta. wakeupConstraints :: MetaId -> TCM () wakeupConstraints x = do-  wakeConstraints (mentionsMeta x)+  wakeConstraints (const True) -- (mentionsMeta x) -- TODO: needs fixing to cope with shared updates   solveAwakeConstraints  -- | Wake up all constraints.@@ -129,9 +141,14 @@   solveAwakeConstraints  solveAwakeConstraints :: TCM ()-solveAwakeConstraints = do+solveAwakeConstraints = solveAwakeConstraints' False++solveAwakeConstraints' :: Bool -> TCM ()+solveAwakeConstraints' force = do     verboseS "profile.constraints" 10 $ liftTCM $ tickMax "max-open-constraints" . genericLength =<< getAllConstraints-    unlessM isSolvingConstraints $ nowSolvingConstraints solve+    whenM ((force ||) . not <$> isSolvingConstraints) $ nowSolvingConstraints $ do+     -- solveSizeConstraints -- Andreas, 2012-09-27 attacks size constrs too early+     solve   where     solve = do       reportSDoc "tc.constr.solve" 10 $ hsep [ text "Solving awake constraints."@@ -150,6 +167,7 @@       reportSDoc "tc.constr.solve" 20 $ text (show pids) <+> prettyTCM c       solveConstraint_ c +solveConstraint_ :: Constraint -> TCM () solveConstraint_ (ValueCmp cmp a u v)       = compareTerm cmp a u v solveConstraint_ (ElimCmp cmp a e u v)      = compareElims cmp a e u v solveConstraint_ (TypeCmp cmp a b)          = compareType cmp a b@@ -159,7 +177,7 @@ solveConstraint_ c0@(Guarded c pid)         = do   ifM (isProblemSolved pid) (solveConstraint_ c)                             (addConstraint c0)-solveConstraint_ (IsEmpty t)                = isEmptyType t+solveConstraint_ (IsEmpty r t)              = isEmptyType r t solveConstraint_ (UnBlock m)                =   ifM (isFrozen m) (addConstraint $ UnBlock m) $ do     inst <- mvInstantiation <$> lookupMeta m@@ -187,82 +205,4 @@       -- Open (whatever that means)       Open -> __IMPOSSIBLE__       OpenIFS -> __IMPOSSIBLE__-solveConstraint_ (FindInScope m)      =-  ifM (isFrozen m) (addConstraint $ FindInScope m) $ do-    reportSDoc "tc.constr.findInScope" 15 $ text ("findInScope constraint: " ++ show m)-    mv <- lookupMeta m-    let j = mvJudgement mv-    case j of-      IsSort{} -> __IMPOSSIBLE__-      HasType _ tj -> do-        ctx <- getContextVars-        ctxArgs <- getContextArgs-        t <- normalise $ tj `piApply` ctxArgs-        reportSLn "tc.constr.findInScope" 15 $ "findInScope t: " ++ show t-        let candsP1 = [(term, t) | (term, t, Instance) <- ctx]-        let candsP2 = [(term, t) | (term, t, h) <- ctx, h /= Instance]-        let scopeInfo = getMetaScope mv-        let ns = everythingInScope scopeInfo-        let nsList = Map.toList $ nsNames ns-        -- try all abstract names in scope (even ones that you can't refer to-        --  unambiguously)-        let candsP3Names = nsList >>= snd-        candsP3Types <- mapM (typeOfConst . anameName) candsP3Names-        candsP3FV <- mapM (freeVarsToApply . anameName) candsP3Names-        let candsP3 = [(Def (anameName an) vs, t) |-                       (an, t, vs) <- zip3 candsP3Names candsP3Types candsP3FV]-        let cands = [candsP1, candsP2, candsP3]-        cands <- mapM (filterM (uncurry $ checkCandidateForMeta m t )) cands-        let iterCands :: [(Int, [(Term, Type)])] -> TCM ()-            iterCands [] = do reportSDoc "tc.constr.findInScope" 15 $ text "not a single candidate found..."-                              typeError $ IFSNoCandidateInScope t-            iterCands ((p, []) : cs) = do reportSDoc "tc.constr.findInScope" 15 $ text $-                                            "no candidates found at p=" ++ show p ++ ", trying next p..."-                                          iterCands cs-            iterCands ((p, [(term, t')]):_) =-              do reportSDoc "tc.constr.findInScope" 15 $ text (-                   "one candidate at p=" ++ show p ++ " found for type '") <+>-                   prettyTCM t <+> text "': '" <+> prettyTCM term <+>-                   text "', of type '" <+> prettyTCM t' <+> text "'."-                 leqType t t'-                 assignV m ctxArgs term-            iterCands ((p, cs):_) = do reportSDoc "tc.constr.findInScope" 15 $-                                         text ("still more than one candidate at p=" ++ show p ++ ": ") <+>-                                         prettyTCM (List.map fst cs)-                                       addConstraint $ FindInScope m-        iterCands [(1,concat cands)]-      where-        getContextVars :: TCM [(Term, Type, Hiding)]-        getContextVars = do-          ctx <- getContext-          let ids = [0.. fromIntegral (length ctx) - 1] :: [Nat]-          types <- mapM typeOfBV ids-          return $ [ (Var i [], t, h) | (Arg h _ _, i, t) <- zip3 ctx [0..] types ]-        checkCandidateForMeta :: MetaId -> Type -> Term -> Type -> TCM Bool-        checkCandidateForMeta m t term t' =-          liftTCM $ flip catchError (\err -> return False) $ do-            reportSLn "tc.constr.findInScope" 20 $ "checkCandidateForMeta\n  t: " ++ show t ++ "\n  t':" ++ show t' ++ "\n  term: " ++ show term ++ "."-            localState $ do-               -- domi: we assume that nothing below performs direct IO (except-               -- for logging and such, I guess)-               leqType t t'-               tel <- getContextTelescope-               assignTerm m (teleLam tel term)-               -- make a pass over constraints, to detect cases where some are made-               -- unsolvable by the assignment, but don't do this for FindInScope's-               -- to prevent loops. We currently also ignore UnBlock constraints-               -- to be on the safe side.-               wakeConstraints (isSimpleConstraint . clValue . theConstraint)-               solveAwakeConstraints-            return True-        isSimpleConstraint :: Constraint -> Bool-        isSimpleConstraint FindInScope{} = False-        isSimpleConstraint UnBlock{}     = False-        isSimpleConstraint _             = True--localState :: MonadState s m => m a -> m a-localState m = do-  s <- get-  x <- m-  put s-  return x+solveConstraint_ (FindInScope m cands)      = findInScope m cands
+ src/full/Agda/TypeChecking/Constraints.hs-boot view
@@ -0,0 +1,9 @@+module Agda.TypeChecking.Constraints where++import Agda.TypeChecking.Monad.Base++addConstraint          :: Constraint -> TCM ()+solveConstraint        :: Constraint -> TCM ()+solveAwakeConstraints' :: Bool -> TCM ()+noConstraints          :: TCM a -> TCM a+ifNoConstraints_       :: TCM () -> TCM a -> (ProblemId -> TCM a) -> TCM a
src/full/Agda/TypeChecking/Conversion.hs view
@@ -4,20 +4,24 @@  import Control.Applicative import Control.Monad+import Control.Monad.Reader import Control.Monad.State import Control.Monad.Error import Data.Traversable hiding (mapM, sequence) import Data.List hiding (sort) import qualified Data.List as List +import Agda.Syntax.Abstract.Views (isSet) import Agda.Syntax.Literal import Agda.Syntax.Common import Agda.Syntax.Internal+import Agda.Syntax.Translation.InternalToAbstract (reify) import Agda.TypeChecking.Monad import Agda.TypeChecking.MetaVars import Agda.TypeChecking.MetaVars.Occurs (killArgs,PruneResult(..))-import Agda.TypeChecking.Substitute import Agda.TypeChecking.Reduce+import Agda.TypeChecking.Substitute+import Agda.TypeChecking.Telescope import Agda.TypeChecking.Constraints import Agda.TypeChecking.Errors import Agda.TypeChecking.Primitive (constructorForm)@@ -25,15 +29,19 @@ import Agda.TypeChecking.Records import Agda.TypeChecking.Pretty import Agda.TypeChecking.Injectivity+import Agda.TypeChecking.Polarity import Agda.TypeChecking.SizedTypes import Agda.TypeChecking.Monad.Builtin import Agda.TypeChecking.Level+import Agda.TypeChecking.Implicit (implicitArgs) import Agda.TypeChecking.Irrelevance import Agda.TypeChecking.EtaContract import Agda.TypeChecking.Eliminators -- import Agda.TypeChecking.UniversePolymorphism +import Agda.Utils.Size import Agda.Utils.Monad+import Agda.Utils.Maybe  import Agda.TypeChecking.Monad.Debug @@ -43,9 +51,6 @@ mlevel :: TCM (Maybe Term) mlevel = liftTCM $ (Just <$> primLevel) `catchError` \_ -> return Nothing -nextPolarity []       = (Invariant, [])-nextPolarity (p : ps) = (p, ps)- -- | Check if to lists of arguments are the same (and all variables). --   Precondition: the lists have the same length. sameVars :: Args -> Args -> Bool@@ -73,37 +78,80 @@ equalType :: Type -> Type -> TCM () equalType = compareType CmpEq +{- Comparing in irrelevant context always succeeds.++   However, we might want to dig for solutions of irrelevant metas.++   To this end, we can just ignore errors during conversion checking.+ -}++-- convError ::  MonadTCM tcm => TypeError -> tcm a+-- | Ignore errors in irrelevant context.+convError :: TypeError -> TCM ()+convError err = ifM ((==) Irrelevant <$> asks envRelevance) (return ()) $ typeError err+ -- | Type directed equality on values. -- compareTerm :: Comparison -> Type -> Term -> Term -> TCM ()   -- If one term is a meta, try to instantiate right away. This avoids unnecessary unfolding.-compareTerm cmp a u v = liftTCM $ do-  (u, v) <- instantiate (u, v)+  -- Andreas, 2012-02-14: This is UNSOUND for subtyping!+compareTerm cmp a u v = do+  -- Check syntactic equality first. This actually saves us quite a bit of work.+  (u, v) <- instantiateFull (u, v)+  if u == v then unifyPointers cmp u v $ verboseS "profile.sharing" 20 $ tick "equal terms" else do+  verboseS "profile.sharing" 20 $ tick "unequal terms"+  let checkPointerEquality def | not $ null $ List.intersect (pointerChain u) (pointerChain v) = do+        verboseS "profile.sharing" 10 $ tick "pointer equality"+        return ()+      checkPointerEquality def = def+  checkPointerEquality $ do   reportSDoc "tc.conv.term" 10 $ sep [ text "compareTerm"                                      , nest 2 $ prettyTCM u <+> prettyTCM cmp <+> prettyTCM v                                      , nest 2 $ text ":" <+> prettyTCM a ]   let fallback = compareTerm' cmp a u v-  case (u, v) of-    (u@(MetaV x us), v@(MetaV y vs))-      | x /= y    -> solve1 `orelse` solve2 `orelse` compareTerm' cmp a u v+      unlessSubtyping cont =+          if cmp == CmpEq then cont else do+            -- do not short circuit size comparison!+            isSize <- isJust <$> do isSizeTypeTest <*> reduce a+            if isSize then fallback else cont+  case (ignoreSharing u, ignoreSharing v) of+    (MetaV x us, MetaV y vs)+      | x /= y    -> unlessSubtyping $ solve1 `orelse` solve2 `orelse` compareTerm' cmp a u v       | otherwise -> fallback       where         (solve1, solve2) | x > y     = (assign x us v, assign y vs u)                          | otherwise = (assign y vs u, assign x us v)-    (u@(MetaV x us), v) -> assign x us v `orelse` fallback-    (u, v@(MetaV y vs)) -> assign y vs u `orelse` fallback-    _                   -> fallback+    (MetaV x us, _) -> unlessSubtyping $ assign x us v `orelse` fallback+    (_, MetaV y vs) -> unlessSubtyping $ assign y vs u `orelse` fallback+    _               -> fallback   where     assign x us v = do-      reportSDoc "tc.conv.term" 20 $ sep [ text "attempting shortcut"-                                         , nest 2 $ prettyTCM (MetaV x us) <+> text ":=" <+> prettyTCM v ]+      reportSDoc "tc.conv.term.shortcut" 20 $ sep+        [ text "attempting shortcut"+        , nest 2 $ prettyTCM (MetaV x us) <+> text ":=" <+> prettyTCM v+        ]       ifM (isInstantiatedMeta x) patternViolation (assignV x us v)+      instantiate u+      -- () <- seq u' $ return ()+      reportSLn "tc.conv.term.shortcut" 50 $+        "shortcut successful\n  result: " ++ show u     -- Should be ok with catchError_ but catchError is much safer since we don't     -- rethrow errors.-    m `orelse` h = m `catchError` \err -> case errError err of+    m `orelse` h = m `catchError` \err -> case err of                     PatternErr s -> put s >> h                     _            -> h +unifyPointers _ _ _ action = action+-- unifyPointers cmp _ _ action | cmp /= CmpEq = action+-- unifyPointers _ u v action = do+--   old <- gets stDirty+--   modify $ \s -> s { stDirty = False }+--   action+--   (u, v) <- instantiate (u, v)+--   dirty <- gets stDirty+--   modify $ \s -> s { stDirty = old }+--   when (not dirty) $ forceEqualTerms u v+ compareTerm' :: Comparison -> Type -> Term -> Term -> TCM () compareTerm' cmp a m n =   verboseBracket "tc.conv.term" 20 "compareTerm" $ do@@ -112,18 +160,19 @@     reportSDoc "tc.conv.term" 30 $ fsep       [ text "compareTerm", prettyTCM m, prettyTCM cmp, prettyTCM n, text ":", prettyTCM a' ]     proofIrr <- proofIrrelevance-    isSize   <- isSizeType a'+    isSize   <- isJust <$> isSizeType a'     s        <- reduce $ getSort a'     mlvl     <- mlevel     case s of       Prop | proofIrr -> return ()       _    | isSize   -> compareSizes cmp m n-      _               -> case unEl a' of+      _               -> case ignoreSharing $ unEl a' of         a | Just a == mlvl -> do           a <- levelView m           b <- levelView n           equalLevel a b-        Pi a _    -> equalFun (a,a') m n+-- OLD:        Pi dom _  -> equalFun (dom, a') m n+        a@Pi{}    -> equalFun a m n         Lam _ _   -> __IMPOSSIBLE__         Def r ps  -> do           isrec <- isEtaRecord r@@ -157,23 +206,40 @@ -- Andreas, 2010-10-11: allowing neutrals to be blocked things does not seem -- to change Agda's behavior --    isNeutral Blocked{}          = False-    isNeutral (NotBlocked Con{}) = False-    isNeutral _                  = True-    isMeta (NotBlocked MetaV{})  = True-    isMeta _                     = False+    isNeutral = isNeutral' . fmap ignoreSharing+    isMeta    = isMeta'    . fmap ignoreSharing+    isNeutral' (NotBlocked Con{}) = False+    isNeutral' _                  = True+    isMeta' (NotBlocked MetaV{})  = True+    isMeta' _                     = False -    equalFun (a,t) m n = do+    -- equality at function type (accounts for eta)+    equalFun :: Term -> Term -> Term -> TCM ()+    equalFun (Shared p) m n = equalFun (derefPtr p) m n+    equalFun (Pi dom@(Dom h r _) b) m n = do+        name <- freshName_ $ properName $ absName b+        addCtx name dom $ compareTerm cmp (absBody b) m' n'+      where+        (m',n') = raise 1 (m,n) `apply` [Arg h r $ var 0]+        properName "_" = "x"+        properName  x  =  x+    equalFun _ _ _ = __IMPOSSIBLE__+{- OLD CODE+    equalFun :: (Dom Type, Type) -> Term -> Term -> TCM ()+    equalFun (a@(Dom h r _), t) m n = do         name <- freshName_ (suggest $ unEl t)         addCtx name a $ compareTerm cmp t' m' n'       where-        p	= fmap (const $ Var 0 []) a+        p	= Arg h r $ var 0         (m',n') = raise 1 (m,n) `apply` [p]         t'	= raise 1 t `piApply` [p]         suggest (Pi _ b) = absName b         suggest _	 = __IMPOSSIBLE__+-} --- | @compareTel t1 t2 cmp tel1 tel1@ checks whether pointwise @tel1 `cmp` tel2@---   and complains that @t2 `cmp` t1@ failed if not.+-- | @compareTel t1 t2 cmp tel1 tel1@ checks whether pointwise+--   @tel1 \`cmp\` tel2@ and complains that @t2 \`cmp\` t1@ failed if+--   not. compareTel :: Type -> Type ->   Comparison -> Telescope -> Telescope -> TCM () compareTel t1 t2 cmp tel1 tel2 =@@ -182,17 +248,20 @@     (EmptyTel, EmptyTel) -> return ()     (EmptyTel, _)        -> bad     (_, EmptyTel)        -> bad-    (ExtendTel arg1@(Arg h1 r1 a1) tel1, ExtendTel arg2@(Arg h2 r2 a2) tel2)+    (ExtendTel arg1@(Dom h1 r1 a1) tel1, ExtendTel arg2@(Dom h2 r2 a2) tel2)       | h1 /= h2 -> bad         -- Andreas, 2011-09-11 do not test r1 == r2 because they could differ         -- e.g. one could be Forced and the other Relevant (see fail/UncurryMeta)       | otherwise -> do-          let (tel1', tel2') = raise 1 (tel1, tel2)-              arg            = Var 0 []           name <- freshName_ (suggest (absName tel1) (absName tel2))           let checkArg = escapeContext 1 $ compareType cmp a1 a2-          let c = TelCmp t1 t2 cmp (absApp tel1' arg) (absApp tel2' arg)-          let r = max r1 r2  -- take "most irrelevant"+{- OLD+          let (tel1', tel2') = raise 1 (tel1, tel2)+              arg            = var 0+              c = TelCmp t1 t2 cmp (absApp tel1' arg) (absApp tel2' arg)+-}+              c = TelCmp t1 t2 cmp (absBody tel1) (absBody tel2)+              r = max r1 r2  -- take "most irrelevant"               dependent = (r /= Irrelevant) && isBinderUsed tel2           addCtx name arg1 $             if dependent@@ -213,14 +282,25 @@     verboseBracket "tc.conv.atom" 20 "compareAtom" $     -- if a PatternErr is thrown, rebuild constraint!     catchConstraint (ValueCmp cmp t m n) $ do-      let unLevel (Level l) = reallyUnLevelView l-          unLevel v = return v-      -- constructorForm changes literal to constructors+      reportSDoc "tc.conv.atom" 50 $+	text "compareAtom" <+> fsep [ prettyTCM m <+> prettyTCM cmp+                                    , prettyTCM n+                                    , text ":" <+> prettyTCM t ]       -- Andreas: what happens if I cut out the eta expansion here?       -- Answer: Triggers issue 245, does not resolve 348-      mb <- traverse unLevel =<< traverse constructorForm =<< etaExpandBlocked =<< reduceB m-      nb <- traverse unLevel =<< traverse constructorForm =<< etaExpandBlocked =<< reduceB n+      mb' <- etaExpandBlocked =<< reduceB m+      nb' <- etaExpandBlocked =<< reduceB n +      -- constructorForm changes literal to constructors+      -- only needed if the other side is not a literal+      (mb'', nb'') <- case (ignoreSharing $ ignoreBlocking mb', ignoreSharing $ ignoreBlocking nb') of+	(Lit _, Lit _) -> return (mb', nb')+        _ -> (,) <$> traverse constructorForm mb'+                 <*> traverse constructorForm nb'++      mb <- traverse unLevel mb''+      nb <- traverse unLevel nb''+       let m = ignoreBlocking mb           n = ignoreBlocking nb @@ -233,11 +313,13 @@                 then return ()	-- Check syntactic equality for blocked terms                 else postpone +      unifyPointers cmp (ignoreBlocking mb') (ignoreBlocking nb') $ do    -- this needs to go after eta expansion to avoid creating infinite terms+       reportSDoc "tc.conv.atom" 30 $ 	text "compareAtom" <+> fsep [ prettyTCM mb <+> prettyTCM cmp                                     , prettyTCM nb                                     , text ":" <+> prettyTCM t ]-      case (mb, nb) of+      case (ignoreSharing <$> mb, ignoreSharing <$> nb) of         -- equate two metas x and y.  if y is the younger meta,         -- try first y := x and then x := y         (NotBlocked (MetaV x xArgs), NotBlocked (MetaV y yArgs))@@ -265,7 +347,7 @@                       where l = assignV x xArgs n                             r = assignV y yArgs m -                    try m h = m `catchError_` \err -> case errError err of+                    try m h = m `catchError_` \err -> case err of                       PatternErr s -> put s >> h                       _            -> throwError err @@ -280,7 +362,7 @@         (Blocked{}, Blocked{})	-> checkSyntacticEquality         (Blocked{}, _)    -> useInjectivity cmp t m n         (_,Blocked{})     -> useInjectivity cmp t m n-        _ -> case (m, n) of+        _ -> case (ignoreSharing m, ignoreSharing n) of 	    (Pi{}, Pi{}) -> equalFun m n  	    (Sort s1, Sort s2) -> compareSort CmpEq s1 s2@@ -293,11 +375,24 @@             (Def{}, Def{}) -> do               ev1 <- elimView m               ev2 <- elimView n+              reportSDoc "tc.conv.atom" 50 $+                sep [ text $ "ev1 = " ++ show ev1+                    , text $ "ev2 = " ++ show ev2 ]               case (ev1, ev2) of                 (VarElim x els1, VarElim y els2) | x == y -> cmpElim (typeOfBV x) (Var x []) els1 els2-                (ConElim x els1, ConElim y els2) | x == y -> cmpElim (conType x t) (Con x []) els1 els2+                (ConElim x els1, ConElim y els2) | x == y ->+                  cmpElim (conType x t) (Con x []) els1 els2+                  -- Andreas 2012-01-17 careful!  In the presence of+                  -- projection eliminations, t is NOT the datatype x belongs to+                  -- Ulf 2012-07-12: actually projection likeness is carefully+                  -- set up so that there can't be any projections from+                  -- constructor applications at this point, so t really is the+                  -- datatype of x. See issue 676 for an example where it+                  -- failed.                 (DefElim x els1, DefElim y els2) | x == y ->                   cmpElim (defType <$> getConstInfo x) (Def x []) els1 els2+                (DefElim x els1, DefElim y els2) ->+                  trySizeUniv cmp t m n x els1 y els2                 (MetaElim{}, _) -> __IMPOSSIBLE__   -- projections from metas should have been eta expanded                 (_, MetaElim{}) -> __IMPOSSIBLE__                 _ -> typeError $ UnequalTerms cmp m n t@@ -324,50 +419,44 @@                     compareArgs [] a' (Con x []) xArgs yArgs             _ -> typeError $ UnequalTerms cmp m n t     where-        conType c (El _ (Def d args)) = do-          npars <- do-            def <- theDef <$> getConstInfo d-            return $ case def of Datatype{dataPars = n} -> n-                                 Record{recPars = n}    -> n-                                 _                      -> __IMPOSSIBLE__-          a <- defType <$> getConstInfo c-          return $ piApply a (genericTake npars args)-        conType _ _ = __IMPOSSIBLE__+        conType c (El _ v) = case ignoreSharing v of+          Def d args -> do+            npars <- do+              def <- theDef <$> getConstInfo d+              return $ case def of Datatype{dataPars = n} -> n+                                   Record{recPars = n}    -> n+                                   _                      -> __IMPOSSIBLE__+            a <- defType <$> getConstInfo c+            return $ piApply a (genericTake npars args)+          _ -> __IMPOSSIBLE__ -	equalFun t1@(Pi arg1@(Arg h1 r1 a1) _) t2@(Pi (Arg h2 r2 a2) _)-	    | h1 /= h2	= typeError $ UnequalHiding ty1 ty2+        equalFun t1 t2 = case (ignoreSharing t1, ignoreSharing t2) of+	  (Pi dom1@(Dom h1 r1 a1) b1, Pi (Dom h2 r2 a2) b2)+	    | h1 /= h2	-> typeError $ UnequalHiding t1 t2             -- Andreas 2010-09-21 compare r1 and r2, but ignore forcing annotations!-	    | ignoreForced r1 /= ignoreForced r2 = typeError $ UnequalRelevance ty1 ty2-	    | otherwise = verboseBracket "tc.conv.fun" 15 "compare function types" $ do+	    | not (compareRelevance cmp (ignoreForced r2) (ignoreForced r1)) -> typeError $ UnequalRelevance cmp t1 t2+	    | otherwise -> verboseBracket "tc.conv.fun" 15 "compare function types" $ do                 reportSDoc "tc.conv.fun" 20 $ nest 2 $ vcat                   [ text "t1 =" <+> prettyTCM t1                   , text "t2 =" <+> prettyTCM t2 ]-                let (ty1',ty2') = raise 1 (ty1,ty2)-                    arg	    = Arg h1 r1 (Var 0 [])-                name <- freshName_ (suggest t1 t2)-                let checkArg = escapeContext 1 $ compareType cmp a2 a1-                    c        = TypeCmp cmp (piApply ty1' [arg]) (piApply ty2' [arg])-+                let checkDom = escapeContext 1 $ compareType cmp a2 a1+                    conCoDom = TypeCmp cmp (absBody b1) (absBody b2)                 -- We only need to require a1 == a2 if t2 is a dependent function type.                 -- If it's non-dependent it doesn't matter what we add to the context.-                let dependent = case t2 of-                                    Pi _ b  -> isBinderUsed b-                                    _       -> __IMPOSSIBLE__-                addCtx name arg1 $-                  if dependent-                  then guardConstraint c checkArg-                  else checkArg >> solveConstraint_ c+                name <- freshName_ (suggest b1 b2)+                addCtx name dom1 $+                  if isBinderUsed b2 -- dependent function type?+                  then guardConstraint conCoDom checkDom+                  else checkDom >> solveConstraint_ conCoDom 	    where-		ty1 = El (getSort a1) t1    -- TODO: wrong (but it doesn't matter)-		ty2 = El (getSort a2) t2-		suggest t1 t2 = case concatMap name [t1,t2] of-				    []	-> "_"-				    x:_	-> x-		    where-			name (Pi _ b) = filter (/= "_") [absName b]-			name _        = __IMPOSSIBLE__-	equalFun _ _ = __IMPOSSIBLE__+		suggest b1 b2 = head $+                  [ x | x <- map absName [b1,b2], x /= "_"] ++ ["_"]+	  _ -> __IMPOSSIBLE__ +compareRelevance :: Comparison -> Relevance -> Relevance -> Bool+compareRelevance CmpEq  = (==)+compareRelevance CmpLeq = (<=)+ -- | Type-directed equality on eliminator spines compareElims :: [Polarity] -> Type -> Term -> [Elim] -> [Elim] -> TCM () compareElims _ _ _ [] [] = return ()@@ -380,29 +469,31 @@   reportSDoc "tc.conv.elim" 25 $ nest 2 $ vcat     [ text "a    =" <+> prettyTCM a     , text "v    =" <+> prettyTCM v-    , text "els1 =" <+> prettyTCM els01-    , text "els2 =" <+> prettyTCM els02+    , text "arg1 =" <+> prettyTCM arg1+    , text "arg2 =" <+> prettyTCM arg2     ]+  reportSDoc "tc.conv.elim" 50 $ nest 2 $ vcat+    [ text "v    =" <+> text (show v)+    , text "arg1 =" <+> text (show arg1)+    , text "arg2 =" <+> text (show arg2)+    ]   let (pol, pols) = nextPolarity pols0   ab <- reduceB a   let a = ignoreBlocking ab   catchConstraint (ElimCmp pols0 a v els01 els02) $ do-  case unEl <$> ab of+  case ignoreSharing . unEl <$> ab of     Blocked{}                     -> patternViolation     NotBlocked MetaV{}            -> patternViolation-    NotBlocked (Pi (Arg _ r b) _) -> do-      let cmp x y = case pol of-                      Invariant     -> compareTerm CmpEq  b x y-                      Covariant     -> compareTerm CmpLeq b x y-                      Contravariant -> compareTerm CmpLeq b y x+    NotBlocked (Pi (Dom _ r b) _) -> do       mlvl <- mlevel-      let checkArg = case r of+      let checkArg = applyRelevanceToContext r $ case r of             Forced     -> return ()-            Irrelevant -> return () -- Andreas: ignore irr. func. args.-            _          -> applyRelevanceToContext r $-                            cmp (unArg arg1) (unArg arg2)-          dependent = case unEl a of-            Pi (Arg _ _ (El _ lvl')) c -> 0 `freeInIgnoringSorts` absBody c+            r | irrelevantOrUnused r ->+                          compareIrrelevant b (unArg arg1) (unArg arg2)+            _          -> compareWithPol pol (flip compareTerm b)+                            (unArg arg1) (unArg arg2)+          dependent = case ignoreSharing $ unEl a of+            Pi (Dom _ _ (El _ lvl')) c -> 0 `freeInIgnoringSorts` absBody c                                           && Just lvl' /= mlvl             _ -> False @@ -417,26 +508,74 @@   | f /= f'   = typeError . GenericError . show =<< prettyTCM f <+> text "/=" <+> prettyTCM f'   | otherwise = do     a <- reduce a-    case unEl a of+    case ignoreSharing $ unEl a of       Def r us -> do         let (pol, _) = nextPolarity pols-        ft <- defType <$> getConstInfo f+        ft <- defType <$> getConstInfo f  -- get type of projection function         let arg = Arg NotHidden Relevant v  -- TODO: not necessarily relevant?         let c = piApply ft (us ++ [arg])         (cmp, els1, els2) <- return $ case pol of               Invariant     -> (CmpEq, els1, els2)               Covariant     -> (CmpLeq, els1, els2)-              Contravariant -> (CmpLeq, els2, els2)+              Contravariant -> (CmpLeq, els2, els1)+              Nonvariant    -> __IMPOSSIBLE__ -- the polarity should be Invariant         pols' <- getPolarity' cmp f         compareElims pols' c (Def f [arg]) els1 els2       _ -> __IMPOSSIBLE__ +-- | "Compare" two terms in irrelevant position.  This always succeeds.+--   However, we can dig for solutions of irrelevant metas in the+--   terms we compare.+--   (Certainly not the systematic solution, that'd be proof search...)+compareIrrelevant :: Type -> Term -> Term -> TCM ()+{- 2012-04-02 DontCare no longer present+compareIrrelevant a (DontCare v) w = compareIrrelevant a v w+compareIrrelevant a v (DontCare w) = compareIrrelevant a v w+-}+compareIrrelevant a v w = do+  reportSDoc "tc.conv.irr" 20 $ vcat+    [ text "compareIrrelevant"+    , nest 2 $ text "v =" <+> prettyTCM v+    , nest 2 $ text "w =" <+> prettyTCM w+    ]+  reportSDoc "tc.conv.irr" 50 $ vcat+    [ nest 2 $ text $ "v = " ++ show v+    , nest 2 $ text $ "w = " ++ show w+    ]+  try v w $ try w v $ return ()+  where+    try (Shared p) w fallback = try (derefPtr p) w fallback+    try (MetaV x vs) w fallback = do+      mv <- lookupMeta x+      let rel  = getMetaRelevance mv+          inst = case mvInstantiation mv of+                   InstV{} -> True+                   InstS{} -> True+                   _       -> False+      reportSDoc "tc.conv.irr" 20 $ vcat+        [ nest 2 $ text $ "rel  = " ++ show rel+        , nest 2 $ text $ "inst = " ++ show inst+        ]+      if not (irrelevantOrUnused rel) || inst then fallback else assignV x vs w+        -- the value of irrelevant or unused meta does not matter+    try v w fallback = fallback++compareWithPol :: Polarity -> (Comparison -> a -> a -> TCM ()) -> a -> a -> TCM ()+compareWithPol Invariant     cmp x y = cmp CmpEq x y+compareWithPol Covariant     cmp x y = cmp CmpLeq x y+compareWithPol Contravariant cmp x y = cmp CmpLeq y x+compareWithPol Nonvariant    cmp x y = return ()+ -- | Type-directed equality on argument lists -- compareArgs :: [Polarity] -> Type -> Term -> Args -> Args -> TCM () compareArgs pol a v args1 args2 =   compareElims pol a v (map Apply args1) (map Apply args2) +---------------------------------------------------------------------------+-- * Types+---------------------------------------------------------------------------+ -- | Equality on Types compareType :: Comparison -> Type -> Type -> TCM () compareType cmp ty1@(El s1 a1) ty2@(El s2 a2) =@@ -449,35 +588,71 @@           ] -- Andreas, 2011-4-27 should not compare sorts, but currently this is needed -- for solving sort and level metas---        let cs1 = []-	compareSort CmpEq s1 s2 `catchError` \err -> case errError err of-                  TypeError _ _ -> do-                    reportSDoc "tc.conv.type" 30 $ vcat-                      [ text "sort comparison failed"-                      , nest 2 $ vcat-                        [ text "s1 =" <+> prettyTCM s1-                        , text "s2 =" <+> prettyTCM s2-                        ]-                      ]-                    -- This error will probably be more informative-                    compareTerm cmp (sort s1) a1 a2-                    -- Throw the original error if the above doesn't-                    -- give an error (for instance, due to pending-                    -- constraints).-                    -- Or just ignore it... We run into this with irrelevant levels-                    -- which may show up in sort constraints, causing them to fail.-                    -- In any case it's not safe to ignore the error, for instance-                    -- a1 might be Set and a2 a meta of type Set, in which case we-                    -- really need the sort comparison to fail, instead of silently-                    -- instantiating the meta.-                    throwError err-                  _             -> throwError err+	compareSort CmpEq s1 s2 `catchError` \err -> case err of+          TypeError _ e -> do+            reportSDoc "tc.conv.type" 30 $ vcat+              [ text "sort comparison failed"+              , nest 2 $ vcat+                [ text "s1 =" <+> prettyTCM s1+                , text "s2 =" <+> prettyTCM s2+                ]+              ]+            case clValue e of+              -- Issue 659: Better error message+              SetOmegaNotValidType -> typeError $ UnequalBecauseOfUniverseConflict cmp a1 a2+              _ -> do+                -- This error will probably be more informative+                compareTerm cmp (sort s1) a1 a2+                -- Throw the original error if the above doesn't+                -- give an error (for instance, due to pending+                -- constraints).+                -- Or just ignore it... We run into this with irrelevant levels+                -- which may show up in sort constraints, causing them to fail.+                -- In any case it's not safe to ignore the error, for instance+                -- a1 might be Set and a2 a meta of type Set, in which case we+                -- really need the sort comparison to fail, instead of silently+                -- instantiating the meta.+                throwError err+          _             -> throwError err 	compareTerm cmp (sort s1) a1 a2 	return ()  leqType :: Type -> Type -> TCM () leqType = compareType CmpLeq +-- | @coerce v a b@ coerces @v : a@ to type @b@, returning a @v' : b@+--   with maybe extra hidden applications or hidden abstractions.+--+--   In principle, this function can host coercive subtyping, but+--   currently it only tries to fix problems with hidden function types.+coerce :: Term -> Type -> Type -> TCM Term+coerce v t1 t2 = blockTerm t2 $ do+  verboseS "tc.conv.coerce" 10 $ do+    (a1,a2) <- reify (t1,t2)+    let dbglvl = if isSet a1 && isSet a2 then 50 else 10+    reportSDoc "tc.conv.coerce" dbglvl $+      text "coerce" <+> vcat+        [ text "term      v  =" <+> prettyTCM v+        , text "from type t1 =" <+> prettyTCM a1+        , text "to type   t2 =" <+> prettyTCM a2+        ]+  -- v <$ do workOnTypes $ leqType t1 t2+  -- take off hidden/instance domains from t1 and t2+  TelV tel1 b1 <- telViewUpTo' (-1) ((NotHidden /=) . domHiding) t1+  TelV tel2 b2 <- telViewUpTo' (-1) ((NotHidden /=) . domHiding) t2+  let n = size tel1 - size tel2+  -- the crude solution would be+  --   v' = λ {tel2} → v {tel1}+  -- however, that may introduce unneccessary many function types+  -- If n  > 0 and b2 is not blocked, it is safe to+  -- insert n many hidden args+  if n <= 0 then fallback else do+    ifBlockedType b2 (\ _ _ -> fallback) $ \ _ -> do+      (args, t1') <- implicitArgs n (NotHidden /=) t1+      v `apply` args <$ do workOnTypes $ leqType t1' t2+  where+    fallback = v <$ do workOnTypes $ leqType t1 t2+ --------------------------------------------------------------------------- -- * Sorts ---------------------------------------------------------------------------@@ -497,7 +672,7 @@               , nest 2 $ fsep [ prettyTCM s1 <+> text "=<"                               , prettyTCM s2 ]               ]-	case (s1,s2) of+	case (s1, s2) of              (Type a, Type b) -> leqLevel a b @@ -558,6 +733,9 @@                         [n] -> Just n                         _   -> Nothing +        -- Andreas, 2012-10-02 raise error on unsolvable constraint+        ([ClosedLevel n], [ClosedLevel m]) -> if n <= m then ok else notok+         -- closed ≤ bs         ([ClosedLevel n], bs)           | n <= maximum (map constant bs) -> ok@@ -589,7 +767,7 @@         postpone = patternViolation          wrap m = catchError m $ \e ->-          case errError e of+          case e of             TypeError{} -> notok             _           -> throwError e @@ -613,7 +791,7 @@  --     choice []     = patternViolation --     choice (m:ms) = noConstraints m `catchError` \_ -> choice ms---       case errError e of+--       case e of --         PatternErr{} -> choice ms --         _            -> throwError e @@ -680,7 +858,10 @@         _ | any isMeta (as ++ bs) -> postpone          -- neutral/closed == neutral/closed-        _ | all isNeutralOrClosed (as ++ bs) -> as =!= bs+        _ | all isNeutralOrClosed (as ++ bs) ->+          if length as == length bs+            then zipWithM_ (\a b -> [a] =!= [b]) as bs+            else notok          -- more cases?         _ -> postpone@@ -704,7 +885,7 @@          -- Make sure to give a sensible error message         wrap m = m `catchError` \err ->-          case errError err of+          case err of             TypeError{} -> notok             _           -> throwError err @@ -750,7 +931,7 @@                                      , text (show s2) ]                      ]               ]-	case (s1,s2) of+	case (s1, s2) of              (Type a  , Type b  ) -> equalLevel a b @@ -778,5 +959,6 @@         isInf notok ClosedLevel{} = notok         isInf notok (Plus _ l) = case l of           MetaLevel x vs          -> assignV x vs (Sort Inf)+          NeutralLevel (Shared p) -> isInf notok (Plus 0 $ NeutralLevel $ derefPtr p)           NeutralLevel (Sort Inf) -> return ()           _                       -> notok
src/full/Agda/TypeChecking/Coverage.hs view
@@ -1,4 +1,4 @@-{-# LANGUAGE CPP, FlexibleContexts #-}+{-# LANGUAGE CPP, PatternGuards, FlexibleContexts, TupleSections #-}  module Agda.TypeChecking.Coverage where @@ -15,6 +15,7 @@ import Agda.Syntax.Internal.Pattern  import Agda.TypeChecking.Monad.Base+import Agda.TypeChecking.Monad.Closure import Agda.TypeChecking.Monad.Trace import Agda.TypeChecking.Monad.Signature import Agda.TypeChecking.Monad.Options@@ -27,6 +28,7 @@ import qualified Agda.TypeChecking.Rules.LHS.Split as Split  import Agda.TypeChecking.Coverage.Match+import Agda.TypeChecking.Coverage.SplitTree  import Agda.TypeChecking.Pretty import Agda.TypeChecking.Substitute@@ -40,40 +42,66 @@ import Agda.Utils.Permutation import Agda.Utils.Size import Agda.Utils.Tuple+import Agda.Utils.List+import Agda.Utils.Maybe import Agda.Utils.Monad  #include "../undefined.h" import Agda.Utils.Impossible  data SplitClause = SClause-      { scTel   :: Telescope      -- ^ type of variables in scPats-      , scPerm  :: Permutation    -- ^ how to get from the variables in the patterns to the telescope-      , scPats  :: [Arg Pattern]-      , scSubst :: [Term]         -- ^ substitution from scTel to old context+      { scTel    :: Telescope      -- ^ Type of variables in @scPats@.+      , scPerm   :: Permutation    -- ^ How to get from the variables in the patterns to the telescope.+      , scPats   :: [Arg Pattern]  -- ^ The patterns leading to the currently considered branch of the split tree.+      , scSubst  :: Substitution   -- ^ Substitution from @scTel@ to old context.+      , scTarget :: Maybe Type     -- ^ The type of the rhs.       } -type Covering = [SplitClause]+-- | A @Covering@ is the result of splitting a 'SplitClause'.+data Covering = Covering+  { covSplitArg     :: Nat  -- ^ De Bruijn level of argument we split on.+  , covSplitClauses :: [(QName, SplitClause)]+      -- ^ Covering clauses, indexed by constructor these clauses share.+  } -data SplitError = NotADatatype Type         -- ^ neither data type nor record-                | IrrelevantDatatype Type   -- ^ data type, but in irrelevant position-                | CoinductiveDatatype Type  -- ^ coinductive data type+-- | Project the split clauses out of a covering.+splitClauses :: Covering -> [SplitClause]+splitClauses (Covering _ qcs) = map snd qcs++-- | Create a split clause from a clause in internal syntax.+clauseToSplitClause :: Clause -> SplitClause+clauseToSplitClause cl = SClause+  { scTel    = clauseTel  cl+  , scPerm   = clausePerm cl+  , scPats   = clausePats cl+  , scSubst  = __IMPOSSIBLE__+  , scTarget = Nothing+  }++data SplitError = NotADatatype (Closure Type) -- ^ neither data type nor record+                | IrrelevantDatatype (Closure Type)   -- ^ data type, but in irrelevant position+                | CoinductiveDatatype (Closure Type)  -- ^ coinductive data type+{- UNUSED                 | NoRecordConstructor Type  -- ^ record type, but no constructor+ -}                 | CantSplit QName Telescope Args Args [Term]                 | GenericSplitError String   deriving (Show)  instance PrettyTCM SplitError where   prettyTCM err = case err of-    NotADatatype t -> fsep $+    NotADatatype t -> enterClosure t $ \ t -> fsep $       pwords "Cannot pattern match on non-datatype" ++ [prettyTCM t]-    IrrelevantDatatype t -> fsep $+    IrrelevantDatatype t -> enterClosure t $ \ t -> fsep $       pwords "Cannot pattern match on datatype" ++ [prettyTCM t] ++       pwords "since it is declared irrelevant"-    CoinductiveDatatype t -> fsep $+    CoinductiveDatatype t -> enterClosure t $ \ t -> fsep $       pwords "Cannot pattern match on the coinductive type" ++ [prettyTCM t]+{- UNUSED     NoRecordConstructor t -> fsep $       pwords "Cannot pattern match on record" ++ [prettyTCM t] ++       pwords "because it has no constructor"+ -}     CantSplit c tel cIxs gIxs flex -> addCtxTel tel $ vcat       [ fsep $ pwords "Cannot decide whether there should be a case for the constructor" ++ [prettyTCM c <> text ","] ++                pwords "since the unification gets stuck on unifying the inferred indices"@@ -90,50 +118,84 @@  type CoverM = ExceptionT SplitError TCM -typeOfVar :: Telescope -> Nat -> Arg Type+{- UNUSED+typeOfVar :: Telescope -> Nat -> Dom Type typeOfVar tel n   | n >= len  = __IMPOSSIBLE__   | otherwise = fmap snd  -- throw away name, keep Arg Type-                  $ ts !! fromIntegral n+                  $ ts !! fromIntegral (len - 1 - n)   where     len = genericLength ts-    ts  = reverse $ telToList tel+    ts  = telToList tel+-} --- | Top-level function for checking pattern coverage.+-- | Old top-level function for checking pattern coverage.+--   DEPRECATED checkCoverage :: QName -> TCM () checkCoverage f = do   d <- getConstInfo f-  TelV gamma _ <- telView $ defType d-  let defn = theDef d-  case defn of-    Function{ funProjection = proj, funClauses = cs@(_:_) } -> do-      let n            = genericLength $ clausePats $ head cs-          np           = maybe 0 snd proj-          gamma'       = telFromList $ genericTake n $ genericDrop np $ telToList gamma-          xs           = map (fmap $ const $ VarP "_") $ telToList gamma'-      reportSDoc "tc.cover.top" 10 $ vcat-        [ text "Coverage checking"-        , nest 2 $ vcat $ map (text . show . clausePats) cs-        ]-      (used, pss) <- cover cs $ SClause gamma' (idP n) xs (idSub gamma')-      whenM (optCompletenessCheck <$> pragmaOptions) $-        case pss of-          []  -> return ()-          _   ->-            setCurrentRange (getRange cs) $-              typeError $ CoverageFailure f pss-      case Set.toList $ Set.difference (Set.fromList [0..genericLength cs - 1]) used of-        []  -> return ()-        is  -> do-          let unreached = map ((cs !!) . fromIntegral) is-          setCurrentRange (getRange unreached) $-            typeError $ UnreachableClauses f (map clausePats unreached)-    _             -> __IMPOSSIBLE__+  case theDef d of+    Function{ funProjection = Nothing, funClauses = cs@(_:_) } -> do+      coverageCheck f (defType d) cs+      return ()+    Function{ funProjection = Just _ } -> __IMPOSSIBLE__+    _ -> __IMPOSSIBLE__ --- | Check that the list of clauses covers the given split clause.---   Returns the missing cases.-cover :: [Clause] -> SplitClause -> TCM (Set Nat, [[Arg Pattern]])-cover cs (SClause tel perm ps _) = do+-- | Top-level function for checking pattern coverage.+coverageCheck :: QName -> Type -> [Clause] -> TCM SplitTree+coverageCheck f t cs = do+  TelV gamma a <- telView t+  let -- n             = arity+      -- lgamma/gamma' = telescope of non-dropped arguments+      -- xs            = variable patterns fitting lgamma+      n            = size gamma+      lgamma       = telToList gamma+      xs           = map (argFromDom . fmap (const $ VarP "_")) $ lgamma+      -- construct the initial split clause+      sc           = SClause gamma (idP n) xs idS $ Just a+{- OLD+  let -- n             = arity+      -- lgamma/gamma' = telescope of non-dropped arguments+      -- xs            = variable patterns fitting lgamma+      n            = genericLength $ clausePats $ head cs+      (lgamma, rgamma) = genericSplitAt n $ telToList gamma+      gamma'       = telFromList lgamma+      xs           = map (argFromDom . fmap (const $ VarP "_")) $ lgamma+      -- construct the initial split clause+      b            = telePi (telFromList rgamma) a+      sc           = SClause gamma' (idP n) xs idS $ Just b+-}+  reportSDoc "tc.cover.top" 10 $ vcat+    [ text "Coverage checking"+    , nest 2 $ vcat $ map (text . show . clausePats) cs+    ]+  -- used = actually used clauses for cover+  -- pss  = uncovered cases+  (splitTree, used, pss) <- cover cs sc+  reportSDoc "tc.cover.splittree" 10 $ vcat+    [ text "generated split tree for" <+> prettyTCM f+    , text $ show splitTree+    ]+  whenM (optCompletenessCheck <$> pragmaOptions) $+    -- report an error if there are uncovered cases+    unless (null pss) $+        setCurrentRange (getRange cs) $+          typeError $ CoverageFailure f pss+  -- is = indices of unreachable clauses+  let is = Set.toList $ Set.difference (Set.fromList [0..genericLength cs - 1]) used+  -- report an error if there are unreachable clauses+  unless (null is) $ do+      let unreached = map (cs !!) is+      setCurrentRange (getRange unreached) $+        typeError $ UnreachableClauses f (map clausePats unreached)+  return splitTree+++-- | @cover cs (SClause _ _ ps _) = return (splitTree, used, pss)@.+--   checks that the list of clauses @cs@ covers the given split clause.+--   Returns the @splitTree@, the @used@ clauses, and missing cases @pss@.+cover :: [Clause] -> SplitClause -> TCM (SplitTree, Set Nat, [[Arg Pattern]])+cover cs sc@(SClause tel perm ps _ target) = do   reportSDoc "tc.cover.cover" 10 $ vcat     [ text "checking coverage of pattern:"     , nest 2 $ text "tel  =" <+> prettyTCM tel@@ -144,67 +206,122 @@     Yes i          -> do       reportSLn "tc.cover.cover" 10 $ "pattern covered by clause " ++ show i       -- Check if any earlier clauses could match with appropriate literals-      let is = [ j | (j, c) <- zip [0..] (genericTake i cs), matchLits c ps perm ]+      let is = [ j | (j, c) <- zip [0..i-1] cs, matchLits c ps perm ]+      -- OLD: let is = [ j | (j, c) <- zip [0..] (genericTake i cs), matchLits c ps perm ]       reportSLn "tc.cover.cover"  10 $ "literal matches: " ++ show is-      return (Set.fromList (i : is), [])-    No      -> return (Set.empty, [ps])-    Block x -> do-      r <- split Inductive tel perm ps x+      return (SplittingDone (size tel), Set.fromList (i : is), [])+    No       -> return (SplittingDone (size tel), Set.empty, [ps])+    Block bs -> do+      reportSLn "tc.cover.strategy" 20 $ "blocking vars = " ++ show bs+      -- xs is a non-empty lists of blocking variables+      -- try splitting on one of them+      xs <- splitStrategy bs tel+      r <- altM1 (split Inductive sc) xs       case r of         Left err  -> case err of           CantSplit c tel us vs _ -> typeError $ CoverageCantSplitOn c tel us vs-          NotADatatype a          -> typeError $ CoverageCantSplitType a-          IrrelevantDatatype a    -> typeError $ CoverageCantSplitIrrelevantType a-          CoinductiveDatatype a   -> typeError $ CoverageCantSplitType a+          NotADatatype a          -> enterClosure a $ typeError . CoverageCantSplitType+          IrrelevantDatatype a    -> enterClosure a $ typeError . CoverageCantSplitIrrelevantType+          CoinductiveDatatype a   -> enterClosure a $ typeError . CoverageCantSplitType+{- UNUSED           NoRecordConstructor a   -> typeError $ CoverageCantSplitType a+ -}           GenericSplitError s     -> fail $ "failed to split: " ++ s-        Right scs -> (Set.unions -*- concat) . unzip <$> mapM (cover cs) scs+        -- If we get the empty covering, we have reached an impossible case+        -- and are done.+        Right (Covering n []) ->+          return (SplittingDone (size tel), Set.empty, [])+        Right (Covering n scs) -> do+          (trees, useds, psss) <- unzip3 <$> mapM (cover cs) (map snd scs)+          let tree = SplitAt n $ zipWith (\ (q,_) t -> (q,t)) scs trees+          return (tree, Set.unions useds, concat psss) +splitStrategy :: BlockingVars -> Telescope -> TCM BlockingVars+splitStrategy bs tel = return $ updateLast (mapSnd (const Nothing)) xs+  -- Make sure we do not insists on precomputed coverage when+  -- we make our last try to split.+  -- Otherwise, we will not get a nice error message.+  where+    xs       = bs+{-+--  Andreas, 2012-10-13+--  The following split strategy which prefers all-constructor columns+--  fails on test/fail/CoverStrategy+    xs       = ys ++ zs+    (ys, zs) = partition allConstructors bs+    allConstructors :: BlockingVar -> Bool+    allConstructors = isJust . snd+-}+ -- | Check that a type is a non-irrelevant datatype or a record with -- named constructor. Unless the 'Induction' argument is 'CoInductive' -- the data type must be inductive. isDatatype :: (MonadTCM tcm, MonadException SplitError tcm) =>-              Induction -> Arg Type ->+              Induction -> Dom Type ->               tcm (QName, [Arg Term], [Arg Term], [QName]) isDatatype ind at = do-  let t = unArg at+  let t       = unDom at+      throw f = throwException . f =<< do liftTCM $ buildClosure t   t' <- liftTCM $ reduce t-  case unEl t' of+  case ignoreSharing $ unEl t' of     Def d args -> do       def <- liftTCM $ theDef <$> getConstInfo d       splitOnIrrelevantDataAllowed <- liftTCM $ optExperimentalIrrelevance <$> pragmaOptions       case def of         Datatype{dataPars = np, dataCons = cs, dataInduction = i}           | i == CoInductive && ind /= CoInductive ->-              throwException $ CoinductiveDatatype t-          -- Andreas, 2011-10-03 allow some splitting on data (if only one constr. matches)-          | argRelevance at == Irrelevant && not splitOnIrrelevantDataAllowed ->-              throwException $ IrrelevantDatatype t+              throw CoinductiveDatatype+          -- Andreas, 2011-10-03 allow some splitting on irrelevant data (if only one constr. matches)+          | domRelevance at == Irrelevant && not splitOnIrrelevantDataAllowed ->+              throw IrrelevantDatatype           | otherwise -> do               let (ps, is) = genericSplitAt np args               return (d, ps, is, cs)-        Record{recPars = np, recCon = c, recNamedCon = hasCon} ->-          if hasCon then return (d, args, [], [c])-           else throwException $ NoRecordConstructor t-        _ -> throwException $ NotADatatype t-    _ -> throwException $ NotADatatype t+        Record{recPars = np, recCon = c} ->+          return (d, args, [], [c])+        _ -> throw NotADatatype+    _ -> throw NotADatatype --- | @dtype == d pars ixs@-computeNeighbourhood :: Telescope -> Telescope -> Permutation -> QName -> Args -> Args -> Nat -> OneHolePatterns -> QName -> CoverM [SplitClause]-computeNeighbourhood delta1 delta2 perm d pars ixs hix hps con = do+-- | @computeNeighbourhood delta1 delta2 perm d pars ixs hix hps con@+--+--   @+--      delta1   Telescope before split point+--      n        Name of pattern variable at split point+--      delta2   Telescope after split point+--      d        Name of datatype to split at+--      pars     Data type parameters+--      ixs      Data type indices+--      hix      Index of split variable+--      hps      Patterns with hole at split point+--      con      Constructor to fit into hole+--   @+--   @dtype == d pars ixs@+computeNeighbourhood :: Telescope -> String -> Telescope -> Permutation -> QName -> Args -> Args -> Nat -> OneHolePatterns -> QName -> CoverM [SplitClause]+computeNeighbourhood delta1 n delta2 perm d pars ixs hix hps con = do    -- Get the type of the datatype   dtype <- liftTCM $ (`piApply` pars) . defType <$> getConstInfo d    -- Get the real constructor name-  Con con [] <- liftTCM $ constructorForm =<< normalise (Con con [])+  Con con [] <- liftTCM $ ignoreSharing <$> (constructorForm =<< normalise (Con con []))    -- Get the type of the constructor   ctype <- liftTCM $ defType <$> getConstInfo con    -- Lookup the type of the constructor at the given parameters-  TelV gamma (El _ (Def _ cixs)) <- liftTCM $ telView (ctype `piApply` pars)+  (gamma0, cixs) <- do+    TelV gamma0 (El _ d) <- liftTCM $ telView (ctype `piApply` pars)+    let Def _ cixs = ignoreSharing d+    return (gamma0, cixs) +  -- Andreas, 2012-02-25 preserve name suggestion for recursive arguments+  -- of constructor++  let preserve (x, t@(El _ (Def d' _))) | d == d' = (n, t)+      preserve (x, (El s (Shared p))) = preserve (x, El s $ derefPtr p)+      preserve p = p+      gamma = telFromList . map (fmap preserve) . telToList $ gamma0+   debugInit con ctype pars ixs cixs delta1 delta2 gamma hps hix    -- All variables are flexible@@ -224,7 +341,7 @@     DontKnow _    -> do       debugCantSplit       throwException $ CantSplit con (delta1 `abstract` gamma) conIxs givenIxs-                                 [ Var i [] | i <- flex ]+                                 [ var i | i <- flex ]     Unifies sub   -> do       debugSubst "sub" sub @@ -233,16 +350,17 @@           delta2' = subst conv $ raiseFrom 1 (size gamma) delta2       debugTel "delta2'" delta2' -      -- Compute a substitution ρ : Δ₁ΓΔ₂' → Δ₁(x:D)Δ₂-      let rho = [ Var i [] | i <- [0..size delta2' - 1] ]-             ++ [ raise (size delta2') conv ]-             ++ [ Var i [] | i <- [size delta2' + size gamma ..] ]+      -- Compute a substitution ρ : Δ₁ΓΔ₂' → Δ₁(x:D)Δ₂'+      let rho = liftS (size delta2') $ conv :# raiseS (size gamma)+             --    [ Var i [] | i <- [0..size delta2' - 1] ]+             -- ++ [ raise (size delta2') conv ]+             -- ++ [ Var i [] | i <- [size delta2' + size gamma ..] ]        -- Plug the hole with the constructor and apply ρ       -- TODO: Is it really correct to use Nothing here?       let conp = ConP con Nothing $ map (fmap VarP) $ teleArgNames gamma           ps   = plugHole conp hps-          ps'  = substs rho ps      -- Δ₁ΓΔ₂' ⊢ ps'+          ps'  = applySubst rho ps      -- Δ₁ΓΔ₂' ⊢ ps'       debugPlugged ps ps'        -- Δ₁Γ ⊢ sub, we need something in Δ₁ΓΔ₂'@@ -271,14 +389,14 @@        -- Compute the final patterns       let ps'' = instantiatePattern sub' perm' ps'-          rps  = substs rho' ps''+          rps  = applySubst rho' ps''        -- Compute the final substitution-      let rsub  = substs rho' rho+      let rsub  = applySubst rho' rho        debugFinal theta' rperm rps -      return [SClause theta' rperm rps rsub]+      return [SClause theta' rperm rps rsub Nothing] -- target fixed later    where     debugInit con ctype pars ixs cixs delta1 delta2 gamma hps hix =@@ -332,43 +450,62 @@         , text "rps    =" <+> text (show ps)         ] --- | split Δ x ps. Δ ⊢ ps, x ∈ Δ (deBruijn index)-splitClause :: Clause -> Nat -> TCM (Either SplitError Covering)-splitClause c x =-  split Inductive (clauseTel c) (clausePerm c) (clausePats c) x-+-- | Entry point from @Interaction.MakeCase@.+--   @Abs@ is for absurd clause. splitClauseWithAbs :: Clause -> Nat -> TCM (Either SplitError (Either SplitClause Covering))-splitClauseWithAbs c x =-  split' Inductive (clauseTel c) (clausePerm c) (clausePats c) x+splitClauseWithAbs c x = split' Inductive (clauseToSplitClause c) (x, Nothing) +-- | Entry point from @TypeChecking.Empty@ and @Interaction.BasicOps@.+splitLast :: Induction -> Telescope -> [Arg Pattern] -> TCM (Either SplitError Covering)+splitLast ind tel ps = split ind sc (0, Nothing)+  where sc = SClause tel (idP $ size tel) ps __IMPOSSIBLE__ Nothing++-- | @split _ Δ π ps x@. FIXME: Δ ⊢ ps, x ∈ Δ (deBruijn index) split :: Induction          -- ^ Coinductive constructors are allowed if this argument is          -- 'CoInductive'.-      -> Telescope -> Permutation -> [Arg Pattern] -> Nat+      -> SplitClause+      -> BlockingVar       -> TCM (Either SplitError Covering)-split ind tel perm ps x = do-  r <- split' ind tel perm ps x+split ind sc x = fmap (blendInAbsurdClause (splitDbIndexToLevel sc x)) <$>+   split' ind sc x+{- OLD+split ind sc@SClause{ scTel = tel, scPerm = perm, scPats = ps } x =+  r <- split' ind sc x   return $ case r of     Left err        -> Left err-    Right (Left _)  -> Right []+    Right (Left _)  -> Right $ Covering (dbIndexToLevel tel perm $ fst x) []     Right (Right c) -> Right c+-} +blendInAbsurdClause :: Nat -> Either SplitClause Covering -> Covering+blendInAbsurdClause n = either (const $ Covering n []) id++splitDbIndexToLevel :: SplitClause -> BlockingVar -> Nat+splitDbIndexToLevel sc@SClause{ scTel = tel, scPerm = perm } x =+  dbIndexToLevel tel perm $ fst x++-- | Convert a de Bruijn index relative to a telescope to a de Buijn level.+--   The result should be the argument (counted from left, starting with 0)+--   to split at (dot patterns included!).+dbIndexToLevel tel perm x = if n < 0 then __IMPOSSIBLE__ else n+  where n = permute perm [0..] !! (size tel - x - 1)+ split' :: Induction           -- ^ Coinductive constructors are allowed if this argument is           -- 'CoInductive'.-       -> Telescope -> Permutation -> [Arg Pattern] -> Nat+       -> SplitClause+       -> BlockingVar        -> TCM (Either SplitError (Either SplitClause Covering))-split' ind tel perm ps x = liftTCM $ runExceptionT $ do+split' ind sc@(SClause tel perm ps _ target) (x, mcons) = liftTCM $ runExceptionT $ do    debugInit tel perm x ps    -- Split the telescope at the variable-  (delta1, delta2) <- do-    let (tel1, _ : tel2) = genericSplitAt (size tel - x - 1) $ telToList tel-    return (telFromList tel1, telFromList tel2)--  -- Get the type of the variable-  let t = typeOfVar tel x  -- Δ₁ ⊢ t+  -- t = type of the variable,  Δ₁ ⊢ t+  (n, t, delta1, delta2) <- do+    let (tel1, Dom h r (n, t) : tel2) = genericSplitAt (size tel - x - 1) $ telToList tel+    return (n, Dom h r t, telFromList tel1, telFromList tel2)    -- Compute the one hole context of the patterns at the variable   (hps, hix) <- do@@ -377,20 +514,25 @@       fail "split: bad holes or tel"      -- There is always a variable at the given hole.-    let (hix, (VarP s, hps)) = holes !! fromIntegral x+    let (hix, (VarP s, hps)) = holes !! x     debugHoleAndType delta1 delta2 s hps t      return (hps, hix)    -- Check that t is a datatype or a record   -- Andreas, 2010-09-21, isDatatype now directly throws an exception if it fails+  -- cons = constructors of this datatype   (d, pars, ixs, cons) <- inContextOfT $ isDatatype ind t    liftTCM $ whenM (optWithoutK <$> pragmaOptions) $-    inContextOfT $ Split.wellFormedIndices pars ixs+    inContextOfT $ Split.wellFormedIndices (unDom t)    -- Compute the neighbourhoods for the constructors-  ns <- concat <$> mapM (computeNeighbourhood delta1 delta2 perm d pars ixs hix hps) cons+  ns <- concat <$> do+    forM cons $ \ con ->+      map (con,) <$> do+        mapM fixTarget =<<+          computeNeighbourhood delta1 n delta2 perm d pars ixs hix hps con   case ns of     []  -> do       let absurd = VarP "()"@@ -400,26 +542,62 @@                                         telToList delta2                , scPerm = perm                , scPats = plugHole absurd hps-               , scSubst = [] -- not used anyway+               , scSubst = idS -- not used anyway+               , scTarget = Nothing -- not used                }      -- Andreas, 2011-10-03     -- if more than one constructor matches, we cannot be irrelevant     -- (this piece of code is unreachable if --experimental-irrelevance is off)-    (_ : _ : _) | unusableRelevance (argRelevance t) ->-      throwException $ IrrelevantDatatype (unArg t)+    (_ : _ : _) | unusableRelevance (domRelevance t) ->+      throwException . IrrelevantDatatype =<< do liftTCM $ buildClosure (unDom t) -    _   -> return $ Right ns+  -- Andreas, 2012-10-10 fail if precomputed constructor set does not cover+  -- all the data type constructors +    _ | Just pcons <- mcons,+        let cons = (map fst ns),+        let diff = Set.fromList cons Set.\\ Set.fromList pcons,+        not (Set.null diff) -> do+          liftTCM $ reportSDoc "tc.cover.precomputed" 10 $ vcat+            [ hsep $ text "pcons =" : map prettyTCM pcons+            , hsep $ text "cons  =" : map prettyTCM cons+            ]+          throwException (GenericSplitError "precomputed set of constructors does not cover all cases")++    _  -> return $ Right $ Covering xDBLevel ns+   where+    xDBLevel = dbIndexToLevel tel perm x +    -- update the target type, add more patterns to split clause+    -- if target becomes a function type.+    fixTarget :: SplitClause -> CoverM SplitClause+    fixTarget sc@SClause{ scSubst = sigma } =+      flip (maybe $ return sc) target $ \ a -> do+        TelV tel b <- lift $ telView $ applySubst sigma a+        let n      = size tel+            lgamma = telToList tel+            xs     = map (argFromDom . fmap (const $ VarP "_")) $ lgamma+        if (n == 0) then return sc { scTarget = Just b }+         else return $ SClause+          { scTel    = telFromList $ telToList (scTel sc) ++ lgamma+          , scPerm   = liftP n $ scPerm sc+          , scPats   = scPats sc ++ xs+          , scSubst  = liftS n $ sigma+          , scTarget = Just b+          }+     inContextOfT :: MonadTCM tcm => tcm a -> tcm a-    inContextOfT = escapeContext (fromIntegral x + 1)+    inContextOfT = addCtxTel tel . escapeContext (x + 1) +    inContextOfDelta2 :: MonadTCM tcm => tcm a -> tcm a+    inContextOfDelta2 = addCtxTel tel . escapeContext x+     -- Debug printing     debugInit tel perm x ps =       liftTCM $ reportSDoc "tc.cover.top" 10 $ vcat-        [ text "TypeChecking.Rules.LHS.Coverage.split': split"+        [ text "TypeChecking.Coverage.split': split"         , nest 2 $ vcat           [ text "tel     =" <+> prettyTCM tel           , text "perm    =" <+> text (show perm)@@ -433,6 +611,6 @@         [ text "p      =" <+> text s         , text "hps    =" <+> text (show hps)         , text "delta1 =" <+> prettyTCM delta1-        , text "delta2 =" <+> prettyTCM delta2+        , text "delta2 =" <+> inContextOfDelta2 (prettyTCM delta2)         , text "t      =" <+> inContextOfT (prettyTCM t)         ]
src/full/Agda/TypeChecking/Coverage/Match.hs view
@@ -1,9 +1,12 @@-{-# LANGUAGE CPP, DeriveFunctor #-}+{-# LANGUAGE CPP, PatternGuards, DeriveFunctor #-}  module Agda.TypeChecking.Coverage.Match where  import Control.Applicative import Control.Monad.State++import Data.Map (Map)+import qualified Data.Map as Map import Data.Monoid import Data.Traversable (traverse) import Data.Function@@ -15,10 +18,50 @@  import Agda.Utils.Permutation import Agda.Utils.Size+import Agda.Utils.List  #include "../../undefined.h" import Agda.Utils.Impossible +{-| Given++    1. the function clauses @cs@+    2. the patterns @ps@ and permutation @perm@ of a split clause++we want to compute a variable index of the split clause to split on next.++First, we find the set @cs'@ of all the clauses that are+instances (via substitutions @rhos@) of the split clause.++In these substitutions, we look for a column that has only constructor patterns.+We try to split on this column first.+-}+{-+nonOverlappingCompleteMatches :: [Clause] -> [Arg Pattern] -> Permutation -> Match Nat+nonOverlappingCompleteMatches cs ps perm+-}++-- | Match the given patterns against a list of clauses+match :: [Clause] -> [Arg Pattern] -> Permutation -> Match Nat+match cs ps perm = foldr choice No $ zipWith matchIt [0..] cs+  where+    mps = buildMPatterns perm ps++    -- If liberal matching on literals fails or blocks we go with that.+    -- If it succeeds we use the result from conservative literal matching.+    -- This is to make sure that we split enough when literals are involved.+    -- For instance,+    --    f ('x' :: 'y' :: _) = ...+    --    f (c :: s) = ...+    -- would never split the tail of the list if we only used conservative+    -- literal matching.+    matchIt i c = matchClause yesMatchLit mps i c ++++                  matchClause noMatchLit  mps i c++    Yes _   +++ m = m+    No      +++ _ = No+    Block x +++ _ = Block x+ -- | We use a special representation of the patterns we're trying to match --   against a clause. In particular we want to keep track of which variables --   are blocking a match.@@ -27,7 +70,7 @@ buildMPatterns :: Permutation -> [Arg Pattern] -> [Arg MPat] buildMPatterns perm ps = evalState (mapM (traverse build) ps) xs   where-    xs   = permute (invertP perm) $ reverse [0 .. size perm - 1]+    xs   = permute (invertP perm) $ downFrom (size perm)  -- reverse [0 .. size perm - 1]     tick = do x : xs <- get; put xs; return x      build (VarP _)        = VarMP <$> tick@@ -39,23 +82,44 @@     buildT (Var i [])     = return (VarMP i)     buildT _              = return WildMP + -- | If matching is inconclusive (@Block@) we want to know which---   variable is blocking the match.-data Match a = Yes a | No | Block Nat+--   variables are blocking the match.+data Match a+  = Yes a                -- ^ Matches unconditionally.+  | No                   -- ^ Definitely does not match.+  | Block BlockingVars   -- ^ Could match if non-empty list of blocking variables+                         --   is instantiated properly.   deriving (Functor) -instance Monoid a => Monoid (Match a) where-  mempty                    = Yes mempty-  Yes a   `mappend` Yes b   = Yes $ mappend a b-  Yes _   `mappend` No      = No-  Yes _   `mappend` Block x = Block x-  No      `mappend` _       = No-  Block x `mappend` _       = Block x+-- | @Nothing@ means there is an overlapping match for this variable.+--   @Just cons@ means that it is an non-overlapping match and+--   @cons@ are the encountered constructors.+type BlockingVar  = (Nat, (Maybe [QName]))+type BlockingVars = [BlockingVar] +overlapping :: BlockingVars -> BlockingVars+overlapping = map $ \ (x, _) -> (x, Nothing)++-- | Left dominant merge of blocking vars.+zipBlockingVars :: BlockingVars -> BlockingVars -> BlockingVars+zipBlockingVars xs ys = map upd xs+  where+    upd (x, Just cons) | Just (Just cons') <- lookup x ys =+     (x, Just $ cons ++ cons')+    upd (x, _) = (x, Nothing)++-- | @choice m m'@ combines the match results @m@ of a function clause+--   with the (already combined) match results $m'$ of the later clauses.+--   It is for skipping clauses that definitely do not match ('No').+--   It is left-strict, to be used with @foldr@.+--   If one clause unconditionally matches ('Yes') we do not look further. choice :: Match a -> Match a -> Match a-choice (Yes a) _   = Yes a-choice (Block x) _ = Block x-choice No m        = m+choice (Yes a)   _         = Yes a+choice (Block x) (Block y) = Block (zipBlockingVars x y)+choice (Block x) (Yes _)   = Block $ overlapping x+choice (Block x) No        = Block x+choice No        m         = m  type MatchLit = Literal -> MPat -> Match () @@ -67,47 +131,79 @@ yesMatchLit _ WildMP{} = Yes () yesMatchLit _ _        = No --- | Match the given patterns against a list of clauses-match :: [Clause] -> [Arg Pattern] -> Permutation -> Match Nat-match cs ps perm = foldr choice No $ zipWith matchIt [0..] cs-  where-    mps = buildMPatterns perm ps--    -- If liberal matching on literals fails or blocks we go with that.-    -- If it succeeds we use the result from conservative literal matching.-    -- This is to make sure that we split enough when literals are involved.-    -- For instance,-    --    f ('x' :: 'y' :: _) = ...-    --    f (c :: s) = ...-    -- would never split the tail of the list if we only used conservative-    -- literal matching.-    matchIt i c = matchClause yesMatchLit mps i c +++-                  matchClause noMatchLit  mps i c--    Yes _   +++ m = m-    No      +++ _ = No-    Block x +++ _ = Block x- -- | Check if a clause could match given generously chosen literals matchLits :: Clause -> [Arg Pattern] -> Permutation -> Bool-matchLits c ps perm = case matchClause yesMatchLit (buildMPatterns perm ps) 0 c of-  Yes _ -> True-  _     -> False+matchLits c ps perm =+  case matchClause yesMatchLit (buildMPatterns perm ps) 0 c of+    Yes _ -> True+    _     -> False +-- | @matchClause mlist qs i c@ checks whther clause @c@ number @i@+--   covers a split clause with patterns @qs@. matchClause :: MatchLit -> [Arg MPat] -> Nat -> Clause -> Match Nat matchClause mlit qs i c = fmap (const i) $ matchPats mlit (clausePats c) qs +-- | @matchPats mlist ps qs@ checks whether a function clause with patterns+--   @ps@ covers a split clause with patterns @qs@ matchPats :: MatchLit -> [Arg Pattern] -> [Arg MPat] -> Match () matchPats mlit ps qs = mconcat $ zipWith (matchPat mlit) (map unArg ps) (map unArg qs) +-- | Combine results of checking whether function clause patterns+--   covers split clause patterns.+--+--   'No' is dominant: if one function clause pattern is disjoint to+--   the corresponding split clause pattern, then+--   the whole clauses are disjoint.+--+--   'Yes' is neutral: for a match, all patterns have to match.+--+--   'Block' accumulates variables of the split clause+--   that have to be instantiated+--   to make the split clause an instance of the function clause.+instance Monoid a => Monoid (Match a) where+  mempty                    = Yes mempty+  Yes a   `mappend` Yes b   = Yes $ mappend a b+  Yes _   `mappend` No      = No+  Yes _   `mappend` Block x = Block x+  No      `mappend` _       = No+  Block x `mappend` Yes b   = Block x+  Block x `mappend` No      = No+  Block x `mappend` Block y = Block $ mappend x y++-- | @matchPat mlit p q@ checks whether a function clause pattern @p@+--   covers a split clause pattern @q@.  There are three results:+--   @Yes ()@ means it covers, because @p@ is a variable+--   pattern or @q@ is a wildcard.+--   @No@ means it does not cover.+--   @Block [x]@ means @p@ is a proper instance of @q@ and could become+--   a cover if @q@ was split on variable @x@. matchPat :: MatchLit -> Pattern -> MPat -> Match () matchPat _    (VarP _) _ = Yes () matchPat _    (DotP _) _ = Yes () matchPat mlit (LitP l) q = mlit l q+-- matchPat mlit (ConP c (Just _) ps) q | recordPattern ps = Yes ()  -- Andreas, 2012-07-25 record patterns always match! matchPat mlit (ConP c _ ps) q = case q of-  VarMP x -> Block x+  VarMP x -> Block [(x, Just [c])]   WildMP  -> Yes ()   ConMP c' qs     | c == c'   -> matchPats mlit ps qs     | otherwise -> No   LitMP _ -> __IMPOSSIBLE__++{- UNUSED+class RecordPattern a where+  recordPattern :: a -> Bool++instance RecordPattern Pattern where+  recordPattern VarP{} = True+  recordPattern DotP{} = False+  recordPattern LitP{} = False+  recordPattern (ConP _ Nothing _) = False+  recordPattern (ConP _ (Just _) ps) = recordPattern ps++instance RecordPattern a => RecordPattern [a] where+  recordPattern = all recordPattern++instance RecordPattern a => RecordPattern (Arg a) where+  recordPattern = recordPattern . unArg+-}
+ src/full/Agda/TypeChecking/Coverage/SplitTree.hs view
@@ -0,0 +1,96 @@+{-# LANGUAGE CPP #-}++{-| Split tree for transforming pattern clauses into case trees.++The coverage checker generates a split tree from the clauses.+The clause compiler uses it to transform clauses to case trees.++The initial problem is a set of clauses.  The root node designates+on which argument to split and has subtrees for all the constructors.+Splitting continues until there is only a single clause left at+each leaf of the split tree.++-}+module Agda.TypeChecking.Coverage.SplitTree where++import Data.Tree+import Test.QuickCheck++import Agda.Syntax.Common+import Agda.Syntax.Abstract.Name++import Agda.Utils.Monad+import Agda.Utils.Impossible+#include "../../undefined.h"++type SplitTree  = SplitTree'  QName+type SplitTrees = SplitTrees' QName++-- | Abstract case tree shape.+data SplitTree' a+  = -- | No more splits coming. We are at a single, all-variable+    -- clause.+    SplittingDone+    { splitBindings :: Int       -- ^  The number of variables bound in the clause+    }+  | -- | A split is necessary.+    SplitAt+    { splitArg   :: Int           -- ^ Arg. no to split at.+    , splitTrees :: SplitTrees' a -- ^ Sub split trees.+    }+    deriving (Eq)++-- | Split tree branching.  A finite map from constructor names to splittrees+--   A list representation seems appropriate, since we are expecting not+--   so many constructors per data type, and there is no need for+--   random access.+type SplitTrees' a = [(a, SplitTree' a)]++-- * Printing a split tree++data SplitTreeLabel a = SplitTreeLabel+  { lblConstructorName :: Maybe a   -- ^ 'Nothing' for root of split tree+  , lblSplitArg        :: Maybe Int+  , lblBindings        :: Maybe Int+  }+instance Show a => Show (SplitTreeLabel a) where+  show (SplitTreeLabel Nothing Nothing (Just n))  = "done, " ++ show n ++ " bindings"+  show (SplitTreeLabel Nothing (Just n) Nothing)  = "split at " ++ show n+  show (SplitTreeLabel (Just q) Nothing (Just n)) = show q ++ " -> done, " ++ show n ++ " bindings"+  show (SplitTreeLabel (Just q) (Just n) Nothing) = show q ++ " -> split at " ++ show n+  show _ = __IMPOSSIBLE__++-- | Convert a split tree into a 'Data.Tree' (for printing).+toTree :: SplitTree' a -> Tree (SplitTreeLabel a)+toTree t = case t of+  SplittingDone n -> Node (SplitTreeLabel Nothing Nothing (Just n)) []+  SplitAt n ts    -> Node (SplitTreeLabel Nothing (Just n) Nothing) $ toTrees ts++toTrees :: SplitTrees' a -> Forest (SplitTreeLabel a)+toTrees = map (\ (c,t) -> setCons c $ toTree t)+  where+    setCons :: a -> Tree (SplitTreeLabel a) -> Tree (SplitTreeLabel a)+    setCons c (Node l ts) = Node (l { lblConstructorName = Just c }) ts++instance Show a => Show (SplitTree' a) where+  show = drawTree . fmap show . toTree++-- * Generating random split trees for testing++instance Arbitrary a => Arbitrary (SplitTree' a) where+  arbitrary = frequency+    [ (5, return $ SplittingDone 0)+    , (3, SplitAt <$> choose (1,5) <*> (take 3 <$> listOf1 arbitrary))+    ]++-- * Testing the printer++newtype CName = CName String+instance Show CName where+  show (CName s) = s++instance Arbitrary CName where+  arbitrary = CName <$> elements+    [ "zero", "suc", "nil", "cons", "left", "right", "just", "nothing" ]++testSplitTreePrinting = sample (arbitrary :: Gen (SplitTree' CName))
src/full/Agda/TypeChecking/Datatypes.hs view
@@ -2,6 +2,7 @@  module Agda.TypeChecking.Datatypes where +import Control.Applicative ((<$>)) import Data.List  import Agda.Syntax.Common@@ -11,8 +12,8 @@ import Agda.TypeChecking.Telescope import Agda.TypeChecking.Substitute +import Agda.Utils.Size import Agda.Utils.Impossible- #include "../undefined.h"  -- | Get the name of the datatype constructed by a given constructor.@@ -24,6 +25,30 @@     Constructor{conData = d} -> return d     _                        -> __IMPOSSIBLE__ ++-- | Return the number of non-parameter arguments to a data constructor,+--   or the field names of a record constructor.+--+--   For getting just the arity of constructor @c@,+--   use @either id size <$> getConstructorArity c@.+getConstructorArity :: QName -> TCM (Either Nat [Arg QName])+getConstructorArity c = do+  Defn{ defType = t, theDef = def } <- getConstInfo c+  case def of+    Constructor{ conData = d, conPars = n } -> do+      def <- theDef <$> getConstInfo d+      case def of+        Record{ recFields = fs } ->+           return $ Right fs+        Datatype{} -> do+          -- TODO: I do not want to take the type of constructor apart+          -- to see its arity!+          TelV tel _ <- telView t+          return $ Left $ size tel - n+        _ -> __IMPOSSIBLE__+    _ -> __IMPOSSIBLE__++ -- | Check if a name refers to a datatype or a record with a named constructor. isDatatype :: QName -> TCM Bool isDatatype d = do@@ -33,15 +58,32 @@     Record{recNamedCon = namedC} -> return namedC     _                            -> return False +data DataOrRecord = IsData | IsRecord+  deriving (Eq, Ord, Show)+ -- | Check if a name refers to a datatype or a record.-isDataOrRecordType :: QName -> TCM Bool+isDataOrRecordType :: QName -> TCM (Maybe DataOrRecord) isDataOrRecordType d = do   def <- getConstInfo d   case theDef def of-    Datatype{} -> return True-    Record{}   -> return True-    _          -> return False+    Datatype{} -> return $ Just IsData+    Record{}   -> return $ Just IsRecord+    _          -> return $ Nothing +isDataOrRecord :: Term -> TCM (Maybe QName)+isDataOrRecord (Def d _)  = fmap (const d) <$> isDataOrRecordType d+isDataOrRecord (Shared p) = isDataOrRecord (derefPtr p)+isDataOrRecord _          = return Nothing++getNumberOfParameters :: QName -> TCM (Maybe Nat)+getNumberOfParameters d = do+  def <- getConstInfo d+  case theDef def of+    Datatype{ dataPars = n} -> return $ Just n+    Record{ recPars = n}    -> return $ Just n+    _                       -> return Nothing++{- UNUSED data DatatypeInfo = DataInfo   { datatypeName   :: QName   , datatypeParTel :: Telescope@@ -80,3 +122,4 @@                           , datatypeIxs    = is                           }     _ -> return Nothing+-}
src/full/Agda/TypeChecking/DisplayForm.hs view
@@ -5,12 +5,14 @@ import Control.Applicative import Control.Monad import Control.Monad.Error+import Data.Traversable hiding (mapM)  import Agda.Syntax.Common import Agda.Syntax.Internal import Agda.TypeChecking.Monad import Agda.TypeChecking.Substitute import Agda.TypeChecking.Reduce+import Agda.TypeChecking.Level import Agda.Syntax.Scope.Base import Agda.Utils.Size @@ -28,16 +30,19 @@       xs <- mapM tryOpen odfs       return [ df | Just df <- xs ]     scope <- getScope-    let matches dfs vs = [ m | Just m <- map (flip matchDisplayForm vs) dfs, inScope scope m ]+    ms <- do+      ms <- mapM (flip matchDisplayForm vs) dfs+      return [ m | Just m <- ms, inScope scope m ]     -- Not safe when printing non-terminating terms.     -- (nfdfs, us) <- normalise (dfs, vs)     unless (null odfs) $ reportSLn "tc.display.top" 100 $ unlines-      [ "displayForms: " ++ show dfs+      [ "name        : " ++ show c+      , "displayForms: " ++ show dfs       , "arguments   : " ++ show vs-      , "matches     : " ++ show (matches dfs vs)-      , "result      : " ++ show (foldr (const . Just) Nothing $ matches dfs vs)+      , "matches     : " ++ show ms+      , "result      : " ++ show (foldr (const . Just) Nothing ms)       ]-    return $ foldr (const . Just) Nothing $ matches dfs vs -- ++ matches nfdfs us+    return $ foldr (const . Just) Nothing ms   `catchError` \_ -> return Nothing   where     inScope _ _ = True  -- TODO: distinguish between with display forms and other display forms@@ -46,35 +51,49 @@ --       Nothing -> __IMPOSSIBLE__ -- TODO: currently all display forms have heads     hd (DTerm (Def x _))    = Just x     hd (DTerm (Con x _))    = Just x+    hd (DTerm (Shared p))   = hd (DTerm $ derefPtr p)     hd (DWithApp (d : _) _) = hd d     hd _		    = Nothing -matchDisplayForm :: DisplayForm -> Args -> Maybe DisplayTerm+matchDisplayForm :: DisplayForm -> Args -> TCM (Maybe DisplayTerm) matchDisplayForm (Display n ps v) vs-  | length ps > length vs = Nothing+  | length ps > length vs = return Nothing   | otherwise             = do-    us <- match n ps $ raise 1 (map unArg vs0)-    return $ substs (reverse us ++ ctx) v `apply` vs1+    mus <- match n ps $ raise 1 (map unArg vs0)+    return $ fmap (\us -> applySubst (parallelS (reverse us)) v `apply` vs1) mus   where-    -- TODO: figure out the length of the context-    ctx = [ Var i [] | i <- [0..] ]     (vs0, vs1) = splitAt (length ps) vs  class Match a where-  match :: Nat -> a -> a -> Maybe [Term]+  match :: Nat -> a -> a -> TCM (Maybe [Term])  instance Match a => Match [a] where-  match n xs ys = concat <$> zipWithM (match n) xs ys+  match n xs ys = fmap concat . traverse id <$> zipWithM (match n) xs ys  instance Match a => Match (Arg a) where   match n p v = match n (unArg p) (unArg v)  instance Match Term where-  match n p v = case (p, v) of-    (Var 0 [], v)                  -> return [subst __IMPOSSIBLE__ v]+  match n p v = case (ignoreSharing p, ignoreSharing v) of+    (Var 0 [], v)                  -> return $ Just [subst __IMPOSSIBLE__ v]     (Var i ps, Var j vs) | i == j  -> match n ps vs     (Def c ps, Def d vs) | c == d  -> match n ps vs     (Con c ps, Con d vs) | c == d  -> match n ps vs-    (Lit l, Lit l')      | l == l' -> return []-    (p, v)               | p == v  -> return []-    _                              -> fail ""+    (Lit l, Lit l')      | l == l' -> return $ Just []+    (p, v)               | p == v  -> return $ Just []+    (p, Level l)                   -> match n p =<< reallyUnLevelView l+    (Sort ps, Sort pv)             -> match n ps pv+    (p, Sort (Type v))             -> match n p =<< reallyUnLevelView v+    _                              -> return Nothing++instance Match Sort where+  match n p v = case (p, v) of+    (Type pl, Type vl) -> match n pl vl+    _ | p == v -> return $ Just []+    _          -> return Nothing++instance Match Level where+  match n p v = do+    p <- reallyUnLevelView p+    v <- reallyUnLevelView v+    match n p v
+ src/full/Agda/TypeChecking/DropArgs.hs view
@@ -0,0 +1,79 @@+{-# LANGUAGE CPP, PatternGuards, TypeSynonymInstances, FlexibleInstances #-}+module Agda.TypeChecking.DropArgs where++import Agda.Syntax.Internal+import Agda.Syntax.Position++import Agda.TypeChecking.Monad+import Agda.TypeChecking.Substitute++import Agda.TypeChecking.CompiledClause+-- import Agda.TypeChecking.CompiledClause.Compile++import Agda.Utils.Permutation+++#include "../undefined.h"+import Agda.Utils.Impossible++---------------------------------------------------------------------------+-- * Dropping initial arguments to create a projection-like function+---------------------------------------------------------------------------++-- | When making a function projection-like, we drop the first @n@+--   arguments.+class DropArgs a where+  dropArgs :: Int -> a -> a++-- | NOTE: This creates telescopes with unbound de Bruijn indices.+instance DropArgs Telescope where+  dropArgs n tel = telFromList $ drop n $ telToList tel++instance DropArgs Permutation where+  dropArgs n (Perm m p) = Perm (m - n) $ map (subtract n) $ drop n p++-- | NOTE: does not go into the body, so does not work for recursive functions.+instance DropArgs ClauseBody where+  dropArgs 0 b        = b+  dropArgs _ NoBody   = NoBody+  dropArgs n (Bind b) = dropArgs (n - 1) (absBody b)+  dropArgs n Body{}   = __IMPOSSIBLE__++-- | NOTE: does not work for recursive functions.+instance DropArgs Clause where+  dropArgs n cl =+      cl{ clausePerm = dropArgs n $ clausePerm cl+        , clauseTel  = dropArgs n $ clauseTel cl+          -- Andreas, 2012-09-25: just dropping the front of telescope+          -- makes it ill-formed (unbound indices)+          -- we should let the telescope intact!?+        , clausePats = drop n $ clausePats cl+        , clauseBody = dropArgs n $ clauseBody cl -- BUG: need to drop also from recursive calls!!+        }++instance DropArgs FunctionInverse where+  dropArgs n finv = fmap (dropArgs n) finv++{- UNUSED, but don't remove (Andreas, 2012-10-08)+-- | Use for dropping initial lambdas in compiled clause bodies.+--   NOTE: does not reduce term, need lambdas to be present.+instance DropArgs Term where+  dropArgs 0 v = v+  dropArgs n v = case ignoreSharing v of+    Lam h b -> dropArgs (n - 1) (absBody b)+    _       -> __IMPOSSIBLE__+-}++-- | To drop the first @n@ arguments in a compiled clause,+--   we reduce the split argument indices by @n@ and+--   drop @n@ arguments from the bodies.+--   NOTE: this only works for non-recursive functions, we+--   are not dropping arguments to recursive calls in bodies.+instance DropArgs CompiledClauses where+  dropArgs n cc = case cc of+    Case i br | i < n         -> __IMPOSSIBLE__+              | otherwise     -> Case (i - n) $ fmap (dropArgs n) br+    Done xs t | length xs < n -> __IMPOSSIBLE__+              | otherwise     -> Done (drop n xs) t+    Fail                      -> Fail+
src/full/Agda/TypeChecking/Eliminators.hs view
@@ -11,14 +11,17 @@ import Agda.TypeChecking.Substitute import Agda.Utils.Impossible import Agda.TypeChecking.Reduce+import Agda.TypeChecking.Level  #include "../undefined.h" -data ElimView = VarElim Nat [Elim]-              | DefElim QName [Elim]-              | ConElim QName [Elim]-              | MetaElim MetaId [Elim]-              | NoElim Term+data ElimView+  = VarElim Nat [Elim]+  | DefElim QName [Elim]+  | ConElim QName [Elim]+  | MetaElim MetaId [Elim]+  | NoElim Term+  deriving (Show)  elimView :: Term -> TCM ElimView elimView v = do@@ -26,7 +29,12 @@   -- since reducing a stuck application doesn't necessarily reduces all   -- the arguments.   v <- reduce v-  case v of+  -- domi 2012-7-24: Add unLevel to handle neutral levels. The problem is that reduce turns+  -- suc (neutral) into Level (Max [Plus 1 (NeutralLevel neutral)]) which the below pattern+  -- match does not handle.+  v <- unLevel v+  reportSLn "tc.conv.elim" 50 $ "v = " ++ show v+  case ignoreSharing v of     Def f vs -> do       proj <- isProjection f       case proj of@@ -46,6 +54,7 @@     Sort{}     -> noElim     Pi{}       -> noElim     DontCare{} -> noElim+    Shared p   -> __IMPOSSIBLE__     where       noElim = return $ NoElim v       app f vs = return $ f $ map Apply vs@@ -56,6 +65,7 @@       elim es2 (ConElim  x es1) = ConElim  x (es1 ++ es2)       elim es2 (MetaElim x es1) = MetaElim x (es1 ++ es2) +{- UNUSED -- | Only used when producing error messages. unElimView :: ElimView -> Term unElimView v = case v of@@ -69,3 +79,4 @@ unElim v [] = v unElim v (Apply u : es) = unElim (v `apply` [u]) es unElim v (Proj f : es)  = unElim (Def f [Arg NotHidden Relevant v]) es+-}
src/full/Agda/TypeChecking/Empty.hs view
@@ -2,9 +2,11 @@ module Agda.TypeChecking.Empty where  import Control.Applicative+import Control.Monad  import Agda.Syntax.Common import Agda.Syntax.Internal+import Agda.Syntax.Position  import Agda.TypeChecking.Monad import Agda.TypeChecking.Coverage@@ -15,31 +17,40 @@ import Agda.Utils.Permutation import Agda.Utils.Size +{- UNUSED -- | Make sure that a type is empty.-isReallyEmptyType :: Type -> TCM ()-isReallyEmptyType t = noConstraints $ isEmptyType t+isReallyEmptyType :: Range -> Type -> TCM ()+isReallyEmptyType r t = noConstraints $ isEmptyType r t+-} -isEmptyType :: Type -> TCM ()-isEmptyType t = do+-- | Check whether a type is empty.  Maybe postponed as emptyness constraint.+isEmptyType :: Range -> Type -> TCM ()+isEmptyType r t = do   tb <- reduceB t   let t = ignoreBlocking tb-  case unEl <$> tb of+      postpone = addConstraint (IsEmpty r t)+  case ignoreSharing . unEl <$> tb of     -- if t is blocked or a meta, we cannot decide emptyness now. postpone-    NotBlocked MetaV{} -> addConstraint (IsEmpty t)-    Blocked{}          -> addConstraint (IsEmpty t)+    NotBlocked MetaV{} -> postpone+    Blocked{}          -> postpone     _                  -> do     -- from the current context xs:ts, create a pattern list     -- xs _ : ts t and try to split on _ (the last variable)       tel0 <- getContextTelescope-      let gamma = telToList tel0 ++ [defaultArg ("_", t)]-          ps    = [ Arg h r $ VarP x | Arg h r (x, _) <- gamma ]+      let gamma = telToList tel0 ++ [domFromArg $ defaultArg ("_", t)]+          ps    = [ Arg h r $ VarP x | Dom h r (x, _) <- gamma ]           tel   = telFromList gamma -      r <- split Inductive tel (idP $ size tel) ps 0+      dontAssignMetas $ do+      r <- splitLast Inductive tel ps        case r of         Left err  -> case err of-          CantSplit c tel us vs _ -> traceCall (CheckIsEmpty t) $ typeError $ CoverageCantSplitOn c tel us vs+          CantSplit c tel us vs _ -> postpone+          -- Andreas, 2012-03-15: allow postponement of emptyness check+          -- OLD CODE: traceCall (CheckIsEmpty t) $ typeError $ CoverageCantSplitOn c tel us vs           _                       -> typeError $ ShouldBeEmpty t []-        Right []  -> return ()-        Right cs  -> typeError $ ShouldBeEmpty t $ map (unArg . last . scPats) cs+        Right cov -> do+          let cs = splitClauses cov+          unless (null cs) $+            typeError $ ShouldBeEmpty t $ map (unArg . last . scPats) $ cs
src/full/Agda/TypeChecking/Empty.hs-boot view
@@ -3,6 +3,7 @@  import Agda.TypeChecking.Monad (TCM) import Agda.Syntax.Internal (Type)+import Agda.Syntax.Position (Range) -isReallyEmptyType :: Type -> TCM ()-isEmptyType       :: Type -> TCM ()+-- isReallyEmptyType :: Type -> TCM ()+isEmptyType       :: Range -> Type -> TCM ()
src/full/Agda/TypeChecking/Errors.hs view
@@ -3,12 +3,17 @@     ( prettyError     , PrettyTCM(..)     , tcErrString+    , Warnings(..)+    , warningsToError     ) where  import Control.Applicative ( (<$>) ) import Control.Monad.State import Control.Monad.Error++import Data.List (nub) import qualified Data.Map as Map (empty)+ import System.FilePath  import Agda.Syntax.Common@@ -24,8 +29,10 @@ import Agda.Syntax.Translation.InternalToAbstract import Agda.Syntax.Translation.AbstractToConcrete import Agda.Syntax.Scope.Base (ScopeInfo(..))--import Agda.TypeChecking.Monad+import Agda.Syntax.Scope.Monad (isDatatypeModule)+import Agda.TypeChecking.Monad.Base+import Agda.TypeChecking.Monad.Context+import Agda.TypeChecking.Monad.Options import Agda.TypeChecking.Pretty  import Agda.Utils.FileName@@ -50,6 +57,34 @@ 	$$ vcat (map (text . tcErrString) [err,err',err'',err'''])  ---------------------------------------------------------------------------+-- * Warnings+---------------------------------------------------------------------------++-- | Warnings.+--+-- Invariant: The fields are never empty at the same time.++data Warnings = Warnings+  { terminationProblems   :: [TerminationError]+    -- ^ Termination checking problems are not reported if+    -- 'optTerminationCheck' is 'False'.+  , unsolvedMetaVariables :: [Range]+    -- ^ Meta-variable problems are reported as type errors unless+    -- 'optAllowUnsolved' is 'True'.+  , unsolvedConstraints   :: Constraints+    -- ^ Same as 'unsolvedMetaVariables'.+  }++-- | Turns warnings into an error. Even if several errors are possible+-- only one is raised.++warningsToError :: Warnings -> TypeError+warningsToError (Warnings [] [] [])    = __IMPOSSIBLE__+warningsToError (Warnings _ w@(_:_) _) = UnsolvedMetas w+warningsToError (Warnings _ _ w@(_:_)) = UnsolvedConstraints w+warningsToError (Warnings w@(_:_) _ _) = TerminationCheckFailed w++--------------------------------------------------------------------------- -- * Helpers --------------------------------------------------------------------------- @@ -70,7 +105,7 @@     r = nameBindingSite $ qnameName q  tcErrString :: TCErr -> String-tcErrString err = show (getRange err) ++ " " ++ case errError err of+tcErrString err = show (getRange err) ++ " " ++ case err of     TypeError _ cl  -> errorString $ clValue cl     Exception r s   -> show r ++ " " ++ s     IOException r e -> show r ++ " " ++ show e@@ -83,6 +118,7 @@     AmbiguousName{}                          -> "AmbiguousName"     AmbiguousParseForApplication{}           -> "AmbiguousParseForApplication"     AmbiguousParseForLHS{}                   -> "AmbiguousParseForLHS"+--    AmbiguousParseForPatternSynonym{}        -> "AmbiguousParseForPatternSynonym"     AmbiguousTopLevelModuleName {}           -> "AmbiguousTopLevelModuleName"     BothWithAndRHS                           -> "BothWithAndRHS"     BuiltinInParameterisedModule{}           -> "BuiltinInParameterisedModule"@@ -100,6 +136,7 @@     CoverageCantSplitType{}                  -> "CoverageCantSplitType"     CyclicModuleDependency{}                 -> "CyclicModuleDependency"     DataMustEndInSort{}                      -> "DataMustEndInSort"+-- UNUSED:    DataTooManyParameters{}                  -> "DataTooManyParameters"     DifferentArities                         -> "DifferentArities"     DoesNotConstructAnElementOf{}            -> "DoesNotConstructAnElementOf"     DuplicateBuiltinBinding{}                -> "DuplicateBuiltinBinding"@@ -109,11 +146,12 @@     FieldOutsideRecord                       -> "FieldOutsideRecord"     FileNotFound{}                           -> "FileNotFound"     GenericError{}                           -> "GenericError"+    GenericDocError{}                        -> "GenericDocError"     IFSNoCandidateInScope{}                  -> "IFSNoCandidateInScope"     IlltypedPattern{}                        -> "IlltypedPattern"     IncompletePatternMatching{}              -> "IncompletePatternMatching"-    IndexFreeInParameter{}                   -> "IndexFreeInParameter"     IndexVariablesNotDistinct{}              -> "IndexVariablesNotDistinct"+    IndicesFreeInParameters{}                -> "IndicesFreeInParameters"     IndicesNotConstructorApplications{}      -> "IndicesNotConstructorApplications"     InternalError{}                          -> "InternalError"     InvalidPattern{}                         -> "InvalidPattern"@@ -124,9 +162,11 @@     ModuleDefinedInOtherFile {}              -> "ModuleDefinedInOtherFile"     ModuleDoesntExport{}                     -> "ModuleDoesntExport"     ModuleNameDoesntMatchFileName {}         -> "ModuleNameDoesntMatchFileName"+    NeedOptionCopatterns{}                   -> "NeedOptionCopatterns"     NoBindingForBuiltin{}                    -> "NoBindingForBuiltin"     NoParseForApplication{}                  -> "NoParseForApplication"     NoParseForLHS{}                          -> "NoParseForLHS"+--    NoParseForPatternSynonym{}               -> "NoParseForPatternSynonym"     NoRHSRequiresAbsurdPattern{}             -> "NoRHSRequiresAbsurdPattern"     NotInductive {}                          -> "NotInductive"     AbsurdPatternRequiresNoRHS{}             -> "AbsurdPatternRequiresNoRHS"@@ -135,6 +175,7 @@     NoSuchPrimitiveFunction{}                -> "NoSuchPrimitiveFunction"     NotAModuleExpr{}                         -> "NotAModuleExpr"     NotAProperTerm                           -> "NotAProperTerm"+    SetOmegaNotValidType                     -> "SetOmegaNotValidType"     NotAValidLetBinding{}                    -> "NotAValidLetBinding"     NotAnExpression{}                        -> "NotAnExpression"     NotImplemented{}                         -> "NotImplemented"@@ -146,10 +187,12 @@     NothingAppliedToInstanceArg{}            -> "NothingAppliedToInstanceArg"     OverlappingProjects {}                   -> "OverlappingProjects"     PatternShadowsConstructor {}             -> "PatternShadowsConstructor"+    PatternSynonymArityMismatch {}           -> "PatternSynonymArityMismatch"     PropMustBeSingleton                      -> "PropMustBeSingleton"     RepeatedVariablesInPattern{}             -> "RepeatedVariablesInPattern"     SafeFlagPostulate{}                      -> "SafeFlagPostulate"     SafeFlagPragma{}                         -> "SafeFlagPragma"+    SafeFlagNoTerminationCheck{}             -> "SafeFlagNoTerminationCheck"     SafeFlagPrimTrustMe{}                    -> "SafeFlagPrimTrustMe"     ShadowedModule{}                         -> "ShadowedModule"     ShouldBeASort{}                          -> "ShouldBeASort"@@ -158,6 +201,7 @@     ShouldBeEmpty{}                          -> "ShouldBeEmpty"     ShouldBePi{}                             -> "ShouldBePi"     ShouldBeRecordType{}                     -> "ShouldBeRecordType"+    ShouldBeRecordPattern{}                  -> "ShouldBeRecordPattern"     ShouldEndInApplicationOfTheDatatype{}    -> "ShouldEndInApplicationOfTheDatatype"     TerminationCheckFailed{}                 -> "TerminationCheckFailed"     TooFewFields{}                           -> "TooFewFields"@@ -166,6 +210,7 @@     SplitOnIrrelevant{}                      -> "SplitOnIrrelevant"     DefinitionIsIrrelevant{}                 -> "DefinitionIsIrrelevant"     VariableIsIrrelevant{}                   -> "VariableIsIrrelevant"+    UnequalBecauseOfUniverseConflict{}       -> "UnequalBecauseOfUniverseConflict"     UnequalRelevance{}                       -> "UnequalRelevance"     UnequalHiding{}                          -> "UnequalHiding"     UnequalLevel{}                           -> "UnequalLevel"@@ -180,6 +225,7 @@     UnreachableClauses{}                     -> "UnreachableClauses"     UnsolvedConstraints{}                    -> "UnsolvedConstraints"     UnsolvedMetas{}                          -> "UnsolvedMetas"+    UnusedVariableInPatternSynonym           -> "UnusedVariableInPatternSynonym"     WithClausePatternMismatch{}              -> "WithClausePatternMismatch"     WrongHidingInApplication{}               -> "WrongHidingInApplication"     WrongHidingInLHS{}                       -> "WrongHidingInLHS"@@ -188,13 +234,10 @@     WrongNumberOfConstructorArguments{}      -> "WrongNumberOfConstructorArguments"  instance PrettyTCM TCErr where-    prettyTCM err = case errError err of-	TypeError s e -> do-	    s0 <- get+    prettyTCM err = case err of+	TypeError s e -> localState $ do 	    put s-	    d <- sayWhen (envRange $ clEnv e) (envCall $ clEnv e) $ prettyTCM e-	    put s0-	    return d+	    sayWhen (envRange $ clEnv e) (envCall $ clEnv e) $ prettyTCM e 	Exception r s   -> sayWhere r $ fwords s 	IOException r e -> sayWhere r $ fwords $ show e 	PatternErr _    -> sayWhere err $ panic "uncaught pattern violation"@@ -208,6 +251,7 @@ 	    NotSupported s -> fwords $ "Not supported: " ++ s 	    CompilationError s -> sep [fwords "Compilation error:", text s] 	    GenericError s   -> fwords s+	    GenericDocError d   -> return d 	    TerminationCheckFailed because ->               fwords "Termination checking failed for the following functions:"               $$ (nest 2 $@@ -219,12 +263,15 @@                                case show (callInfoRange c) of                                  "" -> call                                  r  -> call $$ nest 2 (text "(at" <+> text r <> text ")"))-                        (concatMap termErrCalls because))+                        (nub $ concatMap termErrCalls because)) 	    PropMustBeSingleton -> fwords 		"Datatypes in Prop must have at most one constructor when proof irrelevance is enabled" 	    DataMustEndInSort t -> fsep $ 		pwords "The type of a datatype must end in a sort." 		++ [prettyTCM t] ++ pwords "isn't a sort."+{- UNUSED:+	    DataTooManyParameters -> fsep $ pwords "Too many parameters given to data type."+-} 	    ShouldEndInApplicationOfTheDatatype t -> fsep $ 		pwords "The target of a constructor must be the datatype applied to its parameters," 		++ [prettyTCM t] ++ pwords "isn't"@@ -236,6 +283,8 @@ 		pwords "which is not the right datatype" 	    ShouldBeRecordType t -> fsep $ 		pwords "Expected record type, found " ++ [prettyTCM t]+	    ShouldBeRecordPattern p -> fsep $+		pwords "Expected record pattern" -- ", found " ++ [prettyTCM p] 	    DifferentArities -> 		fwords "The number of arguments in the defining equations differ" 	    WrongHidingInLHS t -> do@@ -252,7 +301,7 @@               pwords "Failed to infer the value of dotted pattern"             IlltypedPattern p a -> fsep $               pwords "Type mismatch"-            TooManyArgumentsInLHS n a -> fsep $+            TooManyArgumentsInLHS a -> fsep $               pwords "Left hand side gives too many arguments to a function of type" ++ [prettyTCM a]             WrongNumberOfConstructorArguments c expect given -> fsep $               pwords "The constructor" ++ [prettyTCM c] ++ pwords "expects" ++@@ -263,21 +312,33 @@             ConstructorPatternInWrongDatatype c d -> fsep $               [prettyTCM c] ++ pwords "is not a constructor of the datatype" ++ [prettyTCM d]             IndicesNotConstructorApplications is ->-              fsep (pwords "The following indices are not constructors" ++-                    pwords "(or literals) applied to variables:")+              fwords "The indices"               $$ nest 2 (vcat $ map prettyTCM is)-            IndexVariablesNotDistinct is ->-              fsep (pwords "The variables in the following indices are not distinct:")+              $$ fsep (pwords "are not constructors (or literals) applied to variables" +++                       pwords "(note that parameters count as constructor arguments)")+            IndexVariablesNotDistinct vs is ->+              fwords "The variables"+              $$ nest 2 (vcat $ map (\v -> prettyTCM (I.Var v [])) vs)+              $$ fwords "in the indices"               $$ nest 2 (vcat $ map prettyTCM is)-            IndexFreeInParameter i pars ->-              fsep (pwords "The index" ++ [prettyTCM (I.Var i [])] ++-                    pwords "is free in the following parameters:")+              $$ fwords "are not distinct (note that parameters count as constructor arguments)"+            IndicesFreeInParameters vs indices pars ->+              fwords "The variables"+              $$ nest 2 (vcat $ map (\v -> prettyTCM (I.Var v [])) vs)+              $$ fwords "which are used (perhaps as constructor parameters) in the index expressions"+              $$ nest 2 (vcat $ map prettyTCM indices)+              $$ fwords "are free in the parameters"               $$ nest 2 (vcat $ map prettyTCM pars)-            ShadowedModule [] -> __IMPOSSIBLE__-            ShadowedModule ms@(m : _) -> fsep $-              pwords "Duplicate definition of module" ++ [prettyTCM m <> text "."] ++-              pwords "Previous definition at" ++ [text $ show r]+            ShadowedModule x [] -> __IMPOSSIBLE__+            ShadowedModule x ms@(m : _) -> fsep $+              pwords "Duplicate definition of module" ++ [prettyTCM x <> text "."] +++              pwords "Previous definition of" ++ [help m] ++ pwords "module" ++ [prettyTCM x] +++              pwords "at" ++ [text $ show r]               where+                help m = do+                  b <- isDatatypeModule m+                  if b then text "datatype" else empty+                 r = case [ r | r <- map (defSiteOfLast . mnameToList) ms                              , r /= noRange ] of                       []    -> noRange@@ -304,6 +365,8 @@ 		[prettyTCM t] ++ pwords "should be a function type, but it isn't" 	    NotAProperTerm -> 		fwords "Found a malformed term"+	    SetOmegaNotValidType ->+		fwords "Setω is not a valid type"             SplitOnIrrelevant p t -> fsep $                 pwords "Cannot pattern match" ++ [prettyA p] ++                 pwords "against irrelevant type" ++ [prettyTCM t]@@ -311,40 +374,30 @@                 text "Identifier" : prettyTCM x : pwords "is declared irrelevant, so it cannot be used here"             VariableIsIrrelevant x -> fsep $                 text "Variable" : prettyTCM x : pwords "is declared irrelevant, so it cannot be used here"+	    UnequalBecauseOfUniverseConflict cmp s t -> fsep $+		[prettyTCM s, notCmp cmp, prettyTCM t, text "because this would result in an invalid use of Setω" ]  	    UnequalTerms cmp s t a -> fsep $-		[prettyTCM s, f cmp, prettyTCM t] ++ pwords "of type" ++ [prettyTCM a]-                where-                  f CmpEq  = text "!="-                  f CmpLeq = text "!=<"+		[prettyTCM s, notCmp cmp, prettyTCM t] ++ pwords "of type" ++ [prettyTCM a] 	    UnequalLevel cmp s t -> fsep $-		[prettyTCM s, f cmp, prettyTCM t]-                where-                  f CmpEq  = text "!="-                  f CmpLeq = text "!=<"+		[prettyTCM s, notCmp cmp, prettyTCM t] 	    UnequalTelescopes cmp a b -> fsep $-		[prettyTCM a, f cmp, prettyTCM b]-                where-                  f CmpEq  = text "!="-                  f CmpLeq = text "!=<"+		[prettyTCM a, notCmp cmp, prettyTCM b] 	    UnequalTypes cmp a b -> fsep $-		[prettyTCM a, f cmp, prettyTCM b]-                where-                  f CmpEq  = text "!="-                  f CmpLeq = text "!=<"+		[prettyTCM a, notCmp cmp, prettyTCM b] 	    HeterogeneousEquality u a v b -> fsep $                 pwords "Refuse to solve heterogeneous constraint" ++                 [prettyTCM u] ++ pwords ":" ++ [prettyTCM a] ++ pwords "=?=" ++                 [prettyTCM v] ++ pwords ":" ++ [prettyTCM b]-	    UnequalRelevance a b -> fsep $-		[prettyTCM a] ++ pwords "!=" ++ [prettyTCM b] +++	    UnequalRelevance cmp a b -> fsep $+		[prettyTCM a, notCmp cmp, prettyTCM b] ++ -- Andreas 2010-09-21 to reveal Forced annotations, print also uglily---		[text $ show a] ++ pwords "!=" ++ [text $ show b] +++--		[text $ show a, notCmp cmp, text $ show b] ++ 		pwords "because one is a relevant function type and the other is an irrelevant function type" 	    UnequalHiding a b -> fsep $-		[prettyTCM a] ++ pwords "!=" ++ [prettyTCM b] +++		[prettyTCM a, text "!=", prettyTCM b] ++ 		pwords "because one is an implicit function type and the other is an explicit function type" 	    UnequalSorts s1 s2 -> fsep $-		[prettyTCM s1] ++ pwords "!=" ++ [prettyTCM s2]+		[prettyTCM s1, text "!=", prettyTCM s2] 	    NotLeqSort s1 s2 -> fsep $ 		pwords "The type of the constructor does not fit in the sort of the datatype, since" 		++ [prettyTCM s1] ++ pwords "is not less or equal than" ++ [prettyTCM s2]@@ -460,8 +513,13 @@ 	    AmbiguousModule x ys -> vcat 	      [ fsep $ pwords "Ambiguous module name" ++ [pretty x <> text "."] ++ 		       pwords "It could refer to any one of"-	      , nest 2 $ vcat $ map prettyTCM ys+	      , nest 2 $ vcat $ map help ys 	      ]+              where+                help :: ModuleName -> TCM Doc+                help m = do+                  b <- isDatatypeModule m+                  sep [prettyTCM m, if b then text "(datatype module)" else empty] 	    UninstantiatedModule x -> fsep ( 		    pwords "Cannot access the contents of the parameterised module" ++ [pretty x <> text "."] ++ 		    pwords "To do this the module first has to be instantiated. For instance:"@@ -509,12 +567,28 @@ 		    pwords "Don't know how to parse" ++ [pretty (C.RawApp noRange es) <> text "."] ++ 		    pwords "Could mean any one of:" 		) $$ nest 2 (vcat $ map pretty es')-	    NoParseForLHS p -> fsep $+            UnusedVariableInPatternSynonym -> fsep $+                pwords "Unused variable in pattern synonym."+            PatternSynonymArityMismatch x -> fsep $+                pwords "Arity mismatch when using pattern synonym" ++ [prettyTCM x]+	    NoParseForLHS IsLHS p -> fsep $ 		pwords "Could not parse the left-hand side" ++ [pretty p]-	    AmbiguousParseForLHS p ps -> fsep (+	    NoParseForLHS IsPatSyn p -> fsep $+		pwords "Could not parse the pattern synonym" ++ [pretty p]+{- UNUSED+	    NoParseForPatternSynonym p -> fsep $+		pwords "Could not parse the pattern synonym" ++ [pretty p]+-}+	    AmbiguousParseForLHS lhsOrPatSyn p ps -> fsep ( 		    pwords "Don't know how to parse" ++ [pretty p <> text "."] ++ 		    pwords "Could mean any one of:" 		) $$ nest 2 (vcat $ map pretty ps)+{- UNUSED+	    AmbiguousParseForPatternSynonym p ps -> fsep (+		    pwords "Don't know how to parse" ++ [pretty p <> text "."] +++		    pwords "Could mean any one of:"+		) $$ nest 2 (vcat $ map pretty ps)+-} 	    IncompletePatternMatching v args -> fsep $ 		pwords "Incomplete pattern matching for" ++ [prettyTCM v <> text "."] ++ 		pwords "No match for" ++ map prettyTCM args@@ -585,21 +659,27 @@                            | otherwise      = "s"                 in fsep $ [fwords ("Cannot set OPTION pragma" ++ plural)]                           ++ map text xs ++ [fwords "with safe flag."]+            SafeFlagNoTerminationCheck -> fsep (pwords "Cannot use NO_TERMINATION_CHECK pragma with safe flag.")             SafeFlagPrimTrustMe -> fsep (pwords "Cannot use primTrustMe with safe flag")+            NeedOptionCopatterns -> fsep (pwords "Option --copatterns needed to enable destructor patterns")           where             mpar n args               | n > 0 && not (null args) = parens               | otherwise                = id +            showArg :: Arg I.Pattern -> TCM Doc             showArg (Arg Hidden r x)    = braces $ showPat 0 x             showArg (Arg Instance r x)  = dbraces $ showPat 0 x             showArg (Arg NotHidden r x) = showPat 1 x +            showPat :: Integer -> I.Pattern -> TCM Doc             showPat _ (I.VarP _)        = text "_"             showPat _ (I.DotP _)        = text "._"             showPat n (I.ConP c _ args) = mpar n args $ prettyTCM c <+> fsep (map showArg args)             showPat _ (I.LitP l)        = text (show l) +notCmp :: Comparison -> TCM Doc+notCmp cmp = text $ "!" ++ show cmp   instance PrettyTCM Call where@@ -653,7 +733,7 @@ 	    fsep $ pwords "when inferring the type of" ++ [prettyTCM x] 	InferDef _ x _ -> 	    fsep $ pwords "when inferring the type of" ++ [prettyTCM x]-        CheckIsEmpty t _ ->+        CheckIsEmpty r t _ ->             fsep $ pwords "when checking that" ++ [prettyTCM t] ++ pwords "has no constructors" 	ScopeCheckExpr e _ -> 	    fsep $ pwords "when scope checking" ++ [pretty e]@@ -663,8 +743,7 @@ 	ScopeCheckLHS x p _ -> 	    fsep $ pwords "when scope checking the left-hand side" ++ [pretty p] ++ 		   pwords "in the definition of" ++ [pretty x]-	TermFunDef _ f _ _ ->-	    fsep $ pwords "when termination checking the definition of" ++ [prettyTCM f]+        NoHighlighting _ -> empty 	SetRange r _ -> 	    fsep $ pwords "when doing something at" ++ [text $ show r]         CheckSectionApplication _ m1 modapp _ -> fsep $@@ -676,6 +755,4 @@ 	where 	    hPretty a = pretty =<< abstractToConcreteCtx (hiddenArgumentCtx (argHiding a)) a -	    simpleDecl d = d'-              where [d'] = D.notSoNiceDeclarations [d]-+	    simpleDecl = D.notSoNiceDeclaration
+ src/full/Agda/TypeChecking/Errors.hs-boot view
@@ -0,0 +1,5 @@+module Agda.TypeChecking.Errors where++import Agda.TypeChecking.Monad.Base++prettyError :: TCErr -> TCM String
src/full/Agda/TypeChecking/EtaContract.hs view
@@ -32,6 +32,7 @@   Sort _     -> noApp   MetaV _ _  -> noApp   DontCare _ -> noApp+  Shared p   -> binAppView (derefPtr p)  -- destroys sharing   where     noApp = NoApp t     app f [] = noApp@@ -39,21 +40,21 @@  etaContract :: TermLike a => a -> TCM a etaContract = traverseTermM etaOnce-  where  etaOnce :: Term -> TCM Term-etaOnce v = ignoreAbstractMode $ eta v+etaOnce v = eta v   where+    eta v@Shared{} = updateSharedTerm eta v     eta t@(Lam h (Abs _ b)) = do  -- NoAbs can't be eta'd       imp <- shouldEtaContractImplicit       case binAppView b of         App u (Arg h' r v)-          | isVar0 v && allowed imp h' && not (freeIn 0 u) ->+          | (r == Irrelevant || isVar0 v) && allowed imp h' && not (freeIn 0 u) ->             return $ subst __IMPOSSIBLE__ u         _ -> return t       where+        isVar0 (Shared p)               = isVar0 (derefPtr p)         isVar0 (Var 0 [])               = True-        isVar0 (DontCare{})             = True  -- Andreas, 2011-10-01 eta-contract irrelevant functions also         isVar0 (Level (Max [Plus 0 l])) = case l of           NeutralLevel v   -> isVar0 v           UnreducedLevel v -> isVar0 v
src/full/Agda/TypeChecking/Forcing.hs view
@@ -6,6 +6,7 @@ import Agda.Syntax.Common import Agda.Syntax.Internal import Agda.TypeChecking.Monad+import Agda.TypeChecking.Irrelevance import Agda.TypeChecking.Reduce import Agda.TypeChecking.Substitute import Agda.Utils.Size@@ -43,9 +44,9 @@         (forcedArgs vs)         (return [])   Pi a (NoAbs _ b) ->-    (++) <$> forcedVariables (unEl $ unArg a)+    (++) <$> forcedVariables (unEl $ unDom a)          <*> forcedVariables (unEl b)-  Pi a b -> (++) <$> forcedVariables (unEl $ unArg a)+  Pi a b -> (++) <$> forcedVariables (unEl $ unDom a)                  <*> (underBinder <$> forcedVariables (unEl $ absBody b))   -- Sorts?   _ -> return []@@ -65,9 +66,9 @@   where     m = maximum (-1:xs)     aux i t | i > m = t-    aux i t = case t of+    aux i t = case ignoreSharingType t of       El s (Pi  a b) -> El s $ Pi  (upd a) (fmap (aux (i + 1)) b)       _ -> __IMPOSSIBLE__       where-        upd a | i `elem` xs = a { argRelevance = Forced }+        upd a | i `elem` xs = a { domRelevance = composeRelevance Forced (domRelevance a) }               | otherwise   = a
src/full/Agda/TypeChecking/Free.hs view
@@ -9,8 +9,8 @@     , relevantVars     , rigidVars     , freeIn, isBinderUsed-    , freeInIgnoringSorts-    , relevantIn+    , freeInIgnoringSorts, freeInIgnoringSortAnn+    , relevantIn, relevantInIgnoringSortAnn     , Occurrence(..)     , occurrence     ) where@@ -40,7 +40,8 @@   { stronglyRigidVars :: VarSet -- ^ variables at top and under constructors   , weaklyRigidVars   :: VarSet -- ^ ord. rigid variables, e.g., in arguments of variables   , flexibleVars      :: VarSet -- ^ variables occuring in arguments of metas. These are potentially free, depending how the meta variable is instantiated.-  , irrelevantVars    :: VarSet -- ^ variables under a @DontCare@, i.e., in irrelevant positions+  , irrelevantVars    :: VarSet -- ^ variables in irrelevant arguments and under a @DontCare@, i.e., in irrelevant positions+  , unusedVars        :: VarSet -- ^ variables in 'UnusedArg'uments   }  rigidVars :: FreeVars -> VarSet@@ -48,7 +49,7 @@  -- | @allVars fv@ includes irrelevant variables. allVars :: FreeVars -> VarSet-allVars fv = Set.unions [rigidVars fv, flexibleVars fv, irrelevantVars fv]+allVars fv = Set.unions [rigidVars fv, flexibleVars fv, irrelevantVars fv, unusedVars fv]  -- | All but the irrelevant variables. relevantVars :: FreeVars -> VarSet@@ -56,17 +57,23 @@  data Occurrence   = NoOccurrence+  | Irrelevantly   | StronglyRigid   | WeaklyRigid   | Flexible+  | Unused   deriving (Eq,Show) +{- NO LONGER -- | @occurrence x fv@ ignores irrelevant variables in @fv@+-} occurrence :: Nat -> FreeVars -> Occurrence occurrence x fv   | x `Set.member` stronglyRigidVars fv = StronglyRigid   | x `Set.member` weaklyRigidVars   fv = WeaklyRigid   | x `Set.member` flexibleVars      fv = Flexible+  | x `Set.member` irrelevantVars    fv = Irrelevantly+  | x `Set.member` unusedVars        fv = Unused   | otherwise                           = NoOccurrence  -- | Mark variables as flexible.  Useful when traversing arguments of metas.@@ -88,47 +95,56 @@ irrelevantly :: FreeVars -> FreeVars irrelevantly fv = empty { irrelevantVars = allVars fv } +-- | Mark all free variables as unused, except for irrelevant vars.+unused :: FreeVars -> FreeVars+unused fv = empty+  { irrelevantVars = irrelevantVars fv+  , unusedVars     = Set.unions [ rigidVars fv, flexibleVars fv, unusedVars fv ]+  }+ -- | Pointwise union. union :: FreeVars -> FreeVars -> FreeVars-union (FV sv1 rv1 fv1 iv1) (FV sv2 rv2 fv2 iv2) =-  FV (Set.union sv1 sv2) (Set.union rv1 rv2) (Set.union fv1 fv2) (Set.union iv1 iv2)+union (FV sv1 rv1 fv1 iv1 uv1) (FV sv2 rv2 fv2 iv2 uv2) =+  FV (Set.union sv1 sv2) (Set.union rv1 rv2) (Set.union fv1 fv2) (Set.union iv1 iv2) (Set.union uv1 uv2)  unions :: [FreeVars] -> FreeVars unions = foldr union empty  empty :: FreeVars-empty = FV Set.empty Set.empty Set.empty Set.empty+empty = FV Set.empty Set.empty Set.empty Set.empty Set.empty  -- | @delete x fv@ deletes variable @x@ from variable set @fv@. delete :: Nat -> FreeVars -> FreeVars-delete n (FV sv rv fv iv) = FV (Set.delete n sv) (Set.delete n rv) (Set.delete n fv) (Set.delete n iv)+delete n (FV sv rv fv iv uv) = FV (Set.delete n sv) (Set.delete n rv) (Set.delete n fv) (Set.delete n iv) (Set.delete n uv)  -- | @subtractFV n fv@ subtracts $n$ from each free variable in @fv@. subtractFV :: Nat -> FreeVars -> FreeVars-subtractFV n (FV sv rv fv iv) = FV (Set.subtract n sv) (Set.subtract n rv) (Set.subtract n fv) (Set.subtract n iv)+subtractFV n (FV sv rv fv iv uv) = FV (Set.subtract n sv) (Set.subtract n rv) (Set.subtract n fv) (Set.subtract n iv) (Set.subtract n uv)  -- | A single (strongly) rigid variable. singleton :: Nat -> FreeVars-singleton x = FV { stronglyRigidVars = Set.singleton x-		 , weaklyRigidVars   = Set.empty -- WAS: Set.singleton x-		 , flexibleVars      = Set.empty-                 , irrelevantVars    = Set.empty-		 }+singleton x = empty { stronglyRigidVars = Set.singleton x }  -- * Collecting free variables.  class Free a where-  freeVars' :: FreeConf -> a -> FreeVars+  freeVars'   :: FreeConf -> a -> FreeVars +-- | Where should we skip sorts in free variable analysis?+data IgnoreSorts+  = IgnoreNot            -- ^ Do not skip.+  | IgnoreInAnnotations  -- ^ Skip when annotation to a type.+  | IgnoreAll            -- ^ Skip unconditionally.+  deriving (Eq, Show)+ data FreeConf = FreeConf-  { fcIgnoreSorts :: Bool-    -- ^ Ignore free variables in sorts.+  { fcIgnoreSorts   :: IgnoreSorts -- ^ Ignore free variables in sorts.   }  -- | Doesn't go inside solved metas, but collects the variables from a -- metavariable application @X ts@ as @flexibleVars@. freeVars :: Free a => a -> FreeVars-freeVars = freeVars' FreeConf{ fcIgnoreSorts = False }+freeVars = freeVars' FreeConf{ fcIgnoreSorts = IgnoreNot }  instance Free Term where   freeVars' conf t = case t of@@ -145,14 +161,17 @@     Level l    -> freeVars' conf l     MetaV _ ts -> flexible $ freeVars' conf ts     DontCare mt -> irrelevantly $ freeVars' conf mt+    Shared p    -> freeVars' conf (derefPtr p)  instance Free Type where-  freeVars' conf (El s t) = freeVars' conf (s, t)+  freeVars' conf (El s t)+    | fcIgnoreSorts conf == IgnoreNot = freeVars' conf (s, t)+    | otherwise                       = freeVars' conf t  instance Free Sort where   freeVars' conf s-    | fcIgnoreSorts conf = empty-    | otherwise          = case s of+    | fcIgnoreSorts conf == IgnoreAll = empty+    | otherwise                       = case s of       Type a     -> freeVars' conf a       Prop       -> empty       Inf        -> empty@@ -182,8 +201,13 @@   freeVars' conf (x,y) = freeVars' conf x `union` freeVars' conf y  instance Free a => Free (Arg a) where-  freeVars' conf = freeVars' conf . unArg+  freeVars' conf (Arg h Irrelevant a) = irrelevantly $ freeVars' conf a+  freeVars' conf (Arg h UnusedArg  a) = unused $ freeVars' conf a+  freeVars' conf (Arg h r          a) = freeVars' conf a +instance Free a => Free (Dom a) where+  freeVars' conf (Dom h r a) = freeVars' conf a+ instance Free a => Free (Abs a) where   freeVars' conf (Abs   _ b) = subtractFV 1 $ delete 0 $ freeVars' conf b   freeVars' conf (NoAbs _ b) = freeVars' conf b@@ -202,10 +226,18 @@  freeInIgnoringSorts :: Free a => Nat -> a -> Bool freeInIgnoringSorts v t =-  v `Set.member` allVars (freeVars' FreeConf{ fcIgnoreSorts = True } t)+  v `Set.member` allVars (freeVars' FreeConf{ fcIgnoreSorts = IgnoreAll } t) +freeInIgnoringSortAnn :: Free a => Nat -> a -> Bool+freeInIgnoringSortAnn v t =+  v `Set.member` allVars (freeVars' FreeConf{ fcIgnoreSorts = IgnoreInAnnotations } t)++relevantInIgnoringSortAnn :: Free a => Nat -> a -> Bool+relevantInIgnoringSortAnn v t =+  v `Set.member` relevantVars (freeVars' FreeConf{ fcIgnoreSorts = IgnoreInAnnotations } t)+ relevantIn :: Free a => Nat -> a -> Bool-relevantIn v t = v `Set.member` relevantVars (freeVars' FreeConf{ fcIgnoreSorts = True } t)+relevantIn v t = v `Set.member` relevantVars (freeVars' FreeConf{ fcIgnoreSorts = IgnoreAll } t)  -- | Is the variable bound by the abstraction actually used? isBinderUsed :: Free a => Abs a -> Bool
src/full/Agda/TypeChecking/Implicit.hs view
@@ -4,11 +4,68 @@ -} module Agda.TypeChecking.Implicit where +import Control.Applicative+import Control.Monad+ import Agda.Syntax.Common+import Agda.Syntax.Internal +import Agda.TypeChecking.Irrelevance+import {-# SOURCE #-} Agda.TypeChecking.MetaVars+import Agda.TypeChecking.Monad+import Agda.TypeChecking.Reduce+import Agda.TypeChecking.Substitute+import Agda.TypeChecking.Telescope+import {-# SOURCE #-} Agda.TypeChecking.InstanceArguments++import Agda.Utils.Size+import Agda.Utils.Tuple+ #include "../undefined.h" import Agda.Utils.Impossible-import Control.Applicative+++-- | @implicitArgs n expand t@ generates up to @n@ implicit arguments+--   metas (unbounded if @n<0@), as long as @t@ is a function type+--   and @expand@ holds on the hiding info of its domain.+implicitArgs :: Int -> (Hiding -> Bool) -> Type -> TCM (Args, Type)+implicitArgs 0 expand t0 = return ([], t0)+implicitArgs n expand t0 = do+    t0' <- reduce t0+    case ignoreSharing $ unEl t0' of+      Pi (Dom h rel a) b | expand h -> do+          when (h == Instance) $ reportSLn "tc.term.args.ifs" 15 $+            "inserting implicit meta for type " ++ show a+          v  <- applyRelevanceToContext rel $ newMeta h (absName b) a+          let arg = Arg h rel v+          mapFst (arg:) <$> implicitArgs (n-1) expand (absApp b v)+      _ -> return ([], t0')+  where+    newMeta Hidden   = newNamedValueMeta RunMetaOccursCheck+    newMeta Instance = initializeIFSMeta+    newMeta _        = __IMPOSSIBLE__++{- UNUSED, BUT DONT REMOVE (Andreas, 2012-07-31)+introImplicits :: (Hiding -> Bool) -> Type -> (Int -> Type -> TCM a) -> TCM a+introImplicits expand t cont = do+  TelV tel t0 <- telViewUpTo' (-1) (expand . domHiding) t+  addCtxTel tel $ cont (size tel) t0+-}++{- POINTLESS, NEEDS TO BE CONTINUATION-PASSING+-- | @introImplicits expand t@ introduces domain types of @t@+--   into the context, as long as @expand@ holds on them.+introImplicits :: (Hiding -> Bool) -> Type -> TCM (Int, Type)+introImplicits expand t = do+  t <- reduce t+  case unEl t of+    Pi dom@(Dom h rel a) b | expand h ->+      addCtxString (absName b) dom $ do+        mapFst (+1) <$> introImplicits expand (absBody b)+    _ -> return (0, t)+-}++---------------------------------------------------------------------------  data ImplicitInsertion       = ImpInsert [Hiding]	  -- ^ this many implicits have to be inserted
src/full/Agda/TypeChecking/Injectivity.hs view
@@ -25,6 +25,7 @@ import {-# SOURCE #-} Agda.TypeChecking.Conversion import Agda.TypeChecking.Pretty import Agda.TypeChecking.Constraints+import Agda.TypeChecking.Polarity import Agda.Utils.List import Agda.Utils.Monad import Agda.Utils.Permutation@@ -38,20 +39,27 @@   -- first, possibly rewrite literal v to constructor form   v <- constructorForm v   reportSDoc "tc.inj.reduce" 30 $ text "reduceHead" <+> prettyTCM v-  case v of+  case ignoreSharing v of     Def f args -> do+      let v0 = Def f []       def <- theDef <$> getConstInfo f       case def of---         Function{ funClauses = [ _ ] }  -> unfoldDefinition False reduceHead v f args-        Datatype{ dataClause = Just _ } -> unfoldDefinition False reduceHead v f args-        Record{ recClause = Just _ }    -> unfoldDefinition False reduceHead v f args+        -- Andreas, 2012-11-06 unfold aliases (single clause terminating functions)+        -- see test/succeed/Issue747+        -- We restrict this to terminating functions to not make the+        -- type checker loop here on non-terminating functions.+        -- see test/fail/TerminationInfiniteRecord+        Function{ funClauses = [ _ ], funDelayed = NotDelayed, funTerminates = Just True }+                                        -> unfoldDefinition False reduceHead v0 f args+        Datatype{ dataClause = Just _ } -> unfoldDefinition False reduceHead v0 f args+        Record{ recClause = Just _ }    -> unfoldDefinition False reduceHead v0 f args         _                               -> return $ notBlocked v     _ -> return $ notBlocked v  headSymbol :: Term -> TCM (Maybe TermHead) headSymbol v = ignoreAbstractMode $ do   v <- ignoreBlocking <$> reduceHead v-  case v of+  case ignoreSharing v of     Def f _ -> do       def <- theDef <$> getConstInfo f       case def of@@ -61,17 +69,24 @@           -- Don't treat axioms in the current mutual block           -- as constructors (they might have definitions we           -- don't know about yet).-          fs <- lookupMutualBlock =<< currentMutualBlock+          fs <- lookupMutualBlock =<< currentOrFreshMutualBlock           if Set.member f fs             then return Nothing             else return (Just $ ConHead f)-        _           -> return Nothing+        Function{}    -> return Nothing+        Primitive{}   -> return Nothing+        Constructor{} -> __IMPOSSIBLE__     Con c _ -> return (Just $ ConHead c)     Sort _  -> return (Just SortHead)     Pi _ _  -> return (Just PiHead)     Lit _   -> return Nothing -- handle literal heads as well? can't think of                               -- any examples where it would be useful...-    _       -> return Nothing+    Lam{}   -> return Nothing+    Var{}   -> return Nothing+    Level{} -> return Nothing+    MetaV{} -> return Nothing+    DontCare{} -> return Nothing+    Shared{}   -> __IMPOSSIBLE__  checkInjectivity :: QName -> [Clause] -> TCM FunctionInverse checkInjectivity f cs@@ -115,7 +130,7 @@  -- | Argument should be on weak head normal form. functionInverse :: Term -> TCM InvView-functionInverse v = case v of+functionInverse v = case ignoreSharing v of   Def f args -> do     d <- theDef <$> getConstInfo f     case d of@@ -130,6 +145,10 @@  useInjectivity :: Comparison -> Type -> Term -> Term -> TCM () useInjectivity cmp a u v = do+  reportSDoc "tc.inj.use" 30 $ fsep $+    pwords "useInjectivity on" +++    [ prettyTCM u, prettyTCM cmp, prettyTCM v, text ":", prettyTCM a+    ]   uinv <- functionInverse u   vinv <- functionInverse v   case (uinv, vinv) of@@ -183,8 +202,7 @@             ]           -- and this is the order the variables occur in the patterns           let ms' = permute (invertP $ compactP perm) ms-          cxt <- getContextTelescope-          let sub = (reverse ms ++ idSub cxt)+          let sub = parallelS (reverse ms)           margs <- runReaderT (evalStateT (metaArgs ps) ms') sub           reportSDoc "tc.inj.invert" 20 $ vcat             [ text "inversion"@@ -194,7 +212,10 @@               , text "type =" <+> prettyTCM ftype               ]             ]-          pol <- getPolarity' cmp f+          -- Since we do not care for the value of non-variant metas here,+          -- we can treat 'Nonvariant' as 'Invariant'.+          -- That ensures these metas do not remain unsolved.+          pol <- purgeNonvariant <$> getPolarity' cmp f           -- The clause might not give as many patterns as there           -- are arguments (point-free style definitions).           let args' = take (length margs) args@@ -219,7 +240,7 @@                , text "which does not expose a constructor"                ]              patternViolation-        `catchError` \err -> case errError err of+        `catchError` \err -> case err of           TypeError   {} -> throwError err           Exception   {} -> throwError err           IOException {} -> throwError err@@ -234,7 +255,7 @@     dotP :: Monad m => Term -> StateT [Term] (ReaderT Substitution m) Term     dotP v = do       sub <- ask-      return $ substs sub v+      return $ applySubst sub v      metaArgs args = mapM metaArg args     metaArg arg = traverse metaPat arg
+ src/full/Agda/TypeChecking/InstanceArguments.hs view
@@ -0,0 +1,274 @@+{-# LANGUAGE CPP #-}++module Agda.TypeChecking.InstanceArguments where++import Control.Applicative+import Control.Monad.Error+import Control.Monad.Reader+import Control.Monad.State+import Data.Map as Map+import Data.List as List++import Agda.Syntax.Common+import Agda.Syntax.Position+import Agda.Syntax.Scope.Base+import Agda.Syntax.Internal++import Agda.TypeChecking.Implicit (implicitArgs)+import Agda.TypeChecking.Irrelevance+import Agda.TypeChecking.Monad+import Agda.TypeChecking.Pretty+import Agda.TypeChecking.Substitute+import Agda.TypeChecking.Reduce++import {-# SOURCE #-} Agda.TypeChecking.Constraints+import {-# SOURCE #-} Agda.TypeChecking.Rules.Term (checkArguments)+import {-# SOURCE #-} Agda.TypeChecking.MetaVars+import {-# SOURCE #-} Agda.TypeChecking.Conversion++import Agda.Utils.Monad++#include "../undefined.h"+import Agda.Utils.Impossible++initialIFSCandidates :: TCM [(Term, Type)]+initialIFSCandidates = do+  cands1 <- getContextVars+  cands2 <- getScopeDefs+  return $ cands1 ++ cands2+  where+    -- get a list of variables with their type, relative to current context+    getContextVars :: TCM [(Term, Type)]+    getContextVars = do+      ctx <- getContext+      let vars = [ (var i, raise (i + 1) t)+                 | (Dom h r (x, t), i) <- zip ctx [0..], not (unusableRelevance r)+                 ]+      -- get let bindings+      env <- asks envLetBindings+      env <- mapM (getOpen . snd) $ Map.toList env+      let lets = [ (v,t) | (v, Dom h r t) <- env, not (unusableRelevance r) ]+      return $ vars ++ lets++    getScopeDefs :: TCM [(Term, Type)]+    getScopeDefs = do+      scopeInfo <- gets stScope+      let ns = everythingInScope scopeInfo+      let nsList = Map.toList $ nsNames ns+      -- all abstract names in scope are candidates+      -- (even ones that you can't refer to unambiguously)+      let qs = List.map anameName $ snd =<< nsList+      rel   <- asks envRelevance+      cands <- mapM (candidate rel) qs+      return $ concat cands++    candidate :: Relevance -> QName -> TCM [(Term, Type)]+    candidate rel q =+      -- Andreas, 2012-07-07:+      -- we try to get the info for q+      -- while opening a module, q may be in scope but not in the signature+      -- in this case, we just ignore q (issue 674)+      flip catchError handle $ do+        def <- getConstInfo q+        let r = defRelevance def+        if not (r `moreRelevant` rel) then return [] else do+          t   <- defType <$> instantiateDef def+          args <- freeVarsToApply q+          let vs = case theDef def of+               -- drop parameters if it's a projection function...+               Function{ funProjection = Just (_,i) } -> genericDrop (i - 1) args+               _                                      -> args+          return [(Def q vs, t)]+      where+        -- unbound constant throws an internal error+        handle (TypeError _ (Closure {clValue = InternalError _})) = return []+        handle err                                                 = throwError err++{- OLD CODE+    getScopeDefs :: TCM [(Term, Type)]+    getScopeDefs = do+      scopeInfo <- gets stScope+      let ns = everythingInScope scopeInfo+      let nsList = Map.toList $ nsNames ns+      -- all abstract names in scope are candidates+      -- (even ones that you can't refer to unambiguously)+      let cands2Names = nsList >>= snd+      cands2Types <- mapM (typeOfConst . anameName) cands2Names+      cands2Rel   <- mapM (relOfConst . anameName) cands2Names+      cands2FV    <- mapM (constrFreeVarsToApply . anameName) cands2Names+      rel         <- asks envRelevance+      return $ [(Def (anameName an) vs, t) |+                    (an, t, r, vs) <- zip4 cands2Names cands2Types cands2Rel cands2FV,+                    r `moreRelevant` rel ]+    constrFreeVarsToApply :: QName -> TCM Args+    constrFreeVarsToApply n = do+      args <- freeVarsToApply n+      defn <- theDef <$> getConstInfo n+      return $ case defn of+        -- drop parameters if it's a projection function...+        Function{ funProjection = Just (rn,i) } -> genericDrop (i - 1) args+        _                                       -> args+-}++-- | @initializeIFSMeta s t@ generates an instance meta of type @t@+--   with suggested name @s@.+initializeIFSMeta :: String -> Type -> TCM Term+initializeIFSMeta s t = do+  cands <- initialIFSCandidates+  newIFSMeta s t cands++-- | @findInScope m (v,a)s@ tries to instantiate on of the types @a@s+--   of the candidate terms @v@s to the type @t@ of the metavariable @m@.+--   If successful, meta @m@ is solved with the instantiation of @v@.+--   If unsuccessful, the constraint is regenerated, with possibly reduced+--   candidate set.+findInScope :: MetaId -> [(Term, Type)] -> TCM ()+findInScope m cands = whenJustM (findInScope' m cands) $ addConstraint . FindInScope m+{- SAME CODE, POINTFULL+  do fisres <- findInScope' m cands+     case fisres of+       Nothing -> return ()+       Just cs -> addConstraint $ FindInScope m cs+-}++-- Result says whether we need to add constraint, and if so, the set of+-- remaining candidates+findInScope' :: MetaId -> [(Term, Type)] -> TCM (Maybe [(Term, Type)])+findInScope' m cands = ifM (isFrozen m) (return (Just cands)) $ do+    reportSDoc "tc.constr.findInScope" 15 $ text ("findInScope 2: constraint: " ++ show m ++ "; candidates left: " ++ show (length cands))+    t <- getMetaTypeInContext m+    reportSDoc "tc.constr.findInScope" 15 $ text "findInScope 3: t =" <+> prettyTCM t+    reportSLn "tc.constr.findInScope" 70 $ "findInScope 3: t: " ++ show t+    mv <- lookupMeta m+    cands <- checkCandidates m t cands+    reportSLn "tc.constr.findInScope" 15 $ "findInScope 4: cands left: " ++ show (length cands)+    case cands of++      [] -> do+        reportSDoc "tc.constr.findInScope" 15 $ text "findInScope 5: not a single candidate found..."+        typeError $ IFSNoCandidateInScope t++      [(term, t')] -> do+        reportSDoc "tc.constr.findInScope" 15 $ text (+          "findInScope 5: one candidate found for type '") <+>+          prettyTCM t <+> text "': '" <+> prettyTCM term <+>+          text "', of type '" <+> prettyTCM t' <+> text "'."++        ca <- liftTCM $ runErrorT $ checkArguments ExpandLast DontExpandInstanceArguments (getRange mv) [] t' t+        case ca of+          Left _ -> __IMPOSSIBLE__+          Right (args, t'') -> do+{- TODO+        (args, t'') <- implicitArgs (...) t'+        do+-}+            leqType t'' t+            ctxArgs <- getContextArgs+            v <- (`applyDroppingParameters` args) =<< reduce term+            assignV m ctxArgs v+            reportSDoc "tc.constr.findInScope" 10 $+              text "solved by instance search:" <+> prettyTCM m+              <+> text ":=" <+> prettyTCM v+            return Nothing++      cs -> do+        reportSDoc "tc.constr.findInScope" 15 $+          text ("findInScope 5: more than one candidate found: ") <+>+          prettyTCM (List.map fst cs)+        return (Just cs)++-- return the meta's type, applied to the current context+getMetaTypeInContext :: MetaId -> TCM Type+getMetaTypeInContext m = do+  mv <- lookupMeta m+  let j = mvJudgement mv+  tj <- getMetaType m+  ctxArgs <- getContextArgs+  normalise $ tj `piApply` ctxArgs++-- returns a refined list of valid candidates and the (normalised) type of the+-- meta, applied to the context (for convenience)+checkCandidates :: MetaId -> Type -> [(Term, Type)] -> TCM [(Term, Type)]+checkCandidates m t cands = localState $ disableDestructiveUpdate $ do+  -- for candidate checking, we don't take into account other IFS+  -- constrains+  dropConstraints (isIFSConstraint . clValue . theConstraint)+  filterM (uncurry $ checkCandidateForMeta m t) cands+  where+    checkCandidateForMeta :: MetaId -> Type -> Term -> Type -> TCM Bool+    checkCandidateForMeta m t term t' =+      verboseBracket "tc.constr.findInScope" 20 ("checkCandidateForMeta " ++ show m) $ do+      liftTCM $ flip catchError handle $ do+        reportSLn "tc.constr.findInScope" 70 $ "  t: " ++ show t ++ "\n  t':" ++ show t' ++ "\n  term: " ++ show term ++ "."+        reportSDoc "tc.constr.findInScope" 20 $ vcat+          [ text "checkCandidateForMeta"+          , text "t    =" <+> prettyTCM t+          , text "t'   =" <+> prettyTCM t'+          , text "term =" <+> prettyTCM term+          ]+        localState $ do+           -- domi: we assume that nothing below performs direct IO (except+           -- for logging and such, I guess)+          ca <- runErrorT $ checkArguments ExpandLast DontExpandInstanceArguments  noRange [] t' t+          case ca of+            Left _ -> return False+            Right (args, t'') -> do+              reportSDoc "tc.constr.findInScope" 20 $+                text "instance search: checking" <+> prettyTCM t''+                <+> text "<=" <+> prettyTCM t+              -- if constraints remain, we abort, but keep the candidate+              flip (ifNoConstraints_ $ leqType t'' t) (const $ return True) $ do+              --tel <- getContextTelescope+              ctxArgs <- getContextArgs+              v <- (`applyDroppingParameters` args) =<< reduce term+              reportSDoc "tc.constr.findInScope" 10 $+                text "instance search: attempting" <+> prettyTCM m+                <+> text ":=" <+> prettyTCM v+              assign m ctxArgs v+--              assign m ctxArgs (term `apply` args)+              -- make a pass over constraints, to detect cases where some are made+              -- unsolvable by the assignment, but don't do this for FindInScope's+              -- to prevent loops. We currently also ignore UnBlock constraints+              -- to be on the safe side.+              solveAwakeConstraints' True+              return True+      where+        handle err = do+          reportSDoc "tc.constr.findInScope" 50 $ text "assignment failed:" <+> prettyTCM err+          return False+    isIFSConstraint :: Constraint -> Bool+    isIFSConstraint FindInScope{} = True+    isIFSConstraint UnBlock{}     = True -- otherwise test/fail/Issue723 loops+    isIFSConstraint _             = False++-- | To preserve the invariant that a constructor is not applied to its+--   parameter arguments, we explicitly check whether function term+--   we are applying to arguments is a unapplied constructor.+--   In this case we drop the first 'conPars' arguments.+--   See Issue670a.+applyDroppingParameters :: Term -> Args -> TCM Term+applyDroppingParameters t vs =+  case ignoreSharing t of+    Con c [] -> do+      def <- theDef <$> getConstInfo c+      case def of+        Constructor {conPars = n} -> return $ Con c (genericDrop n vs)+        _ -> __IMPOSSIBLE__+    _ -> return $ t `apply` vs++-- | Attempt to solve irrelevant metas by instance search.+solveIrrelevantMetas :: TCM ()+solveIrrelevantMetas = mapM_ solveMetaIfIrrelevant =<< getOpenMetas++solveMetaIfIrrelevant :: MetaId -> TCM ()+solveMetaIfIrrelevant x = do+  m <- lookupMeta x+  when (irrelevantOrUnused (getMetaRelevance m)) $ do+    reportSDoc "tc.conv.irr" 20 $ sep+      [ text "instance search for solution of irrelevant meta"+      , prettyTCM x, colon, prettyTCM $ jMetaType $ mvJudgement m+      ]+    flip catchError (const $ return ()) $ do+      findInScope' x =<< initialIFSCandidates+      -- do not add constraints!+      return ()
+ src/full/Agda/TypeChecking/InstanceArguments.hs-boot view
@@ -0,0 +1,7 @@++module Agda.TypeChecking.InstanceArguments where++import Agda.TypeChecking.Monad.Base (TCM)+import Agda.Syntax.Internal (Type, Term)++initializeIFSMeta :: String -> Type -> TCM Term
src/full/Agda/TypeChecking/Irrelevance.hs view
@@ -9,7 +9,7 @@  import qualified Data.Map as Map -import Agda.Interaction.Options+import Agda.Interaction.Options hiding (tests)  import Agda.Syntax.Common @@ -17,14 +17,25 @@  #include "../undefined.h" import Agda.Utils.Impossible+import Agda.Utils.QuickCheck+import Agda.Utils.TestHelpers  -- | data 'Relevance' --   see 'Agda.Syntax.Common' +irrelevantOrUnused :: Relevance -> Bool+irrelevantOrUnused Irrelevant = True+irrelevantOrUnused UnusedArg  = True+irrelevantOrUnused NonStrict  = False+irrelevantOrUnused Relevant   = False+irrelevantOrUnused Forced     = False+ -- | @unusableRelevance rel == True@ iff we cannot use a variable of @rel@. unusableRelevance :: Relevance -> Bool unusableRelevance rel = NonStrict `moreRelevant` rel +-- | 'Relevance' composition.+--   'Irrelevant' is dominant, 'Relevant' is neutral. composeRelevance :: Relevance -> Relevance -> Relevance composeRelevance r r' =   case (r, r') of@@ -34,27 +45,31 @@     (_, NonStrict)  -> NonStrict     (Forced, _)     -> Forced     (_, Forced)     -> Forced+    (UnusedArg, _)  -> UnusedArg+    (_, UnusedArg)  -> UnusedArg     (Relevant, Relevant) -> Relevant  -- | @inverseComposeRelevance r x@ returns the most irrelevant @y@ --   such that forall @x@, @y@ we have---   @x `moreRelevant` (r `composeRelevance` y)@+--   @x \`moreRelevant\` (r \`composeRelevance\` y)@ --   iff---   @(r `inverseComposeRelevance` x) `moreRelevant` y@ (Galois connection).+--   @(r \`inverseComposeRelevance\` x) \`moreRelevant\` y@ (Galois connection). inverseComposeRelevance :: Relevance -> Relevance -> Relevance inverseComposeRelevance r x =   case (r, x) of-    (_, Forced)          -> Forced     -- preserve @Forced@     (Relevant, x)        -> x          -- going to relevant arg.: nothing changes-    (Forced, Relevant)   -> Forced     -- going forced: relevants become forced+    _ | r == x           -> Relevant   -- because Relevant is comp.-neutral+    (UnusedArg, x)       -> x+    (Forced, UnusedArg)  -> Relevant     (Forced, x)          -> x-    (Irrelevant, _)      -> Relevant   -- going irrelevant: every thing usable+    (Irrelevant, x)      -> Relevant   -- going irrelevant: every thing usable     (_, Irrelevant)      -> Irrelevant -- otherwise: irrelevant things remain unusable     (NonStrict, _)       -> Relevant   -- but @NonStrict@s become usable --- | For comparing @Relevance@ ignoring @Forced@.+-- | For comparing @Relevance@ ignoring @Forced@ and @UnusedArg@. ignoreForced :: Relevance -> Relevance ignoreForced Forced     = Relevant+ignoreForced UnusedArg  = Relevant ignoreForced Relevant   = Relevant ignoreForced NonStrict  = NonStrict ignoreForced Irrelevant = Irrelevant@@ -69,40 +84,31 @@ nonStrictToIrr NonStrict = Irrelevant nonStrictToIrr rel       = rel --- * Operations on 'Arg'.+-- * Operations on 'Dom'.  -- | Prepare parts of a parameter telescope for abstraction in constructors --   and projections.-hideAndRelParams :: Arg a -> Arg a+hideAndRelParams :: Dom a -> Dom a hideAndRelParams a = a-  { argRelevance = nonStrictToIrr (argRelevance a)-  , argHiding    = Hidden+  { domRelevance = nonStrictToIrr (domRelevance a)+  , domHiding    = Hidden   } +{- UNUSED -- | @modifyArgRelevance f arg@ applies @f@ to the 'argRelevance' component of @arg@. modifyArgRelevance :: (Relevance -> Relevance) -> Arg a -> Arg a modifyArgRelevance f a = a { argRelevance = f (argRelevance a) }+-}  -- | Used to modify context when going into a @rel@ argument.-inverseApplyRelevance :: Relevance -> Arg a -> Arg a-inverseApplyRelevance rel = modifyArgRelevance (rel `inverseComposeRelevance`)--- inverseApplyRelevance rel a = a { argRelevance = rel `inverseComposeRelevance` argRelevance a }+inverseApplyRelevance :: Relevance -> Dom a -> Dom a+inverseApplyRelevance rel = mapDomRelevance (rel `inverseComposeRelevance`)  -- | Compose two relevance flags. --   This function is used to update the relevance information --   on pattern variables @a@ after a match against something @rel@.-applyRelevance :: Relevance -> Arg a -> Arg a-applyRelevance rel = modifyArgRelevance (rel `composeRelevance`)--- applyRelevance rel a = a { argRelevance = rel `composeRelevance` argRelevance a }--{- Andreas, 2011-04-26: the combination Irrelevant Forced does not arise-applyRelevance Irrelevant a | argRelevance a == Relevant =-  a { argRelevance = Irrelevant }-applyRelevance Forced a | argRelevance a == Relevant =-  a { argRelevance = Forced }-applyRelevance rel a = a -- ^ do nothing if rel == Relevant or a is-                         -- already Forced or Irrelevant--}+applyRelevance :: Relevance -> Dom a -> Dom a+applyRelevance rel = mapDomRelevance (rel `composeRelevance`)  -- * Operations on 'Context'. @@ -122,7 +128,7 @@ workOnTypes' :: Bool -> TCM a -> TCM a workOnTypes' allowed cont =   if allowed then-    liftTCM $ modifyContext (modifyContextEntries $ modifyArgRelevance $ irrToNonStrict) cont+    liftTCM $ modifyContext (modifyContextEntries $ mapDomRelevance $ irrToNonStrict) cont    else cont  -- | (Conditionally) wake up irrelevant variables and make them relevant.@@ -140,7 +146,8 @@           (fmap $ \ (t, a) -> (t, inverseApplyRelevance rel a))           (envLetBindings e)                                                   -- enable local  irr. defs-      , envRelevance = rel                        -- enable global irr. defs+      , envRelevance = composeRelevance rel (envRelevance e)+                                                  -- enable global irr. defs       }  -- | Wake up irrelevant variables and make them relevant.  For instance,@@ -148,14 +155,18 @@ --   may be used, so they are awoken before type checking the argument. wakeIrrelevantVars :: TCM a -> TCM a wakeIrrelevantVars = applyRelevanceToContext Irrelevant-{--wakeIrrelevantVars = local $ \ e -> e-   { envContext = map wakeVar (envContext e) -- enable local  irr. defs-   , envIrrelevant = True                    -- enable global irr. defs-   }-  where wakeVar ce = ce { ctxEntry = makeRelevant (ctxEntry ce) } -applyRelevanceToContext :: Relevance -> TCM a -> TCM a-applyRelevanceToContext Irrelevant cont = wakeIrrelevantVars cont-applyRelevanceToContext _          cont = cont--}++------------------------------------------------------------------------+-- * Tests+------------------------------------------------------------------------++prop_galois :: Relevance -> Relevance -> Relevance -> Bool+prop_galois r x y =+  x `moreRelevant` (r `composeRelevance` y) ==+  (r `inverseComposeRelevance` x) `moreRelevant` y++tests :: IO Bool+tests = runTests "Agda.TypeChecking.Irrelevance"+  [ quickCheck' prop_galois+  ]
src/full/Agda/TypeChecking/Level.hs view
@@ -35,10 +35,10 @@  builtinLevelKit :: TCM (Maybe LevelKit) builtinLevelKit = liftTCM $ do-    level@(Def l []) <- primLevel-    zero@(Def z []) <- primLevelZero-    suc@(Def s []) <- primLevelSuc-    max@(Def m []) <- primLevelMax+    level@(Def l []) <- ignoreSharing <$> primLevel+    zero@(Def z [])  <- ignoreSharing <$> primLevelZero+    suc@(Def s [])   <- ignoreSharing <$> primLevelSuc+    max@(Def m [])   <- ignoreSharing <$> primLevelMax     let a @@ b = a `apply` [defaultArg b]     return $ Just $ LevelKit       { lvlType  = level@@ -61,6 +61,11 @@     Nothing -> sequence_ [primLevel, primLevelZero, primLevelSuc, primLevelMax] >> __IMPOSSIBLE__     Just k  -> return k +unLevel :: Term -> TCM Term+unLevel (Level l)  = reallyUnLevelView l+unLevel (Shared p) = unLevel (derefPtr p)+unLevel v = return v+ reallyUnLevelView :: Level -> TCM Term reallyUnLevelView nv =   case nv of@@ -100,7 +105,7 @@   mmax <- maybePrimDef primLevelMax   let view a = do         a <- reduce a-        case a of+        case ignoreSharing a of           Level l -> return l           Con s [arg]             | Just s == msuc -> inc <$> view (unArg arg)@@ -115,10 +120,10 @@   where     mkAtom a = do       b <- reduceB a-      return $ case b of+      return $ case ignoreSharing <$> b of         NotBlocked (MetaV m as) -> atom $ MetaLevel m as-        NotBlocked a            -> atom $ NeutralLevel a-        Blocked m a             -> atom $ BlockedLevel m a+        NotBlocked _            -> atom $ NeutralLevel (ignoreBlocking b)+        Blocked m _             -> atom $ BlockedLevel m (ignoreBlocking b)      atom a = Max [Plus 0 a] 
src/full/Agda/TypeChecking/LevelConstraints.hs view
@@ -3,24 +3,34 @@  import Data.List +import Agda.Syntax.Common (Nat) import Agda.Syntax.Internal import Agda.TypeChecking.Monad.Base import Agda.TypeChecking.Substitute import Agda.Utils.Size -simplifyLevelConstraint :: Integer -> Constraint -> Constraints -> Constraint+-- | @simplifyLevelConstraint n c cs@ turns an @c@ into an equality+--   constraint if it is an inequality constraint and the reverse+--   inequality is contained in @cs@. Number @n@ is the length+--   of the context @c@ is defined in.+simplifyLevelConstraint :: Int -> Constraint -> Constraints -> Constraint simplifyLevelConstraint n new old =   case inequalities new of     [a :=< b] | elem (b' :=< a') leqs -> LevelCmp CmpEq (Max [a]) (Max [b])-      where (a', b') = raise (-n) (a, b)+      where (a', b') = raise (waterLevel - n) (a, b)     _ -> new   where-    leqs = concatMap (inequalities . unClosure) old--    -- Unclosure converts deBruijn indices to deBruijn levels to-    -- enable comparing constraints under different contexts-    unClosure c = raise (-size (envContext $ clEnv cl)) $ clValue cl+    -- get the constraints plus their "waterLevels", i.e.,+    -- length of contexts they are defined in+    unClosure c = (size (envContext $ clEnv cl), clValue cl)       where cl = theConstraint c+    (ns, ls) = unzip $ map unClosure old+    -- compute the common water level+    waterLevel :: Nat+    waterLevel = maximum (n:ns)+    -- convert deBruijn indices to deBruijn levels to+    -- enable comparing constraints under different contexts+    leqs = concatMap inequalities $ zipWith raise (map (waterLevel -) ns) ls  data Leq = PlusLevel :=< PlusLevel   deriving (Show, Eq)
src/full/Agda/TypeChecking/MetaVars.hs view
@@ -5,23 +5,26 @@ import Control.Monad.Reader import Control.Monad.State import Control.Monad.Error-import Data.Generics+import Data.Function+import Data.Typeable (Typeable) import Data.List as List hiding (sort) import Data.Map (Map) import qualified Data.Map as Map-import qualified Agda.Utils.IO.Locale as LocIO  import Agda.Syntax.Common import qualified Agda.Syntax.Info as Info import Agda.Syntax.Internal+import Agda.Syntax.Internal.Generic import Agda.Syntax.Position import Agda.Syntax.Literal import qualified Agda.Syntax.Abstract as A  import Agda.TypeChecking.Monad import Agda.TypeChecking.Monad.Builtin+import Agda.TypeChecking.Monad.Exception import Agda.TypeChecking.Reduce import Agda.TypeChecking.Substitute+import Agda.TypeChecking.Telescope import Agda.TypeChecking.Constraints import Agda.TypeChecking.Errors import Agda.TypeChecking.Free@@ -29,6 +32,8 @@ import Agda.TypeChecking.Pretty import Agda.TypeChecking.Irrelevance import Agda.TypeChecking.EtaContract+import Agda.TypeChecking.Eliminators+import Agda.TypeChecking.SizedTypes (boundedSizeMetaHook, isSizeProblem)  import Agda.TypeChecking.MetaVars.Occurs @@ -36,8 +41,10 @@  import Agda.Utils.Fresh import Agda.Utils.List+import Agda.Utils.Maybe import Agda.Utils.Monad import Agda.Utils.Size+import Agda.Utils.Tuple import Agda.Utils.Permutation import qualified Agda.Utils.VarSet as Set @@ -90,8 +97,16 @@ --   Further, the meta variable may not be 'Frozen'. assignTerm :: MetaId -> Term -> TCM () assignTerm x t = do+     -- verify (new) invariants+    whenM (isFrozen x) __IMPOSSIBLE__+    assignTerm' x t++-- | Skip frozen check.  Used for eta expanding frozen metas.+assignTerm' :: MetaId -> Term -> TCM ()+assignTerm' x t = do     reportSLn "tc.meta.assign" 70 $ show x ++ " := " ++ show t-    whenM (isFrozen x) __IMPOSSIBLE__  -- verify (new) invariant+     -- verify (new) invariants+    whenM (not <$> asks envAssignMetas) __IMPOSSIBLE__     let i = metaInstance (killRange t)     verboseS "profile.metas" 10 $ liftTCM $ tickMax "max-open-metas" . size =<< getOpenMetas     modifyMetaStore $ ins x i@@ -126,7 +141,7 @@     return $ Type $ Max [Plus 0 $ MetaLevel x vs]  newTypeMeta :: Sort -> TCM Type-newTypeMeta s = El s <$> newValueMeta (sort s)+newTypeMeta s = El s <$> newValueMeta RunMetaOccursCheck (sort s)  newTypeMeta_ ::  TCM Type newTypeMeta_  = newTypeMeta =<< (workOnTypes $ newSortMeta)@@ -135,52 +150,62 @@ -- that it has a sort.  The sort comes from the solution. -- newTypeMeta_  = newTypeMeta Inf --- | Create a new "implicit from scope" metavariable-newIFSMeta ::  Type -> TCM Term-newIFSMeta t = do+-- | @newIFSMeta s t cands@ creates a new "implicit from scope" metavariable+--   of type @t@ with name suggestion @s@ and initial solution candidates @cands@.+newIFSMeta :: MetaNameSuggestion -> Type -> [(Term, Type)] -> TCM Term+newIFSMeta s t cands = do   vs  <- getContextArgs   tel <- getContextTelescope-  newIFSMetaCtx (telePi_ tel t) vs+  newIFSMetaCtx s (telePi_ tel t) vs cands  -- | Create a new value meta with specific dependencies.-newIFSMetaCtx :: Type -> Args -> TCM Term-newIFSMetaCtx t vs = do-  i <- createMetaInfo+newIFSMetaCtx :: MetaNameSuggestion -> Type -> Args -> [(Term, Type)] -> TCM Term+newIFSMetaCtx s t vs cands = do+  reportSDoc "tc.meta.new" 50 $ fsep+    [ text "new ifs meta:"+    , nest 2 $ prettyTCM vs <+> text "|-"+    ]+  i0 <- createMetaInfo+  let i = i0 { miNameSuggestion = s }   let TelV tel _ = telView' t       perm = idP (size tel)   x <- newMeta' OpenIFS i normalMetaPriority perm (HasType () t)   reportSDoc "tc.meta.new" 50 $ fsep-    [ text "new ifs meta:"-    , nest 2 $ prettyTCM vs <+> text "|-"-    , nest 2 $ text (show x) <+> text ":" <+> prettyTCM t+    [ nest 2 $ text (show x) <+> text ":" <+> prettyTCM t     ]-  solveConstraint_ $ FindInScope x+  solveConstraint_ $ FindInScope x cands   return (MetaV x vs) ++newNamedValueMeta :: RunMetaOccursCheck -> MetaNameSuggestion -> Type -> TCM Term+newNamedValueMeta b s t = do+  v <- newValueMeta b t+  setValueMetaName v s+  return v+ -- | Create a new metavariable, possibly η-expanding in the process.-newValueMeta ::  Type -> TCM Term-newValueMeta t = do+newValueMeta :: RunMetaOccursCheck -> Type -> TCM Term+newValueMeta b t = do   vs  <- getContextArgs   tel <- getContextTelescope-  newValueMetaCtx (telePi_ tel t) vs+  newValueMetaCtx b (telePi_ tel t) vs -newValueMetaCtx :: Type -> Args -> TCM Term-newValueMetaCtx t ctx = do-  m@(MetaV i _) <- newValueMetaCtx' t ctx-  instantiateFull m+newValueMetaCtx :: RunMetaOccursCheck -> Type -> Args -> TCM Term+newValueMetaCtx b t ctx =+  instantiateFull =<< newValueMetaCtx' b t ctx  -- | Create a new value meta without η-expanding.-newValueMeta' :: Type -> TCM Term-newValueMeta' t = do+newValueMeta' :: RunMetaOccursCheck -> Type -> TCM Term+newValueMeta' b t = do   vs  <- getContextArgs   tel <- getContextTelescope-  newValueMetaCtx' (telePi_ tel t) vs+  newValueMetaCtx' b (telePi_ tel t) vs  -- | Create a new value meta with specific dependencies.-newValueMetaCtx' :: Type -> Args -> TCM Term-newValueMetaCtx' t vs = do-  i <- createMetaInfo-  let TelV tel _ = telView' t+newValueMetaCtx' :: RunMetaOccursCheck -> Type -> Args -> TCM Term+newValueMetaCtx' b t vs = do+  i <- createMetaInfo' b+  let TelV tel a = telView' t       perm = idP (size tel)   x <- newMeta i normalMetaPriority perm (HasType () t)   reportSDoc "tc.meta.new" 50 $ fsep@@ -189,30 +214,43 @@     , nest 2 $ text (show x) <+> text ":" <+> prettyTCM t     ]   etaExpandMetaSafe x-  return $ MetaV x vs+  -- Andreas, 2012-09-24: for Metas X : Size< u add constraint X+1 <= u+  let u = shared $ MetaV x vs+  boundedSizeMetaHook u tel a+  return u  newTelMeta :: Telescope -> TCM Args newTelMeta tel = newArgsMeta (abstract tel $ El Prop $ Sort Prop) +type Condition = Dom Type -> Abs Type -> Bool+trueCondition _ _ = True+ newArgsMeta :: Type -> TCM Args-newArgsMeta t = do+newArgsMeta = newArgsMeta' trueCondition++newArgsMeta' :: Condition -> Type -> TCM Args+newArgsMeta' condition t = do   args <- getContextArgs   tel  <- getContextTelescope-  newArgsMetaCtx t tel args+  newArgsMetaCtx' condition t tel args  newArgsMetaCtx :: Type -> Telescope -> Args -> TCM Args-newArgsMetaCtx (El s tm) tel ctx = do+newArgsMetaCtx = newArgsMetaCtx' trueCondition++newArgsMetaCtx' :: Condition -> Type -> Telescope -> Args -> TCM Args+newArgsMetaCtx' condition (El s tm) tel ctx = do   tm <- reduce tm-  case tm of-    Pi (Arg h r a) _  -> do-      arg  <- (Arg h r) <$>+  case ignoreSharing tm of+    Pi dom@(Dom h r a) codom | condition dom codom -> do+      arg  <- (Arg h r) <$> do+              applyRelevanceToContext r $                {-                  -- Andreas, 2010-09-24 skip irrelevant record fields when eta-expanding a meta var                  -- Andreas, 2010-10-11 this is WRONG, see Issue 347                 if r == Irrelevant then return DontCare else                 -}-                 newValueMetaCtx (telePi_ tel a) ctx-      args <- newArgsMetaCtx (El s tm `piApply` [arg]) tel ctx+                 newValueMetaCtx RunMetaOccursCheck (telePi_ tel a) ctx+      args <- newArgsMetaCtx' condition (El s tm `piApply` [arg]) tel ctx       return $ arg : args     _  -> return [] @@ -233,8 +271,11 @@  newQuestionMark :: Type -> TCM Term newQuestionMark t = do-  m@(MetaV x _) <- newValueMeta' t-  ii		<- fresh+  -- Do not run check for recursive occurrence of meta in definitions,+  -- because we want to give the recursive solution interactively (Issue 589)+  m  <- newValueMeta' DontRunMetaOccursCheck t+  let MetaV x _ = ignoreSharing m+  ii <- fresh   addInteractionPoint ii x   return m @@ -246,7 +287,8 @@  blockTermOnProblem :: Type -> Term -> ProblemId -> TCM Term blockTermOnProblem t v pid =-  ifM (isProblemSolved pid) (return v) $ do+  -- Andreas, 2012-09-27 do not block on unsolved size constraints+  ifM (isProblemSolved pid `or2M` isSizeProblem pid) (return v) $ do     i   <- createMetaInfo     vs  <- getContextArgs     tel <- getContextTelescope@@ -254,9 +296,9 @@                     i lowMetaPriority (idP $ size tel)                     (HasType () $ telePi_ tel t)                     -- we don't instantiate blocked terms-    escapeContext (size tel) $ addConstraint (Guarded (UnBlock x) pid)+    escapeContextToTopLevel $ addConstraint (Guarded (UnBlock x) pid)     reportSDoc "tc.meta.blocked" 20 $ vcat-      [ text "blocked" <+> prettyTCM x <+> text ":=" <+> escapeContext (size tel) (prettyTCM $ abstract tel v)+      [ text "blocked" <+> prettyTCM x <+> text ":=" <+> escapeContextToTopLevel (prettyTCM $ abstract tel v)       , text "     by" <+> (prettyTCM =<< getConstraintsForProblem pid) ]     inst <- isInstantiatedMeta x     case inst of@@ -266,8 +308,8 @@         -- that we compare against the blocked term once it's unblocked. This way         -- blocked terms can be instantiated before they are unblocked, thus making         -- constraint solving a bit more robust against instantiation order.-        v   <- newValueMeta t-        i   <- liftTCM (fresh :: TCM Integer)+        v   <- newValueMeta DontRunMetaOccursCheck t+        i   <- liftTCM fresh         -- This constraint is woken up when unblocking, so it doesn't need a problem id.         cmp <- buildProblemConstraint 0 (ValueCmp CmpEq t v (MetaV x vs))         listenToMeta (CheckConstraint i cmp) x@@ -277,12 +319,15 @@ -- --   Auxiliary function to create a postponed type checking problem. unblockedTester :: Type -> TCM Bool+unblockedTester t = ifBlocked (unEl t) (\ m t -> return False) (\ t -> return True)+{- OLD CODE unblockedTester t = do   t <- reduceB $ unEl t-  case t of+  case ignoreSharing <$> t of     Blocked{}          -> return False     NotBlocked MetaV{} -> return False     _                  -> return True+-}  -- | Create a postponed type checking problem @e : t@ that waits for type @t@ --   to unblock (become instantiated or its constraints resolved).@@ -296,17 +341,24 @@ --   is added for this meta, which links to this meta. postponeTypeCheckingProblem :: A.Expr -> Type -> TCM Bool -> TCM Term postponeTypeCheckingProblem e t unblock = do-  i   <- createMetaInfo+  i   <- createMetaInfo' DontRunMetaOccursCheck   tel <- getContextTelescope   cl  <- buildClosure (e, t, unblock)   m   <- newMeta' (PostponedTypeCheckingProblem cl)                   i normalMetaPriority (idP (size tel))          $ HasType () $ telePi_ tel t+   -- Create the meta that we actually return-  v   <- newValueMeta t-  i   <- liftTCM (fresh :: TCM Integer)+  -- Andreas, 2012-03-15+  -- This is an alias to the pptc meta, in order to allow pruning (issue 468)+  -- and instantiation.+  -- Since this meta's solution comes from user code, we do not need+  -- to run the extended occurs check (metaOccurs) to exclude+  -- non-terminating solutions.   vs  <- getContextArgs+  v   <- newValueMeta DontRunMetaOccursCheck t   cmp <- buildProblemConstraint 0 (ValueCmp CmpEq t v (MetaV m vs))+  i   <- liftTCM fresh   listenToMeta (CheckConstraint i cmp) m   addConstraint (UnBlock m)   return v@@ -340,7 +392,7 @@     -- ^ Meta variables of \"hereditarily singleton\" record type.   | Levels     -- ^ Meta variables of level type, if type-in-type is activated.-  deriving (Eq, Enum, Bounded)+  deriving (Eq, Enum, Bounded, Show)  -- | All possible metavariable kinds. @@ -352,51 +404,70 @@ etaExpandMeta :: [MetaKind] -> MetaId -> TCM () etaExpandMeta kinds m = whenM (isEtaExpandable m) $ do   verboseBracket "tc.meta.eta" 20 ("etaExpandMeta " ++ show m) $ do-  meta       <- lookupMeta m+  let waitFor x = do+        reportSDoc "tc.meta.eta" 20 $ do+          text "postponing eta-expansion of meta variable" <+>+            prettyTCM m <+>+            text "which is blocked by" <+> prettyTCM x+        listenToMeta (EtaExpand m) x+      dontExpand = do+        reportSDoc "tc.meta.eta" 20 $ do+          text "we do not expand meta variable" <+> prettyTCM m <+>+            text ("(requested was expansion of " ++ show kinds ++ ")")+  meta           <- lookupMeta m   let HasType _ a = mvJudgement meta-  TelV tel b <- telViewM a-  let args	 = [ Arg h r $ Var i []-		   | (i, Arg h r _) <- reverse $ zip [0..] $ reverse $ telToList tel-		   ]-  bb <- reduceB b  -- the target in the type @a@ of @m@-  case unEl <$> bb of+  TelV tel b     <- telView a+{- OLD CODE+  bb             <- reduceB b  -- the target in the type @a@ of @m@+  case ignoreSharing . unEl <$> bb of     -- if the target type of @m@ is a meta variable @x@ itself     -- (@NonBlocked (MetaV{})@),     -- or it is blocked by a meta-variable @x@ (@Blocked@), we cannot     -- eta expand now, we have to postpone this.  Once @x@ is     -- instantiated, we can continue eta-expanding m.  This is realized     -- by adding @m@ to the listeners of @x@.-    Blocked x _               -> listenToMeta (EtaExpand m) x-    NotBlocked (MetaV x _)    -> listenToMeta (EtaExpand m) x+    Blocked x _               -> waitFor x+    NotBlocked (MetaV x _)    -> waitFor x     NotBlocked lvl@(Def r ps) ->+-}+  -- if the target type @b@ of @m@ is a meta variable @x@ itself+  -- (@NonBlocked (MetaV{})@),+  -- or it is blocked by a meta-variable @x@ (@Blocked@), we cannot+  -- eta expand now, we have to postpone this.  Once @x@ is+  -- instantiated, we can continue eta-expanding m.  This is realized+  -- by adding @m@ to the listeners of @x@.+  ifBlocked (unEl b) (\ x _ -> waitFor x) $ \ t -> case ignoreSharing t of+    lvl@(Def r ps) ->       ifM (isEtaRecord r) (do 	let expand = do-              u <- withMetaInfo (mvInfo meta) $ newRecordMetaCtx r ps tel args-              inContext [] $ addCtxTel tel $ do+              u <- abstract tel <$> do withMetaInfo' meta $ newRecordMetaCtx r ps tel $ teleArgs tel+              inTopContext $ do                 verboseS "tc.meta.eta" 15 $ do                   du <- prettyTCM u-                  liftIO $ LocIO.putStrLn $ "eta expanding: " ++ show m ++ " --> " ++ show du-                noConstraints $ assignV m args u  -- should never produce any constraints+                  reportSLn "" 0 $ "eta expanding: " ++ show m ++ " --> " ++ show du+                -- Andreas, 2012-03-29: No need for occurrence check etc.+                -- we directly assign the solution for the meta+                -- 2012-05-23: We also bypass the check for frozen.+                noConstraints $ assignTerm' m u  -- should never produce any constraints         if Records `elem` kinds then           expand-         else if SingletonRecords `elem` kinds then do-          singleton <- isSingletonRecord r ps-          case singleton of-            Left x      -> listenToMeta (EtaExpand m) x-            Right False -> return ()-            Right True  -> expand-         else-          return ()-      ) $ when (Levels `elem` kinds) $ do-        mlvl <- getBuiltin' builtinLevel-        tt   <- typeInType-        if tt && Just lvl == mlvl-         then do-          reportSLn "tc.meta.eta" 20 $ "Expanding level meta to 0 (type-in-type)"-          noConstraints $ assignV m args (Level $ Max [])-         else-          return ()-    _ -> return ()+         else if (SingletonRecords `elem` kinds) then do+           singleton <- isSingletonRecord r ps+           case singleton of+             Left x      -> waitFor x+             Right False -> dontExpand+             Right True  -> expand+          else dontExpand+      ) $ ifM (andM [ return $ Levels `elem` kinds+                      , typeInType+                      , (Just lvl ==) <$> getBuiltin' builtinLevel+                      ]) (do+        reportSLn "tc.meta.eta" 20 $ "Expanding level meta to 0 (type-in-type)"+        -- Andreas, 2012-03-30: No need for occurrence check etc.+        -- we directly assign the solution for the meta+        noConstraints $ assignTerm m (abstract tel $ Level $ Max [])+     ) $ dontExpand+    _ -> dontExpand  -- | Eta expand blocking metavariables of record type, and reduce the -- blocked thing.@@ -422,7 +493,7 @@ --   restoration of the original constraints.  assignV :: MetaId -> Args -> Term -> TCM ()-assignV x args v = do+assignV x args v = ifM (not <$> asks envAssignMetas) patternViolation $ do 	reportSDoc "tc.meta.assign" 10 $ do 	  text "term" <+> prettyTCM (MetaV x args) <+> text ":=" <+> prettyTCM v         liftTCM $ nowSolvingConstraints (assign x args v) `finally` solveAwakeConstraints@@ -430,6 +501,7 @@ -- | @assign sort? x vs v@ assign :: MetaId -> Args -> Term -> TCM () assign x args v = do+         mvar <- lookupMeta x  -- information associated with meta x          -- Andreas, 2011-05-20 TODO!@@ -446,8 +518,8 @@         v <- instantiate v         reportSLn "tc.meta.assign" 50 $ "MetaVars.assign: assigning to " ++ show v -        case (v, mvJudgement mvar) of-            (Sort Inf, HasType{}) -> typeError $ GenericError "Setω is not a valid type."+        case (ignoreSharing v, mvJudgement mvar) of+            (Sort Inf, HasType{}) -> typeError SetOmegaNotValidType             _                     -> return ()          -- We don't instantiate frozen mvars@@ -475,18 +547,25 @@         -- even though the lhs is not a pattern, we can prune the y from _2         let varsL = freeVars args         let relVL = Set.toList $ relevantVars varsL+{- Andreas, 2012-04-02: DontCare no longer present+        -- take away top-level DontCare constructors+        args <- return $ map (fmap stripDontCare) args+-}         -- Andreas, 2011-10-06 only irrelevant vars that are direct         -- arguments to the meta, hence, can be abstracted over, may         -- appear on the rhs.  (test/fail/Issue483b)-        -- let irrVL = Set.toList $ irrelevantVars varsL-        let fromIrrVar (Arg h Irrelevant (Var i [])) = [i]-            fromIrrVar (Arg h Irrelevant (DontCare (Var i []))) = [i]-            fromIrrVar _ = []-        let irrVL = concat $ map fromIrrVar args+        -- Update 2011-03-27: Also irr. vars under record constructors.+        let fromIrrVar (Var i [])   = return [i]+            fromIrrVar (Con c vs)   =+              ifM (isNothing <$> isRecordConstructor c) (return []) $+                concat <$> mapM (fromIrrVar . {- stripDontCare .-} unArg) vs+            fromIrrVar (Shared p)   = fromIrrVar (derefPtr p)+            fromIrrVar _ = return []+        irrVL <- concat <$> mapM fromIrrVar+                   [ v | Arg h r v <- args, irrelevantOrUnused r ]         reportSDoc "tc.meta.assign" 20 $             let pr (Var n []) = text (show n)                 pr (Def c []) = prettyTCM c-                pr (DontCare v) = pr v                 pr _          = text ".."             in vcat                  [ text "mvar args:" <+> sep (map (pr . unArg) args)@@ -504,15 +583,11 @@ 	reportSLn "tc.meta.assign" 15 "passed occursCheck" 	verboseS "tc.meta.assign" 30 $ do 	  let n = size v-	  when (n > 200) $ do-	    d <- sep [ text "size" <+> text (show n)---		     , nest 2 $ text "type" <+> prettyTCM t-		     , nest 2 $ text "term" <+> prettyTCM v-		     ]-	    liftIO $ LocIO.print d--	-- Check that the arguments are variables-	ids <- checkAllVars args+	  when (n > 200) $ reportSDoc "" 0 $+            sep [ text "size" <+> text (show n)+--                , nest 2 $ text "type" <+> prettyTCM t+                , nest 2 $ text "term" <+> prettyTCM v+                ]          -- Check linearity of @ids@         -- Andreas, 2010-09-24: Herein, ignore the variables which are not@@ -523,23 +598,27 @@         reportSDoc "tc.meta.assign" 20 $           text "fvars rhs:" <+> sep (map (text . show) $ Set.toList fvs) -        unless (distinct $ filter (`Set.member` fvs) ids) $ do-          -- non-linear lhs: we cannot solve, but prune-          killResult <- prune x args $ Set.toList fvs-          reportSDoc "tc.meta.assign" 10 $-            text "pruning" <+> prettyTCM x <+> (text $-              if killResult `elem` [PrunedSomething,PrunedEverything] then "succeeded"-               else "failed")-          patternViolation+	-- Check that the arguments are variables+	ids <- do+          res <- runErrorT $ inverseSubst args+          case res of+            -- all args are variables+            Right (Just ids) -> do+              reportSDoc "tc.meta.assign" 50 $+                text "inverseSubst returns:" <+> sep (map prettyTCM ids)+              return ids+            -- we have non-variables, but these are not eliminateable+            Right Nothing    -> attemptPruning x args fvs+            -- we have proper values as arguments which could be cased on+            -- here, we cannot prune, since offending vars could be eliminated+            Left ()          -> patternViolation -{- Andreas, 2011-04-21 this does not work-        if not (distinct $ filter (`Set.member` fvs) ids) then do-          -- non-linear lhs: we cannot solve, but prune-          ok <- prune x args $ Set.toList fvs-          if ok then return [] else patternViolation+        ids <- do+          res <- runErrorT $ checkLinearity (`Set.member` fvs) ids+          case res of+            Right ids -> return ids+            Left ()   -> attemptPruning x args fvs -        else do--}         -- we are linear, so we can solve! 	reportSDoc "tc.meta.assign" 25 $ 	    text "preparing to instantiate: " <+> prettyTCM v@@ -551,13 +630,13 @@ 	    --   ids = d b e 	    -- then 	    --   v' = (λ a b c d e. v) _ 1 _ 2 0-	    tel   <- getContextTelescope-	    gamma <- map defaultArg <$> getContextTerms-	    let iargs = reverse $ zipWith (rename ids) [0..] $ reverse gamma+	    tel <- getContextTelescope+	    let iargs = map (defaultArg . substitute ids) $ downFrom $ size tel 		v'    = raise (size args) (abstract tel v) `apply` iargs-	    return v'+	    -- instantiateFull v'+            return v' -        -- Andreas, 2011-04-18 to work with irrelevant parameters DontCare+        -- Andreas, 2011-04-18 to work with irrelevant parameters         -- we need to construct tel' from the type of the meta variable         -- (no longer from ids which may not be the complete variable list         -- any more)@@ -565,7 +644,7 @@ 	reportSDoc "tc.meta.assign" 15 $ text "type of meta =" <+> prettyTCM t --	reportSDoc "tc.meta.assign" 30 $ text "type of meta =" <+> text (show t) -        TelV tel0 core0 <- telViewM t+        TelV tel0 core0 <- telView t         let n = length args 	reportSDoc "tc.meta.assign" 30 $ text "tel0  =" <+> prettyTCM tel0 	reportSDoc "tc.meta.assign" 30 $ text "#args =" <+> text (show n)@@ -577,58 +656,147 @@  	-- Perform the assignment (and wake constraints). Metas 	-- are top-level so we do the assignment at top-level.-	n <- size <$> getContextTelescope-	escapeContext n $ assignTerm x $ killRange (abstract tel' v')+	inTopContext $ assignTerm x (killRange $ abstract tel' v') 	return ()     where-        -- @ids@ are the lhs variables (metavar arguments)+        -- @ids@ maps lhs variables (metavar arguments) to terms         -- @i@ is the variable from the context Gamma-        rename :: [Nat] -> Nat -> Arg Term -> Arg Term-	rename ids i arg = case findIndex (==i) ids of-	    Just j  -> fmap (const $ Var (fromIntegral j) []) arg-	    Nothing -> fmap (const __IMPOSSIBLE__) arg	-- we will end up here, but never look at the result+        substitute :: [(Nat,Term)] -> Nat -> Term+	substitute ids i = maybe __IMPOSSIBLE__ id $ lookup i ids +        attemptPruning x args fvs = do+          -- non-linear lhs: we cannot solve, but prune+          killResult <- prune x args $ Set.toList fvs+          reportSDoc "tc.meta.assign" 10 $+            text "pruning" <+> prettyTCM x <+> (text $+              if killResult `elem` [PrunedSomething,PrunedEverything] then "succeeded"+               else "failed")+          patternViolation+++-- cannot move this PrettyTCM instance to Typechecking.Pretty+-- because then it conflicts with an instance in Typechecking.Positivity+instance (PrettyTCM a, PrettyTCM b) => PrettyTCM (a,b) where+  prettyTCM (a, b) = parens $ prettyTCM a <> comma <> prettyTCM b+ type FVs = Set.VarSet+type SubstCand = [(Nat,Term)] -- ^ a possibly non-deterministic substitution --- | Check that arguments to a metavar are in pattern fragment.---   Assumes all arguments already in whnf.+instance Error () where+  noMsg = ()++-- | Turn non-det substitution into proper substitution, if possible.+--   The substitution can be restricted to @elemFVs@+checkLinearity :: (Nat -> Bool) -> SubstCand -> ErrorT () TCM SubstCand+checkLinearity elemFVs ids0 = do+  let ids = sortBy (compare `on` fst) $ filter (elemFVs . fst) ids0+  let grps = groupOn fst ids+  concat <$> mapM makeLinear grps+  where+    -- | Non-determinism can be healed if type is singleton. [Issue 593]+    --   (Same as for irrelevance.)+    makeLinear :: SubstCand -> ErrorT () TCM SubstCand+    makeLinear []            = __IMPOSSIBLE__+    makeLinear grp@[_]       = return grp+    makeLinear (p@(i,t) : _) =+      ifM ((Right True ==) <$> do isSingletonTypeModuloRelevance =<< typeOfBV i)+        (return [p])+        (throwError ())++-- Intermediate result in the following function+type Res = Maybe [(Arg Nat, Term)]++-- | Check that arguments @args@ to a metavar are in pattern fragment.+--   Assumes all arguments already in whnf and eta-reduced. --   Parameters are represented as @Var@s so @checkArgs@ really---     checks that all args are @Var@s and returns the---     list of corresponding indices for each arg.---   Linearity has to be checked separately.+--   checks that all args are @Var@s and returns the "substitution"+--   to be applied to the rhs of the equation to solve.+--   (If @args@ is considered a substitution, its inverse is returned.) -----   @reverse@ is necessary because we are directly abstracting over this list @ids@.-checkAllVars :: Args -> TCM [Nat]-checkAllVars args =-  case allVarOrIrrelevant args of-    Nothing -> do-      reportSDoc "tc.meta.assign" 15 $ vcat [ text "not all variables: " <+> prettyTCM args-                                            , text "  aborting assignment" ]-      patternViolation-    Just is -> return $ map unArg is+--   The returned list might not be ordered.+--   Linearity, i.e., whether the substitution is deterministic,+--   has to be checked separately.+--+inverseSubst :: Args -> ErrorT () TCM (Maybe SubstCand)+inverseSubst args = fmap (map (mapFst unArg)) <$> loop (zip args terms)+  where+    loop  = foldM isVarOrIrrelevant (Just [])+    terms = map var (downFrom (size args))+    failure = do+      lift $ reportSDoc "tc.meta.assign" 15 $ vcat+        [ text "not all arguments are variables: " <+> prettyTCM args+        , text "  aborting assignment" ]+      throwError () --- | filter out irrelevant args and check that all others are variables.---   Return the reversed list of variables.-allVarOrIrrelevant :: Args -> Maybe [Arg Nat]-allVarOrIrrelevant args = foldM isVarOrIrrelevant [] args where-  isVarOrIrrelevant vars arg =-    case arg of-      Arg h r (Var i []) -> return $ Arg h r i : removeIrr i vars-      Arg h Irrelevant (DontCare (Var i [])) -> return $ addIrrIfNotPresent h i vars-      -- Andreas, 2011-04-27 keep irrelevant variables-      Arg h Irrelevant _ -> return $ Arg h Irrelevant (-1) : vars -- any impossible deBruijn index will do (see Jason Reed, LFMTP 09 "_" or Nipkow "minus infinity")-      _                  -> Nothing-  -- in case of non-linearity make sure not to count the irrelevant vars-  addIrrIfNotPresent h i vars-    | any (\ (Arg _ _ j) -> j == i) vars = Arg h Irrelevant (-1) : vars-    | otherwise                          = Arg h Irrelevant i    : vars-  removeIrr i = map (\ a@(Arg h r j) ->-    if r == Irrelevant && i == j then Arg h Irrelevant (-1) else a)+    isVarOrIrrelevant :: Res -> (Arg Term, Term) -> ErrorT () TCM Res+    isVarOrIrrelevant vars (arg, t) =+      case ignoreSharing <$> arg of+        -- i := x+        Arg h r (Var i []) -> return $ (Arg h r i, t) `cons` vars +        -- (i, j) := x  becomes  [i := fst x, j := snd x]+        Arg h r (Con c vs) -> do+          isRC <- lift $ isRecordConstructor c+          case isRC of+            Just (_, Record{ recFields = fs }) -> do+                let aux (Arg _ _ v) (Arg h' r' f) =+                      (Arg (min h h') (max r r') v, -- OLD: (stripDontCare v),+                       Def f [defaultArg t])+                res <- loop $ zipWith aux vs fs+                return $ res `append` vars+            Just _ ->  __IMPOSSIBLE__+            Nothing | irrelevantOrUnused r -> return vars+                    | otherwise -> failure +        -- An irrelevant argument which is not an irrefutable pattern is dropped+        Arg h r _ | irrelevantOrUnused r -> return vars++        -- Distinguish args that can be eliminated (Con,Lit,Lam,unsure) ==> failure+        -- from those that can only put somewhere as a whole ==> return Nothing+        Arg _ _ Var{}      -> return $ Nothing -- neutral+        Arg _ _ v@(Def{})  -> do+          elV <- lift $ elimView v+          case elV of+            VarElim{}      -> return $ Nothing -- neutral+            _              -> failure+        Arg _ _ Lam{}      -> failure+        Arg _ _ Lit{}      -> failure+        Arg _ _ MetaV{}    -> failure+        Arg _ _ Pi{}       -> return $ Nothing+        Arg _ _ Sort{}     -> return $ Nothing+        Arg _ _ Level{}    -> return $ Nothing+        Arg _ _ DontCare{} -> __IMPOSSIBLE__++        Arg h r (Shared p) -> isVarOrIrrelevant vars (Arg h r $ derefPtr p, t)++    -- managing an assoc list where duplicate indizes cannot be irrelevant vars+    append :: Res -> Res -> Res+    append Nothing    _    = Nothing+    append (Just res) vars = foldr cons vars res++    -- adding an irrelevant entry only if not present+    cons :: (Arg Nat, Term) -> Res -> Res+    cons a Nothing = Nothing+    cons a@(Arg h Irrelevant i, t) (Just vars)    -- TODO? UnusedArg?!+      | any ((i==) . unArg . fst) vars  = Just vars+      | otherwise                       = Just $ a : vars+    -- adding a relevant entry:+    cons a@(Arg h r          i, t) (Just vars) = Just $ a :+      -- filter out duplicate irrelevants+      filter (not . (\ a@(Arg h r j, t) -> r == Irrelevant && i == j)) vars+ updateMeta :: MetaId -> Term -> TCM () updateMeta mI v = do     mv <- lookupMeta mI-    withMetaInfo (getMetaInfo mv) $ do+    withMetaInfo' mv $ do       args <- getContextArgs       noConstraints $ assignV mI args v++-- | Returns every meta-variable occurrence in the given type, except+-- for those in 'Sort's.++allMetas :: Type -> [MetaId]+allMetas = foldTerm metas+  where+  metas (MetaV m _) = [m]+  metas _           = []
src/full/Agda/TypeChecking/MetaVars.hs-boot view
@@ -1,9 +1,17 @@  module Agda.TypeChecking.MetaVars where -import Agda.Syntax.Internal	    ( MetaId, Term, Sort, Type, Args )-import Agda.TypeChecking.Monad.Base ( TCM )+import Agda.Syntax.Common	    ( Dom )+import Agda.Syntax.Internal	    ( MetaId, Term, Sort, Type, Args, Abs )+import Agda.TypeChecking.Monad.Base ( TCM, RunMetaOccursCheck(..) ) +type Condition = Dom Type -> Abs Type -> Bool+newArgsMeta'      :: Condition -> Type -> TCM Args+newArgsMeta       :: Type -> TCM Args assignTerm        :: MetaId -> Term -> TCM () etaExpandMetaSafe :: MetaId -> TCM () assignV           :: MetaId -> Args -> Term -> TCM ()+assign 		  :: MetaId -> Args -> Term -> TCM ()+newIFSMeta 	  :: String -> Type -> [(Term, Type)] -> TCM Term+newValueMeta      :: RunMetaOccursCheck -> Type -> TCM Term+newNamedValueMeta :: RunMetaOccursCheck -> String -> Type -> TCM Term
src/full/Agda/TypeChecking/MetaVars/Mention.hs view
@@ -24,6 +24,7 @@     Level l      -> mm l     DontCare v   -> False   -- we don't have to look inside don't cares when deciding to wake constraints     MetaV y args -> x == y || mm args   -- TODO: we really only have to look one level deep at meta args+    Shared p     -> mm $ derefPtr p     where       mm v = mentionsMeta x v @@ -55,8 +56,12 @@   mentionsMeta x = mentionsMeta x . unAbs  instance MentionsMeta t => MentionsMeta (Arg t) where-  mentionsMeta x = mentionsMeta x . unArg+  mentionsMeta x (Arg h Irrelevant t) = False  -- we don't have to look inside irrelevant arguments when deciding to wake constraints+  mentionsMeta x a = mentionsMeta x (unArg a) +instance MentionsMeta t => MentionsMeta (Dom t) where+  mentionsMeta x = mentionsMeta x . unDom+ instance MentionsMeta t => MentionsMeta [t] where   mentionsMeta x = any (mentionsMeta x) @@ -95,8 +100,8 @@     UnBlock _           -> True   -- this might be a postponed typechecking                                   -- problem and we don't have a handle on                                   -- what metas it depends on-    FindInScope m       -> True   -- this needs to be woken up for any meta-    IsEmpty t           -> mm t+    FindInScope{}       -> True   -- this needs to be woken up for any meta+    IsEmpty r t         -> mm t     where       mm v = mentionsMeta x v 
src/full/Agda/TypeChecking/MetaVars/Occurs.hs view
@@ -5,6 +5,13 @@ import Control.Applicative import Control.Monad import Control.Monad.Error+import Control.Monad.Reader+import Control.Monad.State++import Data.List+import Data.Maybe+import Data.Set (Set)+import qualified Data.Set import Data.Traversable (traverse)  import Agda.Syntax.Common@@ -15,7 +22,9 @@ import Agda.TypeChecking.Free hiding (Occurrence(..)) import Agda.TypeChecking.Substitute import Agda.TypeChecking.EtaContract-import Agda.TypeChecking.Datatypes (isDataOrRecordType)+import Agda.TypeChecking.Eliminators+import Agda.TypeChecking.Records+import Agda.TypeChecking.Datatypes (isDataOrRecordType, DataOrRecord(..)) import {-# SOURCE #-} Agda.TypeChecking.MetaVars  import Agda.Utils.Monad@@ -26,10 +35,66 @@ import Agda.Utils.Impossible #include "../../undefined.h" +{- To address issue 585 (meta var occurrences in mutual defs)++data B : Set where+  inn : A -> B++out : B -> A+out (inn a) = a++postulate+  P : (y : A) (z : Unit -> B) → Set+  p : (x : Unit -> B) → P (out (x unit)) x++mutual+  d : Unit -> B+  d unit = inn _           -- Y++  g : P (out (d unit)) d+  g = p _             -- X++-- Agda solves  d unit = inn (out (d unit))+--+-- out (X unit) = out (d unit) = out (inn Y) = Y+-- X = d++When doing the occurs check on d, we need to look at the definition of+d to discover that it mentions X.++To this end, we extend the state by names of definitions that have to+be checked when they occur.  At the beginning, this is initialized+with the names in the current mutual block.  Each time we encounter a+name in the list during occurs check, we delete it (if check is+successful).  This way, we do not duplicate work.++-}++modifyOccursCheckDefs :: (Set QName -> Set QName) -> TCM ()+modifyOccursCheckDefs f = modify $ \ st ->+  st { stOccursCheckDefs = f (stOccursCheckDefs st) }++-- | Set the names of definitions to be looked at+--   to the defs in the current mutual block.+initOccursCheck :: MetaVariable -> TCM ()+initOccursCheck mv = modifyOccursCheckDefs . const =<<+  if (miMetaOccursCheck (mvInfo mv) == DontRunMetaOccursCheck)+   then return Data.Set.empty+   else maybe (return Data.Set.empty) lookupMutualBlock =<< asks envMutualBlock++-- | Is a def in the list of stuff to be checked?+defNeedsChecking :: QName -> TCM Bool+defNeedsChecking d = Data.Set.member d <$> gets stOccursCheckDefs++-- | Remove a def from the list of defs to be looked at.+tallyDef :: QName -> TCM ()+tallyDef d = modifyOccursCheckDefs $ \ s -> Data.Set.delete d s+ data OccursCtx   = Flex          -- ^ we are in arguments of a meta   | Rigid         -- ^ we are not in arguments of a meta but a bound var   | StronglyRigid -- ^ we are at the start or in the arguments of a constructor+  | Top           -- ^ we are at the term root (this turns into @StronglyRigid@)   | Irrel         -- ^ we are in an irrelevant argument   deriving (Eq, Show) @@ -44,8 +109,14 @@ unfold NoUnfold  v = NotBlocked <$> instantiate v unfold YesUnfold v = reduceB v +-- | Leave the top position.+leaveTop :: OccursCtx -> OccursCtx+leaveTop Top = StronglyRigid+leaveTop ctx = ctx+ -- | Leave the strongly rigid position. weakly :: OccursCtx -> OccursCtx+weakly Top           = Rigid weakly StronglyRigid = Rigid weakly ctx = ctx @@ -53,7 +124,8 @@ strongly Rigid = StronglyRigid strongly ctx = ctx -abort :: OccursCtx -> TypeError -> TCM ()+abort :: OccursCtx -> TypeError -> TCM a+abort Top           err = typeError err abort StronglyRigid err = typeError err -- here, throw an uncatchable error (unsolvable constraint) abort Flex  _ = patternViolation -- throws a PatternErr, which leads to delayed constraint abort Rigid _ = patternViolation@@ -71,30 +143,26 @@ takeRelevant :: Vars -> [Nat] takeRelevant = fst -underAbs :: Vars -> Vars-underAbs (relVs, irrVs) = (0 : map (1+) relVs, map (1+) irrVs)+liftUnderAbs :: Vars -> Vars+liftUnderAbs (relVs, irrVs) = (0 : map (1+) relVs, map (1+) irrVs)  -- | Extended occurs check. class Occurs t where   occurs :: UnfoldStrategy -> OccursCtx -> MetaId -> Vars -> t -> TCM t+  metaOccurs :: MetaId -> t -> TCM ()  -- raise exception if meta occurs in t  -- | When assigning @m xs := v@, check that @m@ does not occur in @v@ --   and that the free variables of @v@ are contained in @xs@. occursCheck :: MetaId -> Vars -> Term -> TCM Term occursCheck m xs v = liftTCM $ do-  let bailOnSelf v = do-        v <- instantiate v-        case v of-          -- Don't fail if trying to instantiate to just itself-          MetaV m' _ | m == m' -> patternViolation-          Level (Max [Plus 0 (MetaLevel m' _)])-                     | m == m' -> patternViolation-          _ -> return v--  v <- bailOnSelf v+  mv <- lookupMeta m+  initOccursCheck mv+      -- TODO: Can we do this in a better way?+  let redo m = m -- disableDestructiveUpdate m >> m   -- First try without normalising the term-  occurs NoUnfold  StronglyRigid m xs v `catchError` \_ -> do-  occurs YesUnfold StronglyRigid m xs v `catchError` \err -> case errError err of+  redo (occurs NoUnfold  Top m xs v) `catchError` \_ -> do+  initOccursCheck mv+  redo (occurs YesUnfold Top m xs v) `catchError` \err -> case err of                           -- Produce nicer error messages     TypeError _ cl -> case clValue cl of       MetaOccursInItself{} ->@@ -130,54 +198,47 @@       NotBlocked v -> occurs' ctx v     where       occurs' ctx v = case v of-        Var i vs   -> do         -- abort Rigid turns this error into PatternErr-          unless (i `allowedVar` xs) $ abort (strongly ctx) $ MetaCannotDependOn m (takeRelevant xs) i-          Var i <$> occ (weakly ctx) vs-        Lam h f	    -> Lam h <$> occ ctx f-        Level l     -> Level <$> occ ctx l+        Var i vs   -> do+          if (i `allowedVar` xs) then Var i <$> occ (weakly ctx) vs else do+            -- if the offending variable is of singleton type,+            -- eta-expand it away+            isST <- isSingletonType =<< typeOfBV i+            case isST of+              -- cannot decide, blocked by meta-var+              Left mid -> patternViolation+              -- not a singleton type+              Right Nothing -> -- abort Rigid turns this error into PatternErr+                abort (strongly ctx) $ MetaCannotDependOn m (takeRelevant xs) i+              -- is a singleton type with unique inhabitant sv+              Right (Just sv) -> return $ sv `apply` vs+        Lam h f	    -> Lam h <$> occ (leaveTop ctx) f+        Level l     -> Level <$> occ ctx l  -- stay in Top         Lit l	    -> return v         DontCare v  -> DontCare <$> occurs red Irrel m (goIrrelevant xs) v-        Def d vs    -> Def d <$> occDef d ctx vs-        Con c vs    -> Con c <$> occ ctx vs  -- if strongly rigid, remain so-        Pi a b	    -> uncurry Pi <$> occ ctx (a,b)-        Sort s	    -> Sort <$> occ ctx s+        Def d vs    -> Def d <$> occDef d (leaveTop ctx) vs+        Con c vs    -> Con c <$> occ (leaveTop ctx) vs  -- if strongly rigid, remain so+        Pi a b	    -> uncurry Pi <$> occ (leaveTop ctx) (a,b)+        Sort s	    -> Sort <$> occ (leaveTop ctx) s+        v@Shared{}  -> updateSharedTerm (occ ctx) v         MetaV m' vs -> do             -- Check for loop             --   don't fail hard on this, since we might still be on the top-level             --   after some killing (Issue 442)-            when (m == m') $ patternViolation+            when (m == m') $ if ctx == Top then patternViolation else+              abort ctx $ MetaOccursInItself m'              -- The arguments of a meta are in a flexible position             (MetaV m' <$> occurs red Flex m xs vs) `catchError` \err -> do               reportSDoc "tc.meta.kill" 25 $ vcat                 [ text $ "error during flexible occurs check, we are " ++ show ctx-                , text $ show (errError err)+                , text $ show err                 ]-              case errError err of+              case err of                 -- On pattern violations try to remove offending                 -- flexible occurrences (if not already in a flexible context)                 PatternErr{} | ctx /= Flex -> do                       reportSLn "tc.meta.kill" 20 $                         "oops, pattern violation for " ++ show m'-{--                  let kills = map (hasBadRigid xs) $ map unArg vs-                  reportSLn "tc.meta.kill" 20 $-                    "oops, pattern violation for " ++ show m' ++ "\n" ++-                    "  kills: " ++ show kills-                  if not (or kills)-                    then throwError err-                    else do-                      reportSDoc "tc.meta.kill" 10 $ vcat-                        [ text "attempting kills"-                        , nest 2 $ vcat-                          [ text "m'    =" <+> text (show m')-                          , text "xs    =" <+> text (show xs)-                          , text "vs    =" <+> prettyList (map prettyTCM vs)-                          , text "kills =" <+> text (show kills)-                          ]-                        ]-                      ok <- killArgs kills m'--}                       killResult <- prune m' vs (takeRelevant xs)                       if (killResult == PrunedEverything)                         -- after successful pruning, restart occurs check@@ -188,15 +249,69 @@           occ ctx v = occurs red ctx m xs v           -- a data or record type constructor propagates strong occurrences           -- since e.g. x = List x is unsolvable-          occDef d ctx v = ifM (isDataOrRecordType d) (occ ctx v)-                                 (occ (defArgs red ctx) v)+          occDef d ctx vs = do+            def <- theDef <$> getConstInfo d+            whenM (defNeedsChecking d) $ do+              tallyDef d+              metaOccurs m def+            if (defIsDataOrRecord def) then (occ ctx vs) else (occ (defArgs red ctx) vs) +  metaOccurs m v = do+    v <- instantiate v+    case v of+      Var i vs   -> metaOccurs m vs+      Lam h f    -> metaOccurs m f+      Level l    -> metaOccurs m l+      Lit l      -> return ()+      DontCare v -> metaOccurs m v+      Def d vs   -> metaOccurs m d >> metaOccurs m vs+      Con c vs   -> metaOccurs m vs+      Pi a b     -> metaOccurs m (a,b)+      Sort s     -> metaOccurs m s+      Shared p   -> metaOccurs m $ derefPtr p+      MetaV m' vs | m == m' -> patternViolation+                  | otherwise -> metaOccurs m vs++instance Occurs QName where+  occurs red ctx m xs d = __IMPOSSIBLE__++  metaOccurs m d = whenM (defNeedsChecking d) $ do+    tallyDef d+    metaOccurs m . theDef =<< getConstInfo d++instance Occurs Defn where+  occurs red ctx m xs def = __IMPOSSIBLE__++  metaOccurs m Axiom{}                      = return ()+  metaOccurs m Function{ funClauses = cls } = metaOccurs m cls+  -- since a datatype is isomorphic to the sum of its constructor types+  -- we check the constructor types+  metaOccurs m Datatype{ dataCons = cs }    = mapM_ mocc cs+    where mocc c = metaOccurs m . defType =<< getConstInfo c+  metaOccurs m Record{ recConType = v }     = metaOccurs m v+  metaOccurs m Constructor{}                = return ()+  metaOccurs m Primitive{}                  = return ()++instance Occurs Clause where+  occurs red ctx m xs cl = __IMPOSSIBLE__++  metaOccurs m (Clause { clauseBody = body }) = walk body+    where walk NoBody   = return ()+          walk (Body v) = metaOccurs m v+          walk (Bind b) = underAbstraction_ b walk+ instance Occurs Level where   occurs red ctx m xs (Max as) = Max <$> occurs red ctx m xs as +  metaOccurs m (Max as) = metaOccurs m as+ instance Occurs PlusLevel where   occurs red ctx m xs l@ClosedLevel{} = return l-  occurs red ctx m xs (Plus n l) = Plus n <$> occurs red ctx m xs l+  occurs red ctx m xs (Plus n l) = Plus n <$> occurs red ctx' m xs l+    where ctx' | n == 0    = ctx+               | otherwise = leaveTop ctx  -- we leave Top only if we encounter at least one successor+  metaOccurs m ClosedLevel{} = return ()+  metaOccurs m (Plus n l)    = metaOccurs m l  instance Occurs LevelAtom where   occurs red ctx m xs l = do@@ -205,15 +320,26 @@            NoUnfold  -> instantiate l     case l of       MetaLevel m' args -> do-        MetaV m' args <- occurs red ctx m xs (MetaV m' args)+        MetaV m' args <- ignoreSharing <$> occurs red ctx m xs (MetaV m' args)         return $ MetaLevel m' args       NeutralLevel v   -> NeutralLevel   <$> occurs red ctx m xs v       BlockedLevel m v -> BlockedLevel m <$> occurs red Flex m xs v       UnreducedLevel v -> UnreducedLevel <$> occurs red ctx m xs v +  metaOccurs m l = do+    l <- instantiate l+    case l of+      MetaLevel m' args -> metaOccurs m (MetaV m' args)+      NeutralLevel v    -> metaOccurs m v+      BlockedLevel m v  -> metaOccurs m v+      UnreducedLevel v  -> metaOccurs m v++ instance Occurs Type where   occurs red ctx m xs (El s v) = uncurry El <$> occurs red ctx m xs (s,v) +  metaOccurs m (El s v) = metaOccurs m (s,v)+ instance Occurs Sort where   occurs red ctx m xs s = do     s' <- case red of@@ -225,19 +351,45 @@       Prop       -> return s'       Inf        -> return s' -instance Occurs a => Occurs (Abs a) where-  occurs red ctx m xs (Abs   s x) = Abs   s <$> occurs red ctx m (underAbs xs) x-  occurs red ctx m xs (NoAbs s x) = NoAbs s <$> occurs red ctx m xs x+  metaOccurs m s = do+    s <- instantiate s+    case s of+      DLub s1 s2 -> metaOccurs m (s1,s2)+      Type a     -> metaOccurs m a+      Prop       -> return ()+      Inf        -> return () +++instance (Occurs a, Subst a) => Occurs (Abs a) where+  occurs red ctx m xs b@(Abs   s x) = Abs   s <$> underAbstraction_ b (occurs red ctx m (liftUnderAbs xs))+  occurs red ctx m xs b@(NoAbs s x) = NoAbs s <$> occurs red ctx m xs x++  metaOccurs m (Abs   s x) = metaOccurs m x+  metaOccurs m (NoAbs s x) = metaOccurs m x+ instance Occurs a => Occurs (Arg a) where-  occurs red ctx m xs (Arg h r x) = Arg h r <$> occurs red ctx m xs x+  occurs red ctx m xs (Arg h r@Irrelevant{} x) = Arg h r <$>+    occurs red Irrel m (goIrrelevant xs) x+  occurs red ctx m xs (Arg h r              x) = Arg h r <$>+    occurs red ctx m xs x +  metaOccurs m a = metaOccurs m (unArg a)++instance Occurs a => Occurs (Dom a) where+  occurs red ctx m xs (Dom h r x) = Dom h r <$> occurs red ctx m xs x+  metaOccurs m = metaOccurs m . unDom+ instance (Occurs a, Occurs b) => Occurs (a,b) where   occurs red ctx m xs (x,y) = (,) <$> occurs red ctx m xs x <*> occurs red ctx m xs y +  metaOccurs m (x,y) = metaOccurs m x >> metaOccurs m y+ instance Occurs a => Occurs [a] where   occurs red ctx m xs ys = mapM (occurs red ctx m xs) ys +  metaOccurs m ys = mapM_ (metaOccurs m) ys+ -- * Getting rid of flexible occurrences  -- | @prune m' vs xs@ attempts to remove all arguments from @vs@ whose@@ -246,7 +398,7 @@ --   return @True@ else @False@. prune :: MetaId -> Args -> [Nat] -> TCM PruneResult prune m' vs xs = liftTCM $ do-  let kills = map (hasBadRigid xs) $ map unArg vs+  kills <- mapM (hasBadRigid xs) $ map unArg vs   reportSDoc "tc.meta.kill" 10 $ vcat     [ text "attempting kills"     , nest 2 $ vcat@@ -268,13 +420,43 @@  -- | @hasBadRigid xs v = True@ iff one of the rigid variables in @v@ is not in @xs@. --   Actually we can only prune if a bad variable is in the head. See issue 458.-hasBadRigid :: [Nat] -> Term -> Bool-hasBadRigid xs (Var v _) = notElem v xs-hasBadRigid xs _         = False-  -- not $ Set.isSubsetOf-  --   (rigidVars $ freeVars v)-  --   (Set.fromList xs)+--   Or in a non-eliminateable position (see succeed/PruningNonMillerPattern).+hasBadRigid :: [Nat] -> Term -> TCM Bool+hasBadRigid xs (Var x _)    = return $ notElem x xs+hasBadRigid xs (Lam _ v)    = hasBadRigid (0 : map (+1) xs) (absBody v)+hasBadRigid xs (DontCare v) = hasBadRigid xs v+-- The following types of arguments cannot be eliminated by a pattern+-- match: data, record, Pi, levels, sorts+-- Thus, their offending rigid variables are bad.+hasBadRigid xs v@(Def f vs) =+  ifM (isJust <$> isDataOrRecordType f) (return $ vs `rigidVarsNotContainedIn` xs) $ do+    elV <- elimView v+    case elV of+      VarElim x els -> return $ notElem x xs+      _             -> return $ False+  -- Andreas, 2012-05-03: There is room for further improvement.+  -- We could also consider a defined f which is not blocked by a meta.+hasBadRigid xs (Pi a b)     = return $ (a,b) `rigidVarsNotContainedIn` xs+hasBadRigid xs (Level v)    = return $ v `rigidVarsNotContainedIn` xs+hasBadRigid xs (Sort s)     = return $ s `rigidVarsNotContainedIn` xs+-- Since constructors can be eliminated by pattern-matching,+-- offending variables under a constructor could be removed by+-- the right instantiation of the meta variable.+-- Thus, they are not rigid.+hasBadRigid xs Con{}        = return $ False+hasBadRigid xs Lit{}        = return $ False -- no variables in Lit+hasBadRigid xs MetaV{}      = return $ False -- no rigid variables under a meta+hasBadRigid xs (Shared p)   = hasBadRigid xs (derefPtr p) +-- This could be optimized, by not computing the whole variable set+-- at once, but allow early failure+rigidVarsNotContainedIn :: Free a => a -> [Nat] -> Bool+rigidVarsNotContainedIn v xs =+  not $ Set.isSubsetOf+    (rigidVars $ freeVars v)+    (Set.fromList xs)++ data PruneResult   = NothingToPrune   -- ^ the kill list is empty or only @False@s   | PrunedNothing    -- ^ there is no possible kill (because of type dep.)@@ -328,18 +510,17 @@         ]  -- | @killedType [((x1,a1),k1)..((xn,an),kn)] b = ([k'1..k'n],t')@---   (ignoring @Arg@).  Let @t' = (xs:as) -> b@.+--   (ignoring @Dom@).  Let @t' = (xs:as) -> b@. --   Invariant: @k'i == True@ iff @ki == True@ and pruning the @i@th argument from --   type @b@ is possible without creating unbound variables. --   @t'@ is type @t@ after pruning all @k'i==True@.-killedType :: [(Arg (String, Type), Bool)] -> Type -> ([Arg Bool], Type)+killedType :: [(Dom (String, Type), Bool)] -> Type -> ([Arg Bool], Type) killedType [] b = ([], b)-killedType ((arg, kill) : kills) b-  | dontKill  = (killed False : args, telePi (telFromList [arg]) b')-  | otherwise = (killed True  : args, subst __IMPOSSIBLE__ b')+killedType ((arg@(Dom h r _), kill) : kills) b+  | dontKill  = (Arg h r False : args, mkPi arg b') -- OLD: telePi (telFromList [arg]) b')+  | otherwise = (Arg h r True  : args, subst __IMPOSSIBLE__ b')   where     (args, b') = killedType kills b-    killed k = fmap (const k) arg     dontKill = not kill || 0 `freeIn` b'  -- The list starts with the last argument@@ -353,13 +534,16 @@                 (HasType __IMPOSSIBLE__ a)   -- Andreas, 2010-10-15 eta expand new meta variable if necessary   etaExpandMetaSafe m'-  let vars = reverse [ Arg h r (Var i []) | (i, Arg h r False) <- zip [0..] kills ]+  let vars = reverse [ Arg h r (var i) | (i, Arg h r False) <- zip [0..] kills ]+      lam b a = Lam (argHiding a) (Abs "v" b)+      u       = foldl' lam (MetaV m' vars) kills+{- OLD CODE       hs   = reverse [ argHiding a | a <- kills ]       lam h b = Lam h (Abs "v" b)       u       = foldr lam (MetaV m' vars) hs+-}   dbg m' u   assignTerm m u-  return ()   where     dbg m' u = reportSDoc "tc.meta.kill" 10 $ vcat       [ text "actual killing"
src/full/Agda/TypeChecking/Monad.hs view
@@ -10,6 +10,7 @@     , module Agda.TypeChecking.Monad.Mutual     , module Agda.TypeChecking.Monad.Open     , module Agda.TypeChecking.Monad.Options+    , module Agda.TypeChecking.Monad.Sharing     , module Agda.TypeChecking.Monad.Signature     , module Agda.TypeChecking.Monad.SizedTypes     , module Agda.TypeChecking.Monad.State@@ -28,6 +29,7 @@ import Agda.TypeChecking.Monad.Mutual import Agda.TypeChecking.Monad.Options import Agda.TypeChecking.Monad.Open+import Agda.TypeChecking.Monad.Sharing import Agda.TypeChecking.Monad.Signature import Agda.TypeChecking.Monad.SizedTypes import Agda.TypeChecking.Monad.State
src/full/Agda/TypeChecking/Monad/Base.hs view
@@ -6,6 +6,8 @@ module Agda.TypeChecking.Monad.Base where  import Control.Arrow+import qualified Control.Concurrent as C+import Control.DeepSeq import Control.Exception as E import Control.Monad.Error import Control.Monad.State@@ -15,11 +17,12 @@ import Data.Int import Data.Map as Map import Data.Set as Set-import Data.Generics+import Data.Sequence as Seq+import Data.Typeable (Typeable) import Data.Foldable import Data.Traversable import Data.IORef-import System.Time+import Data.Hashable  import Agda.Syntax.Common import qualified Agda.Syntax.Concrete as C@@ -28,6 +31,7 @@ import Agda.Syntax.Internal import Agda.Syntax.Position import Agda.Syntax.Scope.Base+import Agda.Utils.HashMap as HMap  import Agda.TypeChecking.CompiledClause @@ -35,7 +39,11 @@ import {-# SOURCE #-} Agda.Interaction.FindFile import Agda.Interaction.Options import qualified Agda.Interaction.Highlighting.Range as R-import Agda.Interaction.Highlighting.Precise (HighlightingInfo)+import {-# SOURCE #-} Agda.Interaction.Response+  (InteractionOutputCallback, defaultInteractionOutputCallback)+import Agda.Interaction.Highlighting.Precise+  (CompressedFile, HighlightingInfo)+import Data.Monoid  import qualified Agda.Compiler.JS.Syntax as JS @@ -44,6 +52,7 @@ import Agda.Utils.Monad import Agda.Utils.Permutation import Agda.Utils.Pretty+import Agda.Utils.Time  #include "../../undefined.h" import Agda.Utils.Impossible@@ -54,10 +63,20 @@  data TCState =     TCSt { stFreshThings       :: FreshThings+         , stSyntaxInfo        :: CompressedFile+           -- ^ Highlighting info.+         , stTokens            :: CompressedFile+           -- ^ Highlighting info for tokens (but not those tokens for+           -- which highlighting exists in 'stSyntaxInfo').+         , stTermErrs          :: Seq TerminationError 	 , stMetaStore	       :: MetaStore 	 , stInteractionPoints :: InteractionPoints 	 , stAwakeConstraints    :: Constraints 	 , stSleepingConstraints :: Constraints+         , stDirty               :: Bool+         , stOccursCheckDefs   :: Set QName+           -- ^ Definitions to be considered during occurs check.+           --   Initialized to the current mutual block before the check. 	 , stSignature	       :: Signature 	 , stImports	       :: Signature 	 , stImportedModules   :: Set ModuleName@@ -67,6 +86,8 @@            -- ^ The current module is available after it has been type            -- checked. 	 , stScope	       :: ScopeInfo+         , stPatternSyns       :: A.PatternSynDefns+         , stPatternSynImports :: A.PatternSynDefns 	 , stPragmaOptions     :: PragmaOptions            -- ^ Options applying to the current file. @OPTIONS@            -- pragmas only affect this field.@@ -79,6 +100,10 @@            -- ^ Imports that should be generated by the compiler (this            -- includes imports from imported modules).          , stPersistent        :: PersistentTCState+         , stInteractionOutputCallback  :: InteractionOutputCallback+           -- ^ Callback fuction to call when there is a response+           --   to give to the interactive frontend.+           --   See the documentation of 'InteractionOutputCallback'. 	 }  -- | A part of the state which is not reverted when an error is thrown@@ -97,7 +122,7 @@ 	      , fName	     :: NameId 	      , fCtx	     :: CtxId               , fProblem     :: ProblemId-              , fInteger     :: Integer+              , fInt         :: Int                 -- ^ Can be used for various things. 	      }     deriving (Show)@@ -106,9 +131,14 @@ initState =     TCSt { stFreshThings       = (Fresh 0 0 0 (NameId 0 0) 0 0 0) { fProblem = 1 } 	 , stMetaStore	       = Map.empty+	 , stSyntaxInfo        = mempty+	 , stTokens            = mempty+	 , stTermErrs          = Seq.empty 	 , stInteractionPoints = Map.empty 	 , stAwakeConstraints    = [] 	 , stSleepingConstraints = []+         , stDirty               = False+         , stOccursCheckDefs   = Set.empty 	 , stSignature	       = emptySignature 	 , stImports	       = emptySignature 	 , stImportedModules   = Set.empty@@ -116,7 +146,9 @@ 	 , stVisitedModules    = Map.empty          , stCurrentModule     = Nothing 	 , stScope	       = emptyScopeInfo-	 , stPragmaOptions     = optPragmaOptions $ defaultOptions+	 , stPatternSyns       = Map.empty+         , stPatternSynImports = Map.empty+	 , stPragmaOptions     = defaultInteractionOptions 	 , stStatistics	       = Map.empty          , stExtLambdaTele     = Map.empty 	 , stMutualBlocks      = Map.empty@@ -127,6 +159,7 @@            { stPersistentOptions = defaultOptions 	   , stDecodedModules    = Map.empty            }+         , stInteractionOutputCallback = defaultInteractionOutputCallback 	 }  stBuiltinThings :: TCState -> BuiltinThings PrimFun@@ -157,13 +190,13 @@ 	where 	    i = fCtx s -instance HasFresh Integer FreshThings where-    nextFresh s = (i, s { fInteger = succ i })+instance HasFresh Int FreshThings where+    nextFresh s = (i, s { fInt = succ i }) 	where-	    i = fInteger s+	    i = fInt s  newtype ProblemId = ProblemId Nat-  deriving (Typeable, Data, Eq, Ord, Enum, Real, Integral, Num)+  deriving (Typeable, Eq, Ord, Enum, Real, Integral, Num)  instance Show ProblemId where   show (ProblemId n) = show n@@ -207,7 +240,7 @@ 	, iScope	   :: Map ModuleName Scope         , iInsideScope     :: ScopeInfo 	, iSignature	   :: Signature-	, iBuiltin	   :: BuiltinThings String+	, iBuiltin	   :: BuiltinThings (String, QName)         , iHaskellImports  :: Set String                               -- ^ Haskell imports listed in                               -- (transitively) imported modules are@@ -215,8 +248,9 @@         , iHighlighting    :: HighlightingInfo         , iPragmaOptions   :: [OptionsPragma]                               -- ^ Pragma options set in the file.+        , iPatternSyns     :: A.PatternSynDefns 	}-    deriving (Typeable, Data, Show)+    deriving (Typeable, Show)  --------------------------------------------------------------------------- -- ** Closure@@ -227,7 +261,7 @@ 			 , clScope	:: ScopeInfo 			 , clValue	:: a 			 }-    deriving (Typeable, Data)+    deriving (Typeable)  instance Show a => Show (Closure a) where   show cl = "Closure " ++ show (clValue cl)@@ -261,22 +295,29 @@   | TelCmp Type Type Comparison Telescope Telescope -- ^ the two types are for the error message only   | SortCmp Comparison Sort Sort   | LevelCmp Comparison Level Level+--  | ShortCut MetaId Term Type+--    -- ^ A delayed instantiation.  Replaces @ValueCmp@ in 'postponeTypeCheckingProblem'.   | UnBlock MetaId   | Guarded Constraint ProblemId-  | IsEmpty Type-  | FindInScope MetaId+  | IsEmpty Range Type+    -- ^ the range is the one of the absurd pattern+  | FindInScope MetaId [(Term, Type)]   deriving (Typeable, Show)  data Comparison = CmpEq | CmpLeq-  deriving (Eq, Typeable, Show)+  deriving (Eq, Typeable) +instance Show Comparison where+  show CmpEq  = "="+  show CmpLeq = "=<"+ --------------------------------------------------------------------------- -- * Open things ---------------------------------------------------------------------------  -- | A thing tagged with the context it came from. data Open a = OpenThing [CtxId] a-    deriving (Typeable, Data, Show, Functor)+    deriving (Typeable, Show, Functor)  --------------------------------------------------------------------------- -- * Judgements@@ -287,7 +328,7 @@ data Judgement t a 	= HasType { jMetaId :: a, jMetaType :: t } 	| IsSort  { jMetaId :: a, jMetaType :: t } -- Andreas, 2011-04-26: type needed for higher-order sort metas-    deriving (Typeable, Data, Functor, Foldable, Traversable)+    deriving (Typeable, Functor, Foldable, Traversable)  instance (Show t, Show a) => Show (Judgement t a) where     show (HasType a t) = show a ++ " : " ++ show t@@ -355,17 +396,43 @@ newtype MetaPriority = MetaPriority Int     deriving (Eq, Ord, Show) --- | TODO: Not so nice.-type MetaInfo = Closure Range+data RunMetaOccursCheck+  = RunMetaOccursCheck+  | DontRunMetaOccursCheck+  deriving (Eq, Ord, Show) +-- | @MetaInfo@ is cloned from one meta to the next during pruning.+data MetaInfo = MetaInfo+  { miClosRange       :: Closure Range -- TODO: Not so nice. But we want both to have the environment of the meta (Closure) and its range.+--  , miRelevance       :: Relevance          -- ^ Created in irrelevant position?+  , miMetaOccursCheck :: RunMetaOccursCheck -- ^ Run the extended occurs check that goes in definitions?+  , miNameSuggestion  :: MetaNameSuggestion+    -- ^ Used for printing.+    --   @Just x@ if meta-variable comes from omitted argument with name @x@.+  }++-- | Name suggestion for meta variable.  Empty string means no suggestion.+type MetaNameSuggestion = String++-- | For printing, we couple a meta with its name suggestion.+data NamedMeta = NamedMeta+  { nmSuggestion :: MetaNameSuggestion+  , nmid         :: MetaId+  }++instance Show NamedMeta where+  show (NamedMeta "" x) = show x+  show (NamedMeta s  x) = "_" ++ s ++ show x+ type MetaStore = Map MetaId MetaVariable  instance HasRange MetaVariable where     getRange m = getRange $ getMetaInfo m  instance SetRange MetaVariable where-  setRange r (MetaVar mi p perm j inst ls frozen) =-    MetaVar (mi {clValue = r}) p perm j inst ls frozen+  setRange r m = m { mvInfo = (mvInfo m)+                     { miClosRange = (miClosRange (mvInfo m))+                       { clValue = r }}}  normalMetaPriority :: MetaPriority normalMetaPriority = MetaPriority 0@@ -376,8 +443,8 @@ highMetaPriority :: MetaPriority highMetaPriority = MetaPriority 10 -getMetaInfo :: MetaVariable -> MetaInfo-getMetaInfo = mvInfo+getMetaInfo :: MetaVariable -> Closure Range+getMetaInfo = miClosRange . mvInfo  getMetaScope :: MetaVariable -> ScopeInfo getMetaScope m = clScope $ getMetaInfo m@@ -388,6 +455,9 @@ getMetaSig :: MetaVariable -> Signature getMetaSig m = clSignature $ getMetaInfo m +getMetaRelevance :: MetaVariable -> Relevance+getMetaRelevance = envRelevance . getMetaEnv+ --------------------------------------------------------------------------- -- ** Interaction meta variables ---------------------------------------------------------------------------@@ -408,10 +478,10 @@       { sigSections    :: Sections       , sigDefinitions :: Definitions       }-  deriving (Typeable, Data, Show)+  deriving (Typeable, Show)  type Sections	 = Map ModuleName Section-type Definitions = Map QName Definition+type Definitions = HashMap QName Definition  data Section = Section       { secTelescope :: Telescope@@ -422,10 +492,10 @@ 				    --	 section to when translating from 				    --	 abstract to internal syntax.       }-  deriving (Typeable, Data, Show)+  deriving (Typeable, Show)  emptySignature :: Signature-emptySignature = Sig Map.empty Map.empty+emptySignature = Sig Map.empty HMap.empty  data DisplayForm = Display Nat [Term] DisplayTerm 		-- ^ The three arguments are:@@ -436,28 +506,30 @@ 		--     represents pattern vars. There should @n@ of them. 		-- 		--   * Display form. @n@ free variables.-  deriving (Typeable, Data, Show)+  deriving (Typeable, Show)  data DisplayTerm = DWithApp [DisplayTerm] Args                  | DCon QName [Arg DisplayTerm]                  | DDef QName [Arg DisplayTerm]                  | DDot Term 		 | DTerm Term-  deriving (Typeable, Data, Show)+  deriving (Typeable, Show)  defaultDisplayForm :: QName -> [Open DisplayForm] defaultDisplayForm c = []  data Definition = Defn-  { defRelevance   :: Relevance -- ^ Some defs can be irrelevant (but not hidden).-  , defName        :: QName-  , defType        :: Type	      -- ^ Type of the lifted definition.-  , defDisplay     :: [Open DisplayForm]-  , defMutual      :: MutualId-  , defCompiledRep :: CompiledRepresentation-  , theDef         :: Defn+  { defRelevance      :: Relevance -- ^ Some defs can be irrelevant (but not hidden).+  , defName           :: QName+  , defType           :: Type	      -- ^ Type of the lifted definition.+  , defPolarity       :: [Polarity]+  , defArgOccurrences :: [Occurrence]+  , defDisplay        :: [Open DisplayForm]+  , defMutual         :: MutualId+  , defCompiledRep    :: CompiledRepresentation+  , theDef            :: Defn   }-    deriving (Typeable, Data, Show)+    deriving (Typeable, Show)  type HaskellCode = String type HaskellType = String@@ -467,33 +539,52 @@ data HaskellRepresentation       = HsDefn HaskellType HaskellCode       | HsType HaskellType-  deriving (Typeable, Data, Show)+  deriving (Typeable, Show) -data Polarity = Covariant | Contravariant | Invariant-  deriving (Typeable, Data, Show, Eq)+-- | Polarity for equality and subtype checking.+data Polarity+  = Covariant      -- ^ monotone+  | Contravariant  -- ^ antitone+  | Invariant      -- ^ no information (mixed variance)+  | Nonvariant     -- ^ constant+  deriving (Typeable, Show, Eq)  data CompiledRepresentation = CompiledRep   { compiledHaskell :: Maybe HaskellRepresentation   , compiledEpic    :: Maybe EpicCode   , compiledJS      :: Maybe JSCode   }-  deriving (Typeable, Data, Show)+  deriving (Typeable, Show)  noCompiledRep :: CompiledRepresentation noCompiledRep = CompiledRep Nothing Nothing Nothing --- | 'Positive' means strictly positive and 'Negative' means not strictly--- positive.-data Occurrence = Positive | Negative | Unused-  deriving (Typeable, Data, Show, Eq, Ord)+-- | Subterm occurrences for positivity checking.+--   The constructors are listed in increasing information they provide:+--   @Mixed <= JustPos <= StrictPos <= GuardPos <= Unused@+--   @Mixed <= JustNeg <= Unused@.+data Occurrence+  = Mixed     -- ^ Arbitrary occurrence (positive and negative).+  | JustNeg   -- ^ Negative occurrence.+  | JustPos   -- ^ Positive occurrence, but not strictly positive.+  | StrictPos -- ^ Strictly positive occurrence.+  | GuardPos  -- ^ Guarded strictly positive occurrence (i.e., under ∞).  For checking recursive records.+  | Unused    --  ^ No occurrence.+  deriving (Typeable, Show, Eq, Ord) +instance NFData Occurrence+ data Defn = Axiom 	  | Function             { funClauses        :: [Clause]             , funCompiled       :: CompiledClauses             , funInv            :: FunctionInverse+{- MOVED to Definition             , funPolarity       :: [Polarity]             , funArgOccurrences :: [Occurrence]+-}+            , funMutual         :: [QName]+              -- ^ Mutually recursive functions, @data@s and @record@s.             , funAbstr          :: IsAbstract             , funDelayed        :: Delayed               -- ^ Are the clauses of this definition delayed?@@ -506,6 +597,11 @@               --   checker.             , funStatic         :: Bool               -- ^ Should calls to this function be normalised at compile-time?+            , funCopy           :: Bool+              -- ^ Has this function been created by a module+                                   -- instantiation?+            , funTerminates     :: Maybe Bool+              -- ^ Has this function been termination checked?  Did it pass?             } 	  | Datatype             { dataPars           :: Nat           -- nof parameters@@ -514,21 +610,29 @@             , dataClause         :: (Maybe Clause) -- this might be in an instantiated module             , dataCons           :: [QName]        -- constructor names             , dataSort           :: Sort+{- MOVED             , dataPolarity       :: [Polarity]             , dataArgOccurrences :: [Occurrence]+-}+            , dataMutual         :: [QName]        -- ^ Mutually recursive functions, @data@s and @record@s.             , dataAbstr          :: IsAbstract             } 	  | Record-            { recPars           :: Nat+            { recPars           :: Nat                  -- ^ Number of parameters.             , recClause         :: Maybe Clause             , recCon            :: QName                -- ^ Constructor name.             , recNamedCon       :: Bool             , recConType        :: Type                 -- ^ The record constructor's type.             , recFields         :: [Arg A.QName]             , recTel            :: Telescope            -- ^ The record field telescope+{- MOVED             , recPolarity       :: [Polarity]             , recArgOccurrences :: [Occurrence]-            , recEtaEquality    :: Bool+-}+            , recMutual         :: [QName]              -- ^ Mutually recursive functions, @data@s and @record@s.+            , recEtaEquality    :: Bool                 -- ^ Eta-expand at this record type.  @False@ for unguarded recursive records.+            , recInduction      :: Induction            -- ^ 'Inductive' or 'Coinductive'?  Matters only for recursive records.+            , recRecursive      :: Bool                 -- ^ Recursive record.  Implies @recEtaEquality = False@.  Projections are not size-preserving.             , recAbstr          :: IsAbstract             } 	  | Constructor@@ -549,14 +653,19 @@               -- something@ for builtin functions.             }             -- ^ Primitive or builtin functions.-    deriving (Typeable, Data, Show)+    deriving (Typeable, Show)  defIsRecord :: Defn -> Bool defIsRecord Record{} = True defIsRecord _        = False +defIsDataOrRecord :: Defn -> Bool+defIsDataOrRecord Record{}   = True+defIsDataOrRecord Datatype{} = True+defIsDataOrRecord _          = False+ newtype Fields = Fields [(C.Name, Type)]-  deriving (Typeable, Data)+  deriving (Typeable)  data Reduced no yes = NoReduction no | YesReduction yes     deriving (Typeable, Functor)@@ -574,7 +683,7 @@ notReduced x = MaybeRed NotReduced x  reduced :: Blocked (Arg Term) -> MaybeReduced (Arg Term)-reduced b = case b of+reduced b = case fmap ignoreSharing <$> b of   NotBlocked (Arg _ _ (MetaV x _)) -> MaybeRed (Reduced $ Blocked x ()) v   _                                -> MaybeRed (Reduced $ () <$ b)      v   where@@ -605,15 +714,16 @@ defEpicDef :: Definition -> Maybe EpicCode defEpicDef = compiledEpic . defCompiledRep --- | Used to specify whether something should be delayed.-data Delayed = Delayed | NotDelayed-  deriving (Typeable, Data, Show, Eq)- -- | Are the clauses of this definition delayed? defDelayed :: Definition -> Delayed defDelayed Defn{theDef = Function{funDelayed = d}} = d defDelayed _                                       = NotDelayed +-- | Is the definition just a copy created by a module instantiation?+defCopy :: Definition -> Bool+defCopy Defn{theDef = Function{funCopy = b}} = b+defCopy _                                    = False+ defAbstract :: Definition -> IsAbstract defAbstract d = case theDef d of     Axiom{}                   -> ConcreteDef@@ -627,21 +737,24 @@ -- ** Injectivity --------------------------------------------------------------------------- -data FunctionInverse = NotInjective-                     | Inverse (Map TermHead Clause)-  deriving (Typeable, Data, Show)+type FunctionInverse = FunctionInverse' Clause +data FunctionInverse' c+  = NotInjective+  | Inverse (Map TermHead c)+  deriving (Typeable, Show, Functor)+ data TermHead = SortHead               | PiHead               | ConHead QName-  deriving (Typeable, Data, Eq, Ord, Show)+  deriving (Typeable, Eq, Ord, Show)  --------------------------------------------------------------------------- -- ** Mutual blocks ---------------------------------------------------------------------------  newtype MutualId = MutId Int32-  deriving (Typeable, Data, Eq, Ord, Show, Num)+  deriving (Typeable, Eq, Ord, Show, Num)  --------------------------------------------------------------------------- -- ** Statistics@@ -671,25 +784,16 @@ 	  | CheckFunDef Range Name [A.Clause] (Maybe ()) 	  | CheckPragma Range A.Pragma (Maybe ()) 	  | CheckPrimitive Range Name A.Expr (Maybe ())-          | CheckIsEmpty Type (Maybe ())+          | CheckIsEmpty Range Type (Maybe ())           | CheckWithFunctionType A.Expr (Maybe ())           | CheckSectionApplication Range ModuleName A.ModuleApplication (Maybe ()) 	  | ScopeCheckExpr C.Expr (Maybe A.Expr) 	  | ScopeCheckDeclaration D.NiceDeclaration (Maybe [A.Declaration]) 	  | ScopeCheckLHS C.Name C.Pattern (Maybe A.LHS)-	  | forall a. TermFunDef Range Name [A.Clause] (Maybe a)+          | forall a. NoHighlighting (Maybe a) 	  | forall a. SetRange Range (Maybe a)	-- ^ used by 'setCurrentRange'-            -- actually, 'a' is Agda.Termination.TermCheck.CallGraph-            -- but I was to lazy to import the stuff here --Andreas,2007-5-29-     deriving (Typeable) --- Dummy instance-instance Data Call where-  dataTypeOf _  = mkDataType "Call" []-  toConstr   x  = mkConstr (dataTypeOf x) "Dummy" [] Prefix-  gunfold k z _ = __IMPOSSIBLE__- instance HasRange Call where     getRange (CheckClause _ c _)                   = getRange c     getRange (CheckPattern p _ _ _)                = getRange p@@ -713,10 +817,10 @@     getRange (ScopeCheckLHS _ p _)                 = getRange p     getRange (CheckDotPattern e _ _)               = getRange e     getRange (CheckPatternShadowing c _)           = getRange c-    getRange (TermFunDef i _ _ _)                  = getRange i     getRange (SetRange r _)                        = r     getRange (CheckSectionApplication r _ _ _)     = r-    getRange (CheckIsEmpty _ _)                    = noRange+    getRange (CheckIsEmpty r _ _)                  = r+    getRange (NoHighlighting _)                    = noRange  --------------------------------------------------------------------------- -- ** Builtin things@@ -725,7 +829,7 @@ data BuiltinDescriptor = BuiltinData (TCM Type) [String]                        | BuiltinDataCons (TCM Type)                        | BuiltinPrim String (Term -> TCM ())-                       | BuiltinPostulate (TCM Type)+                       | BuiltinPostulate Relevance (TCM Type)                        | BuiltinUnknown (Maybe (TCM Type)) (Term -> TCM ())  data BuiltinInfo =@@ -737,9 +841,45 @@ data Builtin pf 	= Builtin Term 	| Prim pf-    deriving (Typeable, Data, Show, Functor, Foldable, Traversable)+    deriving (Typeable, Show, Functor, Foldable, Traversable)  ---------------------------------------------------------------------------+-- * Highlighting levels+---------------------------------------------------------------------------++-- | How much highlighting should be sent to the user interface?++data HighlightingLevel+  = None+  | NonInteractive+  | Interactive+    -- ^ This includes both non-interactive highlighting and+    -- interactive highlighting of the expression that is currently+    -- being type-checked.+    deriving (Eq, Ord, Show, Read)++-- | How should highlighting be sent to the user interface?++data HighlightingMethod+  = Direct+    -- ^ Via stdout.+  | Indirect+    -- ^ Both via files and via stdout.+    deriving (Eq, Show, Read)++-- | @ifTopLevelAndHighlightingLevelIs l m@ runs @m@ when we're+-- type-checking the top-level module and the highlighting level is+-- /at least/ @l@.++ifTopLevelAndHighlightingLevelIs ::+  MonadTCM tcm => HighlightingLevel -> tcm () -> tcm ()+ifTopLevelAndHighlightingLevelIs l m = do+  e <- ask+  when (envModuleNestingLevel e == 0 &&+        envHighlightingLevel e >= l)+       m++--------------------------------------------------------------------------- -- * Type checking environment --------------------------------------------------------------------------- @@ -747,20 +887,22 @@     TCEnv { envContext             :: Context 	  , envLetBindings         :: LetBindings 	  , envCurrentModule       :: ModuleName+	  , envCurrentPath         :: AbsolutePath+            -- ^ The path to the file that is currently being+            -- type-checked.           , envAnonymousModules    :: [(ModuleName, Nat)] -- ^ anonymous modules and their number of free variables 	  , envImportPath          :: [C.TopLevelModuleName] -- ^ to detect import cycles 	  , envMutualBlock         :: Maybe MutualId -- ^ the current (if any) mutual block           , envSolvingConstraints  :: Bool                 -- ^ Are we currently in the process of solving active constraints?+          , envAssignMetas         :: Bool+            -- ^ Are we allowed to assign metas?           , envActiveProblems      :: [ProblemId] 	  , envAbstractMode        :: AbstractMode 		-- ^ When checking the typesignature of a public definition 		--   or the body of a non-abstract definition this is true. 		--   To prevent information about abstract things leaking 		--   outside the module.-          , envTopLevel            :: Bool-                -- ^ Are we at the top level when checking a declaration?-                --   In this case, we will freeze metas afterwards.           , envRelevance           :: Relevance                 -- ^ Are we checking an irrelevant argument? (=@Irrelevant@)                 -- Then top-level irrelevant declarations are enabled.@@ -775,48 +917,79 @@                 --   not going to reify and retypecheck (like when doing with                 --   abstraction)           , envRange :: Range+          , envHighlightingRange :: Range+                -- ^ Interactive highlighting uses this range rather+                --   than 'envRange'.           , envCall  :: Maybe (Closure Call)                 -- ^ what we're doing at the moment+          , envEmacs :: Bool+                -- ^ True when called from the Emacs mode.+          , envHighlightingLevel  :: HighlightingLevel+                -- ^ Set to 'None' when imported modules are+                --   type-checked.+          , envHighlightingMethod :: HighlightingMethod+          , envModuleNestingLevel :: Integer+                -- ^ This number indicates how far away from the+                --   top-level module Agda has come when chasing+                --   modules. The level of a given module is not+                --   necessarily the same as the length, in the module+                --   dependency graph, of the shortest path from the+                --   top-level module; it depends on in which order+                --   Agda chooses to chase dependencies.+          , envAllowDestructiveUpdate :: Bool+                -- ^ When True, allows destructively shared updating terms+                --   during evaluation or unification. This is disabled when+                --   doing speculative checking, like solve instance metas, or+                --   when updating might break abstraction, as is the case when+                --   checking abstract definitions. 	  }-    deriving (Typeable, Data)+    deriving (Typeable)  initEnv :: TCEnv initEnv = TCEnv { envContext	         = [] 		, envLetBindings         = Map.empty 		, envCurrentModule       = noModuleName+	        , envCurrentPath         = __IMPOSSIBLE__                 , envAnonymousModules    = [] 		, envImportPath          = [] 		, envMutualBlock         = Nothing                 , envSolvingConstraints  = False                 , envActiveProblems      = [0]+                , envAssignMetas         = True 		, envAbstractMode        = AbstractMode-                , envTopLevel            = True                 , envRelevance           = Relevant                 , envDisplayFormsEnabled = True                 , envReifyInteractionPoints = True                 , envEtaContractImplicit    = True                 , envRange                  = noRange+                , envHighlightingRange      = noRange                 , envCall                   = Nothing+                , envEmacs                  = False+                , envHighlightingLevel      = None+                , envHighlightingMethod     = Indirect+                , envModuleNestingLevel     = -1+                , envAllowDestructiveUpdate = True 		}  --------------------------------------------------------------------------- -- ** Context --------------------------------------------------------------------------- +-- | The @Context@ is a stack of 'ContextEntry's. type Context	  = [ContextEntry] data ContextEntry = Ctx { ctxId	   :: CtxId-			, ctxEntry :: Arg (Name, Type)+			, ctxEntry :: Dom (Name, Type) 			}-  deriving (Typeable, Data)+  deriving (Typeable)  newtype CtxId	  = CtxId Nat-  deriving (Typeable, Data, Eq, Ord, Show, Enum, Real, Integral, Num)+  deriving (Typeable, Eq, Ord, Show, Enum, Real, Integral, Num)  --------------------------------------------------------------------------- -- ** Let bindings --------------------------------------------------------------------------- -type LetBindings = Map Name (Open (Term, Arg Type))+type LetBindings = Map Name (Open (Term, Dom Type))  --------------------------------------------------------------------------- -- ** Abstract mode@@ -825,9 +998,22 @@ data AbstractMode = AbstractMode       -- ^ abstract things in the current module can be accessed 		  | ConcreteMode       -- ^ no abstract things can be accessed 		  | IgnoreAbstractMode -- ^ all abstract things can be accessed-  deriving (Typeable, Data)+  deriving (Typeable)  ---------------------------------------------------------------------------+-- ** Insertion of implicit arguments+---------------------------------------------------------------------------++data ExpandHidden+  = ExpandLast      -- ^ Add implicit arguments in the end until type is no longer hidden 'Pi'.+  | DontExpandLast  -- ^ Do not append implicit arguments.++data ExpandInstances+  = ExpandInstanceArguments+  | DontExpandInstanceArguments+    deriving (Eq)++--------------------------------------------------------------------------- -- * Type checking errors --------------------------------------------------------------------------- @@ -866,8 +1052,15 @@     -- automatically generated functions.)   , termErrCalls :: [CallInfo]     -- ^ The problematic call sites.-  } deriving (Typeable, Show)+  } deriving (Typeable, Show, Eq) +{-+-- | We consider two 'TerminationError's equal if they report the same+--   invalid calls.+instance Eq TerminationError where+  (==) = (==) `on` termErrCalls+-}+ data TypeError 	= InternalError String 	| NotImplemented String@@ -876,6 +1069,11 @@ 	| TerminationCheckFailed [TerminationError] 	| PropMustBeSingleton 	| DataMustEndInSort Term+{- UNUSED+        | DataTooManyParameters+            -- ^ In @data D xs where@ the number of parameters @xs@ does not fit the+            --   the parameters given in the forward declaraion @data D Gamma : T@.+-} 	| ShouldEndInApplicationOfTheDatatype Type 	    -- ^ The target of a constructor isn't an application of its 	    -- datatype. The 'Type' records what it does target.@@ -887,8 +1085,11 @@ 	    -- ^ Expected a type to be an application of a particular datatype. 	| ConstructorPatternInWrongDatatype QName QName -- ^ constructor, datatype         | IndicesNotConstructorApplications [Arg Term] -- ^ Indices.-        | IndexVariablesNotDistinct [Arg Term] -- ^ Indices.-        | IndexFreeInParameter Nat [Arg Term] -- ^ Index (a variable), parameters.+        | IndexVariablesNotDistinct [Nat] [Arg Term] -- ^ Variables, indices.+        | IndicesFreeInParameters [Nat] [Arg Term] [Arg Term]+          -- ^ Indices (variables), index expressions (with+          -- constructors applied to reconstructed parameters),+          -- parameters.         | DoesNotConstructAnElementOf QName Term -- ^ constructor, type 	| DifferentArities 	    -- ^ Varying number of arguments for a function.@@ -905,7 +1106,7 @@           -- ^ The term does not correspond to an inductive data type. 	| UninstantiatedDotPattern A.Expr 	| IlltypedPattern A.Pattern Type-	| TooManyArgumentsInLHS Nat Type+	| TooManyArgumentsInLHS Type 	| WrongNumberOfConstructorArguments QName Nat Nat 	| ShouldBeEmpty Type [Pattern] 	| ShouldBeASort Type@@ -913,19 +1114,22 @@ 	| ShouldBePi Type 	    -- ^ The given type should have been a pi. 	| ShouldBeRecordType Type+	| ShouldBeRecordPattern Pattern 	| NotAProperTerm-        | SplitOnIrrelevant A.Pattern (Arg Type)+        | SetOmegaNotValidType+        | SplitOnIrrelevant A.Pattern (Dom Type)         | DefinitionIsIrrelevant QName         | VariableIsIrrelevant Name         | UnequalLevel Comparison Term Term 	| UnequalTerms Comparison Term Term Type 	| UnequalTypes Comparison Type Type 	| UnequalTelescopes Comparison Telescope Telescope-	| UnequalRelevance Type Type+	| UnequalRelevance Comparison Term Term 	    -- ^ The two function types have different relevance.-	| UnequalHiding Type Type+	| UnequalHiding Term Term 	    -- ^ The two function types have different hiding. 	| UnequalSorts Sort Sort+        | UnequalBecauseOfUniverseConflict Comparison Term Term         | HeterogeneousEquality Term Type Term Type             -- ^ We ended up with an equality constraint where the terms             --   have different types.  This is not supported.@@ -935,12 +1139,13 @@ 	    --	 depend on and the paratemeter that it wants to depend on. 	| MetaOccursInItself MetaId 	| GenericError String+	| GenericDocError Doc         | BuiltinMustBeConstructor String A.Expr 	| NoSuchBuiltinName String 	| DuplicateBuiltinBinding String Term Term 	| NoBindingForBuiltin String 	| NoSuchPrimitiveFunction String-        | ShadowedModule [A.ModuleName]+        | ShadowedModule C.Name [A.ModuleName] 	| BuiltinInParameterisedModule String 	| NoRHSRequiresAbsurdPattern [NamedArg A.Pattern] 	| AbsurdPatternRequiresNoRHS [NamedArg A.Pattern]@@ -998,20 +1203,32 @@ 	| NotAValidLetBinding D.NiceDeclaration 	| NothingAppliedToHiddenArg C.Expr 	| NothingAppliedToInstanceArg C.Expr+        | UnusedVariableInPatternSynonym+        | PatternSynonymArityMismatch A.QName     -- Operator errors 	| NoParseForApplication [C.Expr] 	| AmbiguousParseForApplication [C.Expr] [C.Expr]-	| NoParseForLHS C.Pattern-	| AmbiguousParseForLHS C.Pattern [C.Pattern]+	| NoParseForLHS LHSOrPatSyn C.Pattern+	| AmbiguousParseForLHS LHSOrPatSyn C.Pattern [C.Pattern]+{- UNUSED+	| NoParseForPatternSynonym C.Pattern+	| AmbiguousParseForPatternSynonym C.Pattern [C.Pattern]+-}     -- Usage errors     -- Implicit From Scope errors         | IFSNoCandidateInScope Type     -- Safe flag errors         | SafeFlagPostulate C.Name         | SafeFlagPragma [String]+        | SafeFlagNoTerminationCheck         | SafeFlagPrimTrustMe+    -- Language option errors+        | NeedOptionCopatterns           deriving (Typeable, Show) +-- | Distinguish error message when parsing lhs or pattern synonym, resp.+data LHSOrPatSyn = IsLHS | IsPatSyn deriving (Eq, Show)+ -- instance Show TypeError where --   show _ = "<TypeError>" -- TODO: more info? @@ -1021,48 +1238,31 @@  -- | Type-checking errors. -data TCErr' = TypeError TCState (Closure TypeError)-	    | Exception Range String-            | IOException Range E.IOException-	    | PatternErr  TCState -- ^ for pattern violations-	    {- AbortAssign TCState -- ^ used to abort assignment to meta when there are instantiations -- UNUSED -}-  deriving (Typeable)---- | Type-checking errors, potentially paired with relevant syntax--- highlighting information.--data TCErr =-  TCErr { errHighlighting :: Maybe (HighlightingInfo, ModuleToSource)-          -- ^ The 'ModuleToSource' can be used to map the module-          -- names in the 'HighlightingInfo' to file names.-        , errError        :: TCErr'-        }+data TCErr = TypeError TCState (Closure TypeError)+	   | Exception Range String+           | IOException Range E.IOException+	   | PatternErr  TCState -- ^ for pattern violations+	   {- AbortAssign TCState -- ^ used to abort assignment to meta when there are instantiations -- UNUSED -}   deriving (Typeable)  instance Error TCErr where     noMsg  = strMsg ""-    strMsg = TCErr Nothing . Exception noRange . strMsg+    strMsg = Exception noRange . strMsg  instance Show TCErr where-  show = show . errError--instance Show TCErr' where     show (TypeError _ e) = show (envRange $ clEnv e) ++ ": " ++ show (clValue e)     show (Exception r s) = show r ++ ": " ++ s     show (IOException r e) = show r ++ ": " ++ show e     show (PatternErr _)  = "Pattern violation (you shouldn't see this)"     {- show (AbortAssign _) = "Abort assignment (you shouldn't see this)" -- UNUSED -} -instance HasRange TCErr' where+instance HasRange TCErr where     getRange (TypeError _ cl)  = envRange $ clEnv cl     getRange (Exception r _)   = r     getRange (IOException r _) = r     getRange (PatternErr s)    = noRange     {- getRange (AbortAssign s)   = noRange -- UNUSED -} -instance HasRange TCErr where-    getRange = getRange . errError- instance Exception TCErr  ---------------------------------------------------------------------------@@ -1126,22 +1326,69 @@  -- We want a special monad implementation of fail. instance MonadIO m => Monad (TCMT m) where-    return x = TCM $ \_ _ -> return x-    TCM m >>= k = TCM $ \r e -> do-        x <- m r e-        let TCM m' = k x in m' r e-    TCM m1 >> TCM m2 = TCM $ \r e -> m1 r e >> m2 r e-    fail    = internalError+    return = returnTCMT+    (>>=)  = bindTCMT+    (>>)   = thenTCMT+    fail   = internalError -    {-# SPECIALIZE instance Monad TCM #-}+-- One goal of the definitions and pragmas below is to inline the+-- monad operations as much as possible. This doesn't seem to have a+-- large effect on the performance of the normal executable, but (at+-- least on one machine/configuration) it has a massive effect on the+-- performance of the profiling executable [1], and reduces the time+-- attributed to bind from over 90% to about 25%.+--+-- [1] When compiled with -auto-all and run with -p: roughly 750%+-- faster for one example. +returnTCMT :: MonadIO m => a -> TCMT m a+returnTCMT = \x -> TCM $ \_ _ -> return x+{-# RULES "returnTCMT"+      returnTCMT = \x -> TCM $ \_ _ -> return x+  #-}+{-# INLINE returnTCMT #-}+{-# SPECIALIZE INLINE returnTCMT :: a -> TCM a #-}++bindTCMT :: MonadIO m => TCMT m a -> (a -> TCMT m b) -> TCMT m b+bindTCMT = \(TCM m) k -> TCM $ \r e -> m r e >>= \x -> unTCM (k x) r e+{-# RULES "bindTCMT"+      bindTCMT = \(TCM m) k -> TCM $ \r e ->+                   m r e >>= \x -> unTCM (k x) r e+  #-}+{-# INLINE bindTCMT #-}+{-# SPECIALIZE INLINE bindTCMT :: TCM a -> (a -> TCM b) -> TCM b #-}++thenTCMT :: MonadIO m => TCMT m a -> TCMT m b -> TCMT m b+thenTCMT = \(TCM m1) (TCM m2) -> TCM $ \r e -> m1 r e >> m2 r e+{-# RULES "thenTCMT"+      thenTCMT = \(TCM m1) (TCM m2) -> TCM $ \r e -> m1 r e >> m2 r e+  #-}+{-# INLINE thenTCMT #-}+{-# SPECIALIZE INLINE thenTCMT :: TCM a -> TCM b -> TCM b #-}+ instance MonadIO m => Functor (TCMT m) where-    fmap = liftM+    fmap = fmapTCMT +fmapTCMT :: MonadIO m => (a -> b) -> TCMT m a -> TCMT m b+fmapTCMT = \f (TCM m) -> TCM $ \r e -> liftM f (m r e)+{-# RULES "fmapTCMT"+      fmapTCMT = \f (TCM m) -> TCM $ \r e -> liftM f (m r e)+  #-}+{-# INLINE fmapTCMT #-}+{-# SPECIALIZE INLINE fmapTCMT :: (a -> b) -> TCM a -> TCM b #-}+ instance MonadIO m => Applicative (TCMT m) where-    pure = return-    (<*>) = ap+    pure  = returnTCMT+    (<*>) = apTCMT +apTCMT :: MonadIO m => TCMT m (a -> b) -> TCMT m a -> TCMT m b+apTCMT = \(TCM mf) (TCM m) -> TCM $ \r e -> ap (mf r e) (m r e)+{-# RULES "apTCMT"+      apTCMT = \(TCM mf) (TCM m) -> TCM $ \r e -> ap (mf r e) (m r e)+  #-}+{-# INLINE apTCMT #-}+{-# SPECIALIZE INLINE apTCMT :: TCM (a -> b) -> TCM a -> TCM b #-}+ instance MonadIO m => MonadIO (TCMT m) where   liftIO m = TCM $ \s e ->               do let r = envRange e@@ -1152,13 +1399,13 @@       wrap r m = failOnException handleException                $ E.catch m (handleIOException r) -      handleIOException r e = throwIO $ TCErr Nothing $ IOException r e-      handleException   r s = throwIO $ TCErr Nothing $ Exception r s+      handleIOException r e = throwIO $ IOException r e+      handleException   r s = throwIO $ Exception r s  patternViolation :: TCM a patternViolation = do     s <- get-    throwError $ TCErr Nothing $ PatternErr s+    throwError $ PatternErr s  internalError :: MonadTCM tcm => String -> tcm a internalError s = typeError $ InternalError s@@ -1167,7 +1414,7 @@ typeError err = liftTCM $ do     cl <- buildClosure err     s  <- get-    throwError $ TCErr Nothing $ TypeError s cl+    throwError $ TypeError s cl  -- | Running the type checking monad runTCM :: TCMT IO a -> IO (Either TCErr a)@@ -1178,6 +1425,29 @@   r <- liftIO $ newIORef initState   unTCM m r initEnv +-- | Runs the given computation in a separate thread, with /a copy/ of+-- the current state and environment.+--+-- Note that Agda sometimes uses actual, mutable state. If the+-- computation given to @forkTCM@ tries to /modify/ this state, then+-- bad things can happen, because accesses are not mutually exclusive.+-- The @forkTCM@ function has been added mainly to allow the thread to+-- /read/ (a snapshot of) the current state in a convenient way.+--+-- Note also that exceptions which are raised in the thread are not+-- propagated to the parent, so the thread should not do anything+-- important.++forkTCM :: TCM a -> TCM ()+forkTCM m = do+  s <- get+  e <- ask+  liftIO $ C.forkIO $ do+    runTCM $ local (\_ -> e) $ do+      put s+      m+    return ()+  return ()   
+ src/full/Agda/TypeChecking/Monad/Base.hs-boot view
@@ -0,0 +1,7 @@+{-# LANGUAGE KindSignatures #-}++module Agda.TypeChecking.Monad.Base where++data TCMT (m :: * -> *) a++type TCM = TCMT IO
src/full/Agda/TypeChecking/Monad/Builtin.hs view
@@ -1,14 +1,32 @@  module Agda.TypeChecking.Monad.Builtin where -import Data.Functor+import Control.Monad.Error import Control.Monad.State++import Data.Functor import qualified Data.Map as Map  import Agda.Syntax.Position+import Agda.Syntax.Literal import Agda.Syntax.Internal import Agda.TypeChecking.Monad.Base +import Agda.Utils.Monad (when_)++litType :: Literal -> TCM Type+litType l = case l of+    LitInt _ n	  -> do+      primZero+      when_ (n > 0) $ primSuc+      el <$> primNat+    LitFloat _ _  -> el <$> primFloat+    LitChar _ _   -> el <$> primChar+    LitString _ _ -> el <$> primString+    LitQName _ _  -> el <$> primQName+  where+    el t = El (mkType 0) t+ getBuiltinThing :: String -> TCM (Maybe (Builtin PrimFun)) getBuiltinThing b = liftM2 mplus (Map.lookup b <$> gets stLocalBuiltins)                     (Map.lookup b <$> gets stImportedBuiltins)@@ -61,17 +79,19 @@ primInteger, primFloat, primChar, primString, primBool, primTrue, primFalse,     primList, primNil, primCons, primIO, primNat, primSuc, primZero,     primNatPlus, primNatMinus, primNatTimes, primNatDivSucAux, primNatModSucAux,-    primNatEquality, primNatLess, primSize, primSizeSuc, primSizeInf,+    primNatEquality, primNatLess,+    primSize, primSizeLt, primSizeSuc, primSizeInf,     primInf, primSharp, primFlat,     primEquality, primRefl,     primLevel, primLevelZero, primLevelSuc, primLevelMax,+    primIrrAxiom,     -- builtins for reflection:     primQName, primArg, primArgArg, primAgdaTerm, primAgdaTermVar,     primAgdaTermLam, primAgdaTermDef, primAgdaTermCon, primAgdaTermPi,     primAgdaTermSort, primAgdaTermUnsupported,     primAgdaType, primAgdaTypeEl,     primHiding, primHidden, primInstance, primVisible,-    primRelvance, primRelevant, primIrrelevant,+    primRelevance, primRelevant, primIrrelevant,     primAgdaSort, primAgdaSortSet, primAgdaSortLit, primAgdaSortUnsupported,     primAgdaDefinition, primAgdaDefinitionFunDef, primAgdaDefinitionDataDef, primAgdaDefinitionRecordDef,     primAgdaDefinitionPostulate, primAgdaDefinitionPrimitive, primAgdaDefinitionDataConstructor,@@ -99,8 +119,10 @@ primNatEquality  = getBuiltin builtinNatEquals primNatLess      = getBuiltin builtinNatLess primSize         = getBuiltin builtinSize+primSizeLt       = getBuiltin builtinSizeLt primSizeSuc      = getBuiltin builtinSizeSuc primSizeInf      = getBuiltin builtinSizeInf+primSizeMax      = getBuiltin builtinSizeMax primInf          = getBuiltin builtinInf primSharp        = getBuiltin builtinSharp primFlat         = getBuiltin builtinFlat@@ -110,6 +132,7 @@ primLevelZero    = getBuiltin builtinLevelZero primLevelSuc     = getBuiltin builtinLevelSuc primLevelMax     = getBuiltin builtinLevelMax+primIrrAxiom     = getBuiltin builtinIrrAxiom primQName        = getBuiltin builtinQName primArg          = getBuiltin builtinArg primArgArg       = getBuiltin builtinArgArg@@ -120,7 +143,7 @@ primHidden       = getBuiltin builtinHidden primInstance     = getBuiltin builtinInstance primVisible      = getBuiltin builtinVisible-primRelvance     = getBuiltin builtinRelevance+primRelevance    = getBuiltin builtinRelevance primRelevant     = getBuiltin builtinRelevant primIrrelevant   = getBuiltin builtinIrrelevant primAgdaSortSet  = getBuiltin builtinAgdaSortSet@@ -166,8 +189,10 @@ builtinCons         = "CONS" builtinIO           = "IO" builtinSize         = "SIZE"+builtinSizeLt       = "SIZELT" builtinSizeSuc      = "SIZESUC" builtinSizeInf      = "SIZEINF"+builtinSizeMax      = "SIZEMAX" builtinInf          = "INFINITY" builtinSharp        = "SHARP" builtinFlat         = "FLAT"@@ -177,6 +202,7 @@ builtinLevel        = "LEVEL" builtinLevelZero    = "LEVELZERO" builtinLevelSuc     = "LEVELSUC"+builtinIrrAxiom     = "IRRAXIOM" builtinQName        = "QNAME" builtinAgdaSort     = "AGDASORT" builtinAgdaSortSet  = "AGDASORTSET"@@ -211,3 +237,25 @@ builtinAgdaDefinitionPostulate       = "AGDADEFINITIONPOSTULATE" builtinAgdaDefinitionPrimitive       = "AGDADEFINITIONPRIMITIVE" builtinAgdaDefinition                = "AGDADEFINITION"++-- | The coinductive primitives.++data CoinductionKit = CoinductionKit+  { nameOfInf   :: QName+  , nameOfSharp :: QName+  , nameOfFlat  :: QName+  }++-- | Tries to build a 'CoinductionKit'.++coinductionKit :: TCM (Maybe CoinductionKit)+coinductionKit = (do+  Def inf   _ <- ignoreSharing <$> primInf+  Def sharp _ <- ignoreSharing <$> primSharp+  Def flat  _ <- ignoreSharing <$> primFlat+  return $ Just $ CoinductionKit+    { nameOfInf   = inf+    , nameOfSharp = sharp+    , nameOfFlat  = flat+    })+    `catchError` \_ -> return Nothing
src/full/Agda/TypeChecking/Monad/Constraints.hs view
@@ -52,8 +52,8 @@  isProblemSolved :: ProblemId -> TCM Bool isProblemSolved pid =-  (&&) <$> (notElem pid <$> asks envActiveProblems)-       <*> (all ((/= pid) . constraintProblem) <$> getAllConstraints)+  and2M (notElem pid <$> asks envActiveProblems)+        (all ((/= pid) . constraintProblem) <$> getAllConstraints)  getConstraintsForProblem :: ProblemId -> TCM Constraints getConstraintsForProblem pid = List.filter ((== pid) . constraintProblem) <$> getAllConstraints@@ -73,6 +73,23 @@       , stAwakeConstraints    = stAwakeConstraints s ++ wakeup       } +-- danger...+dropConstraints :: (ProblemConstraint -> Bool) -> TCM ()+dropConstraints crit = do+  sleepers <- gets stSleepingConstraints+  wakers <- gets stAwakeConstraints+  let filt = List.filter (not . crit)+  modify $ \s -> s { stSleepingConstraints = filt sleepers+                   , stAwakeConstraints = filt wakers+                   }++putAllConstraintsToSleep :: TCM ()+putAllConstraintsToSleep = do+  awakeOnes <- gets stAwakeConstraints+  sleepers <- gets stSleepingConstraints+  modify $ \s -> s { stSleepingConstraints = sleepers ++ awakeOnes+                   , stAwakeConstraints = [] }+ takeAwakeConstraint :: TCM (Maybe ProblemConstraint) takeAwakeConstraint = do   cs <- getAwakeConstraints@@ -103,7 +120,7 @@ addConstraint' :: Constraint -> TCM () addConstraint' c = do     pc <- build-    modify $ \s -> s { stSleepingConstraints = pc : stSleepingConstraints s }+    modify $ \s -> s { stDirty = True, stSleepingConstraints = pc : stSleepingConstraints s }   where     build | isBlocking c = buildConstraint c           | otherwise    = buildProblemConstraint 0 c
src/full/Agda/TypeChecking/Monad/Context.hs view
@@ -21,12 +21,14 @@ #include "../../undefined.h" import Agda.Utils.Impossible +-- * Modifying the context+ -- | Modify the 'ctxEntry' field of a 'ContextEntry'.-modifyContextEntry :: (Arg (Name, Type) -> Arg (Name, Type)) -> ContextEntry -> ContextEntry+modifyContextEntry :: (Dom (Name, Type) -> Dom (Name, Type)) -> ContextEntry -> ContextEntry modifyContextEntry f ce = ce { ctxEntry = f (ctxEntry ce) }  -- | Modify all 'ContextEntry's.-modifyContextEntries :: (Arg (Name, Type) -> Arg (Name, Type)) -> Context -> Context+modifyContextEntries :: (Dom (Name, Type) -> Dom (Name, Type)) -> Context -> Context modifyContextEntries f = map (modifyContextEntry f)  -- | Modify a 'Context' in a computation.@@ -34,64 +36,96 @@ modifyContext :: MonadTCM tcm => (Context -> Context) -> tcm a -> tcm a modifyContext f = local $ \ e -> e { envContext = f (envContext e) } -{-# SPECIALIZE mkContextEntry :: Arg (Name, Type) -> TCM ContextEntry #-}-mkContextEntry :: MonadTCM tcm => Arg (Name, Type) -> tcm ContextEntry+{-# SPECIALIZE mkContextEntry :: Dom (Name, Type) -> TCM ContextEntry #-}+mkContextEntry :: MonadTCM tcm => Dom (Name, Type) -> tcm ContextEntry mkContextEntry x = do   i <- fresh   return $ Ctx i x +-- | Change the context.+{-# SPECIALIZE inContext :: [Dom (Name, Type)] -> TCM a -> TCM a #-}+inContext :: MonadTCM tcm => [Dom (Name, Type)] -> tcm a -> tcm a+inContext xs ret = do+  ctx <- mapM mkContextEntry xs+  modifyContext (const ctx) ret++-- | Change to top (=empty) context.+{-# SPECIALIZE inTopContext :: TCM a -> TCM a #-}+inTopContext :: MonadTCM tcm => tcm a -> tcm a+inTopContext = modifyContext $ const []++-- | Delete the last @n@ bindings from the context.+{-# SPECIALIZE escapeContext :: Int -> TCM a -> TCM a #-}+escapeContext :: MonadTCM tcm => Int -> tcm a -> tcm a+escapeContext n = modifyContext $ drop n++-- | Deprecated.+{-# SPECIALIZE escapeContextToTopLevel :: TCM a -> TCM a #-}+escapeContextToTopLevel :: MonadTCM tcm => tcm a -> tcm a+escapeContextToTopLevel = modifyContext $ const []++-- * Adding to the context+ -- | @addCtx x arg cont@ add a variable to the context. -- --   Chooses an unused 'Name'.-{-# SPECIALIZE addCtx :: Name -> Arg Type -> TCM a -> TCM a #-}-addCtx :: MonadTCM tcm => Name -> Arg Type -> tcm a -> tcm a+{-# SPECIALIZE addCtx :: Name -> Dom Type -> TCM a -> TCM a #-}+addCtx :: MonadTCM tcm => Name -> Dom Type -> tcm a -> tcm a addCtx x a ret = do-  ctx <- map (nameConcrete . fst . unArg) <$> getContext+  ctx <- map (nameConcrete . fst . unDom) <$> getContext   let x' = head $ filter (notTaken ctx) $ iterate nextName x   ce <- mkContextEntry $ fmap ((,) x') a-  flip local ret $ \e -> e { envContext = ce : envContext e }+  modifyContext (ce :) ret       -- let-bindings keep track of own their context   where     notTaken xs x = isNoName (nameConcrete x) || nameConcrete x `notElem` xs  -- | N-ary variant of @addCtx@.-{-# SPECIALIZE addContext :: [Arg (Name, Type)] -> TCM a -> TCM a #-}-addContext :: MonadTCM tcm => [Arg (Name, Type)] -> tcm a -> tcm a+{-# SPECIALIZE addContext :: [Dom (Name, Type)] -> TCM a -> TCM a #-}+addContext :: MonadTCM tcm => [Dom (Name, Type)] -> tcm a -> tcm a addContext ctx m =-  foldr (\arg -> addCtx (fst $ unArg arg) (fmap snd arg)) m ctx+  foldr (\arg -> addCtx (fst $ unDom arg) (fmap snd arg)) m ctx +-- | add a bunch of variables with the same type to the context+{-# SPECIALIZE addCtxs :: [Name] -> Dom Type -> TCM a -> TCM a #-}+addCtxs :: MonadTCM tcm => [Name] -> Dom Type -> tcm a -> tcm a+addCtxs []     _ k = k+addCtxs (x:xs) t k = addCtx x t $ addCtxs xs (raise 1 t) k+ -- | Turns the string into a name and adds it to the context.-{-# SPECIALIZE addCtxString :: String -> Arg Type -> TCM a -> TCM a #-}-addCtxString :: MonadTCM tcm => String -> Arg Type -> tcm a -> tcm a+{-# SPECIALIZE addCtxString :: String -> Dom Type -> TCM a -> TCM a #-}+addCtxString :: MonadTCM tcm => String -> Dom Type -> tcm a -> tcm a addCtxString s a m = do   x <- freshName_ s   addCtx x a m --- | Change the context-{-# SPECIALIZE inContext :: [Arg (Name, Type)] -> TCM a -> TCM a #-}-inContext :: MonadTCM tcm => [Arg (Name, Type)] -> tcm a -> tcm a-inContext xs ret = do-  ctx <- mapM mkContextEntry xs-  flip local ret $ \e -> e { envContext = ctx }+-- | Turns the string into a name and adds it to the context, with dummy type.+{-# SPECIALIZE addCtxString_ :: String -> TCM a -> TCM a #-}+addCtxString_ :: MonadTCM tcm => String -> tcm a -> tcm a+addCtxString_ s = addCtxString s dummyDom +-- | Context entries without a type have this dummy type.+dummyDom :: Dom Type+dummyDom = Dom NotHidden Relevant $ El Prop $ Sort Prop+ -- | Go under an abstraction.-{-# SPECIALIZE underAbstraction :: Raise a => Arg Type -> Abs a -> (a -> TCM b) -> TCM b #-}-underAbstraction :: (Raise a, MonadTCM tcm) => Arg Type -> Abs a -> (a -> tcm b) -> tcm b+{-# SPECIALIZE underAbstraction :: Subst a => Dom Type -> Abs a -> (a -> TCM b) -> TCM b #-}+underAbstraction :: (Subst a, MonadTCM tcm) => Dom Type -> Abs a -> (a -> tcm b) -> tcm b underAbstraction _ (NoAbs _ v) k = k v underAbstraction t a k = do-    xs <- map (nameConcrete . fst . unArg) <$> getContext+    xs <- map (nameConcrete . fst . unDom) <$> getContext     x <- freshName_ $ realName $ absName a     let y = head $ filter (notTaken xs) $ iterate nextName x     addCtx y t $ k $ absBody a   where     notTaken xs x = isNoName (nameConcrete x) || notElem (nameConcrete x) xs-    realName "_" = "y"+    realName "_" = "x"     realName s   = s  -- | Go under an abstract without worrying about the type to add to the context.-{-# SPECIALIZE underAbstraction_ :: Raise a => Abs a -> (a -> TCM b) -> TCM b #-}-underAbstraction_ :: (Raise a, MonadTCM tcm) => Abs a -> (a -> tcm b) -> tcm b-underAbstraction_ = underAbstraction (Arg NotHidden Relevant $ sort Prop)+{-# SPECIALIZE underAbstraction_ :: Subst a => Abs a -> (a -> TCM b) -> TCM b #-}+underAbstraction_ :: (Subst a, MonadTCM tcm) => Abs a -> (a -> tcm b) -> tcm b+underAbstraction_ = underAbstraction dummyDom  -- | Add a telescope to the context. {-# SPECIALIZE addCtxTel :: Telescope -> TCM a -> TCM a #-}@@ -99,17 +133,34 @@ addCtxTel EmptyTel	    ret = ret addCtxTel (ExtendTel t tel) ret = underAbstraction t tel $ \tel -> addCtxTel tel ret ++-- | Add a let bound variable+{-# SPECIALIZE addLetBinding :: Relevance -> Name -> Term -> Type -> TCM a -> TCM a #-}+addLetBinding :: MonadTCM tcm => Relevance -> Name -> Term -> Type -> tcm a -> tcm a+addLetBinding rel x v t0 ret = do+    let t = Dom NotHidden rel t0+    vt <- liftTCM $ makeOpen (v, t)+    flip local ret $ \e -> e { envLetBindings = Map.insert x vt $ envLetBindings e }+++-- * Querying the context+ -- | Get the current context.-{-# SPECIALIZE getContext :: TCM [Arg (Name, Type)] #-}-getContext :: MonadTCM tcm => tcm [Arg (Name, Type)]+{-# SPECIALIZE getContext :: TCM [Dom (Name, Type)] #-}+getContext :: MonadTCM tcm => tcm [Dom (Name, Type)] getContext = asks $ map ctxEntry . envContext +-- | Get the size of the current context.+{-# SPECIALIZE getContextSize :: TCM Nat #-}+getContextSize :: MonadTCM tcm => tcm Nat+getContextSize = genericLength <$> asks envContext+ -- | Generate [Var n - 1, .., Var 0] for all declarations in the context. {-# SPECIALIZE getContextArgs :: TCM Args #-} getContextArgs :: MonadTCM tcm => tcm Args getContextArgs = do   ctx <- getContext-  return $ reverse $ [ Arg h r $ Var i [] | (Arg h r _, i) <- zip ctx [0..] ]+  return $ reverse $ [ Arg h r $ var i | (Dom h r _, i) <- zip ctx [0..] ]  {-# SPECIALIZE getContextTerms :: TCM [Term] #-} getContextTerms :: MonadTCM tcm => tcm [Term]@@ -120,45 +171,31 @@ getContextTelescope :: MonadTCM tcm => tcm Telescope getContextTelescope = foldr extTel EmptyTel . reverse <$> getContext   where-    extTel (Arg h r (x, t)) = ExtendTel (Arg h r t) . Abs (show x)---- | add a bunch of variables with the same type to the context-{-# SPECIALIZE addCtxs :: [Name] -> Arg Type -> TCM a -> TCM a #-}-addCtxs :: MonadTCM tcm => [Name] -> Arg Type -> tcm a -> tcm a-addCtxs []     _ k = k-addCtxs (x:xs) t k = addCtx x t $ addCtxs xs (raise 1 t) k+    extTel (Dom h r (x, t)) = ExtendTel (Dom h r t) . Abs (show x)  -- | Check if we are in a compatible context, i.e. an extension of the given context. {-# SPECIALIZE getContextId :: TCM [CtxId] #-} getContextId :: MonadTCM tcm => tcm [CtxId] getContextId = asks $ map ctxId . envContext --- | Add a let bound variable-{-# SPECIALIZE addLetBinding :: Relevance -> Name -> Term -> Type -> TCM a -> TCM a #-}-addLetBinding :: MonadTCM tcm => Relevance -> Name -> Term -> Type -> tcm a -> tcm a-addLetBinding rel x v t0 ret = do-    let t = Arg NotHidden rel t0-    vt <- liftTCM $ makeOpen (v, t)-    flip local ret $ \e -> e { envLetBindings = Map.insert x vt $ envLetBindings e }- -- | get type of bound variable (i.e. deBruijn index) ---{-# SPECIALIZE typeOfBV' :: Nat -> TCM (Arg Type) #-}-typeOfBV' :: MonadTCM tcm => Nat -> tcm (Arg Type)+{-# SPECIALIZE typeOfBV' :: Nat -> TCM (Dom Type) #-}+typeOfBV' :: MonadTCM tcm => Nat -> tcm (Dom Type) typeOfBV' n =     do	ctx <- getContext-	Arg h r (_,t) <- ctx !!! n-	return $ Arg h r $ raise (n + 1) t+	Dom h r (_,t) <- ctx !!! n+	return $ Dom h r $ raise (n + 1) t  {-# SPECIALIZE typeOfBV :: Nat -> TCM Type #-} typeOfBV :: MonadTCM tcm => Nat -> tcm Type-typeOfBV i = unArg <$> typeOfBV' i+typeOfBV i = unDom <$> typeOfBV' i  {-# SPECIALIZE nameOfBV :: Nat -> TCM Name #-} nameOfBV :: MonadTCM tcm => Nat -> tcm Name nameOfBV n =     do	ctx <- getContext-	Arg _ _ (x,_) <- ctx !!! n+	Dom _ _ (x,_) <- ctx !!! n 	return x  -- | TODO: move(?)@@ -166,28 +203,23 @@     where 	[]     !!!! _ = do             ctx <- getContext-            fail $ "deBruijn index out of scope: " ++ show n ++ " in context " ++ show (map (fst . unArg) ctx)+            fail $ "deBruijn index out of scope: " ++ show n ++ " in context " ++ show (map (fst . unDom) ctx) 	(x:_)  !!!! 0 = return x 	(_:xs) !!!! n = xs !!!! (n - 1)  -- | Get the term corresponding to a named variable. If it is a lambda bound --   variable the deBruijn index is returned and if it is a let bound variable --   its definition is returned.-{-# SPECIALIZE getVarInfo :: Name -> TCM (Term, Arg Type) #-}-getVarInfo :: MonadTCM tcm => Name -> tcm (Term, Arg Type)+{-# SPECIALIZE getVarInfo :: Name -> TCM (Term, Dom Type) #-}+getVarInfo :: MonadTCM tcm => Name -> tcm (Term, Dom Type) getVarInfo x =     do	ctx <- getContext 	def <- asks envLetBindings-	case findIndex ((==x) . fst . unArg) ctx of-	    Just n0 ->-		do  let n = fromIntegral n0-                    t <- typeOfBV' n-		    return (Var n [], t)+	case findIndex ((==x) . fst . unDom) ctx of+	    Just n -> do+                t <- typeOfBV' n+                return (Var n [], t) 	    _	    -> 		case Map.lookup x def of 		    Just vt -> liftTCM $ getOpen vt 		    _	    -> fail $ "unbound variable " ++ show x--{-# SPECIALIZE escapeContext :: Int -> TCM a -> TCM a #-}-escapeContext :: MonadTCM tcm => Int -> tcm a -> tcm a-escapeContext n = local $ \e -> e { envContext = drop n $ envContext e }
src/full/Agda/TypeChecking/Monad/Context.hs-boot view
@@ -5,5 +5,5 @@ import Agda.Syntax.Internal import Agda.TypeChecking.Monad.Base -getContext   :: MonadTCM tcm => tcm [Arg (Name, Type)]+getContext   :: MonadTCM tcm => tcm [Dom (Name, Type)] getContextId :: MonadTCM tcm => tcm [CtxId]
src/full/Agda/TypeChecking/Monad/Debug.hs view
@@ -1,8 +1,7 @@  module Agda.TypeChecking.Monad.Debug where -import qualified Agda.Utils.IO.Locale as LocIO import Control.Monad.Trans ( MonadIO(liftIO) )  debug :: MonadIO m => String -> m ()-debug s = liftIO $ LocIO.putStrLn s+debug s = liftIO $ putStrLn s
src/full/Agda/TypeChecking/Monad/Env.hs view
@@ -32,15 +32,15 @@  -- | Set the current environment to the given withEnv :: TCEnv -> TCM a -> TCM a-withEnv env m = local (const env) m+withEnv env m = local (\env0 -> env { envAllowDestructiveUpdate = envAllowDestructiveUpdate env0 }) m --- | Get the current environmnet+-- | Get the current environment getEnv :: TCM TCEnv getEnv = ask --- | Leave the top level to type check local things.-leaveTopLevel :: TCM a -> TCM a-leaveTopLevel = local $ \ env -> env { envTopLevel = False }--onTopLevel :: TCM Bool-onTopLevel = asks envTopLevel+-- | Increases the module nesting level by one in the given+-- computation.+withIncreasedModuleNestingLevel :: TCM a -> TCM a+withIncreasedModuleNestingLevel =+  local (\e -> e { envModuleNestingLevel =+                     envModuleNestingLevel e + 1 })
src/full/Agda/TypeChecking/Monad/Exception.hs view
@@ -2,7 +2,10 @@  -- | Basically a copy of the ErrorT monad transformer. It's handy to slap --   onto TCM and still be a MonadTCM (which isn't possible with ErrorT).++-- Andreas, 2012-03-30: the following command seems to be STALE. --   Also, it does not require the silly Error instance for the err type.+-- The silly Error instance is back. ;-)  module Agda.TypeChecking.Monad.Exception where 
src/full/Agda/TypeChecking/Monad/Imports.hs view
@@ -11,12 +11,11 @@ import qualified Data.List as List import qualified Data.Set as Set -import System.Time- import Agda.Syntax.Abstract.Name import qualified Agda.Syntax.Concrete.Name as C import Agda.TypeChecking.Monad.Base import Agda.Utils.Monad+import Agda.Utils.Time  addImport :: ModuleName -> TCM () addImport m =
src/full/Agda/TypeChecking/Monad/MetaVars.hs view
@@ -7,6 +7,7 @@ import qualified Data.Map as Map import qualified Data.Set as Set +import Agda.Syntax.Common import Agda.Syntax.Internal import Agda.Syntax.Position import Agda.Syntax.Scope.Base@@ -18,6 +19,8 @@ import Agda.TypeChecking.Monad.Trace import Agda.TypeChecking.Monad.Closure import Agda.TypeChecking.Monad.Open+import Agda.TypeChecking.Monad.Options (reportSLn)+import Agda.TypeChecking.Monad.Sharing import Agda.TypeChecking.Substitute -- import Agda.TypeChecking.Pretty -- LEADS TO import cycle @@ -28,6 +31,10 @@ #include "../../undefined.h" import Agda.Utils.Impossible +-- | Switch off assignment of metas.+dontAssignMetas :: TCM a -> TCM a+dontAssignMetas = local $ \ env -> env { envAssignMetas = False }+ -- | Get the meta store. getMetaStore :: TCM MetaStore getMetaStore = gets stMetaStore@@ -50,6 +57,11 @@ getMetaPriority :: MetaId -> TCM MetaPriority getMetaPriority i = mvPriority <$> lookupMeta i +{- UNUSED+getMetaRelevance :: MetaId -> TCM Relevance+getMetaRelevance x = miRelevance . mvInfo <$> lookupMeta x+-}+ isSortMeta :: MetaId -> TCM Bool isSortMeta m = do   mv <- lookupMeta m@@ -57,6 +69,13 @@     HasType{} -> False     IsSort{}  -> True +getMetaType :: MetaId -> TCM Type+getMetaType m = do+  mv <- lookupMeta m+  return $ case mvJudgement mv of+    HasType{ jMetaType = t } -> t+    IsSort{}  -> __IMPOSSIBLE__+ isInstantiatedMeta :: MetaId -> TCM Bool isInstantiatedMeta m = do   mv <- lookupMeta m@@ -65,11 +84,39 @@     InstS{} -> True     _       -> False +-- | Create 'MetaInfo' in the current environment. createMetaInfo :: TCM MetaInfo-createMetaInfo =-    do  r <- getCurrentRange-	buildClosure r+createMetaInfo = createMetaInfo' RunMetaOccursCheck +createMetaInfo' :: RunMetaOccursCheck -> TCM MetaInfo+createMetaInfo' b = do+  r   <- getCurrentRange+  cl  <- buildClosure r+  return MetaInfo+    { miClosRange       = cl+    , miMetaOccursCheck = b+    , miNameSuggestion  = ""+    }++setValueMetaName :: Term -> MetaNameSuggestion -> TCM ()+setValueMetaName v s = do+  case ignoreSharing v of+    MetaV mi _ -> setMetaNameSuggestion mi s+    u          -> do+      reportSLn "tc.meta.name" 70 $+        "cannot set meta name; newMeta returns " ++ show u+      return ()++getMetaNameSuggestion :: MetaId -> TCM MetaNameSuggestion+getMetaNameSuggestion mi = miNameSuggestion . mvInfo <$> lookupMeta mi++setMetaNameSuggestion :: MetaId -> MetaNameSuggestion -> TCM ()+setMetaNameSuggestion mi s = do+  reportSLn "tc.meta.name" 20 $+    "setting name of meta " ++ show mi ++ " to " ++ s+  updateMetaVar mi $ \ mvar ->+    mvar { mvInfo = (mvInfo mvar) { miNameSuggestion = s }}+ updateMetaVarRange :: MetaId -> Range -> TCM () updateMetaVarRange mi r = updateMetaVar mi (setRange r) @@ -142,8 +189,12 @@        mv <- lookupMeta mi        return $ getMetaScope mv -withMetaInfo :: MetaInfo -> TCM a -> TCM a-withMetaInfo mI m = enterClosure mI $ \r -> setCurrentRange r m+withMetaInfo' :: MetaVariable -> TCM a -> TCM a+withMetaInfo' mv = withMetaInfo (miClosRange $ mvInfo mv)++withMetaInfo :: Closure Range -> TCM a -> TCM a+withMetaInfo mI cont = enterClosure mI $ \ r ->+  setCurrentRange r cont  getInstantiatedMetas :: TCM [MetaId] getInstantiatedMetas = do
src/full/Agda/TypeChecking/Monad/Mutual.hs view
@@ -8,6 +8,7 @@ import qualified Data.Map as Map import Data.Set (Set) import qualified Data.Set as Set+import qualified Agda.Utils.HashMap as HMap  import Agda.Syntax.Internal import Agda.TypeChecking.Monad.Base@@ -38,15 +39,16 @@ 				      } 		   }   where-    setMutId x i = flip Map.adjust x $ \defn -> defn { defMutual = i }+    setMutId x i = flip HMap.adjust x $ \defn -> defn { defMutual = i }  -- | Get all mutual blocks getMutualBlocks :: TCM [Set QName] getMutualBlocks = gets $ Map.elems . stMutualBlocks --- | Get the current mutual block.-currentMutualBlock :: TCM MutualId-currentMutualBlock = maybe fresh return =<< asks envMutualBlock+-- | Get the current mutual block, if any, otherwise a fresh mutual+-- block is returned.+currentOrFreshMutualBlock :: TCM MutualId+currentOrFreshMutualBlock = maybe fresh return =<< asks envMutualBlock  lookupMutualBlock :: MutualId -> TCM (Set QName) lookupMutualBlock mi = do
src/full/Agda/TypeChecking/Monad/Open.hs view
@@ -35,14 +35,14 @@  -- | Extract the value from an open term. Must be done in an extension of the --   context in which the term was created.-getOpen :: Raise a => Open a -> TCM a+getOpen :: Subst a => Open a -> TCM a getOpen (OpenThing []  x) = return x getOpen (OpenThing ctx x) = do   ctx' <- getContextId   unless (ctx `isSuffixOf` ctx') $ fail $ "thing out of context (" ++ show ctx ++ " is not a sub context of " ++ show ctx' ++ ")"   return $ raise (genericLength ctx' - genericLength ctx) x -tryOpen :: Raise a => Open a -> TCM (Maybe a)+tryOpen :: Subst a => Open a -> TCM (Maybe a) tryOpen o =   (Just <$> getOpen o)   `catchError` \_ -> return Nothing
src/full/Agda/TypeChecking/Monad/Options.hs view
@@ -2,22 +2,26 @@  module Agda.TypeChecking.Monad.Options where +import Control.Monad.Error import Control.Monad.Reader import Control.Monad.State import Data.Maybe import Text.PrettyPrint-import qualified Agda.Utils.IO.Locale as LocIO import System.Directory import System.FilePath+import System.IO  import Agda.Syntax.Concrete+import {-# SOURCE #-} Agda.TypeChecking.Errors import Agda.TypeChecking.Monad.Base import Agda.TypeChecking.Monad.State+import Agda.Interaction.EmacsCommand as Emacs import Agda.Interaction.FindFile import Agda.Interaction.Options import Agda.Utils.FileName import Agda.Utils.Monad import Agda.Utils.List+import Agda.Utils.String import Agda.Utils.Trie (Trie) import qualified Agda.Utils.Trie as Trie @@ -144,7 +148,7 @@ -- -- If the include directories change (and they were previously -- @'Right' something@), then the state is reset (completely, except--- for the include directories).+-- for the include directories and 'stInteractionOutputCallback'). -- -- An empty list is interpreted as @["."]@. @@ -183,7 +187,9 @@   incs <- getIncludeDirs   case oldIncs of     Right incs' | incs' /= incs -> do+      ho <- stInteractionOutputCallback <$> get       resetAllState+      modify $ \st -> st { stInteractionOutputCallback = ho }       setIncs incs     _                           -> return () @@ -215,6 +221,23 @@ showImplicitArguments :: TCM Bool showImplicitArguments = optShowImplicit <$> pragmaOptions +showIrrelevantArguments :: TCM Bool+showIrrelevantArguments = optShowIrrelevant <$> pragmaOptions++-- | Switch on printing of implicit and irrelevant arguments.+--   E.g. for reification in with-function generation.+withShowAllArguments :: TCM a -> TCM a+withShowAllArguments ret = do+  opts <- pragmaOptions+  let imp = optShowImplicit opts+      irr = optShowIrrelevant opts+  setPragmaOptions $ opts { optShowImplicit = True, optShowIrrelevant = True }+  x <- ret+  opts <- pragmaOptions+  setPragmaOptions $ opts { optShowImplicit = imp, optShowIrrelevant = irr }+  return x++{- RETIRED, Andreas, 2012-04-30 setShowImplicitArguments :: Bool -> TCM a -> TCM a setShowImplicitArguments showImp ret = do   opts <- pragmaOptions@@ -224,6 +247,7 @@   opts <- pragmaOptions   setPragmaOptions $ opts { optShowImplicit = imp }   return x+-}  ignoreInterfaces :: TCM Bool ignoreInterfaces = optIgnoreInterfaces <$> commandLineOptions@@ -234,6 +258,16 @@ typeInType :: TCM Bool typeInType = not . optUniverseCheck <$> pragmaOptions +------------------------------------------------------------------------+-- Verbosity++-- Invariant (which we may or may not currently break): Debug+-- printouts use one of the following functions:+--+--   reportS+--   reportSLn+--   reportSDoc+ getVerbosity :: TCM (Trie String Int) getVerbosity = optVerbose <$> pragmaOptions @@ -247,24 +281,52 @@ 	m  = maximum $ 0 : Trie.lookupPath ks t     return (n <= m) +-- | If this command is run under the Emacs mode, then it formats the+-- debug message in such a way that the Emacs mode can understand it.++emacsifyDebugMessage :: String -- ^ The debug message.+                     -> TCM String+emacsifyDebugMessage s =+  ifM (envEmacs <$> ask)+      (return $ Emacs.response $+         L [ A "agda2-verbose"+           , A (quote s)+           ])+      (return s)++-- | Displays a debug message in a suitable way.+displayDebugMessage :: String -> TCM ()+displayDebugMessage s =+  liftIO . putStr =<< emacsifyDebugMessage s+ -- | Precondition: The level must be non-negative. verboseS :: VerboseKey -> Int -> TCM () -> TCM () verboseS k n action = whenM (hasVerbosity k n) action  reportS :: VerboseKey -> Int -> String -> TCM ()-reportS k n s = verboseS k n $ liftIO $ LocIO.putStr s+reportS k n s = verboseS k n $ displayDebugMessage s  reportSLn :: VerboseKey -> Int -> String -> TCM ()-reportSLn k n s = verboseS k n $ liftIO $ LocIO.putStrLn s >> LocIO.stdoutFlush+reportSLn k n s = verboseS k n $ do+  displayDebugMessage (s ++ "\n")+  liftIO $ hFlush stdout  reportSDoc :: VerboseKey -> Int -> TCM Doc -> TCM ()-reportSDoc k n d = verboseS k n $ liftIO . LocIO.print =<< d+reportSDoc k n d = verboseS k n $ do+  displayDebugMessage . (++ "\n") . show =<< do+    d `catchError` \ err ->+      (\ s -> (sep $ map text+                 [ "Printing debug message"+                 , k  ++ ":" ++show n+                 , "failed due to error:" ]) $$+              (nest 2 $ text s)) <$> prettyError err + verboseBracket :: VerboseKey -> Int -> String -> TCM a -> TCM a verboseBracket k n s m = do   v <- hasVerbosity k n   if not v then m            else do-    liftIO $ LocIO.putStrLn $ "{ " ++ s-    x <- m `finally` liftIO (LocIO.putStrLn "}")+    displayDebugMessage $ "{ " ++ s ++ "\n"+    x <- m `finally` displayDebugMessage "}\n"     return x
+ src/full/Agda/TypeChecking/Monad/Sharing.hs view
@@ -0,0 +1,55 @@+{-# LANGUAGE CPP #-}+module Agda.TypeChecking.Monad.Sharing where++import Control.Monad.Reader+import Data.List+import Data.Function+import Data.Traversable++import Agda.Syntax.Internal+import Agda.TypeChecking.Monad.Base+import Agda.TypeChecking.Monad.Options+import Agda.Utils.Monad+import Agda.Utils.Impossible++#include "../../undefined.h"++updateSharedTerm :: MonadTCM tcm => (Term -> tcm Term) -> Term -> tcm Term+updateSharedTerm f v =+  ifM (liftTCM $ asks envAllowDestructiveUpdate)+      (updateSharedM f v)+      (f $ ignoreSharing v)++updateSharedTermF :: (MonadTCM tcm, Traversable f) => (Term -> tcm (f Term)) -> Term -> tcm (f Term)+updateSharedTermF f v =+  ifM (liftTCM $ asks envAllowDestructiveUpdate)+      (updateSharedFM f v)+      (f $ ignoreSharing v)++updateSharedTermT :: (MonadTCM tcm, MonadTrans t, Monad (t tcm)) => (Term -> t tcm Term) -> Term -> t tcm Term+updateSharedTermT f v =+  ifM (lift $ asks envAllowDestructiveUpdate)+      (updateSharedM f v)+      (f $ ignoreSharing v)++forceEqualTerms :: Term -> Term -> TCM ()+forceEqualTerms u v =+  whenM (asks envAllowDestructiveUpdate) $+  when (null $ (intersect `on` pointerChain) u v) $+  case (u, v) of+    (Shared p, Shared q) | p > q -> update u v+    (_, Shared{})                -> update v u+    (Shared{}, _)                -> update u v+    _ -> return ()+  where+    -- TODO: compress pointer chain+    update u@(Shared{}) v = do+        report u v+        setPtr v p `seq` compressPointerChain u `seq` return ()+      where p = last $ pointerChain u+    update _ _ = __IMPOSSIBLE__+    report x y = reportSLn "tc.ptr" 50 $ "setting " ++ show x ++ "\n     to " ++ show y++disableDestructiveUpdate :: TCM a -> TCM a+disableDestructiveUpdate = local $ \e -> e { envAllowDestructiveUpdate = False }+
src/full/Agda/TypeChecking/Monad/Signature.hs view
@@ -10,7 +10,6 @@ import qualified Data.Map as Map import Data.List import Data.Function-import qualified Agda.Utils.IO.Locale as LocIO  import Agda.Syntax.Abstract.Name import Agda.Syntax.Common@@ -30,12 +29,14 @@ -- import Agda.TypeChecking.Pretty -- leads to cyclicity import {-# SOURCE #-} Agda.TypeChecking.CompiledClause.Compile import {-# SOURCE #-} Agda.TypeChecking.Polarity+import {-# SOURCE #-} Agda.TypeChecking.ProjectionLike  import Agda.Utils.Monad import Agda.Utils.Map as Map import Agda.Utils.Size import Agda.Utils.Permutation import Agda.Utils.Pretty+import qualified Agda.Utils.HashMap as HMap  #include "../../undefined.h" import Agda.Utils.Impossible@@ -66,158 +67,80 @@ 	setSignature sig0         return r +-- * modifiers for parts of the signature++updateDefinition :: QName -> (Definition -> Definition) -> Signature -> Signature+updateDefinition q f sig = sig { sigDefinitions = HMap.adjust f q (sigDefinitions sig) }++updateTheDef :: (Defn -> Defn) -> (Definition -> Definition)+updateTheDef f def = def { theDef = f (theDef def) }++updateDefType :: (Type -> Type) -> (Definition -> Definition)+updateDefType f def = def { defType = f (defType def) }++updateDefArgOccurrences :: ([Occurrence] -> [Occurrence]) -> (Definition -> Definition)+updateDefArgOccurrences f def = def { defArgOccurrences = f (defArgOccurrences def) }++updateDefPolarity :: ([Polarity] -> [Polarity]) -> (Definition -> Definition)+updateDefPolarity f def = def { defPolarity = f (defPolarity def) }++updateDefCompiledRep :: (CompiledRepresentation -> CompiledRepresentation) -> (Definition -> Definition)+updateDefCompiledRep f def = def { defCompiledRep = f (defCompiledRep def) }+ -- | Add a constant to the signature. Lifts the definition to top level. addConstant :: QName -> Definition -> TCM () addConstant q d = do   reportSLn "tc.signature" 20 $ "adding constant " ++ show q ++ " to signature"   tel <- getContextTelescope   let tel' = killRange $ case theDef d of-	      Constructor{} -> hideTel tel+	      Constructor{} -> fmap (mapDomHiding (const Hidden)) tel 	      _		    -> tel   let d' = abstract tel' $ d { defName = q }   reportSLn "tc.signature" 30 $ "lambda-lifted definition = " ++ show d'   modifySignature $ \sig -> sig-    { sigDefinitions = Map.insertWith (+++) q d' $ sigDefinitions sig }-  i <- currentMutualBlock+    { sigDefinitions = HMap.insertWith (+++) q d' $ sigDefinitions sig }+  i <- currentOrFreshMutualBlock   setMutualBlock i q   where     new +++ old = new { defDisplay = defDisplay new ++ defDisplay old } -    hideTel  EmptyTel		      = EmptyTel-    hideTel (ExtendTel (Arg _ r t) tel) = ExtendTel (Arg Hidden r t) $ hideTel <$> tel---- | Turn a definition into a projection if it looks like a projection.-makeProjection :: QName -> TCM ()-makeProjection x = inContext [] $ do-  reportSLn "tc.proj.like" 30 $ "Considering " ++ show x ++ " for projection likeness"-  defn <- getConstInfo x-  case theDef defn of-    -- Constructor-headed functions can't be projection-like (at the moment). The reason-    -- for this is that invoking constructor-headedness will circumvent the inference of-    -- the dropped arguments.-    -- Nor can abstract definitions be projection-like since they won't reduce-    -- outside the abstract block.-    def@Function{funProjection = Nothing, funClauses = cls, funInv = NotInjective,-                 funAbstr = ConcreteDef} -> do-      ps0 <- filterM validProj (candidateArgs [] (unEl $ defType defn))-      reportSLn "tc.proj.like" 30 $ if null ps0 then "  no candidates found"-                                                else "  candidates: " ++ show ps0-      ps <- return $ filter (checkOccurs cls . snd) ps0-      when (not (null ps0) && null ps) $ reportSLn "tc.proj.like" 50 $ "  occurs check failed\n    clauses = " ++ show cls-      case reverse ps of-        []         -> return ()-        (d, n) : _ -> do-          reportSLn "tc.proj.like" 10 $ show (defName defn) ++ " is projection like in argument " ++-                                        show n ++ " for type " ++ show d-          let cls' = map (rewriteClause n) cls-          cc <- compileClauses True cls'-          reportSLn "tc.proj.like" 20 $ "  rewrote clauses to\n    " ++ show cc-          let mapInv f NotInjective  = NotInjective-              mapInv f (Inverse inv) = Inverse (f inv)-              newDef = def-                       { funProjection     = Just (d, n + 1)-                       , funClauses        = cls'-                       , funCompiled       = cc-                       , funInv            = mapInv (Map.map $ rewriteClause n) $ funInv def-                       , funArgOccurrences = drop n $ funArgOccurrences def-                       , funPolarity       = drop n $ funPolarity def-                       }-          addConstant x $ defn{ theDef     = newDef-                              , defDisplay = [] }-    _ -> return ()+-- | Set termination info of a defined function symbol.+setTerminates :: QName -> Bool -> TCM ()+setTerminates q b = modifySignature $ updateDefinition q $ updateTheDef $ setT   where-    validProj (_, 0) = return False-    validProj (d, _) = do-      defn <- theDef <$> getConstInfo d-      return $ case defn of-        Datatype{} -> True-        Record{}   -> True-        Axiom{}    -> True-        _          -> False--    rewriteClause n cl@Clause{clausePerm = Perm m p} =-      cl{ clausePerm = Perm (m - fromIntegral n) $ map (subtract $ fromIntegral n) $ drop n p-        , clauseTel  = telFromList $ drop n $ telToList $ clauseTel cl-        , clausePats = drop n $ clausePats cl-        , clauseBody = dropB n $ clauseBody cl-        }-      where-        dropB 0 b          = b-        dropB _ NoBody     = NoBody-        dropB n (Bind b)   = dropB (n - 1) (absBody b)-        dropB n Body{}     = __IMPOSSIBLE__--    checkOccurs cls n = all (nonOccur n) cls--    nonOccur n Clause{clausePerm = Perm _ p, clausePats = ps, clauseBody = b} =-      and [ take n p == [0..fromIntegral n - 1]-          , onlyMatch n ps  -- projection-like functions are only allowed to match on the eliminatee-                            -- otherwise we may end up projecting from constructor applications, in-                            -- which case we can't reconstruct the dropped parameters-          , checkBody n b ]--    onlyMatch n ps = all (noMatch . unArg) $ ps0 ++ drop 1 ps1-      where-        (ps0, ps1) = splitAt n ps-        noMatch ConP{} = False-        noMatch LitP{} = False-        noMatch VarP{} = True-        noMatch DotP{} = True--    checkBody 0 _          = True-    checkBody _ NoBody     = True-    checkBody n (Bind b)   = not (isBinderUsed b) && checkBody (n - 1) (unAbs b)-    checkBody _ Body{}     = __IMPOSSIBLE__--    candidateArgs vs (Pi (Arg r h (El _ (Def d us))) b)-      | vs == map unArg us = (d, length vs) : candidateRec vs b-    candidateArgs vs (Pi _ b) = candidateRec vs b-    candidateArgs _ _ = []--    candidateRec vs NoAbs{} = []-    candidateRec vs b       = candidateArgs (Var (size vs) [] : vs) (unEl $ absBody b)+    setT def@Function{} = def { funTerminates = Just b }+    setT def            = def  addHaskellCode :: QName -> HaskellType -> HaskellCode -> TCM ()-addHaskellCode q hsTy hsDef =+addHaskellCode q hsTy hsDef = modifySignature $ updateDefinition q $ updateDefCompiledRep $ addHs   -- TODO: sanity checking-  modifySignature $ \sig -> sig-  { sigDefinitions = Map.adjust addHs q $ sigDefinitions sig }   where-    addHs def = def { defCompiledRep = (defCompiledRep def) { compiledHaskell = Just $ HsDefn hsTy hsDef } }+    addHs crep = crep { compiledHaskell = Just $ HsDefn hsTy hsDef }  addHaskellType :: QName -> HaskellType -> TCM ()-addHaskellType q hsTy =+addHaskellType q hsTy = modifySignature $ updateDefinition q $ updateDefCompiledRep $ addHs   -- TODO: sanity checking-  modifySignature $ \sig -> sig-  { sigDefinitions = Map.adjust addHs q $ sigDefinitions sig }   where-    addHs def = def { defCompiledRep = (defCompiledRep def) { compiledHaskell = Just $ HsType hsTy } }+    addHs crep = crep { compiledHaskell = Just $ HsType hsTy }  addEpicCode :: QName -> EpicCode -> TCM ()-addEpicCode q epDef =+addEpicCode q epDef = modifySignature $ updateDefinition q $ updateDefCompiledRep $ addEp   -- TODO: sanity checking-  modifySignature $ \sig -> sig-  { sigDefinitions = Map.adjust addEp q $ sigDefinitions sig }   where-    --addEp def@Defn{theDef = con@Constructor{}} =-      --def{theDef = con{conHsCode = Just (hsTy, hsDef)}}-    addEp def = def { defCompiledRep = (defCompiledRep def) { compiledEpic = Just epDef } }+    addEp crep = crep { compiledEpic = Just epDef }  addJSCode :: QName -> String -> TCM () addJSCode q jsDef =   case JS.parse jsDef of     Left e ->-      modifySignature $ \sig -> sig-      { sigDefinitions = Map.adjust (addJS (Just e)) q $ sigDefinitions sig }+      modifySignature $ updateDefinition q $ updateDefCompiledRep $ addJS (Just e)     Right s ->       typeError (CompilationError ("Failed to parse ECMAScript (..." ++ s ++ ") for " ++ show q))   where-    addJS e def = def{defCompiledRep = (defCompiledRep def){compiledJS = e}}+    addJS e crep = crep { compiledJS = e }  markStatic :: QName -> TCM ()-markStatic q =-  modifySignature $ \sig -> sig-  { sigDefinitions = Map.adjust mark q $ sigDefinitions sig }+markStatic q = modifySignature $ updateDefinition q $ mark   where     mark def@Defn{theDef = fun@Function{}} =       def{theDef = fun{funStatic = True}}@@ -226,7 +149,7 @@ unionSignatures :: [Signature] -> Signature unionSignatures ss = foldr unionSignature emptySignature ss   where-    unionSignature (Sig a b) (Sig c d) = Sig (Map.union a c) (Map.union b d)+    unionSignature (Sig a b) (Sig c d) = Sig (Map.union a c) (HMap.union b d)  -- | Add a section to the signature. addSection :: ModuleName -> Nat -> TCM ()@@ -247,23 +170,26 @@ addDisplayForms :: QName -> TCM () addDisplayForms x = do   args <- getContextArgs-  add args x x []+  n    <- do+    proj <- isProjection x+    return $ case proj of+      Just (_, n) -> n+      Nothing     -> 0+  add (drop (n - 1) args) x x []   where-    add args top x ps = do+    add args top x vs0 = do       def <- getConstInfo x       let cs = defClauses def-          n  = case theDef def of-                 Function{ funProjection = Just (_, n) } -> n-                 _ -> 0       case cs of-	[ Clause{ clauseBody = b } ]-	  | Just (m, Def y vs) <- strip b -> do-	      let ps' = raise 1 (map unArg vs) ++ ps-                  df  = Display 0 ps' $ DTerm $ Def top (drop (n - 1) args)+	[ Clause{ clausePats = pats, clauseBody = b } ]+	  | all (isVar . unArg) pats+          , Just (m, Def y vs) <- strip (b `apply` vs0) -> do+	      let ps = raise 1 (map unArg vs)+                  df = Display 0 ps $ DTerm $ Def top args 	      reportSLn "tc.display.section" 20 $ "adding display form " ++ show y ++ " --> " ++ show top                                                 ++ "\n  " ++ show df 	      addDisplayForm y df-	      add args top y ps'+	      add args top y vs 	_ -> do 	      let reason = case cs of 		    []    -> "no clauses"@@ -273,16 +199,19 @@ 		      Just (m, Def y vs) 			| m < length args -> "too few args" 			| m > length args -> "too many args"-			| otherwise	      -> "args=" ++ show args ++ " vs=" ++ show vs+			| otherwise	  -> "args=" ++ show args ++ " vs=" ++ show vs 		      Just (m, v) -> "not a def body"-	      reportSLn "tc.display.section" 30 $ "no display form from" ++ show x ++ " because " ++ reason+	      reportSLn "tc.display.section" 30 $ "no display form from " ++ show x ++ " because " ++ reason 	      return ()     strip (Body v)   = return (0, v)     strip  NoBody    = Nothing     strip (Bind b)   = do       (n, v) <- strip $ absBody b-      return (n + 1, v)+      return (n + 1, ignoreSharing v) +    isVar VarP{} = True+    isVar _      = False+ applySection ::   ModuleName -> Telescope -> ModuleName -> Args ->   Map QName QName -> Map ModuleName ModuleName -> TCM ()@@ -290,7 +219,7 @@   sig  <- getSignature   isig <- getImportedSignature   let ss = getOld partOfOldM sigSections    [sig, isig]-      ds = getOld partOfOldD sigDefinitions [sig, isig]+      ds = getOldH partOfOldD sigDefinitions [sig, isig]   reportSLn "tc.mod.apply" 10 $ render $ vcat     [ text "applySection"     , text "new  =" <+> text (show new)@@ -309,6 +238,8 @@   where     getOld partOfOld fromSig sigs =       Map.toList $ Map.filterKeys partOfOld $ Map.unions $ map fromSig sigs+    getOldH partOfOld fromSig sigs =+      HMap.toList $ HMap.filterWithKey (const . partOfOld) $ HMap.unions $ map fromSig sigs      partOfOldM x = x `isSubModuleOf` old     partOfOldD x = x `isInModule`    old@@ -323,49 +254,65 @@ 	  addConstant y =<< nd y           makeProjection y 	  -- Set display form for the old name if it's not a constructor.+{- BREAKS fail/Issue478+          -- Andreas, 2012-10-20 and if we are not an anonymous module+	  -- unless (isAnonymousModuleName new || isCon || size ptel > 0) $ do+-} 	  unless (isCon || size ptel > 0) $ do 	    addDisplayForms y       where-	t  = defType d `apply` ts+	t   = defType d `apply` ts+        pol = defPolarity d `apply` ts+        occ = defArgOccurrences d `apply` ts 	-- the name is set by the addConstant function-	nd y = Defn (defRelevance d) y t [] (-1) noCompiledRep <$> def  -- TODO: mutual block?+	nd y = Defn (defRelevance d) y t pol occ [] (-1) noCompiledRep <$> def  -- TODO: mutual block?         oldDef = theDef d 	isCon = case oldDef of 	  Constructor{} -> True 	  _		-> False+{- OLD         getOcc d = case d of           Function { funArgOccurrences  = os } -> os           Datatype { dataArgOccurrences = os } -> os           Record   { recArgOccurrences  = os } -> os           _ -> []         oldOcc = getOcc oldDef+-} 	def  = case oldDef of                 Constructor{ conPars = np, conData = d } -> return $                   oldDef { conPars = np - size ts, conData = copyName d }                 Datatype{ dataPars = np, dataCons = cs } -> return $                   oldDef { dataPars = np - size ts, dataClause = Just cl, dataCons = map copyName cs-                         , dataArgOccurrences = drop (length ts) oldOcc }+                         {- , dataArgOccurrences = drop (length ts) oldOcc -} }                 Record{ recPars = np, recConType = t, recTel = tel } -> return $                   oldDef { recPars = np - size ts, recClause = Just cl                          , recConType = apply t ts, recTel = apply tel ts-                         , recArgOccurrences = drop (length ts) oldOcc+                         {- , recArgOccurrences = drop (length ts) oldOcc -}                          } 		_ -> do-                  cc <- compileClauses True [cl]+                  cc <- compileClauses Nothing [cl] -- Andreas, 2012-10-07 non need for record pattern translation                   let newDef = Function                         { funClauses        = [cl]                         , funCompiled       = cc                         , funDelayed        = NotDelayed                         , funInv            = NotInjective+{-                         , funPolarity       = []                         , funArgOccurrences = drop (length ts') oldOcc+-}+                        , funMutual         = mutual                         , funAbstr          = ConcreteDef                         , funProjection     = proj                         , funStatic         = False+                        , funCopy           = True+                        , funTerminates     = Just True                         }                   reportSLn "tc.mod.apply" 80 $ "new def for " ++ show x ++ "\n  " ++ show newDef                   return newDef                   where+                    mutual = case oldDef of+                      Function{funMutual = m} -> m+                      _ -> []                     proj = case oldDef of                       Function{funProjection = Just (r, n)}                         | size ts < n -> Just (r, n - size ts)@@ -398,7 +345,7 @@   modifyImportedSignature (add d)   modifySignature (add d)   where-    add df sig = sig { sigDefinitions = Map.adjust addDf x defs }+    add df sig = sig { sigDefinitions = HMap.adjust addDf x defs }       where 	addDf def = def { defDisplay = df : defDisplay def } 	defs	  = sigDefinitions sig@@ -414,6 +361,7 @@   where     extract NoBody           = __IMPOSSIBLE__     extract (Body (Def x _)) = x+    extract (Body (Shared p)) = extract (Body $ derefPtr p)     extract (Body _)         = __IMPOSSIBLE__     extract (Bind b)         = extract (unAbs b) @@ -424,7 +372,8 @@   def <- theDef <$> getConstInfo c   case def of     Datatype{ dataInduction = i } -> return i-    Record{}                      -> return Inductive+    Record{ recRecursive = False} -> return Inductive+    Record{ recInduction = i    } -> return i     Constructor{ conInd = i }     -> return i     _                             -> __IMPOSSIBLE__ @@ -452,7 +401,7 @@   let defs  = sigDefinitions $ stSignature st       idefs = sigDefinitions $ stImports st       smash = (++) `on` maybe [] (:[])-  in case smash (Map.lookup q defs) (Map.lookup q idefs) of+  in case smash (HMap.lookup q defs) (HMap.lookup q idefs) of       []  -> fail $ "Unbound name: " ++ show q ++ " " ++ showQNameId q       [d] -> mkAbs env d       ds  -> fail $ "Ambiguous name: " ++ show q@@ -480,6 +429,11 @@  -- | Look up the polarity of a definition. getPolarity :: QName -> TCM [Polarity]+getPolarity q = defPolarity <$> getConstInfo q++{- OLD+-- | Look up the polarity of a definition.+getPolarity :: QName -> TCM [Polarity] getPolarity q = do   defn <- theDef <$> getConstInfo q   case defn of@@ -487,17 +441,25 @@     Datatype{ dataPolarity = p } -> return p     Record{ recPolarity    = p } -> return p     _                            -> return []+-} +-- | Look up polarity of a definition and compose with polarity+--   represented by 'Comparison'. getPolarity' :: Comparison -> QName -> TCM [Polarity]-getPolarity' CmpEq _  = return []-getPolarity' CmpLeq q = getPolarity q+getPolarity' CmpEq  q = map (composePol Invariant) <$> getPolarity q -- return []+getPolarity' CmpLeq q = getPolarity q -- composition with Covariant is identity  -- | Set the polarity of a definition. setPolarity :: QName -> [Polarity] -> TCM ()+setPolarity q pol = modifySignature $ updateDefinition q $ updateDefPolarity $ const pol++{- OLD+-- | Set the polarity of a definition.+setPolarity :: QName -> [Polarity] -> TCM () setPolarity q pol = do   modifySignature setP   where-    setP sig = sig { sigDefinitions = Map.adjust setPx q defs }+    setP sig = sig { sigDefinitions = HMap.adjust setPx q defs }       where 	setPx def = def { theDef = setPd $ theDef def }         setPd d   = case d of@@ -506,24 +468,57 @@           Record{}   -> d { recPolarity  = pol }           _          -> d 	defs	  = sigDefinitions sig+-} +-- | Return a finite list of argument occurrences.+getArgOccurrences :: QName -> TCM [Occurrence]+getArgOccurrences d = defArgOccurrences <$> getConstInfo d++{- OLD+-- | Return a finite list of argument occurrences.+getArgOccurrences :: QName -> TCM [Occurrence]+getArgOccurrences d = do+  def <- theDef <$> getConstInfo d+  return $ getArgOccurrences_ def++getArgOccurrences_ :: Defn -> [Occurrence]+getArgOccurrences_ def = case def of+    Function { funArgOccurrences  = os } -> os+    Datatype { dataArgOccurrences = os } -> os+    Record   { recArgOccurrences  = os } -> os+    Constructor{}                        -> [] -- repeat StrictPos+    _                                    -> [] -- repeat Mixed+-}+ getArgOccurrence :: QName -> Nat -> TCM Occurrence getArgOccurrence d i = do+  def <- getConstInfo d+  return $ case theDef def of+    Constructor{} -> StrictPos+    _             -> (defArgOccurrences def ++ repeat Mixed) !! i++setArgOccurrences :: QName -> [Occurrence] -> TCM ()+setArgOccurrences d os =+  modifySignature $ updateDefinition d $ updateDefArgOccurrences $ const os++{- OLD+getArgOccurrence :: QName -> Nat -> TCM Occurrence+getArgOccurrence d i = do   def <- theDef <$> getConstInfo d   return $ case def of     Function { funArgOccurrences  = os } -> look i os     Datatype { dataArgOccurrences = os } -> look i os     Record   { recArgOccurrences  = os } -> look i os-    Constructor{}                        -> Positive-    _                                    -> Negative+    Constructor{}                        -> StrictPos+    _                                    -> Mixed   where-    look i os = (os ++ repeat Negative) !! fromIntegral i+    look i os = (os ++ repeat Mixed) !! fromIntegral i  setArgOccurrences :: QName -> [Occurrence] -> TCM () setArgOccurrences d os =   modifySignature setO   where-    setO sig = sig { sigDefinitions = Map.adjust setOx d defs }+    setO sig = sig { sigDefinitions = HMap.adjust setOx d defs }       where 	setOx def = def { theDef = setOd $ theDef def }         setOd d   = case d of@@ -532,8 +527,31 @@           Record{}   -> d { recArgOccurrences  = os }           _          -> d 	defs	  = sigDefinitions sig+-} +-- | Get the mutually recursive identifiers.+getMutual :: QName -> TCM [QName]+getMutual d = do+  def <- theDef <$> getConstInfo d+  return $ case def of+    Function {  funMutual = m } -> m+    Datatype { dataMutual = m } -> m+    Record   {  recMutual = m } -> m+    _ -> [] +-- | Set the mutually recursive identifiers.+setMutual :: QName -> [QName] -> TCM ()+setMutual d m = modifySignature $ updateDefinition d $ updateTheDef $ \ def ->+  case def of+    Function{} -> def { funMutual = m }+    Datatype{} -> def {dataMutual = m }+    Record{}   -> def { recMutual = m }+    _          -> __IMPOSSIBLE__++-- | Check whether two definitions are mutually recursive.+mutuallyRecursive :: QName -> QName -> TCM Bool+mutuallyRecursive d d' = (d `elem`) <$> getMutual d'+ -- | Look up the number of free variables of a section. This is equal to the --   number of parameters if we're currently inside the section and 0 otherwise. getSecFreeVars :: ModuleName -> TCM Nat@@ -569,8 +587,8 @@   verboseS "tc.sig.inst" 30 $ do     ctx <- getContext     m   <- currentModule-    liftIO $ LocIO.putStrLn $ "instDef in " ++ show m ++ ": " ++ show (defName d) ++ " " ++-			unwords (map show . take (size vs) . reverse . map (fst . unArg) $ ctx)+    reportSLn "" 0 $ "instDef in " ++ show m ++ ": " ++ show (defName d) ++ " " +++			unwords (map show . take (size vs) . reverse . map (fst . unDom) $ ctx)   return $ d `apply` vs  -- | Give the abstract view of a definition.@@ -585,7 +603,10 @@  -- | Enter abstract mode. Abstract definition in the current module are transparent. inAbstractMode :: TCM a -> TCM a-inAbstractMode = local $ \e -> e { envAbstractMode = AbstractMode }+inAbstractMode = local $ \e -> e { envAbstractMode = AbstractMode,+                                   envAllowDestructiveUpdate = False }+                                    -- Allowing destructive updates when seeing through+                                    -- abstract may break the abstraction.  -- | Not in abstract mode. All abstract definitions are opaque. inConcreteMode :: TCM a -> TCM a@@ -593,7 +614,10 @@  -- | Ignore abstract mode. All abstract definitions are transparent. ignoreAbstractMode :: TCM a -> TCM a-ignoreAbstractMode = local $ \e -> e { envAbstractMode = IgnoreAbstractMode }+ignoreAbstractMode = local $ \e -> e { envAbstractMode = IgnoreAbstractMode,+                                       envAllowDestructiveUpdate = False }+                                       -- Allowing destructive updates when ignoring+                                       -- abstract may break the abstraction.  -- | Check whether a name might have to be treated abstractly (either if we're --   'inAbstractMode' or it's not a local name). Returns true for things not
src/full/Agda/TypeChecking/Monad/SizedTypes.hs view
@@ -1,75 +1,224 @@-+{-# LANGUAGE CPP, TupleSections, DeriveFunctor #-} module Agda.TypeChecking.Monad.SizedTypes where  import Control.Applicative import Control.Monad.Error  import Agda.Interaction.Options+ import Agda.Syntax.Common import Agda.Syntax.Internal+ import Agda.TypeChecking.Monad.Base import Agda.TypeChecking.Monad.Options import Agda.TypeChecking.Monad.Builtin+-- import Agda.TypeChecking.Reduce -- cyclic import Agda.TypeChecking.Substitute+ import Agda.Utils.Monad+import Agda.Utils.Impossible+#include "../../undefined.h" --- | Check if a type is the 'primSize' type. The argument should be 'reduce'd.+------------------------------------------------------------------------+-- * Testing for type 'Size'+------------------------------------------------------------------------ -isSizeType :: Type -> TCM Bool+-- | Result of querying whether size variable @i@ is bounded by another+--   size.+data BoundedSize+  =  BoundedLt Term -- ^ yes @i : Size< t@+  |  BoundedNo+     deriving (Eq, Show)++-- | Check if a type is the 'primSize' type. The argument should be 'reduce'd.+isSizeType :: Type -> TCM (Maybe BoundedSize) isSizeType v = isSizeTypeTest <*> pure v -{- ORIGINAL CODE-isSizeType :: Type -> TCM Bool-isSizeType (El _ v) = liftTCM $-  ifM (not . optSizedTypes <$> pragmaOptions) (return False) $-  case v of-    Def x [] -> do-      Def size [] <- primSize-      return $ x == size-    _ -> return False-  `catchError` \_ -> return False--}+isSizeTypeTest :: TCM (Type -> Maybe BoundedSize)+isSizeTypeTest =+  flip (ifM (optSizedTypes <$> pragmaOptions)) (return $ const Nothing) $ do+    (size, sizelt) <- getBuiltinSize+    let testType (Def d [])  | Just d == size   = Just BoundedNo+        testType (Def d [v]) | Just d == sizelt = Just $ BoundedLt $ unArg v+        testType _                              = Nothing+    return $ testType . ignoreSharing . unEl +getBuiltinDefName :: String -> TCM (Maybe QName)+getBuiltinDefName s = fromDef . fmap ignoreSharing <$> getBuiltin' s+  where+    fromDef (Just (Def d [])) = Just d+    fromDef _                 = Nothing++getBuiltinSize :: TCM (Maybe QName, Maybe QName)+getBuiltinSize = do+  size   <- getBuiltinDefName builtinSize+  sizelt <- getBuiltinDefName builtinSizeLt+  return (size, sizelt)+ isSizeNameTest :: TCM (QName -> Bool)-isSizeNameTest = liftTCM $-  ifM (not . optSizedTypes <$> pragmaOptions) (return $ const False) $ do-    Def size [] <- primSize-    return (size ==)-  `catchError` \_ -> return $ const False+isSizeNameTest = ifM (optSizedTypes <$> pragmaOptions)+  isSizeNameTestRaw+  (return $ const False) -isSizeTypeTest :: TCM (Type -> Bool)-isSizeTypeTest = do-  testName <- isSizeNameTest-  let testType (El _ (Def d [])) = testName d-      testType _                 = False-  return testType+isSizeNameTestRaw :: TCM (QName -> Bool)+isSizeNameTestRaw = do+  (size, sizelt) <- getBuiltinSize+  return $ (`elem` [size, sizelt]) . Just +------------------------------------------------------------------------+-- * Constructors+------------------------------------------------------------------------+ sizeType :: TCM Type sizeType = El (mkType 0) <$> primSize -sizeSuc :: TCM (Maybe QName)-sizeSuc = liftTCM $+sizeSucName :: TCM (Maybe QName)+sizeSucName = liftTCM $   ifM (not . optSizedTypes <$> pragmaOptions) (return Nothing) $ do-    Def x [] <- primSizeSuc+    Def x [] <- ignoreSharing <$> primSizeSuc     return $ Just x   `catchError` \_ -> return Nothing +sizeSuc :: Nat -> Term -> TCM Term+sizeSuc n v = do+  Def suc [] <- ignoreSharing <$> primSizeSuc+  return $ iterate (sizeSuc_ suc) v !! n++sizeSuc_ :: QName -> Term -> Term+sizeSuc_ suc v = Def suc [defaultArg v]++-- | Transform list of terms into a term build from binary maximum.+sizeMax :: [Term] -> TCM Term+sizeMax vs = case vs of+  []  -> __IMPOSSIBLE__  -- we do not have a zero size+  [v] -> return v+  vs  -> do+    Def max [] <- primSizeMax+    return $ foldr1 (\ u v -> Def max $ map defaultArg [u,v]) vs+++------------------------------------------------------------------------+-- * Viewing and unviewing sizes+------------------------------------------------------------------------+ -- | A useful view on sizes. data SizeView = SizeInf | SizeSuc Term | OtherSize Term --- | Compute the size view of a term. The argument should be 'reduce'd.---   Precondition: sized types are enabled. sizeView :: Term -> TCM SizeView sizeView v = do-  Def inf [] <- primSizeInf-  Def suc [] <- primSizeSuc-  case v of+  Def inf [] <- ignoreSharing <$> primSizeInf+  Def suc [] <- ignoreSharing <$> primSizeSuc+  case ignoreSharing v of     Def x []  | x == inf -> return SizeInf     Def x [u] | x == suc -> return $ SizeSuc (unArg u)     _                    -> return $ OtherSize v +type Offset = Nat++-- | A deep view on sizes.+data DeepSizeView+  = DSizeInf+  | DSizeVar Nat Offset+  | DSizeMeta MetaId Args Offset+  | DOtherSize Term++data SizeViewComparable a+  = NotComparable+  | YesAbove DeepSizeView a+  | YesBelow DeepSizeView a+  deriving (Functor)++-- | @sizeViewComparable v w@ checks whether @v >= w@ (then @Left@)+--   or @v <= w@ (then @Right@).  If uncomparable, it returns @NotComparable@.+sizeViewComparable :: DeepSizeView -> DeepSizeView -> SizeViewComparable ()+sizeViewComparable v w = case (v,w) of+  (DSizeInf, _) -> YesAbove w ()+  (_, DSizeInf) -> YesBelow w ()+  (DSizeVar x n, DSizeVar y m) | x == y -> if n >= m then YesAbove w () else YesBelow w ()+  _ -> NotComparable++sizeViewSuc_ :: QName -> DeepSizeView -> DeepSizeView+sizeViewSuc_ suc v = case v of+  DSizeInf         -> DSizeInf+  DSizeVar i n     -> DSizeVar i (n + 1)+  DSizeMeta x vs n -> DSizeMeta x vs (n + 1)+  DOtherSize u     -> DOtherSize $ sizeSuc_ suc u++-- | @sizeViewPred k v@ decrements @v@ by @k@ (must be possible!).+sizeViewPred :: Nat -> DeepSizeView -> DeepSizeView+sizeViewPred 0 v = v+sizeViewPred k v = case v of+  DSizeInf -> DSizeInf+  DSizeVar  i    n | n >= k -> DSizeVar  i    (n - k)+  DSizeMeta x vs n | n >= k -> DSizeMeta x vs (n - k)+  _ -> __IMPOSSIBLE__++-- | @sizeViewOffset v@ returns the number of successors or Nothing when infty.+sizeViewOffset :: DeepSizeView -> Maybe Offset+sizeViewOffset v = case v of+  DSizeInf         -> Nothing+  DSizeVar i n     -> Just n+  DSizeMeta x vs n -> Just n+  DOtherSize u     -> Just 0++-- | Remove successors common to both sides.+removeSucs :: (DeepSizeView, DeepSizeView) -> (DeepSizeView, DeepSizeView)+removeSucs (v, w) = (sizeViewPred k v, sizeViewPred k w)+  where k = case (sizeViewOffset v, sizeViewOffset w) of+              (Just  n, Just  m) -> min n m+              (Just  n, Nothing) -> n+              (Nothing, Just  m) -> m+              (Nothing, Nothing) -> 0+ -- | Turn a size view into a term. unSizeView :: SizeView -> TCM Term unSizeView SizeInf       = primSizeInf-unSizeView (SizeSuc v)   = flip apply [Arg NotHidden Relevant v] <$> primSizeSuc+unSizeView (SizeSuc v)   = sizeSuc 1 v unSizeView (OtherSize v) = return v++unDeepSizeView :: DeepSizeView -> TCM Term+unDeepSizeView v = case v of+  DSizeInf         -> primSizeInf+  DSizeVar i     n -> sizeSuc n $ var i+  DSizeMeta x us n -> sizeSuc n $ MetaV x us+  DOtherSize u     -> return u++------------------------------------------------------------------------+-- * View on sizes where maximum is pulled to the top+------------------------------------------------------------------------++type SizeMaxView = [DeepSizeView]++maxViewMax :: SizeMaxView -> SizeMaxView -> SizeMaxView+maxViewMax v w = case (v,w) of+  (DSizeInf : _, _) -> [DSizeInf]+  (_, DSizeInf : _) -> [DSizeInf]+  _                 -> foldr maxViewCons w v++-- | @maxViewCons v ws = max v ws@.  It only adds @v@ to @ws@ if it is not+--   subsumed by an element of @ws@.+maxViewCons :: DeepSizeView -> SizeMaxView -> SizeMaxView+maxViewCons _ [DSizeInf] = [DSizeInf]+maxViewCons DSizeInf _   = [DSizeInf]+maxViewCons v ws = case sizeViewComparableWithMax v ws of+  NotComparable  -> v:ws+  YesAbove _ ws' -> v:ws'+  YesBelow{}     -> ws++-- | @sizeViewComparableWithMax v ws@ tries to find @w@ in @ws@ that compares with @v@+--   and singles this out.+--   Precondition: @v /= DSizeInv@.+sizeViewComparableWithMax :: DeepSizeView -> SizeMaxView -> SizeViewComparable SizeMaxView+sizeViewComparableWithMax v ws = case ws of+  []     -> __IMPOSSIBLE__+  [w]    -> fmap (const []) $ sizeViewComparable v w+  (w:ws) -> case sizeViewComparable v w of+            NotComparable -> fmap (w:) $ sizeViewComparableWithMax v ws+            r  -> fmap (const ws) r+++maxViewSuc_ :: QName -> SizeMaxView -> SizeMaxView+maxViewSuc_ suc = map (sizeViewSuc_ suc)++unMaxView :: SizeMaxView -> TCM Term+unMaxView vs = sizeMax =<< mapM unDeepSizeView vs
src/full/Agda/TypeChecking/Monad/State.hs view
@@ -4,12 +4,13 @@ import Control.Applicative import Control.Monad.State import Data.Set (Set)-import Data.Map+import Data.Map as Map import qualified Data.Set as Set  import Agda.Syntax.Common import Agda.Syntax.Scope.Base import qualified Agda.Syntax.Concrete.Name as C+import Agda.Syntax.Abstract (PatternSynDefn, PatternSynDefns) import Agda.Syntax.Abstract.Name  import Agda.TypeChecking.Monad.Base@@ -35,6 +36,31 @@ -- | Get the current scope. getScope :: TCM ScopeInfo getScope = gets stScope++getPatternSyns :: TCM PatternSynDefns+getPatternSyns = gets stPatternSyns++setPatternSyns :: PatternSynDefns -> TCM ()+setPatternSyns m = modify $ \s -> s { stPatternSyns = m }++modifyPatternSyns :: (PatternSynDefns -> PatternSynDefns) -> TCM ()+modifyPatternSyns f = do+  s <- getPatternSyns+  setPatternSyns $ f s++getPatternSynImports :: TCM PatternSynDefns+getPatternSynImports = gets stPatternSynImports++lookupPatternSyn :: QName -> TCM PatternSynDefn+lookupPatternSyn x = do+    s <- getPatternSyns+    case Map.lookup x s of+        Just d  -> return d+        Nothing -> do+            si <- getPatternSynImports+            case Map.lookup x si of+                Just d  -> return d+                Nothing -> typeError $ NotInScope [qnameToConcrete x]  -- | Sets stExtLambdaTele . setExtLambdaTele :: Map QName (Int , Int) -> TCM ()
src/full/Agda/TypeChecking/Monad/Trace.hs view
@@ -8,6 +8,9 @@ import Agda.TypeChecking.Monad.Base import Agda.Utils.Monad +import {-# SOURCE #-} Agda.Interaction.Highlighting.Generate+  (highlightAsTypeChecked)+ --------------------------------------------------------------------------- -- * Trace ---------------------------------------------------------------------------@@ -18,20 +21,72 @@     InferDef _ _ _	      -> False     CheckArguments _ [] _ _ _ -> False     SetRange _ _	      -> False+    NoHighlighting {}         -> False     _			      -> True +traceCallM :: MonadTCM tcm => tcm (Maybe r -> Call) -> tcm a -> tcm a+traceCallM mkCall m = flip traceCall m =<< mkCall+ -- | Record a function call in the trace. {-# SPECIALIZE traceCall :: (Maybe r -> Call) -> TCM a -> TCM a #-} traceCall :: MonadTCM tcm => (Maybe r -> Call) -> tcm a -> tcm a traceCall mkCall m = do-  let call = mkCall Nothing-      r | getRange call /= noRange = const $ getRange call-        | otherwise                = id+  let call      = mkCall Nothing+      callRange = getRange call   cl <- liftTCM $ buildClosure call-  let trace | interestingCall cl = local $ \e -> e { envRange = r (envRange e)-                                                   , envCall  = Just cl }-            | otherwise          = local $ \e -> e { envRange = r (envRange e) }-  trace m+  let trace = local $+        (if interestingCall cl then+           \e -> e { envCall = Just cl }+         else+           id) .+        (if callRange /= noRange || isNoHighlighting call then+           \e -> e { envHighlightingRange = callRange+                   }+         else+           id) .+        (if callRange /= noRange then+           \e -> e { envRange = callRange+                   }+         else+           id)+  wrap <- ifM (do l <- envHighlightingLevel <$> ask+                  return (l == Interactive && highlightCall call))+              (do oldRange <- envHighlightingRange <$> ask+                  return $ highlightAsTypeChecked oldRange callRange)+              (return id)+  wrap $ trace m+  where+  -- | Should the given call trigger interactive highlighting?+  highlightCall call = case call of+    CheckClause _ _ _               -> True+    CheckPattern _ _ _ _            -> True+    CheckLetBinding _ _             -> True+    InferExpr _ _                   -> True+    CheckExpr _ _ _                 -> True+    CheckDotPattern _ _ _           -> True+    CheckPatternShadowing _ _       -> True+    IsTypeCall _ _ _                -> True+    IsType_ _ _                     -> True+    InferVar _ _                    -> True+    InferDef _ _ _                  -> True+    CheckArguments _ _ _ _ _        -> True+    CheckDataDef _ _ _ _ _          -> True+    CheckRecDef _ _ _ _ _           -> True+    CheckConstructor _ _ _ _ _      -> True+    CheckFunDef _ _ _ _             -> True+    CheckPragma _ _ _               -> True+    CheckPrimitive _ _ _ _          -> True+    CheckIsEmpty _ _ _              -> True+    CheckWithFunctionType _ _       -> True+    CheckSectionApplication _ _ _ _ -> True+    ScopeCheckExpr _ _              -> False+    ScopeCheckDeclaration _ _       -> False+    ScopeCheckLHS _ _ _             -> False+    NoHighlighting _                -> True+    SetRange _ _                    -> False++  isNoHighlighting (NoHighlighting {}) = True+  isNoHighlighting _                   = False  {-# SPECIALIZE traceCall_ :: (Maybe () -> Call) -> TCM r -> TCM r #-} traceCall_ :: MonadTCM tcm => (Maybe () -> Call) -> tcm r -> tcm r
src/full/Agda/TypeChecking/Patterns/Match.hs view
@@ -58,7 +58,7 @@ matchPattern (Arg h' r' (LitP l)) arg@(Arg h r v) = do     w <- reduceB v     let v = ignoreBlocking w-    case w of+    case ignoreSharing <$> w of 	NotBlocked (Lit l') 	    | l == l'          -> return (Yes [], Arg h r v) 	    | otherwise        -> return (No, Arg h r v)@@ -66,6 +66,7 @@ 	Blocked x _            -> return (DontKnow $ Just x, Arg h r v) 	_                      -> return (DontKnow Nothing, Arg h r v) +{- Andreas, 2012-04-02 NO LONGER UP-TO-DATE matchPattern (Arg h' r' (ConP c _ ps))     (Arg h Irrelevant v) = do           -- Andreas, 2010-09-07 matching a record constructor against           -- something irrelevant will just continue matching against@@ -73,6 +74,7 @@ 		(m, vs) <- matchPatterns ps $                   repeat $ Arg NotHidden Irrelevant $ DontCare __IMPOSSIBLE__ 		return (m, Arg h Irrelevant $ Con c vs)+-}  matchPattern (Arg h' r' (ConP c _ ps))     (Arg h r v) =     do	w <- traverse constructorForm =<< reduceB v@@ -82,7 +84,7 @@         -- 2) whatInduction c sometimes crashes because c may point to         --    an axiom at this stage (if we are checking the         --    projection functions for a record type).-        w <- case w of+        w <- case ignoreSharing <$> w of                NotBlocked (Def f args) ->                  unfoldDefinition True reduceB (Def f []) f args                    -- reduceB is used here because some constructors@@ -90,7 +92,7 @@                    -- unfolded (due to open public).                _ -> return w         let v = ignoreBlocking w-	case w of+	case ignoreSharing <$> w of           -- Andreas, 2010-09-07 matching a record constructor against           -- something irrelevant will just continue matching against           -- irrelevant stuff
src/full/Agda/TypeChecking/Polarity.hs view
@@ -1,89 +1,279 @@-{-# LANGUAGE CPP #-}+{-# LANGUAGE CPP, PatternGuards #-} module Agda.TypeChecking.Polarity where  import Control.Applicative import Control.Monad.State import Control.Monad.Error import Data.List+import Data.Traversable (traverse)  import Agda.Syntax.Common import Agda.Syntax.Internal+ import Agda.TypeChecking.Monad+import Agda.TypeChecking.Pretty import Agda.TypeChecking.Positivity import Agda.TypeChecking.Substitute import Agda.TypeChecking.Telescope import Agda.TypeChecking.Reduce-import Agda.TypeChecking.Free+import Agda.TypeChecking.Free hiding (Occurrence(..)) import Agda.TypeChecking.Monad.Builtin+ import Agda.Interaction.Options++import Agda.Utils.List import Agda.Utils.Monad+import Agda.Utils.Permutation import Agda.Utils.Impossible import Agda.Utils.Size  #include "../undefined.h" -getArity :: QName -> TCM Arity-getArity x = do-  def <- theDef <$> getConstInfo x-  case def of-    Axiom{}                                 -> return 0-    Function{ funClauses = c : _ }          -> return $ genericLength (clausePats c)-    Function{ funClauses = [] }             -> return 0-    Datatype{ dataPars = np, dataIxs = ni } -> return np-    Record{ recPars = n }                   -> return n-    Constructor{}                           -> return 0-    Primitive{}                             -> return 0+------------------------------------------------------------------------+-- * Polarity lattice.+------------------------------------------------------------------------ +-- | Infimum on the information lattice.+--   'Invariant' is bottom (dominant for inf),+--   'Nonvariant' is top (neutral for inf).+(/\) :: Polarity -> Polarity -> Polarity+Nonvariant /\ b = b+a /\ Nonvariant = a+a /\ b | a == b    = a+       | otherwise = Invariant++-- | 'Polarity' negation, swapping monotone and antitone.+neg :: Polarity -> Polarity+neg Covariant     = Contravariant+neg Contravariant = Covariant+neg Invariant     = Invariant+neg Nonvariant    = Nonvariant++-- | What is the polarity of a function composition?+composePol :: Polarity -> Polarity -> Polarity+composePol Nonvariant _    = Nonvariant+composePol _ Nonvariant    = Nonvariant+composePol Invariant _     = Invariant+composePol Covariant x     = x+composePol Contravariant x = neg x++polFromOcc :: Occurrence -> Polarity+polFromOcc o = case o of+  GuardPos  -> Covariant+  StrictPos -> Covariant+  JustPos   -> Covariant+  JustNeg   -> Contravariant+  Mixed     -> Invariant+  Unused    -> Nonvariant++------------------------------------------------------------------------+-- * Auxiliary functions+------------------------------------------------------------------------++-- | Get the next polarity from a list, 'Invariant' if empty.+nextPolarity :: [Polarity] -> (Polarity, [Polarity])+nextPolarity []       = (Invariant, [])+nextPolarity (p : ps) = (p, ps)++-- | Replace 'Nonvariant' by 'Invariant'.+purgeNonvariant :: [Polarity] -> [Polarity]+purgeNonvariant = map (\ p -> if p == Nonvariant then Invariant else p)++------------------------------------------------------------------------+-- * Computing the polarity of a symbol.+------------------------------------------------------------------------++-- | Main function of this module. computePolarity :: QName -> TCM () computePolarity x = do-  reportSLn "tc.polarity.set" 15 $ "Computing polarity of " ++ show x-  n <- getArity x+  reportSLn "tc.polarity.set" 25 $ "Computing polarity of " ++ show x++  -- get basic polarity from positivity analysis+  def      <- getConstInfo x+  let pol0 = map polFromOcc $ defArgOccurrences def+--  let pol0 = map polFromOcc $ getArgOccurrences_ $ theDef def+  reportSLn "tc.polarity.set" 15 $ "Polarity of " ++ show x ++ " from positivity: " ++ show pol0++{-+  -- get basic polarity from shape of def (arguments matched on or not?)+  def      <- getConstInfo x+  let usagePol = usagePolarity $ theDef def+  reportSLn "tc.polarity.set" 15 $ "Polarity of " ++ show x ++ " from definition form: " ++ show usagePol+  let n = genericLength usagePol  -- n <- getArity x   reportSLn "tc.polarity.set" 20 $ "  arity = " ++ show n-  pol0 <- mapM getPol [0..n - 1] -  -- Not very nice, but should work-  setPolarity x $ pol0 ++ [Covariant]-  pol1 <- sizePolarity x+  -- refine polarity by positivity information+  pol0 <- zipWith (/\) usagePol <$> mapM getPol [0..n - 1]+  reportSLn "tc.polarity.set" 15 $ "Polarity of " ++ show x ++ " from positivity: " ++ show pol0+-} -  let pol = pol0 ++ pol1+  -- compute polarity of sized types+  pol1 <- sizePolarity x pol0++  -- refine polarity again by using type information+  let t = defType def+  reportSDoc "tc.polarity.set" 15 $ text "Refining polarity with type " <+> prettyTCM t+  pol <- enablePhantomTypes (theDef def) <$> dependentPolarity t pol1   reportSLn "tc.polarity.set" 10 $ "Polarity of " ++ show x ++ ": " ++ show pol-  setPolarity x pol++  -- set the polarity in the signature+  setPolarity x $ pol -- purgeNonvariant pol -- temporarily disable non-variance++  -- make 'Nonvariant' args 'UnusedArg' in type and clause telescope+  t <- nonvariantToUnusedArg pol t+  modifySignature $ updateDefinition x $+   updateTheDef (nonvariantToUnusedArgInDef pol) . updateDefType (const t)++-- | Data and record parameters are used as phantom arguments all over+--   the test suite (and possibly in user developments).+--   @enablePhantomTypes@ turns 'Nonvariant' parameters to 'Invariant'+--   to enable phantoms.+enablePhantomTypes :: Defn -> [Polarity] -> [Polarity]+enablePhantomTypes def pol = case def of+  Datatype{ dataPars = np } -> enable np+  Record  { recPars  = np } -> enable np+  _                         -> pol+  where enable np = let (pars, rest) = genericSplitAt np pol+                    in  purgeNonvariant pars ++ rest++{- UNUSED+-- | Extract a basic approximate polarity info from the shape of definition.+--   Arguments that are matched against get 'Invariant', others 'Nonvariant'.+--   For data types, parameters get 'Nonvariant', indices 'Invariant'.+usagePolarity :: Defn -> [Polarity]+usagePolarity def = case def of+    Axiom{}                                 -> []+    Function{ funClauses = [] }             -> []+    Function{ funClauses = cs }             -> usage $ map clausePats cs+    Datatype{ dataPars = np, dataIxs = ni } -> genericReplicate np Nonvariant+    Record{ recPars = n }                   -> genericReplicate n Nonvariant+    Constructor{}                           -> []+    Primitive{}                             -> []   where-    getPol :: Nat -> TCM Polarity-    getPol i = do-        o <- getArgOccurrence x i-        case o of-          Positive -> return Covariant-          Negative -> return Invariant  -- Negative isn't the same as contravariant-          Unused   -> return Invariant  -- add NonVariant?+    usage = foldr1 (zipWith (/\)) . map (map (usagePat . unArg))+    usagePat VarP{} = Nonvariant+    usagePat DotP{} = Nonvariant+    usagePat ConP{} = Invariant+    usagePat LitP{} = Invariant+-} +-- | Make arguments 'Invariant' if the type of a not-'Nonvariant'+--   later argument depends on it.+dependentPolarity :: Type -> [Polarity] -> TCM [Polarity]+dependentPolarity t []          = return []  -- all remaining are 'Invariant'+dependentPolarity t pols@(p:ps) = do+  t <- reduce $ unEl t+  case ignoreSharing t of+    Pi a b -> do+      let c = absBody b+      ps <- dependentPolarity c ps+      p  <- case b of+              Abs{} | p /= Invariant  ->+                ifM (relevantInIgnoringNonvariant 0 c ps)+                  (return Invariant)+                  (return p)+              _ -> return p+      return $ p : ps+    _ -> return pols++-- | Check whether a variable is relevant in a type expression,+--   ignoring domains of non-variant arguments.+relevantInIgnoringNonvariant :: Nat -> Type -> [Polarity] -> TCM Bool+relevantInIgnoringNonvariant i t []     = return $ i `relevantInIgnoringSortAnn` t+relevantInIgnoringNonvariant i t (p:ps) = do+  t <- reduce $ unEl t+  case ignoreSharing t of+    Pi a b -> if p /= Nonvariant && i `relevantInIgnoringSortAnn` a then return True+              else relevantInIgnoringNonvariant (i + 1) (absBody b) ps+    _ -> return $ i `relevantInIgnoringSortAnn` t++-- * Turn polarity 'Nonvariant' into relevance 'UnusedArg'++-- | Record information that an argument is unused in 'Relevance'.+mkUnused :: Relevance -> Relevance+mkUnused Relevant = UnusedArg   -- commenting out this line switches of 'UnusedArg' polarity machinery+mkUnused r        = r  -- 'Irrelevant' is more informative than 'UnusedArg'.++-- | Improve 'Relevance' information in a type by polarity information.+--   'Nonvariant' becomes 'UnusedArg'.+nonvariantToUnusedArg :: [Polarity] -> Type -> TCM Type+nonvariantToUnusedArg []     t = return t+nonvariantToUnusedArg (p:ps) t = do+  t <- reduce t+  case ignoreSharingType t of+    El s (Pi a b) -> do+      let a' = if p == Nonvariant then mapDomRelevance mkUnused a else a+      El s . Pi a' <$> traverse (nonvariantToUnusedArg ps) b+        -- we do not lift properly but bound variables do not matter for reduce+        -- also, we do not maintain the context+    _ -> return t++-- | Propagate 'Nonvariant' 'Polarity' to 'Relevance' information in+--   'Arg's of a defined symbol.+nonvariantToUnusedArgInDef :: [Polarity] -> Defn -> Defn+nonvariantToUnusedArgInDef pol def = case def of+  Function { funClauses = cl } ->+       def { funClauses = map (nonvariantToUnusedArgInClause pol) cl }+  _ -> def++nonvariantToUnusedArgInClause :: [Polarity] -> Clause -> Clause+nonvariantToUnusedArgInClause pol cl@Clause{clauseTel = tel, clausePerm = perm, clausePats = ps} =+  let adjPat p Nonvariant+        | properlyMatching (unArg p) = __IMPOSSIBLE__ -- if we match, we cannot be Nonvariant (sanity check)+        | otherwise                  = mapArgRelevance mkUnused p+      adjPat p _    = p+      -- change relevance of 'Nonvariant' arguments to 'UnusedArg'+      -- note that the associated patterns cannot be 'ConP' or 'LitP'+      ps'           = zipWith adjPat ps (pol ++ repeat Invariant)+      -- get a list of 'Relevance's for the variables bound in the pattern+      rels0         = argRelevance <$> (patternVars =<< ps')+      -- this is the order the variables appear in the telescope+      rels          = permute perm rels0+      -- now improve 'Relevance' in 'Telescope' by pattern relevance+      updateDom UnusedArg = mapDomRelevance mkUnused+      updateDom r          = id+      tel' = telFromList $ zipWith updateDom rels $ telToList tel+   in cl { clausePats = ps', clauseTel = tel'}++------------------------------------------------------------------------+-- * Sized types+------------------------------------------------------------------------+ -- | Hack for polarity of size indices.-sizePolarity :: QName -> TCM [Polarity]-sizePolarity d =-  ifM (not . optSizedTypes <$> pragmaOptions) (return []) $ do+sizePolarity :: QName -> [Polarity] -> TCM [Polarity]+sizePolarity d pol0 = do+  let exit = return pol0+  ifM (not . optSizedTypes <$> pragmaOptions) exit $ do   def <- getConstInfo d   case theDef def of     Datatype{ dataPars = np, dataCons = cons } -> do       let TelV tel _      = telView' $ defType def           (parTel, ixTel) = genericSplitAt np $ telToList tel       case ixTel of-        []                 -> return []  -- No size index-        Arg _ _ (_, a) : _ -> ifM (not <$> isSizeType a) (return []) $ do+        []                 -> exit  -- No size index+        Dom _ _ (_, a) : _ -> ifM ((/= Just BoundedNo) <$> isSizeType a) exit $ do+          -- we assume the size index to be 'Covariant' ...+          let pol   = genericTake np pol0+              polCo = pol ++ [Covariant]+              polIn = pol ++ [Invariant]+          setPolarity d $ polCo+          -- and seek confirm it by looking at the constructor types           let check c = do                 t <- defType <$> getConstInfo c                 addCtxTel (telFromList parTel) $ do-                  let pars = reverse [ defaultArg $ Var i [] | i <- [0..np - 1] ]+--OLD:                  let pars = reverse [ defaultArg $ var i | i <- [0..np - 1] ]+                  let pars = map (defaultArg . var) $ downFrom np                   TelV conTel target <- telView =<< (t `piApplyM` pars)                   case conTel of                     EmptyTel  -> return False  -- no size argument                     ExtendTel arg  tel ->-                      ifM (not <$> isSizeType (unArg arg)) (return False) $ do -- also no size argument+                      ifM ((/= Just BoundedNo) <$> isSizeType (unDom arg)) (return False) $ do -- also no size argument                         -- First constructor argument has type Size -                        -- check only positive occurences in tel+                        -- check that only positive occurences in tel                         isPos <- underAbstraction arg tel $ \tel -> do-                          pols <- zipWithM polarity [0..] $ map (snd . unArg) $ telToList tel-                          return $ all (== Covariant) pols+                          pols <- zipWithM polarity [0..] $ map (snd . unDom) $ telToList tel+                          return $ all (`elem` [Nonvariant, Covariant]) pols                          -- check that the size argument appears in the                         -- right spot in the target type@@ -92,49 +282,45 @@                          return $ isPos && isLin -          ifM (and <$> mapM check cons)-              (return [Covariant])-              (return [Invariant])-    _ -> return []+          ifM (andM $ map check cons)+              (return polCo) -- yes, we have a sized type here+              (return polIn) -- no, does not conform to the rules of sized types+    _ -> exit  checkSizeIndex :: Nat -> Nat -> Type -> TCM Bool-checkSizeIndex np i (El _ (Def _ args)) = do-  let excl = not $ freeIn i (pars ++ ixs)-  s <- sizeView ix-  case s of-    SizeSuc (Var j []) -> return $ and [ excl, i == j ]-    _                  -> return False-  where-    (pars, Arg _ _ ix : ixs) = genericSplitAt np args-checkSizeIndex _ _ _ = __IMPOSSIBLE__--(/\) :: Polarity -> Polarity -> Polarity-a /\ b | a == b    = a-       | otherwise = Invariant--neg :: Polarity -> Polarity-neg Covariant     = Contravariant-neg Contravariant = Covariant-neg Invariant     = Invariant--composePol :: Polarity -> Polarity -> Polarity-composePol Invariant _     = Invariant-composePol Covariant x     = x-composePol Contravariant x = neg x+checkSizeIndex np i a =+  case ignoreSharing $ unEl a of+    Def _ args -> do+      let excl = not $ freeIn i (pars ++ ixs)+      s <- sizeView ix+      case s of+        SizeSuc v | Var j [] <- ignoreSharing v+          -> return $ and [ excl, i == j ]+        _ -> return False+      where+        (pars, Arg _ _ ix : ixs) = genericSplitAt np args+    _ -> __IMPOSSIBLE__ +-- | @polarities i a@ computes the list of polarities of de Bruijn index @i@+--   in syntactic entity @a@. class HasPolarity a where   polarities :: Nat -> a -> TCM [Polarity] +-- | @polarity i a@ computes the polarity of de Bruijn index @i@+--   in syntactic entity @a@ by taking the infimum of all 'polarities'. polarity :: HasPolarity a => Nat -> a -> TCM Polarity polarity i x = do   ps <- polarities i x   case ps of-    [] -> return Covariant+    [] -> return Nonvariant     ps -> return $ foldr1 (/\) ps  instance HasPolarity a => HasPolarity (Arg a) where   polarities i = polarities i . unArg +instance HasPolarity a => HasPolarity (Dom a) where+  polarities i = polarities i . unDom+ instance HasPolarity a => HasPolarity (Abs a) where   polarities i (Abs   _ b) = polarities (i + 1) b   polarities i (NoAbs _ v) = polarities i v@@ -149,9 +335,13 @@   polarities i (El _ v) = polarities i v  instance HasPolarity Term where-  polarities i v = case v of-    Var n ts  | n == i -> (Covariant :) <$> polarities i ts-              | otherwise -> polarities i ts+  polarities i v = do+   v <- instantiate v+   case v of+    -- Andreas, 2012-09-06: taking the polarities of the arguments+    -- without taking the variance of the function into account seems wrong.+    Var n ts  | n == i -> (Covariant :) . map (const Invariant) <$> polarities i ts+              | otherwise -> map (const Invariant) <$> polarities i ts     Lam _ t    -> polarities i t     Lit _      -> return []     Level l    -> polarities i l@@ -159,11 +349,12 @@       pols <- getPolarity x       let compose p ps = map (composePol p) ps       concat . zipWith compose (pols ++ repeat Invariant) <$> mapM (polarities i) ts-    Con _ ts   -> polarities i ts+    Con _ ts   -> polarities i ts -- constructors can be seen as monotone in all args.     Pi a b     -> (++) <$> (map neg <$> polarities i a) <*> polarities i b-    Sort _     -> return []+    Sort s     -> return [] -- polarities i s -- return []     MetaV _ ts -> map (const Invariant) <$> polarities i ts-    DontCare _ -> return []+    Shared p   -> polarities i $ derefPtr p+    DontCare t -> polarities i t -- return []  instance HasPolarity Level where   polarities i (Max as) = polarities i as@@ -174,7 +365,7 @@  instance HasPolarity LevelAtom where   polarities i l = case l of-    MetaLevel _ vs   -> map (const Invariant) <$> polarities i l+    MetaLevel _ vs   -> map (const Invariant) <$> polarities i vs     BlockedLevel _ v -> polarities i v     NeutralLevel v   -> polarities i v     UnreducedLevel v -> polarities i v
src/full/Agda/TypeChecking/Polarity.hs-boot view
@@ -5,3 +5,4 @@ import Agda.TypeChecking.Monad.Base  computePolarity :: QName -> TCM ()+composePol      :: Polarity -> Polarity -> Polarity
src/full/Agda/TypeChecking/Positivity.hs view
@@ -1,19 +1,27 @@-{-# LANGUAGE CPP #-}+{-# LANGUAGE CPP, FlexibleInstances, FlexibleContexts,+             UndecidableInstances #-}  -- | Check that a datatype is strictly positive. module Agda.TypeChecking.Positivity where  import Control.Applicative hiding (empty)+import Control.DeepSeq+import Control.Monad.Reader+ import Data.Set (Set) import qualified Data.Set as Set import Data.Map (Map) import qualified Data.Map as Map import Data.List as List+import Data.Maybe (mapMaybe)  import Agda.Syntax.Position import Agda.Syntax.Common import Agda.Syntax.Internal+import Agda.TypeChecking.Datatypes (isDataOrRecordType, DataOrRecord(..))+import Agda.TypeChecking.Records (unguardedRecord, recursiveRecord) import Agda.TypeChecking.Monad+import Agda.TypeChecking.Monad.Builtin (primInf, CoinductionKit(..), coinductionKit) import Agda.TypeChecking.Reduce import Agda.TypeChecking.Pretty import Agda.TypeChecking.Substitute@@ -21,6 +29,7 @@ import Agda.Utils.Impossible import Agda.Utils.Permutation import Agda.Utils.Size+import Agda.Utils.List import Agda.Utils.Monad import Agda.Utils.SemiRing import qualified Agda.Utils.Graph as Graph@@ -28,49 +37,87 @@  #include "../undefined.h" --- | Check that the datatypes in the given mutual block---   are strictly positive.-checkStrictlyPositive :: MutualId -> TCM ()-checkStrictlyPositive mi = do-  qs <- lookupMutualBlock mi+-- | Check that the datatypes in the mutual block containing the given+-- declarations are strictly positive.+checkStrictlyPositive :: Set QName -> TCM ()+checkStrictlyPositive qs = disableDestructiveUpdate $ do+  -- compute the occurrence graph for qs   reportSDoc "tc.pos.tick" 100 $ text "positivity of" <+> prettyTCM (Set.toList qs)-  g  <- buildOccurrenceGraph qs+  g <- Graph.filterEdges (\ (Edge o _) -> o /= Unused) <$> buildOccurrenceGraph qs   let gstar = Graph.transitiveClosure $ fmap occ g   reportSDoc "tc.pos.tick" 100 $ text "constructed graph"   reportSLn "tc.pos.graph" 5 $ "Positivity graph: N=" ++ show (size $ Graph.nodes g) ++                                " E=" ++ show (length $ Graph.edges g)   reportSDoc "tc.pos.graph" 10 $ vcat     [ text "positivity graph for" <+> prettyTCM (Set.toList qs)-    , nest 2 $ prettyGraph g+    , nest 2 $ prettyTCM g     ]+  reportSDoc "tc.pos.graph" 50 $ vcat+    [ text "transitive closure of positivity graph for" <+>+      prettyTCM (Set.toList qs)+    , nest 2 $ prettyTCM gstar+    ]++  -- remember argument occurrences for qs in the signature   mapM_ (setArgs gstar) $ Set.toList qs   reportSDoc "tc.pos.tick" 100 $ text "set args"++  -- check positivity for all strongly connected components of the graph for qs+  let sccs = Graph.sccs gstar+  reportSDoc "tc.pos.graph.sccs" 15 $ text $ "  sccs = " ++ show sccs+  forM_ sccs $ \ scc -> setMut [ q | DefNode q <- scc ]   whenM positivityCheckEnabled $     mapM_ (checkPos g) $ Set.toList qs   reportSDoc "tc.pos.tick" 100 $ text "checked positivity"+   where-    checkPos g q = whenM (isDatatype q) $ do+    checkPos g q = do+      -- we check positivity only for data or record definitions+      whenJustM (isDatatype q) $ \ dr -> do       reportSDoc "tc.pos.check" 10 $ text "Checking positivity of" <+> prettyTCM q-      case Graph.findPath isNegative (DefNode q) (DefNode q) g of-        Nothing                  -> return ()-        Just (Edge Positive _)   -> __IMPOSSIBLE__-        Just (Edge Unused _)     -> __IMPOSSIBLE__-        Just (Edge Negative how) -> do+      -- get all pathes from q to q that exhibit a non-strictly occurrence+      -- or, in case of records, any recursive occurrence+      let critical IsData   = \ (Edge o _) -> o <= JustPos+          critical IsRecord = \ (Edge o _) -> o /= Unused+          loops      = filter (critical dr) $ Graph.allPaths (critical dr) (DefNode q) (DefNode q) g++      -- if we have a negative loop, raise error+      forM_ [ how | Edge o how <- loops, o <= JustPos ] $ \ how -> do           err <- fsep $             [prettyTCM q] ++ pwords "is not strictly positive, because it occurs" ++             [prettyTCM how]           setCurrentRange (getRange q) $ typeError $ GenericError (show err) +      -- if we find an unguarded record, mark it as such+      (\ just noth -> maybe noth just (mhead [ how | Edge o how <- loops, o <= StrictPos ]))+        (\ how -> do+          reportSDoc "tc.pos.record" 5 $ sep+            [ prettyTCM q <+> text "is not guarded, because it occurs"+            , prettyTCM how+            ]+          unguardedRecord q) $+        -- otherwise, if the record is recursive, mark it as well+        forM_ (take 1 [ how | Edge GuardPos how <- loops ]) $ \ how -> do+          reportSDoc "tc.pos.record" 5 $ sep+            [ prettyTCM q <+> text "is recursive, because it occurs"+            , prettyTCM how+            ]+          recursiveRecord q+     occ (Edge o _) = o-    isNegative (Edge o _) = o == Negative      isDatatype q = do       def <- theDef <$> getConstInfo q       return $ case def of-        Datatype{dataClause = Nothing} -> True-        Record  {recClause  = Nothing} -> True-        _ -> False+        Datatype{dataClause = Nothing} -> Just IsData+        Record  {recClause  = Nothing} -> Just IsRecord+        _ -> Nothing +    -- Set the mutually recursive identifiers for a SCC.+    setMut []  = return ()  -- nothing to do+    setMut [q] = return ()  -- no mutual recursion+    setMut qs  = forM_ qs $ \ q -> setMutual q (delete q qs)+     -- Set the polarity of the arguments to a definition     setArgs g q = do       reportSDoc "tc.pos.args" 5 $ text "checking args of" <+> prettyTCM q@@ -78,21 +125,20 @@       let nArgs = maximum $ n :                     [ i + 1 | (ArgNode q1 i) <- Set.toList $ Graph.nodes g                     , q1 == q ]-          findOcc i = case Graph.lookup (ArgNode q i) (DefNode q) g of-              Nothing -> Unused-              Just Negative -> Negative-              Just Positive -> Positive-              Just Unused   -> Unused+          findOcc i = maybe Unused id $ Graph.lookup (ArgNode q i) (DefNode q) g           args = map findOcc [0..nArgs - 1]       reportSDoc "tc.pos.args" 10 $ sep         [ text "args of" <+> prettyTCM q <+> text "="         , nest 2 $ prettyList $ map (text . show) args         ]-      setArgOccurrences q args+      -- The list args can take a long time to compute, but contains+      -- small elements, and is stored in the interface (right?), so+      -- it is computed deep-strictly.+      setArgOccurrences q $!! args  getDefArity def = case theDef def of   Function{ funClauses = cs, funProjection = proj } -> do-    let dropped = maybe 0 (fromIntegral . subtract 1 . snd) proj+    let dropped = maybe 0 (subtract 1 . snd) proj     subtract dropped . arity <$> instantiateFull (defType def)   Datatype{ dataPars = n } -> return n   Record{ recPars = n }    -> return n@@ -100,27 +146,53 @@  -- Specification of occurrences ------------------------------------------- +-- | 'Occurrence' is a complete lattice with least element 'Mixed'+--   and greatest element 'Unused'.+--+--   It forms a commutative semiring where 'oplus' is meet (glb)+--   and 'otimes' is composition. Both operations are idempotent.+--+--   For 'oplus', 'Unused' is neutral (zero) and 'Mixed' is dominant.+--   For 'otimes', 'StrictPos' is neutral (one) and 'Unused' is dominant.+ instance SemiRing Occurrence where-  oplus Negative _        = Negative-  oplus _ Negative        = Negative-  oplus Unused o          = o+  oplus Mixed _           = Mixed     -- dominant+  oplus _ Mixed           = Mixed+  oplus Unused o          = o         -- neutral   oplus o Unused          = o-  oplus Positive Positive = Positive+  oplus JustNeg  JustNeg  = JustNeg+  oplus JustNeg  o        = Mixed     -- negative and any form of positve+  oplus o        JustNeg  = Mixed+  oplus GuardPos o        = o         -- second-rank neutral+  oplus o GuardPos        = o+  oplus StrictPos o       = o         -- third-rank neutral+  oplus o StrictPos       = o+  oplus JustPos JustPos   = JustPos -  otimes Unused _          = Unused-  otimes _ Unused          = Unused-  otimes Negative _        = Negative-  otimes _ Negative        = Negative-  otimes Positive Positive = Positive+  otimes Unused _            = Unused     -- dominant+  otimes _ Unused            = Unused+  otimes Mixed _             = Mixed      -- second-rank dominance+  otimes _ Mixed             = Mixed+  otimes JustNeg JustNeg     = JustPos+  otimes JustNeg _           = JustNeg    -- third-rank dominance+  otimes _ JustNeg           = JustNeg+  otimes JustPos _           = JustPos    -- fourth-rank dominance+  otimes _ JustPos           = JustPos+  otimes GuardPos _          = GuardPos   -- _ `elem` [StrictPos, GuardPos]+  otimes _ GuardPos          = GuardPos+  otimes StrictPos StrictPos = StrictPos  -- neutral  -- | Description of an occurrence. data OccursWhere   = LeftOfArrow OccursWhere   | DefArg QName Nat OccursWhere -- ^ in the nth argument of a define constant+  | UnderInf OccursWhere         -- ^ in the principal argument of built-in ∞   | VarArg OccursWhere           -- ^ as an argument to a bound variable   | MetaArg OccursWhere          -- ^ as an argument of a metavariable   | ConArgType QName OccursWhere -- ^ in the type of a constructor+  | IndArgType QName OccursWhere -- ^ in a datatype index of a constructor   | InClause Nat OccursWhere     -- ^ in the nth clause of a defined function+  | Matched OccursWhere          -- ^ matched against in a clause of a defined function   | InDefOf QName OccursWhere    -- ^ in the definition of a constant   | Here   | Unknown                      -- ^ an unknown position (treated as negative)@@ -131,10 +203,13 @@ Unknown         >*< o  = Unknown LeftOfArrow o1  >*< o2 = LeftOfArrow (o1 >*< o2) DefArg d i o1   >*< o2 = DefArg d i (o1 >*< o2)+UnderInf o1     >*< o2 = UnderInf (o1 >*< o2) VarArg o1       >*< o2 = VarArg (o1 >*< o2) MetaArg o1      >*< o2 = MetaArg (o1 >*< o2) ConArgType c o1 >*< o2 = ConArgType c (o1 >*< o2)+IndArgType c o1 >*< o2 = IndArgType c (o1 >*< o2) InClause i o1   >*< o2 = InClause i (o1 >*< o2)+Matched o1      >*< o2 = Matched (o1 >*< o2) InDefOf d o1    >*< o2 = InDefOf d (o1 >*< o2)  instance PrettyTCM OccursWhere where@@ -160,10 +235,15 @@         LeftOfArrow o  -> explain o $ pwords "to the left of an arrow"         DefArg q i o   -> explain o $ pwords "in the" ++ nth i ++ pwords "argument to" ++                                       [prettyTCM q]+        UnderInf o     -> do+          Def inf _ <- ignoreSharing <$> primInf  -- this cannot fail if an 'UnderInf' has been generated+          explain o $ pwords "under" ++ [prettyTCM inf]         VarArg o       -> explain o $ pwords "in an argument to a bound variable"         MetaArg o      -> explain o $ pwords "in an argument to a metavariable"         ConArgType c o -> explain o $ pwords "in the type of the constructor" ++ [prettyTCM c]+        IndArgType c o -> explain o $ pwords "in an index of the target type of the constructor" ++ [prettyTCM c]         InClause i o   -> explain o $ pwords "in the" ++ nth i ++ pwords "clause"+        Matched o      -> explain o $ pwords "as matched against"         InDefOf d o    -> explain o $ pwords "in the definition of" ++ [prettyTCM d]        explain o ds = prettyO o $$ fsep ds@@ -173,22 +253,28 @@         Here           -> Here         Unknown        -> Unknown         DefArg q i o   -> DefArg q i   $ maxOneLeftOfArrow o+        UnderInf o     -> UnderInf     $ maxOneLeftOfArrow o         InDefOf d o    -> InDefOf d    $ maxOneLeftOfArrow o         VarArg o       -> VarArg       $ maxOneLeftOfArrow o         MetaArg o      -> MetaArg      $ maxOneLeftOfArrow o         ConArgType c o -> ConArgType c $ maxOneLeftOfArrow o+        IndArgType c o -> IndArgType c $ maxOneLeftOfArrow o         InClause i o   -> InClause i   $ maxOneLeftOfArrow o+        Matched o      -> Matched      $ maxOneLeftOfArrow o        purgeArrows o = case o of         LeftOfArrow o -> purgeArrows o         Here           -> Here         Unknown        -> Unknown         DefArg q i o   -> DefArg q i   $ purgeArrows o+        UnderInf o     -> UnderInf     $ purgeArrows o         InDefOf d o    -> InDefOf d    $ purgeArrows o         VarArg o       -> VarArg       $ purgeArrows o         MetaArg o      -> MetaArg      $ purgeArrows o         ConArgType c o -> ConArgType c $ purgeArrows o+        IndArgType c o -> IndArgType c $ purgeArrows o         InClause i o   -> InClause i   $ purgeArrows o+        Matched o      -> Matched      $ purgeArrows o        splitOnDef o = case o of         Here           -> [Here]@@ -196,10 +282,13 @@         InDefOf d o    -> sp (InDefOf d) o         LeftOfArrow o  -> sp LeftOfArrow o         DefArg q i o   -> sp (DefArg q i) o+        UnderInf o     -> sp UnderInf o         VarArg o       -> sp VarArg o         MetaArg o      -> sp MetaArg o         ConArgType c o -> sp (ConArgType c) o+        IndArgType c o -> sp (IndArgType c) o         InClause i o   -> sp (InClause i) o+        Matched o      -> sp Matched o         where           sp f o = case splitOnDef o of             os@(InDefOf _ _:_) -> f Here : os@@ -226,29 +315,65 @@ here :: Item -> Occurrences here i = Map.singleton i [Here] +-- | @onlyVarsUpTo n occs@ discards occurrences of de Bruijn index @>= n@.+onlyVarsUpTo :: Nat -> Occurrences -> Occurrences+onlyVarsUpTo n = Map.filterWithKey p+  where p (AnArg i) v = i < n+        p (ADef q)  v = True++-- | Context for computing occurrences.+data OccEnv = OccEnv+  { vars :: [Maybe Item] -- ^ Items corresponding to the free variables.+  , inf  :: Maybe QName  -- ^ Name for ∞ builtin.+  }++-- | Monad for computing occurrences.+type OccM = Reader OccEnv++withExtendedOccEnv :: Maybe Item -> OccM a -> OccM a+withExtendedOccEnv i = local $ \ e -> e { vars = i : vars e }++-- | Running the monad+getOccurrences :: ComputeOccurrences a => [Maybe Item] -> a -> TCM Occurrences+getOccurrences vars a = do+  kit <- coinductionKit+  return $ runReader (occurrences a) $ OccEnv vars $ fmap nameOfInf kit+ class ComputeOccurrences a where-  -- | The first argument is the items corresponding to the free variables.-  occurrences :: [Maybe Item] -> a -> Occurrences+  occurrences :: a -> OccM Occurrences  instance ComputeOccurrences Clause where-  occurrences vars (Clause{ clausePats = ps, clauseBody = body }) =-    walk vars (patItems ps) body+  occurrences (Clause{ clausePats = ps0, clauseBody = body }) = do+    let ps = map unArg ps0+    (concatOccurs (mapMaybe matching (zip [0..] ps)) >+<) <$>+      walk (patItems ps) body     where-      walk _    _         NoBody     = Map.empty-      walk vars []        (Body v)   = occurrences vars v-      walk vars (i : pis) (Bind b)   = walk (i : vars) pis $ absBody b-      walk _    []        Bind{}     = __IMPOSSIBLE__-      walk _    (_ : _)   Body{}     = __IMPOSSIBLE__+      matching (i, p)+        | properlyMatching p = Just $ occursAs Matched $ here $ AnArg i+        | otherwise          = Nothing+{-+      matching (i, VarP{}) = Nothing+      matching (i, DotP{}) = Nothing+      matching (i, ConP _ Just{} _) = Nothing -- record patterns are not matches+      matching (i, _     ) = Just (occursAs Matched $ here (AnArg i))+-} -      match i (Arg _ _ VarP{}) = Map.empty-      match i _                = Map.singleton (AnArg i) [Unknown]+      walk _         NoBody     = return $ Map.empty+      walk []        (Body v)   = occurrences v+      walk (i : pis) (Bind b)   = withExtendedOccEnv i $ walk pis $ absBody b+      walk []        Bind{}     = __IMPOSSIBLE__+      walk (_ : _)   Body{}     = __IMPOSSIBLE__ -      patItems ps = concat $ zipWith patItem [0..] $ map unArg ps-      patItem i (VarP _) = [Just (AnArg i)]-      patItem i p        = replicate (nVars p) (Just (AnArg i))-        -- if we're pattern matching it's not something the positivity checker needs to worry about-        -- Actually it is: see issue 464+      -- @patItems ps@ creates a map from the pattern variables of @ps@+      -- to the index of the argument they are bound in.+      -- This map is given as a list.+      patItems ps = concat $ zipWith patItem [0..] ps +      -- @patItem i p@ replicates index @i@ as often as there are+      -- pattern variables in @p@+      patItem i p = replicate (nVars p) (Just (AnArg i))++      -- @nVars p@ computes the number of variables bound by pattern @p@       nVars p = case p of         VarP{}      -> 1         DotP{}      -> 1@@ -256,22 +381,32 @@         LitP{}      -> 0  instance ComputeOccurrences Term where-  occurrences vars v = case v of-    Var i args ->-      maybe Map.empty here (index vars $ fromIntegral i)-      >+< occursAs VarArg (occurrences vars args)-    Def d args   ->-      here (ADef d) >+<-      concatOccurs (zipWith (occursAs . DefArg d) [0..] $ map (occurrences vars) args)-    Con c args   -> occurrences vars args-    MetaV _ args -> occursAs MetaArg $ occurrences vars args-    Pi a b       -> occursAs LeftOfArrow (occurrences vars a) >+<-                    occurrences vars b-    Lam _ b      -> occurrences vars b-    Level l      -> occurrences vars l-    Lit{}        -> Map.empty-    Sort{}       -> Map.empty-    DontCare _   -> Map.empty -- Andreas, 2011-09-09: do we need to check for negative occurrences in irrelevant positions?+  occurrences v = case v of+    Var i args -> do+      vars <- asks vars+      occs <- occurrences args+      return $ maybe Map.empty here (index vars i)+               >+< occursAs VarArg occs+    Def d args   -> do+      inf <- asks inf+      let occsAs = if Just d /= inf then occursAs . DefArg d else \ n ->+            -- the principal argument of builtin INF (∞) is the second (n==1)+            -- the first is a level argument (n==0, counting from 0!)+            if n == 1 then occursAs UnderInf else occursAs (DefArg d n)+      occs <- mapM occurrences args+      return $ here (ADef d) >+< concatOccurs (zipWith occsAs [0..] occs)+    Con c args   -> occurrences args+    MetaV _ args -> occursAs MetaArg <$> occurrences args+    Pi a b       -> do+      oa <- occurrences a+      ob <- occurrences b+      return $ occursAs LeftOfArrow oa >+< ob+    Lam _ b      -> occurrences b+    Level l      -> occurrences l+    Lit{}        -> return $ Map.empty+    Sort{}       -> return $ Map.empty+    DontCare _   -> return $ Map.empty -- Andreas, 2011-09-09: do we need to check for negative occurrences in irrelevant positions?+    Shared p     -> occurrences $ derefPtr p     where       -- Apparently some development version of GHC chokes if the       -- following line is replaced by vs ! i.@@ -280,38 +415,44 @@         | otherwise     = __IMPOSSIBLE__  instance ComputeOccurrences Level where-  occurrences vars (Max as) = occurrences vars as+  occurrences (Max as) = occurrences as  instance ComputeOccurrences PlusLevel where-  occurrences vars ClosedLevel{} = Map.empty-  occurrences vars (Plus _ l) = occurrences vars l+  occurrences ClosedLevel{} = return $ Map.empty+  occurrences (Plus _ l)    = occurrences l  instance ComputeOccurrences LevelAtom where-  occurrences vars l = case l of-    MetaLevel _ vs   -> occursAs MetaArg $ occurrences vars vs-    BlockedLevel _ v -> occurrences vars v-    NeutralLevel v   -> occurrences vars v-    UnreducedLevel v -> occurrences vars v+  occurrences l = case l of+    MetaLevel _ vs   -> occursAs MetaArg <$> occurrences vs+    BlockedLevel _ v -> occurrences v+    NeutralLevel v   -> occurrences v+    UnreducedLevel v -> occurrences v  instance ComputeOccurrences Type where-  occurrences vars (El _ v) = occurrences vars v+  occurrences (El _ v) = occurrences v  instance ComputeOccurrences a => ComputeOccurrences (Tele a) where-  occurrences vars EmptyTel        = Map.empty-  occurrences vars (ExtendTel a b) = occurrences vars (a, b)+  occurrences EmptyTel        = return $ Map.empty+  occurrences (ExtendTel a b) = occurrences (a, b)  instance ComputeOccurrences a => ComputeOccurrences (Abs a) where-  occurrences vars (Abs   _ b) = occurrences (Nothing : vars) b-  occurrences vars (NoAbs _ b) = occurrences vars b+  occurrences (Abs   _ b) = withExtendedOccEnv Nothing $ occurrences b+  occurrences (NoAbs _ b) = occurrences b  instance ComputeOccurrences a => ComputeOccurrences (Arg a) where-  occurrences vars = occurrences vars . unArg+  occurrences = occurrences . unArg +instance ComputeOccurrences a => ComputeOccurrences (Dom a) where+  occurrences = occurrences . unDom+ instance ComputeOccurrences a => ComputeOccurrences [a] where-  occurrences vars = concatOccurs . map (occurrences vars)+  occurrences vs = concatOccurs <$> mapM occurrences vs  instance (ComputeOccurrences a, ComputeOccurrences b) => ComputeOccurrences (a, b) where-  occurrences vars (x, y) = occurrences vars x >+< occurrences vars y+  occurrences (x, y) = do+    ox <- occurrences x+    oy <- occurrences y+    return $ ox >+< oy  -- | Compute the occurrences in a given definition. computeOccurrences :: QName -> TCM Occurrences@@ -321,24 +462,26 @@     Function{funClauses = cs} -> do       n  <- getDefArity def       cs <- map (etaExpandClause n) <$> instantiateFull cs-      return-        $ concatOccurs-        $ zipWith (occursAs . InClause) [0..]-        $ map (occurrences []) cs-    Datatype{dataClause = Just c} -> occurrences [] <$> instantiateFull c+      concatOccurs . zipWith (occursAs . InClause) [0..] <$>+        mapM (getOccurrences []) cs+    Datatype{dataClause = Just c} -> getOccurrences [] =<< instantiateFull c     Datatype{dataPars = np, dataCons = cs}       -> do       let conOcc c = do             a <- defType <$> getConstInfo c-            TelV tel _ <- telView' <$> normalise a-            let tel' = telFromList $ genericDrop np $ telToList tel-                vars = reverse [ Just (AnArg i) | i <- [0..np - 1] ]-            return $ occursAs (ConArgType c) $ occurrences vars tel'+            TelV tel t <- telView' <$> normalise a+            let indices = case unEl t of+                            Def _ vs -> genericDrop np vs+                            _        -> __IMPOSSIBLE__+            let tel'    = telFromList $ genericDrop np $ telToList tel+                vars np = map (Just . AnArg) $ downFrom np+            (>+<) <$> (occursAs (ConArgType c) <$> getOccurrences (vars np) tel')+                  <*> (occursAs (IndArgType c) . onlyVarsUpTo np <$> getOccurrences (vars $ size tel) indices)       concatOccurs <$> mapM conOcc cs-    Record{recClause = Just c} -> occurrences [] <$> instantiateFull c+    Record{recClause = Just c} -> getOccurrences [] =<< instantiateFull c     Record{recPars = np, recTel = tel} -> do       let tel' = telFromList $ genericDrop np $ telToList tel-          vars = reverse [ Just (AnArg i) | i <- [0..np - 1] ]-      occurrences vars <$> instantiateFull tel'+          vars = map (Just . AnArg) $ downFrom np+      getOccurrences vars =<< instantiateFull tel'      -- Arguments to other kinds of definitions are hard-wired.     Constructor{} -> return Map.empty@@ -361,7 +504,8 @@     bind 0 = id     bind n = Bind . Abs "_" . bind (n - 1) -    vars = reverse [ defaultArg $ Var i [] | i <- [0..m - 1] ]+    vars = map (defaultArg . var) $ downFrom m+--    vars = reverse [ defaultArg $ var i | i <- [0..m - 1] ]      liftBody m (Bind b)   = Bind $ fmap (liftBody m) b     liftBody m NoBody     = bind m NoBody@@ -381,26 +525,48 @@   prettyTCM (DefNode q)   = prettyTCM q   prettyTCM (ArgNode q i) = prettyTCM q <> text ("." ++ show i) -prettyGraph g = vcat $ map pr $ Map.assocs $ Graph.unGraph g-  where-    pr (n, es) = sep-      [ prettyTCM n-      , nest 2 $ vcat $ map prE $ Map.assocs es-      ]-    prE (n, Edge o w) = prO o <+> prettyTCM n <+> fsep (pwords $ show w)-    prO Positive = text "-[+]->"-    prO Negative = text "-[-]->"-    prO Unused   = text "-[ ]->"+instance PrettyTCM Occurrence where+  prettyTCM GuardPos  = text "-[g+]->"+  prettyTCM StrictPos = text "-[++]->"+  prettyTCM JustPos   = text "-[+]->"+  prettyTCM JustNeg   = text "-[-]->"+  prettyTCM Mixed     = text "-[*]->"+  prettyTCM Unused    = text "-[ ]->" +instance PrettyTCM n => PrettyTCM (n, Edge) where+  prettyTCM (n, Edge o w) =+    prettyTCM o <+> prettyTCM n <+> fsep (pwords $ show w)++instance PrettyTCM n => PrettyTCM (n, Occurrence) where+  prettyTCM (n, o) = prettyTCM o <+> prettyTCM n++instance (PrettyTCM n, PrettyTCM (n, e)) => PrettyTCM (Graph n e) where+  prettyTCM g = vcat $ map pr $ Map.assocs $ Graph.unGraph g+    where+      pr (n, es) = sep+        [ prettyTCM n+        , nest 2 $ vcat $ map prettyTCM $ Map.assocs es+        ]+ data Edge = Edge Occurrence OccursWhere   deriving (Show) +-- | These operations form a semiring if we quotient by the relation+-- \"the 'Occurrence' components are equal\".+ instance SemiRing Edge where-  oplus _                   e@(Edge Negative _) = e-  oplus e@(Edge Negative _) _                   = e-  oplus (Edge Unused _)     e                   = e-  oplus e                   (Edge Unused _)     = e-  oplus (Edge Positive _)   e@(Edge Positive _) = e+  oplus _                    e@(Edge Mixed _)     = e -- dominant+  oplus e@(Edge Mixed _) _                        = e+  oplus (Edge Unused _)      e                    = e -- neutral+  oplus e                    (Edge Unused _)      = e+  oplus (Edge JustNeg _)     e@(Edge JustNeg _)   = e+  oplus _                    e@(Edge JustNeg w)   = Edge Mixed w+  oplus e@(Edge JustNeg w)   _                    = Edge Mixed w+  oplus _                    e@(Edge JustPos _)   = e -- dominates strict pos.+  oplus e@(Edge JustPos _)   _                    = e+  oplus _                    e@(Edge StrictPos _) = e -- dominates 'GuardPos'+  oplus e@(Edge StrictPos _) _                    = e+  oplus (Edge GuardPos _)    e@(Edge GuardPos _)  = e    otimes (Edge o1 w1) (Edge o2 w2) = Edge (otimes o1 o2) (w1 >*< w2) @@ -423,27 +589,43 @@ --   argument is the set of names in the current mutual block. computeEdge :: Set QName -> OccursWhere -> TCM (Node, Edge) computeEdge muts o = do-  (to, occ) <- mkEdge __IMPOSSIBLE__ Positive o+  (to, occ) <- mkEdge __IMPOSSIBLE__ StrictPos o   return (to, Edge occ o)   where     mkEdge to pol o = case o of       Here           -> return (to, pol)-      Unknown        -> return (to, Negative)-      VarArg o       -> negative o-      MetaArg o      -> negative o+      Unknown        -> return (to, Mixed)+      VarArg o       -> mixed o+      MetaArg o      -> mixed o       LeftOfArrow o  -> negative o+      DefArg d i o   -> do+        isDR <- isDataOrRecordType d+        let pol' | isDR == Just IsData = GuardPos  -- a datatype is guarding+                 | otherwise           = StrictPos+        if Set.member d muts then mkEdge (ArgNode d i) pol' o+         else addPol o =<< otimes pol' <$> getArgOccurrence d i+{-       DefArg d i o         | Set.member d muts -> inArg d i o         | otherwise         -> addPol o =<< getArgOccurrence d i+-}+      UnderInf o     -> addPol o GuardPos -- Andreas, 2012-06-09: ∞ is guarding       ConArgType _ o -> keepGoing o+      IndArgType _ o -> mixed o       InClause _ o   -> keepGoing o-      InDefOf d o    -> mkEdge (DefNode d) Positive o+      Matched o      -> mixed o -- consider arguments matched against as used+      InDefOf d o    -> do+        isDR <- isDataOrRecordType d+        let pol' | isDR == Just IsData = GuardPos  -- a datatype is guarding+                 | otherwise           = StrictPos+        mkEdge (DefNode d) pol' o       where         keepGoing     = mkEdge to pol-        negative      = mkEdge to Negative+        mixed         = mkEdge to Mixed+        negative o    = mkEdge to (otimes pol JustNeg) o         addPol o pol' = mkEdge to (otimes pol pol') o          -- Reset polarity when changing the target node         -- D: (A B -> C) generates a positive edge B --> A.1         -- even though the context is negative.-        inArg d i = mkEdge (ArgNode d i) Positive+        inArg d i = mkEdge (ArgNode d i) StrictPos
src/full/Agda/TypeChecking/Pretty.hs view
@@ -10,6 +10,7 @@ import Agda.Syntax.Translation.InternalToAbstract import Agda.Syntax.Translation.AbstractToConcrete import qualified Agda.Syntax.Abstract as A+import qualified Agda.Syntax.Concrete as C import qualified Agda.Syntax.Abstract.Pretty as P import qualified Agda.Syntax.Concrete.Pretty as P @@ -27,10 +28,12 @@  type Doc = P.Doc -empty, comma :: TCM Doc+empty, comma, colon, equals :: TCM Doc  empty	   = return P.empty comma	   = return P.comma+colon      = return P.colon+equals     = return P.equals pretty x   = return $ P.pretty x prettyA x  = P.prettyA x text :: String -> TCM Doc@@ -42,8 +45,9 @@ fsep ds    = P.fsep <$> sequence ds hsep ds    = P.hsep <$> sequence ds vcat ds    = P.vcat <$> sequence ds-($$), (<>), (<+>) :: TCM Doc -> TCM Doc -> TCM Doc+($$), ($+$), (<>), (<+>) :: TCM Doc -> TCM Doc -> TCM Doc d1 $$ d2   = (P.$$) <$> d1 <*> d2+d1 $+$ d2  = (P.$+$) <$> d1 <*> d2 d1 <> d2   = (P.<>) <$> d1 <*> d2 d1 <+> d2  = (P.<+>) <$> d1 <*> d2 nest n d   = P.nest n <$> d@@ -72,6 +76,7 @@ instance PrettyTCM a => PrettyTCM [a] where   prettyTCM = prettyList . map prettyTCM +instance PrettyTCM Nat where prettyTCM = text . show instance PrettyTCM Term where prettyTCM x = prettyA =<< reify x instance PrettyTCM Type where prettyTCM x = prettyA =<< reify x instance PrettyTCM Sort where prettyTCM x = prettyA =<< reify x@@ -95,15 +100,23 @@   prettyTCM (IsSort  a t) = text "Sort" <+> prettyTCM a <+> text ":" <+> prettyTCM t  instance PrettyTCM MetaId where-  prettyTCM = text . show+  prettyTCM x = do+   mn <- getMetaNameSuggestion x+   text $ show (NamedMeta mn x)  instance PrettyTCM a => PrettyTCM (Blocked a) where   prettyTCM (Blocked x a) = text "[" <+> prettyTCM a <+> text "]" <> text (show x)   prettyTCM (NotBlocked x) = prettyTCM x -instance (Reify a e, ToConcrete e c, P.Pretty c) => PrettyTCM (Arg a) where+instance (Reify a e, ToConcrete e c, P.Pretty c) => PrettyTCM (Named String a) where     prettyTCM x = prettyA =<< reify x +instance (ReifyWhen a e, ToConcrete e c, P.Pretty c) => PrettyTCM (Arg a) where+    prettyTCM x = prettyA =<< reify x++instance (Reify a e, ToConcrete e c, P.Pretty c) => PrettyTCM (Dom a) where+    prettyTCM x = prettyA =<< reify x+ instance PrettyTCM Elim where   prettyTCM (Apply v) = text "$" <+> prettyTCM v   prettyTCM (Proj f)  = text "." <> prettyTCM f@@ -111,11 +124,15 @@ instance PrettyTCM A.Expr where     prettyTCM = prettyA +instance PrettyTCM C.Name where+  prettyTCM = text . show+ instance PrettyTCM Relevance where   prettyTCM Irrelevant = text "."   prettyTCM NonStrict  = text ".."   prettyTCM Relevant   = empty   prettyTCM Forced     = empty+  prettyTCM UnusedArg  = empty  instance PrettyTCM Comparison where   prettyTCM CmpEq  = text "=="@@ -175,8 +192,14 @@               OpenIFS{}  -> __IMPOSSIBLE__               InstS{} -> __IMPOSSIBLE__               InstV{} -> __IMPOSSIBLE__-	FindInScope m   -> sep [ text $ "Find in scope " ++ (show m) ]-        IsEmpty t ->+	FindInScope m cands -> do+            t <- getMetaType m+            sep [ text $ "Find in scope " ++ (show m) ++ " :"+                , nest 2 $ prettyTCM t+                , sep $ flip map cands $ \(t,ty) ->+                           prettyTCM t <+> text ": " <+> prettyTCM ty+                ]+        IsEmpty r t ->             sep [ text "Is empty:", nest 2 $ prettyTCM t ]  instance PrettyTCM Literal where@@ -203,7 +226,7 @@   prettyTCM (PrettyContext ctx) = P.fsep . reverse <$> pr (map ctxEntry ctx)       where           pr []		   = return []-          pr (Arg h r (x,t) : ctx) = escapeContext 1 $ do+          pr (Dom h r (x,t) : ctx) = escapeContext 1 $ do               d    <- prettyTCM t               x    <- prettyTCM x               dctx <- pr ctx
src/full/Agda/TypeChecking/Primitive.hs view
@@ -41,9 +41,11 @@  -- | Rewrite a literal to constructor form if possible. constructorForm :: Term -> TCM Term-constructorForm v = case v of+constructorForm v = case ignoreSharing v of+{- 2012-04-02 changed semantics of DontCare -- Andreas, 2011-10-03, the following line restores IrrelevantLevel     DontCare v                  -> constructorForm v+-}     Lit (LitInt r n)            -> cons primZero primSuc (Lit . LitInt r) n --     Level (Max [])              -> primLevelZero --     Level (Max [ClosedLevel n]) -> cons primLevelZero primLevelSuc (Level . Max . (:[]) . ClosedLevel) n@@ -209,9 +211,10 @@     fromA <- toTerm     return $ mkList nil cons toA fromA     where-      isCon (Lam _ b) = isCon $ absBody b-      isCon (Con c _) = return c-      isCon v	    = do+      isCon (Lam _ b)  = isCon $ absBody b+      isCon (Con c _)  = return c+      isCon (Shared p) = isCon (derefPtr p)+      isCon v          = do         d <- prettyTCM v         typeError $ GenericError $ "expected constructor in built-in binding to " ++ show d                         -- TODO: check this when binding the things@@ -248,7 +251,7 @@ fromReducedTerm :: (Term -> Maybe a) -> TCM (FromTermFunction a) fromReducedTerm f = return $ \t -> do     b <- reduceB t-    case f $ unArg (ignoreBlocking b) of+    case f $ ignoreSharing $ unArg (ignoreBlocking b) of 	Just x	-> return $ YesReduction x 	Nothing	-> return $ NoReduction (reduced b) @@ -264,11 +267,11 @@   when (optSafe clo) (typeError SafeFlagPrimTrustMe)   t    <- hPi "a" (el primLevel) $           hPi "A" (return $ sort $ varSort 0) $-          hPi "x" (El (varSort 1) <$> var 0) $-          hPi "y" (El (varSort 2) <$> var 1) $+          hPi "x" (El (varSort 1) <$> varM 0) $+          hPi "y" (El (varSort 2) <$> varM 1) $           El (varSort 3) <$>-            primEquality <#> var 3 <#> var 2 <@> var 1 <@> var 0-  Con rf [] <- primRefl+            primEquality <#> varM 3 <#> varM 2 <@> varM 1 <@> varM 0+  Con rf [] <- ignoreSharing <$> primRefl   n         <- conPars . theDef <$> getConstInfo rf   let refl x | n == 2    = Con rf [Arg Hidden Forced x]              | n == 3    = Con rf []@@ -422,22 +425,30 @@ a --> b = do     a' <- a     b' <- b-    return $ El (getSort a' `sLub` getSort b') $ Pi (defaultArg a') (NoAbs "_" b')+    return $ El (getSort a' `sLub` getSort b') $ Pi (Dom NotHidden Relevant a') (NoAbs "_" b') +infixr 4 .-->++(.-->) :: TCM Type -> TCM Type -> TCM Type+a .--> b = do+    a' <- a+    b' <- b+    return $ El (getSort a' `sLub` getSort b') $ Pi (Dom NotHidden Irrelevant a') (NoAbs "_" b')+ gpi :: Hiding -> Relevance -> String -> TCM Type -> TCM Type -> TCM Type gpi h r name a b = do   a <- a   x <- freshName_ name-  b <- addCtx x (Arg h r a) b+  b <- addCtx x (Dom h r a) b   return $ El (getSort a `dLub` Abs name (getSort b))-              (Pi (Arg h r a) (Abs name b))+              (Pi (Dom h r a) (Abs name b))  hPi, nPi :: String -> TCM Type -> TCM Type -> TCM Type hPi = gpi Hidden Relevant nPi = gpi NotHidden Relevant -var :: Integer -> TCM Term-var n = return $ Var n []+varM :: Int -> TCM Term+varM = return . var  infixl 9 <@>, <#> @@ -466,10 +477,12 @@ -- | Abbreviation: @argN = 'Arg' 'NotHidden' 'Relevant'@.  argN = Arg NotHidden Relevant+domN = Dom NotHidden Relevant  -- | Abbreviation: @argH = 'Arg' 'Hidden' 'Relevant'@.  argH = Arg Hidden Relevant+domH = Dom Hidden Relevant  --------------------------------------------------------------------------- -- * The actual primitive functions@@ -499,7 +512,7 @@     , "primNatPlus"	    |-> mkPrimFun2 ((+)			    :: Op Nat)     , "primNatMinus"	    |-> mkPrimFun2 ((\x y -> max 0 (x - y)) :: Op Nat)     , "primNatTimes"	    |-> mkPrimFun2 ((*)			    :: Op Nat)-    , "primNatDivSucAux"    |-> mkPrimFun4 ((\k m n j -> k + div (n + m - j) (m + 1)) :: Nat -> Nat -> Nat -> Nat -> Nat)+    , "primNatDivSucAux"    |-> mkPrimFun4 ((\k m n j -> k + div (max 0 $ n + m - j) (m + 1)) :: Nat -> Nat -> Nat -> Nat -> Nat)     , "primNatModSucAux"    |->         let aux :: Nat -> Nat -> Nat -> Nat -> Nat             aux k m n j | n > j     = mod (n - j - 1) (m + 1)@@ -567,10 +580,10 @@ 	Just p	-> liftTCM p 	Nothing	-> typeError $ NoSuchPrimitiveFunction x --- | Rebind a primitive. Assumes everything is type correct. Used when---   importing a module with primitives.-rebindPrimitive :: String -> TCM PrimFun-rebindPrimitive x = do-    PrimImpl _ pf <- lookupPrimitiveFunction x-    bindPrimitive x pf-    return pf+lookupPrimitiveFunctionQ :: QName -> TCM (String, PrimitiveImpl)+lookupPrimitiveFunctionQ q = do+  let s = case qnameName q of+            Name _ x _ _ -> show x+  PrimImpl t pf <- lookupPrimitiveFunction s+  return (s, PrimImpl t $ pf { primFunName = q })+
+ src/full/Agda/TypeChecking/ProjectionLike.hs view
@@ -0,0 +1,149 @@+{-# LANGUAGE CPP, PatternGuards, TypeSynonymInstances, FlexibleInstances #-}+module Agda.TypeChecking.ProjectionLike where++import Control.Monad++import Data.Map (Map)+import qualified Data.Map as Map+import Data.List++import Agda.Syntax.Abstract.Name+import Agda.Syntax.Common+import Agda.Syntax.Internal+import Agda.Syntax.Position++import Agda.TypeChecking.Monad+import Agda.TypeChecking.Free (isBinderUsed)+import Agda.TypeChecking.Substitute+import Agda.TypeChecking.Positivity+import Agda.TypeChecking.CompiledClause+-- import Agda.TypeChecking.CompiledClause.Compile++import Agda.TypeChecking.DropArgs++import Agda.Utils.Monad+import Agda.Utils.Size+import Agda.Utils.Permutation+--import Agda.Utils.Pretty++#include "../undefined.h"+import Agda.Utils.Impossible+++-- | Turn a definition into a projection if it looks like a projection.+makeProjection :: QName -> TCM ()+makeProjection x = inContext [] $ do+  reportSLn "tc.proj.like" 30 $ "Considering " ++ show x ++ " for projection likeness"+  defn <- getConstInfo x+  case theDef defn of+    -- Constructor-headed functions can't be projection-like (at the moment). The reason+    -- for this is that invoking constructor-headedness will circumvent the inference of+    -- the dropped arguments.+    -- Nor can abstract definitions be projection-like since they won't reduce+    -- outside the abstract block.+    def@Function{funProjection = Nothing, funClauses = cls, funCompiled = cc0, funInv = NotInjective,+                 funMutual = [], -- Andreas, 2012-09-28: only consider non-mutual funs (or those whose recursion status has not yet been determined)+                 funAbstr = ConcreteDef} -> do+      ps0 <- filterM validProj (candidateArgs [] (unEl $ defType defn))+      reportSLn "tc.proj.like" 30 $ if null ps0 then "  no candidates found"+                                                else "  candidates: " ++ show ps0+      unless (null ps0) $ do+      -- Andreas 2012-09-26: only consider non-recursive functions for proj.like.+      -- Issue 700: problems with recursive funs. in term.checker and reduction+      ifM recursive (reportSLn "tc.proj.like" 30 $ "recursive functions are not considered for projection-likeness") $ do+      ps <- return $ filter (checkOccurs cls . snd) ps0+      when (not (null ps0) && null ps) $ reportSLn "tc.proj.like" 50 $ "  occurs check failed\n    clauses = " ++ show cls+      case reverse ps of+        []         -> return ()+        (d, n) : _ -> do+          reportSLn "tc.proj.like" 10 $ show (defName defn) ++ " is projection like in argument " +++                                        show n ++ " for type " ++ show d+          let cls' = map (dropArgs n) cls+              cc   = dropArgs n cc0+          -- cc <- compileClauses (Just (x, __IMPOSSIBLE__)) cls'+          reportSLn "tc.proj.like" 20 $ "  rewrote clauses to\n    " ++ show cc+          let newDef = def+                       { funProjection     = Just (d, n + 1)+                       , funClauses        = cls'+                       , funCompiled       = cc+                       , funInv            = dropArgs n $ funInv def+                       }+          addConstant x $ defn { defPolarity       = drop n $ defPolarity defn+                               , defArgOccurrences = drop n $ defArgOccurrences defn+                               , defDisplay        = []+                               , theDef            = newDef+                               }+    Function{funInv = Inverse{}} ->+      reportSLn "tc.proj.like" 30 $ "  injective functions can't be projections"+    Function{funAbstr = AbstractDef} ->+      reportSLn "tc.proj.like" 30 $ "  abstract functions can't be projections"+    Function{funProjection = Just{}} ->+      reportSLn "tc.proj.like" 30 $ "  already projection like"+    _ -> reportSLn "tc.proj.like" 30 $ "  not a function"+  where+    -- @validProj (d,n)@ checks whether the head @d@ of the type of the+    -- @n@th argument is injective in all args (i.d. being name of data/record/axiom).+    validProj :: (QName, Int) -> TCM Bool+    validProj (_, 0) = return False+    validProj (d, _) = do+      defn <- theDef <$> getConstInfo d+      return $ case defn of+        Datatype{} -> True+        Record{}   -> True+        Axiom{}    -> True+        _          -> False++    recursive = do+      occs <- computeOccurrences x+      let xocc = Map.lookup (ADef x) occs+      case xocc of+        Just (_ : _) -> return True -- recursive occurrence+        _            -> return False++    checkOccurs cls n = all (nonOccur n) cls++    nonOccur n Clause{clausePerm = Perm _ p, clausePats = ps, clauseBody = b} =+      and [ take n p == [0..n - 1]+          , onlyMatch n ps  -- projection-like functions are only allowed to match on the eliminatee+                            -- otherwise we may end up projecting from constructor applications, in+                            -- which case we can't reconstruct the dropped parameters+          , checkBody n b ]++    onlyMatch n ps = all (shallowMatch . unArg) (take 1 ps1) &&+                       noMatches (ps0 ++ drop 1 ps1)+      where+        (ps0, ps1) = splitAt n ps+        shallowMatch (ConP _ _ ps) = noMatches ps+        shallowMatch _             = True+        noMatches = all (noMatch . unArg)+        noMatch ConP{} = False+        noMatch LitP{} = False+        noMatch VarP{} = True+        noMatch DotP{} = True++    checkBody 0 _          = True+    checkBody _ NoBody     = False    -- absurd clauses are not permitted+    checkBody n (Bind b)   = not (isBinderUsed b) && checkBody (n - 1) (unAbs b)+    checkBody _ Body{}     = __IMPOSSIBLE__++    -- @candidateArgs [var 0,...,var(n-1)] t@ adds @(n,d)@ to the output,+    -- if @t@ is a function-type with domain @t 0 .. (n-1)@+    -- (the domain of @t@ is the type of the arg @n@).+    --+    -- This means that from the type of arg @n@ all previous arguments+    -- can be computed by a simple matching.+    -- (Provided the @d@ is data/record/postulate, checked in @validProj@).+    --+    -- E.g. f : {x : _}(y : _){z : _} -> D x y z -> ...+    -- will return (D,3) as a candidate (amongst maybe others).+    --+    candidateArgs :: [Term] -> Term -> [(QName,Int)]+    candidateArgs vs (Shared p) = candidateArgs vs $ derefPtr p+    candidateArgs vs (Pi (Dom r h (El _ def)) b)+      | Def d us <- ignoreSharing def,+        vs == map unArg us = (d, length vs) : candidateRec vs b+    candidateArgs vs (Pi _ b) = candidateRec vs b+    candidateArgs _ _ = []++    candidateRec vs NoAbs{} = []+    candidateRec vs b       = candidateArgs (var (size vs) : vs) (unEl $ absBody b)
+ src/full/Agda/TypeChecking/ProjectionLike.hs-boot view
@@ -0,0 +1,7 @@+module Agda.TypeChecking.ProjectionLike where++import Agda.Syntax.Abstract.Name (QName)+import Agda.TypeChecking.Monad.Base++makeProjection :: QName -> TCM ()+
src/full/Agda/TypeChecking/Quote.hs view
@@ -40,8 +40,8 @@   sucLevel <- primLevelSuc   lub <- primLevelMax   el <- primAgdaTypeEl-  Con z _ <- primZero-  Con s _ <- primSuc+  Con z _ <- ignoreSharing <$> primZero+  Con s _ <- ignoreSharing <$> primSuc   unsupported <- primAgdaTermUnsupported   let t @@ u = apply t [defaultArg u]       quoteHiding Hidden    = hidden@@ -51,6 +51,7 @@       quoteRelevance Irrelevant = irrelevant       quoteRelevance NonStrict  = relevant       quoteRelevance Forced     = relevant+      quoteRelevance UnusedArg  = relevant       quoteLit (LitInt   _ n)   = iterate suc zero !! fromIntegral n       quoteLit _                = unsupported       -- We keep no ranges in the quoted term, so the equality on terms@@ -68,17 +69,19 @@       list (a : as) = cons @@ a @@ list as       zero = con @@ quoteName z @@ nil       suc n = con @@ quoteName s @@ list [arg @@ visible @@ relevant @@ n]+      quoteDom q (Dom h r t) = arg @@ quoteHiding h @@ quoteRelevance r @@ q t       quoteArg q (Arg h r t) = arg @@ quoteHiding h @@ quoteRelevance r @@ q t       quoteArgs ts = list (map (quoteArg quote) ts)-      quote (Var n ts) = var @@ Lit (LitInt noRange n) @@ quoteArgs ts+      quote (Var n ts) = var @@ Lit (LitInt noRange $ fromIntegral n) @@ quoteArgs ts       quote (Lam h t) = lam @@ quoteHiding h @@ quote (absBody t)       quote (Def x ts) = def @@ quoteName x @@ quoteArgs ts       quote (Con x ts) = con @@ quoteName x @@ quoteArgs ts-      quote (Pi t u) = pi @@ quoteArg quoteType t+      quote (Pi t u) = pi @@ quoteDom quoteType t                           @@ quoteType (absBody u)       quote (Level _) = unsupported       quote (Lit lit) = quoteLit lit       quote (Sort s)  = sort @@ quoteSort s+      quote (Shared p) = quote $ derefPtr p       quote MetaV{}   = unsupported       quote DontCare{} = unsupported -- could be exposed at some point but we have to take care   return (quote, quoteType)@@ -100,7 +103,7 @@  isCon :: QName -> TCM Term -> TCM Bool isCon con tm = do t <- tm-                  case t of+                  case ignoreSharing t of                     Con con' _ -> return (con == con')                     _ -> return False @@ -130,7 +133,7 @@ instance Unquote a => Unquote (Arg a) where   unquote t = do     t <- reduce t-    case t of+    case ignoreSharing t of       Con c [hid,rel,x] -> do         choice           [(c `isCon` primArgArg, Arg <$> unquoteN hid <*> unquoteN rel <*> unquoteN x)]@@ -140,14 +143,14 @@ instance Unquote Integer where   unquote t = do     t <- reduce t-    case t of+    case ignoreSharing t of       Lit (LitInt _ n) -> return n       _ -> unquoteFailed "Integer" "not a literal integer" t  instance Unquote a => Unquote [a] where   unquote t = do     t <- reduce t-    case t of+    case ignoreSharing t of       Con c [x,xs] -> do         choice           [(c `isCon` primCons, (:) <$> unquoteN x <*> unquoteN xs)]@@ -161,30 +164,34 @@ instance Unquote Hiding where   unquote t = do     t <- reduce t-    case t of+    let err = unquoteFailed "Hiding" "neither `hidden' nor `visible'" t+    case ignoreSharing t of       Con c [] -> do         choice           [(c `isCon` primHidden,  return Hidden)           ,(c `isCon` primInstance, return Instance)           ,(c `isCon` primVisible, return NotHidden)]-          (unquoteFailed "Hiding" "neither `hidden' nor `visible'" t)-      _ -> unquoteFailed "Hiding" "arity is not 0" t+          err+      Con c vs -> unquoteFailed "Hiding" "the value is a constructor, but its arity is not 0" t+      _        -> err  instance Unquote Relevance where   unquote t = do     t <- reduce t-    case t of+    let err = unquoteFailed "Relevance" "neither `relevant' or `irrelevant'" t+    case ignoreSharing t of       Con c [] -> do         choice           [(c `isCon` primRelevant,   return Relevant)           ,(c `isCon` primIrrelevant, return Irrelevant)]-          (unquoteFailed "Relevance" "neither `relevant' or `irrelevant'" t)-      _ -> unquoteFailed "Relevance" "arity is not 0" t+          err+      Con c vs -> unquoteFailed "Relevance" "the value is a constructor, but its arity is not 0" t+      _        -> err  instance Unquote QName where   unquote t = do     t <- reduce t-    case t of+    case ignoreSharing t of       Lit (LitQName _ x) -> return x       _                  -> unquoteFailed "QName" "not a literal qname value" t @@ -195,7 +202,7 @@ instance Unquote Sort where   unquote t = do     t <- reduce t-    case t of+    case ignoreSharing t of       Con c [] -> do         choice           [(c `isCon` primAgdaSortUnsupported, unquoteFailed "Sort" "unsupported sort" t)]@@ -213,7 +220,7 @@ instance Unquote Type where   unquote t = do     t <- reduce t-    case t of+    case ignoreSharing t of       Con c [s, u] -> do         choice           [(c `isCon` primAgdaTypeEl, El <$> unquoteN s <*> unquoteN u)]@@ -223,7 +230,7 @@ instance Unquote Term where   unquote t = do     t <- reduce t-    case t of+    case ignoreSharing t of       Con c [] ->         choice           [(c `isCon` primAgdaTermUnsupported, unquoteFailed "Term" "unsupported term" t)]@@ -236,11 +243,11 @@        Con c [x,y] ->         choice-          [(c `isCon` primAgdaTermVar, Var <$> unquoteN x <*> unquoteN y)+          [(c `isCon` primAgdaTermVar, Var <$> (fromInteger <$> unquoteN x) <*> unquoteN y)           ,(c `isCon` primAgdaTermCon, Con <$> unquoteN x <*> unquoteN y)           ,(c `isCon` primAgdaTermDef, Def <$> unquoteN x <*> unquoteN y)           ,(c `isCon` primAgdaTermLam, Lam <$> unquoteN x <*> unquoteN y)-          ,(c `isCon` primAgdaTermPi,  Pi  <$> unquoteN x <*> unquoteN y)]+          ,(c `isCon` primAgdaTermPi,  Pi  <$> (domFromArg <$> unquoteN x) <*> unquoteN y)]           (unquoteFailed "Term" "arity 2 and none of Var, Con, Def, Lam, Pi" t)        Con{} -> unquoteFailed "Term" "neither arity 0 nor 1 nor 2" t
src/full/Agda/TypeChecking/RecordPatterns.hs view
@@ -1,10 +1,13 @@-{-# LANGUAGE CPP, GeneralizedNewtypeDeriving #-}+{-# LANGUAGE CPP, PatternGuards, TupleSections, FlexibleInstances, GeneralizedNewtypeDeriving #-}  -- | Code which replaces pattern matching on record constructors with -- uses of projection functions.  module Agda.TypeChecking.RecordPatterns   ( translateRecordPatterns+  , translateCompiledClauses+  , translateSplitTree+  , recordPatternToProjections   ) where  import Control.Applicative@@ -12,23 +15,365 @@ import Control.Monad.Fix import Control.Monad.Reader import Control.Monad.State+ import Data.List+import Data.Map (Map)+import qualified Data.Map as Map+import qualified Data.Traversable as Trav  import Agda.Syntax.Common import Agda.Syntax.Internal++import Agda.TypeChecking.CompiledClause+import Agda.TypeChecking.Coverage.SplitTree+import Agda.TypeChecking.Datatypes+import Agda.TypeChecking.Errors import Agda.TypeChecking.Monad import Agda.TypeChecking.Pretty+import Agda.TypeChecking.Records import Agda.TypeChecking.Reduce import Agda.TypeChecking.Substitute import Agda.TypeChecking.Telescope+ import Agda.Utils.Either import Agda.Utils.List+import qualified Agda.Utils.Map as Map+import Agda.Utils.Maybe import Agda.Utils.Permutation import Agda.Utils.Size  #include "../undefined.h" import Agda.Utils.Impossible +---------------------------------------------------------------------------+-- * Record pattern translation for let bindings+---------------------------------------------------------------------------++-- | Take a record pattern @p@ and yield a list of projections+--   corresponding to the pattern variables, from left to right.+--+--   E.g. for @(x , (y , z))@ we return @[ fst, fst . snd, snd . snd ]@.+--+--   If it is not a record pattern, error 'ShouldBeRecordPattern' is raised.+recordPatternToProjections :: Pattern -> TCM [Term -> Term]+recordPatternToProjections p =+  case p of+    VarP{}             -> return [ \ x -> x ]+    LitP{}             -> typeError $ ShouldBeRecordPattern p+    DotP{}             -> typeError $ ShouldBeRecordPattern p+    ConP c Nothing  ps -> typeError $ ShouldBeRecordPattern p+    ConP c (Just t) ps -> do+      t <- reduce t+      fields <- getRecordTypeFields (unArg t)+      concat <$> zipWithM comb (map proj fields) (map unArg ps)+  where+    proj p = \ x -> Def (unArg p) [defaultArg x]+    comb :: (Term -> Term) -> Pattern -> TCM [Term -> Term]+    comb prj p = map (prj .) <$> recordPatternToProjections p+++---------------------------------------------------------------------------+-- * Record pattern translation for compiled clauses+---------------------------------------------------------------------------++-- | Take a matrix of booleans (at least one row!) and summarize the columns+--   using conjunction.+conjColumns :: [[Bool]] -> [Bool]+conjColumns =  foldl1 (zipWith (&&))++-- | @insertColumn i a m@ inserts a column before the @i@th column in+--   matrix @m@ and fills it with value @a@.+insertColumn :: Int -> a -> [[a]] -> [[a]]+insertColumn i a rows = map ins rows where+  ins row = let (init, last) = splitAt i row in init ++ a : last++{- UNUSED+-- | @cutColumn i m@ removes the @i@th column from matrix @m@.+cutColumn :: Int -> [[a]] -> [[a]]+cutColumn i rows = map cut rows where+  cut row = let (init, _:last) = splitAt i row in init ++ last++-- | @cutColumns i n xss = (yss, xss')@ cuts out a submatrix @yss@+--   of width @n@ from @xss@, starting at column @i@.+cutColumns :: Int -> Int -> [[a]] -> ([[a]], [[a]])+cutColumns i n rows = unzip (map (cutSublist i n) rows)+-}++-- | @cutSublist i n xs = (xs', ys, xs'')@ cuts out a sublist @ys@+--   of width @n@ from @xs@, starting at column @i@.+cutSublist :: Int -> Int -> [a] -> ([a], [a], [a])+cutSublist i n row =+  let (init, rest) = splitAt i row+      (mid , last) = splitAt n rest+  in  (init, mid, last)+++translateCompiledClauses :: CompiledClauses -> TCM CompiledClauses+translateCompiledClauses cc = snd <$> loop cc+  where++    loop :: CompiledClauses -> TCM ([Bool], CompiledClauses)+    loop cc = case cc of+      Fail      -> return (repeat True, cc)+      Done xs t -> return (map (const True) xs, cc)+      Case i cs -> loops i cs++    loops :: Int                  -- split variable+          -> Case CompiledClauses -- original split tree+          -> TCM ([Bool], CompiledClauses)+    loops i cs@(Branches { conBranches = conMap+                         , litBranches = litMap+                         , catchAllBranch = catchAll }) = do++      -- recurse on and compute variable status of catch-all clause+      (xssa, catchAll) <- unzipMaybe <$> Trav.mapM loop catchAll+      let xsa = maybe (repeat True) id xssa++      -- recurse on compute variable status of literal clauses+      (xssl, litMap)   <- Map.unzip <$> Trav.mapM loop litMap+      let xsl = conjColumns (xsa : insertColumn i False (Map.elems xssl))++      -- recurse on constructor clauses+      (ccs, xssc, conMap)    <- Map.unzip3 <$> do+        Trav.forM (Map.mapWithKey (,) conMap) $ \ (c, WithArity ar cc) -> do+          (xs, cc)     <- loop cc+          dataOrRecCon <- getConstructorArity c+          let (isRC, n)   = either (False,) ((True,) . size) dataOrRecCon+              (xs0, rest) = genericSplitAt i xs+              (xs1, xs2 ) = genericSplitAt n rest+              -- if all dropped variables are virgins and we are record cons.+              -- then new variable x is also virgin+              -- and we can translate away the split+              x           = isRC && and xs1+              -- xs' = updated variables+              xs'         = xs0 ++ x : xs2+              -- get the record fields+              fs          = either __IMPOSSIBLE__ id dataOrRecCon+              -- if x we can translate+              mcc = if x then [replaceByProjections i (map unArg fs) cc] else []++          when (n /= ar) __IMPOSSIBLE__+          return (mcc, xs', WithArity ar cc)++      -- compute result+      let xs = conjColumns (xsl : Map.elems xssc)+      case concat $ Map.elems ccs of+        -- case: no record pattern was translated+        []   -> return (xs, Case i $ Branches+                  { conBranches = conMap+                  , litBranches = litMap+                  , catchAllBranch = catchAll })++        -- case: translated away one record pattern+        [cc] -> return (xs, cc)++        -- case: more than one record patterns (impossible)+        _    -> __IMPOSSIBLE__++-- | @replaceByProjections i projs cc@ replaces variables @i..i+n-1@+--   (counted from left) by projections @projs_1 i .. projs_n i@.+--+--   If @n==0@, we matched on a zero-field record, which means that+--   we are actually introduce a new variable, increasing split+--   positions greater or equal to @i@ by one.+--   Otherwise, we have to lower+--+replaceByProjections :: Int -> [QName] -> CompiledClauses -> CompiledClauses+replaceByProjections i projs cc =+  let n = length projs++      loop :: Int -> CompiledClauses -> CompiledClauses+      loop i cc = case cc of+        Case j cs++        -- if j < i, we leave j untouched, but we increase i by the number+        -- of variables replacing j in the branches+          | j < i     -> Case j $ loops i cs++        -- if j >= i then we shrink j by (n-1)+          | otherwise -> Case (j - (n-1)) $ fmap (loop i) cs++        Done xs v ->+        -- we have to delete (n-1) variables from xs+        -- and instantiate v suitably with the projections+          let (xs0,xs1,xs2)     = cutSublist i n xs+              names | null xs1  = ["r"]+                    | otherwise = map unArg xs1+              x                 = defaultArg $ foldr1 (++) names+              xs'               = xs0 ++ x : xs2+              us                = map (\ p -> Def p [defaultArg $ var 0]) (reverse projs)+              -- go from level (i + n - 1) to index (subtract from |xs|-1)+              index             = length xs - (i + n)+          in  Done xs' $ applySubst (liftS (length xs2) $ us ++# raiseS 1) v+          -- The body is NOT guarded by lambdas!+          -- WRONG: underLambdas i (flip apply) (map defaultArg us) v++        Fail -> Fail++      loops :: Int -> Case CompiledClauses -> Case CompiledClauses+      loops i Branches{ conBranches    = conMap+                      , litBranches    = litMap+                      , catchAllBranch = catchAll } =+        Branches{ conBranches    = fmap (\ (WithArity n c) -> WithArity n $ loop (i + n - 1) c) conMap+                , litBranches    = fmap (loop (i - 1)) litMap+                , catchAllBranch = fmap (loop i) catchAll+                }+  in  loop i cc++-- | Check if a split is on a record constructor, and return the projections+--   if yes.+isRecordCase :: Case c -> TCM (Maybe ([QName], c))+isRecordCase (Branches { conBranches = conMap+                       , litBranches = litMap+                       , catchAllBranch = Nothing })+  | Map.null litMap+  , [(con, WithArity _ br)] <- Map.toList conMap = do+    isRC <- isRecordConstructor con+    case isRC of+      Just (r, Record { recFields = fs }) -> return $ Just (map unArg fs, br)+      Just (r, _) -> __IMPOSSIBLE__+      Nothing -> return Nothing+isRecordCase _ = return Nothing++---------------------------------------------------------------------------+-- * Record pattern translation for split trees+---------------------------------------------------------------------------++-- | Split tree annotation.+data RecordSplitNode = RecordSplitNode+  { splitCon           :: QName  -- ^ Constructor name for this branch.+  , splitArity         :: Int    -- ^ Arity of the constructor.+  , splitRecordPattern :: Bool   -- ^ Should we translate this split away?+  }++-- | Split tree annotated for record pattern translation.+type RecordSplitTree  = SplitTree' RecordSplitNode+type RecordSplitTrees = SplitTrees' RecordSplitNode++++-- | Bottom-up procedure to annotate split tree.+recordSplitTree :: SplitTree -> TCM RecordSplitTree+recordSplitTree t = snd <$> loop t+  where++    loop :: SplitTree -> TCM ([Bool], RecordSplitTree)+    loop t = case t of+      SplittingDone n -> return (replicate n True, SplittingDone n)+      SplitAt i ts    -> do+        (xs, ts) <- loops i ts+        return (xs, SplitAt i ts)++    loops :: Int -> SplitTrees -> TCM ([Bool], RecordSplitTrees)+    loops i ts = do+      (xss, ts) <- unzip <$> do+        forM ts $ \ (c, t) -> do+          (xs, t) <- loop t+          (isRC, n) <- either (False,) ((True,) . size) <$> getConstructorArity c+          let (xs0, rest) = genericSplitAt i xs+              (xs1, xs2)  = genericSplitAt n rest+              x           = isRC && and xs1+              xs'         = xs0 ++ x : xs2+          return (xs, (RecordSplitNode c n x, t))+      return (foldl1 (zipWith (&&)) xss, ts)++-- | Bottom-up procedure to record-pattern-translate split tree.+translateSplitTree :: SplitTree -> TCM SplitTree+translateSplitTree t = snd <$> loop t+  where++    -- @loop t = return (xs, t')@ returns the translated split tree @t'@+    -- plus the status @xs@ of the clause variables+    --   True  = variable will never be split on in @t'@ (virgin variable)+    --   False = variable will be spilt on in @t'@+    loop :: SplitTree -> TCM ([Bool], SplitTree)+    loop t = case t of+      SplittingDone n ->+        -- start with n virgin variables+        return (replicate n True, SplittingDone n)+      SplitAt i ts    -> do+        (x, xs, ts) <- loops i ts+        -- if we case on record constructor, drop case+        let t' = if x then+                   case ts of+                     [(c,t)] -> t+                     _       -> __IMPOSSIBLE__+                  -- else retain case+                  else SplitAt i ts+        return (xs, t')++    -- @loops i ts = return (x, xs, ts')@ cf. @loop@+    -- @x@ says wether at arg @i@ we have a record pattern split+    -- that can be removed+    loops :: Int -> SplitTrees -> TCM (Bool, [Bool], SplitTrees)+    loops i ts = do+      -- note: ts not empty+      (rs, xss, ts) <- unzip3 <$> do+        forM ts $ \ (c, t) -> do+          (xs, t) <- loop t+          (isRC, n) <- either (False,) ((True,) . size) <$> getConstructorArity c+          -- now drop variables from i to i+n-1+          let (xs0, rest) = genericSplitAt i xs+              (xs1, xs2)  = genericSplitAt n rest+              -- if all dropped variables are virgins and we are record cons.+              -- then new variable x is also virgin+              -- and we can translate away the split+              x           = isRC && and xs1+              -- xs' = updated variables+              xs'         = xs0 ++ x : xs2+              -- delete splits from t if record match+              t'          = if x then dropFrom i (n - 1) t else t+          return (x, xs', (c, t'))+      -- x = did we split on a record constructor?+      let x = and rs+      -- invariant: if record constructor, then exactly one constructor+      if x then unless (rs == [True]) __IMPOSSIBLE__+      -- else no record constructor+       else unless (or rs == False) __IMPOSSIBLE__+      return (x, conjColumns xss, ts)++-- | @dropFrom i n@ drops arguments @j@  with @j < i + n@ and @j >= i@.+--   NOTE: @n@ can be negative, in which case arguments are inserted.+class DropFrom a where+  dropFrom :: Int -> Int -> a -> a++instance DropFrom (SplitTree' c) where+  dropFrom i n t = case t of+    SplittingDone m -> SplittingDone (m - n)+    SplitAt j ts+      | j >= i + n -> SplitAt (j - n) $ dropFrom i n ts+      | j < i      -> SplitAt j $ dropFrom i n ts+      | otherwise  -> __IMPOSSIBLE__++instance DropFrom (c, SplitTree' c) where+  dropFrom i n (c, t) = (c, dropFrom i n t)++instance DropFrom a => DropFrom [a] where+  dropFrom i n ts = map (dropFrom i n) ts++{-+-- | Check if a split is on a record constructor, and return the projections+--   if yes.+isRecordSplit :: SplitTrees -> TCM (Maybe ([QName], c))+isRecordSplit (Branches { conBranches = conMap+                       , litBranches = litMap+                       , catchAllBranch = Nothing })+  | Map.null litBranches+  , [(con,br)] <- Map.toList conMap = do+    isRC <- isRecordConstructor con+    case isRC of+      Just (r, Record { recFields = fs }) -> return $ Just (map unArg fs, br)+      Just (r, _) -> __IMPOSSIBLE__+      Nothing -> return Nothing+isRecordSplit _ = return Nothing++-}+++---------------------------------------------------------------------------+-- * Record pattern translation for function definitions+---------------------------------------------------------------------------+ -- | Replaces pattern matching on record constructors with uses of -- projection functions. Does not remove record constructor patterns -- which have sub-patterns containing non-record constructor or@@ -60,19 +405,19 @@       noNewPatternVars = size cs        s'   = reverse s-      rest = [ Var i [] | i <- [noNewPatternVars..] ]+      mkSub s = s ++# raiseS noNewPatternVars        -- Substitution used to convert terms in the old RHS's       -- context to terms in the new RHS's context.-      rhsSubst = s' ++ rest+      rhsSubst = mkSub s'        -- Substitution used to convert terms in the old telescope's       -- context to terms in the new RHS's context.-      rhsSubst' = permute (reverseP $ clausePerm clause) s' ++ rest+      rhsSubst' = mkSub $ permute (reverseP $ clausePerm clause) s'       -- TODO: Is it OK to replace the definition above with the       -- following one?       ---      --   rhsSubst' = permute (clausePerm clause) s ++ rest+      --   rhsSubst' = mkSub $ permute (clausePerm clause) s        -- The old telescope, flattened and in textual left-to-right       -- order (i.e. the type signature for the variable which occurs@@ -87,7 +432,7 @@       -- of the new RHS, in textual left-to-right order, and with       -- Nothing in place of dot patterns.       newTel' =-        map (fmap (id *** substs rhsSubst')) $+        map (fmap (id *** applySubst rhsSubst')) $         translateTel cs $         flattenedOldTel @@ -98,7 +443,7 @@         where         -- It is important that dummy does not mention any variable         -- (see the definition of reorderTel).-        dummy = defaultArg (El Prop (Sort Prop))+        dummy = dummyDom -- defaultArg (El Prop (Sort Prop))          isDotP n = case genericIndex cs n of                      Left DotP{} -> True@@ -113,25 +458,25 @@        -- Substitution used to convert terms in the old telescope's       -- context to terms in the new telescope's context.-      lhsSubst = map (substs lhsSubst') rhsSubst'+      lhsSubst = applySubst lhsSubst' rhsSubst'        -- The new telescope.       newTel =         uncurry unflattenTel . unzip $         map (maybe __IMPOSSIBLE__ id) $         permute newPerm $-        map (fmap (id *** substs lhsSubst')) $+        map (fmap (id *** applySubst lhsSubst')) $         newTel'        -- New clause.       c = clause             { clauseTel  = newTel             , clausePerm = newPerm-            , clausePats = substs lhsSubst ps+            , clausePats = applySubst lhsSubst ps             , clauseBody = translateBody cs rhsSubst $ clauseBody clause             } -  reportSDoc "tc.lhs.top" 10 $+  reportSDoc "tc.lhs.recpat" 10 $     escapeContext (size $ clauseTel clause) $ vcat       [ text "Translated clause:"       , nest 2 $ vcat@@ -194,7 +539,7 @@ -- patterns, should be removed, and a new variable, with the name @x@, -- inserted instead. The type of the new variable is @t@. -type Changes = [Either Pattern (Kind -> Nat, String, Arg Type)]+type Changes = [Either Pattern (Kind -> Nat, String, Dom Type)]  -- | Record pattern trees. @@ -229,7 +574,7 @@ -- | Converts a record tree to a single pattern along with information -- about the deleted pattern variables. -removeTree :: RecordTree -> RecPatM (Pattern, Substitution, Changes)+removeTree :: RecordTree -> RecPatM (Pattern, [Term], Changes) removeTree tree = do   (pat, x) <- nextVar   let ps = projections tree@@ -239,7 +584,7 @@    return $ case tree of     Leaf p     -> (p,   s, [Left p])-    RecCon t _ -> (pat, s, [Right (count, "r", t)])+    RecCon t _ -> (pat, s, [Right (count, "r", domFromArg t)])  ------------------------------------------------------------------------ -- Translation of patterns@@ -267,7 +612,7 @@ -- -- This function assumes that literals are never of record type. -translatePattern :: Pattern -> RecPatM (Pattern, Substitution, Changes)+translatePattern :: Pattern -> RecPatM (Pattern, [Term], Changes) translatePattern (ConP c Nothing ps) = do   (ps, s, cs) <- translatePatterns ps   return (ConP c Nothing ps, s, cs)@@ -283,7 +628,7 @@ -- | 'translatePattern' lifted to lists of arguments.  translatePatterns ::-  [Arg Pattern] -> RecPatM ([Arg Pattern], Substitution, Changes)+  [Arg Pattern] -> RecPatM ([Arg Pattern], [Term], Changes) translatePatterns ps = do   (ps', ss, cs) <- unzip3 <$> mapM (translatePattern . unArg) ps   return (ps' `withArgsFrom` ps, concat ss, concat cs)@@ -304,7 +649,7 @@  recordTree ::   Pattern ->-  RecPatM (Either (RecPatM (Pattern, Substitution, Changes)) RecordTree)+  RecPatM (Either (RecPatM (Pattern, [Term], Changes)) RecordTree) recordTree p@(ConP _ Nothing _) = return $ Left $ translatePattern p recordTree (ConP c (Just t) ps) = do   rs <- mapM (recordTree . unArg) ps@@ -316,15 +661,9 @@                 concat ss, concat cs)     Right ts -> liftTCM $ do       t <- reduce t-      case t of-        Arg { unArg = El _ (Def r _) } -> do-          rDef <- theDef <$> getConstInfo r-          case rDef of-            Record { recFields = fields } -> do-              let proj p = \t -> Def (unArg p) [defaultArg t]-              return $ Right $ RecCon t $ zip (map proj fields) ts-            _ -> __IMPOSSIBLE__-        _ -> __IMPOSSIBLE__+      fields <- getRecordTypeFields (unArg t)+      let proj p = \x -> Def (unArg p) [defaultArg x]+      return $ Right $ RecCon t $ zip (map proj fields) ts recordTree p@VarP{} = return (Right (Leaf p)) recordTree p@DotP{} = return (Right (Leaf p)) recordTree p@LitP{} = return $ Left $ translatePattern p@@ -338,10 +677,10 @@   :: Changes      -- ^ Explanation of how the telescope should be changed. Types      -- should be in the context of the old telescope.-  -> [(String, Arg Type)]+  -> [(String, Dom Type)]      -- ^ Old telescope, flattened, in textual left-to-right      -- order.-  -> [Maybe (String, Arg Type)]+  -> [Maybe (String, Dom Type)]      -- ^ New telescope, flattened, in textual left-to-right order.      -- 'Nothing' is used to indicate the locations of dot patterns. translateTel (Left (DotP{}) : rest)   tel = Nothing : translateTel rest tel@@ -362,7 +701,7 @@   Bind $ Abs x $ translateBody rest s $ dropBinds n' b   where n' = sum $ map n [VarPat, DotPat] translateBody (Left _ : rest) s (Bind b)   = Bind $ fmap (translateBody rest s) b-translateBody []              s (Body t)   = Body $ substs s t+translateBody []              s (Body t)   = Body $ applySubst s t translateBody _               _ _          = __IMPOSSIBLE__  ------------------------------------------------------------------------@@ -372,11 +711,11 @@  permToSubst :: Permutation -> Substitution permToSubst (Perm n is) =-  [ makeVar i | i <- [0..n-1] ] ++ [ Var i [] | i <- [size is..] ]+  [ makeVar i | i <- [0..n - 1] ] ++# raiseS (size is)   where   makeVar i = case genericElemIndex i is of     Nothing -> __IMPOSSIBLE__-    Just k  -> Var k []+    Just k  -> var k  -- | @dropBinds n b@ drops the initial @n@ occurrences of 'Bind' from @b@. --
src/full/Agda/TypeChecking/Records.hs view
@@ -1,4 +1,4 @@-{-# LANGUAGE CPP #-}+{-# LANGUAGE CPP, TupleSections #-}  module Agda.TypeChecking.Records where @@ -21,8 +21,11 @@ import Agda.TypeChecking.Reduce import Agda.TypeChecking.Telescope import Agda.TypeChecking.Datatypes+import Agda.Utils.Either import Agda.Utils.List+import Agda.Utils.Maybe import Agda.Utils.Monad+import qualified Agda.Utils.HashMap as HMap  #include "../undefined.h" import Agda.Utils.Impossible@@ -71,12 +74,12 @@ -- | Find all records with at least the given fields. findPossibleRecords :: [C.Name] -> TCM [QName] findPossibleRecords fields = do-  defs <- (Map.union `on` sigDefinitions) <$> getSignature <*> getImportedSignature+  defs <- (HMap.union `on` sigDefinitions) <$> getSignature <*> getImportedSignature   let possible def = case theDef def of         Record{ recFields = fs } -> Set.isSubsetOf given inrecord           where inrecord = Set.fromList $ map (nameConcrete . qnameName . unArg) fs         _ -> False-  return [ defName d | d <- Map.elems defs, possible d ]+  return [ defName d | d <- HMap.elems defs, possible d ]   where     given = Set.fromList fields @@ -84,6 +87,18 @@ getRecordFieldTypes :: QName -> TCM Telescope getRecordFieldTypes r = recTel <$> getRecordDef r +-- | Get the field names belonging to a record type.+getRecordTypeFields :: Type -> TCM [Arg QName]+getRecordTypeFields t =+  case ignoreSharing $ unEl t of+    Def r _ -> do+      rDef <- theDef <$> getConstInfo r+      case rDef of+        Record { recFields = fields } -> return fields+        _ -> __IMPOSSIBLE__+    _ -> __IMPOSSIBLE__++ -- | Get the type of the record constructor. getRecordConstructorType :: QName -> TCM Type getRecordConstructorType r = recConType <$> getRecordDef r@@ -94,33 +109,36 @@ getRecordConstructor r = killRange <$> recCon <$> getRecordDef r  -- | Check if a name refers to a record.-isRecord :: QName -> TCM Bool+--   If yes, return record definition.+isRecord :: QName -> TCM (Maybe Defn) isRecord r = do   def <- theDef <$> getConstInfo r   return $ case def of-    Record{} -> True-    _        -> False+    Record{} -> Just def+    _        -> Nothing  -- | Check if a name refers to an eta expandable record. isEtaRecord :: QName -> TCM Bool-isEtaRecord r = do-  def <- theDef <$> getConstInfo r-  return $ case def of-    Record{recEtaEquality = eta} -> eta-    _                            -> False+isEtaRecord r = maybe False recEtaEquality <$> isRecord r +-- | Check if a name refers to a record which is not coinductive.  (Projections are then size-preserving)+isInductiveRecord :: QName -> TCM Bool+isInductiveRecord r = maybe False (\ d -> recInduction d == Inductive || not (recRecursive d)) <$> isRecord r+ -- | Check if a type is an eta expandable record and return the record identifier and the parameters. isEtaRecordType :: Type -> TCM (Maybe (QName, Args))-isEtaRecordType (El _ (Def d ps)) = ifM (isEtaRecord d) (return $ Just (d, ps)) (return Nothing)-isEtaRecordType _ = return Nothing+isEtaRecordType a = case ignoreSharing $ unEl a of+  Def d ps -> ifM (isEtaRecord d) (return $ Just (d, ps)) (return Nothing)+  _        -> return Nothing  -- | Check if a name refers to a record constructor.-isRecordConstructor :: QName -> TCM Bool+--   If yes, return record definition.+isRecordConstructor :: QName -> TCM (Maybe (QName, Defn)) isRecordConstructor c = do   def <- theDef <$> getConstInfo c   case def of-    Constructor{ conData = r } -> isRecord r-    _                          -> return False+    Constructor{ conData = r } -> fmap (r,) <$> isRecord r+    _                          -> return Nothing  -- | Check if a constructor name is the internally generated record constructor. isGeneratedRecordConstructor :: QName -> TCM Bool@@ -134,6 +152,20 @@         _                             -> return False     _ -> return False +-- | Mark record type as unguarded.+--   No eta-expansion.  Projections do not preserve guardedness.+unguardedRecord :: QName -> TCM ()+unguardedRecord q = modifySignature $ updateDefinition q $ updateTheDef $ updateRecord+  where updateRecord r@Record{} = r { recEtaEquality = False, recRecursive = True }+        updateRecord _          = __IMPOSSIBLE__++-- | Mark record type as recursive.+--   Projections do not preserve guardedness.+recursiveRecord :: QName -> TCM ()+recursiveRecord q = modifySignature $ updateDefinition q $ updateTheDef $ updateRecord+  where updateRecord r@Record{} = r { recRecursive = True }+        updateRecord _          = __IMPOSSIBLE__+ {-| Compute the eta expansion of a record. The first argument should be     the name of a record type. Given @@ -143,50 +175,48 @@ -} etaExpandRecord :: QName -> Args -> Term -> TCM (Telescope, Args) etaExpandRecord r pars u = do-  Record{ recFields = xs, recTel = tel } <- getRecordDef r+  Record{ recFields = xs, recTel = tel, recEtaEquality = eta } <- getRecordDef r+  unless eta __IMPOSSIBLE__ -- make sure we do not expand non-eta records   let tel' = apply tel pars-  case u of+  case ignoreSharing u of     Con _ args -> return (tel', args)  -- Already expanded.     _          -> do-      -- irrelevant fields are expanded to DontCare-      -- this is sound because etaExpandRecord is only called during conversion-      -- WARNING: do not use etaExpandRecord to expand MetaVars!!-      let proj (Arg h Irrelevant x) = Arg h Irrelevant $ DontCare (Def x [defaultArg u])-          proj (Arg h rel x)        = Arg h rel $-            Def x [defaultArg u]+      let xs' = map (fmap (\ x -> Def x [defaultArg u])) xs       reportSDoc "tc.record.eta" 20 $ vcat         [ text "eta expanding" <+> prettyTCM u <+> text ":" <+> prettyTCM r         , nest 2 $ vcat           [ text "tel' =" <+> prettyTCM tel'-          , text "args =" <+> prettyTCM (map proj xs)+          , text "args =" <+> prettyTCM xs'           ]         ]-      return (tel', map proj xs)-  where-    hide a = a { argHiding = Hidden }+      return (tel', xs')  -- | The fields should be eta contracted already.+--+--   We can eta constract if all fields @f = ...@ are irrelevant+--   or the corresponding projection @f = f v@ of the same value @v@,+--   but we need at least one relevant field to find the value @v@. etaContractRecord :: QName -> QName -> Args -> TCM Term etaContractRecord r c args = do   Record{ recPars = npars, recFields = xs } <- getRecordDef r-  let check a ax = do+  let check :: Arg Term -> Arg QName -> Maybe (Maybe Term)+      check a ax = do       -- @a@ is the constructor argument, @ax@ the corr. record field name         -- skip irrelevant record fields by returning DontCare-        case (argRelevance a, unArg a) of-          (Irrelevant, v) -> return $ Just $ DontCare __IMPOSSIBLE__ -- thrown out later+        case (argRelevance a, ignoreSharing $ unArg a) of+          (Irrelevant, _) -> Just Nothing           -- if @a@ is the record field name applied to a single argument           -- then it passes the check-          (_, Def y [arg]) | unArg ax == y-                         -> return (Just $ unArg arg)-          _              -> return Nothing+          (_, Def f [arg]) | unArg ax == f+                         -> Just $ Just $ unArg arg+          _              -> Nothing       fallBack = return (Con c args)   case compare (length args) (length xs) of     LT -> fallBack       -- Not fully applied     GT -> __IMPOSSIBLE__ -- Too many arguments. Impossible.     EQ -> do-      as <- zipWithM check args xs-      case sequence as of-        Just as -> case filter notDontCare as of+      case zipWithM check args xs of+        Just as -> case [ a | Just a <- as ] of           (a:as) ->             if all (a ==) as               then do@@ -196,41 +226,66 @@                   ]                 return a               else fallBack-          _ -> fallBack -- just DontCares+          _ -> fallBack -- just irrelevant terms         _ -> fallBack  -- a Nothing-  where notDontCare (DontCare _) = False-        notDontCare _            = True  -- | Is the type a hereditarily singleton record type? May return a -- blocking metavariable. -- -- Precondition: The name should refer to a record type, and the -- arguments should be the parameters to the type.- isSingletonRecord :: QName -> Args -> TCM (Either MetaId Bool)-isSingletonRecord = isSingletonRecord' False+isSingletonRecord r ps = mapRight isJust <$> isSingletonRecord' False r ps  isSingletonRecordModuloRelevance :: QName -> Args -> TCM (Either MetaId Bool)-isSingletonRecordModuloRelevance = isSingletonRecord' True+isSingletonRecordModuloRelevance r ps = mapRight isJust <$> isSingletonRecord' True r ps -isSingletonRecord' :: Bool -> QName -> Args -> TCM (Either MetaId Bool)-isSingletonRecord' regardIrrelevance r ps =-  check =<< ((`apply` ps) <$> getRecordFieldTypes r)+-- | Return the unique (closed) inhabitant if exists.+--   In case of counting irrelevance in, the returned inhabitant+--   contains garbage.+isSingletonRecord' :: Bool -> QName -> Args -> TCM (Either MetaId (Maybe Term))+isSingletonRecord' regardIrrelevance r ps = do+  def <- getRecordDef r+  emap (Con $ recCon def) <$> check (recTel def `apply` ps)   where-  check EmptyTel            = return (Right True)-  check (ExtendTel arg tel) | regardIrrelevance && argRelevance arg == Irrelevant =-    underAbstraction arg tel check-  check (ExtendTel arg tel) = do-    TelV _ t <- telView $ unArg arg+  check :: Telescope -> TCM (Either MetaId (Maybe [Arg Term]))+  check EmptyTel            = return $ Right $ Just []+  check (ExtendTel arg@(Dom h Irrelevant _) tel) | regardIrrelevance =+    underAbstraction arg tel $ \ tel ->+      emap (Arg h Irrelevant garbage :) <$> check tel+  check (ExtendTel arg@(Dom h r t) tel) = do+    isSing <- isSingletonType' regardIrrelevance t+    case isSing of+      Left mid       -> return $ Left mid+      Right Nothing  -> return $ Right Nothing+      Right (Just v) -> underAbstraction arg tel $ \ tel ->+        emap (Arg h r v :) <$> check tel+  garbage :: Term+  garbage = Sort Prop++-- | Check whether a type has a unique inhabitant and return it.+--   Can be blocked by a metavar.+isSingletonType :: Type -> TCM (Either MetaId (Maybe Term))+isSingletonType = isSingletonType' False++-- | Check whether a type has a unique inhabitant (irrelevant parts ignored).+--   Can be blocked by a metavar.+isSingletonTypeModuloRelevance :: (MonadTCM tcm) => Type -> tcm (Either MetaId Bool)+isSingletonTypeModuloRelevance t = liftTCM $ do+  mapRight isJust <$> isSingletonType' True t++isSingletonType' :: Bool -> Type -> TCM (Either MetaId (Maybe Term))+isSingletonType' regardIrrelevance t = do+    TelV tel t <- telView t     t <- reduceB $ unEl t-    case t of+    case ignoreSharing <$> t of       Blocked m _            -> return (Left m)       NotBlocked (MetaV m _) -> return (Left m)       NotBlocked (Def r ps)  ->-        ifM (not <$> isRecord r) (return $ Right False) $ do-          isRec <- isSingletonRecord' regardIrrelevance r ps-          case isRec of-            Left _      -> return isRec-            Right False -> return isRec-            Right True  -> underAbstraction arg tel $ check-      _ -> return (Right False)+        ifM (isNothing <$> isRecord r) (return $ Right Nothing) $ do+          emap (abstract tel) <$> isSingletonRecord' regardIrrelevance r ps+      _ -> return (Right Nothing)++-- | Auxiliary function.+emap :: (a -> b) -> Either c (Maybe a) -> Either c (Maybe b)+emap = mapRight . fmap
src/full/Agda/TypeChecking/Records.hs-boot view
@@ -7,7 +7,7 @@ import qualified Agda.Syntax.Concrete.Name as C import Agda.TypeChecking.Monad -isRecord :: QName -> TCM Bool+isRecord :: QName -> TCM (Maybe Defn) isEtaRecord :: QName -> TCM Bool getRecordFieldNames :: QName -> TCM [Arg C.Name] etaContractRecord :: QName -> QName -> Args -> TCM Term
src/full/Agda/TypeChecking/Reduce.hs view
@@ -13,6 +13,7 @@ import Data.Map (Map) import qualified Data.Set as Set import Data.Traversable+import Data.Hashable  import Agda.Syntax.Position import Agda.Syntax.Common@@ -34,6 +35,8 @@ import {-# SOURCE #-} Agda.TypeChecking.CompiledClause.Match  import Agda.Utils.Monad+import Agda.Utils.HashMap (HashMap)+import qualified Agda.Utils.HashMap as HMap  #include "../undefined.h" import Agda.Utils.Impossible@@ -71,6 +74,7 @@       InstS _                        -> __IMPOSSIBLE__   instantiate (Level l) = levelTm <$> instantiate l   instantiate (Sort s) = sortTm <$> instantiate s+  instantiate v@Shared{} = updateSharedTerm instantiate v   instantiate t = return t  instance Instantiate Level where@@ -84,7 +88,7 @@   instantiate l = case l of     MetaLevel m vs -> do       v <- instantiate (MetaV m vs)-      case v of+      case ignoreSharing v of         MetaV m vs -> return $ MetaLevel m vs         _          -> return $ UnreducedLevel v     UnreducedLevel l -> UnreducedLevel <$> instantiate l@@ -120,6 +124,9 @@ instance Instantiate t => Instantiate (Arg t) where     instantiate = traverse instantiate +instance Instantiate t => Instantiate (Dom t) where+    instantiate = traverse instantiate+ instance Instantiate t => Instantiate [t] where     instantiate = traverse instantiate @@ -150,17 +157,33 @@   instantiate (SortCmp cmp a b)    = uncurry (SortCmp cmp) <$> instantiate (a,b)   instantiate (Guarded c pid)      = Guarded <$> instantiate c <*> pure pid   instantiate (UnBlock m)          = return $ UnBlock m-  instantiate (FindInScope m)      = return $ FindInScope m-  instantiate (IsEmpty t)          = IsEmpty <$> instantiate t+  instantiate (FindInScope m args) = FindInScope m <$> mapM instantiate args+  instantiate (IsEmpty r t)        = IsEmpty r <$> instantiate t  instance (Ord k, Instantiate e) => Instantiate (Map k e) where     instantiate = traverse instantiate  ------ Reduction to weak head normal form.---+---------------------------------------------------------------------------+-- * Reduction to weak head normal form.+--------------------------------------------------------------------------- +ifBlocked :: MonadTCM tcm =>  Term -> (MetaId -> Term -> tcm a) -> (Term -> tcm a) -> tcm a+ifBlocked t blocked unblocked = do+  t <- liftTCM $ reduceB t+  case ignoreSharing <$> t of+    Blocked m _            -> blocked m (ignoreBlocking t)+    NotBlocked (MetaV m _) -> blocked m (ignoreBlocking t)+    NotBlocked _           -> unblocked (ignoreBlocking t)++ifBlockedType :: MonadTCM tcm => Type -> (MetaId -> Type -> tcm a) -> (Type -> tcm a) -> tcm a+ifBlockedType t blocked unblocked = do+  t <- liftTCM $ reduceB t+  case ignoreSharing . unEl <$> t of+    Blocked m _            -> blocked m (ignoreBlocking t)+    NotBlocked (MetaV m _) -> blocked m (ignoreBlocking t)+    NotBlocked _           -> unblocked (ignoreBlocking t)+ class Reduce t where     reduce  :: t -> TCM t     reduceB :: t -> TCM (Blocked t)@@ -211,13 +234,14 @@     where       fromTm v = do         bv <- reduceB v-        case bv of-          Blocked m v             -> return $ Blocked m  $ BlockedLevel m v+        let v = ignoreBlocking bv+        case ignoreSharing <$> bv of           NotBlocked (MetaV m vs) -> return $ NotBlocked $ MetaLevel m vs-          NotBlocked v            -> return $ NotBlocked $ NeutralLevel v+          Blocked m _             -> return $ Blocked m  $ BlockedLevel m v+          NotBlocked _            -> return $ NotBlocked $ NeutralLevel v  -instance (Raise t, Reduce t) => Reduce (Abs t) where+instance (Subst t, Reduce t) => Reduce (Abs t) where   reduce b@(Abs x _) = Abs x <$> underAbstraction_ b reduce   reduce (NoAbs x v) = NoAbs x <$> reduce v @@ -226,9 +250,15 @@     reduce = traverse reduce  instance Reduce t => Reduce (Arg t) where-    reduce  = traverse reduce+    reduce a@(Arg h Irrelevant t) = return a  -- Don't reduce irr. args!?+    reduce a                      = traverse reduce a+     reduceB t = traverse id <$> traverse reduceB t +instance Reduce t => Reduce (Dom t) where+    reduce = traverse reduce+    reduceB t = traverse id <$> traverse reduceB t+ -- Tuples are never blocked instance (Reduce a, Reduce b) => Reduce (a,b) where     reduce (x,y)  = (,) <$> reduce x <*> reduce y@@ -240,7 +270,10 @@   reduceB v = {-# SCC "reduce<Term>" #-} do     v <- instantiate v     case v of-      MetaV x args -> notBlocked . MetaV x <$> reduce args+--    Andreas, 2012-11-05 not reducing meta args does not destroy anything+--    and seems to save 2% sec on the standard library+--      MetaV x args -> notBlocked . MetaV x <$> reduce args+      MetaV x args -> return $ notBlocked v       Def f args   -> unfoldDefinition False reduceB (Def f []) f args       Con c args   -> do           -- Constructors can reduce when they come from an@@ -254,20 +287,22 @@       Var _ _  -> return $ notBlocked v       Lam _ _  -> return $ notBlocked v       DontCare _ -> return $ notBlocked v+      Shared{}   -> updateSharedTermF reduceB v     where       -- NOTE: reduceNat can traverse the entire term.+      reduceNat v@Shared{} = updateSharedTerm reduceNat v       reduceNat v@(Con c []) = do         mz  <- getBuiltin' builtinZero         case v of           _ | Just v == mz  -> return $ Lit $ LitInt (getRange c) 0           _		    -> return v       reduceNat v@(Con c [Arg NotHidden Relevant w]) = do-        ms  <- getBuiltin' builtinSuc+        ms  <- fmap ignoreSharing <$> getBuiltin' builtinSuc         case v of           _ | Just (Con c []) == ms -> inc <$> reduce w           _	                    -> return v           where-            inc w = case w of+            inc w = case ignoreSharing w of               Lit (LitInt r n) -> Lit (LitInt (fuseRange c r) $ n + 1)               _                -> Con c [Arg NotHidden Relevant w]       reduceNat v = return v@@ -313,7 +348,7 @@             mredToBlocked (MaybeRed NotReduced  x) = notBlocked x             mredToBlocked (MaybeRed (Reduced b) x) = x <$ b -    -- reduceNormal :: Term -> QName -> [MaybeReduced (Arg Term)] -> Delayed -> [Clause] -> Maybe CompiledClauses -> TCM (Blocked Term)+    reduceNormal :: Term -> QName -> [MaybeReduced (Arg Term)] -> Delayed -> [Clause] -> Maybe CompiledClauses -> TCM (Blocked Term)     reduceNormal v0 f args delayed def mcc = {-# SCC "reduceNormal" #-} do         case def of           _ | Delayed <- delayed,@@ -333,61 +368,90 @@                 reportSDoc "tc.reduce" 90 $ vcat                   [ text "*** reduced definition: " <+> prettyTCM f                   ]-                reportSDoc "tc.reduce" 100 $ text "    result" <+> prettyTCM v+                reportSDoc "tc.reduce" 100 $ text "    result" <+> prettyTCM v $$+                                             text "    raw   " <+> text (show v)                 keepGoing v       where defaultResult = return $ notBlocked $ v0 `apply` (map ignoreReduced args) -    -- Apply a defined function to it's arguments.-    --   The original term is the first argument applied to the third.-    appDef :: Term -> CompiledClauses -> MaybeReducedArgs -> TCM (Reduced (Blocked Term) Term)-    appDef v cc args = liftTCM $ do-      r <- matchCompiled cc args-      case r of+-- | Reduce a non-primitive definition if it is a copy linking to another def.+reduceDefCopy :: QName -> Args -> TCM (Reduced () Term)+reduceDefCopy f vs = do+  info <- getConstInfo f+  if (defCopy info) then reduceDef_ info f vs else return $ NoReduction ()++-- | Reduce a non-primitive definition once unless it is delayed.+reduceDef :: QName -> Args -> TCM (Reduced () Term)+reduceDef f vs = do+  info <- getConstInfo f+  reduceDef_ info f vs++reduceDef_ :: Definition -> QName -> Args -> TCM (Reduced () Term)+reduceDef_ info f vs = do+  let v0   = Def f []+      args = map notReduced vs+      cls  = (defClauses info)+      mcc  = (defCompiled info)+      delayed = (defDelayed info)+  case delayed of+    Delayed -> return $ NoReduction ()+    NotDelayed -> do+      ev <- maybe (appDef' v0 cls args)+                  (\cc -> appDef v0 cc args) mcc+      case ev of         YesReduction t    -> return $ YesReduction t-        NoReduction args' -> return $ NoReduction $ fmap (apply v) args'+        NoReduction args' -> return $ NoReduction () -    appDef' :: Term -> [Clause] -> MaybeReducedArgs -> TCM (Reduced (Blocked Term) Term)-    appDef' _ [] _ = {- ' -} __IMPOSSIBLE__-    appDef' v cls@(Clause {clausePats = ps} : _) args-      | m < n     = return $ NoReduction $ notBlocked $ v `apply` map ignoreReduced args-      | otherwise = do-        let (args0, args1) = splitAt n args-        r <- goCls cls (map ignoreReduced args0)-        case r of-          YesReduction u -> return $ YesReduction $ u `apply` map ignoreReduced args1-          NoReduction v  -> return $ NoReduction $ (`apply` map ignoreReduced args1) <$> v-      where+-- Apply a defined function to it's arguments.+--   The original term is the first argument applied to the third.+appDef :: Term -> CompiledClauses -> MaybeReducedArgs -> TCM (Reduced (Blocked Term) Term)+appDef v cc args = liftTCM $ do+  r <- matchCompiled cc args+  case r of+    YesReduction t    -> return $ YesReduction t+    NoReduction args' -> return $ NoReduction $ fmap (apply v) args' -        n = genericLength ps-        m = genericLength args+appDef' :: Term -> [Clause] -> MaybeReducedArgs -> TCM (Reduced (Blocked Term) Term)+appDef' _ [] _ = {- ' -} __IMPOSSIBLE__+appDef' v cls@(Clause {clausePats = ps} : _) args+  | m < n     = return $ NoReduction $ notBlocked $ v `apply` map ignoreReduced args+  | otherwise = do+    let (args0, args1) = splitAt n args+    r <- goCls cls (map ignoreReduced args0)+    case r of+      YesReduction u -> return $ YesReduction $ u `apply` map ignoreReduced args1+      NoReduction v  -> return $ NoReduction $ (`apply` map ignoreReduced args1) <$> v+  where -        goCls :: [Clause] -> Args -> TCM (Reduced (Blocked Term) Term)-        goCls [] args = typeError $ IncompletePatternMatching v args-        goCls (cl@(Clause { clausePats = pats-                          , clauseBody = body }) : cls) args = do-            (m, args) <- matchPatterns pats args-            case m of-                No		  -> goCls cls args-                DontKnow Nothing  -> return $ NoReduction $ notBlocked $ v `apply` args-                DontKnow (Just m) -> return $ NoReduction $ blocked m $ v `apply` args-                Yes args'-                  | hasBody body  -> return $ YesReduction (-                      -- TODO: let matchPatterns also return the reduced forms-                      -- of the original arguments!-                      app args' body)-                  | otherwise	  -> return $ NoReduction $ notBlocked $ v `apply` args+    n = genericLength ps+    m = genericLength args -        hasBody (Body _) = True-        hasBody NoBody   = False-        hasBody (Bind b) = hasBody (unAbs b)+    goCls :: [Clause] -> Args -> TCM (Reduced (Blocked Term) Term)+    goCls [] args = typeError $ IncompletePatternMatching v args+    goCls (cl@(Clause { clausePats = pats+                      , clauseBody = body }) : cls) args = do+        (m, args) <- matchPatterns pats args+        case m of+            No		  -> goCls cls args+            DontKnow Nothing  -> return $ NoReduction $ notBlocked $ v `apply` args+            DontKnow (Just m) -> return $ NoReduction $ blocked m $ v `apply` args+            Yes args'+              | hasBody body  -> return $ YesReduction (+                  -- TODO: let matchPatterns also return the reduced forms+                  -- of the original arguments!+                  app args' body)+              | otherwise	  -> return $ NoReduction $ notBlocked $ v `apply` args -        app []		 (Body v') = v'-        app (arg : args) (Bind b)  = app args $ absApp b arg -- CBN-        app  _		  NoBody   = __IMPOSSIBLE__-        app (_ : _)	 (Body _)  = __IMPOSSIBLE__-        app []		 (Bind _)  = __IMPOSSIBLE__+    hasBody (Body _) = True+    hasBody NoBody   = False+    hasBody (Bind b) = hasBody (unAbs b) +    app []		 (Body v') = v'+    app (arg : args) (Bind b)  = app args $ absApp b arg -- CBN+    app  _		  NoBody   = __IMPOSSIBLE__+    app (_ : _)	 (Body _)  = __IMPOSSIBLE__+    app []		 (Bind _)  = __IMPOSSIBLE__ + instance Reduce a => Reduce (Closure a) where     reduce cl = do 	x <- enterClosure cl reduce@@ -402,14 +466,14 @@     return $ ValueCmp cmp t u v   reduce (ElimCmp cmp t v as bs) =     ElimCmp cmp <$> reduce t <*> reduce v <*> reduce as <*> reduce bs-  reduce (LevelCmp cmp u v)   = uncurry (LevelCmp cmp) <$> reduce (u,v)-  reduce (TypeCmp cmp a b)    = uncurry (TypeCmp cmp) <$> reduce (a,b)+  reduce (LevelCmp cmp u v)    = uncurry (LevelCmp cmp) <$> reduce (u,v)+  reduce (TypeCmp cmp a b)     = uncurry (TypeCmp cmp) <$> reduce (a,b)   reduce (TelCmp a b cmp tela telb) = uncurry (TelCmp a b cmp)  <$> reduce (tela,telb)-  reduce (SortCmp cmp a b)    = uncurry (SortCmp cmp) <$> reduce (a,b)-  reduce (Guarded c pid)      = Guarded <$> reduce c <*> pure pid-  reduce (UnBlock m)          = return $ UnBlock m-  reduce (FindInScope m)      = return $ FindInScope m-  reduce (IsEmpty t)          = IsEmpty <$> reduce t+  reduce (SortCmp cmp a b)     = uncurry (SortCmp cmp) <$> reduce (a,b)+  reduce (Guarded c pid)       = Guarded <$> reduce c <*> pure pid+  reduce (UnBlock m)           = return $ UnBlock m+  reduce (FindInScope m cands) = FindInScope m <$> mapM reduce cands+  reduce (IsEmpty r t)         = IsEmpty r <$> reduce t  instance (Ord k, Reduce e) => Reduce (Map k e) where     reduce = traverse reduce@@ -446,6 +510,7 @@ 		Lam h b	    -> Lam h <$> normalise b 		Sort s	    -> sortTm <$> normalise s 		Pi a b	    -> uncurry Pi <$> normalise (a,b)+                Shared{}    -> updateSharedTerm normalise v                 DontCare _  -> return v  instance Normalise Elim where@@ -473,11 +538,15 @@     normalise (Bind   b) = Bind   <$> normalise b     normalise  NoBody	 = return NoBody -instance (Raise t, Normalise t) => Normalise (Abs t) where+instance (Subst t, Normalise t) => Normalise (Abs t) where     normalise a@(Abs x _) = Abs x <$> underAbstraction_ a normalise     normalise (NoAbs x v) = NoAbs x <$> normalise v  instance Normalise t => Normalise (Arg t) where+    normalise a@(Arg h Irrelevant t) = return a -- Andreas, 2012-04-02: Do not normalize irrelevant terms!?+    normalise a = traverse normalise a++instance Normalise t => Normalise (Dom t) where     normalise = traverse normalise  instance Normalise t => Normalise [t] where@@ -496,7 +565,7 @@ 	x <- enterClosure cl normalise 	return $ cl { clValue = x } -instance (Raise a, Normalise a) => Normalise (Tele a) where+instance (Subst a, Normalise a) => Normalise (Tele a) where   normalise EmptyTel        = return EmptyTel   normalise (ExtendTel a b) = uncurry ExtendTel <$> normalise (a, b) @@ -509,14 +578,14 @@     return $ ValueCmp cmp t u v   normalise (ElimCmp cmp t v as bs) =     ElimCmp cmp <$> normalise t <*> normalise v <*> normalise as <*> normalise bs-  normalise (LevelCmp cmp u v)   = uncurry (LevelCmp cmp) <$> normalise (u,v)-  normalise (TypeCmp cmp a b)    = uncurry (TypeCmp cmp) <$> normalise (a,b)+  normalise (LevelCmp cmp u v)    = uncurry (LevelCmp cmp) <$> normalise (u,v)+  normalise (TypeCmp cmp a b)     = uncurry (TypeCmp cmp) <$> normalise (a,b)   normalise (TelCmp a b cmp tela telb) = uncurry (TelCmp a b cmp) <$> normalise (tela,telb)-  normalise (SortCmp cmp a b)    = uncurry (SortCmp cmp) <$> normalise (a,b)-  normalise (Guarded c pid)      = Guarded <$> normalise c <*> pure pid-  normalise (UnBlock m)          = return $ UnBlock m-  normalise (FindInScope m)      = return $ FindInScope m-  normalise (IsEmpty t)          = IsEmpty <$> normalise t+  normalise (SortCmp cmp a b)     = uncurry (SortCmp cmp) <$> normalise (a,b)+  normalise (Guarded c pid)       = Guarded <$> normalise c <*> pure pid+  normalise (UnBlock m)           = return $ UnBlock m+  normalise (FindInScope m cands) = FindInScope m <$> mapM normalise cands+  normalise (IsEmpty r t)         = IsEmpty r <$> normalise t  instance Normalise Pattern where   normalise p = case p of@@ -574,6 +643,7 @@           Lam h b     -> Lam h <$> instantiateFull b           Sort s      -> sortTm <$> instantiateFull s           Pi a b      -> uncurry Pi <$> instantiateFull (a,b)+          Shared{}    -> updateSharedTerm instantiateFull v           DontCare v  -> DontCare <$> instantiateFull v  instance InstantiateFull Level where@@ -587,7 +657,7 @@   instantiateFull l = case l of     MetaLevel m vs -> do       v <- instantiateFull (MetaV m vs)-      case v of+      case ignoreSharing v of         MetaV m vs -> return $ MetaLevel m vs         _          -> return $ UnreducedLevel v     NeutralLevel v -> NeutralLevel <$> instantiateFull v@@ -608,13 +678,16 @@     instantiateFull (Bind   b) = Bind   <$> instantiateFull b     instantiateFull  NoBody    = return NoBody -instance (Raise t, InstantiateFull t) => InstantiateFull (Abs t) where+instance (Subst t, InstantiateFull t) => InstantiateFull (Abs t) where     instantiateFull a@(Abs x _) = Abs x <$> underAbstraction_ a instantiateFull     instantiateFull (NoAbs x a) = NoAbs x <$> instantiateFull a  instance InstantiateFull t => InstantiateFull (Arg t) where     instantiateFull = traverse instantiateFull +instance InstantiateFull t => InstantiateFull (Dom t) where+    instantiateFull = traverse instantiateFull+ instance InstantiateFull t => InstantiateFull [t] where     instantiateFull = traverse instantiateFull @@ -641,14 +714,14 @@       return $ ValueCmp cmp t u v     ElimCmp cmp t v as bs ->       ElimCmp cmp <$> instantiateFull t <*> instantiateFull v <*> instantiateFull as <*> instantiateFull bs-    LevelCmp cmp u v   -> uncurry (LevelCmp cmp) <$> instantiateFull (u,v)-    TypeCmp cmp a b    -> uncurry (TypeCmp cmp) <$> instantiateFull (a,b)+    LevelCmp cmp u v    -> uncurry (LevelCmp cmp) <$> instantiateFull (u,v)+    TypeCmp cmp a b     -> uncurry (TypeCmp cmp) <$> instantiateFull (a,b)     TelCmp a b cmp tela telb -> uncurry (TelCmp a b cmp) <$> instantiateFull (tela,telb)-    SortCmp cmp a b    -> uncurry (SortCmp cmp) <$> instantiateFull (a,b)-    Guarded c pid      -> Guarded <$> instantiateFull c <*> pure pid-    UnBlock m          -> return $ UnBlock m-    FindInScope m      -> return $ FindInScope m-    IsEmpty t          -> IsEmpty <$> instantiateFull t+    SortCmp cmp a b     -> uncurry (SortCmp cmp) <$> instantiateFull (a,b)+    Guarded c pid       -> Guarded <$> instantiateFull c <*> pure pid+    UnBlock m           -> return $ UnBlock m+    FindInScope m cands -> FindInScope m <$> mapM instantiateFull cands+    IsEmpty r t         -> IsEmpty r <$> instantiateFull t  instance InstantiateFull Elim where   instantiateFull (Apply v) = Apply <$> instantiateFull v@@ -657,6 +730,9 @@ instance (Ord k, InstantiateFull e) => InstantiateFull (Map k e) where     instantiateFull = traverse instantiateFull +instance (Eq k, Hashable k, InstantiateFull e) => InstantiateFull (HashMap k e) where+    instantiateFull = traverse instantiateFull+ instance InstantiateFull ModuleName where     instantiateFull = return @@ -669,7 +745,7 @@ instance InstantiateFull Section where   instantiateFull (Section tel n) = flip Section n <$> instantiateFull tel -instance (Raise a, InstantiateFull a) => InstantiateFull (Tele a) where+instance (Subst a, InstantiateFull a) => InstantiateFull (Tele a) where   instantiateFull EmptyTel = return EmptyTel   instantiateFull (ExtendTel a b) = uncurry ExtendTel <$> instantiateFull (a, b) @@ -677,9 +753,9 @@     instantiateFull = return  instance InstantiateFull Definition where-    instantiateFull (Defn rel x t df i c d) = do+    instantiateFull (Defn rel x t pol occ df i c d) = do       (t, (df, d)) <- instantiateFull (t, (df, d))-      return $ Defn rel x t df i c d+      return $ Defn rel x t pol occ df i c d  instance InstantiateFull a => InstantiateFull (Open a) where   instantiateFull (OpenThing n a) = OpenThing n <$> instantiateFull a@@ -718,6 +794,9 @@   instantiateFull NotInjective = return NotInjective   instantiateFull (Inverse inv) = Inverse <$> instantiateFull inv +instance InstantiateFull a => InstantiateFull (WithArity a) where+  instantiateFull (WithArity n a) = WithArity n <$> instantiateFull a+ instance InstantiateFull a => InstantiateFull (Case a) where   instantiateFull (Branches cs ls m) =     Branches <$> instantiateFull cs@@ -738,28 +817,36 @@  instance InstantiateFull Interface where     instantiateFull (Interface ms mod scope inside-                               sig b hsImports highlighting pragmas) =+                               sig b hsImports highlighting pragmas patsyns) = 	Interface ms mod scope inside 	    <$> instantiateFull sig 	    <*> instantiateFull b             <*> return hsImports             <*> return highlighting             <*> return pragmas+            <*> return patsyns  instance InstantiateFull a => InstantiateFull (Builtin a) where     instantiateFull (Builtin t) = Builtin <$> instantiateFull t     instantiateFull (Prim x)	= Prim <$> instantiateFull x +instance InstantiateFull QName where+  instantiateFull = return+ instance InstantiateFull a => InstantiateFull (Maybe a) where   instantiateFull = mapM instantiateFull ++{- DUPLICATE of Telescope.telView+ -- | @telViewM t@ is like @telView' t@, but it reduces @t@ to expose --   function type constructors. telViewM :: Type -> TCM TelView telViewM t = do   t <- reduce t -- also instantiates meta if in head position-  case unEl t of+  case ignoreSharing $ unEl t of     Pi a b -> absV a (absName b) <$> telViewM (absBody b)     _      -> return $ TelV EmptyTel t   where     absV a x (TelV tel t) = TelV (ExtendTel a (Abs x tel)) t+-}
src/full/Agda/TypeChecking/Rules/Builtin.hs view
@@ -20,7 +20,8 @@ import Agda.TypeChecking.Constraints import Agda.TypeChecking.Reduce import Agda.TypeChecking.Pretty-+import Agda.TypeChecking.Irrelevance+import Agda.TypeChecking.SizedTypes ( builtinSizeHook ) import Agda.TypeChecking.Rules.Term ( checkExpr , inferExpr ) import {-# SOURCE #-} Agda.TypeChecking.Rules.Builtin.Coinduction @@ -33,19 +34,22 @@ -- * Checking builtin pragmas --------------------------------------------------------------------------- +builtinPostulate :: TCM Type -> BuiltinDescriptor+builtinPostulate = BuiltinPostulate Relevant+ coreBuiltins :: [BuiltinInfo] coreBuiltins = map (\(x,z) -> BuiltinInfo x z)   [ (builtinList               |-> BuiltinData (tset --> tset) [builtinNil, builtinCons])   , (builtinArg                |-> BuiltinData (tset --> tset) [builtinArgArg])   , (builtinBool               |-> BuiltinData tset [builtinTrue, builtinFalse])   , (builtinNat                |-> BuiltinData tset [builtinZero, builtinSuc])-  , (builtinLevel              |-> BuiltinPostulate tset)-  , (builtinInteger            |-> BuiltinPostulate tset)-  , (builtinFloat              |-> BuiltinPostulate tset)-  , (builtinChar               |-> BuiltinPostulate tset)-  , (builtinString             |-> BuiltinPostulate tset)-  , (builtinQName              |-> BuiltinPostulate tset)-  , (builtinIO                 |-> BuiltinPostulate (tset --> tset))+  , (builtinLevel              |-> builtinPostulate tset)+  , (builtinInteger            |-> builtinPostulate tset)+  , (builtinFloat              |-> builtinPostulate tset)+  , (builtinChar               |-> builtinPostulate tset)+  , (builtinString             |-> builtinPostulate tset)+  , (builtinQName              |-> builtinPostulate tset)+  , (builtinIO                 |-> builtinPostulate (tset --> tset))   , (builtinAgdaSort           |-> BuiltinData tset [builtinAgdaSortSet, builtinAgdaSortLit, builtinAgdaSortUnsupported])   , (builtinAgdaType           |-> BuiltinData tset [builtinAgdaTypeEl])   , (builtinAgdaTerm           |-> BuiltinData tset@@ -55,15 +59,15 @@                                      ,builtinAgdaTermUnsupported])   , (builtinEquality           |-> BuiltinData (hPi "a" (el primLevel) $                                                 hPi "A" (return $ sort $ varSort 0) $-                                                (El (varSort 1) <$> var 0) -->-                                                (El (varSort 1) <$> var 0) -->+                                                (El (varSort 1) <$> varM 0) -->+                                                (El (varSort 1) <$> varM 0) -->                                                 return (sort $ varSort 1))                                                [builtinRefl])   , (builtinHiding             |-> BuiltinData tset [builtinHidden, builtinInstance, builtinVisible])   , (builtinRelevance          |-> BuiltinData tset [builtinRelevant, builtinIrrelevant])   , (builtinRefl               |-> BuiltinDataCons (hPi "a" (el primLevel) $ hPi "A" (return $ sort $ varSort 0) $-                                                    hPi "x" (El (varSort 1) <$> var 0) $-                                                    El (varSort 2) <$> primEquality <#> var 2 <#> var 1 <@> var 0 <@> var 0))+                                                    hPi "x" (El (varSort 1) <$> varM 0) $+                                                    El (varSort 2) <$> primEquality <#> varM 2 <#> varM 1 <@> varM 0 <@> varM 0))   , (builtinNil                |-> BuiltinDataCons (hPi "A" tset (el (list v0))))   , (builtinCons               |-> BuiltinDataCons (hPi "A" tset (tv0 --> el (list v0) --> el (list v0))))   , (builtinZero               |-> BuiltinDataCons tnat)@@ -84,9 +88,17 @@   , (builtinVisible            |-> BuiltinDataCons thiding)   , (builtinRelevant           |-> BuiltinDataCons trelevance)   , (builtinIrrelevant         |-> BuiltinDataCons trelevance)-  , (builtinSize               |-> BuiltinPostulate tset)-  , (builtinSizeSuc            |-> BuiltinPostulate (tsize --> tsize))-  , (builtinSizeInf            |-> BuiltinPostulate tsize)+  , (builtinSize               |-> builtinPostulate tset)+  , (builtinSizeLt             |-> builtinPostulate (tsize --> tset))+  , (builtinSizeSuc            |-> builtinPostulate (tsize --> tsize))+  , (builtinSizeInf            |-> builtinPostulate tsize)+  -- postulate max : {i : Size} -> Size< i -> Size< i -> Size< i+  , (builtinSizeMax            |-> builtinPostulate (tsize --> tsize --> tsize))+     -- (hPi "i" tsize $ let a = el $ primSizeLt <@> v0 in (a --> a --> a)))+  -- postulate .irrelevant : {a : Level}{A : Set a} -> .A -> A+  , (builtinIrrAxiom           |-> BuiltinPostulate Irrelevant+                                     (hPi "a" (el primLevel) $ hPi "A" (return $ sort $ varSort 0) $+                                      (El (varSort 1) <$> varM 0) .--> (El (varSort 1) <$> varM 0)))   , (builtinAgdaSortSet        |-> BuiltinDataCons (tterm --> tsort))   , (builtinAgdaSortLit        |-> BuiltinDataCons (tnat --> tsort))   , (builtinAgdaSortUnsupported|-> BuiltinDataCons tsort)@@ -100,9 +112,9 @@   , (builtinLevelZero          |-> BuiltinPrim "primLevelZero" (const $ return ()))   , (builtinLevelSuc           |-> BuiltinPrim "primLevelSuc" (const $ return ()))   , (builtinLevelMax           |-> BuiltinPrim "primLevelMax" verifyMax)-  , (builtinAgdaFunDef                |-> BuiltinPostulate tset) -- internally this is QName-  , (builtinAgdaDataDef               |-> BuiltinPostulate tset) -- internally this is QName-  , (builtinAgdaRecordDef             |-> BuiltinPostulate tset) -- internally this is QName+  , (builtinAgdaFunDef                |-> builtinPostulate tset) -- internally this is QName+  , (builtinAgdaDataDef               |-> builtinPostulate tset) -- internally this is QName+  , (builtinAgdaRecordDef             |-> builtinPostulate tset) -- internally this is QName   , (builtinAgdaDefinition            |-> BuiltinData tset [builtinAgdaDefinitionFunDef                                                            ,builtinAgdaDefinitionDataDef                                                            ,builtinAgdaDefinitionDataConstructor@@ -119,8 +131,8 @@   where         (|->) = (,) -        v0 = var 0-        v1 = var 1+        v0 = varM 0+        v1 = varM 1          tv0,tv1 :: TCM Type         tv0 = el v0@@ -137,7 +149,7 @@         tsize      = el primSize         tbool      = el primBool         thiding    = el primHiding-        trelevance = el primRelvance+        trelevance = el primRelevance         ttype      = el primAgdaType         tsort      = el primAgdaSort         tdefn      = el primAgdaDefinition@@ -147,8 +159,8 @@          verifyPlus plus =             verify ["n","m"] $ \(@@) zero suc (==) choice -> do-                let m = Var 0 []-                    n = Var 1 []+                let m = var 0+                    n = var 1                     x + y = plus @@ x @@ y                  -- We allow recursion on any argument@@ -161,8 +173,8 @@          verifyMinus minus =             verify ["n","m"] $ \(@@) zero suc (==) choice -> do-                let m = Var 0 []-                    n = Var 1 []+                let m = var 0+                    n = var 1                     x - y = minus @@ x @@ y                  -- We allow recursion on any argument@@ -174,8 +186,8 @@         verifyTimes times = do             plus <- primNatPlus             verify ["n","m"] $ \(@@) zero suc (==) choice -> do-                let m = Var 0 []-                    n = Var 1 []+                let m = var 0+                    n = var 1                     x + y = plus  @@ x @@ y                     x * y = times @@ x @@ y @@ -193,10 +205,10 @@         verifyDivSucAux dsAux =             verify ["k","m","n","j"] $ \(@@) zero suc (==) choice -> do                 let aux k m n j = dsAux @@ k @@ m @@ n @@ j-                    k           = Var 0 []-                    m           = Var 1 []-                    n           = Var 2 []-                    j           = Var 3 []+                    k           = var 0+                    m           = var 1+                    n           = var 2+                    j           = var 3                  aux k m zero    j       == k                 aux k m (suc n) zero    == aux (suc k) m n m@@ -205,10 +217,10 @@         verifyModSucAux dsAux =             verify ["k","m","n","j"] $ \(@@) zero suc (==) choice -> do                 let aux k m n j = dsAux @@ k @@ m @@ n @@ j-                    k           = Var 0 []-                    m           = Var 1 []-                    n           = Var 2 []-                    j           = Var 3 []+                    k           = var 0+                    m           = var 1+                    n           = var 2+                    j           = var 3                  aux k m zero    j       == k                 aux k m (suc n) zero    == aux zero m n m@@ -219,8 +231,8 @@             true  <- primTrue             false <- primFalse             let x == y = eq @@ x @@ y-                m      = Var 0 []-                n      = Var 1 []+                m      = var 0+                n      = var 1             (zero  == zero ) === true             (suc n == suc m) === (n == m)             (suc n == zero ) === false@@ -231,8 +243,8 @@             true  <- primTrue             false <- primFalse             let x < y = leq @@ x @@ y-                m     = Var 0 []-                n     = Var 1 []+                m     = var 0+                n     = var 1             (n     < zero)  === false             (suc n < suc m) === (n < m)             (zero  < suc m) === true@@ -254,14 +266,14 @@                 suc n  = s @@ n                 choice = foldr1 (\x y -> x `catchError` \_ -> y)             xs <- mapM freshName_ xs-            addCtxs xs (defaultArg nat) $ f (@@) zero suc (==) choice+            addCtxs xs (domFromArg $ defaultArg nat) $ f (@@) zero suc (==) choice   inductiveCheck :: String -> Int -> Term -> TCM () inductiveCheck b n t = do     t <- etaContract =<< normalise t     let err = typeError (NotInductive t)-    case t of+    case ignoreSharing t of       Def t _ -> do         t <- theDef <$> getConstInfo t         case t of@@ -313,8 +325,8 @@                              level <- getBuiltin' builtinLevel                              case (nat, level) of                                (Just nat, Just level) -> do-                                  Def nat   _ <- normalise nat-                                  Def level _ <- normalise level+                                  Def nat   _ <- ignoreSharing <$> normalise nat+                                  Def level _ <- ignoreSharing <$> normalise level                                   when (nat == level) $ typeError $ GenericError $                                     builtinNat ++ " and " ++ builtinLevel ++                                     " have to be different types."@@ -323,9 +335,10 @@        BuiltinDataCons t -> do -        let name (Lam h b) = name (absBody b)-            name (Con c _) = Con c []-            name _         = __IMPOSSIBLE__+        let name (Lam h b)  = name (absBody b)+            name (Con c _)  = Con c []+            name (Shared p) = name $ ignoreSharing (derefPtr p)+            name _          = __IMPOSSIBLE__          e' <- checkExpr e =<< t @@ -356,15 +369,18 @@  	  _ -> typeError $ GenericError $ "Builtin " ++ s ++ " must be bound to a function" -      BuiltinPostulate t -> do-        e' <- checkExpr e =<< t+      BuiltinPostulate rel t -> do+        t' <- t+        e' <- applyRelevanceToContext rel $ checkExpr e t'         let err = typeError $ GenericError $                     "The argument to BUILTIN " ++ s ++ " must be a postulated name"         case e of           A.Def q -> do             def <- ignoreAbstractMode $ getConstInfo q             case theDef def of-              Axiom {} -> bindBuiltinName s e'+              Axiom {} -> do+                builtinSizeHook s q e' t'+                bindBuiltinName s e'               _        -> err           _ -> err 
src/full/Agda/TypeChecking/Rules/Builtin/Coinduction.hs view
@@ -7,7 +7,6 @@ module Agda.TypeChecking.Rules.Builtin.Coinduction where  import Control.Applicative-import Control.Monad.Error  import qualified Data.Map as Map @@ -31,27 +30,27 @@  #include "../../../undefined.h" --- | The type of @&#x221e@.+-- | The type of @∞@.  typeOfInf :: TCM Type typeOfInf = hPi "a" (el primLevel) $             (return . sort $ varSort 0) --> (return . sort $ varSort 0) --- | The type of @&#x266f_@.+-- | The type of @♯_@.  typeOfSharp :: TCM Type typeOfSharp = hPi "a" (el primLevel) $               hPi "A" (return . sort $ varSort 0) $-              (El (varSort 1) <$> var 0) -->-              (El (varSort 1) <$> primInf <#> var 1 <@> var 0)+              (El (varSort 1) <$> varM 0) -->+              (El (varSort 1) <$> primInf <#> varM 1 <@> varM 0) --- | The type of @&#x266d@.+-- | The type of @♭@.  typeOfFlat :: TCM Type typeOfFlat = hPi "a" (el primLevel) $              hPi "A" (return . sort $ varSort 0) $-             (El (varSort 1) <$> primInf <#> var 1 <@> var 0) -->-             (El (varSort 1) <$> var 0)+             (El (varSort 1) <$> primInf <#> varM 1 <@> varM 0) -->+             (El (varSort 1) <$> varM 0)  -- | Binds the INFINITY builtin, but does not change the type's -- definition.@@ -65,27 +64,30 @@  -- The following (no longer supported) definition is used: ----- codata &#x221e {a} (A : Set a) : Set a where---   &#x266f_ : (x : A) → &#x221e A+-- codata ∞ {a} (A : Set a) : Set a where+--   ♯_ : (x : A) → ∞ A  bindBuiltinSharp :: A.Expr -> TCM () bindBuiltinSharp e =   bindPostulatedName builtinSharp e $ \sharp sharpDefn -> do-    sharpE  <- instantiateFull =<< checkExpr (A.Def sharp) =<< typeOfSharp-    inf     <- primInf-    infDefn <- case inf of-      Def inf _ -> getConstInfo inf-      _         -> __IMPOSSIBLE__+    sharpE    <- instantiateFull =<< checkExpr (A.Def sharp) =<< typeOfSharp+    Def inf _ <- ignoreSharing <$> primInf+    infDefn   <- getConstInfo inf     addConstant (defName infDefn) $-      infDefn { theDef = Datatype+      infDefn { defPolarity       = [] -- not monotone+              , defArgOccurrences = [Unused, StrictPos]+              , theDef = Datatype                   { dataPars           = 2                   , dataIxs            = 0                   , dataInduction      = CoInductive                   , dataClause         = Nothing                   , dataCons           = [sharp]                   , dataSort           = varSort 1+{-                   , dataPolarity       = [Invariant, Invariant]-                  , dataArgOccurrences = [Unused, Positive]+                  , dataArgOccurrences = [Unused, StrictPos]+-}+                  , dataMutual         = []                   , dataAbstr          = ConcreteDef                   }               }@@ -104,74 +106,53 @@  -- The following (no longer supported) definition is used: -----   &#x266d : ∀ {a} {A : Set a} → &#x221e A → A---   &#x266d (&#x266f x) = x+--   ♭ : ∀ {a} {A : Set a} → ∞ A → A+--   ♭ (♯ x) = x  bindBuiltinFlat :: A.Expr -> TCM () bindBuiltinFlat e =   bindPostulatedName builtinFlat e $ \flat flatDefn -> do-    flatE  <- instantiateFull =<< checkExpr (A.Def flat) =<< typeOfFlat-    sharp  <- (\t -> case t of-                 Def q _ -> q-                 _       -> __IMPOSSIBLE__)-              <$> primSharp-    kit    <- requireLevels+    flatE       <- instantiateFull =<< checkExpr (A.Def flat) =<< typeOfFlat+    Def sharp _ <- ignoreSharing <$> primSharp+    kit         <- requireLevels+    Def inf _   <- ignoreSharing <$> primInf     let clause = Clause { clauseRange = noRange-                        , clauseTel   = ExtendTel (argH (El (mkType 0) (Def (typeName kit) [])))-                                                  (Abs "a" (ExtendTel (argH $ sort $ varSort 0)-                                                                      (Abs "A" (ExtendTel (argN (El (varSort 1) (Var 0 [])))+                        , clauseTel   = ExtendTel (domH (El (mkType 0) (Def (typeName kit) [])))+                                                  (Abs "a" (ExtendTel (domH $ sort $ varSort 0)+                                                                      (Abs "A" (ExtendTel (domN (El (varSort 1) (var 0)))                                                                                           (Abs "x" EmptyTel)))))-                        , clausePerm  = idP 3-                        , clausePats  = [ argH (VarP "a")-                                        , argH (VarP "A")-                                        , argN (ConP sharp Nothing [argN (VarP "x")])+                        , clausePerm  = idP 1+                        , clausePats  = [ argN (ConP sharp Nothing [argN (VarP "x")])                                         ]-                        , clauseBody  = Bind $ Abs "h0" $-                                        Bind $ Abs "h1" $-                                        Bind $ Abs "h2" $ Body (Var 0 [])+                        , clauseBody  = Bind $ Abs "x" $ Body (var 0)                         }     addConstant flat $-      flatDefn { theDef = Function+      flatDefn { defPolarity = []+               , defArgOccurrences = [StrictPos]+               , theDef = Function                    { funClauses        = [clause]                    , funCompiled       =                       let hid   = Arg Hidden Relevant                           nohid = defaultArg in-                      Case 2 (Branches (Map.singleton sharp-                                 (Done [hid "a", hid "A", nohid "x"] (Var 0 [])))+                      Case 0 (Branches (Map.singleton sharp+                                 (WithArity 1 (Done [nohid "x"] (var 0))))                                Map.empty                                Nothing)                    , funInv            = NotInjective-                   , funPolarity       = [Invariant, Invariant, Invariant]-                   , funArgOccurrences = [Unused, Unused, Positive]+{-+                   , funPolarity       = [Invariant]+                   , funArgOccurrences = [StrictPos] -- changing that to [Mixed] destroys monotonicity of 'Rec' in test/succeed/GuardednessPreservingTypeConstructors+-}+                   , funMutual         = []                    , funAbstr          = ConcreteDef                    , funDelayed        = NotDelayed-                   , funProjection     = Nothing-                     {- flat is a projection, but in the termination checker-                        it destroys the (inductive) structural ordering.-                        Thus, we do not register it as a projection. -}+                   , funProjection     = Just (inf, 3)                    , funStatic         = False+                   , funCopy           = False+                   , funTerminates     = Just True                    }                 }     return flatE --- | The coinductive primitives.--data CoinductionKit = CoinductionKit-  { nameOfInf   :: QName-  , nameOfSharp :: QName-  , nameOfFlat  :: QName-  }---- | Tries to build a 'CoinductionKit'.--coinductionKit :: TCM (Maybe CoinductionKit)-coinductionKit = (do-  Def inf   _ <- primInf-  Def sharp _ <- primSharp-  Def flat  _ <- primFlat-  return $ Just $ CoinductionKit-    { nameOfInf   = inf-    , nameOfSharp = sharp-    , nameOfFlat  = flat-    })-    `catchError` \_ -> return Nothing+-- The coinductive primitives.+-- moved to TypeChecking.Monad.Builtin
src/full/Agda/TypeChecking/Rules/Builtin/Coinduction.hs-boot view
@@ -7,9 +7,11 @@ bindBuiltinSharp :: Expr -> TCM () bindBuiltinFlat  :: Expr -> TCM () +{- MOVED to TypeChecking.Monad.Builtin data CoinductionKit nameOfInf   :: CoinductionKit -> QName nameOfSharp :: CoinductionKit -> QName nameOfFlat  :: CoinductionKit -> QName  coinductionKit :: TCM (Maybe CoinductionKit)+-}
src/full/Agda/TypeChecking/Rules/Data.hs view
@@ -6,6 +6,8 @@ import Control.Monad import Control.Monad.Trans +import Data.List (genericTake)+ import qualified Agda.Syntax.Abstract as A import Agda.Syntax.Internal import Agda.Syntax.Common@@ -25,10 +27,11 @@ import Agda.TypeChecking.Irrelevance import Agda.TypeChecking.Telescope -import Agda.TypeChecking.Rules.Term ( isType_ )+import {-# SOURCE #-} Agda.TypeChecking.Rules.Term ( isType_ )  import Agda.Interaction.Options +import Agda.Utils.List import Agda.Utils.Monad import Agda.Utils.Size import Agda.Utils.Tuple@@ -69,6 +72,7 @@  	    -- The type we get from bindParameters is Θ -> s where Θ is the type of 	    -- the indices. We count the number of indices and return s.+            -- We check that s is a sort.             (nofIxs, s) <- splitType t0              when (any (`freeIn` s) [0..nofIxs - 1]) $ do@@ -99,12 +103,16 @@                                    , dataCons           = []     -- Constructors are added later 				   , dataSort           = s                                    , dataAbstr          = Info.defAbstract i+{-+                                   -- determined by the positivity checker:                                    , dataPolarity       = []                                    , dataArgOccurrences = []+-}+                                   , dataMutual         = []                                    }  	    escapeContext (size tel) $ do-	      addConstant name ( Defn Relevant name t (defaultDisplayForm name) 0 noCompiledRep dataDef )+	      addConstant name ( Defn Relevant name t [] [] (defaultDisplayForm name) 0 noCompiledRep dataDef )  	    -- Check the types of the constructors 	    mapM_ (checkConstructor name tel' nofIxs s) cs@@ -128,10 +136,11 @@  	-- Add the datatype to the signature with its constructors. It was previously 	-- added without them.-	addConstant name (Defn Relevant name t (defaultDisplayForm name) 0 noCompiledRep $+	addConstant name (Defn Relevant name t [] [] (defaultDisplayForm name) 0 noCompiledRep $                             dataDef { dataCons = map cname cs } 			 )-        computePolarity name+        -- Andreas 2012-02-13: postpone polarity computation until after positivity check+        -- computePolarity name     where 	cname (A.ScopedDecl _ [d]) = cname d 	cname (A.Axiom _ _ x _)	   = x@@ -140,12 +149,14 @@ 	hideTel  EmptyTel		  = EmptyTel 	hideTel (ExtendTel a tel) = ExtendTel (hideAndRelParams a) $ hideTel <$> tel -	splitType (El _ (Pi _ b))  = ((+ 1) -*- id) <$> splitType (absBody b)-	splitType (El _ (Sort s))  = return (0, s)-	splitType a                = do-          s <- newSortMeta-          equalType a (sort s)-          return (0, s)+        splitType :: Type -> TCM (Int, Sort)+        splitType t = case ignoreSharing $ unEl t of+          Pi a b -> ((+ 1) -*- id) <$> do addCtxString (absName b) a $ splitType (absBody b)+          Sort s -> return (0, s)+	  _      -> do+            s <- newSortMeta+            equalType t (sort s)+            return (0, s)  -- | Type check a constructor declaration. Checks that the constructor targets --   the datatype and that it fits inside the declared sort.@@ -182,7 +193,7 @@         -- add parameters to constructor type and put into signature         escapeContext (size tel) 	    $ addConstant c-	    $ Defn Relevant c (telePi tel t') (defaultDisplayForm c) 0 noCompiledRep+	    $ Defn Relevant c (telePi tel t') [] [] (defaultDisplayForm c) 0 noCompiledRep 	    $ Constructor (size tel) c d (Info.defAbstract i) Inductive   where     debugEnter c e =@@ -217,15 +228,19 @@ bindParameters (A.DomainFull (A.TypedBindings _ (Arg h rel (A.TNoBind _))) : bs) a ret = do   x <- freshNoName_   bindParameters (A.DomainFree h rel x : bs) a ret-bindParameters (A.DomainFree h rel x : ps) (El _ (Pi (Arg h' rel' a) b)) ret+bindParameters ps0@(A.DomainFree h rel x : ps) (El _ (Pi arg@(Dom h' rel' a) b)) ret   -- Andreas, 2011-04-07 ignore relevance information in binding?!     | h /= h' = 	__IMPOSSIBLE__     | otherwise = addCtx x arg $ bindParameters ps (absBody b) $ \tel s -> 		    ret (ExtendTel arg $ Abs (show x) tel) s-  where-    arg = Arg h rel' a-bindParameters _ _ _ = __IMPOSSIBLE__+bindParameters bs (El s (Shared p)) ret = bindParameters bs (El s $ derefPtr p) ret+bindParameters (b : bs) t _ = __IMPOSSIBLE__+{- Andreas, 2012-01-17 Concrete.Definitions ensures number and hiding of parameters to be correct+-- Andreas, 2012-01-13 due to separation of data declaration/definition, the user+-- could give more parameters than declared.+bindParameters (b : bs) t _ = typeError $ DataTooManyParameters+-}   -- | Check that the arguments to a constructor fits inside the sort of the datatype.@@ -242,12 +257,12 @@   -- The line below would be simpler, but doesn't allow datatypes   -- to be indexed by the universe level. --   noConstraints $ s' `leqSort` s-  case unEl t of-    Pi arg@(Arg h r a) _ -> do+  case ignoreSharing $ unEl t of+    Pi arg@(Dom h r a) _ -> do       let s' = getSort a       s' `leqSort` s       x <- freshName_ (argName t)-      let v  = Arg h r $ Var 0 []+      let v  = Arg h r $ var 0           t' = piApply (raise 1 t) [v]       addCtx x arg $ fitsIn t' (raise 1 s)     _		     -> return ()@@ -264,7 +279,7 @@         constr :: Nat -> Sort -> Term -> TCM () 	constr n s v = do 	    v <- reduce v-	    case v of+	    case ignoreSharing v of 		Pi _ (NoAbs _ b) -> constrT n b 		Pi a b	-> underAbstraction a b $ \t -> 			   constrT (n + 1) t@@ -277,21 +292,24 @@  	checkParams n vs = zipWithM_ sameVar vs ps 	    where-		ps = reverse [ i | (i,_) <- zip [n..] vs ]+--		ps = reverse [ i | (i,_) <- zip [n..] vs ]+                nvs = size vs+		ps = genericTake nvs $ downFrom (n + nvs)  		sameVar arg i                   -- skip irrelevant parameters                   | argRelevance arg == Irrelevant = return () 		  | otherwise = do 		    t <- typeOfBV i-		    equalTerm t (unArg arg) (Var i [])+		    equalTerm t (unArg arg) (var i) +{- UNUSED, Andreas 2012-09-13 -- | Force a type to be a specific datatype. forceData :: QName -> Type -> TCM Type forceData d (El s0 t) = liftTCM $ do     t' <- reduce t     d  <- canonicalName d-    case t' of+    case ignoreSharing t' of 	Def d' _ 	    | d == d'   -> return $ El s0 t' 	    | otherwise	-> fail $ "wrong datatype " ++ show d ++ " != " ++ show d'@@ -301,14 +319,15 @@ 	    noConstraints $ leqType (El s0 t') (El s (Def d ps)) -- TODO: need equalType? 	    reduce $ El s0 t' 	_ -> typeError $ ShouldBeApplicationOf (El s0 t) d+-}  -- | Is the type coinductive? Returns 'Nothing' if the answer cannot -- be determined.  isCoinductive :: Type -> TCM (Maybe Bool) isCoinductive t = do-  El _ t <- normalise t-  case t of+  El s t <- normalise t+  case ignoreSharing t of     Def q _ -> do       def <- getConstInfo q       case theDef def of@@ -327,4 +346,5 @@     Pi    {} -> return (Just False)     Sort  {} -> return (Just False)     MetaV {} -> return Nothing+    Shared{} -> __IMPOSSIBLE__     DontCare{} -> __IMPOSSIBLE__
src/full/Agda/TypeChecking/Rules/Decl.hs view
@@ -1,12 +1,21 @@-{-# LANGUAGE CPP #-}+{-# LANGUAGE CPP, TupleSections #-}  module Agda.TypeChecking.Rules.Decl where  import Control.Monad+import Control.Monad.Error+import Control.Monad.Reader import Control.Monad.Trans+import Control.Monad.State (modify)++import qualified Data.Foldable as Fold+import Data.Maybe import qualified Data.Map as Map import Data.Map (Map)-import qualified Agda.Utils.IO.Locale as LocIO+import qualified Data.List as List+import qualified Data.Set as Set+import Data.Set (Set)+import Data.Sequence ((|>))  import Agda.Syntax.Abstract (AnyAbstract(..)) import qualified Agda.Syntax.Abstract as A@@ -15,19 +24,24 @@ import Agda.Syntax.Position import Agda.Syntax.Common +import Agda.TypeChecking.Errors import Agda.TypeChecking.Monad import Agda.TypeChecking.Monad.Builtin import Agda.TypeChecking.Monad.Mutual import Agda.TypeChecking.Pretty import Agda.TypeChecking.Constraints import Agda.TypeChecking.Positivity+import Agda.TypeChecking.Polarity import Agda.TypeChecking.Primitive hiding (Nat)+import Agda.TypeChecking.ProjectionLike import Agda.TypeChecking.Conversion import Agda.TypeChecking.Substitute import Agda.TypeChecking.Reduce import Agda.TypeChecking.SizedTypes import Agda.TypeChecking.Telescope import Agda.TypeChecking.Forcing+import Agda.TypeChecking.Injectivity+import Agda.TypeChecking.InstanceArguments (solveIrrelevantMetas)  import Agda.TypeChecking.Rules.Term import Agda.TypeChecking.Rules.Data    ( checkDataDef )@@ -39,7 +53,14 @@  import Agda.Utils.Size import Agda.Utils.Monad+import qualified Agda.Utils.HashMap as HMap+-- import Agda.Utils.NubList -- reverted +import Agda.Interaction.Highlighting.Generate++import Agda.Termination.TermCheck+import Agda.Interaction.Options+ #include "../../undefined.h" import Agda.Utils.Impossible @@ -51,64 +72,193 @@   -- whenM onTopLevel unfreezeMetas  -- | Type check a single declaration.+ checkDecl :: A.Declaration -> TCM () checkDecl d = do     -- Issue 418 fix: freeze metas before checking an abstract things     when isAbstract freezeMetas-    leaveTopLevelConditionally d $ case d of-	A.Axiom i rel x e        -> checkAxiom i rel x e-        A.Field{}                -> typeError FieldOutsideRecord-	A.Primitive i x e        -> checkPrimitive i x e-	A.Mutual i ds            -> checkMutual i ds-	A.Section i x tel ds     -> checkSection i x tel ds-	A.Apply i x modapp rd rm -> checkSectionApplication i x modapp rd rm-	A.Import i x             -> checkImport i x-	A.Pragma i p             -> checkPragma i p-	A.ScopedDecl scope ds    -> setScope scope >> checkDecls ds-        A.FunDef i x cs          -> check x i $ checkFunDef NotDelayed i x cs-        A.DataDef i x ps cs      -> check x i $ checkDataDef i x ps cs-        A.RecDef i x c ps tel cs -> check x i $ checkRecDef i x c ps tel cs-        A.DataSig i x ps t       -> checkAxiom i Relevant x (A.Pi (Info.ExprRange (fuseRange ps t)) ps t)-        A.RecSig i x ps t        -> checkAxiom i Relevant x (A.Pi (Info.ExprRange (fuseRange ps t)) ps t)-        A.Open _ _               -> return ()-    top <- onTopLevel-    when top $ solveSizeConstraints >> freezeMetas++    let -- What kind of final checks/computations should be performed+        -- if we're not inside a mutual block?+        none       m = m >> return Nothing+        meta       m = m >> return (Just (return []))+        mutual     m = m >>= return . Just . mutualChecks+        impossible m = m >> return __IMPOSSIBLE__+                       -- We're definitely inside a mutual block.++    topLevelKind <- case d of+      A.Axiom{}                -> meta $ checkTypeSignature d+      A.Field{}                -> typeError FieldOutsideRecord+      A.Primitive i x e        -> meta $ checkPrimitive i x e+      A.Mutual i ds            -> mutual $ checkMutual i ds+      A.Section i x tel ds     -> meta $ checkSection i x tel ds+      A.Apply i x modapp rd rm -> meta $ checkSectionApplication i x modapp rd rm+      A.Import i x             -> none $ checkImport i x+      A.Pragma i p             -> none $ checkPragma i p+      A.ScopedDecl scope ds    -> none $ setScope scope >> checkDecls ds+      A.FunDef i x delayed cs  -> impossible $ check x i $ checkFunDef delayed i x cs+      A.DataDef i x ps cs      -> impossible $ check x i $ checkDataDef i x ps cs+      A.RecDef i x ind c ps tel cs -> mutual $ check x i $ do+                                    checkRecDef i x ind c ps tel cs+                                    return (Set.singleton x)+      A.DataSig i x ps t       -> impossible $ checkSig i x ps t+      A.RecSig i x ps t        -> none $ checkSig i x ps t+                                  -- A record signature is always followed by a+                                  -- record definition. Metas should not be+                                  -- frozen until after the definition has been+                                  -- checked. NOTE: Metas are not frozen+                                  -- immediately after the last field. Perhaps+                                  -- they should be (unless we're in a mutual+                                  -- block).+      A.Open _ _               -> none $ return ()+                                  -- Open is just an artifact from the concrete+                                  -- syntax, retained for highlighting purposes.++    unlessM (isJust . envMutualBlock <$> ask) $ do+      termErrs <- case topLevelKind of+        Nothing           -> return []+        Just mutualChecks -> do++          solveSizeConstraints+          solveIrrelevantMetas+          wakeupConstraints_   -- solve emptyness constraints+          freezeMetas++          mutualChecks++      -- Syntax highlighting.+      let highlight d = generateAndPrintSyntaxInfo d (Full termErrs)+      case d of+        A.Axiom{}                -> highlight d+        A.Field{}                -> __IMPOSSIBLE__+        A.Primitive{}            -> highlight d+        A.Mutual{}               -> highlight d+        A.Apply{}                -> highlight d+        A.Import{}               -> highlight d+        A.Pragma{}               -> highlight d+        A.ScopedDecl{}           -> return ()+        A.FunDef{}               -> __IMPOSSIBLE__+        A.DataDef{}              -> __IMPOSSIBLE__+        A.DataSig{}              -> __IMPOSSIBLE__+        A.Open{}                 -> highlight d+        A.Section i x tel _      -> highlight (A.Section i x tel [])+          -- Each block in the section has already been highlighted,+          -- all that remains is the module declaration.+        A.RecSig{}               -> highlight d+        A.RecDef i x ind c ps tel cs ->+          highlight (A.RecDef i x ind c [] tel (fields cs))+          -- The telescope and all record module declarations except+          -- for the fields have already been highlighted.+          where+          fields (A.ScopedDecl _ ds1 : ds2) = fields ds1 ++ fields ds2+          fields (d@A.Field{}        : ds)  = d : fields ds+          fields (_                  : ds)  = fields ds+          fields []                         = []+     where-        unScope (A.ScopedDecl scope ds) = setScope scope >> unScope d-        unScope d = return d+    unScope (A.ScopedDecl scope ds) = setScope scope >> unScope d+    unScope d = return d -        check x i m = do-          reportSDoc "tc.decl" 5 $ text "Checking" <+> prettyTCM x <> text "."-          r <- abstract (Info.defAbstract i) m-          reportSDoc "tc.decl" 5 $ text "Checked" <+> prettyTCM x <> text "."-          return r+    checkSig i x ps t = checkTypeSignature $+      A.Axiom i Relevant x (A.Pi (Info.ExprRange (fuseRange ps t)) ps t) -        isAbstract = fmap Info.defAbstract (A.getDefInfo d) == Just AbstractDef+    check x i m = do+      reportSDoc "tc.decl" 5 $ text "Checking" <+> prettyTCM x <> text "."+      r <- abstract (Info.defAbstract i) m+      reportSDoc "tc.decl" 5 $ text "Checked" <+> prettyTCM x <> text "."+      return r -        -- Concrete definitions cannot use information about abstract things.-        abstract ConcreteDef = inConcreteMode-        abstract AbstractDef = inAbstractMode-	    -- open is just an artifact from the concrete syntax-            -- retained for highlighting purposes+    isAbstract = fmap Info.defAbstract (A.getDefInfo d) == Just AbstractDef -        leaveTopLevelConditionally d =-          case d of-            A.Section{}    -> id-            A.ScopedDecl{} -> id-            _              -> leaveTopLevel+    -- Concrete definitions cannot use information about abstract things.+    abstract ConcreteDef = inConcreteMode+    abstract AbstractDef = inAbstractMode +    -- Some checks that should be run at the end of a mutual+    -- block (or non-mutual record declaration). The set names+    -- contains the names defined in the mutual block.+    mutualChecks names = do++      checkStrictlyPositive names++      -- Andreas, 2012-02-13: Polarity computation uses info from+      -- positivity check, so it needs happen after positivity+      -- check.+      let -- | Do we need to compute polarity information for the+          -- definition corresponding to the given name?+          relevant q = do+            def <- theDef <$> getConstInfo q+            return $ case def of+              Function{}    -> Just q+              Datatype{}    -> Just q+              Record{}      -> Just q+              Axiom{}       -> Nothing+              Constructor{} -> Nothing+              Primitive{}   -> Nothing+      mapM_ computePolarity =<<+        (catMaybes <$> mapM relevant (Set.toList names))++      -- Andreas, 2012-09-11:  Injectivity check stores clauses+      -- whose 'Relevance' is affected by polarity computation,+      -- so do it here.++      let checkInj (q, def@Defn{ theDef = d@Function{ funClauses = cs }}) = do+            inv <- checkInjectivity q cs+            modifySignature $ updateDefinition q $ const $+              def { theDef = d { funInv = inv }}+          checkInj _ = return ()++      namesDefs <- mapM (\ q -> (q,) <$> getConstInfo q) $ Set.toList names+      mapM_ checkInj namesDefs++      -- Non-mutual definitions can be considered for+      -- projection likeness+      case Set.toList names of+        [d] -> do+          def <- getConstInfo d+          case theDef def of+            Function{} -> makeProjection (defName def)+            _          -> return ()+        _ -> return ()++      -- Termination checking.+      termErrs <-+        ifM (optTerminationCheck <$> pragmaOptions)+          (disableDestructiveUpdate $ case d of+             A.RecDef {} -> return []+                            -- Record module definitions should not be+                            -- termination-checked twice.+             _           -> do+               termErrs <- {- nubList <$> -} termDecl d+               modify $ \st ->+                 st { stTermErrs = Fold.foldl' (|>) (stTermErrs st) termErrs }+               return termErrs)+          (return [])++      return termErrs+ -- | Type check an axiom. checkAxiom :: Info.DefInfo -> Relevance -> QName -> A.Expr -> TCM ()-checkAxiom i rel x e = do+checkAxiom i rel0 x e = do+  -- Andreas, 2012-04-18  if we are in irrelevant context, axioms is irrelevant+  -- even if not declared as such (Issue 610).+  rel <- max rel0 <$> asks envRelevance+  -- rel <- ifM ((Irrelevant ==) <$> asks envRelevance) (return Irrelevant) (return rel0)   t <- isType_ e   reportSDoc "tc.decl.ax" 10 $ sep-    [ text "checked axiom"-    , nest 2 $ prettyTCM rel <> prettyTCM x <+> text ":" <+> (prettyTCM =<< instantiateFull t)+    [ text $ "checked type signature"+    , nest 2 $ prettyTCM rel <> prettyTCM x <+> text ":" <+> prettyTCM t     ]   -- Not safe. See Issue 330   -- t <- addForcingAnnotations t-  addConstant x (Defn rel x t (defaultDisplayForm x) 0 noCompiledRep Axiom)-  solveSizeConstraints+  addConstant x (Defn rel x t [] [] (defaultDisplayForm x) 0 noCompiledRep Axiom)++  -- for top-level axioms (postulates) try to solve irrelevant metas+  -- when postulate $+  maybe solveIrrelevantMetas (const $ return ()) =<< asks envMutualBlock++  traceCall (IsType_ e) $ solveSizeConstraints  -- need Range for error message+   -- Andreas, 2011-05-31, that freezing below is probably wrong:   -- when (Info.defAbstract i == AbstractDef) $ freezeMetas @@ -116,12 +266,12 @@ checkPrimitive :: Info.DefInfo -> QName -> A.Expr -> TCM () checkPrimitive i x e =     traceCall (CheckPrimitive (getRange i) (qnameName x) e) $ do  -- TODO!! (qnameName)-    PrimImpl t' pf <- lookupPrimitiveFunction (nameString $ qnameName x)+    (_, PrimImpl t' pf) <- lookupPrimitiveFunctionQ x     t <- isType_ e     noConstraints $ equalType t t'     let s  = show $ nameConcrete $ qnameName x-    bindPrimitive s $ pf { primFunName = x }-    addConstant x (Defn Relevant x t (defaultDisplayForm x) 0 noCompiledRep $+    bindPrimitive s pf+    addConstant x (Defn Relevant x t [] [] (defaultDisplayForm x) 0 noCompiledRep $                 Primitive (Info.defAbstract i) s Nothing Nothing)     where 	nameString (Name _ x _ _) = show x@@ -205,7 +355,7 @@ 	A.OptionsPragma _   -> __IMPOSSIBLE__	-- not allowed here         A.EtaPragma r -> modifySignature eta           where-            eta sig = sig { sigDefinitions = Map.adjust setEta r defs }+            eta sig = sig { sigDefinitions = HMap.adjust setEta r defs }               where                 setEta def = def { theDef = setEtad $ theDef def }                 setEtad d   = case d of@@ -214,19 +364,22 @@                 defs	  = sigDefinitions sig  -- | Type check a bunch of mutual inductive recursive definitions.-checkMutual :: Info.DeclInfo -> [A.Declaration] -> TCM ()+--+-- All definitions which have so far been assigned to the given mutual+-- block are returned.+checkMutual :: Info.MutualInfo -> [A.Declaration] -> TCM (Set QName) checkMutual i ds = inMutualBlock $ do-  mapM_ checkDecl ds -  checkStrictlyPositive =<< currentMutualBlock-  let unScope (A.ScopedDecl _ ds) = concatMap unScope ds-      unScope d = [d]-  case concatMap unScope ds of-    -- Non-mutual definitions can be considered for projection likeness-    [A.Axiom _ _ x _, A.FunDef _ y _] | x == y -> makeProjection x-    _   -> return ()+  verboseS "tc.decl.mutual" 20 $ do+    blockId <- currentOrFreshMutualBlock+    reportSDoc "" 0 $ vcat $+      (text "Checking mutual block" <+> text (show blockId) <> text ":") :+      map (nest 2 . prettyA) ds +  mapM_ checkDecl ds +  lookupMutualBlock =<< currentOrFreshMutualBlock+ -- | Type check the type signature of an inductive or recursive definition. checkTypeSignature :: A.TypeSignature -> TCM () checkTypeSignature (A.ScopedDecl scope ds) = do@@ -248,8 +401,8 @@       dx   <- prettyTCM x       dtel <- mapM prettyA tel       dtel' <- prettyTCM =<< lookupSection x-      liftIO $ LocIO.putStrLn $ "checking section " ++ show dx ++ " " ++ show dtel-      liftIO $ LocIO.putStrLn $ "    actual tele: " ++ show dtel'+      reportSLn "" 0 $ "checking section " ++ show dx ++ " " ++ show dtel+      reportSLn "" 0 $ "    actual tele: " ++ show dtel'     withCurrentModule x $ checkDecls ds  checkModuleArity :: ModuleName -> Telescope -> [NamedArg A.Expr] -> TCM Telescope@@ -259,7 +412,7 @@      check eta []             = return eta     check EmptyTel (_:_)     = bad-    check (ExtendTel (Arg h _ _) btel) args0@(Arg h' _ (Named name _) : args) =+    check (ExtendTel (Dom h _ _) btel) args0@(Arg h' _ (Named name _) : args) =       let y   = absName btel           tel = absBody btel in       case (h, h', name) of@@ -326,7 +479,7 @@       telInst = instFinal tel       instFinal :: Telescope -> Telescope       instFinal (ExtendTel _ NoAbs{}) = __IMPOSSIBLE__-      instFinal (ExtendTel (Arg h r t) (Abs n EmptyTel)) = ExtendTel (Arg Instance r t) (Abs n EmptyTel)+      instFinal (ExtendTel (Dom h r t) (Abs n EmptyTel)) = ExtendTel (Dom Instance r t) (Abs n EmptyTel)       instFinal (ExtendTel arg (Abs n tel)) = ExtendTel arg (Abs n (instFinal tel))       instFinal EmptyTel = __IMPOSSIBLE__       args = teleArgs tel
src/full/Agda/TypeChecking/Rules/Def.hs view
@@ -9,11 +9,12 @@ import Control.Monad.Reader hiding (mapM) import Control.Monad.Error hiding (mapM) import Control.Monad hiding (mapM)++import Data.Function import Data.List hiding (sort) import Data.Traversable import Data.Set (Set) import qualified Data.Set as Set-import qualified Agda.Utils.IO.Locale as LocIO  import Agda.Syntax.Common import Agda.Syntax.Position@@ -43,11 +44,14 @@ import Agda.TypeChecking.Injectivity import Agda.TypeChecking.Polarity import Agda.TypeChecking.Irrelevance+import Agda.TypeChecking.Implicit import Agda.TypeChecking.SizedTypes+import Agda.TypeChecking.CompiledClause (CompiledClauses(..)) import Agda.TypeChecking.CompiledClause.Compile -import Agda.TypeChecking.Rules.Term                ( checkExpr, inferExpr, checkTelescope_, isType_ )+import Agda.TypeChecking.Rules.Term                ( checkExpr, inferExpr, inferExprForWith, inferOrCheck, checkTelescope_, isType_ ) import Agda.TypeChecking.Rules.LHS                 ( checkLeftHandSide )+import Agda.TypeChecking.Rules.LHS.Implicit        ( insertImplicitPatterns ) import {-# SOURCE #-} Agda.TypeChecking.Rules.Decl ( checkDecls ) import Agda.TypeChecking.Rules.Data                ( isCoinductive ) @@ -72,9 +76,61 @@         -- Get the type and relevance of the function         t    <- typeOfConst name         rel  <- relOfConst name-        checkFunDef' t rel delayed i name cs+        case trivialClause cs of+          -- if we have just one clause without pattern matching and+          -- without a type signature, then infer, to allow+          -- "aliases" for things starting with hidden abstractions+          Just e | isMeta (ignoreSharing $ unEl t) ->+            traceCall (CheckFunDef (getRange i) (qnameName name) cs) $+              checkAlias t rel delayed i name e+          _ -> checkFunDef' t rel delayed i name cs+  where+    isMeta MetaV{} = True+    isMeta _       = False+    trivialClause [A.Clause (A.LHS i (A.LHSHead f []) []) (A.RHS e) []] = Just e+    trivialClause _ = Nothing --- | Type check a definition by pattern matching. The first argument+-- | Check a trivial definition of the form @f = e@+checkAlias :: Type -> Relevance -> Delayed -> Info.DefInfo -> QName -> A.Expr -> TCM ()+checkAlias t' rel delayed i name e = do+  reportSDoc "tc.def.alias" 10 $ text "checkAlias" <+> vcat+    [ text (show name) <+> colon  <+> prettyTCM t'+    , text (show name) <+> equals <+> prettyTCM e+    ]+  -- Infer the type of the rhs+  (v, t) <- applyRelevanceToContext rel $ inferOrCheck e (Just t')+  -- v <- coerce v t t'+  reportSDoc "tc.def.alias" 20 $ text "checkAlias: finished checking"++  solveSizeConstraints++  v <- instantiateFull v  -- if we omit this, we loop (stdlib: Relation.Binary.Sum)+    -- or the termination checker might stumble over levels in sorts+    -- that cannot be converted to expressions without the level built-ins+    -- (test/succeed/Issue655.agda)++  -- Add the definition+  addConstant name $ Defn rel name t [] [] (defaultDisplayForm name) 0 noCompiledRep+                   $ Function+                      { funClauses        = [Clause (getRange i) EmptyTel (idP 0) [] $ Body v] -- trivial clause @name = v@+                      , funCompiled       = Done [] v+                      , funDelayed        = delayed+                      , funInv            = NotInjective+                      , funAbstr          = Info.defAbstract i+{-+                      , funPolarity       = []+                      , funArgOccurrences = []+-}+                      , funMutual         = []+                      , funProjection     = Nothing+                      , funStatic         = False+                      , funCopy           = False+                      , funTerminates     = Nothing+                      }+  reportSDoc "tc.def.alias" 20 $ text "checkAlias: leaving"+++-- | Type check a definition by pattern matching. The third argument -- specifies whether the clauses are delayed or not. checkFunDef' :: Type -> Relevance -> Delayed -> Info.DefInfo -> QName -> [A.Clause] -> TCM () checkFunDef' t rel delayed i name cs =@@ -86,19 +142,24 @@               , nest 2 $ text "full type:" <+> (prettyTCM . defType =<< getConstInfo name)               ] +        -- Ensure that all clauses have the same number of trailing hidden patterns+        -- This is necessary since trailing implicits are no longer eagerly inserted.+        cs <- trailingImplicits t cs+         -- Check the clauses         let check c = do               c <- applyRelevanceToContext rel $ checkClause t c               solveSizeConstraints               return c-        cs <- mapM check cs+        cs <- traceCall NoHighlighting $  -- To avoid flicker.+                mapM check cs          -- Check that all clauses have the same number of arguments         unless (allEqual $ map npats cs) $ typeError DifferentArities          reportSDoc "tc.cc" 15 $ do           sep [ text "clauses before rebindClause"-              , nest 2 $ prettyTCM (map (NamedClause name) cs)+              , nest 2 $ prettyTCM (map (QNamed name) cs)               ]          -- Annotate the clauses with which arguments are actually used.@@ -114,11 +175,11 @@          reportSDoc "tc.cc" 15 $ do           sep [ text "clauses before compilation"-              , nest 2 $ prettyTCM (map (NamedClause name) cs)+              , nest 2 $ prettyTCM (map (QNamed name) cs)               ] -        -- Compile the clauses-        cc <- compileClauses True cs+        -- Coverage check and compile the clauses+        cc <- compileClauses (Just (name, t)) cs          reportSDoc "tc.cc" 10 $ do           sep [ text "compiled clauses of" <+> prettyTCM name@@ -126,39 +187,151 @@               ]          -- Add the definition-        addConstant name $ Defn rel name t (defaultDisplayForm name) 0 noCompiledRep+        addConstant name $ Defn rel name t [] [] (defaultDisplayForm name) 0 noCompiledRep                          $ Function                             { funClauses        = cs                             , funCompiled       = cc                             , funDelayed        = delayed                             , funInv            = inv                             , funAbstr          = Info.defAbstract i+{-                             , funPolarity       = []                             , funArgOccurrences = []+-}+                            , funMutual         = []                             , funProjection     = Nothing                             , funStatic         = False+                            , funCopy           = False+                            , funTerminates     = Nothing                             }-        computePolarity name++        -- Andreas 2012-02-13: postpone polarity computation until after positivity check+        -- computePolarity name+         reportSDoc "tc.def.fun" 10 $ do           sep [ text "added " <+> prettyTCM name <+> text ":"               , nest 2 $ prettyTCM . defType =<< getConstInfo name               ]--        -- Check pattern coverage-        checkCoverage name--        reportSLn "tc.def.fun.compile" 10 $-          "compiled clauses for " ++ show name ++ ":\n" ++ show cc     where         npats = size . clausePats +{- | Ensure that all clauses have the same number of trailing implicits.+Example: +@+  test : Bool → {A B : Set} → Set+  test true  {A}     = A+  test false {B = B} = B+@++@trailingImplicits@ patches these clauses to++@+  test : Bool → {A B : Set} → Set+  test true  {A} {_}     = A+  test false {_} {B = B} = B+@++such that the arity of the clauses of @test@ is uniform.+-}+trailingImplicits :: Type -> [A.Clause] -> TCM [A.Clause]+trailingImplicits t []       = __IMPOSSIBLE__+trailingImplicits t cs@(c:_) = do+  pps@((ps,ips):_) <- mapM splitTrailingImplicits cs+  -- compute the trailing implicits from type t+  TelV tel t0 <- telView t+  let -- number of non-hidden patterns+      nh  = genericLength $ filter ((NotHidden ==) . argHiding) ps+      -- drop nh non-hidden domains from t+      l   = dropNonHidden nh $ telToList tel+      -- take the hidden domains immediately after the dropped stuff+      is   = takeWhile ((NotHidden /=) . domHiding) l+      itel = telFromList is+      -- get the trailing implicit patterns+      ipss = map snd pps+  -- complete the implicit pattern lists+  ipss <- mapM (\ ps -> insertImplicitPatterns DontExpandLast ps itel) ipss+  let longest = head $ sortBy (compare `on` ((0-) . length)) ipss+      pps' = zip (map fst pps) ipss+  return $ zipWith (patchUpTrailingImplicits longest) pps' cs++-- | @dropNonHidden n tel@ drops @n@ non-hidden domains from @tel@,+--   including all hidden domains that come before the @n@th non-hidden one.+dropNonHidden :: Nat -> [Dom (String, Type)] -> [Dom (String, Type)]+dropNonHidden 0 l = l+dropNonHidden n l = case dropWhile ((NotHidden /=) . domHiding) l of+  []    -> [] -- or raise a type checking error "too many arguments in lhs"+  (_:l) -> dropNonHidden (n-1) l++-- | @splitTrailingImplicits c@ returns the patterns of clause @c@+--   as pair @(ps, ips)@ where @ips@ are the trailing implicit patterns+--   and @ps@ is the rest.+splitTrailingImplicits :: A.Clause -> TCM (A.Patterns, A.Patterns)+splitTrailingImplicits (A.Clause (A.LHS _ A.LHSProj{} []) _ _) =+  typeError $ NotImplemented "type checking definitions by copatterns"+splitTrailingImplicits (A.Clause (A.LHS _ _ ps@(_ : _)) _ _) =+  typeError $ UnexpectedWithPatterns ps+splitTrailingImplicits (A.Clause (A.LHS _ (A.LHSHead _ aps) []) _ _) = do+  let (ips, ps) = span ((Hidden==) . argHiding) $ reverse aps+  return (reverse ps, reverse ips)++{- UNUSED+-- | Compute the difference between two list of hidden patterns.+--   The first pattern list must be longer.+--   Both pattern lists must be complete, i.e., not skip any hidden patterns.+patternDiff :: A.Patterns -> A.Patterns -> A.Patterns+patternDiff ps1 ps2 = drop (length ps2) ps1+-}++-- | @patchUpTrailingImplicits should (ps, is) c@ takes a clause @c@ whose+--   patterns are split into @(ps, is)@ where @is@ are the trailing+--   implicit patterns and @ps@ the rest.  @is@ has already been patched+--   with omitted implicit patterns (which can occur if named implicit patterns+--   are there originally).  @should@ is an extension of @is@.+--   The returned clause contains an extension of @is@ by new wildcards+--   to match @should@.+patchUpTrailingImplicits :: A.Patterns -> (A.Patterns, A.Patterns) -> A.Clause -> A.Clause+patchUpTrailingImplicits should (ps, is) c | length is >= length should = c+patchUpTrailingImplicits should (ps, is) (A.Clause (A.LHS i (A.LHSHead x aps) []) rhs0 wh) =+  let imp  = Arg Hidden Relevant $ Named Nothing $ A.ImplicitP $+               Info.PatRange noRange+      imps = replicate (length should - length is) imp+  in  A.Clause (A.LHS i (A.LHSHead x (ps ++ is ++ imps)) []) rhs0 wh+patchUpTrailingImplicits _ _ _ = __IMPOSSIBLE__++{- OLD+-- | Ensure that all clauses have the same number of trailing implicits.+trailingImplicits :: [A.Clause] -> TCM [A.Clause]+trailingImplicits [] = __IMPOSSIBLE__+trailingImplicits cs = do+  ns <- mapM numberOfTrailingImplicits cs+  let n = maximum ns+  return $ zipWith (patchUpTrailingImplicits n) ns cs++numberOfTrailingImplicits :: A.Clause -> TCM Int+numberOfTrailingImplicits (A.Clause (A.LHS _ A.LHSProj{} []) _ _) =+  typeError $ NotImplemented "type checking definitions by copatterns"+numberOfTrailingImplicits (A.Clause (A.LHS _ _ ps@(_ : _)) _ _) =+  typeError $ UnexpectedWithPatterns ps+numberOfTrailingImplicits (A.Clause (A.LHS _ (A.LHSHead _ aps) []) _ _) =+  return $ length $ takeWhile ((Hidden==) . argHiding) $ reverse aps++patchUpTrailingImplicits :: Int -> Int -> A.Clause -> A.Clause+patchUpTrailingImplicits should is c | is >= should = c+patchUpTrailingImplicits should is (A.Clause (A.LHS i (A.LHSHead x aps) []) rhs0 wh) =+  let imp  = Arg Hidden Relevant $ Named Nothing $ A.ImplicitP $+               Info.PatRange noRange+      imps = replicate (should - is) imp+  in  A.Clause (A.LHS i (A.LHSHead x (aps ++ imps)) []) rhs0 wh+patchUpTrailingImplicits _ _ _ = __IMPOSSIBLE__+-}+ -- | Insert some patterns in the in with-clauses LHS of the given RHS insertPatterns :: [A.Pattern] -> A.RHS -> A.RHS insertPatterns pats (A.WithRHS aux es cs) = A.WithRHS aux es (map insertToClause cs)-    where insertToClause (A.Clause (A.LHS i x aps ps) rhs ds)+    where insertToClause (A.Clause (A.LHS i lhscore ps) rhs ds) --              = A.Clause (A.LHS i x (aps ++ map (Arg NotHidden . unnamed) pats) (ps)) (insertPatterns pats rhs) ds-              = A.Clause (A.LHS i x aps (pats ++ ps)) (insertPatterns pats rhs) ds+              = A.Clause (A.LHS i lhscore (pats ++ ps)) (insertPatterns pats rhs) ds insertPatterns pats (A.RewriteRHS qs eqs rhs wh) = A.RewriteRHS qs eqs (insertPatterns pats rhs) wh insertPatterns pats rhs = rhs @@ -180,21 +353,27 @@  -- | Type check a function clause. checkClause :: Type -> A.Clause -> TCM Clause-checkClause t c@(A.Clause (A.LHS i x aps []) rhs0 wh) =+checkClause t c@(A.Clause (A.LHS i (A.LHSProj{}) []) rhs0 wh) =+  typeError $ NotImplemented "type checking definitions by copatterns"+checkClause t c@(A.Clause (A.LHS i (A.LHSHead x aps) []) rhs0 wh) =     traceCall (CheckClause t c) $-    checkLeftHandSide c aps t $ \gamma delta sub xs ps t' perm -> do-      let mkBody v = foldr (\x t -> Bind $ Abs x t) (Body $ substs sub v) xs-      (body, with) <- checkWhere (size delta) wh $ let+    checkLeftHandSide (CheckPatternShadowing c) aps t $ \ mgamma delta sub xs ps t' perm -> do+      let mkBody v = foldr (\x t -> Bind $ Abs x t) (Body $ applySubst sub v) xs+      -- introduce trailing implicits for checking the where decls+      TelV htel t0 <- telViewUpTo' (-1) ((Hidden==) . domHiding) t'+      let n = size htel+      (body, with) <- addCtxTel htel $ checkWhere (size delta + n) wh $ escapeContext (size htel) $ let+          -- for the body, we remove the implicits again           handleRHS rhs =               case rhs of                 A.RHS e-                  | any (containsAbsurdPattern . namedThing . unArg) aps ->+                  | any (containsAbsurdPattern . namedArg) aps ->                     typeError $ AbsurdPatternRequiresNoRHS aps                   | otherwise -> do                     v <- checkExpr e t'                     return (mkBody v, NoWithFunction)                 A.AbsurdRHS-                  | any (containsAbsurdPattern . namedThing . unArg) aps+                  | any (containsAbsurdPattern . namedArg) aps                               -> return (NoBody, NoWithFunction)                   | otherwise -> typeError $ NoRHSRequiresAbsurdPattern aps                 A.RewriteRHS [] (_:_) _ _ -> __IMPOSSIBLE__@@ -205,19 +384,20 @@                      (proof,t) <- inferExpr eq                      t' <- reduce =<< instantiateFull t                      equality <- primEquality >>= \eq ->-                      let lamV (Lam h b) = ((h:) *** id) $ lamV (unAbs b)-                          lamV v         = ([], v) in+                      let lamV (Lam h b)  = ((h:) *** id) $ lamV (unAbs b)+                          lamV (Shared p) = lamV (derefPtr p)+                          lamV v          = ([], v) in                       return $ case lamV eq of                         ([Hidden, Hidden], Def equality _) -> equality                         ([Hidden],         Def equality _) -> equality                         ([],               Def equality _) -> equality                         _                                  -> __IMPOSSIBLE__-                     reflCon <- primRefl >>= \refl -> return $ case refl of+                     reflCon <- primRefl >>= \refl -> return $ case ignoreSharing refl of                          Con reflCon [] -> reflCon                          _              -> __IMPOSSIBLE__-                     (rewriteType,rewriteFrom,rewriteTo) <- case t' of-                         El _Set0 (Def equality' [_level, Arg Hidden Relevant rewriteType,-                                                  Arg NotHidden Relevant rewriteFrom, Arg NotHidden Relevant rewriteTo])+                     (rewriteType,rewriteFrom,rewriteTo) <- case ignoreSharing $ unEl t' of+                         Def equality' [_level, Arg Hidden Relevant rewriteType,+                                        Arg NotHidden Relevant rewriteFrom, Arg NotHidden Relevant rewriteTo]                             | equality' == equality ->                               return (rewriteType, rewriteFrom, rewriteTo)                          _ -> do@@ -225,17 +405,17 @@                           typeError $ GenericError $ show err                       let info = PatRange noRange-                         metaInfo = Info.MetaInfo noRange emptyScopeInfo Nothing+                         metaInfo = Info.emptyMetaInfo                          underscore = A.Underscore metaInfo                       [rewriteFromExpr,rewriteToExpr,rewriteTypeExpr, proofExpr] <--                      disableDisplayForms $ setShowImplicitArguments True $ reify+                      disableDisplayForms $ withShowAllArguments $ reify                         [rewriteFrom,   rewriteTo,    rewriteType    , proof]                      let (inner, outer) -- the where clauses should go on the inner-most with                            | null eqs  = ([], wh)                            | otherwise = (wh, [])                          newRhs = A.WithRHS qname [rewriteFromExpr, proofExpr]-                                  [A.Clause (A.LHS i x aps pats)+                                  [A.Clause (A.LHS i (A.LHSHead x aps) pats)                                     (A.RewriteRHS names eqs (insertPatterns pats rhs) inner)                                     outer]                          pats = [A.DotP info underscore, -- rewriteToExpr,@@ -254,7 +434,7 @@                   reportSDoc "tc.with.top" 30 $                     prettyA c                   -- Infer the types of the with expressions-                  vas <- mapM inferExpr es+                  vas <- mapM inferExprForWith es                   (vs0, as) <- instantiateFull (unzip vas)                   (vs, as)  <- normalise (vs0, as) @@ -268,11 +448,15 @@                       SplitTel delta1 delta2 perm' = splitTelescope fv delta                       finalPerm = composeP perm' perm -                  reportSDoc "tc.with.top" 25 $ vcat+                  -- Andreas, 2012-09-17: for printing delta,+                  -- we should remove it from the context first+                  reportSDoc "tc.with.top" 25 $ escapeContext (size delta) $ vcat                     [ text "delta  =" <+> prettyTCM delta                     , text "delta1 =" <+> prettyTCM delta1                     , text "delta2 =" <+> addCtxTel delta1 (prettyTCM delta2)-                    , text "vs     =" <+> prettyTCM vs+                    ]+                  reportSDoc "tc.with.top" 25 $ vcat+                    [ text "vs     =" <+> prettyTCM vs                     , text "as     =" <+> prettyTCM as                     , text "perm'  =" <+> text (show perm')                     , text "perm   =" <+> text (show perm)@@ -280,11 +464,17 @@                     ]                    -- Create the body of the original function+{- OLD                   ctx <- getContextTelescope                   let n    = size ctx                       m    = size delta                       -- All the context variables-                      us   = [ Arg h r (Var i []) | (i, Arg h r _) <- zip [n - 1,n - 2..0] $ telToList ctx ]+                      us   = [ Arg h r (var i) | (i, Arg h r _) <- zip [n - 1,n - 2..0] $ telToList ctx ]+-}+                  -- All the context variables+                  us <- getContextArgs+                  let n    = size us+                      m    = size delta                       -- First the variables bound outside this definition                       (us0, us1') = genericSplitAt (n - m) us                       -- Then permute the rest and grab those needed to for the with arguments@@ -296,21 +486,20 @@                   t' <- return $ renameP (reverseP perm') t'                   -- and Δ₁ ⊢ vs : as                   (vs, as) <- do-                    let var = flip Var []-                        -- We know that as does not depend on Δ₂-                        rho = replicate (size delta2) __IMPOSSIBLE__ ++ map var [0..]-                    return $ substs rho $ renameP (reverseP perm') (vs, as)+                    let -- We know that as does not depend on Δ₂+                        rho = parallelS (replicate (size delta2) __IMPOSSIBLE__)+                    return $ applySubst rho $ renameP (reverseP perm') (vs, as)                    reportSDoc "tc.with.top" 20 $ vcat-                    [ text "    with arguments" <+> prettyList (map prettyTCM vs)-                    , text "             types" <+> prettyList (map prettyTCM as)+                    [ text "    with arguments" <+> do escapeContext (size delta2) $ prettyList (map prettyTCM vs)+                    , text "             types" <+> do escapeContext (size delta2) $ prettyList (map prettyTCM as)                     , text "with function call" <+> prettyTCM v                     , text "           context" <+> (prettyTCM =<< getContextTelescope)-                    , text "             delta" <+> prettyTCM delta+                    , text "             delta" <+> do escapeContext (size delta) $ prettyTCM delta                     , text "                fv" <+> text (show fv)                     , text "              body" <+> (addCtxTel delta $ prettyTCM $ mkBody v)                     ]-+                  gamma <- maybe (typeError $ NotImplemented "with clauses for functions with unfolding arity") return mgamma                   return (mkBody v, WithFunction x aux gamma delta1 delta2 vs as t' ps perm' finalPerm cs)           in handleRHS rhs0       escapeContext (size delta) $ checkWithFunction with@@ -334,7 +523,7 @@                , clauseBody  = body                } -checkClause t (A.Clause (A.LHS _ _ _ ps@(_ : _)) _ _) = typeError $ UnexpectedWithPatterns ps+checkClause t (A.Clause (A.LHS _ _ ps@(_ : _)) _ _) = typeError $ UnexpectedWithPatterns ps  checkWithFunction :: WithFunctionProblem -> TCM () checkWithFunction NoWithFunction = return ()@@ -344,11 +533,11 @@     [ text "checkWithFunction"     , nest 2 $ vcat       [ text "delta1 =" <+> prettyTCM delta1-      , text "delta2 =" <+> prettyTCM delta2+      , text "delta2 =" <+> addCtxTel delta1 (prettyTCM delta2)       , text "gamma  =" <+> prettyTCM gamma       , text "as     =" <+> addCtxTel delta1 (prettyTCM as)       , text "vs     =" <+> addCtxTel delta1 (prettyTCM vs)-      , text "b      =" <+> prettyTCM b+      , text "b      =" <+> do addCtxTel delta1 $ addCtxTel delta2 $ prettyTCM b       , text "qs     =" <+> text (show qs)       , text "perm'  =" <+> text (show perm')       , text "perm   =" <+> text (show perm)@@ -365,18 +554,25 @@   -- Generate the type of the with function   candidateType <- withFunctionType delta1 vs as delta2 b   reportSDoc "tc.with.type" 10 $ sep [ text "candidate type:", nest 2 $ prettyTCM candidateType ]-  absAuxType <- setShowImplicitArguments True+  reportSDoc "tc.with.type" 50 $ sep [ text "candidate type:", nest 2 $ text $ show candidateType ]+  absAuxType <- withShowAllArguments                 $ disableDisplayForms                 $ dontReifyInteractionPoints                 $ reify candidateType-  reportSDoc "tc.with.top" 15 $+  reportSDoc "tc.with.type" 15 $     vcat [ text "type of with function:"          , nest 2 $ prettyTCM absAuxType          ]+  reportSDoc "tc.with.type" 50 $+    vcat [ text "type of with function:"+         , nest 2 $ text $ show absAuxType+         ]   -- The ranges in the generated type are completely bogus, so we kill them.-  auxType <- setCurrentRange (getRange cs) (isType_ $ killRange absAuxType)-    `catchError` \err -> case errError err of-      TypeError _ e -> enterClosure e $ traceCall (CheckWithFunctionType absAuxType) . typeError+  auxType <- setCurrentRange (getRange cs)+               (traceCall NoHighlighting $  -- To avoid flicker.+                  isType_ $ killRange absAuxType)+    `catchError` \err -> case err of+      TypeError s e -> put s >> enterClosure e (traceCall (CheckWithFunctionType absAuxType) . typeError)       _             -> throwError err    case df of@@ -385,7 +581,7 @@       , prettyList $ map prettyTCM ts       , prettyTCM dt       ]-  addConstant aux (Defn Relevant aux auxType [df] 0 noCompiledRep Axiom)+  addConstant aux (Defn Relevant aux auxType [] [] [df] 0 noCompiledRep Axiom)   solveSizeConstraints    reportSDoc "tc.with.top" 10 $ sep@@ -418,10 +614,9 @@       dx   <- prettyTCM m       dtel <- mapM prettyA tel       dtel' <- prettyTCM =<< lookupSection m-      liftIO $ LocIO.putStrLn $ "checking where section " ++ show dx ++ " " ++ show dtel-      liftIO $ LocIO.putStrLn $ "        actual tele: " ++ show dtel'-    x <- withCurrentModule m $ checkDecls ds >> ret-    return x+      reportSLn "" 0 $ "checking where section " ++ show dx ++ " " ++ show dtel+      reportSLn "" 0 $ "        actual tele: " ++ show dtel'+    withCurrentModule m $ checkDecls ds >> ret checkWhere _ _ _ = __IMPOSSIBLE__  -- | Check if a pattern contains an absurd pattern. For instance, @suc ()@@@ -434,253 +629,20 @@     A.DotP _ _    -> False     A.LitP _      -> False     A.AsP _ _ p   -> containsAbsurdPattern p-    A.ConP _ _ ps -> any (containsAbsurdPattern . namedThing . unArg) ps+    A.ConP _ _ ps -> any (containsAbsurdPattern . namedArg) ps     A.DefP _ _ _  -> __IMPOSSIBLE__--{---- | Type check a left-hand side.-checkLHS :: [NamedArg A.Pattern] -> Type -> ([Term] -> [String] -> [Arg Pattern] -> Type -> TCM a) -> TCM a-checkLHS ps t ret = do--    verbose 15 $ do-      dt  <- prettyTCM t-      dps <- mapM prettyA ps-      liftIO $ LocIO.putStrLn $ "checking clause " ++ show dps ++ " : " ++ show dt--    -- Save the state for later. (should this be done with the undo monad, or-    -- would that interfere with normal undo?)-    rollback <- do-        st  <- get-        env <- ask-        return $ \k -> do put st; local (const env) k--    -- Preliminary type checking to decide what should be variables and what-    -- should be dotted. Ignore empty types.-    runCheckPatM (checkPatterns ps t) $ \xs metas _ (ps0, ps, ts, a) -> do--    -- Build the new pattern, turning implicit patterns into variables when-    -- they couldn't be solved.-    ps1 <- evalStateT (buildNewPatterns ps0) metas--    verbose 10 $ do-        d0 <- A.showA ps0-        d1 <- A.showA ps1-        liftIO $ do-        LocIO.putStrLn $ "first check"-        LocIO.putStrLn $ "  xs    = " ++ show xs-        LocIO.putStrLn $ "  metas = " ++ show metas-        LocIO.putStrLn $ "  ps0   = " ++ d0-        LocIO.putStrLn $ "  ps1   = " ++ d1--    verbose 10 $ do-        is <- mapM (instantiateFull . flip MetaV []) metas-        ds <- mapM prettyTCM is-        dts <- mapM prettyTCM =<< mapM instantiateFull ts-        liftIO $ LocIO.putStrLn $ "  is    = " ++ concat (intersperse ", " $ map show ds)-        liftIO $ LocIO.putStrLn $ "  ts    = " ++ concat (intersperse ", " $ map show dts)--    -- Now we forget that we ever type checked anything and type check the new-    -- pattern.-    rollback $ runCheckPatM (checkPatterns ps1 t)-             $ \xs metas emptyTypes (_, ps, ts, a) -> do--    -- Check that the empty types are indeed empty-    mapM_ isEmptyType emptyTypes--    verbose 10 $ liftIO $ do-        LocIO.putStrLn $ "second check"-        LocIO.putStrLn $ "  xs    = " ++ show xs-        LocIO.putStrLn $ "  metas = " ++ show metas--    verbose 10 $ do-        is <- mapM (instantiateFull . flip MetaV []) metas-        ds <- mapM prettyTCM is-        liftIO $ LocIO.putStrLn $ "  is    = " ++ concat (intersperse ", " $ map show ds)--    -- Finally we type check the dot patterns and check that they match their-    -- instantiations.-    evalStateT (checkDotPatterns ps1) metas--    reportLn 15 "dot patterns check out"--    -- Sanity check. Make sure that all metas were instantiated.-    is <- mapM lookupMeta metas-    case [ getRange i | i <- is, FirstOrder <- [mvInstantiation i] ] of-        [] -> return ()-        rs -> fail $ "unsolved pattern metas at\n" ++ unlines (map show rs)--    -- Make sure to purge the type and the context from any first-order metas.-    a    <- instantiateFull a-    flat <- instantiateFull =<< flatContext--    -- The context might not be well-formed. We may have to do some reordering.-    reportLn 20 $ "Before reordering:"-    verbose 20 $ dumpContext flat--    flat' <- reorderCtx flat--    -- Compute renamings to and from the new context-    let sub  = (computeSubst `on` map (fst . unArg)) flat flat'-        rsub = (computeSubst `on` map (fst . unArg)) flat' flat--    -- Apply the reordering to the types in the new context-    let flat'' = map (fmap $ id -*- substs sub) flat'--    reportLn 20 $ "After reordering:"-    verbose 20 $ dumpContext flat'--    -- Deflatten the context-    let ctx = mkContext flat''--    inContext ctx $ do--        verbose 20 $ do-            d <- prettyTCM ctx-            dt <- prettyTCM (substs sub a)-            liftIO $ LocIO.putStrLn $ "context = " ++ show d-            liftIO $ LocIO.putStrLn $ "type    = " ++ show dt--        reportLn 20 $ "finished type checking left hand side"-        ret rsub xs ps (substs sub a)-    where-        popMeta = do-            x : xs <- get-            put xs-            return x--        buildNewPatterns :: [NamedArg A.Pattern] -> StateT [MetaId] TCM [NamedArg A.Pattern]-        buildNewPatterns = mapM buildNewPattern'--        buildNewPattern' = (traverse . traverse) buildNewPattern--        buildNewPattern :: A.Pattern -> StateT [MetaId] TCM A.Pattern-        buildNewPattern (A.ImplicitP i) = do-            x <- popMeta-            v <- lift $ instantiate (MetaV x [])-            lift $ verbose 6 $ do-                d <- prettyTCM v-                liftIO $ LocIO.putStrLn $ "new pattern for " ++ show x ++ " = " ++ show d-            case v of-                -- Unsolved metas become variables-                MetaV y _ | x == y  -> return $ A.WildP i-                -- Anything else becomes dotted-                _                   -> do-                    lift $ verbose 6 $ do-                        d <- prettyTCM =<< instantiateFull v-                        liftIO $ LocIO.putStrLn $ show x ++ " := " ++ show d-                    scope <- lift getScope-                    return $ A.DotP i (A.Underscore $ info scope)-                    where info s = Info.MetaInfo (getRange i) s Nothing--        buildNewPattern p@(A.VarP _)    = return p-        buildNewPattern p@(A.WildP _)   = return p-        buildNewPattern p@(A.DotP _ _)  = popMeta >> return p-        buildNewPattern (A.AsP i x p)   = A.AsP i x <$> buildNewPattern p-        buildNewPattern (A.ConP i c ps) = A.ConP i c <$> buildNewPatterns ps-        buildNewPattern (A.DefP i c ps) = A.DefP i c <$> buildNewPatterns ps-        buildNewPattern p@(A.AbsurdP _) = return p-        buildNewPattern p@(A.LitP _)    = return p--        checkDotPatterns :: [NamedArg A.Pattern] -> StateT [MetaId] TCM ()-        checkDotPatterns = mapM_ checkDotPattern'--        checkDotPattern' p = (traverse . traverse) checkDotPattern p >> return ()--        checkDotPattern :: A.Pattern -> StateT [MetaId] TCM ()-        checkDotPattern (A.ImplicitP i) = __IMPOSSIBLE__    -- there should be no implicits left at this point-        checkDotPattern p@(A.VarP _)    = return ()-        checkDotPattern p@(A.WildP _)   = return ()-        checkDotPattern p@(A.DotP i e)  = do-            x <- popMeta-            lift $ do-                firstOrder <- isFirstOrder x    -- first order and uninstantiated-                when firstOrder $ typeError-                                $ InternalError -- TODO: proper error-                                $ "uninstantiated dot pattern at " ++ show (getRange i)-                HasType _ o <- mvJudgement <$> lookupMeta x-                a <- getOpen o-                v <- checkExpr e a-                noConstraints $ equalTerm t v (MetaV x [])-        checkDotPattern (A.AsP i x p)   = checkDotPattern p-        checkDotPattern (A.ConP i c ps) = checkDotPatterns ps-        checkDotPattern (A.DefP i c ps) = checkDotPatterns ps-        checkDotPattern p@(A.AbsurdP _) = return ()-        checkDotPattern p@(A.LitP _)    = return ()--        -- Get the flattened context-        flatContext :: TCM Context-        flatContext = do-            n <- size <$> getContext-            mapM f [0..n - 1]-            where-                f i = do-                    Arg h t <- instantiateFull =<< typeOfBV' i-                    x <- nameOfBV i-                    return $ Arg h (x, t)--        -- Reorder a flat context to make sure it's valid.-        reorderCtx :: Context -> TCM Context-        reorderCtx ctx = reverse <$> reorder (reverse ctx)-            where-                free t = mapM nameOfBV (Set.toList $ allVars $ freeVars t)--                reorder :: [Arg (Name, Type)] -> TCM [Arg (Name, Type)]-                reorder []            = return []-                reorder (Arg h (x,t) : tel) = do-                    tel' <- reorder tel-                    xs   <- free t-                    verbose 20 $ do-                        d <- prettyTCM t-                        liftIO $ LocIO.putStrLn $ "freeIn " ++ show x ++ " : " ++ show d ++ " are " ++ show xs-                    case intersect (map (fst . unArg) tel') xs of-                        [] -> return $ Arg h (x,t) : tel'-                        zs -> return $ ins zs (Arg h (x,t)) tel'--                ins [] p tel               = p : tel-                ins xs p (Arg h (x,t):tel) = Arg h (x,t) : ins (delete x xs) p tel-                ins (_:_) _ []             = __IMPOSSIBLE__--        -- Compute a renaming from the first names to the second.-        computeSubst :: [Name] -> [Name] -> [Term]-        computeSubst old new = map ix old-            where-                ix x = case findIndex (==x) new of-                        Just i  -> Var i []-                        Nothing -> __IMPOSSIBLE__--        -- Take a flat (but valid) context and turn it into a proper context.-        mkContext :: [Arg (Name, Type)] -> Context-        mkContext = reverse . mkCtx . reverse-            where-                mkCtx []          = []-                mkCtx ctx0@(Arg h (x,t) : ctx) = Arg h (x, substs sub t) : mkCtx ctx-                    where-                        sub = map err ctx0 ++ [ Var i [] | i <- [0..] ]--                        err (Arg _ (y,_)) = error $ show y ++ " occurs in the type of " ++ show x--        -- Print a flat context-        dumpContext :: Context -> TCM ()-        dumpContext ctx = do-            let pr (Arg h (x,t)) = do-                  d <- prettyTCM t-                  return $ "  " ++ par h (show x ++ " : " ++ show d)-                par Hidden    s = "{" ++ s ++ "}"-                par NotHidden s = "(" ++ s ++ ")"-            ds <- mapM pr ctx-            liftIO $ LocIO.putStr $ unlines $ reverse ds--}+    A.PatternSynP _ _ _ -> __IMPOSSIBLE__ -- False  actualConstructor :: QName -> TCM QName actualConstructor c = do     v <- constructorForm =<< normalise (Con c [])-    case v of+    case ignoreSharing v of         Con c _ -> return c         _       -> actualConstructor =<< stripLambdas v     where-        stripLambdas v = case v of+        stripLambdas v = case ignoreSharing v of             Con c _ -> return c             Lam h b -> do                 x <- freshName_ $ absName b-                addCtx x (Arg h Relevant $ sort Prop) $ stripLambdas (absBody b)+                addCtx x (Dom h Relevant $ sort Prop) $ stripLambdas (absBody b)             _       -> typeError $ GenericError $ "Not a constructor: " ++ show c
src/full/Agda/TypeChecking/Rules/LHS.hs view
@@ -20,22 +20,27 @@ import Agda.TypeChecking.Records -- isRecord import Agda.TypeChecking.Reduce import Agda.TypeChecking.Substitute hiding (Substitution)+import qualified Agda.TypeChecking.Substitute as S (Substitution) import Agda.TypeChecking.Telescope import Agda.TypeChecking.Conversion import Agda.TypeChecking.Constraints import Agda.TypeChecking.Irrelevance import Agda.TypeChecking.Primitive (constructorForm)-import {-# SOURCE #-} Agda.TypeChecking.Empty (isReallyEmptyType)-import Agda.TypeChecking.Telescope (renamingR, teleArgs)+import {-# SOURCE #-} Agda.TypeChecking.Empty+-- Duplicate import??+-- import Agda.TypeChecking.Telescope (renamingR, teleArgs) -import Agda.TypeChecking.Rules.Term (checkExpr)+import {-# SOURCE #-} Agda.TypeChecking.Rules.Term (checkExpr) import Agda.TypeChecking.Rules.LHS.Problem+import Agda.TypeChecking.Rules.LHS.ProblemRest import Agda.TypeChecking.Rules.LHS.Unify import Agda.TypeChecking.Rules.LHS.Split import Agda.TypeChecking.Rules.LHS.Implicit import Agda.TypeChecking.Rules.LHS.Instantiate import Agda.TypeChecking.Rules.Data +import Agda.Interaction.Highlighting.Generate+ import Agda.Utils.Permutation import Agda.Utils.Size import Agda.Utils.Monad@@ -43,58 +48,48 @@ #include "../../undefined.h" import Agda.Utils.Impossible -data DotPatternInst = DPI A.Expr Term Type-data AsBinding      = AsB Name Term Type--instance Subst DotPatternInst where-  substs us      (DPI e v a) = uncurry (DPI e) $ substs us (v,a)-  substUnder n u (DPI e v a) = uncurry (DPI e) $ substUnder n u (v,a)--instance PrettyTCM DotPatternInst where-  prettyTCM (DPI e v a) = sep [ prettyA e <+> text "="-                              , nest 2 $ prettyTCM v <+> text ":"-                              , nest 2 $ prettyTCM a-                              ]--instance Subst AsBinding where-  substs us      (AsB x v a) = uncurry (AsB x) $ substs us (v, a)-  substUnder n u (AsB x v a) = uncurry (AsB x) $ substUnder n u (v, a)--instance Raise AsBinding where-  raiseFrom m k (AsB x v a) = uncurry (AsB x) $ raiseFrom m k (v, a)-  renameFrom m k (AsB x v a) = uncurry (AsB x) $ renameFrom m k (v, a)--instance PrettyTCM AsBinding where-  prettyTCM (AsB x v a) =-    sep [ prettyTCM x <> text "@" <> parens (prettyTCM v)-        , nest 2 $ text ":" <+> prettyTCM a-        ]- -- | Compute the set of flexible patterns in a list of patterns. The result is --   the deBruijn indices of the flexible patterns. A pattern is flexible if it --   is dotted or implicit.-flexiblePatterns :: [NamedArg A.Pattern] -> FlexibleVars-flexiblePatterns nps = [ i | (i, p) <- zip [0..] $ reverse ps, flexible p ]+flexiblePatterns :: [NamedArg A.Pattern] -> TCM FlexibleVars+flexiblePatterns nps = map fst <$> filterM (flexible . snd) (zip [0..] $ reverse ps)   where-    ps = map (namedThing . unArg) nps-    flexible (A.DotP _ _)    = True-    flexible (A.ImplicitP _) = True-    flexible _               = False+    ps = map namedArg nps+    flexible (A.DotP _ _)    = return True+    flexible (A.ImplicitP _) = return True+    flexible (A.ConP _ (A.AmbQ [c]) qs) =+      ifM (isJust <$> isRecordConstructor c)+          (andM $ map (flexible . namedArg) qs)+          (return False)+    flexible _               = return False  -- | Compute the dot pattern instantiations.-dotPatternInsts :: [NamedArg A.Pattern] -> Substitution -> [Type] -> [DotPatternInst]-dotPatternInsts ps s as = dpi (map (namedThing . unArg) ps) (reverse s) as+dotPatternInsts :: [NamedArg A.Pattern] -> Substitution -> [Dom Type] -> TCM [DotPatternInst]+dotPatternInsts ps s as = dpi (map namedArg ps) (reverse s) as   where     dpi (_ : _)  []            _       = __IMPOSSIBLE__     dpi (_ : _)  (Just _ : _)  []      = __IMPOSSIBLE__     -- the substitution also contains entries for module parameters, so it can     -- be longer than the pattern-    dpi []       _             _       = []+    dpi []       _             _       = return []     dpi (_ : ps) (Nothing : s) as      = dpi ps s as     dpi (p : ps) (Just u : s) (a : as) =       case p of-        A.DotP _ e    -> DPI e u a : dpi ps s as+        A.DotP _ e    -> (DPI e u a :) <$> dpi ps s as         A.ImplicitP _ -> dpi ps s as+        -- record pattern+        A.ConP _ (A.AmbQ [c]) qs -> do+          Def r vs   <- ignoreSharing <$> reduce (unEl $ unDom a)+          (ftel, us) <- etaExpandRecord r vs u+          qs <- insertImplicitPatterns ExpandLast qs ftel+          let instTel EmptyTel _                   = []+              instTel (ExtendTel arg tel) (u : us) = arg : instTel (absApp tel u) us+              instTel ExtendTel{} []               = __IMPOSSIBLE__+              bs0 = instTel ftel (map unArg us)+              -- Andreas, 2012-09-19 propagate relevance info to dot patterns+              bs  = map (mapDomRelevance (composeRelevance (domRelevance a))) bs0+          dpi (map namedArg qs ++ ps) (map (Just . unArg) us ++ s) (bs ++ as)+         _           -> __IMPOSSIBLE__  instantiatePattern :: Substitution -> Permutation -> [Arg Pattern] -> [Arg Pattern]@@ -139,7 +134,7 @@  -- | Check if a problem is solved. That is, if the patterns are all variables. isSolvedProblem :: Problem -> Bool-isSolvedProblem = all (isVar . snd . asView . namedThing . unArg) . problemInPat+isSolvedProblem = all (isVar . snd . asView . namedArg) . problemInPat   where     isVar (A.VarP _)      = True     isVar (A.WildP _)     = True@@ -154,26 +149,34 @@ -- -- Precondition: The problem has to be solved. +{- noShadowingOfConstructors   :: A.Clause      -- ^ The entire clause (used for error reporting).   -> Problem -> TCM () noShadowingOfConstructors c problem =   traceCall (CheckPatternShadowing c) $ do-    let pat = map (snd . asView . namedThing . unArg) $+-}+noShadowingOfConstructors+  :: (Maybe r -> Call) -- ^ Trace, e.g., @CheckPatternShadowing clause@+  -> Problem -> TCM ()+noShadowingOfConstructors mkCall problem =+  traceCall mkCall $ do+    let pat = map (snd . asView . namedArg) $                   problemInPat problem-        tel = map (unEl . snd . unArg) $ telToList $ problemTel problem+        tel = map (unEl . snd . unDom) $ telToList $ problemTel problem     zipWithM' noShadowing pat tel     return ()   where   noShadowing (A.WildP     {}) t = return ()   noShadowing (A.AbsurdP   {}) t = return ()   noShadowing (A.ImplicitP {}) t = return ()-  noShadowing (A.ConP      {}) t = __IMPOSSIBLE__+  noShadowing (A.ConP      {}) t = return ()  -- only happens for eta expanded record patterns   noShadowing (A.DefP      {}) t = __IMPOSSIBLE__   noShadowing (A.AsP       {}) t = __IMPOSSIBLE__   noShadowing (A.DotP      {}) t = __IMPOSSIBLE__   noShadowing (A.LitP      {}) t = __IMPOSSIBLE__+  noShadowing (A.PatternSynP {}) t = __IMPOSSIBLE__   noShadowing (A.VarP x)       t = do     t <- normalise t     case t of@@ -197,6 +200,7 @@       Var   {} -> return ()       Pi    {} -> return ()       Sort  {} -> return ()+      Shared p -> noShadowing (A.VarP x) $ derefPtr p       MetaV {} -> return ()       -- TODO: If the type is a meta-variable, should the test be       -- postponed? If there is a problem, then it will be caught when@@ -211,7 +215,7 @@  -- | Check that a dot pattern matches it's instantiation. checkDotPattern :: DotPatternInst -> TCM ()-checkDotPattern (DPI e v a) =+checkDotPattern (DPI e v (Dom h r a)) =   traceCall (CheckDotPattern e v) $ do   reportSDoc "tc.lhs.dot" 15 $     sep [ text "checking dot pattern"@@ -219,26 +223,42 @@         , nest 2 $ text "=" <+> prettyTCM v         , nest 2 $ text ":" <+> prettyTCM a         ]-  u <- checkExpr e a-  -- Should be ok to do noConstraints here-  noConstraints $ equalTerm a u v+  applyRelevanceToContext r $ do+    u <- checkExpr e a+    -- Should be ok to do noConstraints here+    noConstraints $ equalTerm a u v  -- | Bind the variables in a left hand side. Precondition: the patterns should --   all be 'A.VarP', 'A.WildP', or 'A.ImplicitP' and the telescope should have --   the same size as the pattern list.+--   There could also be 'A.ConP's resulting from eta expanded implicit record+--   patterns. bindLHSVars :: [NamedArg A.Pattern] -> Telescope -> TCM a -> TCM a bindLHSVars []       (ExtendTel _ _)   _   = __IMPOSSIBLE__ bindLHSVars (_ : _)   EmptyTel         _   = __IMPOSSIBLE__ bindLHSVars []        EmptyTel         ret = ret bindLHSVars (p : ps) (ExtendTel a tel) ret =-  case namedThing $ unArg p of+  case namedArg p of     A.VarP x      -> addCtx x a $ bindLHSVars ps (absBody tel) ret     A.WildP _     -> bindDummy (absName tel)     A.ImplicitP _ -> bindDummy (absName tel)-    A.AbsurdP _   -> do-      isReallyEmptyType $ unArg a+    A.AbsurdP pi  -> do+      -- Andreas, 2012-03-15: allow postponement of emptyness check+      isEmptyType (getRange pi) $ unDom a+      -- OLD CODE: isReallyEmptyType $ unArg a       bindDummy (absName tel)-    _             -> __IMPOSSIBLE__+    A.ConP _ (A.AmbQ [c]) qs -> do -- eta expanded record pattern+      Def r vs <- reduce (unEl $ unDom a)+      ftel     <- (`apply` vs) <$> getRecordFieldTypes r+      let n   = size ftel+          eta = Con c [ Var i [] <$ (namedThing <$> q) | (q, i) <- zip qs [n - 1, n - 2..0] ]+      bindLHSVars (qs ++ ps) (ftel `abstract` absApp (raise (size ftel) tel) eta) ret+    A.ConP{}        -> __IMPOSSIBLE__+    A.DefP{}        -> __IMPOSSIBLE__+    A.AsP{}         -> __IMPOSSIBLE__+    A.DotP{}        -> __IMPOSSIBLE__+    A.LitP{}        -> __IMPOSSIBLE__+    A.PatternSynP{} -> __IMPOSSIBLE__     where       name "_" = freshNoName_       name s   = freshName_ ("." ++ s)@@ -256,60 +276,39 @@         ]   addLetBinding Relevant x v a $ bindAsPatterns asb ret --- | Rename the variables in a telescope using the names from a given pattern-useNamesFromPattern :: [NamedArg A.Pattern] -> Telescope -> Telescope-useNamesFromPattern ps = telFromList . zipWith ren (toPats ps ++ repeat dummy) . telToList-  where-    dummy = A.WildP __IMPOSSIBLE__-    ren (A.VarP x) (Arg NotHidden r (_, a)) = Arg NotHidden r (show x, a)-    ren _ a = a-    toPats = map (namedThing . unArg)- -- | Check a LHS. Main function. checkLeftHandSide-  :: A.Clause-     -- ^ The entire clause.+  :: (Maybe r -> Call)+     -- ^ Trace, e.g. @CheckPatternShadowing clause@   -> [NamedArg A.Pattern]      -- ^ The patterns.   -> Type-     -- ^ The expected type.-  -> (Telescope -> Telescope -> [Term] -> [String] -> [Arg Pattern]-      -> Type -> Permutation -> TCM a)+     -- ^ The expected type @a = Γ → b@.+  -> (Maybe Telescope   -- Γ : The types of the patterns.+                        -- 'Nothing' if more patterns than domain types in @a@.+                        -- Used only to construct a @with@ function; see 'stripwithClausePatterns'.+      -> Telescope      -- Δ : The types of the pattern variables.+      -> S.Substitution -- σ : The patterns in form of a substitution Δ ⊢ σ : Γ+      -> [String]       -- Names for the variables in Δ, for binding the body.+      -> [Arg Pattern]  -- The patterns in internal syntax.+      -> Type           -- The type of the body. Is @bσ@ if @Γ@ is defined.+      -> Permutation    -- The permutation from pattern vars to @Δ@.+      -> TCM a)      -- ^ Continuation.   -> TCM a checkLeftHandSide c ps a ret = do-  TelV tel0' b0 <- telView a-  ps <- insertImplicitPatterns ps tel0'-  unless (size tel0' >= size ps) $ typeError $ TooManyArgumentsInLHS (size ps) a-  let tel0     = useNamesFromPattern ps tel0'-      (as, bs) = splitAt (size ps) $ telToList tel0-      gamma    = telFromList as-      b        = telePi (telFromList bs) b0--      -- internal patterns start as all variables-      ips      = map (fmap (VarP . fst)) as--      problem  = Problem ps (idP $ size ps, ips) gamma--  reportSDoc "tc.lhs.top" 10 $-    vcat [ text "checking lhs:"-	 , nest 2 $ vcat-	   [ text "ps    =" <+> fsep (map prettyA ps)-	   , text "a     =" <+> (prettyTCM =<< normalise a)-	   , text "a'    =" <+> prettyTCM (telePi tel0  b0)-	   , text "a''   =" <+> prettyTCM (telePi tel0' b0)-           , text "xs    =" <+> text (show $ map (fst . unArg) as)-	   , text "tel0  =" <+> prettyTCM tel0-	   , text "b0    =" <+> prettyTCM b0-	   , text "gamma =" <+> prettyTCM gamma-	   , text "b     =" <+> addCtxTel gamma (prettyTCM b)-	   ]-	 ]+  problem <- problemFromPats ps a+  unless (noProblemRest problem) $ typeError $ TooManyArgumentsInLHS a+  let (Problem _ _ gamma (ProblemRest _ b)) = problem+      mgamma = if noProblemRest problem then Just gamma else Nothing+      st     = LHSState problem idS [] [] -  let idsub = [ Var i [] | i <- [0..] ]+  -- doing the splits:+  LHSState (Problem ps (perm, qs) delta rest) sigma dpi asb <- checkLHS st+  unless (null $ restPats rest) $ typeError $ TooManyArgumentsInLHS a -  (Problem ps (perm, qs) delta, sigma, dpi, asb) <- checkLHS problem idsub [] []-  let b' = substs sigma b+  -- let b' = applySubst sigma b+  let b' = restType rest    noPatternMatchingOnCodata qs @@ -333,18 +332,19 @@     let rho = renamingR perm -- I'm not certain about this...         Perm n _ = perm         xs  = [ "h" ++ show n | n <- [0..n - 1] ]-    ret gamma delta rho xs qs b' perm+    ret mgamma delta rho xs qs b' perm   where-    checkLHS :: Problem -> [Term] -> [DotPatternInst] -> [AsBinding] ->-                TCM (Problem, [Term], [DotPatternInst], [AsBinding])-    checkLHS problem sigma dpi asb-      | isSolvedProblem problem = do-        problem <- insertImplicitProblem problem -- inserting implicit patterns preserves solvedness-        noShadowingOfConstructors c problem-        return (problem, sigma, dpi, asb)-      | otherwise               = do-        sp <- splitProblem =<< insertImplicitProblem problem-        reportSDoc "tc.lhs.top" 20 $ text "splitting completed"+    -- the loop: split at a variable in the problem until problem is solved+    checkLHS :: LHSState -> TCM LHSState+    checkLHS st@(LHSState problem sigma dpi asb) = do+      problem <- insertImplicitProblem problem  -- inserting implicits no longer preserve solvedness+      if isSolvedProblem problem                -- since we might insert eta expanded record patterns+        then do+          noShadowingOfConstructors c problem+          return $ st { lhsProblem = problem }+        else do+        sp <- splitProblem problem+        reportSDoc "tc.lhs.split" 20 $ text "splitting completed"         case sp of           Left NothingToSplit   -> nothingToSplitError problem           Left (SplitPanic err) -> __IMPOSSIBLE__@@ -354,27 +354,28 @@              -- plug the hole with a lit pattern             let ip    = plugHole (LitP lit) iph-                iperm = expandP (fromIntegral hix) 0 $ fst (problemOutPat problem)+                iperm = expandP hix 0 $ fst (problemOutPat problem)              -- substitute the literal in p1 and sigma and dpi and asb             let delta1 = problemTel p0                 delta2 = absApp (fmap problemTel p1) (Lit lit)-                rho    = [ var i | i <- [0..size delta2 - 1] ]-                      ++ [ raise (size delta2) $ Lit lit ]-                      ++ [ var i | i <- [size delta2 ..] ]-                  where-                    var i = Var i []-                sigma'   = substs rho sigma-                dpi'     = substs rho dpi-                asb0     = substs rho asb-                ip'      = substs rho ip+                rho    = liftS (size delta2) $ singletonS (Lit lit)+                -- rho    = [ var i | i <- [0..size delta2 - 1] ]+                --       ++ [ raise (size delta2) $ Lit lit ]+                --       ++ [ var i | i <- [size delta2 ..] ]+                sigma'   = applySubst rho sigma+                dpi'     = applySubst rho dpi+                asb0     = applySubst rho asb+                ip'      = applySubst rho ip+                rest'    = applySubst rho (problemRest problem)              -- Compute the new problem             let ps'      = problemInPat p0 ++ problemInPat (absBody p1)                 delta'   = abstract delta1 delta2-                problem' = Problem ps' (iperm, ip') delta'+                problem' = Problem ps' (iperm, ip') delta' rest'                 asb'     = raise (size delta2) (map (\x -> AsB x (Lit lit) a) xs) ++ asb0-            checkLHS problem' sigma' dpi' asb'+            st' <- updateProblemRest (LHSState problem' sigma' dpi' asb')+            checkLHS st'            -- Split on constructor pattern           Right (Split p0 xs (Arg h rel@@ -396,7 +397,7 @@             let delta1 = problemTel p0             let typeOfSplitVar = Arg h rel a -            reportSDoc "tc.lhs.top" 10 $ sep+            reportSDoc "tc.lhs.split" 10 $ sep               [ text "checking lhs"               , nest 2 $ text "tel =" <+> prettyTCM (problemTel problem)               , nest 2 $ text "rel =" <+> (text $ show rel)@@ -412,11 +413,11 @@                 ]               ] -            Con c' [] <- constructorForm =<< normalise (Con c [])+            Con c' [] <- ignoreSharing <$> (constructorForm =<< normalise (Con c []))             c  <- return $ c' `withRangeOf` c             ca <- defType <$> getConstInfo c -            reportSDoc "tc.lhs.top" 20 $ nest 2 $ vcat+            reportSDoc "tc.lhs.split" 20 $ nest 2 $ vcat               [ text "ca =" <+> prettyTCM ca               , text "vs =" <+> prettyList (map prettyTCM vs)               ]@@ -425,7 +426,10 @@             let a = ca `piApply` vs              -- It will end in an application of the datatype-            TelV gamma' ca@(El _ (Def d' us)) <- telView a+            (gamma', ca, d', us) <- do+              TelV gamma' ca@(El _ def) <- telView a+              let Def d' us = ignoreSharing def+              return (gamma', ca, d', us)              -- This should be the same datatype as we split on             unless (d == d') $ typeError $ ShouldBeApplicationOf ca d'@@ -444,7 +448,7 @@               ] -}             -- Insert implicit patterns-            qs' <- insertImplicitPatterns qs gamma'+            qs' <- insertImplicitPatterns ExpandLast qs gamma'              unless (size qs' == size gamma') $               typeError $ WrongNumberOfConstructorArguments c (size gamma') (size qs')@@ -455,7 +459,7 @@             da <- (`piApply` vs) . defType <$> getConstInfo d              -- Compute the flexible variables-            let flex = flexiblePatterns (problemInPat p0 ++ qs')+            flex <- flexiblePatterns (problemInPat p0 ++ qs')  	    reportSDoc "tc.lhs.top" 15 $ addCtxTel delta1 $ 	      sep [ text "preparing to unify"@@ -473,17 +477,17 @@             sub0 <- addCtxTel (delta1 `abstract` gamma) $                     unifyIndices_ flex (raise (size gamma) da) (drop (size vs) us) (raise (size gamma) ws) -            -- We should subsitute c ys for x in Δ₂ and sigma+            -- We should substitute c ys for x in Δ₂ and sigma             let ys     = teleArgs gamma                 delta2 = absApp (raise (size gamma) $ fmap problemTel p1) (Con c ys)-                rho0 = [ var i | i <- [0..size delta2 - 1] ]-                    ++ [ raise (size delta2) $ Con c ys ]-                    ++ [ var i | i <- [size delta2 + size gamma ..] ]-                  where-                    var i = Var i []-                sigma0 = substs rho0 sigma-                dpi0   = substs rho0 dpi-                asb0   = substs rho0 asb+                rho0   = liftS (size delta2) $ Con c ys :# raiseS (size gamma)+                -- rho0 = [ var i | i <- [0..size delta2 - 1] ]+                --     ++ [ raise (size delta2) $ Con c ys ]+                --     ++ [ var i | i <- [size delta2 + size gamma ..] ]+                sigma0 = applySubst rho0 sigma+                dpi0   = applySubst rho0 dpi+                asb0   = applySubst rho0 asb+                rest0  = applySubst rho0 (problemRest problem)              reportSDoc "tc.lhs.top" 15 $ addCtxTel (delta1 `abstract` gamma) $ nest 2 $ vcat               [ text "delta2 =" <+> prettyTCM delta2@@ -500,14 +504,14 @@             -- all variables which will be bound by patterns.             -- Thus, it has to be raised by 1 (the "hole" variable)             -- plus the length of delta2 (the variables coming after the hole).-            storedPatternType <- ifM (isRecord d)+            storedPatternType <- ifM (isJust <$> isRecord d)               (return $ Just $ raise (1 + size delta2) $ typeOfSplitVar)               (return $ Nothing)              -- Plug the hole in the out pattern with c ys-            let ysp = map (fmap (VarP . fst)) $ telToList gamma+            let ysp = map (argFromDom . fmap (VarP . fst)) $ telToList gamma                 ip  = plugHole (ConP c storedPatternType ysp) iph-                ip0 = substs rho0 ip+                ip0 = applySubst rho0 ip              -- Δ₁Γ ⊢ sub0, we need something in Δ₁ΓΔ₂             -- Also needs to be padded with Nothing's to have the right length.@@ -523,8 +527,8 @@               , text "ip0  =" <+> text (show ip0)               ]             reportSDoc "tc.lhs.top" 15 $ nest 2 $ vcat-              [ text "rho0 =" <+> text (show $ take (size delta1 + size gamma + size delta2) rho0)-              ]  -- Andreas, this is showing some inital segment of rho0, not necessarily the most meaningful one+              [ text "rho0 =" <+> text (show rho0)+              ]              -- Instantiate the new telescope with the given substitution             (delta', perm, rho, instTypes) <- instantiateTel sub newTel@@ -547,16 +551,17 @@ -}             -- Compute the new dot pattern instantiations             let ps0'   = problemInPat p0 ++ qs' ++ problemInPat (absBody p1)-                newDpi = dotPatternInsts ps0' (substs rho sub) instTypes              reportSDoc "tc.lhs.top" 15 $ nest 2 $ vcat-              [ text "subst rho sub =" <+> brackets (fsep $ punctuate comma $ map (maybe (text "_") prettyTCM) (substs rho sub))+              [ text "subst rho sub =" <+> brackets (fsep $ punctuate comma $ map (maybe (text "_") prettyTCM) (applySubst rho sub))               , text "ps0'  =" <+> brackets (fsep $ punctuate comma $ map prettyA ps0')               ] +            newDpi <- dotPatternInsts ps0' (applySubst rho sub) instTypes+             -- The final dpis and asbs are the new ones plus the old ones substituted by ρ-            let dpi' = substs rho dpi0 ++ newDpi-                asb' = substs rho $ asb0 ++ raise (size delta2) (map (\x -> AsB x (Con c ys) ca) xs)+            let dpi' = applySubst rho dpi0 ++ newDpi+                asb' = applySubst rho $ asb0 ++ raise (size delta2) (map (\x -> AsB x (Con c ys) ca) xs)              reportSDoc "tc.lhs.top" 15 $ nest 2 $ vcat               [ text "dpi' = " <+> brackets (fsep $ punctuate comma $ map prettyTCM dpi')@@ -564,7 +569,8 @@               ]              -- Apply the substitution to the type-            let sigma'   = substs rho sigma0+            let sigma'   = applySubst rho sigma0+                rest'    = applySubst rho rest0              reportSDoc "tc.lhs.inst" 15 $               nest 2 $ text "ps0 = " <+> brackets (fsep $ punctuate comma $ map prettyA ps0')@@ -575,15 +581,15 @@            -- Compute the new permutation of the out patterns. This is the composition of             -- the new permutation with the expansion of the old permutation to             -- reflect the split.-            let perm'  = expandP (fromIntegral hix) (size gamma) $ fst (problemOutPat problem)+            let perm'  = expandP hix (size gamma) $ fst (problemOutPat problem)                 iperm' = perm `composeP` perm'              -- Instantiate the out patterns             let ip'    = instantiatePattern sub perm' ip0-                newip  = substs rho ip'+                newip  = applySubst rho ip'              -- Construct the new problem-            let problem' = Problem ps' (iperm', newip) delta'+            let problem' = Problem ps' (iperm', newip) delta' rest'              reportSDoc "tc.lhs.top" 12 $ sep               [ text "new problem"@@ -602,8 +608,23 @@               , text "newip  =" <+> text (show newip)               ] +            -- if rest type reduces,+            -- extend the split problem by previously not considered patterns+            st'@(LHSState problem'@(Problem ps' (iperm', ip') delta' rest')+                          sigma' dpi' asb')+              <- updateProblemRest $ LHSState problem' sigma' dpi' asb'++            reportSDoc "tc.lhs.top" 12 $ sep+              [ text "new problem from rest"+              , nest 2 $ vcat+                [ text "ps'    = " <+> fsep (map prettyA ps')+                , text "delta' = " <+> prettyTCM delta'+                , text "ip'    =" <+> text (show ip')+                , text "iperm' =" <+> text (show iperm')+                ]+              ]             -- Continue splitting-            checkLHS problem' sigma' dpi' asb'+            checkLHS st'  -- Ensures that we are not performing pattern matching on codata. 
src/full/Agda/TypeChecking/Rules/LHS/Implicit.hs view
@@ -1,7 +1,8 @@-{-# LANGUAGE CPP #-}+{-# LANGUAGE CPP, PatternGuards #-}  module Agda.TypeChecking.Rules.LHS.Implicit where +import Data.Maybe import Control.Applicative  import Agda.Syntax.Common@@ -14,27 +15,32 @@ import Agda.TypeChecking.Implicit import Agda.TypeChecking.Substitute import Agda.TypeChecking.Pretty+import Agda.TypeChecking.Records+import Agda.TypeChecking.Reduce  import Agda.TypeChecking.Rules.LHS.Problem +import Agda.Utils.Monad+ #include "../../../undefined.h" import Agda.Utils.Impossible  -- | Insert implicit patterns in a problem. insertImplicitProblem :: Problem -> TCM Problem-insertImplicitProblem (Problem ps qs tel) = do+insertImplicitProblem (Problem ps qs tel pr) = do   reportSDoc "tc.lhs.imp" 15 $     sep [ text "insertImplicits" 	, nest 2 $ brackets $ fsep $ punctuate comma $ map prettyA ps 	, nest 2 $ prettyTCM tel 	]-  ps' <- insertImplicitPatterns ps tel-  return $ Problem ps' qs tel+  ps' <- insertImplicitPatterns ExpandLast ps tel+  return $ Problem ps' qs tel pr  -- | Insert implicit patterns in a list of patterns.-insertImplicitPatterns :: [NamedArg A.Pattern] -> Telescope -> TCM [NamedArg A.Pattern]-insertImplicitPatterns ps EmptyTel = return ps-insertImplicitPatterns ps tel@(ExtendTel _ tel') = case ps of+insertImplicitPatterns :: ExpandHidden -> [NamedArg A.Pattern] -> Telescope -> TCM [NamedArg A.Pattern]+insertImplicitPatterns exh            ps EmptyTel = return ps+insertImplicitPatterns DontExpandLast [] tel      = return []+insertImplicitPatterns exh ps tel@(ExtendTel arg tel') = case ps of   [] -> do     i <- insImp dummy tel     case i of@@ -45,16 +51,38 @@     i <- insImp p tel     case i of       Just []	-> __IMPOSSIBLE__-      Just hs	-> insertImplicitPatterns (implicitPs hs ++ p : ps) tel-      Nothing	-> (p :) <$> insertImplicitPatterns ps (absBody tel')+      Just hs	-> insertImplicitPatterns exh (implicitPs hs ++ p : ps) tel+      Nothing+        | A.ImplicitP{} <- namedArg p,+          argHiding p /= Instance -> do+          -- Eta expand implicit patterns of record type (issue 473),+          -- but not instance arguments since then they won't be found+          -- by the instance search+          a <- reduce (unDom arg)+          case ignoreSharing $ unEl a of+            Def d _ ->+              -- Andreas, 2012-06-10: only expand guarded records,+              -- otherwise we might run into an infinite loop+              ifM (isEtaRecord d) (do+                c  <- getRecordConstructor d+                fs <- getRecordFieldNames d+                let qs = map (implicitP <$) fs+                continue ((A.ConP (PatRange noRange) (A.AmbQ [c]) qs <$) <$> p)+              ) (continue p)+            _ -> continue p+        | otherwise -> continue p+        where+          continue p = (p :) <$> insertImplicitPatterns exh ps (absBody tel')   where-    dummy = defaultArg $ unnamed ()+    dummy = defaultNamedArg () -    insImp x tel = case insertImplicit x $ map (fmap fst) $ telToList tel of+    insImp x tel = case insertImplicit x $ map (argFromDom . fmap fst) $ telToList tel of       BadImplicits   -> typeError $ WrongHidingInLHS (telePi tel $ sort Prop)       NoSuchName x   -> typeError $ WrongHidingInLHS (telePi tel $ sort Prop)       ImpInsert n    -> return $ Just n       NoInsertNeeded -> return Nothing +    implicitP = unnamed $ A.ImplicitP $ PatRange $ noRange+     implicitPs [] = []-    implicitPs (h : hs) = (Arg h Relevant $ unnamed $ A.ImplicitP $ PatRange $ noRange) : implicitPs hs+    implicitPs (h : hs) = (Arg h Relevant implicitP) : implicitPs hs
src/full/Agda/TypeChecking/Rules/LHS/Instantiate.hs view
@@ -8,14 +8,17 @@  import Agda.TypeChecking.Monad import Agda.TypeChecking.Substitute hiding (Substitution)+import qualified Agda.TypeChecking.Substitute as S (Substitution) import Agda.TypeChecking.Free import Agda.TypeChecking.Pretty import Agda.TypeChecking.Reduce import Agda.TypeChecking.Telescope  import Agda.TypeChecking.Rules.LHS.Problem+-- import Agda.TypeChecking.Rules.LHS.ProblemRest import Agda.TypeChecking.Rules.LHS.Split ( asView ) +import Agda.Utils.List import Agda.Utils.Permutation import Agda.Utils.Size @@ -25,7 +28,7 @@ -- | Instantiate a telescope with a substitution. Might reorder the telescope. --   @instantiateTel (Γ : Tel)(σ : Γ --> Γ) = Γσ~@ --   Monadic only for debugging purposes.-instantiateTel :: Substitution -> Telescope -> TCM (Telescope, Permutation, [Term], [Type])+instantiateTel :: Substitution -> Telescope -> TCM (Telescope, Permutation, S.Substitution, [Dom Type]) instantiateTel s tel = liftTCM $ do    tel <- normalise tel@@ -38,9 +41,18 @@     ]    -- Shrinking permutation (removing Justs) (and its complement, and reverse)-  let ps  = Perm (size s) [ i | (i, Nothing) <- zip [0..] $ reverse s ]+  let n   = size s+      {- OLD CODE, leave as documentation+      ps  = Perm n [ i | (i, Nothing) <- zip [0..] $ reverse s ]       psR = reverseP ps-      psC = Perm (size s) [ i | (i, Just _)  <- zip [0..] $ reverse s ]+      psC = Perm n [ i | (i, Just _)  <- zip [0..] $ reverse s ]+      -}+      deal (i, Nothing) = Left i+      deal (i, Just _ ) = Right i+      (is, isC) = mapEither deal $ zip [0..] $ reverse s+      ps  = Perm n is+      psR = reverseP ps+      psC = Perm n isC    reportSDoc "tc.lhs.inst" 10 $ vcat     [ nest 2 $ text $ "ps   = " ++ show ps@@ -57,6 +69,9 @@   -- rho : [Tm Γσ]Γ   let rho = mkSubst s' +  reportSDoc "tc.lhs.inst" 15 $ nest 2 $+    text "rho = " <+> text (show rho)+   -- tel1 : [Type Γ]Γ   let tel1   = flattenTel tel       names1 = teleNames tel@@ -67,7 +82,7 @@     ]    -- tel2 : [Type Γσ]Γ-  let tel2 = substs rho tel1+  let tel2 = applySubst rho tel1    reportSDoc "tc.lhs.inst" 15 $ nest 2 $     text "tel2 =" <+> brackets (fsep $ punctuate comma $ map prettyTCM tel2)@@ -83,7 +98,7 @@   p <- case reorderTel tel3 of     Nothing -> inContext [] $ do       xs <- mapM freshName_ names3-      addCtxs xs (Arg NotHidden Relevant prop) $ do+      addCtxs xs (Dom NotHidden Relevant prop) $ do         err <- sep [ text "Recursive telescope in left hand side:"                    , fsep [ parens (prettyTCM x <+> text ":" <+> prettyTCM t)                           | (x, t) <- zip xs tel3 ]@@ -97,7 +112,7 @@   let rho' = renaming (reverseP p)    -- tel4 : [Type Γσ~]Γσ~-  let tel4   = substs rho' (permute p tel3)+  let tel4   = applySubst rho' (permute p tel3)       names4 = permute p names3    reportSDoc "tc.lhs.inst" 15 $ nest 2 $@@ -111,34 +126,33 @@    -- remember the types of the instantiations   -- itypes : [Type Γσ~]Γ*-  let itypes = substs rho' $ permute psC $ map unArg tel2+  let itypes = applySubst rho' $ permute psC tel2 -  return (tel5, composeP p ps, substs rho' rho, itypes)+  return (tel5, composeP p ps, applySubst rho' rho, itypes)   where -    -- Turn a Substitution ([Maybe Term]) into a substitution ([Term])-    -- (The result is an infinite list)-    mkSubst :: [Maybe Term] -> [Term]+    -- Turn a Substitution ([Maybe Term]) into a substitution (S.Substitution)+    mkSubst :: [Maybe Term] -> S.Substitution     mkSubst s = rho 0 s'-      where s'  = s ++ repeat Nothing-	    rho i (Nothing : s) = Var i [] : rho (i + 1) s-	    rho i (Just u  : s) = u : rho i s-	    rho _ []		= __IMPOSSIBLE__+      where s'  = s+	    rho i (Nothing : s) = var i :# rho (i + 1) s+	    rho i (Just u  : s) = u :# rho i s+	    rho i []		= raiseS i  -- | Produce a nice error message when splitting failed nothingToSplitError :: Problem -> TCM a-nothingToSplitError (Problem ps _ tel) = splitError ps tel+nothingToSplitError (Problem ps _ tel pr) = splitError ps tel   where     splitError []	EmptyTel    = __IMPOSSIBLE__     splitError (_:_)	EmptyTel    = __IMPOSSIBLE__     splitError []	ExtendTel{} = __IMPOSSIBLE__     splitError (p : ps) (ExtendTel a tel)-      | isBad p   = traceCall (CheckPattern (strip p) EmptyTel (unArg a)) $ case strip p of+      | isBad p   = traceCall (CheckPattern (strip p) EmptyTel (unDom a)) $ case strip p of 	  A.DotP _ e -> typeError $ UninstantiatedDotPattern e-	  p	     -> typeError $ IlltypedPattern p (unArg a)+	  p	     -> typeError $ IlltypedPattern p (unDom a)       | otherwise = underAbstraction a tel $ \tel -> splitError ps tel       where-	strip = snd . asView . namedThing . unArg+	strip = snd . asView . namedArg 	isBad p = case strip p of 	  A.DotP _ _   -> True 	  A.ConP _ _ _ -> True
src/full/Agda/TypeChecking/Rules/LHS/Problem.hs view
@@ -1,8 +1,8 @@-+{-# LANGUAGE CPP #-} module Agda.TypeChecking.Rules.LHS.Problem where  import Control.Monad.Error-import Data.Monoid+import Data.Monoid ( Monoid(mappend,mempty) )  import Agda.Syntax.Common import Agda.Syntax.Literal@@ -11,49 +11,128 @@ import Agda.Syntax.Internal.Pattern import qualified Agda.Syntax.Abstract as A -import Agda.TypeChecking.Substitute+import Agda.TypeChecking.Substitute as S+import Agda.TypeChecking.Pretty  import Agda.Utils.Permutation +{- UNUSED+#include "../../../undefined.h"+import Agda.Utils.Impossible+-}+ type Substitution   = [Maybe Term] type FlexibleVars   = [Nat] +-- | State of typechecking a LHS; input to 'split'.+--   [Ulf Norell's PhD, page. 35]+--+--   In @Problem ps p delta@,+--   @ps@ are the user patterns of supposed type @delta@.+--   @p@ is the pattern resulting from the splitting. data Problem' p	    = Problem { problemInPat  :: [NamedArg A.Pattern] 			      , problemOutPat :: p 			      , problemTel    :: Telescope+                              , problemRest   :: ProblemRest 			      }++-- | User patterns that could not be given a type yet.+--+--   Example:+--   @+--      f : (b : Bool) -> if b then Nat else Nat -> Nat+--      f true          = zero+--      f false zero    = zero+--      f false (suc n) = n+--   @+--   In this sitation, for clause 2, we construct an initial problem+--   @+--      problemInPat = [false]+--      problemTel   = (b : Bool)+--      problemRest.restPats = [zero]+--      problemRest.restType = if b then Nat else Nat -> Nat+--   @+--   As we instantiate @b@ to @false@, the 'restType' reduces to+--   @Nat -> Nat@ and we can move pattern @zero@ over to @problemInPat@.+data ProblemRest    = ProblemRest+  { restPats :: [NamedArg A.Pattern]  -- ^ non-empty list of user patterns which could not yet be typed+  , restType :: Type                  -- ^ type eliminated by 'restPats'+  }+ data Focus	    = Focus   { focusCon      :: QName 			      , focusConArgs  :: [NamedArg A.Pattern] 			      , focusRange    :: Range 			      , focusOutPat   :: OneHolePatterns-			      , focusHoleIx   :: Int  -- ^ index of focused variable in the out patterns+			      , focusHoleIx   :: Int  -- ^ Index of focused variable in the out patterns. 			      , focusDatatype :: QName 			      , focusParams   :: [Arg Term] 			      , focusIndices  :: [Arg Term]-                              , focusType     :: Type -- type of variable we are splitting, kept for record patterns (Andreas, 2010-09-09)+                              , focusType     :: Type -- ^ Type of variable we are splitting, kept for record patterns. 			      } 		    | LitFocus Literal OneHolePatterns Int Type+ data SplitProblem   = Split ProblemPart [Name] (Arg Focus) (Abs ProblemPart)                       -- ^ the [Name]s give the as-bindings for the focus  data SplitError	    = NothingToSplit 		    | SplitPanic String -type ProblemPart = Problem' ()--instance Raise (Problem' p) where-  raiseFrom  m k p = p { problemTel = raiseFrom  m k $  problemTel p }-  renameFrom m k p = p { problemTel = renameFrom m k $  problemTel p }- -- | The permutation should permute @allHoles@ of the patterns to correspond to --   the abstract patterns in the problem. type Problem	 = Problem' (Permutation, [Arg Pattern])+type ProblemPart = Problem' () +data DotPatternInst = DPI A.Expr Term (Dom Type)+data AsBinding      = AsB Name Term Type++-- | State worked on during the main loop of checking a lhs.+data LHSState = LHSState+  { lhsProblem :: Problem+  , lhsSubst   :: S.Substitution+  , lhsDPI     :: [DotPatternInst]+  , lhsAsB     :: [AsBinding]+  }++instance Subst ProblemRest where+  applySubst rho p = p { restType = applySubst rho $ restType p }++instance Subst (Problem' p) where+  applySubst rho p = p { problemTel  = applySubst rho $ problemTel p+                       , problemRest = applySubst rho $ problemRest p }++instance Subst DotPatternInst where+  applySubst rho (DPI e v a) = uncurry (DPI e) $ applySubst rho (v,a)++instance Subst AsBinding where+  applySubst rho (AsB x v a) = uncurry (AsB x) $ applySubst rho (v, a)++instance PrettyTCM DotPatternInst where+  prettyTCM (DPI e v a) = sep+    [ prettyA e <+> text "="+    , nest 2 $ prettyTCM v <+> text ":"+    , nest 2 $ prettyTCM a+    ]++instance PrettyTCM AsBinding where+  prettyTCM (AsB x v a) =+    sep [ prettyTCM x <> text "@" <> parens (prettyTCM v)+        , nest 2 $ text ":" <+> prettyTCM a+        ]+ instance Error SplitError where   noMsg  = NothingToSplit   strMsg = SplitPanic +-- | 'ProblemRest' is a right dominant monoid.+--   @pr1 \`mappend\` pr2 = pr2@ unless @pr2 = mempty@, then it is @pr1@.+--   Basically, this means that the left 'ProblemRest' is discarded, so+--   use it wisely!+instance Monoid ProblemRest where+  mempty = ProblemRest [] typeDontCare+  mappend pr (ProblemRest [] _) = pr+  mappend _  pr                 = pr+ instance Monoid p => Monoid (Problem' p) where-  mempty = Problem [] mempty EmptyTel-  Problem ps1 qs1 tel1 `mappend` Problem ps2 qs2 tel2 =-    Problem (ps1 ++ ps2) (mappend qs1 qs2) (abstract tel1 tel2)+  mempty = Problem [] mempty EmptyTel mempty+  Problem ps1 qs1 tel1 pr1 `mappend` Problem ps2 qs2 tel2 pr2 =+    Problem (ps1 ++ ps2) (mappend qs1 qs2) (abstract tel1 tel2) (mappend pr1 pr2)
+ src/full/Agda/TypeChecking/Rules/LHS/ProblemRest.hs view
@@ -0,0 +1,129 @@+{-# LANGUAGE CPP, TupleSections #-}++module Agda.TypeChecking.Rules.LHS.ProblemRest where++import Control.Applicative++import Data.Monoid++import Agda.Syntax.Common+import Agda.Syntax.Position+import Agda.Syntax.Info+import Agda.Syntax.Internal+import qualified Agda.Syntax.Abstract as A++import Agda.TypeChecking.Monad+import Agda.TypeChecking.Pretty+import Agda.TypeChecking.Reduce+import Agda.TypeChecking.Telescope+import Agda.TypeChecking.Implicit+import Agda.TypeChecking.Substitute+import Agda.TypeChecking.Pretty++import Agda.TypeChecking.Rules.LHS.Problem+import Agda.TypeChecking.Rules.LHS.Implicit++import Agda.Utils.Size+import Agda.Utils.Permutation++#include "../../../undefined.h"+import Agda.Utils.Impossible+++-- MOVED from LHS:+-- | Rename the variables in a telescope using the names from a given pattern+useNamesFromPattern :: [NamedArg A.Pattern] -> Telescope -> Telescope+useNamesFromPattern ps = telFromList . zipWith ren (toPats ps ++ repeat dummy) . telToList+  where+    dummy = A.WildP __IMPOSSIBLE__+    ren (A.VarP x) (Dom NotHidden r (_, a)) = Dom NotHidden r (show x, a)+    ren A.PatternSynP{} _ = __IMPOSSIBLE__  -- ensure there are no syns left+    ren _ a = a+    toPats = map namedArg++-- | Are there any untyped user patterns left?+noProblemRest :: Problem -> Bool+noProblemRest (Problem _ _ _ (ProblemRest ps _)) = null ps++-- | Get the type of clause.  Only valid if 'noProblemRest'.+typeFromProblem :: Problem -> Type+typeFromProblem (Problem _ _ _ (ProblemRest _ a)) = a++-- | Construct an initial 'split' 'Problem' from user patterns.+problemFromPats :: [NamedArg A.Pattern] -- ^ The user patterns.+  -> Type            -- ^ The type the user patterns eliminate.+  -> TCM Problem     -- ^ The initial problem constructed from the user patterns.+problemFromPats ps a = do+  TelV tel0' b0 <- telView a+  -- For the initial problem, do not insert trailing implicits.+  -- This has the effect of not including trailing hidden domains in the problem telescope.+  -- In all later call to insertImplicitPatterns, we can then use ExpandLast.+  ps <- insertImplicitPatterns DontExpandLast ps tel0'+  -- unless (size tel0' >= size ps) $ typeError $ TooManyArgumentsInLHS a+  let tel0      = useNamesFromPattern ps tel0'+      (as, bs)  = splitAt (size ps) $ telToList tel0+      (ps1,ps2) = splitAt (size as) ps+      gamma     = telFromList as+      b         = telePi (telFromList bs) b0+      -- now (gamma -> b) = a and |gamma| = |ps1|+      pr        = ProblemRest ps2 b+      -- patterns ps2 eliminate type b++      -- internal patterns start as all variables+      ips      = map (argFromDom . fmap (VarP . fst)) as++      -- the initial problem for starting the splitting+      problem  = Problem ps1 (idP $ size ps1, ips) gamma pr+  reportSDoc "tc.lhs.problem" 10 $+    vcat [ text "checking lhs -- generated an initial split problem:"+	 , nest 2 $ vcat+	   [ text "ps    =" <+> fsep (map prettyA ps)+	   , text "a     =" <+> prettyTCM a+	   , text "a'    =" <+> prettyTCM (telePi tel0  b0)+	   , text "a''   =" <+> prettyTCM (telePi tel0' b0)+           , text "xs    =" <+> text (show $ map (fst . unDom) as)+	   , text "tel0  =" <+> prettyTCM tel0+	   , text "b0    =" <+> prettyTCM b0+	   , text "gamma =" <+> prettyTCM gamma+	   , text "b     =" <+> addCtxTel gamma (prettyTCM b)+	   ]+	 ]+  return problem++{-+todoProblemRest :: ProblemRest+todoProblemRest = mempty+-}++-- | Try to move patterns from the problem rest into the problem.+--   Possible if type of problem rest has been updated to a function type.+updateProblemRest_ :: Problem -> TCM (Nat, Problem)+updateProblemRest_ p@(Problem _ _ _ (ProblemRest [] _)) = return (0, p)+updateProblemRest_ p@(Problem ps0 (perm0@(Perm n0 is0), qs0) tel0 (ProblemRest ps a)) = do+  TelV tel' b0 <- telView a+  case tel' of+    EmptyTel -> return (0, p)  -- no progress+    ExtendTel{} -> do     -- a did reduce to a pi-type+      ps <- insertImplicitPatterns DontExpandLast ps tel'+      let tel       = useNamesFromPattern ps tel'+          (as, bs)  = splitAt (size ps) $ telToList tel+          (ps1,ps2) = splitAt (size as) ps+          tel1      = telFromList $ telToList tel0 ++ as+          b         = telePi (telFromList bs) b0+          pr        = ProblemRest ps2 b+          qs1       = map (argFromDom . fmap (VarP . fst)) as+          n         = size as+          perm1     = liftP n perm0 -- IS: Perm (n0 + n) $ is0 ++ [n0..n0+n-1]+      return $ (n,) $ Problem (ps0 ++ ps1) (perm1, raise n qs0 ++ qs1) tel1 pr++updateProblemRest :: LHSState -> TCM LHSState+updateProblemRest st@LHSState { lhsProblem = p } = do+  (n, p') <- updateProblemRest_ p+  if (n == 0) then return st else do+    let tau = raiseS n+    return $ LHSState+      { lhsProblem = p'+      , lhsSubst   = applySubst tau (lhsSubst st)+      , lhsDPI     = applySubst tau (lhsDPI st)+      , lhsAsB     = applySubst tau (lhsAsB st)+      }
src/full/Agda/TypeChecking/Rules/LHS/Split.hs view
@@ -4,7 +4,7 @@  import Control.Applicative import Control.Monad.Error-import Data.Monoid+import Data.Monoid (mempty, mappend) import Data.List import Data.Traversable hiding (mapM, sequence) @@ -25,7 +25,8 @@ import Agda.TypeChecking.Constraints import Agda.TypeChecking.Conversion import Agda.TypeChecking.Rules.LHS.Problem-import Agda.TypeChecking.Rules.Term+import Agda.TypeChecking.Rules.LHS.ProblemRest+-- import Agda.TypeChecking.Rules.Term import Agda.TypeChecking.Monad.Builtin import Agda.TypeChecking.Free import Agda.TypeChecking.Irrelevance@@ -56,10 +57,10 @@                         ++ "the literal to the corresponding constructor pattern, so "                         ++ "you probably don't want to do it this way."         | otherwise -> do-          Con z _ <- primZero-          Con s _ <- primSuc+          Con z _ <- ignoreSharing <$> primZero+          Con s _ <- ignoreSharing <$> primSuc           let zero  = A.ConP info (A.AmbQ [setRange r z]) []-              suc p = A.ConP info (A.AmbQ [setRange r s]) [defaultArg $ unnamed p]+              suc p = A.ConP info (A.AmbQ [setRange r s]) [defaultNamedArg p]               info  = A.PatRange r               p'    = foldr ($) zero $ genericReplicate n suc           return $ foldr (A.AsP info) p' xs@@ -68,7 +69,7 @@ -- | Split a problem at the first constructor of datatype type. Implicit --   patterns should have been inserted. splitProblem :: Problem -> TCM (Either SplitError SplitProblem)-splitProblem (Problem ps (perm, qs) tel) = do+splitProblem (Problem ps (perm, qs) tel pr) = do     reportS "tc.lhs.split" 20 $ "initiating splitting\n"     runErrorT $       splitP ps (permute perm $ zip [0..] $ allHoles qs) tel@@ -81,7 +82,7 @@     splitP (p : ps) ((i, q) : qs) tel0@(ExtendTel a tel) = do       let tryAgain = splitP (p : ps) ((i, q) : qs) tel0       p <- lift $ expandLitPattern p-      case asView $ namedThing $ unArg p of+      case asView $ namedArg p of          -- Case: literal pattern 	(xs, p@(A.LitP lit))  -> do@@ -90,45 +91,45 @@           -- not indexed.            -- Andreas, 2010-09-07 cannot split on irrelevant args-          when (unusableRelevance $ argRelevance a) $+          when (unusableRelevance $ domRelevance a) $             typeError $ SplitOnIrrelevant p a 	  b <- lift $ litType lit 	  ok <- lift $ do-	      noConstraints (equalType (unArg a) b)+	      noConstraints (equalType (unDom a) b) 	      return True 	    `catchError` \_ -> return False 	  if ok 	    then return $ 	      Split mempty 		    xs-		    (fmap (LitFocus lit q i) a)-		    (fmap (Problem ps ()) tel)+		    (argFromDom $ fmap (LitFocus lit q i) a)+		    (fmap (\ tel -> Problem ps () tel __IMPOSSIBLE__) tel) 	    else keepGoing          -- Case: constructor pattern 	(xs, p@(A.ConP _ (A.AmbQ cs) args)) -> do-	  a' <- liftTCM $ reduce $ unArg a-	  case unEl a' of--            -- Type is a meta and constructor is unambiguous,-            -- in this case try to instantiate the meta.-            MetaV{} | [c] <- cs -> do-              ok <- lift $ do-                Constructor{ conData = d } <- theDef <$> getConstInfo c-                dt            <- defType <$> getConstInfo d-                vs            <- newArgsMeta dt-                El _ (Sort s) <- reduce $ apply dt vs-                (True <$ noConstraints (equalType a' (El s $ Def d vs)))-                  `catchError` \_ -> return False-              if not ok then keepGoing else-                tryAgain+          let tryInstantiate a'+                | [c] <- cs = do+                    -- Type is blocked by a meta and constructor is unambiguous,+                    -- in this case try to instantiate the meta.+                  ok <- lift $ do+                    Constructor{ conData = d } <- theDef <$> getConstInfo c+                    dt     <- defType <$> getConstInfo d+                    vs     <- newArgsMeta dt+                    Sort s <- ignoreSharing . unEl <$> reduce (apply dt vs)+                    (True <$ noConstraints (equalType a' (El s $ Def d vs)))+                      `catchError` \_ -> return False+                  if ok then tryAgain else keepGoing+                | otherwise = keepGoing+          ifBlockedType (unDom a) (const tryInstantiate) $ \ a' -> do+	  case ignoreSharing $ unEl a' of              -- Subcase: split type is a Def 	    Def d vs	-> do 	      def <- liftTCM $ theDef <$> getConstInfo d               unless (defIsRecord def) $                 -- cannot split on irrelevant or non-strict things-                when (unusableRelevance $ argRelevance a) $ do+                when (unusableRelevance $ domRelevance a) $ do                   -- Andreas, 2011-10-04 unless allowed by option                   allowed <- liftTCM $ optExperimentalIrrelevance <$> pragmaOptions                   unless allowed $ typeError $ SplitOnIrrelevant p a@@ -140,7 +141,7 @@               case mp of                 Nothing -> keepGoing                 Just np ->-		  liftTCM $ traceCall (CheckPattern p EmptyTel (unArg a)) $ do  -- TODO: wrong telescope+		  liftTCM $ traceCall (CheckPattern p EmptyTel (unDom a)) $ do  -- TODO: wrong telescope                   -- Check that we construct something in the right datatype                   c <- do                       cs' <- mapM canonicalName cs@@ -168,50 +169,118 @@ 			 ]                    whenM (optWithoutK <$> pragmaOptions) $-                    wellFormedIndices pars ixs+                    wellFormedIndices a'  		  return $ Split mempty 				 xs-				 (fmap (Focus c args (getRange p) q i d pars ixs) a)-				 (fmap (Problem ps ()) tel)+				 (argFromDom $ fmap (Focus c args (getRange p) q i d pars ixs) a)+				 (fmap (\ tel -> Problem ps () tel __IMPOSSIBLE__) tel)             -- Subcase: split type is not a Def 	    _	-> keepGoing         -- Case: neither literal nor constructor pattern 	p -> keepGoing       where 	keepGoing = do-	  let p0 = Problem [p] () (ExtendTel a $ fmap (const EmptyTel) tel)+	  let p0 = Problem [p] () (ExtendTel a $ fmap (const EmptyTel) tel) mempty 	  Split p1 xs foc p2 <- underAbstraction a tel $ \tel -> splitP ps qs tel 	  return $ Split (mappend p0 p1) xs foc p2 --- | Checks that the indices are constructors (or literals) applied to--- distinct variables which do not occur free in the parameters.+-- | Takes a type, which must be a data or record type application,+-- and checks that the indices are constructors (or literals) applied+-- to distinct variables which do not occur free in the parameters.+-- For the purposes of this check parameters count as constructor+-- arguments; parameters are reconstructed from the given type.+--+-- Precondition: The type must be a data or record type application. -wellFormedIndices-  :: [Arg Term] -- ^ Parameters.-  -> [Arg Term] -- ^ Indices.-  -> TCM ()-wellFormedIndices pars ixs = do-  pars <- normalise pars-  ixs  <- normalise ixs-  vs   <- case constructorApplications ixs of-            Nothing -> typeError $ IndicesNotConstructorApplications ixs-            Just vs -> return vs+wellFormedIndices :: Type -> TCM ()+wellFormedIndices t = do+  t <- reduce t++  reportSDoc "tc.lhs.split.well-formed" 10 $+    fsep [ text "Checking if indices are well-formed:"+         , nest 2 $ prettyTCM t+         ]++  (pars, ixs) <- normalise =<< case ignoreSharing $ unEl t of+    Def d args -> do+      def       <- getConstInfo d+      typedArgs <- args `withTypesFrom` defType def++      let noPars = case theDef def of+            Datatype { dataPars = n } -> n+            Record   { recPars  = n } -> n+            _                         -> __IMPOSSIBLE__+          (pars, ixs) = genericSplitAt noPars typedArgs+      return (map fst pars, ixs)++    _ -> __IMPOSSIBLE__++  mvs <- constructorApplications ixs+  vs  <- case mvs of+           Nothing -> typeError $+                        IndicesNotConstructorApplications (map fst ixs)+           Just vs -> return vs+   unless (fastDistinct vs) $-    typeError $ IndexVariablesNotDistinct ixs-  case filter snd $ zip vs (map (`freeIn` pars) vs) of-    []          -> return ()-    (v , _) : _ -> typeError $ IndexFreeInParameter v pars+    typeError $ IndexVariablesNotDistinct vs (map fst ixs)++  case map fst $ filter snd $ zip vs (map (`freeIn` pars) vs) of+    [] -> return ()+    vs ->+      typeError $ IndicesFreeInParameters vs (map fst ixs) pars+   where   -- | If the term consists solely of constructors (or literals)-  -- applied to variables, then the variables are returned, and-  -- otherwise nothing.-  constructorApplication :: Term -> Maybe [Nat]-  constructorApplication (Var x [])   = Just [x]-  constructorApplication (Con c args) = constructorApplications args-  constructorApplication (Lit {})     = Just []-  constructorApplication _            = Nothing+  -- applied to variables (after parameter reconstruction), then the+  -- variables are returned, and otherwise nothing.+  constructorApplication :: Term+                         -> Type  -- ^ The term's type.+                         -> TCM (Maybe [Nat])+  constructorApplication (Var x [])      _ = return (Just [x])+  constructorApplication (Lit {})        _ = return (Just [])+  constructorApplication (Shared p)      t  = constructorApplication (derefPtr p) t+  constructorApplication (Con c conArgs) (El _ (Def d dataArgs)) = do+    conDef  <- getConstInfo c+    dataDef <- getConstInfo d -  constructorApplications :: [Arg Term] -> Maybe [Nat]-  constructorApplications args =-    concat <$> mapM (constructorApplication . unArg) args+    let noPars = case theDef dataDef of+          Datatype { dataPars = n } -> n+          Record   { recPars  = n } -> n+          _                         -> __IMPOSSIBLE__+        pars    = genericTake noPars dataArgs+        allArgs = pars ++ conArgs++    reportSDoc "tc.lhs.split.well-formed" 20 $+      fsep [ text "Reconstructed parameters:"+           , nest 2 $+               prettyTCM (Con c []) <+>+               text "(:" <+> prettyTCM (defType conDef) <> text ")" <+>+               text "<<" <+> prettyTCM pars <+> text ">>" <+>+               prettyTCM conArgs+           ]++    constructorApplications =<< allArgs `withTypesFrom` defType conDef++  constructorApplication _ _ = return Nothing++  constructorApplications :: [(Arg Term, Dom Type)] -> TCM (Maybe [Nat])+  constructorApplications args = do+    xs <- mapM (\(e, t) -> constructorApplication (unArg e) (ignoreSharingType $ unDom t))+               args+    return (concat <$> sequence xs)++-- | @args \`withTypesFrom\` t@ returns the arguments @args@ paired up+-- with their types, taken from @t@, which is assumed to be a @length+-- args@-ary pi.+--+-- Precondition: @t@ has to start with @length args@ pis.++withTypesFrom :: Args -> Type -> TCM [(Arg Term, Dom Type)]+[]           `withTypesFrom` _ = return []+(arg : args) `withTypesFrom` t = do+  t <- reduce t+  case ignoreSharing $ unEl t of+    Pi a b -> ((arg, a) :) <$>+              args `withTypesFrom` absApp b (unArg arg)+    _      -> __IMPOSSIBLE__
src/full/Agda/TypeChecking/Rules/LHS/Unify.hs view
@@ -15,7 +15,7 @@ import qualified Data.Map as Map import Data.List hiding (sort) -import Data.Generics (Typeable, Data)+import Data.Typeable (Typeable) import Data.Foldable (Foldable) import Data.Traversable (Traversable,traverse) @@ -32,6 +32,7 @@ import Agda.TypeChecking.Reduce import Agda.TypeChecking.Pretty import Agda.TypeChecking.Substitute hiding (Substitution)+import qualified Agda.TypeChecking.Substitute as S import Agda.TypeChecking.Telescope import Agda.TypeChecking.Free import Agda.TypeChecking.Records@@ -86,13 +87,7 @@ reportPostponing :: Unify () reportPostponing = tell Possibly -{- -- | Check whether unification proceeded without postponement.-listenResult :: Unify () -> Unify UnifyOutput-listenResult m = snd <$> listen m--}---- | Check whether unification proceeded without postponement. ifClean :: Unify () -> Unify a -> Unify a -> Unify a ifClean m t e = do   ok <- snd <$> listen m@@ -100,16 +95,6 @@     Definitely -> t     Possibly ->   e -{---- | Check whether unification proceeded without postponement.-ifClean :: Unify a -> (a -> Unify b) -> (a -> Unify b) -> Unify b-ifClean m t e = do-  (ok, a) <- listen m-  case ok of-    Definitely -> t a-    Possibly ->   e a--}- data Equality = Equal TypeHH Term Term type Sub = Map Nat Term @@ -134,17 +119,7 @@ constructorMismatchHH :: TypeHH -> Term -> Term -> Unify a constructorMismatchHH aHH = constructorMismatch (leftHH aHH)   -- do not report heterogenity-{--constructorMismatchHH (Hom a) u v = constructorMismatch a u v-constructorMismatchHH (Het a1 a2) u v = constructorMismatch a1 u v--} -{--instance MonadReader TCEnv Unify where-  ask           = U . lift  $ ask-  local k (U m) = U . lift . lift . lift $ local k m--}- instance MonadState TCState Unify where   get = U . lift . lift . lift . lift $ get   put = U . lift . lift . lift . lift . put@@ -153,13 +128,8 @@   liftTCM = U . lift . lift . lift . lift  instance Subst Equality where-  substs us	 (Equal a s t) = Equal (substs us a)	  (substs us s)	     (substs us t)-  substUnder n u (Equal a s t) = Equal (substUnder n u a) (substUnder n u s) (substUnder n u t)--{- UNUSED-getSub :: Unify Sub-getSub = U $ gets uniSub--}+  applySubst rho (Equal a s t) =+    Equal (applySubst rho a) (applySubst rho s) (applySubst rho t)  onSub :: (Sub -> a) -> Unify a onSub f = U $ gets $ f . uniSub@@ -187,20 +157,7 @@     if ok then return () else addEquality a u v checkEqualityHH aHH@(Het a1 a2) u v = -- reportPostponing -- enter "dirty" mode     addEqualityHH aHH u v -- postpone, enter "dirty" mode-{--checkEqualityHH (Het a1 a2) u v = noConstraints $ do-  equalType a1 a2-  equalTerm a1 u v--}-{--checkEqualityHH :: MonadTCM tcm => TypeHH -> Term -> Term -> tcm ()-checkEqualityHH aHH u v = do-  a  <- forceHom aHH-  cs <- equalTerm a u v-  if null cs then return () else addEquality a u v--} - -- | Check whether heterogeneous situation is really homogeneous. --   If not, give up. forceHom :: TypeHH -> TCM Type@@ -217,24 +174,6 @@   reportPostponing   U $ modify $ \s -> s { uniConstr = Equal aHH u v : uniConstr s } -{--addEquality :: Type -> Term -> Term -> Unify ()-addEquality a u v = do-  reportPostponing-  U $ modify $ \s -> s { uniConstr = Equal a u v : uniConstr s }--}--{--addEquality :: Type -> Term -> Term -> Unify ()-addEquality a u v = do-   p <- askPostpone-   case p of-     MayPostpone ->  do-       reportPostponing-       U $ modify $ \s -> s { uniConstr = Equal a u v : uniConstr s }-     MayNotPostpone -> checkEquality a u v--}- takeEqualities :: Unify [Equality] takeEqualities = U $ do   s <- get@@ -246,7 +185,7 @@ occursCheck :: Nat -> Term -> Type -> Unify () occursCheck i u a = do   let fv = freeVars u-      v  = Var i []+      v  = var i   case occurrence i fv of     -- Andreas, 2011-04-14     -- a strongly rigid recursive occurrences signals unsolvability@@ -265,13 +204,20 @@ (|->) :: Nat -> (Term, Type) -> Unify () i |-> (u, a) = do   occursCheck i u a-  liftTCM $ reportSDoc "tc.lhs.unify" 15 $ prettyTCM (Var i []) <+> text ":=" <+> prettyTCM u+  liftTCM $ reportSDoc "tc.lhs.unify" 15 $ prettyTCM (var i) <+> text ":=" <+> prettyTCM u   modSub $ Map.insert i (killRange u)+  -- Apply substitution to itself (issue 552)+  rho  <- onSub id+  rho' <- traverse ureduce rho+  modSub $ const rho' -makeSubstitution :: Sub -> [Term]-makeSubstitution sub = map val [0..]+makeSubstitution :: Sub -> S.Substitution+makeSubstitution sub+  | Map.null sub = idS+  | otherwise    = map val [0 .. highestIndex] ++# raiseS (highestIndex + 1)   where-    val i = maybe (Var i []) id $ Map.lookup i sub+    highestIndex = fst $ Map.findMax sub+    val i = maybe (var i) id $ Map.lookup i sub  -- | Apply the current substitution on a term and reduce to weak head normal form. class UReduce t where@@ -280,14 +226,14 @@ instance UReduce Term where   ureduce u = doEtaContractImplicit $ do     rho <- onSub makeSubstitution-    liftTCM $ etaContract =<< normalise (substs rho u)+    liftTCM $ etaContract =<< normalise (applySubst rho u) -- Andreas, 2011-06-22, fix related to issue 423 -- To make eta contraction work better, I switched reduce to normalise. -- I hope the performance penalty is not big (since we are dealing with -- l.h.s. terms only). -- A systematic solution would make unification type-directed and -- eta-insensitive...---   liftTCM $ etaContract =<< reduce (substs rho u)+--   liftTCM $ etaContract =<< reduce (applySubst rho u)  instance UReduce Type where   ureduce (El s t) = El s <$> ureduce t@@ -302,7 +248,7 @@  -- | Take a substitution σ and ensure that no variables from the domain appear --   in the targets. The context of the targets is not changed.---   TODO: can this be expressed using makeSubstitution and substs?+--   TODO: can this be expressed using makeSubstitution and applySubst? flattenSubstitution :: Substitution -> Substitution flattenSubstitution s = foldr instantiate s is   where@@ -312,12 +258,11 @@     instantiate :: Nat -> Substitution -> Substitution     instantiate i s = map (fmap $ inst i u) s       where-	Just u = s !! fromIntegral i+	Just u = s !! i      inst :: Nat -> Term -> Term -> Term-    inst i u v = substs us v-      where us = [var j | j <- [0..i - 1] ] ++ [u] ++ [var j | j <- [i + 1..] ]-	    var j = Var j []+    inst i u v = applySubst us v+      where us = [var j | j <- [0..i - 1] ] ++# u :# raiseS (i + 1)  data UnificationResult = Unifies Substitution | NoUnify Type Term Term | DontKnow TCErr @@ -325,7 +270,7 @@ data HomHet a   = Hom a    -- ^ homogeneous   | Het a a  -- ^ heterogeneous-  deriving (Typeable, Data, Show, Eq, Ord, Functor, Foldable, Traversable)+  deriving (Typeable, Show, Eq, Ord, Functor, Foldable, Traversable)  isHom :: HomHet a -> Bool isHom Hom{} = True@@ -343,13 +288,8 @@ rightHH (Hom a) = a rightHH (Het a1 a2) = a2 -instance (Raise a) => Raise (HomHet a) where-  raiseFrom n m  = fmap (raiseFrom n m)-  renameFrom n f = fmap (renameFrom n f)- instance (Subst a) => Subst (HomHet a) where-  substUnder n u = fmap (substUnder n u)-  substs us      = fmap (substs us)+  applySubst rho u = fmap (applySubst rho) u  instance (PrettyTCM a) => PrettyTCM (HomHet a) where   prettyTCM (Hom a) = prettyTCM a@@ -358,7 +298,7 @@ type TermHH    = HomHet Term type TypeHH    = HomHet Type --type FunViewHH = FunV TypeHH-type TelHH     = Tele (Arg TypeHH)+type TelHH     = Tele (Dom TypeHH) type TelViewHH = TelV TypeHH  absAppHH :: SubstHH t tHH => Abs t -> TermHH -> tHH@@ -405,6 +345,10 @@   substUnderHH n u = fmap $ substUnderHH n u   trivialHH = fmap trivialHH +instance SubstHH a b => SubstHH (Dom a) (Dom b) where+  substUnderHH n u = fmap $ substUnderHH n u+  trivialHH = fmap trivialHH+ instance SubstHH a b => SubstHH (Abs a) (Abs b) where   substUnderHH n u (Abs   x v) = Abs x $ substUnderHH (n + 1) u v   substUnderHH n u (NoAbs x v) = NoAbs x $ substUnderHH n u v@@ -452,7 +396,7 @@       Left (StronglyRigidOccurrence a u v)  -> return $ NoUnify a u v       Left (GenericUnifyException     err)  -> fail err       Right _                               -> do-        checkEqualities $ substs (makeSubstitution s) eqs+        checkEqualities $ applySubst (makeSubstitution s) eqs         let n = maximum $ (-1) : flex         return $ Unifies $ flattenSubstitution [ Map.lookup i s | i <- [0..n] ]   `catchError` \err -> return $ DontKnow err@@ -460,6 +404,7 @@     flexible i = i `elem` flex      flexibleTerm (Var i []) = flexible i+    flexibleTerm (Shared p) = flexibleTerm (derefPtr p)     flexibleTerm _          = False      {- Andreas, 2011-09-12@@ -501,7 +446,7 @@     unifyConArgs _ [] (_ : _) = __IMPOSSIBLE__     unifyConArgs _ []      [] = return ()     unifyConArgs EmptyTel _ _ = __IMPOSSIBLE__-    unifyConArgs tel0@(ExtendTel a@(Arg _ rel bHH) tel) us0@(arg@(Arg _ _ u) : us) vs0@(Arg _ _ v : vs) = do+    unifyConArgs tel0@(ExtendTel a@(Dom _ rel bHH) tel) us0@(arg@(Arg _ _ u) : us) vs0@(Arg _ _ v : vs) = do       liftTCM $ reportSDoc "tc.lhs.unify" 15 $ sep         [ text "unifyConArgs" 	-- , nest 2 $ parens (prettyTCM tel0)@@ -513,7 +458,7 @@         (text $ "tel0 = " ++ show tel0)  -      -- Andreas, Ulf, 2011-09-08 (AIM XVI)+      -- Andreas, Ulf, 2011-09-08 (AIM XIV)       -- in case of dependent function type, we cannot postpone       -- unification of u and v, otherwise us or vs might be ill-typed       -- skip irrelevant parts@@ -531,11 +476,6 @@       unifyConArgs (tel `absAppHH` uHH) us vs  -{--    unifyArgs :: Type -> [Arg Term] -> [Arg Term] -> Unify ()-    unifyArgs a = unifyArgsHH (Hom a)--}-     -- | Used for arguments of a 'Def', not 'Con'.     unifyArgs :: Type -> [Arg Term] -> [Arg Term] -> Unify ()     unifyArgs _ (_ : _) [] = __IMPOSSIBLE__@@ -549,21 +489,22 @@ 	, nest 2 $ prettyList $ map prettyTCM vs0         ]       a <- ureduce a  -- Q: reduce sufficient?-      case unEl a of+      case ignoreSharing $ unEl a of 	Pi b _  -> do           -- Andreas, Ulf, 2011-09-08 (AIM XVI)           -- in case of dependent function type, we cannot postpone           -- unification of u and v, otherwise us or vs might be ill-typed           let dep = dependent $ unEl a           -- skip irrelevant parts-	  unless (argRelevance b == Irrelevant) $+	  unless (domRelevance b == Irrelevant) $             (if dep then noPostponing else id) $-              unify (unArg b) u v+              unify (unDom b) u v           arg <- traverse ureduce arg 	  unifyArgs (a `piApply` [arg]) us vs 	_	  -> __IMPOSSIBLE__       where dependent (Pi _ NoAbs{}) = False             dependent (Pi b c)       = 0 `relevantIn` absBody c+            dependent (Shared p)     = dependent (derefPtr p)             dependent _              = False      -- | Check using conversion check.@@ -604,9 +545,10 @@     unifyHH aHH u v = do       u <- liftTCM . constructorForm =<< ureduce u       v <- liftTCM . constructorForm =<< ureduce v+      aHH <- ureduce aHH       liftTCM $ reportSDoc "tc.lhs.unify" 15 $ 	sep [ text "unifyHH"-	    , nest 2 $ parens $ prettyTCM u+	    , nest 2 $ (parens $ prettyTCM u) <+> text "=?=" 	    , nest 2 $ parens $ prettyTCM v 	    , nest 2 $ text ":" <+> prettyTCM aHH 	    ]@@ -614,7 +556,7 @@       isSizeName <- liftTCM isSizeNameTest        -- check whether types have the same shape-      (aHH, sh) <- shapeViewHH =<< ureduce aHH+      (aHH, sh) <- shapeViewHH aHH       case sh of         ElseSh  -> checkEqualityHH aHH u v -- not a type or not same types @@ -641,18 +583,18 @@ 	    , nest 2 $ prettyTCM v <> if flexibleTerm v then text " (flexible)" else empty 	    , nest 2 $ text ":" <+> prettyTCM aHH 	    ]-      case (u, v) of+      case (ignoreSharing u, ignoreSharing v) of         -- Ulf, 2011-06-19         -- We don't want to worry about levels here.-        (Level l, v) -> do+        (Level l, _) -> do             u <- liftTCM $ reallyUnLevelView l             unifyAtomHH aHH u v-        (u, Level l) -> do+        (_, Level l) -> do             v <- liftTCM $ reallyUnLevelView l             unifyAtomHH aHH u v 	(Var i us, Var j vs) | i == j  -> checkEqualityHH aHH u v-	(Var i [], v) | homogeneous && flexible i -> i |->> (v, a)-	(u, Var j []) | homogeneous && flexible j -> j |->> (u, a)+	(Var i [], _) | homogeneous && flexible i -> i |->> (v, a)+	(_, Var j []) | homogeneous && flexible j -> j |->> (u, a) 	(Con c us, Con c' vs)           | c == c' -> do               r <- ureduce =<< liftTCM (dataOrRecordTypeHH c aHH)@@ -684,7 +626,7 @@          -- We can instantiate metas if the other term is inert (constructor application)         -- Andreas, 2011-09-13: test/succeed/IndexInference needs this feature.-        (MetaV m us, v) | homogeneous -> do+        (MetaV m us, _) | homogeneous -> do             ok <- liftTCM $ instMeta a m us v             liftTCM $ reportSDoc "tc.lhs.unify" 40 $               vcat [ fsep [ text "inst meta", text $ if ok then "(ok)" else "(not ok)" ]@@ -692,7 +634,7 @@                    ]             if ok then unify a u v                   else addEquality a u v-        (u, MetaV m vs) | homogeneous -> do+        (_, MetaV m vs) | homogeneous -> do             ok <- liftTCM $ instMeta a m vs u             liftTCM $ reportSDoc "tc.lhs.unify" 40 $               vcat [ fsep [ text "inst meta", text $ if ok then "(ok)" else "(not ok)" ]@@ -728,104 +670,10 @@      unify :: Type -> Term -> Term -> Unify ()     unify a = unifyHH (Hom a)-{--    unify :: Type -> Term -> Term -> Unify ()-    unify a u v = do-      u <- constructorForm =<< ureduce u-      v <- constructorForm =<< ureduce v-      reportSDoc "tc.lhs.unify" 15 $-	sep [ text "unify"-	    , nest 2 $ parens $ prettyTCM u-	    , nest 2 $ parens $ prettyTCM v-	    , nest 2 $ text ":" <+> prettyTCM a-	    ]-      isSize <- isSizeType a-      if isSize then unifySizes u v-                else unifyAtom a u v--}      unifyAtom :: Type -> Term -> Term -> Unify ()     unifyAtom a = unifyAtomHH (Hom a) -{--    unifyAtom :: Type -> Term -> Term -> Unify ()-    unifyAtom a u v = do-      reportSDoc "tc.lhs.unify" 15 $-	sep [ text "unifyAtom"-	    , nest 2 $ prettyTCM u <> if flexibleTerm u then text " (flexible)" else empty-            , nest 2 $ text "=?="-	    , nest 2 $ prettyTCM v <> if flexibleTerm v then text " (flexible)" else empty-	    , nest 2 $ text ":" <+> prettyTCM a-	    ]-      case (u, v) of-        -- Ulf, 2011-06-19-        -- We don't want to worry about levels here.-        (Level l, v) -> do-            u <- liftTCM $ reallyUnLevelView l-            unifyAtom a u v-        (u, Level l) -> do-            v <- liftTCM $ reallyUnLevelView l-            unifyAtom a u v-        -- Andreas, 2011-05-30-        -- Force equality now rather than postponing it with addEquality-	(Var i us, Var j vs) | i == j  -> checkEquality a u v-	(Var i [], v) | flexible i -> i |->> (v, a)-	(u, Var j []) | flexible j -> j |->> (u, a)-	(Con c us, Con c' vs)-          | c == c' -> do-              a' <- dataOrRecordType c a-              unifyArgs a' us vs-          | otherwise -> constructorMismatch a u v-        -- Definitions are ok as long as they can't reduce (i.e. datatypes/axioms)-	(Def d us, Def d' vs)-          | d == d' -> do-              -- d must be a data, record or axiom-              def <- getConstInfo d-              let ok = case theDef def of-                    Datatype{} -> True-                    Record{}   -> True-                    Axiom{}    -> True-                    _          -> False-              inj <- optInjectiveTypeConstructors <$> pragmaOptions-              if inj && ok-                then unifyArgs (defType def) us vs-                else addEquality a u v-{- Andreas: checkEquality breaks Data.Vec.Equality-   we need an injectivity test for data types, Vec A n is injective!-                else checkEquality a u v-                -- Andreas: force equality now instead of postponing-                -- We do not want to end up in a heterogeneous situation,-                -- where u and v have different types--}-          -- Andreas, 2011-05-30: if heads disagree, abort-          -- but do not raise "mismatch" because otherwise type constructors-          -- would be distinct-          | otherwise -> typeError $ UnequalTerms CmpEq u v a-        (Lit l1, Lit l2)-          | l1 == l2  -> return ()-          | otherwise -> constructorMismatch a u v--        -- We can instantiate metas if the other term is inert (constructor application)-        (MetaV m us, v) -> do-            ok <- liftTCM $ instMeta a m us v-            reportSDoc "tc.lhs.unify" 40 $-              vcat [ fsep [ text "inst meta", text $ if ok then "(ok)" else "(not ok)" ]-                   , nest 2 $ sep [ prettyTCM u, text ":=", prettyTCM =<< normalise u ]-                   ]-            if ok then unify a u v-                  else addEquality a u v-        (u, MetaV m vs) -> do-            ok <- liftTCM $ instMeta a m vs u-            reportSDoc "tc.lhs.unify" 40 $-              vcat [ fsep [ text "inst meta", text $ if ok then "(ok)" else "(not ok)" ]-                   , nest 2 $ sep [ prettyTCM v, text ":=", prettyTCM =<< normalise v ]-                   ]-            if ok then unify a u v-                  else addEquality a u v-        -- Andreas, 2011-05-30: If I put checkEquality below, then Issue81 fails-        -- because there are definitions blocked by flexibles that need postponement-	_  -> addEquality a u v--}     -- The contexts are transient when unifying, so we should just instantiate to     -- constructor heads and generate fresh metas for the arguments. Beware of     -- constructors that aren't fully applied.@@ -841,14 +689,14 @@         Just (v', b, vs) -> do             margs <- do               -- The new metas should have the same dependencies as the original meta-              mi <- getMetaInfo <$> lookupMeta m+              mv <- lookupMeta m                -- Only generate metas for the arguments v' is actually applied to               -- (in case of partial application)               TelV tel0 _ <- telView b               let tel = telFromList $ take (length vs) $ telToList tel0                   b'  = telePi tel (sort Prop)-              withMetaInfo mi $ do+              withMetaInfo' mv $ do                 tel <- getContextTelescope                 -- important: create the meta in the same environment as the original meta                 newArgsMetaCtx b' tel us@@ -858,13 +706,8 @@      inertApplication :: Type -> Term -> TCM (Maybe (Term, Type, Args))     inertApplication a v =-      case v of+      case ignoreSharing v of         Con c vs -> fmap (\ b -> (Con c [], b, vs)) <$> dataOrRecordType c a-{--        Con c vs -> do-          b <- dataOrRecordType c a-          return $ Just (Con c [], b, vs)--}         Def d vs -> do           def <- getConstInfo d           let ans = Just (Def d [], defType def, vs)@@ -896,7 +739,10 @@            --   data/record parameters dataOrRecordType' c a = do   -- The telescope ends with a datatype or a record.-  TelV _ (El _ (Def d args)) <- telView a+  (d, args) <- do+    TelV _ (El _ def) <- telView a+    let Def d args = ignoreSharing def+    return (d, args)   def <- theDef <$> getConstInfo d   r <- case def of     Datatype{dataPars = n} -> Just . ((,) n) . defType <$> getConstInfo c@@ -934,61 +780,22 @@     _ -> return Nothing  -{--dataOrRecordType :: MonadTCM tcm-  => QName -- ^ Constructor name.-  -> Type  -- ^ Type of constructor application (must end in data/record).-  -> tcm (Maybe Type) -- ^ Type of constructor, applied to pars.-dataOrRecordType c a = fmap snd <$> dataOrRecordType' c a--dataOrRecordType' :: MonadTCM tcm-  => QName -- ^ Constructor name.-  -> Type  -- ^ Type of constructor application (must end in data/record).-  -> tcm (Maybe (QName, -- ^ Name of data/record type.-                 Type))  -- ^ Type of constructor, applied to pars.-dataOrRecordType' c a = do-  -- The telescope ends with a datatype or a record.-  TelV _ (El _ (Def d args)) <- telView a-  def <- theDef <$> getConstInfo d-  r <- case def of-    Datatype{dataPars = n} -> Just . ((,) n) . defType <$> getConstInfo c-    Record  {recPars  = n} -> Just . ((,) n) <$> getRecordConstructorType d-    _		           -> return Nothing-  return $ fmap (\ (n, a') -> (d, a' `apply` genericTake n args)) r---- | Heterogeneous situation.---   @a1@ and @a2@ need to end in same datatype/record.-dataOrRecordTypeHH :: MonadTCM tcm-  => QName      -- ^ Constructor name.-  -> TypeHH     -- ^ Type(s) of constructor application (must end in same data/record).-  -> tcm (Maybe TypeHH) -- ^ Type of constructor, instantiated possibly heterogeneously to parameters.-dataOrRecordTypeHH c (Hom a) = fmap Hom <$> dataOrRecordType c a-dataOrRecordTypeHH c (Het a1 a2) = do-  r1 <- dataOrRecordType' c a1-  r2 <- dataOrRecordType' c a2  -- b2 may have different parameters than b1!-  return $ case (r1, r2) of-    (Just (d1, b1), Just (d2, b2)) | d1 == d2 -> Just $ Het b1 b2-    _ -> Nothing--}- -- | Views an expression (pair) as type shape.  Fails if not same shape. data ShapeView a-  = PiSh (Arg a) (Abs a)-  | FunSh (Arg a) a+  = PiSh (Dom a) (Abs a)+  | FunSh (Dom a) a   | DefSh QName   -- ^ data/record   | VarSh Nat     -- ^ neutral type   | LitSh Literal -- ^ built-in type   | SortSh   | MetaSh        -- ^ some meta   | ElseSh        -- ^ not a type or not definitely same shape-  deriving (Typeable, Data, Show, Eq, Ord, Functor)+  deriving (Typeable, Show, Eq, Ord, Functor)  -- | Return the type and its shape.  Expects input in (u)reduced form. shapeView :: Type -> Unify (Type, ShapeView Type) shapeView t = do---  t <- liftTCM $ reduce t  -- DO NOT REDUCE!--- --  t <- ureduce t  -- BUG!! substitutes bound variables in telescope!-  return . (t,) $ case unEl t of+  return . (t,) $ case ignoreSharing $ unEl t of     Pi a (NoAbs _ b) -> FunSh a b     Pi a (Abs x b) -> PiSh a (Abs x b)     Def d vs       -> DefSh d@@ -1008,13 +815,13 @@   (a2, sh2) <- shapeView a2   return . (Het a1 a2,) $ case (sh1, sh2) of -    (PiSh (Arg h1 r1 a1) b1, PiSh (Arg h2 r2 a2) b2)+    (PiSh (Dom h1 r1 a1) b1, PiSh (Dom h2 r2 a2) b2)       | h1 == h2 ->-      PiSh (Arg h1 (min r1 r2) (Het a1 a2)) (Abs (absName b1) (Het (absBody b1) (absBody b2)))+      PiSh (Dom h1 (min r1 r2) (Het a1 a2)) (Abs (absName b1) (Het (absBody b1) (absBody b2))) -    (FunSh (Arg h1 r1 a1) b1, FunSh (Arg h2 r2 a2) b2)+    (FunSh (Dom h1 r1 a1) b1, FunSh (Dom h2 r2 a2) b2)       | h1 == h2 ->-      FunSh (Arg h1 (min r1 r2) (Het a1 a2)) (Het b1 b2)+      FunSh (Dom h1 (min r1 r2) (Het a1 a2)) (Het b1 b2)      (DefSh d1, DefSh d2) | d1 == d2 -> DefSh d1     (VarSh x1, VarSh x2) | x1 == x2 -> VarSh x1
src/full/Agda/TypeChecking/Rules/Record.hs view
@@ -13,7 +13,9 @@ import qualified Agda.Syntax.Info as Info  import Agda.TypeChecking.Monad+import Agda.TypeChecking.Monad.Builtin ( primIrrAxiom ) import Agda.TypeChecking.Substitute+import Agda.TypeChecking.Telescope import Agda.TypeChecking.Reduce import Agda.TypeChecking.Pretty import Agda.TypeChecking.Polarity@@ -26,7 +28,11 @@  import Agda.Utils.Size import Agda.Utils.Permutation+import Agda.Utils.Monad +import Agda.Interaction.Options++ #include "../../undefined.h" import Agda.Utils.Impossible @@ -46,9 +52,9 @@ -- --     [@fields@]  List of field signatures. ---checkRecDef :: Info.DefInfo -> QName -> Maybe A.QName -> --Maybe A.Constructor ->-               [A.LamBinding] -> A.Expr -> [A.Constructor] -> TCM ()-checkRecDef i name con ps contel fields =+checkRecDef :: Info.DefInfo -> QName -> Maybe Induction -> Maybe A.QName ->+               [A.LamBinding] -> A.Expr -> [A.Field] -> TCM ()+checkRecDef i name ind con ps contel fields =   traceCall (CheckRecDef (getRange i) (qnameName name) ps fields) $ do     reportSDoc "tc.rec" 10 $ vcat       [ text "checking record def" <+> prettyTCM name@@ -74,33 +80,18 @@           -- A record is irrelevant if all of its fields are.           -- In this case, the associated module parameter will be irrelevant.           -- See issue 392.-          recordRelevance = minimum $ Irrelevant : (map argRelevance $ telToList ftel)+          recordRelevance = minimum $ Irrelevant : (map domRelevance $ telToList ftel)        -- Compute correct type of constructor        -- t = tel -> t0 where t0 must be a sort s       t0' <- normalise t0-      s <- case unEl t0' of+      s <- case ignoreSharing $ unEl t0' of 	Sort s	-> return s 	_	-> typeError $ ShouldBeASort t0       gamma <- getContextTelescope-      let m               = qnameToMName name-          -- make record parameters hidden and non-stricts irrelevant-	  htel		  = map hideAndRelParams $ telToList tel-          -- record type (name applied to parameters)-	  rect		  = El s $ Def name $ reverse-			    [ Arg h r (Var i [])-			    | (i, Arg h r _) <- zip [0..] $ reverse $ telToList gamma-			    ]-	  telh' h	  = telFromList $ htel ++ [Arg h recordRelevance ("r", rect)]-	  tel'		  = telh' NotHidden-	  telIFS	  = telh' Instance-          extWithRH h ret = underAbstraction (Arg h recordRelevance rect) (Abs "" ()) $ \_ -> ret-          extWithR        = extWithRH NotHidden-          ext     (Arg h r (x, t)) = addCtx x (Arg h r t)-{- UNUSED-          extHide (Arg h r (x, t)) = addCtx x (Arg Hidden r t)--}+      -- record type (name applied to parameters)+      let rect = El s $ Def name $ teleArgs gamma        -- Put in @rect@ as correct target of constructor type.       -- Andreas, 2011-05-10 use telePi_ instead of telePi to preserve@@ -123,7 +114,9 @@ 	  getName (A.ScopedDecl _ [f]) = getName f 	  getName _		       = [] -      addConstant name $ Defn Relevant name t0 (defaultDisplayForm name) 0 noCompiledRep+          indCo = maybe Inductive id ind -- default is 'Inductive' for backwards compatibility but should maybe be 'Coinductive'++      addConstant name $ Defn Relevant name t0 [] [] (defaultDisplayForm name) 0 noCompiledRep 		       $ Record { recPars           = 0                                 , recClause         = Nothing                                 , recCon            = conName@@ -133,24 +126,30 @@                                 , recTel            = ftel 				, recAbstr          = Info.defAbstract i                                 , recEtaEquality    = True+                                , recInduction      = indCo+                                -- determined by positivity checker:+                                , recRecursive      = False+{-                                 , recPolarity       = []                                 , recArgOccurrences = []+-}+                                , recMutual         = []                                 }        -- Add record constructor to signature       -- Andreas, 2011-05-19 moved this here, it was below the record module       --   creation       addConstant conName $-        Defn Relevant conName contype (defaultDisplayForm conName) 0 noCompiledRep $+        Defn Relevant conName contype [] [] (defaultDisplayForm conName) 0 noCompiledRep $              Constructor { conPars   = 0                          , conSrcCon = conName                          , conData   = name                          , conAbstr  = Info.defAbstract conInfo-                         , conInd    = Inductive+                         , conInd    = indCo                          }        -- Check that the fields fit inside the sort-      let dummy = Var 0 []  -- We're only interested in the sort here+      let dummy = var 0  -- We're only interested in the sort here       telePi ftel (El s dummy) `fitsIn` s        {- Andreas, 2011-04-27 WRONG because field types are checked again@@ -161,9 +160,18 @@       -}        -- make record parameters hidden-      ctx <- (reverse . map hide . take (size tel)) <$> getContext+      ctx <- (reverse . map (mapDomHiding $ const Hidden) . take (size tel)) <$> getContext -      escapeContext (size tel) $ flip (foldr ext) ctx $ extWithR $ do+      let -- name of record module+          m    = qnameToMName name+          -- make record parameters hidden and non-stricts irrelevant+	  htel = map hideAndRelParams $ telToList tel+	  tel' = telFromList $ htel ++ [Dom NotHidden recordRelevance ("r", rect)]+          ext (Dom h r (x, t)) = addCtx x (Dom h r t)++      escapeContext (size tel) $ flip (foldr ext) ctx $+       -- the record variable has the empty name by intention, see issue 208+       underAbstraction (Dom NotHidden recordRelevance rect) (Abs "" ()) $ \_ -> do 	reportSDoc "tc.rec.def" 10 $ sep 	  [ text "record section:" 	  , nest 2 $ sep@@ -177,13 +185,13 @@ 	addSection m (size tel')          -- Check the types of the fields-        -- ftel <- checkRecordFields m name tel s [] (size fields) fields         withCurrentModule m $           checkRecordProjections m name conName tel' (raise 1 ftel) fields        -- Andreas, 2011-05-19 here was the code "Add record constr..." -      computePolarity name+        -- Andreas 2012-02-13: postpone polarity computation until after positivity check+        -- computePolarity name        return () @@ -195,7 +203,7 @@      [@q@    ]  name of the record constructor -    [@tel@  ]  parameters+    [@tel@  ]  parameters and record variable r ("self")      [@ftel@ ]  telescope of fields @@ -214,21 +222,21 @@     checkProjs ftel1 ftel2 (A.ScopedDecl scope fs' : fs) =       setScope scope >> checkProjs ftel1 ftel2 (fs' ++ fs) -    checkProjs ftel1 (ExtendTel _ ftel2) (A.Field info x (Arg h rel t) : fs) = do-      -- check the type (in the context of the telescope)-      -- the previous fields will be free in+    checkProjs ftel1 (ExtendTel (Dom h rel t) ftel2) (A.Field info x _ : fs) = do+      -- Andreas, 2012-06-07:+      -- Issue 387: It is wrong to just type check field types again+      -- because then meta variables are created again.+      -- Instead, we take the field type t from the field telescope.       reportSDoc "tc.rec.proj" 5 $ sep-	[ text "checking projection"+	[ text "checking projection" <+> text (show x) 	, nest 2 $ vcat 	  [ text "top   =" <+> (inContext [] . prettyTCM =<< getContextTelescope)+          , text "tel   =" <+> prettyTCM tel 	  , text "ftel1 =" <+> prettyTCM ftel1-	  , text "ftel2 =" <+> addCtxTel ftel1 (underAbstraction_ ftel2 prettyTCM) 	  , text "t     =" <+> prettyTCM t+	  , text "ftel2 =" <+> addCtxTel ftel1 (underAbstraction_ ftel2 prettyTCM) 	  ] 	]-      -- Andreas, 2011-04-27 work on rhs of ':'-      -- WRONG: t <- workOnTypes $ isType_ t-      t <- isType_ t        -- Andreas, 2010-09-09 The following comments are misleading, TODO: update       -- in fact, tel includes the variable of record type as last one@@ -249,11 +257,20 @@       -- The type of the projection function should be       --  {tel} -> (r : R Δ) -> t       -- where Δ = Γ, tel is the current context--       let finalt   = telePi tel t 	  projname = qualify m $ qnameName x+          projcall = Def projname [defaultArg $ var 0]+          -- the recursive call+          recurse  = checkProjs (abstract ftel1 $ ExtendTel (Dom h rel t)+                                 $ Abs (show $ qnameName projname) EmptyTel)+                                (ftel2 `absApp` projcall) fs +      reportSDoc "tc.rec.proj" 25 $ nest 2 $ text "finalt=" <+> prettyTCM finalt++      -- Andreas, 2012-02-20 do not add irrelevant projections if+      -- disabled by --no-irrelevant-projections+      ifM (return (rel == Irrelevant) `and2M` do not . optIrrelevantProjections <$> pragmaOptions) recurse $ do+       reportSDoc "tc.rec.proj" 10 $ sep 	[ text "adding projection" 	, nest 2 $ prettyTCM projname <+> text ":" <+> inContext [] (prettyTCM finalt)@@ -264,23 +281,42 @@       -- Ulf, 2011-08-22: actually we're dropping the parameters from the       -- projection functions so the body is now       --  P.xi (r _ .. x .. _) = x+      -- Andreas, 2012-01-12: irrelevant projections get translated to+      --  P.xi (r _ .. x .. _) = irrAxiom {level of t} {t} x+      -- PROBLEM: because of dropped parameters, cannot refer to t +      -- compute body modification for irrelevant projections+      bodyMod <- do+        case rel of+          Relevant   -> return $ \ n x -> x -- no modification+          Irrelevant -> return $ \ n x -> DontCare x++{- 2012-04-02: DontCare instead of irrAxiom+          Irrelevant -> do+            irrAxiom <- primIrrAxiom+            let sortToLevel (Type l) = l+                sortToLevel _        = Max [ClosedLevel 0] -- something random here, we don't care a lot+                levelOfT = Level $ sortToLevel $ getSort t+            return $ \ n x -> let -- mkArg t = Arg Hidden Relevant $ raise n t+                                  -- ERR: Variables of t not in Scope!+                                  mkArg t = Arg Hidden Relevant $ Sort Prop+                              in  apply irrAxiom [mkArg levelOfT, mkArg (unEl t), Arg NotHidden Irrelevant x]+-}+          _          -> __IMPOSSIBLE__+       let -- Andreas, 2010-09-09: comment for existing code           -- split the telescope into parameters (ptel) and the type or the record           -- (rt) which should be  R ptel           (ptel,[rt]) = splitAt (size tel - 1) $ telToList tel 	  conp	 = defaultArg-		 $ ConP q (Just (fmap snd rt))-                   $ zipWith3 Arg-                              (map argHiding (telToList ftel))-                              (map argRelevance (telToList ftel))-			      [ VarP "x" | _ <- [1..size ftel] ]+		 $ ConP q (Just (argFromDom $ fmap snd rt))+                   [ Arg h r (VarP "x") | Dom h r _ <- telToList ftel ] 	  nobind 0 = id 	  nobind n = Bind . Abs "_" . nobind (n - 1) 	  body	 = nobind (size ftel1) 		 $ Bind . Abs "x" 		 $ nobind (size ftel2)-		 $ Body $ Var (size ftel2) []+		 $ Body $ bodyMod (size ftel) $ Var (size ftel2) []           cltel  = ftel 	  clause = Clause { clauseRange = getRange info                           , clauseTel   = killRange cltel@@ -289,11 +325,21 @@                           , clauseBody  = body                           } +      reportSDoc "tc.rec.proj" 20 $ sep+	[ text "adding projection"+	, nest 2 $ prettyTCM projname <+> text (show clause)+	]+      reportSDoc "tc.rec.proj" 10 $ sep+	[ text "adding projection"+	, nest 2 $ prettyTCM projname <+> text (show (clausePats clause)) <+> text "=" <+>+                     inContext [] (addCtxTel ftel (prettyTCM (clauseBody clause)))+	]+             -- Record patterns should /not/ be translated when the             -- projection functions are defined. Record pattern             -- translation is defined in terms of projection             -- functions.-      cc <- compileClauses False [clause]+      cc <- compileClauses Nothing [clause]        reportSDoc "tc.cc" 10 $ do         sep [ text "compiled clauses of " <+> prettyTCM projname@@ -301,24 +347,28 @@             ]        escapeContext (size tel) $ do-	addConstant projname $ Defn rel projname (killRange finalt) (defaultDisplayForm projname) 0 noCompiledRep+	addConstant projname $ Defn rel projname (killRange finalt) [] [StrictPos] (defaultDisplayForm projname) 0 noCompiledRep           $ Function { funClauses        = [clause]                      , funCompiled       = cc                      , funDelayed        = NotDelayed                      , funInv            = NotInjective                      , funAbstr          = ConcreteDef+{-                      , funPolarity       = []-                     , funArgOccurrences = [Negative]+                     , funArgOccurrences = [StrictPos]+-}+                     , funMutual         = []                      , funProjection     = Just (r, size ptel + 1)                        -- name of the record type and                        -- index of the record argument (in the type), start counting with 1                      , funStatic         = False+                     , funCopy           = False+                     , funTerminates     = Just True                      }         computePolarity projname -      checkProjs (abstract ftel1 $ ExtendTel (Arg h rel t)-                                 $ Abs (show $ qnameName projname) EmptyTel-                 ) (absBody ftel2) fs+      recurse+     checkProjs ftel1 ftel2 (d : fs) = do       checkDecl d       checkProjs ftel1 ftel2 fs
src/full/Agda/TypeChecking/Rules/Term.hs view
@@ -1,4 +1,4 @@-{-# LANGUAGE CPP, PatternGuards #-}+{-# LANGUAGE CPP, PatternGuards, TupleSections #-}  module Agda.TypeChecking.Rules.Term where @@ -9,10 +9,9 @@ import Control.Monad.Error import Data.Maybe import Data.List hiding (sort)-import qualified Agda.Utils.IO.Locale as LocIO import qualified Data.Map as Map import qualified Data.Set as Set-import Data.Traversable (traverse)+import Data.Traversable (traverse,sequenceA)  import Agda.Interaction.Options @@ -26,7 +25,6 @@ import Agda.Syntax.Concrete.Pretty import Agda.Syntax.Fixity import Agda.Syntax.Internal-import Agda.Syntax.Internal.Generic import Agda.Syntax.Position import Agda.Syntax.Literal import Agda.Syntax.Abstract.Views@@ -40,10 +38,13 @@ import Agda.TypeChecking.MetaVars import Agda.TypeChecking.Pretty import Agda.TypeChecking.Records+import Agda.TypeChecking.RecordPatterns import Agda.TypeChecking.Conversion+import Agda.TypeChecking.Implicit (implicitArgs)+import Agda.TypeChecking.InstanceArguments import Agda.TypeChecking.Primitive import Agda.TypeChecking.Constraints-import Agda.TypeChecking.Free+import Agda.TypeChecking.Free hiding (Occurrence(..)) import Agda.TypeChecking.Telescope import Agda.TypeChecking.Datatypes import Agda.TypeChecking.Irrelevance@@ -52,10 +53,12 @@ import Agda.TypeChecking.CompiledClause import Agda.TypeChecking.Level import {-# SOURCE #-} Agda.TypeChecking.Rules.Builtin.Coinduction+import Agda.TypeChecking.Rules.LHS (checkLeftHandSide)  import Agda.Utils.Fresh import Agda.Utils.Tuple import Agda.Utils.Permutation+import Agda.Utils.List (zipWithTails)  import {-# SOURCE #-} Agda.TypeChecking.Empty (isEmptyType) import {-# SOURCE #-} Agda.TypeChecking.Rules.Decl (checkSectionApplication)@@ -81,12 +84,12 @@ -- | Check that an expression is a type without knowing the sort. isType_ :: A.Expr -> TCM Type isType_ e =-  traceCall (IsType_ e) $-  case e of-    A.Fun i a b -> do-      a <- traverse isType_ a+  traceCall (IsType_ e) $ sharedType <$>+  case unScope e of+    A.Fun i (Arg h r t) b -> do+      a <- Dom h r <$> isType_ t       b <- isType_ b-      return $ El (sLub (getSort $ unArg a) (getSort b)) (Pi a (NoAbs "_" b))+      return $ El (sLub (getSort $ unDom a) (getSort b)) (Pi a (NoAbs "_" b))     A.Pi _ tel e -> do       checkTelescope_ tel $ \tel -> do         t   <- instantiateFull =<< isType_ e@@ -115,9 +118,9 @@ isTypeEqualTo e t = case e of   A.ScopedExpr _ e -> isTypeEqualTo e t   A.Underscore i | A.metaNumber i == Nothing -> return t-  e -> do+  e -> workOnTypes $ do     t' <- isType e (getSort t)-    t' <$ leqType_ t t'+    t' <$ leqType t t'  leqType_ :: Type -> Type -> TCM () leqType_ t t' = workOnTypes $ leqType t t'@@ -150,35 +153,7 @@ -- * Telescopes --------------------------------------------------------------------------- -{- UNUSED -- | Type check a telescope. Binds the variables defined by the telescope.-checkTelescope :: A.Telescope -> Sort -> (Telescope -> TCM a) -> TCM a-checkTelescope [] s ret = ret EmptyTel-checkTelescope (b : tel) s ret =-    checkTypedBindings b s $ \tel1 ->-    checkTelescope tel s   $ \tel2 ->-	ret $ abstract tel1 tel2---- | Check a typed binding and extends the context with the bound variables.---   The telescope passed to the continuation is valid in the original context.-checkTypedBindings :: A.TypedBindings -> Sort -> (Telescope -> TCM a) -> TCM a-checkTypedBindings (A.TypedBindings i (Arg h rel b)) s ret =-    checkTypedBinding h rel s b $ \bs ->-    ret $ foldr (\(x,t) -> ExtendTel (Arg h rel t) . Abs x) EmptyTel bs--checkTypedBinding :: Hiding -> Relevance -> Sort -> A.TypedBinding -> ([(String,Type)] -> TCM a) -> TCM a-checkTypedBinding h rel s (A.TBind i xs e) ret = do-    t <- isType e s-    addCtxs xs (Arg h rel t) $ ret $ mkTel xs t-    where-	mkTel [] t     = []-	mkTel (x:xs) t = (show $ nameConcrete x,t) : mkTel xs (raise 1 t)-checkTypedBinding h rel s (A.TNoBind e) ret = do-    t <- isType e s-    ret [("_",t)]--}---- | Type check a telescope. Binds the variables defined by the telescope. checkTelescope_ :: A.Telescope -> (Telescope -> TCM a) -> TCM a checkTelescope_ [] ret = ret EmptyTel checkTelescope_ (b : tel) ret =@@ -201,7 +176,7 @@ checkTypedBindings :: LamOrPi -> A.TypedBindings -> (Telescope -> TCM a) -> TCM a checkTypedBindings lamOrPi (A.TypedBindings i (Arg h rel b)) ret =     checkTypedBinding lamOrPi h rel b $ \bs ->-    ret $ foldr (\(x,t) -> ExtendTel (Arg h rel t) . Abs x) EmptyTel bs+    ret $ foldr (\(x,t) -> ExtendTel (Dom h rel t) . Abs x) EmptyTel bs  checkTypedBinding :: LamOrPi -> Hiding -> Relevance -> A.TypedBinding -> ([(String,Type)] -> TCM a) -> TCM a checkTypedBinding lamOrPi h rel (A.TBind i xs e) ret = do@@ -210,7 +185,7 @@     -- 2011-10-04 if flag --experimental-irrelevance is set     allowed <- optExperimentalIrrelevance <$> pragmaOptions     t <- modEnv lamOrPi allowed $ isType_ e-    addCtxs xs (Arg h (modRel lamOrPi allowed rel) t) $ ret $ mkTel xs t+    addCtxs xs (Dom h (modRel lamOrPi allowed rel) t) $ ret $ mkTel xs t     where         -- if we are checking a typed lambda, we resurrect before we check the         -- types, but do not modify the new context entries@@ -230,8 +205,9 @@ checkLambda :: Arg A.TypedBinding -> A.Expr -> Type -> TCM Term checkLambda (Arg _ _ A.TNoBind{}) _ _ = __IMPOSSIBLE__ checkLambda (Arg h r (A.TBind _ xs typ)) body target = do-  TelV tel btyp <- telViewUpTo (length xs) target-  if size tel < size xs || length xs /= 1+  let numbinds = length xs+  TelV tel btyp <- telViewUpTo numbinds target+  if size tel < size xs || numbinds /= 1     then dontUseTargetType     else useTargetType tel btyp   where@@ -240,7 +216,7 @@       verboseS "tc.term.lambda" 5 $ tick "lambda-no-target-type"        -- First check that argsT is a valid type-      argsT <- workOnTypes $ Arg h r <$> isType_ typ+      argsT <- workOnTypes $ Dom h r <$> isType_ typ        -- In order to have as much type information as possible when checking       -- body, we first unify (xs : argsT) → ?t₁ with the target type. If this@@ -248,30 +224,37 @@       -- fresh problem for the check.       t1 <- addCtxs xs argsT $ workOnTypes newTypeMeta_       let tel = telFromList $ mkTel xs argsT-      pid <- newProblem_ $ leqType (telePi tel t1) target--      -- Now check body : ?t₁-      v <- addCtxs xs argsT $ checkExpr body t1--      -- Block on the type comparison-      blockTermOnProblem target (teleLam tel v) pid+      -- Do not coerce hidden lambdas+      if (h /= NotHidden) then do+        pid <- newProblem_ $ leqType (telePi tel t1) target+        -- Now check body : ?t₁+        v <- addCtxs xs argsT $ checkExpr body t1+        -- Block on the type comparison+        blockTermOnProblem target (teleLam tel v) pid+       else do+        -- Now check body : ?t₁+        v <- addCtxs xs argsT $ checkExpr body t1+        -- Block on the type comparison+        coerce (teleLam tel v) (telePi tel t1) target -    useTargetType tel@(ExtendTel arg (Abs _ EmptyTel)) btyp = do+    useTargetType tel@(ExtendTel arg (Abs y EmptyTel)) btyp = do         verboseS "tc.term.lambda" 5 $ tick "lambda-with-target-type"-        unless (argHiding    arg == h) $ typeError $ WrongHidingInLambda target+        unless (domHiding    arg == h) $ typeError $ WrongHidingInLambda target         -- Andreas, 2011-10-01 ignore relevance in lambda if not explicitly given-        let r' = argRelevance arg -- relevance of function type+        let r' = domRelevance arg -- relevance of function type         when (r == Irrelevant && r' /= r) $ typeError $ WrongIrrelevanceInLambda target --        unless (argRelevance arg == r) $ typeError $ WrongIrrelevanceInLambda target         -- We only need to block the final term on the argument type         -- comparison. The body will be blocked if necessary. We still want to         -- compare the argument types first, so we spawn a new problem for that         -- check.-        (pid, argT) <- newProblem $ isTypeEqualTo typ (unArg arg)-        v <- addCtx x (Arg h r' argT) $ checkExpr body btyp+        (pid, argT) <- newProblem $ isTypeEqualTo typ (unDom arg)+        v <- add x y (Dom h r' argT) $ checkExpr body btyp         blockTermOnProblem target (Lam h $ Abs (show $ nameConcrete x) v) pid       where         [x] = xs+        add x y | C.isNoName (nameConcrete x) = addCtxString y+                | otherwise                   = addCtx x     useTargetType _ _ = __IMPOSSIBLE__  @@ -286,17 +269,10 @@ checkLiteral :: Literal -> Type -> TCM Term checkLiteral lit t = do   t' <- litType lit-  blockTerm t $ Lit lit <$ leqType_ t' t+  coerce (Lit lit) t' t -litType :: Literal -> TCM Type-litType l = case l of-    LitInt _ _	  -> el <$> primNat-    LitFloat _ _  -> el <$> primFloat-    LitChar _ _   -> el <$> primChar-    LitString _ _ -> el <$> primString-    LitQName _ _  -> el <$> primQName-  where-    el t = El (mkType 0) t+-- moved to TypeChecking.Monad.Builtin to avoid import cycles:+-- litType :: Literal -> TCM Type  --------------------------------------------------------------------------- -- * Terms@@ -305,7 +281,7 @@ -- TODO: move somewhere suitable reduceCon :: QName -> TCM QName reduceCon c = do-  Con c [] <- constructorForm =<< reduce (Con c [])+  Con c [] <- ignoreSharing <$> (constructorForm =<< reduce (Con c []))   return c  -- | @checkArguments' exph r args t0 t e k@ tries @checkArguments exph args t0 t@.@@ -315,10 +291,10 @@ -- -- Checks @e := ((_ : t0) args) : t@. checkArguments' ::-  ExpandHidden -> Range -> [NamedArg A.Expr] -> Type -> Type -> A.Expr ->+  ExpandHidden -> ExpandInstances -> Range -> [NamedArg A.Expr] -> Type -> Type -> A.Expr ->   (Args -> Type -> TCM Term) -> TCM Term-checkArguments' exph r args t0 t e k = do-  z <- runErrorT $ checkArguments exph r args t0 t+checkArguments' exph expIFS r args t0 t e k = do+  z <- runErrorT $ checkArguments exph expIFS r args t0 t   case z of     Right (vs, t1) -> k vs t1       -- vs = evaluated args@@ -333,8 +309,8 @@ -- | Type check an expression. checkExpr :: A.Expr -> Type -> TCM Term checkExpr e t =-    verboseBracket "tc.term.expr.top" 5 "checkExpr" $-    traceCall (CheckExpr e t) $ localScope $ do+  verboseBracket "tc.term.expr.top" 5 "checkExpr" $+  traceCall (CheckExpr e t) $ localScope $ shared <$> do     reportSDoc "tc.term.expr.top" 15 $         text "Checking" <+> sep 	  [ fsep [ prettyTCM e, text ":", prettyTCM t ]@@ -352,9 +328,10 @@         unScope e                      = e      e <- scopedExpr e+     case e of 	-- Insert hidden lambda if appropriate-	_   | Pi (Arg h rel _) _ <- unEl t+	_   | Pi (Dom h rel _) _ <- ignoreSharing $ unEl t             , not (hiddenLambdaOrHole h e)             , h /= NotHidden                          -> do 		x <- freshName r (argName t)@@ -374,12 +351,12 @@ 		hiddenLambdaOrHole _ (A.QuestionMark _)				       = True 		hiddenLambdaOrHole _ _						       = False -                hiddenLHS (A.Clause (A.LHS _ _ (a : _) _) _ _) = elem (argHiding a) [Hidden, Instance]+                hiddenLHS (A.Clause (A.LHS _ (A.LHSHead _ (a : _)) _) _ _) = elem (argHiding a) [Hidden, Instance]                 hiddenLHS _ = False          -- a meta variable without arguments: type check directly for efficiency 	A.QuestionMark i -> checkMeta newQuestionMark t i-	A.Underscore i   -> checkMeta newValueMeta t i+	A.Underscore i   -> checkMeta (newValueMeta RunMetaOccursCheck) t i  	A.WithApp _ e es -> typeError $ NotImplemented "type checking of with application" @@ -398,7 +375,7 @@             reportSDoc "tc.univ.poly" 10 $               text "checking Set " <+> prettyTCM n <+>               text "against" <+> prettyTCM t-            blockTerm t $ Sort (Type n) <$ leqType_ (sort $ sSuc $ Type n) t+            coerce (Sort $ Type n) (sort $ sSuc $ Type n) t          A.App i q (Arg NotHidden r e)           | A.Quote _ <- unScope q -> do@@ -409,13 +386,13 @@               quoted _                  = typeError $ GenericError $ "quote: not a defined name"           x <- quoted (namedThing e)           ty <- qNameType-          blockTerm t $ quoteName x <$ leqType_ ty t+          coerce (quoteName x) ty t            | A.QuoteTerm _ <- unScope q ->              do (et, _) <- inferExpr (namedThing e)                 q <- quoteTerm =<< normalise et                 ty <- el primAgdaTerm-                blockTerm t $ q <$ leqType_ ty t+                coerce q ty t  	  | A.Unquote _ <- unScope q -> 	     do e1 <- checkExpr (namedThing e) =<< el primAgdaTerm@@ -424,19 +401,16 @@         A.Quote _ -> typeError $ GenericError "quote must be applied to a defined name"         A.QuoteTerm _ -> typeError $ GenericError "quoteTerm must be applied to a term"         A.Unquote _ -> typeError $ GenericError "unquote must be applied to a term"-         A.AbsurdLam i h -> do-          t <- reduceB =<< instantiateFull t-          case t of-            Blocked{}                 -> postponeTypeCheckingProblem_ e $ ignoreBlocking t-            NotBlocked (El _ MetaV{}) -> postponeTypeCheckingProblem_ e $ ignoreBlocking t-            NotBlocked t' -> case unEl t' of-              Pi (Arg h' _ a) _-                | h == h' && not (null $ foldTerm metas a) ->-                    postponeTypeCheckingProblem e (ignoreBlocking t) $-                      null . foldTerm metas <$> instantiateFull a+          t <- instantiateFull t+          ifBlockedType t (\ m t' -> postponeTypeCheckingProblem_ e t') $ \ t' -> do+            case ignoreSharing $ unEl t' of+              Pi dom@(Dom h' r a) _+                | h == h' && not (null $ allMetas a) ->+                    postponeTypeCheckingProblem e t' $+                      null . allMetas <$> instantiateFull a                 | h == h' -> blockTerm t' $ do-                  isEmptyType a+                  isEmptyType (getRange i) a                   -- Add helper function                   top <- currentModule                   let name = "absurd"@@ -448,92 +422,75 @@                     [ text "Adding absurd function" <+> prettyTCM rel <> prettyTCM aux                     , nest 2 $ text "of type" <+> prettyTCM t'                     ]-                  addConstant aux $ Defn rel aux t' (defaultDisplayForm aux) 0 noCompiledRep-                                  $ Function-                                    { funClauses        =-                                        [Clause { clauseRange = getRange e-                                                , clauseTel   = EmptyTel-                                                , clausePerm  = Perm 0 []-                                                , clausePats  = [Arg h Relevant $ VarP "()"]-                                                , clauseBody  = NoBody-                                                }-                                        ]-                                    , funCompiled       = Fail-                                    , funDelayed        = NotDelayed-                                    , funInv            = NotInjective-                                    , funAbstr          = ConcreteDef-                                    , funPolarity       = [Covariant]-                                    , funArgOccurrences = [Unused]-                                    , funProjection     = Nothing-                                    , funStatic         = False-                                    }-                  return (Def aux [])+                  addConstant aux+                    $ Defn rel aux t' [Nonvariant] [Unused] (defaultDisplayForm aux) 0 noCompiledRep+                    $ Function+                      { funClauses        =+                          [Clause+                            { clauseRange = getRange e+                            , clauseTel   = EmptyTel   -- telFromList [fmap ("()",) dom]+                            , clausePerm  = Perm 1 []  -- Perm 1 [0]+                            , clausePats  = [Arg h r $ VarP "()"]+                            , clauseBody  = Bind $ NoAbs "()" NoBody+                            }+                          ]+                      , funCompiled       = Fail+                      , funDelayed        = NotDelayed+                      , funInv            = NotInjective+                      , funAbstr          = ConcreteDef+{-+                      , funPolarity       = [Nonvariant] -- WAS: [Covariant]+                      , funArgOccurrences = [Unused]+-}+                      , funMutual         = []+                      , funProjection     = Nothing+                      , funStatic         = False+                      , funCopy           = False+                      , funTerminates     = Just True+                      }+                  -- Andreas 2012-01-30: since aux is lifted to toplevel+                  -- it needs to be applied to the current telescope (issue 557)+                  tel <- getContextTelescope+                  return $ Def aux $ teleArgs tel+                  -- WAS: return (Def aux [])                 | otherwise -> typeError $ WrongHidingInLambda t'               _ -> typeError $ ShouldBePi t'-          where-            metas (MetaV m _) = [m]-            metas _           = []++{- OLD         A.ExtendedLam i di qname cs -> do              t <- reduceB =<< instantiateFull t+             let isMeta t = case ignoreSharing $ unEl t of { MetaV{} -> True; _ -> False }              case t of                Blocked{}                 -> postponeTypeCheckingProblem_ e $ ignoreBlocking t-               NotBlocked (El _ MetaV{}) -> postponeTypeCheckingProblem_ e $ ignoreBlocking t+               NotBlocked t' | isMeta t' -> postponeTypeCheckingProblem_ e $ ignoreBlocking t                NotBlocked t -> do-                 j   <- currentMutualBlock-                 rel <- asks envRelevance-                 addConstant qname (Defn rel qname t (defaultDisplayForm qname) j noCompiledRep Axiom)-                 reportSDoc "tc.term.exlam" 50 $ text "extended lambda's implementation \"" <> prettyTCM qname <>-                                                 text "\" has type: " $$ prettyTCM t -- <+>---                                                 text " where clauses: " <+> text (show cs)-                 abstract (A.defAbstract di) $ checkFunDef' t rel NotDelayed di qname cs-                 tel <- getContextTelescope-                 addExtLambdaTele qname (counthidden tel , countnothidden tel)-                 reduce $ (Def qname [] `apply` (mkArgs tel))+-}+        A.ExtendedLam i di qname cs -> do+           t <- instantiateFull t+           ifBlockedType t (\ m t' -> postponeTypeCheckingProblem_ e t') $ \ t -> do+             j   <- currentOrFreshMutualBlock+             rel <- asks envRelevance+             addConstant qname $+               Defn rel qname t [] [] (defaultDisplayForm qname) j noCompiledRep Axiom+             reportSDoc "tc.term.exlam" 50 $+               text "extended lambda's implementation \"" <> prettyTCM qname <>+               text "\" has type: " $$ prettyTCM t -- <+>+--               text " where clauses: " <+> text (show cs)+             abstract (A.defAbstract di) $ checkFunDef' t rel NotDelayed di qname cs+             args     <- getContextArgs+             top      <- currentModule+             freevars <- getSecFreeVars top+             let argsNoParam = genericDrop freevars args -- don't count module parameters+             let (hid, notHid) = partition ((Hidden ==) . argHiding) argsNoParam+             addExtLambdaTele qname (length hid, length notHid)+             reduce $ (Def qname [] `apply` args)           where 	    -- Concrete definitions cannot use information about abstract things. 	    abstract ConcreteDef = inConcreteMode 	    abstract AbstractDef = inAbstractMode-            mkArgs :: Telescope -> Args-            mkArgs tel = map arg [n - 1, n - 2..0]-              where-                n     = size tel-                arg i = defaultArg (Var i []) -            metas (MetaV m _) = [m]-            metas _           = []--            counthidden :: Telescope -> Int-            counthidden t = length $ filter (\ (Arg h r a) -> h == Hidden ) $ teleArgs t--            countnothidden :: Telescope -> Int-            countnothidden t = length $ filter (\ (Arg h r a) -> h == NotHidden ) $ teleArgs t---{- Andreas, 2011-04-27 DOES NOT WORK-   -- a telescope is not for type checking abstract syn--	A.Lam i (A.DomainFull b) e -> do-            -- check the types, get the telescope with unchanged relevance-	    (tel, t1, cs) <- workOnTypes $ checkTypedBindings_ b $ \tel -> do-	       t1 <- newTypeMeta_-               cs <- escapeContext (size tel) $ leqType (telePi tel t1) t-               return (tel, t1, cs)-            -- check the body under the unchanged telescope-            v <- addCtxTel tel $ do teleLam tel <$> checkExpr e t1-	    blockTerm t v (return cs)--} 	A.Lam i (A.DomainFull (A.TypedBindings _ b)) e -> checkLambda b e t -        -- 	A.Lam i (A.DomainFull b) e -> do-        -- 	    (v, cs) <- checkTypedBindings LamNotPi b $ \tel -> do-        --         (t1, cs) <- workOnTypes $ do-        -- 	          t1 <- newTypeMeta_-        --           cs <- escapeContext (size tel) $ leqType (telePi tel t1) t-        --           return (t1, cs)-        --         v <- checkExpr e t1-        --         return (teleLam tel v, cs)-        -- 	    blockTerm t v (return cs)- 	A.Lam i (A.DomainFree h rel x) e0 -> checkExpr (A.Lam i (domainFree h rel x) e0) t  	A.Lit lit    -> checkLiteral lit t@@ -549,23 +506,23 @@                    , nest 2 $ text "t   =" <+> prettyTCM t'                    , nest 2 $ text "cxt =" <+> (prettyTCM =<< getContextTelescope)                    ]-	    blockTerm t $ unEl t' <$ leqType_ (sort s) t+	    coerce (unEl t') (sort s) t 	A.Fun _ (Arg h r a) b -> do 	    a' <- isType_ a 	    b' <- isType_ b 	    s <- reduce $ getSort a' `sLub` getSort b'-	    blockTerm t $ Pi (Arg h r a') (NoAbs "_" b') <$ leqType_ (sort s) t+	    coerce (Pi (Dom h r a') (NoAbs "_" b')) (sort s) t 	A.Set _ n    -> do           n <- ifM typeInType (return 0) (return n)-	  blockTerm t $ Sort (mkType n) <$ leqType_ (sort $ mkType $ n + 1) t+	  coerce (Sort $ mkType n) (sort $ mkType $ n + 1) t 	A.Prop _     -> do           typeError $ GenericError "Prop is no longer supported"           -- s <- ifM typeInType (return $ mkType 0) (return Prop)-	  -- blockTerm t (Sort Prop) $ leqType_ (sort $ mkType 1) t+	  -- coerce (Sort Prop) (sort $ mkType 1) t  	A.Rec _ fs  -> do 	  t <- reduce t-	  case unEl t of+	  case ignoreSharing $ unEl t of 	    Def r vs  -> do 	      axs    <- getRecordFieldNames r               let xs = map unArg axs@@ -575,9 +532,9 @@               let arg x e =                     case [ a | a <- axs, unArg a == x ] of                       [a] -> unnamed e <$ a-                      _   -> defaultArg $ unnamed e -- we only end up here if the field names are bad-              let meta = A.Underscore $ A.MetaInfo (getRange e) scope Nothing-                  missingExplicits = [ (unArg a, [unnamed meta <$ a])+                      _   -> defaultNamedArg e -- we only end up here if the field names are bad+              let meta x = A.Underscore $ A.MetaInfo (getRange e) scope Nothing (show x)+                  missingExplicits = [ (unArg a, [unnamed . meta <$> a])                                      | a <- axs, argHiding a == NotHidden                                      , notElem (unArg a) (map fst fs) ]               -- In es omitted explicit fields are replaced by underscores@@ -605,13 +562,16 @@                   def <- getConstInfo r                   vs  <- newArgsMeta (defType def)                   let target = piApply (defType def) vs-                      s      = case unEl target of+                      s      = case ignoreSharing $ unEl target of                                  Level l -> Type l                                  Sort s  -> s                                  _       -> __IMPOSSIBLE__                       inferred = El s $ Def r vs                   v <- checkExpr e inferred-                  blockTerm t $ v <$ leqType_ t inferred+                  coerce v inferred t+                  -- Andreas 2012-04-21: OLD CODE, WRONG DIRECTION, I GUESS:+                  -- blockTerm t $ v <$ leqType_ t inferred+                   -- If there are more than one possible record we postpone                 _:_:_ -> do                   reportSDoc "tc.term.expr.rec" 10 $ sep@@ -622,7 +582,7 @@ 	    _         -> typeError $ ShouldBeRecordType t          A.RecUpdate ei recexpr fs -> do-          case unEl t of+          case ignoreSharing $ unEl t of             Def r vs  -> do               rec <- checkExpr recexpr t               name <- freshNoName (getRange recexpr)@@ -636,21 +596,24 @@                 checkExpr (A.Rec ei [ (x, e) | (x, Just e) <- zip xs es' ]) t             MetaV _ _ -> do               inferred <- inferExpr recexpr >>= reduce . snd-              case unEl inferred of+              case ignoreSharing $ unEl inferred of                 MetaV _ _ -> postponeTypeCheckingProblem_ e t                 _         -> do                   v <- checkExpr e inferred-                  blockTerm t $ v <$ leqType_ t inferred+                  coerce v inferred t             _         -> typeError $ ShouldBeRecordType t           where             replaceFields :: Name -> A.ExprInfo -> Arg A.QName -> Maybe A.Expr -> Maybe A.Expr-            replaceFields n ei (Arg NotHidden _ p) Nothing  = Just $ A.App ei (A.Def p) $ defaultArg (unnamed $ A.Var n)+            replaceFields n ei (Arg NotHidden _ p) Nothing  = Just $ A.App ei (A.Def p) $ defaultNamedArg $ A.Var n             replaceFields _ _  (Arg _         _ _) Nothing  = Nothing             replaceFields _ _  _                   (Just e) = Just $ e -	A.DontCare e -> -- can happen in the context of with functions-          checkExpr e t-{- Andreas, 2011-10-03 why do I get an internal error for Issue337?+	A.DontCare e -> -- resurrect vars+          ifM ((Irrelevant ==) <$> asks envRelevance)+            (DontCare <$> do applyRelevanceToContext Irrelevant $ checkExpr e t)+            (internalError "DontCare may only appear in irrelevant contexts")+{- STALE?:+   Andreas, 2011-10-03 why do I get an internal error for Issue337?                         -- except that should be fixed now (issue 337)                         __IMPOSSIBLE__ -}@@ -658,17 +621,14 @@          e0@(A.QuoteGoal _ x e) -> do           t' <- etaContract =<< normalise t-          let metas = foldTerm (\v -> case v of-                                       MetaV m _ -> [m]-                                       _         -> []-                               ) t'+          let metas = allMetas t'           case metas of-            _:_ -> postponeTypeCheckingProblem e0 t' $ and <$> mapM isInstantiatedMeta metas+            _:_ -> postponeTypeCheckingProblem e0 t' $ andM $ map isInstantiatedMeta metas             []  -> do               quoted <- quoteTerm (unEl t')               tmType <- agdaTermType               (v, ty) <- addLetBinding Relevant x quoted tmType (inferExpr e)-              blockTerm t' $ v <$ leqType_ ty t'+              blockTerm t' $ coerce v ty t'          A.ETel _   -> __IMPOSSIBLE__ @@ -694,14 +654,14 @@                 -- Type error                 let badCon t = typeError $ DoesNotConstructAnElementOf                                             (fst $ head cs) t-+{- OLD CODE                 -- Lets look at the target type at this point                 let getCon = do                       TelV _ t1 <- telView t                       t1 <- reduceB $ unEl t1                       reportSDoc "tc.check.term.con" 40 $ nest 2 $                         text "target type: " <+> prettyTCM t1-                      case t1 of+                      case ignoreSharing <$> t1 of                         NotBlocked (Def d _) -> do                           let dataOrRec = case [ c | (d', c) <- dcs, d == d' ] of                                 [c] -> do@@ -719,7 +679,23 @@                         NotBlocked (MetaV _ _)  -> return Nothing                         Blocked{} -> return Nothing                         _ -> badCon (ignoreBlocking t1)-                let unblock = isJust <$> getCon+-}+                -- Lets look at the target type at this point+                let getCon = do+                     TelV _ t1 <- telView t+                     reportSDoc "tc.check.term.con" 40 $ nest 2 $+                       text "target type: " <+> prettyTCM t1+                     ifBlocked (unEl t1) (\ m t -> return Nothing) $ \ t' ->+                       (isDataOrRecord t' >>=) $ maybe (badCon t') $ \ d ->+                           case [ c | (d', c) <- dcs, d == d' ] of+                                [c] -> do+                                  reportSLn "tc.check.term" 40 $ "  decided on: " ++ show c+                                  return (Just c)+                                []  -> badCon (Def d [])+                                cs  -> typeError $ GenericError $+                                        "Can't resolve overloaded constructors targeting the same datatype (" ++ show d +++                                        "): " ++ unwords (map show cs)+                let unblock = isJust <$> getCon -- to unblock, call getCon later again                 mc <- getCon                 case mc of                   Just c  -> checkConstructorApplication e t c args@@ -728,6 +704,18 @@               -- Subcase: non-ambiguous constructor             | Application (A.Con (AmbQ [c])) args <- appView e ->                 checkConstructorApplication e t c args++              -- Subcase: pattern synonym+            | Application (A.PatternSyn n) args <- appView e -> do+                (ns, p) <- lookupPatternSyn n+                -- Expand the pattern synonym by substituting for+                -- the arguments we have got and lambda-lifting+                -- over the ones we haven't.+                let (zs, ns', as) = zipWithTails (\n a -> (n, namedThing (unArg a))) ns args+                    p'            = A.patternToExpr $ setRange (getRange n) p+                    e'            = A.lambdaLiftExpr ns' (A.substExpr zs p') `A.app` as+                checkExpr e' t+               -- Subcase: defined symbol or variable.             | Application hd args <- appView e ->                 checkHeadApplication e t hd args@@ -736,19 +724,26 @@   A.DomainFull $ A.TypedBindings r $ Arg h rel $ A.TBind r [x] $ A.Underscore info   where     r = getRange x-    info = A.MetaInfo{ A.metaRange = r, A.metaScope = emptyScopeInfo, A.metaNumber = Nothing }+    info = A.MetaInfo+      { A.metaRange          = r+      , A.metaScope          = emptyScopeInfo+      , A.metaNumber         = Nothing+      , A.metaNameSuggestion = show x+      }  checkMeta :: (Type -> TCM Term) -> Type -> A.MetaInfo -> TCM Term checkMeta newMeta t i = do   case A.metaNumber i of     Nothing -> do       setScope (A.metaScope i)-      newMeta t+      v <- newMeta t+      setValueMetaName v (A.metaNameSuggestion i)+      return v     -- Rechecking an existing metavariable     Just n -> do       let v = MetaV (MetaId n) []       t' <- jMetaType . mvJudgement <$> lookupMeta (MetaId n)-      blockTerm t $ v <$ leqType t' t+      coerce v t' t  inferMeta :: (Type -> TCM Term) -> A.MetaInfo -> TCM (Args -> Term, Type) inferMeta newMeta i =@@ -768,9 +763,9 @@ inferHead :: A.Expr -> TCM (Args -> Term, Type) inferHead (A.Var x) = do -- traceCall (InferVar x) $ do   (u, a) <- getVarInfo x-  when (unusableRelevance $ argRelevance a) $+  when (unusableRelevance $ domRelevance a) $     typeError $ VariableIsIrrelevant x-  return (apply u, unArg a)+  return (apply u, unDom a) inferHead (A.Def x) = do   proj <- isProjection x   case proj of@@ -805,13 +800,13 @@   Constructor{conPars = n} <- theDef <$> (instantiateDef =<< getConstInfo c)    verboseS "tc.term.con" 7 $ do-    liftIO $ LocIO.putStrLn $ unwords [show c, "has", show n, "parameters."]+    reportSLn "" 0 $ unwords [show c, "has", show n, "parameters."]    -- So when applying the constructor throw away the parameters.   return (apply u . genericDrop n, a) inferHead (A.Con _) = __IMPOSSIBLE__  -- inferHead will only be called on unambiguous constructors inferHead (A.QuestionMark i)  = inferMeta newQuestionMark i-inferHead (A.Underscore i) = inferMeta newValueMeta i+inferHead (A.Underscore i) = inferMeta (newValueMeta RunMetaOccursCheck) i inferHead e = do (term, t) <- inferExpr e                  return (apply term, t) @@ -833,27 +828,49 @@       ds <- mapM prettyTCM vs       dx <- prettyTCM x       dt <- prettyTCM $ defType d-      liftIO $ LocIO.putStrLn $ "inferred def " ++ unwords (show dx : map show ds) ++ " : " ++ show dt+      reportSLn "" 0 $ "inferred def " ++ unwords (show dx : map show ds) ++ " : " ++ show dt     return (mkTerm x vs, defType d)  -- | Check the type of a constructor application. This is easier than --   a general application since the implicit arguments can be inserted --   without looking at the arguments to the constructor. checkConstructorApplication :: A.Expr -> Type -> QName -> [NamedArg A.Expr] -> TCM Term-checkConstructorApplication org t c args-  | hiddenArg = fallback-  | otherwise = do+checkConstructorApplication org t c args = do+  reportSDoc "tc.term.con" 50 $ vcat+    [ text "entering checkConstructorApplication"+    , nest 2 $ vcat+      [ text "org  =" <+> prettyTCM org+      , text "t    =" <+> prettyTCM t+      , text "c    =" <+> prettyTCM c+      , text "args =" <+> prettyTCM args+    ] ]+  let (args', paramsGiven) = checkForParams args+  if paramsGiven then fallback else do+    reportSDoc "tc.term.con" 50 $ text "checkConstructorApplication: no parameters explicitly supplied, continuing..."     cdef  <- getConstInfo c     let Constructor{conData = d} = theDef cdef-    case unEl t of -- Only fully applied constructors get special treatment-      Def d' vs | d' == d -> do-        def <- theDef <$> getConstInfo d-        let npars = case def of-                      Datatype{ dataPars = n } -> Just n-                      Record{ recPars = n }    -> Just n-                      _                        -> Nothing-        flip (maybe fallback) npars $ \n -> do-        let ps    = genericTake n vs+    reportSDoc "tc.term.con" 50 $ nest 2 $ text "d    =" <+> prettyTCM d+    -- Issue 661: t maybe an evaluated form of d .., so we evaluate d+    -- as well and then check wether we deal with the same datatype+    t0 <- reduce (Def d [])+    case (ignoreSharing t0, ignoreSharing $ unEl t) of -- Only fully applied constructors get special treatment+      (Def d0 _, Def d' vs) -> do+       reportSDoc "tc.term.con" 50 $ nest 2 $ text "d0   =" <+> prettyTCM d0+       reportSDoc "tc.term.con" 50 $ nest 2 $ text "d'   =" <+> prettyTCM d'+       reportSDoc "tc.term.con" 50 $ nest 2 $ text "vs   =" <+> prettyTCM vs+       if d' /= d0 then fallback else do+        -- Issue 661: d' may take more parameters than d, in particular+        -- these additional parameters could be a module parameter telescope.+        -- Since we get the constructor type ctype from d but the parameters+        -- from t = Def d' vs, we drop the additional parameters.+        npars  <- getNumberOfParameters d+        npars' <- getNumberOfParameters d'+        flip (maybe fallback) (sequenceA $ List2 (npars, npars')) $ \(List2 (n,n')) -> do+        reportSDoc "tc.term.con" 50 $ nest 2 $ text $ "n    = " ++ show n+        reportSDoc "tc.term.con" 50 $ nest 2 $ text $ "n'   = " ++ show n'+        -- when (n > n') __IMPOSSIBLE__ -- NOT IN SCOPE `__IMPOSSIBLE__' WHY???+        when (n > n') bla+        let ps    = genericTake n $ genericDrop (n' - n) vs             ctype = defType cdef         reportSDoc "tc.term.con" 20 $ vcat           [ text "special checking of constructor application of" <+> prettyTCM c@@ -861,22 +878,34 @@                           , text "ctype  =" <+> prettyTCM ctype ] ]         let ctype' = ctype `piApply` ps         reportSDoc "tc.term.con" 20 $ nest 2 $ text "ctype' =" <+> prettyTCM ctype'-        checkArguments' ExpandLast (getRange c) args ctype' t org $ \us t' -> do+        -- check the non-parameter arguments+        checkArguments' ExpandLast ExpandInstanceArguments (getRange c) args' ctype' t org $ \us t' -> do           reportSDoc "tc.term.con" 20 $ nest 2 $ vcat             [ text "us     =" <+> prettyTCM us             , text "t'     =" <+> prettyTCM t' ]-          blockTerm t $ Con c us <$ leqType_ t' t-      _ -> fallback+          coerce (Con c us) t' t+      _ -> do+        reportSDoc "tc.term.con" 50 $ nest 2 $ text "we are not at a datatype, falling back"+        fallback   where     fallback = checkHeadApplication org t (A.Con (AmbQ [c])) args+    bla = __IMPOSSIBLE__      -- Check if there are explicitly given hidden arguments,     -- in which case we fall back to default type checking.     -- We could work harder, but let's not for now.-    hiddenArg = case args of-      Arg Hidden _ _ : _ -> True-      _                  -> False+    --+    -- Andreas, 2012-04-18: if all inital args are underscores, ignore them+    checkForParams args =+      let (hargs, rest) = span isHiddenArg args+          removeScope (A.ScopedExpr _ e) = removeScope e+          removeScope e                  = e+          notUnderscore A.Underscore{} = False+          notUnderscore _              = True+      in  (rest,) $ any notUnderscore $ map (removeScope . namedArg) hargs +{- UNUSED CODE, BUT DON'T REMOVE (2012-04-18)+     -- Split the arguments to a constructor into those corresponding     -- to parameters and those that don't. Dummy underscores are inserted     -- for parameters that are not given explicitly.@@ -894,6 +923,7 @@         mname = nameOf (unArg arg)      dummyUnderscore = Arg Hidden Relevant (unnamed $ A.Underscore $ A.MetaInfo noRange emptyScopeInfo Nothing)+-}  -- | @checkHeadApplication e t hd args@ checks that @e@ has type @t@, -- assuming that @e@ has the form @hd args@. The corresponding@@ -920,7 +950,7 @@         [ text "checkHeadApplication inferred" <+>           prettyTCM c <+> text ":" <+> prettyTCM t0         ]-      checkArguments' ExpandLast (getRange hd) args t0 t e $ \vs t1 -> do+      checkArguments' ExpandLast ExpandInstanceArguments (getRange hd) args t0 t e $ \vs t1 -> do         TelV eTel eType <- telView t         -- If the expected type @eType@ is a metavariable we have to make         -- sure it's instantiated to the proper pi type@@ -950,9 +980,11 @@           "coinductive constructor in the scope of a let-bound variable"        -- The name of the fresh function.-      i <- fresh :: TCM Integer+      i <- fresh :: TCM Int       let name = filter (/= '_') (show $ A.qnameName c) ++ "-" ++ show i-      c' <- liftM2 qualify (killRange <$> currentModule) (freshName_ name)+      c' <- setRange (getRange c) <$>+              liftM2 qualify (killRange <$> currentModule)+                             (freshName_ name)        -- The application of the fresh function to the relevant       -- arguments.@@ -960,20 +992,20 @@        -- Add the type signature of the fresh function to the       -- signature.-      i   <- currentMutualBlock+      i   <- currentOrFreshMutualBlock       tel <- getContextTelescope       -- If we are in irrelevant position, add definition irrelevantly.       -- TODO: is this sufficient?       rel <- asks envRelevance-      addConstant c' (Defn rel c' t (defaultDisplayForm c') i noCompiledRep $ Axiom)+      addConstant c' (Defn rel c' t [] [] (defaultDisplayForm c') i noCompiledRep $ Axiom)        -- Define and type check the fresh function.       ctx <- getContext       let info   = A.mkDefInfo (A.nameConcrete $ A.qnameName c') defaultFixity'                                PublicAccess ConcreteDef noRange-          pats   = map (fmap $ \(n, _) -> Named Nothing (A.VarP n)) $+          pats   = map (\ (Dom h r (n, _)) -> Arg h r $ Named Nothing $ A.VarP n) $                        reverse ctx-          clause = A.Clause (A.LHS (A.LHSRange noRange) c' pats [])+          clause = A.Clause (A.LHS (A.LHSRange noRange) (A.LHSHead c' pats) [])                             (A.RHS $ unAppView (A.Application (A.Con (AmbQ [c])) args))                             [] @@ -988,7 +1020,7 @@           , nest 2 $ prettyA clause <> text "."           ] -      escapeContext (size ctx) $ checkFunDef Delayed info c' [clause]+      escapeContextToTopLevel $ checkFunDef Delayed info c' [clause]        reportSDoc "tc.term.expr.coind" 15 $ do         def <- theDef <$> getConstInfo c'@@ -1001,10 +1033,8 @@   where   defaultResult = do     (f, t0) <- inferHead hd-    checkArguments' ExpandLast (getRange hd) args t0 t e $ \vs t1 ->-      blockTerm t $ f vs <$ leqType_ t1 t--data ExpandHidden = ExpandLast | DontExpandLast+    checkArguments' ExpandLast ExpandInstanceArguments (getRange hd) args t0 t e $ \vs t1 ->+      coerce (f vs) t1 t  instance Error Type where   strMsg _ = __IMPOSSIBLE__@@ -1028,69 +1058,100 @@ --   that have to be solved for everything to be well-formed. -- --   TODO: doesn't do proper blocking of terms-checkArguments :: ExpandHidden -> Range -> [NamedArg A.Expr] -> Type -> Type ->+checkArguments :: ExpandHidden -> ExpandInstances -> Range -> [NamedArg A.Expr] -> Type -> Type ->                   ErrorT Type TCM (Args, Type)-checkArguments DontExpandLast _ [] t0 t1 = return ([], t0)-checkArguments exh r [] t0 t1 =+checkArguments DontExpandLast _ _ [] t0 t1 = return ([], t0)+checkArguments exh    expandIFS r [] t0 t1 =+    traceCallE (CheckArguments r [] t0 t1) $ lift $ do+      t1' <- unEl <$> reduce t1+      implicitArgs (-1) (expand t1') t0+    where+      expand (Pi  (Dom h   _ _) _) Hidden = h /= Hidden+      expand _                     Hidden = True+      expand (Pi  (Dom h _ _) _) Instance = h /= Instance && expandIFS == ExpandInstanceArguments+      expand _                   Instance = expandIFS == ExpandInstanceArguments+      expand _                  NotHidden = False++{- OLD CODE+checkArguments exh expandIFS r [] t0 t1 =     traceCallE (CheckArguments r [] t0 t1) $ do 	t0' <- lift $ reduce t0 	t1' <- lift $ reduce t1-	case unEl t0' of-	    Pi (Arg Hidden rel a) _ | notHPi Hidden $ unEl t1'  -> do-		v  <- lift $ applyRelevanceToContext rel $ newValueMeta a+	case ignoreSharing $ unEl t0' of+	    Pi (Dom Hidden rel a) _ | notHPi Hidden $ unEl t1'  -> do+		v  <- lift $ applyRelevanceToContext rel $ newValueMeta RunMetaOccursCheck a 		let arg = Arg Hidden rel v-		(vs, t0'') <- checkArguments exh r [] (piApply t0' [arg]) t1'+		(vs, t0'') <- checkArguments exh expandIFS r [] (piApply t0' [arg]) t1' 		return (arg : vs, t0'')-	    Pi (Arg Instance rel a) _ | notHPi Instance $ unEl t1'  -> do+	    Pi (Dom Instance rel a) _ | expandIFS == ExpandInstanceArguments &&+                                        (notHPi Instance $ unEl t1')  -> do                 lift $ reportSLn "tc.term.args.ifs" 15 $ "inserting implicit meta for type " ++ show a-		v <- lift $ applyRelevanceToContext rel $ newIFSMeta a+		v <- lift $ applyRelevanceToContext rel $ initializeIFSMeta a 		let arg = Arg Instance rel v-		(vs, t0'') <- checkArguments exh r [] (piApply t0' [arg]) t1'+		(vs, t0'') <- checkArguments exh expandIFS r [] (piApply t0' [arg]) t1' 		return (arg : vs, t0'') 	    _ -> return ([], t0')     where-	notHPi h (Pi  (Arg h' _ _) _) | h == h' = False+	notHPi h (Pi  (Dom h' _ _) _) | h == h' = False+        notHPi h (Shared p) = notHPi h $ derefPtr p 	notHPi _ _		        = True+-} -checkArguments exh r args0@(Arg h _ e : args) t0 t1 =+checkArguments exh expandIFS r args0@(Arg h _ e : args) t0 t1 =     traceCallE (CheckArguments r args0 t0 t1) $ do+      lift $ reportSDoc "tc.term.args" 30 $ sep+        [ text "checkArguments"+--        , text "  args0 =" <+> prettyA args0+        , nest 2 $ vcat+          [ text "e     =" <+> prettyA e+          , text "t0    =" <+> prettyTCM t0+          , text "t1    =" <+> prettyTCM t1+          ]+        ]       t0b <- lift $ reduceB t0+      let isMeta t = case ignoreSharing $ unEl t of { MetaV{} -> True; _ -> False }       case t0b of-        Blocked{}                 -> throwError $ ignoreBlocking t0b-        NotBlocked (El _ MetaV{}) -> throwError $ ignoreBlocking t0b+        Blocked{}                   -> throwError $ ignoreBlocking t0b+        NotBlocked t0' | isMeta t0' -> throwError $ ignoreBlocking t0b         NotBlocked t0' -> do           -- (t0', cs) <- forcePi h (name e) t0           e' <- return $ namedThing e-          case unEl t0' of-              Pi (Arg h' rel a) _ |+          case ignoreSharing $ unEl t0' of+              Pi (Dom h' rel a) _ |                 h == h' && (h == NotHidden || sameName (nameOf e) (nameInPi $ unEl t0')) -> do                   u  <- lift $ applyRelevanceToContext rel $ checkExpr e' a                   let arg = Arg h rel u  -- save relevance info in argument-                  (us, t0'') <- checkArguments exh (fuseRange r e) args (piApply t0' [arg]) t1-                  return (nukeIfIrrelevant arg : us, t0'')+                  (us, t0'') <- checkArguments exh expandIFS (fuseRange r e) args (piApply t0' [arg]) t1+                  return (arg : us, t0'')+{- UNUSED.  2012-04-02 do not insert DontCare (is redundant anyway)                          where nukeIfIrrelevant arg =                                  if argRelevance arg == Irrelevant then    -- Andreas, 2011-09-09 keep irr. args. until after termination checking                                    arg { unArg = DontCare $ unArg arg }                                   else arg-              Pi (Arg Instance rel a) _ -> insertIFSUnderscore rel a-              Pi (Arg Hidden rel a) _   -> insertUnderscore rel-              Pi (Arg NotHidden _ _) _  -> lift $ typeError $ WrongHidingInApplication t0'+-}+              Pi (Dom Instance rel a) b | expandIFS == ExpandInstanceArguments ->+                insertIFSUnderscore rel (absName b) a+              Pi (Dom Hidden rel a) b   -> insertUnderscore rel (absName b)+              Pi (Dom NotHidden _ _) _  -> lift $ typeError $ WrongHidingInApplication t0'               _ -> lift $ typeError $ ShouldBePi t0'     where-	insertIFSUnderscore rel a = do v <- lift $ applyRelevanceToContext rel $ newIFSMeta a-                                       lift $ reportSLn "tc.term.args.ifs" 15 $ "inserting implicit meta (2) for type " ++ show a-                                       let arg = Arg Instance rel v-                                       (vs, t0'') <- checkArguments exh r args0 (piApply t0 [arg]) t1-                                       return (arg : vs, t0'')-	insertUnderscore rel = do+	insertIFSUnderscore rel x a = do+          lift $ reportSLn "tc.term.args.ifs" 15 $ "inserting implicit meta (2) for type " ++ show a+          v <- lift $ applyRelevanceToContext rel $ initializeIFSMeta x a+          let arg = Arg Instance rel v+          (vs, t0'') <- checkArguments exh expandIFS r args0 (piApply t0 [arg]) t1+          return (arg : vs, t0'')++	insertUnderscore rel x = do 	  scope <- lift $ getScope 	  let m = A.Underscore $ A.MetaInfo 		  { A.metaRange  = r 		  , A.metaScope  = scope 		  , A.metaNumber = Nothing+                  , A.metaNameSuggestion = x 		  }-	  checkArguments exh r (Arg Hidden rel (unnamed m) : args0) t0 t1+	  checkArguments exh expandIFS r (Arg Hidden rel (unnamed m) : args0) t0 t1  	name (Named _ (A.Var x)) = show x 	name (Named (Just x) _)    = x@@ -1099,28 +1160,79 @@ 	sameName Nothing _  = True 	sameName n1	 n2 = n1 == n2 -	nameInPi (Pi _ b)  = Just $ absName b-	nameInPi _	   = __IMPOSSIBLE__+	nameInPi (Pi _ b)   = Just $ absName b+        nameInPi (Shared p) = nameInPi (derefPtr p)+	nameInPi _          = __IMPOSSIBLE__   -- | Check that a list of arguments fits a telescope. checkArguments_ :: ExpandHidden -> Range -> [NamedArg A.Expr] -> Telescope -> TCM Args checkArguments_ exh r args tel = do-    z <- runErrorT $ checkArguments exh r args (telePi tel $ sort Prop) (sort Prop)+    z <- runErrorT $ checkArguments exh ExpandInstanceArguments r args (telePi tel $ sort Prop) (sort Prop)     case z of       Right (args, _) -> return args       Left _          -> __IMPOSSIBLE__   -- | Infer the type of an expression. Implemented by checking against a meta---   variable.+--   variable.  Except for neutrals, for them a polymorphic type is inferred. inferExpr :: A.Expr -> TCM (Term, Type)-inferExpr e = do-    -- Andreas, 2011-04-27-    t <- workOnTypes $ newTypeMeta_-    v <- checkExpr e t-    return (v,t)+inferExpr e = inferOrCheck e Nothing+{-+case e of+  _ | Application hd args <- appView e, defOrVar hd -> traceCall (InferExpr e) $ do+    (f, t0) <- inferHead hd+    res <- runErrorT $ checkArguments DontExpandLast ExpandInstanceArguments (getRange hd) args t0 (sort Prop)+    case res of+      Right (vs, t1) -> return (f vs, t1)+      Left t1 -> fallback -- blocked on type t1+  _ -> fallback+  where+    fallback = do+      t <- workOnTypes $ newTypeMeta_+      v <- checkExpr e t+      return (v,t)+-} +defOrVar :: A.Expr -> Bool+defOrVar A.Var{} = True+defOrVar A.Def{} = True+defOrVar _     = False++inferOrCheck :: A.Expr -> Maybe Type -> TCM (Term, Type)+inferOrCheck e mt = case e of+  _ | Application hd args <- appView e, defOrVar hd -> traceCall (InferExpr e) $ do+    (f, t0) <- inferHead hd+    res <- runErrorT $ checkArguments DontExpandLast ExpandInstanceArguments (getRange hd) args t0 $ maybe (sort Prop) id mt+    case res of+      Right (vs, t1) -> maybe (return (f vs, t1))+                              (\ t -> (,t) <$> coerce (f vs) t1 t)+                              mt+      Left t1        -> fallback -- blocked on type t1+  _ -> fallback+  where+    fallback = do+      t <- maybe (workOnTypes $ newTypeMeta_) return mt+      v <- checkExpr e t+      return (v,t)++-- | Infer the type of an expression, and if it is of the form+--   @{tel} -> D vs@ for some datatype @D@ then insert the hidden+--   arguments.  Otherwise, leave the type polymorphic.+inferExprForWith :: A.Expr -> TCM (Term, Type)+inferExprForWith e = do+  (v, t) <- inferExpr e+  TelV tel t0 <- telViewUpTo' (-1) ((NotHidden /=) . domHiding) t+  case ignoreSharing $ unEl t0 of+    Def d vs -> do+      res <- isDataOrRecordType d+      case res of+        Nothing -> return (v, t)+        Just{}  -> do+          (args, t1) <- implicitArgs (-1) (NotHidden /=) t+          return (v `apply` args, t1)+    _ -> return (v, t)+ checkTerm :: Term -> Type -> TCM Term checkTerm tm ty = do atm <- reify tm                      checkExpr atm ty@@ -1133,11 +1245,71 @@ checkLetBindings = foldr (.) id . map checkLetBinding  checkLetBinding :: A.LetBinding -> TCM a -> TCM a+ checkLetBinding b@(A.LetBind i rel x t e) ret =   traceCallCPS_ (CheckLetBinding b) ret $ \ret -> do     t <- isType_ t     v <- applyRelevanceToContext rel $ checkExpr e t     addLetBinding rel x v t ret++checkLetBinding b@(A.LetPatBind i p e) ret =+  traceCallCPS_ (CheckLetBinding b) ret $ \ret -> do+    (v, t) <- inferExpr e+    let -- construct a type  t -> dummy  for use in checkLeftHandSide+        t0 = El (getSort t) $ Pi (Dom NotHidden Relevant t) (NoAbs "_" typeDontCare)+        p0 = Arg NotHidden Relevant (Named Nothing p)+    reportSDoc "tc.term.let.pattern" 10 $ vcat+      [ text "let-binding pattern p at type t"+      , nest 2 $ vcat+        [ text "p (A) =" <+> text (show p) -- prettyTCM p+        , text "t     =" <+> prettyTCM t+        ]+      ]+    checkLeftHandSide (CheckPattern p EmptyTel t) [p0] t0 $ \ mgamma delta sub xs ps t' perm -> do+      -- A single pattern in internal syntax is returned.+      let p = case ps of [p] -> unArg p; _ -> __IMPOSSIBLE__+      reportSDoc "tc.term.let.pattern" 20 $ nest 2 $ vcat+        [ text "p (I) =" <+> text (show p)+        , text "delta =" <+> text (show delta)+        ]+      -- We translate it into a list of projections.+      fs <- recordPatternToProjections p+      -- We remove the bindings for the pattern variables from the context.+      cxt0 <- getContext+      let (binds, cxt) = splitAt (size delta) cxt0+      escapeContext (length binds) $ do+        reportSDoc "tc.term.let.pattern" 20 $ nest 2 $ vcat+          [ text "delta =" <+> prettyTCM delta+          , text "binds =" <+> text (show binds) -- prettyTCM binds+          ]+{- WE CANNOT USE THIS BINDING+       -- We add a first let-binding for the value of e.+       x <- freshNoName (getRange e)+       addLetBinding Relevant x v t $ do+ -}+        -- We create a substitution for the let-bound variables+        -- (unfortunately, we cannot refer to x in internal syntax+        -- so we have to copy v).+        let sigma = zipWith ($) fs (repeat v)+        -- We apply the types of the let bound-variables to this substitution.+        -- The 0th variable in a context is the last one, so we reverse.+        -- Further, we need to lower all other de Bruijn indices by+        -- the size of delta, so we append the identity substitution.+        let sub    = parallelS (reverse sigma)+        let fdelta = flattenTel delta+        reportSDoc "tc.term.let.pattern" 20 $ nest 2 $ vcat+          [ text "fdelta =" <+> text (show fdelta)+          ]+        let tsl  = applySubst sub fdelta+        -- We get a list of types+        let ts   = map unDom tsl+        -- and relevances.+        let rels = map domRelevance tsl+        -- We get list of names of the let-bound vars from the context.+        let xs   = map (fst . unDom) (reverse binds)+        -- We add all the bindings to the context.+        foldr (uncurry4 addLetBinding) ret $ zip4 rels xs sigma ts+ checkLetBinding (A.LetApply i x modapp rd rm) ret = do   -- Any variables in the context that doesn't belong to the current   -- module should go with the new module.
src/full/Agda/TypeChecking/Rules/Term.hs-boot view
@@ -3,6 +3,15 @@  import qualified Agda.Syntax.Abstract as A import Agda.Syntax.Internal+import Agda.Syntax.Common+import Agda.Syntax.Position import Agda.TypeChecking.Monad.Base+import Control.Monad.Error (ErrorT) +isType_ :: A.Expr -> TCM Type+ checkExpr :: A.Expr -> Type -> TCM Term++checkArguments :: ExpandHidden -> ExpandInstances -> Range -> [NamedArg A.Expr] -> Type -> Type ->+                  ErrorT Type TCM (Args, Type)+
src/full/Agda/TypeChecking/Serialise.hs view
@@ -53,10 +53,12 @@  import Agda.Syntax.Common import Agda.Syntax.Concrete.Name as C+import qualified Agda.Syntax.Abstract as A import Agda.Syntax.Abstract.Name as A+import Agda.Syntax.Info import Agda.Syntax.Internal as I import Agda.Syntax.Scope.Base-import Agda.Syntax.Position (Position(..), Range)+import Agda.Syntax.Position (Position, Range, noRange) import qualified Agda.Syntax.Position as P import Agda.Syntax.Common import Agda.Syntax.Fixity@@ -69,10 +71,13 @@  import Agda.TypeChecking.Monad import Agda.TypeChecking.CompiledClause+import Agda.TypeChecking.Pretty import Agda.Utils.FileName import Agda.Utils.Monad import Agda.Utils.Tuple import Agda.Utils.Permutation+import Agda.Utils.HashMap (HashMap)+import qualified Agda.Utils.HashMap as HMap  #include "../undefined.h" import Agda.Utils.Impossible@@ -82,7 +87,7 @@ -- 32-bit machines). Word64 does not have these problems.  currentInterfaceVersion :: Word64-currentInterfaceVersion = 20111026 * 10 + 0+currentInterfaceVersion = 20121106 * 10 + 0  -- | Constructor tag (maybe omitted) and argument indices. @@ -101,25 +106,17 @@                 , stringD   :: !(HashTable String  Int32)                 , integerD  :: !(HashTable Integer Int32)                 , doubleD   :: !(HashTable Double  Int32)+                , termD     :: !(HashTable (Ptr Term) Int32)                 , nodeC     :: !(IORef Int32)  -- counters for fresh indexes                 , stringC   :: !(IORef Int32)                 , integerC  :: !(IORef Int32)                 , doubleC   :: !(IORef Int32)+                , sharingStats :: !(IORef (Int32, Int32))                 , fileMod   :: !SourceToModule                 }  data U    = forall a . Typeable a => U !a-type Memo = HashTable (Int32, TypeRep') U    -- (node index, type rep)---- | A newtype is used to avoid introducing an orphan instance of--- Hashable.-newtype TypeRep' = TypeRep' { unTypeRep' :: TypeRep }-  deriving Eq---- | With direct access to the internals of 'TypeRep' this instance--- could presumably be improved.-instance Hashable TypeRep' where-  hash = hash . show . unTypeRep'+type Memo = HashTable (Int32, TypeRep) U    -- (node index, type rep)  data St = St   { nodeE     :: !(Array Int32 Node)@@ -161,12 +158,17 @@ encode :: EmbPrj a => a -> TCM ByteString encode a = do     fileMod <- sourceToModule-    liftIO $ do-      newD@(Dict nD sD iD dD _ _ _ _ _) <- emptyDict fileMod+    (x, shared, total) <- liftIO $ do+      newD@(Dict nD sD iD dD _ _ _ _ _ stats _) <- emptyDict fileMod       root <- runReaderT (icode a) newD       nL <- l nD; sL <- l sD; iL <- l iD; dL <- l dD-      return $ B.encode currentInterfaceVersion `L.append`-               G.compress (B.encode (root, nL, sL, iL, dL))+      (shared, total) <- readIORef stats+      return (B.encode currentInterfaceVersion `L.append`+              G.compress (B.encode (root, nL, sL, iL, dL)), shared, total)+    verboseS "profile.sharing" 10 $ do+      tickN "pointers (reused)" $ fromIntegral shared+      tickN "pointers" $ fromIntegral total+    return x   where   l h = List.map fst . List.sortBy (compare `on` snd) <$> H.toList h @@ -184,11 +186,11 @@   -- input is malformed. The decoder is (intended to be) strict enough   -- to ensure that all such errors can be caught by the handler here. -  (mf, x) <- liftIO $ E.handle (\(E.ErrorCall {}) -> noResult) $ do+  (mf, r) <- liftIO $ E.handle (\(E.ErrorCall s) -> noResult s) $ do      (ver, s, _) <- return $ B.runGetState B.get s 0     if ver /= currentInterfaceVersion-     then noResult+     then noResult "Wrong interface version."      else do        ((r, nL, sL, iL, dL), s, _) <-@@ -196,27 +198,31 @@       if s /= L.empty          -- G.decompress seems to throw away garbage at the end, so          -- the then branch is possibly dead code.-       then noResult+       then noResult "Garbage at end."        else do          st <- St (ar nL) (ar sL) (ar iL) (ar dL)                 <$> liftIO H.new                 <*> return mf <*> return incs         (r, st) <- runStateT (runErrorT (value r)) st-        return (Just (modFile st), case r of-          Left  _ -> Nothing-          Right x -> Just x)+        return (Just (modFile st), r)    case mf of     Nothing -> return ()     Just mf -> modify $ \s -> s { stModuleToSource = mf } -  return x+  case r of+    Right x   -> return (Just x)+    Left  err -> do+      reportSDoc "import.iface" 5 $+        text "Error when decoding interface file:" $+$+        nest 2 (prettyTCM err)+      return Nothing    where   ar l = listArray (0, List.genericLength l - 1) l -  noResult = return (Nothing, Nothing)+  noResult s = return (Nothing, Left $ GenericError s)  -- | Encodes something. To ensure relocatability file paths in -- positions are replaced with module names.@@ -373,8 +379,8 @@                            valu _      = malformed  instance EmbPrj Scope where-  icode (Scope a b c d) = icode4' a b c d-  value = vcase valu where valu [a, b, c, d] = valu4 Scope a b c d+  icode (Scope a b c d e) = icode5' a b c d e+  value = vcase valu where valu [a, b, c, d, e] = valu5 Scope a b c d e                            valu _            = malformed  instance EmbPrj NameSpaceId where@@ -414,8 +420,11 @@ instance EmbPrj KindOfName where   icode DefName = icode0'   icode ConName = icode0 1+  icode FldName = icode0 2+  icode PatternSynName = icode0 2   value = vcase valu where valu []  = valu0 DefName                            valu [1] = valu0 ConName+                           valu [2] = valu0 FldName                            valu _   = malformed  instance EmbPrj Agda.Syntax.Fixity.Fixity where@@ -446,6 +455,10 @@   value = vcase valu where valu [a, b] = valu2 A.QName a b                            valu _      = malformed +instance EmbPrj A.AmbiguousQName where+  icode (A.AmbQ a) = icode a+  value n = A.AmbQ `fmap` value n+ instance EmbPrj A.ModuleName where   icode (A.MName a) = icode a   value n = A.MName `fmap` value n@@ -455,6 +468,136 @@   value = vcase valu where valu [a, b, c, d] = valu4 A.Name a b c d                            valu _            = malformed +instance (EmbPrj s, EmbPrj t) => EmbPrj (Named s t) where+  icode (Named a b) = icode2' a b+  value = vcase valu where valu [a, b] = valu2 Named a b+                           valu _      = malformed++instance EmbPrj A.Expr where+  icode (A.Var n)               = icode1 0 n+  icode (A.Def n)               = icode1 1 n+  icode (A.Con ns)              = icode1 2 ns+  icode (A.Lit l)               = icode1 3 l+  icode (A.QuestionMark _)      = icode0 4+  icode (A.Underscore _)        = icode0 5+  icode (A.App _ a b)           = icode2 6 a b+  icode (A.WithApp _ a b)       = icode2 7 a b+  icode (A.Lam  _ a b)          = icode2 8 a b+  icode (A.AbsurdLam _ a)       = icode1 9 a+  icode (A.ExtendedLam _ _ _ _) = icode0 10+  icode (A.Pi   _ a b)          = icode2 11 a b+  icode (A.Fun  _ a b)          = icode2 12 a b+  icode (A.Set  _ a)            = icode1 13 a+  icode (A.Prop _)              = icode0 14+  icode (A.Let  _ a b)          = icode2 15 a b+  icode (A.ETel a)              = icode1 16 a+  icode (A.Rec  _ a)            = icode1 17 a+  icode (A.RecUpdate _ a b)     = icode2 18 a b+  icode (A.ScopedExpr a b)      = icode2 19 a b+  icode (A.QuoteGoal _ a b)     = icode2 20 a b+  icode (A.Quote _)             = icode0 21+  icode (A.QuoteTerm _)         = icode0 22+  icode (A.Unquote _)           = icode0 23+  icode (A.DontCare a)          = icode1 24 a+  icode (A.PatternSyn a)        = icode1 25 a++  value = vcase valu+    where+      valu [0, a]     = valu1 A.Var a+      valu [1, a]     = valu1 A.Def a+      valu [2, a]     = valu1 A.Con a+      valu [3, a]     = valu1 A.Lit a+      valu [4]        = valu0 (A.QuestionMark emptyMetaInfo)+      valu [5]        = valu0 (A.Underscore emptyMetaInfo)+      valu [6, a, b]  = valu2 (A.App i) a b+      valu [7, a, b]  = valu2 (A.WithApp i) a b+      valu [8, a, b]  = valu2 (A.Lam i) a b+      valu [9, a]     = valu1 (A.AbsurdLam i) a+      valu [10]       = throwError $ NotSupported+                            "importing pattern synonym containing extended lambda"+      valu [11, a, b] = valu2 (A.Pi i) a b+      valu [12, a, b] = valu2 (A.Fun i) a b+      valu [13, a]    = valu1 (A.Set i) a+      valu [14]       = valu0 (A.Prop i)+      valu [15, a, b] = valu2 (A.Let i) a b+      valu [16, a]    = valu1 A.ETel a+      valu [17, a]    = valu1 (A.Rec i) a+      valu [18, a, b] = valu2 (A.RecUpdate i) a b+      valu [19, a, b] = valu2 A.ScopedExpr a b+      valu [20, a, b] = valu2 (A.QuoteGoal i) a b+      valu [21]       = valu0 (A.Quote i)+      valu [22]       = valu0 (A.QuoteTerm i)+      valu [23]       = valu0 (A.Unquote i)+      valu [24, a]    = valu1 A.DontCare a+      valu [25, a]    = valu1 A.PatternSyn a+      valu _          = malformed++      i = ExprRange noRange++instance EmbPrj A.Pattern where+  icode (A.VarP a)            = icode1 0 a+  icode (A.ConP _ a b)        = icode2 1 a b+  icode (A.DefP _ a b)        = icode2 2 a b+  icode (A.WildP _)           = icode0 3+  icode (A.AsP _ a b)         = icode2 4 a b+  icode (A.DotP _ a)          = icode1 5 a+  icode (A.AbsurdP _)         = icode0 6+  icode (A.LitP a)            = icode1 7 a+  icode (A.ImplicitP _)       = icode0 8+  icode (A.PatternSynP _ a b) = icode2 9 a b++  value = vcase valu+    where+     valu [0, a]    = valu1 A.VarP a+     valu [1, a, b] = valu2 (A.ConP i) a b+     valu [2, a, b] = valu2 (A.DefP i) a b+     valu [3]       = valu0 (A.WildP i)+     valu [4, a, b] = valu2 (A.AsP i) a b+     valu [5, a]    = valu1 (A.DotP i) a+     valu [6]       = valu0 (A.AbsurdP i)+     valu [7, a]    = valu1 (A.LitP) a+     valu [8]       = valu0 (A.ImplicitP i)+     valu [9, a, b] = valu2 (A.PatternSynP i) a b+     valu _         = malformed++     i = PatRange noRange++instance EmbPrj A.LamBinding where+  icode (A.DomainFree a b c) = icode3 0 a b c+  icode (A.DomainFull a)     = icode1 1 a++  value = vcase valu where valu [0, a, b, c] = valu3 A.DomainFree a b c+                           valu [1, a]       = valu1 A.DomainFull a+                           valu _            = malformed++instance EmbPrj A.TypedBindings where+  icode (A.TypedBindings a b) = icode2' a b++  value = vcase valu where valu [a, b] = valu2 A.TypedBindings a b+                           valu _      = malformed++instance EmbPrj A.TypedBinding where+  icode (A.TBind a b c) = icode3 0 a b c+  icode (A.TNoBind a)   = icode1 1 a++  value = vcase valu where valu [0, a, b, c] = valu3 A.TBind a b c+                           valu [1, a]       = valu1 A.TNoBind a+                           valu _            = malformed++instance EmbPrj A.LetBinding where+  icode (A.LetBind _ a b c d)  = icode4 0 a b c d+  icode (A.LetPatBind _ a b )  = icode2 1 a b+  icode (A.LetApply _ _ _ _ _) = icode0 2+  icode (A.LetOpen _ _)        = icode0 2++  value = vcase valu+    where+      valu [0, a, b, c, d] = valu4 (A.LetBind (LetRange noRange)) a b c d+      valu [1, a, b]       = valu2 (A.LetPatBind (LetRange noRange)) a b+      valu [2]             = throwError $ NotSupported+                                 "importing pattern synonym containing let module"+      valu _               = malformed+ instance EmbPrj NameId where   icode (NameId a b) = icode2' a b   value = vcase valu where valu [a, b] = valu2 NameId a b@@ -465,6 +608,10 @@   value = vcase valu where valu [a, b] = valu2 Sig a b                            valu _      = malformed +instance (Eq k, Hashable k, EmbPrj k, EmbPrj v) => EmbPrj (HashMap k v) where+  icode m = icode (HMap.toList m)+  value m = HMap.fromList `fmap` value m+ instance EmbPrj Section where   icode (Section a b) = icode2' a b   value = vcase valu where valu [a, b] = valu2 Section a b@@ -487,6 +634,11 @@   value = vcase valu where valu [a, b, c] = valu3 Arg a b c                            valu _         = malformed +instance (EmbPrj a) => EmbPrj (Agda.Syntax.Common.Dom a) where+  icode (Dom a b c) = icode3' a b c+  value = vcase valu where valu [a, b, c] = valu3 Dom a b c+                           valu _         = malformed+ instance EmbPrj Agda.Syntax.Common.Induction where   icode Inductive   = icode0'   icode CoInductive = icode0 1@@ -508,10 +660,12 @@   icode Irrelevant = icode0 1   icode Forced     = icode0 2   icode NonStrict  = icode0 3+  icode UnusedArg  = icode0 4   value = vcase valu where valu []  = valu0 Relevant                            valu [1] = valu0 Irrelevant                            valu [2] = valu0 Forced                            valu [3] = valu0 NonStrict+                           valu [4] = valu0 UnusedArg                            valu _   = malformed  instance EmbPrj I.Type where@@ -537,17 +691,32 @@   icode (MetaV    a b) = __IMPOSSIBLE__   icode (DontCare a  ) = icode1 8 a   icode (Level    a  ) = icode1 9 a-  value = vcase valu where valu [0, a, b] = valu2 Var   a b-                           valu [1, a, b] = valu2 Lam   a b-                           valu [2, a]    = valu1 Lit   a-                           valu [3, a, b] = valu2 Def   a b-                           valu [4, a, b] = valu2 Con   a b-                           valu [5, a, b] = valu2 Pi    a b-                           valu [7, a]    = valu1 Sort  a-                           valu [8, a]    = valu1 DontCare a-                           valu [9, a]    = valu1 Level a-                           valu _         = malformed+  icode (Shared p)     = do+    h  <- asks termD+    mi <- liftIO $ H.lookup h p+    st <- asks sharingStats+    case mi of+      Just i  -> liftIO $ modifyIORef st (\(a, b) -> ((,) $! a + 1) b) >> return i+      Nothing -> do+        liftIO $ modifyIORef st (\(a, b) -> (,) a $! b + 1)+        n <- icode (derefPtr p)+        liftIO $ H.insert h p n+        return n +  value r = vcase valu' r+    where+      valu' xs = shared <$> valu xs+      valu [0, a, b] = valu2 Var   a b+      valu [1, a, b] = valu2 Lam   a b+      valu [2, a]    = valu1 Lit   a+      valu [3, a, b] = valu2 Def   a b+      valu [4, a, b] = valu2 Con   a b+      valu [5, a, b] = valu2 Pi    a b+      valu [7, a]    = valu1 Sort  a+      valu [8, a]    = valu1 DontCare a+      valu [9, a]    = valu1 Level a+      valu _         = malformed+ instance EmbPrj Level where   icode (Max a) = icode1' a   value = vcase valu where valu [a] = valu1 Max a@@ -624,9 +793,9 @@   value n = MutId `fmap` value n  instance EmbPrj Definition where-  icode (Defn rel a b c d e f) = icode7' rel a b c d e f-  value = vcase valu where valu [rel, a, b, c, d, e, f] = valu7 Defn rel a b c d e f-                           valu _                       = malformed+  icode (Defn rel a b c d e f g h) = icode9' rel a (P.killRange b) c d e f g h+  value = vcase valu where valu [rel, a, b, c, d, e, f, g, h] = valu9 Defn rel a b c d e f g h+                           valu _                             = malformed  instance EmbPrj HaskellRepresentation where   icode (HsType a)   = icode1' a@@ -688,22 +857,30 @@   icode Covariant     = icode0'   icode Contravariant = icode0 1   icode Invariant     = icode0 2+  icode Nonvariant    = icode0 3    value = vcase valu where     valu []  = valu0 Covariant     valu [1] = valu0 Contravariant     valu [2] = valu0 Invariant+    valu [3] = valu0 Nonvariant     valu _   = malformed  instance EmbPrj Occurrence where-  icode Positive = icode0'-  icode Negative = icode0 1-  icode Unused   = icode0 2+  icode StrictPos = icode0'+  icode Mixed     = icode0 1+  icode Unused    = icode0 2+  icode GuardPos  = icode0 3+  icode JustPos   = icode0 4+  icode JustNeg   = icode0 5    value = vcase valu where-    valu []  = valu0 Positive-    valu [1] = valu0 Negative+    valu []  = valu0 StrictPos+    valu [1] = valu0 Mixed     valu [2] = valu0 Unused+    valu [3] = valu0 GuardPos+    valu [4] = valu0 JustPos+    valu [5] = valu0 JustNeg     valu _   = malformed  instance EmbPrj CompiledRepresentation where@@ -712,21 +889,28 @@                            valu _         = malformed  instance EmbPrj Defn where-  icode Axiom                               = icode0 0-  icode (Function    a b c d e f g h i)     = icode9 1 a b c d e f g h i-  icode (Datatype    a b c d e f g h i)     = icode9 2 a b c d e f g h i-  icode (Record      a b c d e f g h i j k) = icode11 3 a b c d e f g h i j k-  icode (Constructor a b c d e)             = icode5 4 a b c d e-  icode (Primitive   a b c d)               = icode4 5 a b c d+  icode Axiom                                   = icode0 0+  icode (Function    a b c d e f g h i j)       = icode10 1 a b c d e f g h i j+  icode (Datatype    a b c d e f g h)           = icode8 2 a b c d e f g h+  icode (Record      a b c d e f g h i j k l)   = icode12 3 a b c d e f g h i j k l+  icode (Constructor a b c d e)                 = icode5 4 a b c d e+  icode (Primitive   a b c d)                   = icode4 5 a b c d   value = vcase valu where-    valu [0]                                  = valu0 Axiom-    valu [1, a, b, c, d, e, f, g, h, i]       = valu9 Function    a b c d e f g h i-    valu [2, a, b, c, d, e, f, g, h, i]       = valu9 Datatype    a b c d e f g h i-    valu [3, a, b, c, d, e, f, g, h, i, j, k] = valu11 Record     a b c d e f g h i j k-    valu [4, a, b, c, d, e]                   = valu5 Constructor a b c d e-    valu [5, a, b, c, d]                      = valu4 Primitive   a b c d-    valu _                                    = malformed+    valu [0]                                    = valu0 Axiom+    valu [1, a, b, c, d, e, f, g, h, i, j]      = valu10 Function a b c d e f g h i j+    valu [2, a, b, c, d, e, f, g, h]            = valu8 Datatype a b c d e f g h+    valu [3, a, b, c, d, e, f, g, h, i, j, k, l]= valu12 Record  a b c d e f g h i j k l+    valu [4, a, b, c, d, e]                     = valu5 Constructor a b c d e+    valu [5, a, b, c, d]                        = valu4 Primitive   a b c d+    valu _                                      = malformed +instance EmbPrj a => EmbPrj (WithArity a) where+  icode (WithArity a b) = icode2' a b++  value = vcase valu where+    valu [a, b] = valu2 WithArity a b+    valu _      = malformed+ instance EmbPrj a => EmbPrj (Case a) where   icode (Branches a b c) = icode3' a b c @@ -736,7 +920,7 @@  instance EmbPrj CompiledClauses where   icode Fail       = icode0'-  icode (Done a b) = icode2' a b+  icode (Done a b) = icode2' a (P.killRange b)   icode (Case a b) = icode2 2 a b    value = vcase valu where@@ -855,6 +1039,8 @@   icode HP.UnsolvedMeta       = icode0 2   icode HP.TerminationProblem = icode0 3   icode HP.IncompletePattern  = icode0 4+  icode HP.TypeChecks         = icode0 5+  icode HP.UnsolvedConstraint = icode0 6    value = vcase valu where     valu [0] = valu0 HP.Error@@ -862,6 +1048,8 @@     valu [2] = valu0 HP.UnsolvedMeta     valu [3] = valu0 HP.TerminationProblem     valu [4] = valu0 HP.IncompletePattern+    valu [5] = valu0 HP.TypeChecks+    valu [6] = valu0 HP.UnsolvedConstraint     valu _   = malformed  instance EmbPrj HP.MetaInfo where@@ -901,10 +1089,19 @@   value = vcase valu where valu [a, b, c, d] = valu4 ScopeInfo a b c d                            valu _            = malformed +instance EmbPrj HP.CompressedFile where+  icode (HP.CompressedFile f) = icode1' f+  value = vcase valu+    where+    valu [f] = valu1 HP.CompressedFile f+    valu _   = malformed+ instance EmbPrj Interface where-  icode (Interface a b c d e f g h i) = icode9' a b c d e f g h i-  value = vcase valu where valu [a, b, c, d, e, f, g, h, i] = valu9 Interface a b c d e f g h i-                           valu _                           = malformed+  icode (Interface a b c d e f g h i j) = icode10' a b c d e f g h i j+  value = vcase valu+    where+      valu [a, b, c, d, e, f, g, h, i, j] = valu10 Interface a b c d e f g h i j+      valu _                              = malformed  -- This is used for the Epic compiler backend instance EmbPrj Epic.EInterface where@@ -942,8 +1139,6 @@     valu [1, a] = valu1 Epic.PrimTag a     valu _      = malformed -{-# SPECIALIZE icodeX :: (Dict -> HashTable [Int32] Int32) ->-                         (Dict -> IORef Int32) -> [Int32] -> S Int32 #-} icodeX :: (Eq k, Hashable k) =>           (Dict -> HashTable k Int32) -> (Dict -> IORef Int32) ->           k -> S Int32@@ -968,7 +1163,7 @@ vcase valu = \ix -> do     memo <- gets nodeMemo     (aTyp, maybeU) <- liftIO $ do-      let aTyp = TypeRep' $ typeOf (undefined :: a)+      let aTyp = typeOf (undefined :: a)       maybeU <- H.lookup memo (ix, aTyp)       return (aTyp, maybeU)     case maybeU of@@ -991,6 +1186,8 @@ icode10 tag a b c d e f g h i j   = icodeN . (tag :) =<< sequence [icode a, icode b, icode c, icode d, icode e, icode f, icode g, icode h, icode i, icode j] icode11 tag a b c d e f g h i j k = icodeN . (tag :) =<< sequence [icode a, icode b, icode c, icode d, icode e, icode f, icode g, icode h, icode i, icode j, icode k] icode12 tag a b c d e f g h i j k l = icodeN . (tag :) =<< sequence [icode a, icode b, icode c, icode d, icode e, icode f, icode g, icode h, icode i, icode j, icode k, icode l]+icode13 tag a b c d e f g h i j k l m = icodeN . (tag :) =<< sequence [icode a, icode b, icode c, icode d, icode e, icode f, icode g, icode h, icode i, icode j, icode k, icode l, icode m]+icode14 tag a b c d e f g h i j k l m n = icodeN . (tag :) =<< sequence [icode a, icode b, icode c, icode d, icode e, icode f, icode g, icode h, icode i, icode j, icode k, icode l, icode m, icode n]  icode0'                        = icodeN [] icode1'  a                     = icodeN =<< sequence [icode a]@@ -1005,20 +1202,24 @@ icode10' a b c d e f g h i j   = icodeN =<< sequence [icode a, icode b, icode c, icode d, icode e, icode f, icode g, icode h, icode i, icode j] icode11' a b c d e f g h i j k = icodeN =<< sequence [icode a, icode b, icode c, icode d, icode e, icode f, icode g, icode h, icode i, icode j, icode k] icode12' a b c d e f g h i j k l = icodeN =<< sequence [icode a, icode b, icode c, icode d, icode e, icode f, icode g, icode h, icode i, icode j, icode k, icode l]+icode13' a b c d e f g h i j k l m = icodeN =<< sequence [icode a, icode b, icode c, icode d, icode e, icode f, icode g, icode h, icode i, icode j, icode k, icode l, icode m]+icode14' a b c d e f g h i j k l m n = icodeN =<< sequence [icode a, icode b, icode c, icode d, icode e, icode f, icode g, icode h, icode i, icode j, icode k, icode l, icode m, icode n] -valu0  z                         = return z-valu1  z a                       = valu0 z                        `ap` value a-valu2  z a b                     = valu1 z a                      `ap` value b-valu3  z a b c                   = valu2 z a b                    `ap` value c-valu4  z a b c d                 = valu3 z a b c                  `ap` value d-valu5  z a b c d e               = valu4 z a b c d                `ap` value e-valu6  z a b c d e f             = valu5 z a b c d e              `ap` value f-valu7  z a b c d e f g           = valu6 z a b c d e f            `ap` value g-valu8  z a b c d e f g h         = valu7 z a b c d e f g          `ap` value h-valu9  z a b c d e f g h i       = valu8 z a b c d e f g h        `ap` value i-valu10 z a b c d e f g h i j     = valu9 z a b c d e f g h i      `ap` value j-valu11 z a b c d e f g h i j k   = valu10 z a b c d e f g h i j   `ap` value k-valu12 z a b c d e f g h i j k l = valu11 z a b c d e f g h i j k `ap` value l+valu0  z                           = return z+valu1  z a                         = valu0 z                        `ap` value a+valu2  z a b                       = valu1 z a                      `ap` value b+valu3  z a b c                     = valu2 z a b                    `ap` value c+valu4  z a b c d                   = valu3 z a b c                  `ap` value d+valu5  z a b c d e                 = valu4 z a b c d                `ap` value e+valu6  z a b c d e f               = valu5 z a b c d e              `ap` value f+valu7  z a b c d e f g             = valu6 z a b c d e f            `ap` value g+valu8  z a b c d e f g h           = valu7 z a b c d e f g          `ap` value h+valu9  z a b c d e f g h i         = valu8 z a b c d e f g h        `ap` value i+valu10 z a b c d e f g h i j       = valu9 z a b c d e f g h i      `ap` value j+valu11 z a b c d e f g h i j k     = valu10 z a b c d e f g h i j   `ap` value k+valu12 z a b c d e f g h i j k l   = valu11 z a b c d e f g h i j k `ap` value l+valu13 z a b c d e f g h i j k l m = valu12 z a b c d e f g h i j k l `ap` value m+valu14 z a b c d e f g h i j k l m n = valu13 z a b c d e f g h i j k l m `ap` value n  -- | Creates an empty dictionary. @@ -1032,8 +1233,10 @@   <*> H.new   <*> H.new   <*> H.new+  <*> H.new   <*> newIORef 0   <*> newIORef 0   <*> newIORef 0   <*> newIORef 0+  <*> newIORef (0, 0)   <*> return fileMod
src/full/Agda/TypeChecking/SizedTypes.hs view
@@ -1,31 +1,106 @@-{-# LANGUAGE CPP #-}+{-# LANGUAGE CPP, PatternGuards #-} module Agda.TypeChecking.SizedTypes where  import Control.Monad.Error import Control.Monad++import Data.Function import Data.List import qualified Data.Map as Map  import Agda.Interaction.Options+ import Agda.Syntax.Common import Agda.Syntax.Internal+ import Agda.TypeChecking.Monad import Agda.TypeChecking.Monad.Builtin import Agda.TypeChecking.Pretty import Agda.TypeChecking.Reduce-import Agda.TypeChecking.MetaVars+import {-# SOURCE #-} Agda.TypeChecking.MetaVars import Agda.TypeChecking.Substitute import Agda.TypeChecking.Telescope import {-# SOURCE #-} Agda.TypeChecking.Conversion-import Agda.TypeChecking.Constraints+import {-# SOURCE #-} Agda.TypeChecking.Constraints+ import qualified Agda.Utils.Warshall as W import Agda.Utils.List+import Agda.Utils.Maybe import Agda.Utils.Monad import Agda.Utils.Impossible import Agda.Utils.Size+import Agda.Utils.Tuple+import Agda.Utils.Pretty (render)  #include "../undefined.h" +builtinSizeHook :: String -> QName -> Term -> Type -> TCM ()+builtinSizeHook s q e' t = do+  when (s `elem` [builtinSizeLt, builtinSizeSuc]) $ do+    modifySignature $ updateDefinition q+      $ updateDefPolarity       (const [Covariant])+      . updateDefArgOccurrences (const [StrictPos])+  when (s == builtinSizeMax) $ do+    modifySignature $ updateDefinition q+      $ updateDefPolarity       (const [Covariant, Covariant])+      . updateDefArgOccurrences (const [StrictPos, StrictPos])+{-+      . updateDefType           (const tmax)+  where+    -- TODO: max : (i j : Size) -> Size< (suc (max i j))+    tmax =+-}++-- | Compute the deep size view of a term.+--   Precondition: sized types are enabled.+deepSizeView :: Term -> TCM DeepSizeView+deepSizeView v = do+  Def inf [] <- ignoreSharing <$> primSizeInf+  Def suc [] <- ignoreSharing <$> primSizeSuc+  let loop v = do+      v <- reduce v+      case ignoreSharing v of+        Def x []  | x == inf -> return $ DSizeInf+        Def x [u] | x == suc -> sizeViewSuc_ suc <$> loop (unArg u)+        Var i []             -> return $ DSizeVar i 0+        MetaV x us           -> return $ DSizeMeta x us 0+        _                    -> return $ DOtherSize v+  loop v++sizeMaxView :: Term -> TCM SizeMaxView+sizeMaxView v = do+  inf <- getBuiltinDefName builtinSizeInf+  suc <- getBuiltinDefName builtinSizeSuc+  max <- getBuiltinDefName builtinSizeMax+  let loop v = do+      v <- reduce v+      case v of+        Def x []      | Just x == inf -> return $ [DSizeInf]+        Def x [u]     | Just x == suc -> maxViewSuc_ (fromJust suc) <$> loop (unArg u)+        Def x [u1,u2] | Just x == max -> maxViewMax <$> loop (unArg u1) <*> loop (unArg u2)+        Var i []                      -> return $ [DSizeVar i 0]+        MetaV x us                    -> return $ [DSizeMeta x us 0]+        _                             -> return $ [DOtherSize v]+  loop v++-- | Account for subtyping @Size< i =< Size@+--   Preconditions:+--   @m = x els1@, @n = y els2@, @m@ and @n@ are not equal.+trySizeUniv :: Comparison -> Type -> Term -> Term+  -> QName -> [Elim] -> QName -> [Elim] -> TCM ()+trySizeUniv cmp t m n x els1 y els2 = do+  let failure = typeError $ UnequalTerms cmp m n t+      forceInfty u = compareSizes CmpEq (unArg u) =<< primSizeInf+  (size, sizelt) <- flip catchError (const failure) $ do+     Def size   _ <- ignoreSharing <$> primSize+     Def sizelt _ <- ignoreSharing <$> primSizeLt+     return (size, sizelt)+  case (cmp, els1, els2) of+     (CmpLeq, [_], [])  | x == sizelt && y == size -> return ()+     (_, [Apply u], []) | x == sizelt && y == size -> forceInfty u+     (_, [], [Apply u]) | x == size && y == sizelt -> forceInfty u+     _                                             -> failure+ -- | Compare two sizes. Only with --sized-types. compareSizes :: Comparison -> Term -> Term -> TCM () compareSizes cmp u v = do@@ -35,12 +110,123 @@                    , prettyTCM v                    ]     ]+{-   u <- reduce u   v <- reduce v   reportSDoc "tc.conv.size" 15 $       nest 2 $ sep [ text (show u) <+> prettyTCM cmp                    , text (show v)                    ]+-}+  us <- sizeMaxView u+  vs <- sizeMaxView v+  compareMaxViews cmp us vs++compareMaxViews :: Comparison -> SizeMaxView -> SizeMaxView -> TCM ()+compareMaxViews cmp us vs = case (cmp, us, vs) of+  (CmpLeq, _, (DSizeInf : _)) -> return ()+  (cmp,   [u], [v]) -> compareSizeViews cmp u v+  (CmpLeq, us, [v]) -> forM_ us $ \ u -> compareSizeViews cmp u v+  (CmpLeq, us, vs)  -> forM_ us $ \ u -> compareBelowMax u vs+  (CmpEq,  us, vs)  -> compareMaxViews CmpLeq us vs >> compareMaxViews CmpLeq vs us+--  _ -> typeError $ NotImplemented "compareMaxViews"++-- | @compareBelowMax u vs@ checks @u <= max vs@.  Precondition: @size vs >= 2@+compareBelowMax :: DeepSizeView -> SizeMaxView -> TCM ()+compareBelowMax u vs =+  alt (dontAssignMetas $ alts $ map (compareSizeViews CmpLeq u) vs) $ do+    u <- unDeepSizeView u+    v <- unMaxView vs+    size <- sizeType+    addConstraint $ ValueCmp CmpLeq size u v+  where alt  c1 c2 = c1 `catchError` const c2+        alts []     = __IMPOSSIBLE__+        alts [c]    = c+        alts (c:cs) = c `alt` alts cs++compareSizeViews :: Comparison -> DeepSizeView -> DeepSizeView -> TCM ()+compareSizeViews cmp s1' s2' = do+  size <- sizeType+  let (s1, s2) = removeSucs (s1', s2')+      withUnView cont = do+        u <- unDeepSizeView s1+        v <- unDeepSizeView s2+        cont u v+      failure = withUnView $ \ u v -> typeError $ UnequalTerms cmp u v size+      continue cmp = withUnView $ compareAtom cmp size+  case (cmp, s1, s2) of+    (CmpLeq, _,            DSizeInf)   -> return ()+    (CmpEq,  DSizeInf,     DSizeInf)   -> return ()+    (CmpEq,  DSizeVar{},   DSizeInf)   -> failure+    (_    ,  DSizeInf,     DSizeVar{}) -> failure+    (_    ,  DSizeInf,     _         ) -> continue CmpEq+    (CmpLeq, DSizeVar i n, DSizeVar j m) | i == j -> unless (n <= m) failure+    (CmpLeq, DSizeVar i n, DSizeVar j m) | i /= j -> do+       res <- isBounded i+       case res of+         BoundedNo -> failure+         BoundedLt u' -> do+            -- now we have i < u', in the worst case i+1 = u'+            -- and we want to check i+n <= v+            v <- unDeepSizeView s2+            if n > 0 then do+              u'' <- sizeSuc (n - 1) u'+              compareSizes cmp u'' v+             else compareSizes cmp u' =<< sizeSuc 1 v+    (CmpLeq, s1,        s2)         -> withUnView $ \ u v -> do+      unlessM (trivial u v) $ addConstraint $ ValueCmp CmpLeq size u v+    (CmpEq, s1, s2) -> continue cmp++{-+-- | Compare two sizes. Only with --sized-types.+compareSizes :: Comparison -> Term -> Term -> TCM ()+compareSizes cmp u v = do+  reportSDoc "tc.conv.size" 10 $ vcat+    [ text "Comparing sizes"+    , nest 2 $ sep [ prettyTCM u <+> prettyTCM cmp+                   , prettyTCM v+                   ]+    ]+  u <- reduce u+  v <- reduce v+  reportSDoc "tc.conv.size" 15 $+      nest 2 $ sep [ text (show u) <+> prettyTCM cmp+                   , text (show v)+                   ]+  s1'  <- deepSizeView u+  s2'  <- deepSizeView v+  size <- sizeType+  let failure = typeError $ UnequalTerms cmp u v size+      (s1, s2) = removeSucs (s1', s2')+      continue cmp = do+        u <- unDeepSizeView s1+        v <- unDeepSizeView s2+        compareAtom cmp size u v+  case (cmp, s1, s2) of+    (CmpLeq, _,            DSizeInf)   -> return ()+    (CmpEq,  DSizeInf,     DSizeInf)   -> return ()+    (CmpEq,  DSizeVar{},   DSizeInf)   -> failure+    (_    ,  DSizeInf,     DSizeVar{}) -> failure+    (_    ,  DSizeInf,     _         ) -> continue CmpEq+    (CmpLeq, DSizeVar i n, DSizeVar j m) | i == j -> unless (n <= m) failure+    (CmpLeq, DSizeVar i n, DSizeVar j m) | i /= j -> do+       res <- isBounded i+       case res of+         BoundedNo -> failure+         BoundedLt u' ->+            -- now we have i < u', in the worst case i+1 = u'+            -- and we want to check i+n <= v+            if n > 0 then do+              u'' <- sizeSuc (n - 1) u'+              compareSizes cmp u'' v+             else compareSizes cmp u' =<< sizeSuc 1 v+    (CmpLeq, s1,        s2)         -> do+      u <- unDeepSizeView s1+      v <- unDeepSizeView s2+      unlessM (trivial u v) $ addConstraint $ ValueCmp CmpLeq size u v+    (CmpEq, s1, s2) -> continue cmp+-}+{-   s1   <- sizeView u   s2   <- sizeView v   size <- sizeType@@ -51,103 +237,205 @@     (_,      SizeInf,   SizeSuc v) -> compareSizes CmpEq u v     (_,      SizeSuc u, SizeSuc v) -> compareSizes cmp u v     (CmpLeq, _,         _)         ->-      ifM (trivial u v) (return ()) $-        addConstraint $ ValueCmp CmpLeq size u v+      unlessM (trivial u v) $ addConstraint $ ValueCmp CmpLeq size u v     _ -> compareAtom cmp size u v+-} +isBounded :: Nat -> TCM BoundedSize+isBounded i = do+  t <- reduce =<< typeOfBV i+  case ignoreSharing $ unEl t of+    Def x [u] -> do+      sizelt <- getBuiltin' builtinSizeLt+      return $ if (Just (Def x []) == sizelt) then BoundedLt $ unArg u else BoundedNo+    _ -> return BoundedNo+ trivial :: Term -> Term -> TCM Bool trivial u v = do     a <- sizeExpr u     b <- sizeExpr v+    let triv = case (a, b) of+          -- Andreas, 2012-02-24  filtering out more trivial constraints fixes+          -- test/lib-succeed/SizeInconsistentMeta4.agda+          ((e, n), (e', n')) -> e == e' && n <= n'+        {-+          ((Rigid i, n), (Rigid j, m)) -> i == j && n <= m+          _ -> False+        -}     reportSDoc "tc.conv.size" 15 $-      nest 2 $ sep [ text (show a) <+> text "<="+      nest 2 $ sep [ if triv then text "trivial constraint" else empty+                   , text (show a) <+> text "<="                    , text (show b)                    ]-    return $ case (a, b) of-      ((Rigid i, n), (Rigid j, m)) -> i == j && n <= m-      _ -> False+    return triv   `catchError` \_ -> return False +-- | Whenever we create a bounded size meta, add a constraint+--   expressing the bound.+--   In @boundedSizeMetaHook v tel a@, @tel@ includes the current context.+boundedSizeMetaHook :: Term -> Telescope -> Type -> TCM ()+boundedSizeMetaHook v tel0 a = do+  res <- isSizeType a+  case res of+    Just (BoundedLt u) -> do+      n <- getContextSize+      let tel | n > 0     = telFromList $ genericDrop n $ telToList tel0+              | otherwise = tel0+      addCtxTel tel $ do+        v <- sizeSuc 1 $ raise (size tel) v `apply` teleArgs tel+        -- compareSizes CmpLeq v u+        size <- sizeType+        addConstraint $ ValueCmp CmpLeq size v u+    _ -> return ()++-- | Test whether a problem consists only of size constraints.+isSizeProblem :: ProblemId -> TCM Bool+isSizeProblem pid = andM . map (isSizeConstraint . theConstraint) =<< getConstraintsForProblem pid++-- | Test is a constraint speaks about sizes.+isSizeConstraint :: Closure Constraint -> TCM Bool+isSizeConstraint (Closure{ clValue = ValueCmp _ s _ _ }) = isJust <$> isSizeType s+isSizeConstraint _ = return False+ -- | Find the size constraints.-getSizeConstraints :: TCM [SizeConstraint]+getSizeConstraints :: TCM [Closure Constraint] getSizeConstraints = do   cs   <- getAllConstraints-  size <- sizeType-  let sizeConstraints cl@(Closure{ clValue = ValueCmp CmpLeq s _ _ })-        | s == size = [cl]-      sizeConstraints _ = []-  scs <- mapM computeSizeConstraint $ concatMap (sizeConstraints . theConstraint) cs-  return [ c | Just c <- scs ]+  test <- isSizeTypeTest+  let sizeConstraint cl@Closure{ clValue = ValueCmp CmpLeq s _ _ }+              | isJust (test s) = Just cl+      sizeConstraint _ = Nothing+  return $ mapMaybe (sizeConstraint . theConstraint) cs  getSizeMetas :: TCM [(MetaId, Int)] getSizeMetas = do   ms <- getOpenMetas-  sz <- sizeType+  test <- isSizeTypeTest   let sizeCon m = do+        let nothing  = return []         mi <- lookupMeta m         case mvJudgement mi of           HasType _ a -> do             TelV tel b <- telView =<< instantiateFull a-            if b /= sz-              then return []-              else return [(m, size tel)]-          _ -> return []+            case test b of+              Nothing -> nothing+              Just _  -> return [(m, size tel)]+          _ -> nothing   concat <$> mapM sizeCon ms -data SizeExpr = SizeMeta MetaId [CtxId]-              | Rigid CtxId+{- ROLLED BACK+getSizeMetas :: TCM ([(MetaId, Int)], [SizeConstraint])+getSizeMetas = do+  ms <- getOpenMetas+  test <- isSizeTypeTest+  let sizeCon m = do+        let nothing  = return ([], [])+        mi <- lookupMeta m+        case mvJudgement mi of+          HasType _ a -> do+            TelV tel b <- telView =<< instantiateFull a+            let noConstr = return ([(m, size tel)], [])+            case test b of+              Nothing            -> nothing+              Just BoundedNo     -> noConstr+              Just (BoundedLt u) -> noConstr+{- WORKS NOT+              Just (BoundedLt u) -> flip catchError (const $ noConstr) $ do+                -- we assume the metavariable is used in an+                -- extension of its creation context+                ctxIds <- getContextId+                let a = SizeMeta m $ take (size tel) $ reverse ctxIds+                (b, n) <- sizeExpr u+                return ([(m, size tel)], [Leq a (n-1) b])+-}+          _ -> nothing+  (mss, css) <- unzip <$> mapM sizeCon ms+  return (concat mss, concat css)+-} --- Leq a n b = (a =< b + n)-data SizeConstraint = Leq SizeExpr Int SizeExpr+-- | Atomic size expressions.+data SizeExpr+  = SizeMeta MetaId [Int] -- ^ A size meta applied to de Bruijn levels.+  | Rigid Int             -- ^ A de Bruijn level.+  deriving (Eq)  instance Show SizeExpr where   show (SizeMeta m _) = "X" ++ show (fromIntegral m :: Int)-  show (Rigid i) = "c" ++ show (fromIntegral i :: Int)+  show (Rigid i)      = "c" ++ show i +-- | Size constraints we can solve.+data SizeConstraint+  = Leq SizeExpr Int SizeExpr -- ^ @Leq a +n b@ represents @a =< b + n@.+                              --   @Leq a -n b@ represents @a + n =< b@.+ instance Show SizeConstraint where   show (Leq a n b)     | n == 0    = show a ++ " =< " ++ show b     | n > 0     = show a ++ " =< " ++ show b ++ " + " ++ show n     | otherwise = show a ++ " + " ++ show (-n) ++ " =< " ++ show b -computeSizeConstraint :: Closure Constraint -> TCM (Maybe SizeConstraint)-computeSizeConstraint cl =-  enterClosure cl $ \c ->-    case c of+-- | Compute a set of size constraints that all live in the same context+--   from constraints over terms of type size that may live in different+--   contexts.+--+--   cf. 'Agda.TypeChecking.LevelConstraints.simplifyLevelConstraint'+computeSizeConstraints :: [Closure Constraint] -> TCM [SizeConstraint]+computeSizeConstraints [] = return [] -- special case to avoid maximum []+computeSizeConstraints cs = do+  scs <- mapM computeSizeConstraint leqs+  return [ c | Just c <- scs ]+  where+    -- get the constraints plus contexts they are defined in+    unClosure cl = (envContext $ clEnv cl, clValue cl)+    (gammas, ls) = unzip $ map unClosure cs+    -- compute the longest context (common water level)+    gamma        = maximumBy (compare `on` size) gammas+    waterLevel   = size gamma+    -- convert deBruijn indices to deBruijn levels to+    -- enable comparing constraints under different contexts+    leqs = zipWith raise (map ((waterLevel -) . size) gammas) ls++-- | Turn a constraint over de Bruijn levels into a size constraint.+computeSizeConstraint :: Constraint -> TCM (Maybe SizeConstraint)+computeSizeConstraint c = case c of       ValueCmp CmpLeq _ u v -> do+          reportSDoc "tc.size.solve" 50 $ sep+            [ text "converting size constraint"+            , prettyTCM c+            ]           (a, n) <- sizeExpr u           (b, m) <- sizeExpr v           return $ Just $ Leq a (m - n) b-        `catchError` \err -> case errError err of+        `catchError` \err -> case err of           PatternErr _ -> return Nothing           _            -> throwError err       _ -> __IMPOSSIBLE__ --- | Throws a 'patternViolation' if the term isn't a proper size expression.+-- | Turn a term with de Bruijn levels into a size expression with offset.+--+--   Throws a 'patternViolation' if the term isn't a proper size expression. sizeExpr :: Term -> TCM (SizeExpr, Int) sizeExpr u = do   u <- reduce u -- Andreas, 2009-02-09.                 -- This is necessary to surface the solutions of metavariables.+  reportSDoc "tc.conv.size" 60 $ text "sizeExpr:" <+> prettyTCM u   s <- sizeView u   case s of-    SizeSuc u -> do-      (e, n) <- sizeExpr u-      return (e, n + 1)-    SizeInf -> patternViolation-    OtherSize u -> case u of-      Var i []  -> do-        cxt <- getContextId-        return (Rigid (cxt !! fromIntegral i), 0)-      MetaV m args-        | all isVar args && distinct args -> do-          cxt <- getContextId-          return (SizeMeta m [ cxt !! fromIntegral i | Arg _ _ (Var i []) <- args ], 0)+    SizeInf     -> patternViolation+    SizeSuc u   -> mapSnd (+1) <$> sizeExpr u+    OtherSize u -> case ignoreSharing u of+      Var i []  -> return (Rigid i, 0)  -- i is already a de Bruijn level.+      MetaV m args | Just xs <- mapM isVar args, fastDistinct xs+                -> return (SizeMeta m xs, 0)       _ -> patternViolation   where-    isVar (Arg _ _ (Var _ [])) = True-    isVar _ = False+    isVar v = case ignoreSharing $ unArg v of+      Var i [] -> Just i+      _        -> Nothing -flexibleVariables :: SizeConstraint -> [(MetaId, [CtxId])]+-- | Compute list of size metavariables with their arguments+--   appearing in a constraint.+flexibleVariables :: SizeConstraint -> [(MetaId, [Int])] flexibleVariables (Leq a _ b) = flex a ++ flex b   where     flex (Rigid _)       = []@@ -155,89 +443,166 @@  haveSizedTypes :: TCM Bool haveSizedTypes = do-    Def _ [] <- primSize-    Def _ [] <- primSizeInf-    Def _ [] <- primSizeSuc+    Def _ [] <- ignoreSharing <$> primSize+    Def _ [] <- ignoreSharing <$> primSizeInf+    Def _ [] <- ignoreSharing <$> primSizeSuc     optSizedTypes <$> pragmaOptions   `catchError` \_ -> return False +-- | Convert size constraint into form where each meta is applied+--   to levels @0,1,..,n-1@ where @n@ is the arity of that meta.+--+--   @X[σ] <= t@ beomes @X[id] <= t[σ^-1]@+--+--   @X[σ] ≤ Y[τ]@ becomes @X[id] ≤ Y[τ[σ^-1]]@ or @X[σ[τ^1]] ≤ Y[id]@+--   whichever is defined.  If none is defined, we give up.+--+canonicalizeSizeConstraint :: SizeConstraint -> Maybe SizeConstraint+canonicalizeSizeConstraint c@(Leq a n b) =+  case (a,b) of+    (Rigid{}, Rigid{})       -> return c+    (SizeMeta m xs, Rigid i) -> do+      j <- findIndex (==i) xs+      return $ Leq (SizeMeta m [0..size xs-1]) n (Rigid j)+    (Rigid i, SizeMeta m xs) -> do+      j <- findIndex (==i) xs+      return $ Leq (Rigid j) n (SizeMeta m [0..size xs-1])+    (SizeMeta m xs, SizeMeta l ys)+         -- try to invert xs on ys+       | Just ys' <- mapM (\ y -> findIndex (==y) xs) ys ->+           return $ Leq (SizeMeta m [0..size xs-1]) n (SizeMeta l ys')+         -- try to invert ys on xs+       | Just xs' <- mapM (\ x -> findIndex (==x) ys) xs ->+           return $ Leq (SizeMeta m xs') n (SizeMeta l [0..size ys-1])+         -- give up+       | otherwise -> Nothing+ solveSizeConstraints :: TCM () solveSizeConstraints = whenM haveSizedTypes $ do-  cs <- getSizeConstraints+  reportSLn "tc.size.solve" 70 $ "Considering to solve size constraints"+  cs0 <- getSizeConstraints+  cs <- computeSizeConstraints cs0   ms <- getSizeMetas+{- ROLLED BACK+  cs0 <- getSizeConstraints+  cs1 <- computeSizeConstraints cs0+  (ms,cs2) <- getSizeMetas+  let cs = cs2 ++ cs1+-}   when (not (null cs) || not (null ms)) $ do   reportSLn "tc.size.solve" 10 $ "Solving size constraints " ++ show cs -  let metas0 = map mkMeta $ groupOn fst $ concatMap flexibleVariables cs+  cs <- return $ mapMaybe canonicalizeSizeConstraint cs+  reportSLn "tc.size.solve" 10 $ "Canonicalized constraints: " ++ show cs++  let -- Error for giving up+      cannotSolve = typeError . GenericDocError =<<+        vcat (text "Cannot solve size constraints" : map prettyTCM cs0)++{- OLD, before canonicalize++      -- Ensure that each occurrence of a meta is applied to the same+      -- arguments ("flexible variables").+      -- Andreas, 2012-10-16 this is now redundant+      mkMeta :: [(MetaId, [Int])] -> TCM (MetaId, [Int])       mkMeta ms@((m, xs) : _)-        | allEqual (map snd ms) = (m, xs)-        | otherwise             = error $ "Inconsistent meta: " ++ show m ++ " " ++ show (map snd ms)+        | allEqual (map snd ms) = return (m, xs)+        | otherwise             = do+            reportSLn "tc.size.solve" 20 $+              "Size meta variable " ++ show m ++ " not always applied to same arguments: " ++ show (nub (map snd ms))+            cannotSolve       mkMeta _ = __IMPOSSIBLE__ -      mkFlex (m, xs) = W.NewFlex (fromIntegral m) $ \i -> fromIntegral i `elem` xs+  metas0 <- mapM mkMeta $ groupOn fst $ concatMap flexibleVariables cs ++  let mkFlex (m, xs) = W.NewFlex (fromIntegral m) $ \i -> fromIntegral i `elem` xs+-}++  let metas0 :: [(MetaId, Int)]  -- meta id + arity+      metas0 = nub $ map (mapSnd length) $ concatMap flexibleVariables cs++      mkFlex (m, ar) = W.NewFlex (fromIntegral m) $ \i -> fromIntegral i < ar+       mkConstr (Leq a n b)  = W.Arc (mkNode a) n (mkNode b)-      mkNode (Rigid i)      = W.Rigid $ W.RVar $ fromIntegral i+      mkNode (Rigid i)      = W.Rigid $ W.RVar i       mkNode (SizeMeta m _) = W.Flex $ fromIntegral m        found (m, _) = elem m $ map fst metas0 +      -- Compute unconstrained metas+      metas1 = filter (not . found) ms++{- OLD, before canonicalize   -- Compute unconstrained metas   let metas1 = map mkMeta' $ filter (not . found) ms       mkMeta' (m, n) = (m, [0..fromIntegral n - 1])+-}    let metas = metas0 ++ metas1    reportSLn "tc.size.solve" 15 $ "Metas: " ++ show metas0 ++ ", " ++ show metas1 -  verboseS "tc.size.solve" 20 $ do-    let meta (m, _) = do-          j <- mvJudgement <$> lookupMeta m-          reportSDoc "" 0 $ prettyTCM j-    mapM_ meta metas+  verboseS "tc.size.solve" 20 $+      -- debug print the type of all size metas+      forM_ metas $ \ (m, _) ->+          reportSDoc "" 0 $ prettyTCM =<< mvJudgement <$> lookupMeta m +  -- run the Warshall solver   case W.solve $ map mkFlex metas ++ map mkConstr cs of-    Nothing  -> do-      typeError $ GenericError $ "Unsolvable size constraints: " ++ show cs+    Nothing  -> cannotSolve     Just sol -> do       reportSLn "tc.size.solve" 10 $ "Solved constraints: " ++ show sol-      inf <- primSizeInf-      s <- primSizeSuc+      s     <- primSizeSuc+      infty <- primSizeInf       let suc v = s `apply` [defaultArg v]           plus v 0 = v           plus v n = suc $ plus v (n - 1)            inst (i, e) = do-            let m = fromIntegral i++            let m = fromIntegral i  -- meta variable identifier+                ar = maybe __IMPOSSIBLE__ id $ lookup m metas  -- meta var arity++{- OLD                 args = case lookup m metas of                   Just xs -> xs                   Nothing -> __IMPOSSIBLE__+-} +                term (W.SizeConst W.Infinite) = infty+                term (W.SizeVar j n) | j < ar = plus (var $ ar - j - 1) n+                term _                        = __IMPOSSIBLE__++{- OLD                 term (W.SizeConst (W.Finite _)) = __IMPOSSIBLE__-                term (W.SizeConst W.Infinite) = primSizeInf                 term (W.SizeVar j n) = case findIndex (==fromIntegral j) $ reverse args of-                  Just x -> return $ plus (Var (fromIntegral x) []) n+                  Just x -> return $ plus (var x) n                   Nothing -> __IMPOSSIBLE__--                lam _ v = Lam NotHidden $ Abs "s" v+-}+                lam _ v = Lam NotHidden $ Abs "s" v -- hiding does not matter -            b <- term e-            let v = foldr lam b args -- TODO: correct hiding+                -- convert size expression to term and abstract+                v = flip (foldr lam) [0..ar-1] $ term e              reportSDoc "tc.size.solve" 20 $ sep               [ text (show m) <+> text ":="               , nest 2 $ prettyTCM v               ] -            assignTerm m v+            -- Andreas, 2012-09-25: do not assign interaction metas to \infty+            let isInf (W.SizeConst W.Infinite) = True+                isInf _                        = False+            unlessM (isInteractionMeta m `and2M` return (isInf e)) $+              assignTerm m v        mapM_ inst $ Map.toList sol --- type Solution = Map Int SizeExpr--- data SizeExpr = SizeVar Int Int   -- e.g. x + 5---               | SizeConst Weight  -- a number or infinity--- data Weight = Finite Int | Infinite--- data Node = Rigid Rigid---           | Flex  FlexId--- data Rigid = RConst Weight---            | RVar RigidId+      -- Andreas, 2012-09-19+      -- The returned solution might not be consistent with+      -- the hypotheses on rigid vars (j : Size< i).+      -- Thus, we double check that all size constraints+      -- have been solved correctly.+      flip catchError (const cannotSolve) $+        noConstraints $+          forM_ cs0 $ \ cl -> enterClosure cl solveConstraint
src/full/Agda/TypeChecking/Substitute.hs view
@@ -1,4 +1,4 @@-{-# LANGUAGE CPP, TypeSynonymInstances, FlexibleInstances,+{-# LANGUAGE CPP, TypeSynonymInstances, FlexibleInstances, OverlappingInstances,     DeriveDataTypeable, DeriveFunctor, StandaloneDeriving #-} module Agda.TypeChecking.Substitute where @@ -6,7 +6,7 @@ import Control.Monad.Reader import Control.Arrow ((***)) -import Data.Generics (Typeable, Data)+import Data.Typeable (Typeable) import Data.List hiding (sort) import qualified Data.List as List import Data.Function@@ -16,9 +16,10 @@  import Agda.Syntax.Common import Agda.Syntax.Internal+import Agda.Syntax.Position -import Agda.TypeChecking.Monad.Base-import Agda.TypeChecking.Free+import Agda.TypeChecking.Monad.Base as Base+import Agda.TypeChecking.Free as Free import Agda.TypeChecking.CompiledClause  import Agda.Utils.Monad@@ -42,6 +43,7 @@             Con c args'   -> Con c (args' ++ args)             Lam _ u       -> absApp u (unArg a) `apply` args0             MetaV x args' -> MetaV x (args' ++ args)+            Shared p      -> Shared $ apply p args             Lit{}         -> __IMPOSSIBLE__             Level{}       -> __IMPOSSIBLE__             Pi _ _        -> __IMPOSSIBLE__@@ -56,47 +58,56 @@   apply s [] = s   apply s _  = __IMPOSSIBLE__ +instance Apply a => Apply (Ptr a) where+  apply p xs = fmap (`apply` xs) p+ instance Subst a => Apply (Tele a) where   apply tel               []       = tel   apply EmptyTel          _        = __IMPOSSIBLE__   apply (ExtendTel _ tel) (t : ts) = absApp tel (unArg t) `apply` ts  instance Apply Definition where-    apply (Defn rel x t df m c d) args = Defn rel x (piApply t args) df m c (apply d args)+  apply (Defn rel x t pol occ df m c d) args = Defn rel x (piApply t args) (apply pol args) (apply occ args) df m c (apply d args) +instance Apply [Base.Occurrence] where+  apply occ args = drop (length args) occ++instance Apply [Polarity] where+  apply pol args = drop (length args) pol+ instance Apply Defn where   apply d [] = d   apply d args = case d of     Axiom{} -> d     Function{ funClauses = cs, funCompiled = cc, funInv = inv-            , funProjection = Nothing, funArgOccurrences = occ } ->+            , funProjection = Nothing {-, funArgOccurrences = occ -} } ->       d { funClauses    = apply cs args         , funCompiled   = apply cc args         , funInv        = apply inv args-        , funArgOccurrences = drop (length args) occ+--        , funArgOccurrences = drop (length args) occ         }     Function{ funClauses = cs, funCompiled = cc, funInv = inv-            , funProjection = Just (r, n), funArgOccurrences = occ }+            , funProjection = Just (r, n) {-, funArgOccurrences = occ -} }       | m < n  -> d { funProjection = Just (r, n - m) }       | otherwise ->         d { funClauses        = apply cs args'           , funCompiled       = apply cc args'           , funInv            = apply inv args'           , funProjection     = Just (r, 0)-          , funArgOccurrences = drop 1 occ+--          , funArgOccurrences = drop 1 occ           }       where args' = [last args]             m = size args     Datatype{ dataPars = np, dataClause = cl-            , dataArgOccurrences = occ } ->+            {-, dataArgOccurrences = occ-} } ->       d { dataPars = np - size args, dataClause = apply cl args-        , dataArgOccurrences = drop (length args) occ+--        , dataArgOccurrences = drop (length args) occ         }     Record{ recPars = np, recConType = t, recClause = cl, recTel = tel-          , recArgOccurrences = occ } ->+          {-, recArgOccurrences = occ-} } ->       d { recPars = np - size args, recConType = apply t args         , recClause = apply cl args, recTel = apply tel args-        , recArgOccurrences = drop (length args) occ+--        , recArgOccurrences = drop (length args) occ         }     Constructor{ conPars = np } ->       d { conPars = np - size args }@@ -116,9 +127,11 @@     Fail     -> Fail     Done hs t       | length hs >= len -> Done (drop len hs)-                                 (substs ([ Var (fromIntegral i) []-                                          | i <- [0..length hs - len - 1]] ++-                                          map unArg args) t)+                                 (applySubst+                                    (parallelS $+                                       [ var i | i <- [0..length hs - len - 1]] +++                                       map unArg args)+                                    t)       | otherwise -> __IMPOSSIBLE__     Case n bs       | n >= len  -> Case (n - len) (apply bs args)@@ -126,6 +139,9 @@     where       len = length args +instance Apply a => Apply (WithArity a) where+  apply (WithArity n a) args = WithArity n $ apply a args+ instance Apply a => Apply (Case a) where   apply (Branches cs ls m) args =     Branches (apply cs args) (apply ls args) (apply m args)@@ -138,7 +154,7 @@     apply  b                 []       = b     apply (Bind (Abs   _ b)) (a:args) = subst (unArg a) b `apply` args     apply (Bind (NoAbs _ b)) (_:args) = b `apply` args-    apply (Body _)           (_:_)    = __IMPOSSIBLE__+    apply (Body v)           args     = Body $ v `apply` args     apply  NoBody             _       = NoBody  instance Apply DisplayTerm where@@ -182,6 +198,7 @@ piApply :: Type -> Args -> Type piApply t []                      = t piApply (El _ (Pi  _ b)) (a:args) = absApp b (unArg a) `piApply` args+piApply (El s (Shared p)) args    = piApply (El s $ derefPtr p) args piApply _ _                       = __IMPOSSIBLE__  -- | @(abstract args v) args --> v[args]@.@@ -203,29 +220,38 @@   abstract (ExtendTel arg tel') tel = ExtendTel arg $ fmap (`abstract` tel) tel'  instance Abstract Definition where-    abstract tel (Defn rel x t df m c d) = Defn rel x (abstract tel t) df m c (abstract tel d)+  abstract tel (Defn rel x t pol occ df m c d) =+    Defn rel x (abstract tel t) (abstract tel pol) (abstract tel occ) df m c (abstract tel d) +instance Abstract [Base.Occurrence] where+  abstract tel []  = []+  abstract tel occ = replicate (size tel) Mixed ++ occ -- TODO: check occurrence++instance Abstract [Polarity] where+  abstract tel []  = []+  abstract tel pol = replicate (size tel) Invariant ++ pol -- TODO: check polarity+ instance Abstract Defn where   abstract tel d = case d of     Axiom{} -> d     Function{ funClauses = cs, funCompiled = cc, funInv = inv-            , funProjection = Nothing, funArgOccurrences = occ } ->+            , funProjection = Nothing {-, funArgOccurrences = occ-} } ->       d { funClauses = abstract tel cs, funCompiled = abstract tel cc         , funInv = abstract tel inv-        , funArgOccurrences = replicate (size tel) Negative ++ occ -- TODO: check occurrence+--        , funArgOccurrences = replicate (size tel) Mixed ++ occ -- TODO: check occurrence         }     Function{ funClauses = cs, funCompiled = cc, funInv = inv-            , funProjection = Just (r, n), funArgOccurrences = occ } ->+            , funProjection = Just (r, n) {-, funArgOccurrences = occ-} } ->       d { funProjection = Just (r, n + size tel) }-    Datatype{ dataPars = np, dataClause = cl, dataArgOccurrences = occ } ->+    Datatype{ dataPars = np, dataClause = cl {-, dataArgOccurrences = occ-} } ->       d { dataPars = np + size tel, dataClause = abstract tel cl-        , dataArgOccurrences = replicate (size tel) Negative ++ occ -- TODO: check occurrence+--        , dataArgOccurrences = replicate (size tel) Mixed ++ occ -- TODO: check occurrence         }     Record{ recPars = np, recConType = t, recClause = cl, recTel = tel'-          , recArgOccurrences = occ } ->+          {-, recArgOccurrences = occ-} } ->       d { recPars = np + size tel, recConType = abstract tel t         , recClause = abstract tel cl, recTel = abstract tel tel'-        , recArgOccurrences = replicate (size tel) Negative ++ occ -- TODO: check occurrence+--        , recArgOccurrences = replicate (size tel) Mixed ++ occ -- TODO: check occurrence         }     Constructor{ conPars = np } ->       d { conPars = np + size tel }@@ -243,16 +269,20 @@  instance Abstract CompiledClauses where   abstract tel Fail = Fail-  abstract tel (Done xs t) = Done (map (fmap fst) (telToList tel) ++ xs) t+  abstract tel (Done xs t) = Done (map (argFromDom . fmap fst) (telToList tel) ++ xs) t   abstract tel (Case n bs) =     Case (n + fromIntegral (size tel)) (abstract tel bs) +instance Abstract a => Abstract (WithArity a) where+  abstract tel (WithArity n a) = WithArity n $ abstract tel a+ instance Abstract a => Abstract (Case a) where   abstract tel (Branches cs ls m) =     Branches (abstract tel cs) (abstract tel ls) (abstract tel m) +telVars :: Telescope -> [Arg Pattern] telVars EmptyTel                    = []-telVars (ExtendTel arg tel) = fmap (const $ VarP $ absName tel) arg : telVars (unAbs tel)+telVars (ExtendTel (Dom h r a) tel) = Arg h r (VarP $ absName tel) : telVars (unAbs tel)  instance Abstract FunctionInverse where   abstract tel NotInjective  = NotInjective@@ -274,262 +304,203 @@ abstractArgs :: Abstract a => Args -> a -> a abstractArgs args x = abstract tel x     where-        tel   = foldr (\(Arg h r x) -> ExtendTel (Arg h r $ sort Prop) . Abs x) EmptyTel+        tel   = foldr (\(Arg h r x) -> ExtendTel (Dom h r $ sort Prop) . Abs x) EmptyTel               $ zipWith (fmap . const) names args         names = cycle $ map (:[]) ['a'..'z']  -- | Substitutions. -type Substitution = [Term]+infixr 4 :#+data Substitution --- | Substitute a term for the nth free variable.----class Subst t where-    substs     :: Substitution -> t -> t-    substUnder :: Nat -> Term -> t -> t+  = IdS                     -- Γ ⊢ IdS : Γ -idSub :: Telescope -> Substitution-idSub tel = [ Var i [] | i <- [0..size tel - 1] ]+  | EmptyS                  -- Γ ⊢ EmptyS : () -subst :: Subst t => Term -> t -> t-subst u t = substUnder 0 u t+                            --      Γ ⊢ ρ : Δ+  | Wk !Int Substitution    -- -------------------+                            -- Γ, Ψ ⊢ Wk |Ψ| ρ : Δ -instance Subst Term where-    substs us t =-        case t of-            Var i vs    -> (us !!! i) `apply` substs us vs-            Lam h m     -> Lam h $ substs us m-            Def c vs    -> Def c $ substs us vs-            Con c vs    -> Con c $ substs us vs-            MetaV x vs  -> MetaV x $ substs us vs-            Lit l       -> Lit l-            Level l     -> levelTm $ substs us l-            Pi a b      -> uncurry Pi $ substs us (a,b)-            Sort s      -> sortTm $ substs us s-            DontCare mv -> DontCare $ substs us mv-        where-            []     !!! n = __IMPOSSIBLE__-            (x:xs) !!! 0 = x-            (_:xs) !!! n = xs !!! (n - 1)-    substUnder n u t =-        case t of-            Var i vs-              | i == n    -> raise n u `apply` substUnder n u vs-              | i < n     -> Var i $ substUnder n u vs-              | otherwise -> Var (i - 1) $ substUnder n u vs-            Lam h m    -> Lam h $ substUnder n u m-            Def c vs   -> Def c $ substUnder n u vs-            Con c vs   -> Con c $ substUnder n u vs-            MetaV x vs -> MetaV x $ substUnder n u vs-            Level l    -> levelTm $ substUnder n u l-            Lit l      -> Lit l-            Pi a b     -> uncurry Pi $ substUnder n u (a,b)-            Sort s     -> sortTm $ substUnder n u s-            DontCare mv -> DontCare $ substUnder n u mv+                            -- Γ ⊢ u : Aρ  Γ ⊢ ρ : Δ+  | Term :# Substitution    -- ---------------------+                            --   Γ ⊢ u :# ρ : Δ, A -instance Subst Type where-    substs us (El s t) = substs us s `El` substs us t-    substUnder n u (El s t) = substUnder n u s `El` substUnder n u t+                            --        Γ ⊢ ρ : Δ+  | Lift !Int Substitution  -- -------------------------+                            -- Γ, Ψρ ⊢ Lift |Ψ| ρ : Δ, Ψ+  deriving (Eq, Ord, Show) -instance Subst Sort where-    substs us s = case s of-      Type n     -> levelSort $ sub n-      Prop       -> Prop-      Inf        -> Inf-      DLub s1 s2 -> DLub (sub s1) (sub s2)-      where sub x = substs us x+idS :: Substitution+idS = IdS -    substUnder n u s = case s of-      Type n     -> levelSort $ sub n-      Prop       -> Prop-      Inf        -> Inf-      DLub s1 s2 -> DLub (sub s1) (sub s2)-      where sub x = substUnder n u x+wkS :: Int -> Substitution -> Substitution+wkS 0 rho        = rho+wkS n (Wk m rho) = Wk (n + m) rho+wkS n EmptyS     = EmptyS+wkS n rho        = Wk n rho -instance Subst Level where-  substs us (Max as) = Max $ substs us as-  substUnder n u (Max as) = Max $ substUnder n u as+raiseS :: Int -> Substitution+raiseS n = wkS n idS -instance Subst PlusLevel where-  substs us l@ClosedLevel{} = l-  substs us (Plus n l) = Plus n $ substs us l-  substUnder n u l@ClosedLevel{} = l-  substUnder n u (Plus m l) = Plus m $ substUnder n u l+singletonS :: Term -> Substitution+singletonS u = u :# idS -instance Subst LevelAtom where-  substs us      (MetaLevel m vs)   = MetaLevel m    $ substs us vs-  substs us      (BlockedLevel m v) = BlockedLevel m $ substs us v-  substs us      (NeutralLevel v)   = UnreducedLevel $ substs us v-  substs us      (UnreducedLevel v) = UnreducedLevel $ substs us v-  substUnder n u (MetaLevel m vs)   = MetaLevel m    $ substUnder n u vs-  substUnder n u (BlockedLevel m v) = BlockedLevel m $ substUnder n u v-  substUnder n u (NeutralLevel v)   = UnreducedLevel $ substUnder n u v-  substUnder n u (UnreducedLevel v) = UnreducedLevel $ substUnder n u v+liftS :: Int -> Substitution -> Substitution+liftS 0 rho          = rho+liftS k IdS          = IdS+liftS k (Lift n rho) = Lift (n + k) rho+liftS k rho          = Lift k rho -instance Subst Pattern where-  substs us p = case p of-    VarP s       -> VarP s-    LitP l       -> LitP l-    ConP c mt ps -> ConP c (substs us mt) $ substs us ps-    DotP t       -> DotP $ substs us t-  substUnder n u p = case p of-    VarP s       -> VarP s-    LitP l       -> LitP l-    ConP c mt ps -> ConP c (substUnder n u mt) $ substUnder n u ps-    DotP t       -> DotP $ substUnder n u t+dropS :: Int -> Substitution -> Substitution+dropS 0 rho          = rho+dropS n IdS          = raiseS n+dropS n (Wk m rho)   = wkS m (dropS n rho)+dropS n (u :# rho)   = dropS (n - 1) rho+dropS n (Lift 0 rho) = __IMPOSSIBLE__+dropS n (Lift m rho) = wkS 1 $ dropS (n - 1) $ liftS (m - 1) rho+dropS n EmptyS       = __IMPOSSIBLE__ -instance Subst t => Subst (Blocked t) where-    substs us b      = fmap (substs us) b-    substUnder n u b = fmap (substUnder n u) b+-- | @applySubst (ρ `composeS` σ) v == applySubst ρ (applySubst σ v)@+composeS :: Substitution -> Substitution -> Substitution+composeS rho IdS = rho+composeS IdS sgm = sgm+composeS rho EmptyS = EmptyS+composeS rho (Wk n sgm) = composeS (dropS n rho) sgm+composeS rho (u :# sgm) = applySubst rho u :# composeS rho sgm+composeS rho (Lift 0 sgm) = __IMPOSSIBLE__+composeS (u :# rho) (Lift n sgm) = u :# composeS rho (liftS (n - 1) sgm)+composeS rho (Lift n sgm) = lookupS rho 0 :# composeS rho (wkS 1 (liftS (n - 1) sgm)) -instance Subst DisplayTerm where-  substs us      (DTerm v)        = DTerm $ substs us v-  substs us      (DDot v)         = DDot  $ substs us v-  substs us      (DCon c vs)      = DCon c $ substs us vs-  substs us      (DDef c vs)      = DDef c $ substs us vs-  substs us      (DWithApp vs ws) = uncurry DWithApp $ substs us (vs, ws)-  substUnder n u (DTerm v)        = DTerm $ substUnder n u v-  substUnder n u (DDot  v)        = DDot  $ substUnder n u v-  substUnder n u (DCon c vs)      = DCon c $ substUnder n u vs-  substUnder n u (DDef c vs)      = DDef c $ substUnder n u vs-  substUnder n u (DWithApp vs ws) = uncurry DWithApp $ substUnder n u (vs, ws)+-- If Γ ⊢ ρ : Δ, Θ then splitS |Θ| ρ = (σ, δ), with+--   Γ ⊢ σ : Δ+--   Γ ⊢ δ : Θσ+splitS :: Int -> Substitution -> (Substitution, Substitution)+splitS 0 rho          = (rho, EmptyS)+splitS n (u :# rho)   = id *** (u :#) $ splitS (n - 1) rho+splitS n (Lift 0 _)   = __IMPOSSIBLE__+splitS n (Wk m rho)   = wkS m *** wkS m $ splitS n rho+splitS n IdS          = (raiseS n, liftS n EmptyS)+splitS n (Lift m rho) = wkS 1 *** liftS 1 $ splitS (n - 1) (liftS (m - 1) rho)+splitS n EmptyS       = __IMPOSSIBLE__ -instance Subst a => Subst (Tele a) where-  substs us  EmptyTel              = EmptyTel-  substs us (ExtendTel t tel)      = uncurry ExtendTel $ substs us (t, tel)-  substUnder n u  EmptyTel         = EmptyTel-  substUnder n u (ExtendTel t tel) = uncurry ExtendTel $ substUnder n u (t, tel)+infixr 4 ++# -instance Subst a => Subst (Abs a) where-    substs us      (Abs   x t) = Abs   x $ substs (Var 0 [] : raise 1 us) t-    substs us      (NoAbs x t) = NoAbs x $ substs us t-    substUnder n u (Abs   x t) = Abs   x $ substUnder (n + 1) u t-    substUnder n u (NoAbs x t) = NoAbs x $ substUnder n u t+(++#) :: [Term] -> Substitution -> Substitution+us ++# rho = foldr (:#) rho us -instance Subst a => Subst (Arg a) where-    substs us      = fmap (substs us)-    substUnder n u = fmap (substUnder n u)+parallelS :: [Term] -> Substitution+parallelS us = us ++# idS -instance Subst a => Subst (Maybe a) where-  substs us      = fmap (substs us)-  substUnder n u = fmap (substUnder n u)+lookupS :: Substitution -> Nat -> Term+lookupS rho i = case rho of+  IdS                    -> var i+  Wk n IdS               -> let j = i + n in+                            if  j < 0 then __IMPOSSIBLE__ else var j+  Wk n rho               -> applySubst (raiseS n) (lookupS rho i)+  u :# rho   | i == 0    -> u+             | i < 0     -> __IMPOSSIBLE__+             | otherwise -> lookupS rho (i - 1)+  Lift n rho | i < n     -> var i+             | otherwise -> raise n $ lookupS rho (i - n)+  EmptyS                 -> __IMPOSSIBLE__ -instance Subst a => Subst [a] where-    substs us      = map (substs us)-    substUnder n u = map (substUnder n u)+-- | Apply a substitution. -instance (Subst a, Subst b) => Subst (a,b) where-    substs us (x,y)      = (substs us x, substs us y)-    substUnder n u (x,y) = (substUnder n u x, substUnder n u y)+-- For terms:+--+--  Γ ⊢ ρ : Δ+--  Δ ⊢ t : σ+-- -----------+-- Γ ⊢ tρ : σρ -instance Subst ClauseBody where-    substs us (Body t)        = Body $ substs us t-    substs us (Bind b)        = Bind $ substs us b-    substs _   NoBody         = NoBody-    substUnder n u (Body t)   = Body $ substUnder n u t-    substUnder n u (Bind b)   = Bind $ substUnder n u b-    substUnder _ _   NoBody   = NoBody+class Subst t where+  applySubst :: Substitution -> t -> t --- | Add @k@ to index of each open variable in @x@.-class Raise t where-    raiseFrom :: Nat -> Nat -> t -> t-    renameFrom :: Nat -> (Nat -> Nat) -> t -> t+raise :: Subst t => Nat -> t -> t+raise = raiseFrom 0 -instance Raise () where-  raiseFrom  _ _ _ = ()-  renameFrom _ _ _ = ()+raiseFrom :: Subst t => Nat -> Nat -> t -> t+raiseFrom n k = applySubst (liftS n $ raiseS k) -instance Raise Term where-    raiseFrom m k v =-        case v of-            Var i vs-                | i < m     -> Var i $ rf vs-                | otherwise -> Var (i + k) $ rf vs-            Lam h m         -> Lam h $ rf m-            Def c vs        -> Def c $ rf vs-            Con c vs        -> Con c $ rf vs-            MetaV x vs      -> MetaV x $ rf vs-            Level l         -> Level $ rf l-            Lit l           -> Lit l-            Pi a b          -> uncurry Pi $ rf (a,b)-            Sort s          -> Sort $ rf s-            DontCare mv     -> DontCare $ rf mv-        where-            rf x = raiseFrom m k x+subst :: Subst t => Term -> t -> t+subst u t = substUnder 0 u t -    renameFrom m k v =-        case v of-            Var i vs-                | i < m     -> Var i $ rf vs-                | otherwise -> Var (k (i - m) + m) $ rf vs-            Lam h m         -> Lam h $ rf m-            Def c vs        -> Def c $ rf vs-            Con c vs        -> Con c $ rf vs-            MetaV x vs      -> MetaV x $ rf vs-            Level l         -> Level $ rf l-            Lit l           -> Lit l-            Pi a b          -> uncurry Pi $ rf (a,b)-            Sort s          -> Sort $ rf s-            DontCare mv     -> DontCare $ rf mv-        where-            rf x = renameFrom m k x+substUnder :: Subst t => Nat -> Term -> t -> t+substUnder n u = applySubst (liftS n (singletonS u)) -instance Raise Type where-    raiseFrom m k (El s t) = raiseFrom m k s `El` raiseFrom m k t-    renameFrom m k (El s t) = renameFrom m k s `El` renameFrom m k t+instance Subst Substitution where+  applySubst rho sgm = composeS rho sgm -instance Raise Sort where-    raiseFrom m k s = case s of-      Type n     -> Type $ rf n-      Prop       -> Prop-      Inf        -> Inf-      DLub s1 s2 -> DLub (rf s1) (rf s2)-      where rf x = raiseFrom m k x+instance Subst Term where+  applySubst IdS t = t+  applySubst rho t    = case t of+    Var i vs    -> lookupS rho i `apply` applySubst rho vs+    Lam h m     -> Lam h $ applySubst rho m+    Def c vs    -> Def c $ applySubst rho vs+    Con c vs    -> Con c $ applySubst rho vs+    MetaV x vs  -> MetaV x $ applySubst rho vs+    Lit l       -> Lit l+    Level l     -> levelTm $ applySubst rho l+    Pi a b      -> uncurry Pi $ applySubst rho (a,b)+    Sort s      -> sortTm $ applySubst rho s+    Shared p    -> Shared $ applySubst rho p+    DontCare mv -> DontCare $ applySubst rho mv -    renameFrom m k s = case s of-      Type n     -> Type $ rf n-      Prop       -> Prop-      Inf        -> Inf-      DLub s1 s2 -> DLub (rf s1) (rf s2)-      where rf x = renameFrom m k x+instance Subst a => Subst (Ptr a) where+  applySubst rho = fmap (applySubst rho) -instance Raise Level where-  raiseFrom m k (Max as) = Max $ raiseFrom m k as-  renameFrom m k (Max as) = Max $ renameFrom m k as+instance Subst Type where+  applySubst rho (El s t) = applySubst rho s `El` applySubst rho t -instance Raise PlusLevel where-  raiseFrom m k l@ClosedLevel{} = l-  raiseFrom m k (Plus n l) = Plus n $ raiseFrom m k l-  renameFrom m k l@ClosedLevel{} = l-  renameFrom m k (Plus n l) = Plus n $ renameFrom m k l+instance Subst Sort where+  applySubst rho s = case s of+    Type n     -> levelSort $ sub n+    Prop       -> Prop+    Inf        -> Inf+    DLub s1 s2 -> DLub (sub s1) (sub s2)+    where sub x = applySubst rho x -instance Raise LevelAtom where-  raiseFrom m k l = case l of-    MetaLevel n vs   -> MetaLevel n $ raiseFrom m k vs-    NeutralLevel v   -> NeutralLevel $ raiseFrom m k v-    BlockedLevel n v -> BlockedLevel n $ raiseFrom m k v-    UnreducedLevel v -> UnreducedLevel $ raiseFrom m k v-  renameFrom m k l = case l of-    MetaLevel n vs   -> MetaLevel n $ renameFrom m k vs-    NeutralLevel v   -> NeutralLevel $ renameFrom m k v-    BlockedLevel n v -> BlockedLevel n $ renameFrom m k v-    UnreducedLevel v -> UnreducedLevel $ renameFrom m k v+instance Subst Level where+  applySubst rho (Max as) = Max $ applySubst rho as -instance Raise Constraint where-  raiseFrom m k c = case c of-    ValueCmp cmp a u v       -> ValueCmp cmp (rf a) (rf u) (rf v)-    ElimCmp ps a v e1 e2     -> ElimCmp ps (rf a) (rf v) (rf e1) (rf e2)-    TypeCmp cmp a b          -> TypeCmp cmp (rf a) (rf b)-    TelCmp a b cmp tel1 tel2 -> TelCmp (rf a) (rf b) cmp (rf tel1) (rf tel2)-    SortCmp cmp s1 s2        -> SortCmp cmp (rf s1) (rf s2)-    LevelCmp cmp l1 l2       -> LevelCmp cmp (rf l1) (rf l2)-    Guarded c cs             -> Guarded (rf c) cs-    IsEmpty a                -> IsEmpty (rf a)-    FindInScope{}            -> c-    UnBlock{}                -> c-    where-      rf x = raiseFrom m k x-  renameFrom m k c = case c of+instance Subst PlusLevel where+  applySubst rho l@ClosedLevel{} = l+  applySubst rho (Plus n l) = Plus n $ applySubst rho l++instance Subst LevelAtom where+  applySubst rho      (MetaLevel m vs)   = MetaLevel m    $ applySubst rho vs+  applySubst rho      (BlockedLevel m v) = BlockedLevel m $ applySubst rho v+  applySubst rho      (NeutralLevel v)   = UnreducedLevel $ applySubst rho v+  applySubst rho      (UnreducedLevel v) = UnreducedLevel $ applySubst rho v++instance Subst Pattern where+  applySubst rho p = case p of+    VarP s       -> VarP s+    LitP l       -> LitP l+    ConP c mt ps -> ConP c (applySubst rho mt) $ applySubst rho ps+    DotP t       -> DotP $ applySubst rho t++instance Subst t => Subst (Blocked t) where+  applySubst rho b      = fmap (applySubst rho) b++instance Subst DisplayForm where+  applySubst rho (Display n ps v) =+    Display n (applySubst (liftS 1 rho) ps)+              (applySubst (liftS n rho) v)++instance Subst DisplayTerm where+  applySubst rho      (DTerm v)        = DTerm $ applySubst rho v+  applySubst rho      (DDot v)         = DDot  $ applySubst rho v+  applySubst rho      (DCon c vs)      = DCon c $ applySubst rho vs+  applySubst rho      (DDef c vs)      = DDef c $ applySubst rho vs+  applySubst rho      (DWithApp vs ws) = uncurry DWithApp $ applySubst rho (vs, ws)++instance Subst a => Subst (Tele a) where+  applySubst rho  EmptyTel              = EmptyTel+  applySubst rho (ExtendTel t tel)      = uncurry ExtendTel $ applySubst rho (t, tel)++instance Subst Constraint where+  applySubst rho c = case c of     ValueCmp cmp a u v       -> ValueCmp cmp (rf a) (rf u) (rf v)     ElimCmp ps a v e1 e2     -> ElimCmp ps (rf a) (rf v) (rf e1) (rf e2)     TypeCmp cmp a b          -> TypeCmp cmp (rf a) (rf b)@@ -537,132 +508,76 @@     SortCmp cmp s1 s2        -> SortCmp cmp (rf s1) (rf s2)     LevelCmp cmp l1 l2       -> LevelCmp cmp (rf l1) (rf l2)     Guarded c cs             -> Guarded (rf c) cs-    IsEmpty a                -> IsEmpty (rf a)-    FindInScope{}            -> c+    IsEmpty r a              -> IsEmpty r (rf a)+    FindInScope m cands      -> FindInScope m (rf cands)     UnBlock{}                -> c     where-      rf x = renameFrom m k x+      rf x = applySubst rho x -instance Raise Elim where-  raiseFrom m k e = case e of-    Apply v -> Apply (raiseFrom m k v)-    Proj{}  -> e-  renameFrom m k e = case e of-    Apply v -> Apply (renameFrom m k v)+instance Subst Elim where+  applySubst rho e = case e of+    Apply v -> Apply (applySubst rho v)     Proj{}  -> e -instance Raise ClauseBody where-  raiseFrom m k b = case b of-    Body v   -> Body $ rf v-    NoBody   -> NoBody-    Bind b   -> Bind $ rf b-    where rf x = raiseFrom m k x-  renameFrom m k b = case b of-    Body v   -> Body $ rf v-    NoBody   -> NoBody-    Bind b   -> Bind $ rf b-    where rf x = renameFrom m k x---- Andreas, 2010-09-09 raise dot patterns and type info embedded in a pattern-instance Raise Pattern where-    raiseFrom m k p = case p of-      DotP t -> DotP $ raiseFrom m k t-      ConP c mt ps -> ConP c (raiseFrom m k mt) (raiseFrom m k ps)-      VarP x -> p-      LitP l -> p-    renameFrom m k p = case p of-      DotP t -> DotP $ renameFrom m k t-      ConP c mt ps -> ConP c (renameFrom m k mt) (renameFrom m k ps)-      VarP x -> p-      LitP l -> p--instance Raise a => Raise (Tele a) where-    raiseFrom m k EmptyTel          = EmptyTel-    raiseFrom m k (ExtendTel a tel) = uncurry ExtendTel $ raiseFrom m k (a, tel)-    renameFrom m k EmptyTel          = EmptyTel-    renameFrom m k (ExtendTel a tel) = uncurry ExtendTel $ renameFrom m k (a, tel)--instance Raise DisplayForm where-  raiseFrom m k (Display n ps v) = Display n (raiseFrom (m + 1) k ps)-                                             (raiseFrom (m + n) k v)-  renameFrom m k (Display n ps v) = Display n (renameFrom (m + 1) k ps)-                                             (renameFrom (m + n) k v)--instance Raise DisplayTerm where-  raiseFrom m k (DWithApp xs ys) = uncurry DWithApp $ raiseFrom m k (xs, ys)-  raiseFrom m k (DTerm v)        = DTerm $ raiseFrom m k v-  raiseFrom m k (DDot  v)        = DDot  $ raiseFrom m k v-  raiseFrom m k (DCon c vs)      = DCon c $ raiseFrom m k vs-  raiseFrom m k (DDef c vs)      = DDef c $ raiseFrom m k vs-  renameFrom m k (DWithApp xs ys) = uncurry DWithApp $ renameFrom m k (xs, ys)-  renameFrom m k (DTerm v)        = DTerm $ renameFrom m k v-  renameFrom m k (DDot  v)        = DDot  $ renameFrom m k v-  renameFrom m k (DCon c vs)      = DCon c $ renameFrom m k vs-  renameFrom m k (DDef c vs)      = DDef c $ renameFrom m k vs--instance Raise t => Raise (Abs t) where-    raiseFrom m k (Abs x v)   = Abs x $ raiseFrom (m + 1) k v-    raiseFrom m k (NoAbs x v) = NoAbs x $ raiseFrom m k v-    renameFrom m k (Abs x v)   = Abs x $ renameFrom (m + 1) k v-    renameFrom m k (NoAbs x v) = NoAbs x $ renameFrom m k v--instance Raise t => Raise (Arg t) where-    raiseFrom m k = fmap (raiseFrom m k)-    renameFrom m k = fmap (renameFrom m k)+instance Subst a => Subst (Abs a) where+  applySubst rho (Abs x a)   = Abs x $ applySubst (liftS 1 rho) a+  applySubst rho (NoAbs x a) = NoAbs x $ applySubst rho a -instance Raise t => Raise (Blocked t) where-    raiseFrom m k = fmap (raiseFrom m k)-    renameFrom m k = fmap (renameFrom m k)+instance Subst a => Subst (Arg a) where+  applySubst rho = fmap (applySubst rho) -instance Raise t => Raise [t] where-    raiseFrom m k = fmap (raiseFrom m k)-    renameFrom m k = fmap (renameFrom m k)+instance Subst a => Subst (Dom a) where+  applySubst rho = fmap (applySubst rho) -instance Raise t => Raise (Maybe t) where-    raiseFrom m k = fmap (raiseFrom m k)-    renameFrom m k = fmap (renameFrom m k)+instance Subst a => Subst (Maybe a) where+  applySubst rho = fmap (applySubst rho) -instance Raise v => Raise (Map k v) where-    raiseFrom m k = fmap (raiseFrom m k)-    renameFrom m k = fmap (renameFrom m k)+instance Subst a => Subst [a] where+  applySubst rho = map (applySubst rho) -instance (Raise a, Raise b) => Raise (a,b) where-    raiseFrom m k (x,y) = (raiseFrom m k x, raiseFrom m k y)-    renameFrom m k (x,y) = (renameFrom m k x, renameFrom m k y)+instance Subst () where+  applySubst _ _ = () -raise :: Raise t => Nat -> t -> t-raise = raiseFrom 0+instance (Subst a, Subst b) => Subst (a,b) where+  applySubst rho (x,y) = (applySubst rho x, applySubst rho y) -rename :: Raise t => (Nat -> Nat) -> t -> t-rename = renameFrom 0+instance Subst ClauseBody where+  applySubst rho (Body t) = Body $ applySubst rho t+  applySubst rho (Bind b) = Bind $ applySubst rho b+  applySubst _   NoBody   = NoBody -data TelV a = TelV (Tele (Arg a)) a-  deriving (Typeable, Data, Show, Eq, Ord, Functor)+data TelV a = TelV (Tele (Dom a)) a+  deriving (Typeable, Show, Eq, Ord, Functor)  type TelView = TelV Type--- data TelView = TelV Telescope Type -telFromList :: [Arg (String, Type)] -> Telescope-telFromList = foldr (\(Arg h r (x, a)) -> ExtendTel (Arg h r a) . Abs x) EmptyTel+telFromList :: [Dom (String, Type)] -> Telescope+telFromList = foldr (\(Dom h r (x, a)) -> ExtendTel (Dom h r a) . Abs x) EmptyTel -telToList :: Telescope -> [Arg (String, Type)]+telToList :: Telescope -> [Dom (String, Type)] telToList EmptyTel = [] telToList (ExtendTel arg tel) = fmap ((,) $ absName tel) arg : telToList (absBody tel)  telView' :: Type -> TelView-telView' t = case unEl t of+telView' t = case ignoreSharing $ unEl t of   Pi a b  -> absV a (absName b) $ telView' (absBody b)   _       -> TelV EmptyTel t   where     absV a x (TelV tel t) = TelV (ExtendTel a (Abs x tel)) t +-- | @mkPi dom t = telePi (telFromList [dom]) t@+mkPi :: Dom (String, Type) -> Type -> Type+mkPi (Dom h r (x, a)) b = el $ Pi (Dom h r a) (mkAbs x b)+  where+    el = El $ dLub (getSort a) (Abs x (getSort b)) -- dLub checks x freeIn+ telePi :: Telescope -> Type -> Type telePi  EmptyTel         t = t telePi (ExtendTel u tel) t = el $ Pi u (reAbs b)   where     el = El (dLub s1 s2)     b = fmap (flip telePi t) tel-    s1 = getSort $ unArg u+    s1 = getSort $ unDom u     s2 = fmap getSort b  -- | Everything will be a pi.@@ -672,12 +587,12 @@   where     el = El (dLub s1 s2)     b  = fmap (flip telePi_ t) tel-    s1 = getSort $ unArg u+    s1 = getSort $ unDom u     s2 = fmap getSort b  teleLam :: Telescope -> Term -> Term teleLam  EmptyTel	  t = t-teleLam (ExtendTel u tel) t = Lam (argHiding u) $ flip teleLam t <$> tel+teleLam (ExtendTel u tel) t = Lam (domHiding u) $ flip teleLam t <$> tel  -- | Dependent least upper bound, to assign a level to expressions --   like @forall i -> Set i@.@@ -687,7 +602,9 @@ dLub s1 (NoAbs _ s2) = sLub s1 s2 dLub s1 b@(Abs _ s2) = case occurrence 0 $ freeVars s2 of   Flexible      -> DLub s1 b+  Irrelevantly  -> DLub s1 b   NoOccurrence  -> sLub s1 (absApp b __IMPOSSIBLE__)+  Free.Unused   -> sLub s1 (absApp b __IMPOSSIBLE__)   StronglyRigid -> Inf   WeaklyRigid   -> Inf @@ -699,26 +616,47 @@ absApp (Abs   _ v) u = subst u v absApp (NoAbs _ v) _ = v -absBody :: Raise t => Abs t -> t+absBody :: Subst t => Abs t -> t absBody (Abs   _ v) = v absBody (NoAbs _ v) = raise 1 v -mkAbs :: (Raise a, Free a) => String -> a -> Abs a+mkAbs :: (Subst a, Free a) => String -> a -> Abs a mkAbs x v | 0 `freeIn` v = Abs x v           | otherwise    = NoAbs x (raise (-1) v) -reAbs :: (Raise a, Free a) => Abs a -> Abs a+reAbs :: (Subst a, Free a) => Abs a -> Abs a reAbs (NoAbs x v) = NoAbs x v reAbs (Abs x v)   = mkAbs x v -deriving instance (Raise a, Eq a) => Eq (Tele a)-deriving instance (Raise a, Ord a) => Ord (Tele a)+-- | @underAbs k a b@ applies @k@ to @a@ and the content of+--   abstraction @b@ and puts the abstraction back.+--   @a@ is raised if abstraction was proper such that+--   at point of application of @k@ and the content of @b@+--   are at the same context.+--   Precondition: @a@ and @b@ are at the same context at call time.+underAbs :: Subst a => (a -> b -> b) -> a -> Abs b -> Abs b+underAbs cont a b = case b of+  Abs   x t -> Abs   x $ cont (raise 1 a) t+  NoAbs x t -> NoAbs x $ cont a t +-- | @underLambdas n k a b@ drops @n@ initial 'Lam's from @b@,+--   performs operation @k@ on @a@ and the body of @b@,+--   and puts the 'Lam's back.  @a@ is raised correctly+--   according to the number of abstractions.+underLambdas :: Subst a => Int -> (a -> Term -> Term) -> a -> Term -> Term+underLambdas n cont a v = loop n a v where+  loop 0 a v = cont a v+  loop n a v = case ignoreSharing v of+    Lam h b -> Lam h $ underAbs (loop $ n-1) a b+    _       -> __IMPOSSIBLE__++deriving instance (Subst a, Eq a) => Eq (Tele a)+deriving instance (Subst a, Ord a) => Ord (Tele a)+ deriving instance Eq Sort deriving instance Ord Sort deriving instance Eq Type deriving instance Ord Type-deriving instance Ord Term deriving instance Eq Level deriving instance Ord Level deriving instance Eq PlusLevel@@ -750,14 +688,50 @@   Level l    == Level l'     = l == l'   MetaV m vs == MetaV m' vs' = m == m' && vs == vs'   DontCare _ == DontCare _   = True+  Shared p   == Shared q     = p == q || derefPtr p == derefPtr q+  Shared p   == b            = derefPtr p == b+  a          == Shared q     = a == derefPtr q   _          == _            = False -instance (Raise a, Eq a) => Eq (Abs a) where+instance Ord Term where+  Shared a   `compare` Shared x | a == x = EQ+  Shared a   `compare` x          = compare (derefPtr a) x+  a          `compare` Shared x   = compare a (derefPtr x)+  Var a b    `compare` Var x y    = compare (a, b) (x, y)+  Var{}      `compare` _          = LT+  _          `compare` Var{}      = GT+  Def a b    `compare` Def x y    = compare (a, b) (x, y)+  Def{}      `compare` _          = LT+  _          `compare` Def{}      = GT+  Con a b    `compare` Con x y    = compare (a, b) (x, y)+  Con{}      `compare` _          = LT+  _          `compare` Con{}      = GT+  Lit a      `compare` Lit x      = compare a x+  Lit{}      `compare` _          = LT+  _          `compare` Lit{}      = GT+  Lam a b    `compare` Lam x y    = compare (a, b) (x, y)+  Lam{}      `compare` _          = LT+  _          `compare` Lam{}      = GT+  Pi a b     `compare` Pi x y     = compare (a, b) (x, y)+  Pi{}       `compare` _          = LT+  _          `compare` Pi{}       = GT+  Sort a     `compare` Sort x     = compare a x+  Sort{}     `compare` _          = LT+  _          `compare` Sort{}     = GT+  Level a    `compare` Level x    = compare a x+  Level{}    `compare` _          = LT+  _          `compare` Level{}    = GT+  MetaV a b  `compare` MetaV x y  = compare (a, b) (x, y)+  MetaV{}    `compare` _          = LT+  _          `compare` MetaV{}    = GT+  DontCare{} `compare` DontCare{} = EQ++instance (Subst a, Eq a) => Eq (Abs a) where   NoAbs _ a == NoAbs _ b = a == b   Abs   _ a == Abs   _ b = a == b   a         == b         = absBody a == absBody b -instance (Raise a, Ord a) => Ord (Abs a) where+instance (Subst a, Ord a) => Ord (Abs a) where   NoAbs _ a `compare` NoAbs _ b = a `compare` b   Abs   _ a `compare` Abs   _ b = a `compare` b   a         `compare` b         = absBody a `compare` absBody b@@ -774,9 +748,10 @@ sLub a (DLub b c) = DLub (sLub a b) c  lvlView :: Term -> Level-lvlView (Level l)       = l-lvlView (Sort (Type l)) = l-lvlView v               = Max [Plus 0 $ UnreducedLevel v]+lvlView v = case ignoreSharing v of+  Level l       -> l+  Sort (Type l) -> l+  _             -> Max [Plus 0 $ UnreducedLevel v]  levelMax :: [PlusLevel] -> Level levelMax as0 = Max $ ns ++ List.sort bs@@ -784,10 +759,10 @@     as = Prelude.concatMap expand as0     ns = case [ n | ClosedLevel n <- as, n > 0 ] of       []  -> []-      ns  -> [ ClosedLevel n | n <- [Prelude.maximum ns], n > leastB ]+      ns  -> [ ClosedLevel n | n <- [Prelude.maximum ns], n > greatestB ]     bs = subsume [ b | b@Plus{} <- as ]-    leastB | null bs   = 0-           | otherwise = Prelude.minimum [ n | Plus n _ <- bs ]+    greatestB | null bs   = 0+              | otherwise = Prelude.maximum [ n | Plus n _ <- bs ]      expand l@ClosedLevel{} = [l]     expand (Plus n l) = map (plus n) $ expand0 $ expandAtom l@@ -795,13 +770,16 @@     expand0 [] = [ClosedLevel 0]     expand0 as = as -    expandAtom (BlockedLevel _ (Level (Max as)))       = as-    expandAtom (NeutralLevel   (Level (Max as)))       = as-    expandAtom (UnreducedLevel (Level (Max as)))       = as-    expandAtom (BlockedLevel _ (Sort (Type (Max as)))) = as-    expandAtom (NeutralLevel   (Sort (Type (Max as)))) = as-    expandAtom (UnreducedLevel (Sort (Type (Max as)))) = as-    expandAtom l                                       = [Plus 0 l]+    expandAtom l = case l of+      BlockedLevel _ v -> expandTm v+      NeutralLevel v   -> expandTm v+      UnreducedLevel v -> expandTm v+      MetaLevel{}      -> [Plus 0 l]+      where+        expandTm v = case ignoreSharing v of+          Level (Max as)       -> as+          Sort (Type (Max as)) -> as+          _                    -> [Plus 0 l]      plus n (ClosedLevel m) = ClosedLevel (n + m)     plus n (Plus m l)      = Plus (n + m) l@@ -829,9 +807,10 @@     infAtom MetaLevel{}        = False     infAtom BlockedLevel{}     = False     infTm (Sort Inf)           = True+    infTm (Shared p)           = infTm $ derefPtr p     infTm _                    = False levelSort l =-  case levelTm l of+  case ignoreSharing $ levelTm l of     Sort s -> s     _      -> Type l @@ -846,3 +825,18 @@ unLevelAtom (UnreducedLevel v) = v unLevelAtom (BlockedLevel _ v) = v +-- Boring instances ----------------------------------------------------++instance Sized Substitution where+  size IdS          = 1+  size EmptyS       = 1+  size (Wk _ rho)   = 1 + size rho+  size (t :# rho)   = 1 + size t + size rho+  size (Lift _ rho) = 1 + size rho++instance KillRange Substitution where+  killRange IdS          = IdS+  killRange EmptyS       = EmptyS+  killRange (Wk n rho)   = killRange1 (Wk n) rho+  killRange (t :# rho)   = killRange2 (:#) t rho+  killRange (Lift n rho) = killRange1 (Lift n) rho
src/full/Agda/TypeChecking/Telescope.hs view
@@ -13,6 +13,7 @@ import Agda.TypeChecking.Substitute import Agda.TypeChecking.Free +import Agda.Utils.List import Agda.Utils.Permutation import Agda.Utils.Size import Agda.Utils.Tuple@@ -22,67 +23,62 @@ #include "../undefined.h" import Agda.Utils.Impossible --- TODO: use rename instead of substs -- | The permutation should permute the corresponding telescope. (left-to-right list) renameP :: Subst t => Permutation -> t -> t-renameP p = substs (renaming p)+renameP p = applySubst (renaming p) --- | If @permute π : [a]Γ -> [a]Δ@, then @substs (renaming π) : Term Γ -> Term Δ@-renaming :: Permutation -> [Term]+-- | If @permute π : [a]Γ -> [a]Δ@, then @applySubst (renaming π) : Term Γ -> Term Δ@+renaming :: Permutation -> Substitution renaming p = gamma'   where     n	   = size p     gamma  = permute (reverseP $ invertP $ reverseP p) $ map var [0..]-    gamma' = gamma ++ map var [n..]-    var i  = Var i []+    gamma' = gamma ++# raiseS n  -- | If @permute π : [a]Γ -> [a]Δ@, then @substs (renamingR π) : Term Δ -> Term Γ@-renamingR :: Permutation -> [Term]-renamingR p@(Perm n _) = permute (reverseP p) (map var [0..]) ++ map var [n..]-  where-    var i  = Var (fromIntegral i) []+renamingR :: Permutation -> Substitution+renamingR p@(Perm n _) = permute (reverseP p) (map var [0..]) ++# raiseS n  -- | Flatten telescope: (Γ : Tel) -> [Type Γ]-flattenTel :: Telescope -> [Arg Type]+flattenTel :: Telescope -> [Dom Type] flattenTel EmptyTel	     = [] flattenTel (ExtendTel a tel) = raise (size tel + 1) a : flattenTel (absBody tel)  -- | Order a flattened telescope in the correct dependeny order: Γ -> --   Permutation (Γ -> Γ~)-reorderTel :: [Arg Type] -> Maybe Permutation+reorderTel :: [Dom Type] -> Maybe Permutation reorderTel tel = topoSort comesBefore tel'   where-    tel' = reverse $ zip [0..] $ reverse tel-    (i, _) `comesBefore` (_, a) = i `freeIn` unEl (unArg a) -- a tiny bit unsafe+    tel' = zip (downFrom $ size tel) tel+    (i, _) `comesBefore` (_, a) = i `freeIn` unEl (unDom a) -- a tiny bit unsafe -reorderTel_ :: [Arg Type] -> Permutation+reorderTel_ :: [Dom Type] -> Permutation reorderTel_ tel = case reorderTel tel of   Nothing -> __IMPOSSIBLE__   Just p  -> p  -- | Unflatten: turns a flattened telescope into a proper telescope. Must be --   properly ordered.-unflattenTel :: [String] -> [Arg Type] -> Telescope+unflattenTel :: [String] -> [Dom Type] -> Telescope unflattenTel []	  []	        = EmptyTel unflattenTel (x : xs) (a : tel) = ExtendTel a' (Abs x tel')   where     tel' = unflattenTel xs tel-    a'   = substs rho a-    rho  = replicate (size tel + 1) __IMPOSSIBLE_TERM__ ++ map var [0..]-      where var i = Var i []+    a'   = applySubst rho a+    rho  = parallelS (replicate (size tel + 1) __IMPOSSIBLE_TERM__) unflattenTel [] (_ : _) = __IMPOSSIBLE__ unflattenTel (_ : _) [] = __IMPOSSIBLE__  -- | Get the suggested names from a telescope teleNames :: Telescope -> [String]-teleNames = map (fst . unArg) . telToList+teleNames = map (fst . unDom) . telToList  teleArgNames :: Telescope -> [Arg String]-teleArgNames = map (fmap fst) . telToList+teleArgNames = map (argFromDom . fmap fst) . telToList  teleArgs :: Telescope -> Args-teleArgs tel =-  reverse [ Arg h r (Var i []) | (i, Arg h r _) <- zip [0..] $ reverse (telToList tel) ]+teleArgs tel = [ Arg h r (var i) | (i, Dom h r _) <- zip (downFrom $ size l) l ]+  where l = telToList tel  -- | A telescope split in two. data SplitTel = SplitTel@@ -127,14 +123,20 @@ telView = telViewUpTo (-1)  -- | @telViewUpTo n t@ takes off the first @n@ function types of @t@.--- Takes off all if $n < 0$.+-- Takes off all if @n < 0@. telViewUpTo :: Int -> Type -> TCM TelView-telViewUpTo 0 t = return $ TelV EmptyTel t-telViewUpTo n t = do+telViewUpTo n t = telViewUpTo' n (const True) t++-- | @telViewUpTo' n p t@ takes off $t$+--   the first @n@ (or arbitrary many if @n < 0@) function domains+--   as long as they satify @p@.+telViewUpTo' :: Int -> (Dom Type -> Bool) -> Type -> TCM TelView+telViewUpTo' 0 p t = return $ TelV EmptyTel t+telViewUpTo' n p t = do   t <- reduce t-  case unEl t of-    Pi a b -> absV a (absName b) <$> telViewUpTo (n - 1) (absBody b)-    _      -> return $ TelV EmptyTel t+  case ignoreSharing $ unEl t of+    Pi a b | p a -> absV a (absName b) <$> telViewUpTo' (n - 1) p (absBody b)+    _            -> return $ TelV EmptyTel t   where     absV a x (TelV tel t) = TelV (ExtendTel a (Abs x tel)) t @@ -144,6 +146,6 @@ piApplyM t []           = return t piApplyM t (arg : args) = do   t <- reduce t-  case (t, arg) of-    (El _ (Pi  _ b), arg) -> absApp b (unArg arg) `piApplyM` args-    _                     -> __IMPOSSIBLE__+  case ignoreSharing $ unEl t of+    Pi  _ b -> absApp b (unArg arg) `piApplyM` args+    _       -> __IMPOSSIBLE__
src/full/Agda/TypeChecking/Test/Generators.hs view
@@ -193,8 +193,10 @@  instance GenC a => GenC (Arg a) where   genC conf = (\ (h, a) -> Arg h Relevant a) <$> genC conf---   genC conf = uncurry Arg <$> genC conf +instance GenC a => GenC (Dom a) where+  genC conf = (\ (h, a) -> Dom h Relevant a) <$> genC conf+ instance GenC a => GenC (Abs a) where   genC conf = Abs "x" <$> genC (extendConf conf) @@ -403,9 +405,12 @@  instance ShrinkC a b => ShrinkC (Arg a) (Arg b) where   shrinkC conf (Arg h r x) = (\ (h,x) -> Arg h r x) <$> shrinkC conf (h, x)---  shrinkC conf (Arg h x) = uncurry Arg <$> shrinkC conf (h, x)   noShrink = fmap noShrink +instance ShrinkC a b => ShrinkC (Dom a) (Dom b) where+  shrinkC conf (Dom h r x) = (\ (h,x) -> Dom h r x) <$> shrinkC conf (h, x)+  noShrink = fmap noShrink+ instance ShrinkC a b => ShrinkC (Blocked a) (Blocked b) where   shrinkC conf (Blocked m x)  = Blocked m <$> shrinkC conf x   shrinkC conf (NotBlocked x) = NotBlocked <$> shrinkC conf x@@ -434,7 +439,7 @@ instance ShrinkC Term Term where   shrinkC conf (DontCare _)  = []   shrinkC conf (Sort Prop) = []-  shrinkC conf t	   = filter validType $ case t of+  shrinkC conf t	   = filter validType $ case ignoreSharing t of     Var i args   -> map unArg args ++ 		    (uncurry Var <$> shrinkC conf (VarName i, NoType args))     Def d args   -> map unArg args ++@@ -444,11 +449,12 @@     Lit l	 -> Lit <$> shrinkC conf l     Level l      -> [] -- TODO     Lam h b      -> killAbs b : (uncurry Lam <$> shrinkC conf (h, b))-    Pi a b       -> unEl (unArg a) : unEl (killAbs b) :+    Pi a b       -> unEl (unDom a) : unEl (killAbs b) : 		    (uncurry Pi <$> shrinkC conf (a, b))     Sort s       -> Sort <$> shrinkC conf s     MetaV m args -> map unArg args ++ (MetaV m <$> shrinkC conf (NoType args))     DontCare _   -> []+    Shared{}     -> __IMPOSSIBLE__     where       validType t 	| not (tcIsType conf) = True@@ -467,7 +473,7 @@   killVar :: Nat -> a -> a  instance KillVar Term where-  killVar i t = case t of+  killVar i t = case ignoreSharing t of     Var j args | j == i	   -> DontCare (Var j []) 	       | j >  i	   -> Var (j - 1) $ killVar i args 	       | otherwise -> Var j	  $ killVar i args@@ -480,6 +486,7 @@     Pi a b		   -> uncurry Pi  $ killVar i (a, b)     MetaV m args	   -> MetaV m	  $ killVar i args     DontCare mv            -> DontCare    $ killVar i mv+    Shared{}               -> __IMPOSSIBLE__  instance KillVar Type where   killVar i (El s t) = El s $ killVar i t@@ -489,6 +496,9 @@   killVar i (ExtendTel a tel) = uncurry ExtendTel $ killVar i (a, tel)  instance KillVar a => KillVar (Arg a) where+  killVar i = fmap (killVar i)++instance KillVar a => KillVar (Dom a) where   killVar i = fmap (killVar i)  instance KillVar a => KillVar (Abs a) where
src/full/Agda/TypeChecking/Tests.hs view
@@ -62,7 +62,7 @@       conf2 = conf1 { tcFreeVariables = map (size tel2 +) (tcFreeVariables conf1) }       conf' = conf  { tcFreeVariables = map (size tel +) (tcFreeVariables conf) ++ vs }   in  forAllShrink (genC conf') (shrinkC conf') $ \t ->-      isWellScoped conf2 (substs (renamingR $ invertP perm) (t :: Term))+      isWellScoped conf2 (applySubst (renamingR $ invertP perm) (t :: Term))  {- -- | The permutation generated when splitting a telescope correctly translates
src/full/Agda/TypeChecking/UniversePolymorphism.hs view
@@ -26,4 +26,3 @@  isLevelConstraint LevelCmp{} = True isLevelConstraint _          = False-
src/full/Agda/TypeChecking/With.hs view
@@ -24,6 +24,7 @@ import Agda.TypeChecking.EtaContract import Agda.TypeChecking.Telescope +import Agda.Utils.List import Agda.Utils.Permutation import Agda.Utils.Size @@ -58,12 +59,14 @@                      Nat -> Nat -> [A.Clause] -> TCM [A.Clause] buildWithFunction aux gamma qs perm n1 n cs = mapM buildWithClause cs   where-    buildWithClause (A.Clause (LHS i _ ps wps) rhs wh) = do+    buildWithClause (A.Clause (LHS i (A.LHSProj{}) wps) rhs wh) =+      typeError $ NotImplemented "with clauses for definitions by copatterns"+    buildWithClause (A.Clause (LHS i (A.LHSHead _ ps) wps) rhs wh) = do       let (wps0, wps1) = genericSplitAt n wps-          ps0          = map (defaultArg . unnamed) wps0+          ps0          = map defaultNamedArg wps0       rhs <- buildRHS rhs       (ps1, ps2)  <- genericSplitAt n1 <$> stripWithClausePatterns gamma qs perm ps-      let result = A.Clause (LHS i aux (ps1 ++ ps0 ++ ps2) wps1) rhs wh+      let result = A.Clause (LHS i (A.LHSHead aux (ps1 ++ ps0 ++ ps2)) wps1) rhs wh       reportSDoc "tc.with" 20 $ vcat         [ text "buildWithClause returns" <+> prettyA result         ]@@ -90,7 +93,7 @@ -} stripWithClausePatterns :: Telescope -> [Arg Pattern] -> Permutation -> [NamedArg A.Pattern] -> TCM [NamedArg A.Pattern] stripWithClausePatterns gamma qs perm ps = do-  psi <- insertImplicitPatterns ps gamma+  psi <- insertImplicitPatterns ExpandLast ps gamma   unless (size psi == size gamma) $ fail $ "wrong number of arguments in with clause: given " ++ show (size psi) ++ ", expected " ++ show (size gamma)   reportSDoc "tc.with.strip" 10 $ vcat     [ text "stripping patterns"@@ -128,36 +131,37 @@           ps <- underAbstraction a tel $ \tel -> strip tel ps qs           return $ p : ps -        DotP v  -> case namedThing $ unArg p of+        DotP v  -> case namedArg p of           A.DotP _ _    -> ok           A.ImplicitP _ -> ok           _ -> do             d <- prettyA p             typeError $ GenericError $                 "Inaccessible (dotted) patterns from the parent clause must " ++-                "also be inaccesible in the with clause, when checking the " +++                "also be inaccessible in the with clause, when checking the " ++                 "pattern " ++ show d ++ ","           where             ok = do               ps <- strip (tel `absApp` v) ps qs               return $ p : ps -        ConP c _ qs' -> case namedThing $ unArg p of+        ConP c _ qs' -> case namedArg p of           A.ConP _ (A.AmbQ cs') ps' -> do -            Con c' [] <- constructorForm =<< reduce (Con c [])+            Con c' [] <- ignoreSharing <$> (constructorForm =<< reduce (Con c []))             c <- return $ c' `withRangeOf` c             let getCon (Con c []) = c+                getCon (Shared p) = getCon (derefPtr p)                 getCon _ = __IMPOSSIBLE__             cs' <- map getCon <$> (mapM constructorForm =<< mapM (\c' -> reduce $ Con c' []) cs')              unless (elem c cs') mismatch              -- The type is a datatype-            Def d us <- normalise $ unEl (unArg a)+            Def d us <- ignoreSharing <$> normalise (unEl $ unDom a)              -- Compute the argument telescope for the constructor-            Con c []    <- constructorForm =<< normalise (Con c [])+            Con c []    <- ignoreSharing <$> (constructorForm =<< normalise (Con c []))             Defn {defType = ct, theDef = Constructor{conPars = np}}  <- getConstInfo c             let ct' = ct `apply` genericTake np us             TelV tel' _ <- telView ct'@@ -171,7 +175,8 @@                    ]              -- Compute the new telescope-            let v     = Con c $ reverse [ Arg h r (Var i []) | (i, Arg h r _) <- zip [0..] $ reverse qs' ]+            let v     = Con c [ Arg h r (var i) | (i, Arg h r _) <- zip (downFrom $ size qs') qs' ]+--            let v     = Con c $ reverse [ Arg h r (var i) | (i, Arg h r _) <- zip [0..] $ reverse qs' ]                 tel'' = tel' `abstract` absApp (raise (size tel') tel) v              reportSDoc "tc.with.strip" 15 $ sep@@ -181,26 +186,28 @@               ]              -- Insert implicit patterns (just for the constructor arguments)-            psi' <- insertImplicitPatterns ps' tel'+            psi' <- insertImplicitPatterns ExpandLast ps' tel'             unless (size psi' == size tel') $ typeError $ WrongNumberOfConstructorArguments c (size tel') (size psi')              -- Do it again for everything (is this necessary?)-            psi' <- insertImplicitPatterns (psi' ++ ps) tel''+            psi' <- insertImplicitPatterns ExpandLast (psi' ++ ps) tel''              -- Keep going             strip tel'' psi' (qs' ++ qs)           _ -> mismatch -        LitP lit -> case namedThing $ unArg p of+        LitP lit -> case namedArg p of           A.LitP lit' | lit == lit' -> strip (tel `absApp` Lit lit) ps qs           _ -> mismatch       where-        mismatch = typeError $ WithClausePatternMismatch (namedThing $ unArg p0) (unArg q)+        mismatch = typeError $ WithClausePatternMismatch (namedArg p0) (unArg q)     strip tel ps qs = error $ "huh? " ++ show (size tel) ++ " " ++ show (size ps) ++ " " ++ show (size qs)  -- | Construct the display form for a with function. It will display --   applications of the with function as applications to the original function. --   For instance, @aux a b c@ as @f (suc a) (suc b) | c@+--+--   @n@ is the number of with arguments. withDisplayForm :: QName -> QName -> Telescope -> Telescope -> Nat -> [Arg Pattern] -> Permutation -> TCM DisplayForm withDisplayForm f aux delta1 delta2 n qs perm@(Perm m _) = do   topArgs <- raise (n + size delta1 + size delta2) <$> getContextArgs@@ -208,15 +215,20 @@   let wild = Def (qualify (mnameFromList []) x) []    let top = genericLength topArgs-      vs = map (fmap DTerm) topArgs ++ (substs (sub ys wild) $ patsToTerms qs)+      vs = map (fmap DTerm) topArgs ++ (applySubst (sub ys wild) $ patsToTerms qs)       dt = DWithApp (DDef f vs : map DTerm withArgs) []-      withArgs = reverse $ map var [size delta2..size delta2 + n - 1]-      pats = genericReplicate (n + size delta1 + size delta2 + top) (Var 0 [])+      withArgs = map var $ genericTake n $ downFrom $ size delta2 + n+--      withArgs = reverse $ map var [size delta2..size delta2 + n - 1]+      pats = genericReplicate (n + size delta1 + size delta2 + top) (var 0)       -- Building the arguments to the with function       (ys0, ys1) = splitAt (size delta1) (permute perm $ map Just [m - 1, m - 2..0])       ys = reverse $ ys0 ++ genericReplicate n Nothing ++ ys1    let display = Display (n + size delta1 + size delta2 + top) pats dt+      addFullCtx = addCtxTel delta1+                 . flip (foldr addCtxString_) (map ("w" ++) $ map show [1..n])+                 . addCtxTel delta2+          -- Andreas 2012-09-17: this seems to be the right order of contexts    reportSDoc "tc.with.display" 20 $ vcat     [ text "withDisplayForm"@@ -224,40 +236,39 @@       [ text "f      =" <+> text (show f)       , text "aux    =" <+> text (show aux)       , text "delta1 =" <+> prettyTCM delta1-      , text "delta2 =" <+> prettyTCM delta2+      , text "delta2 =" <+> do addCtxTel delta1 $ prettyTCM delta2       , text "n      =" <+> text (show n)       , text "perm   =" <+> text (show perm)-      , text "top    =" <+> prettyTCM topArgs+      , text "top    =" <+> do addFullCtx $ prettyTCM topArgs       , text "qs     =" <+> text (show qs)-      , text "dt     =" <+> prettyTCM dt+      , text "dt     =" <+> do addFullCtx $ prettyTCM dt       , text "ys     =" <+> text (show ys)       , text "raw    =" <+> text (show display)-      , text "qsToTm =" <+> prettyTCM (patsToTerms qs)-      , text "sub qs =" <+> prettyTCM (substs (sub ys wild) $ patsToTerms qs)+      , text "qsToTm =" <+> prettyTCM (patsToTerms qs) -- ctx would be permuted form of delta1 ++ delta2+      , text "sub qs =" <+> prettyTCM (applySubst (sub ys wild) $ patsToTerms qs)       ]     ]    return display   where-    var i = Var i []-    sub rho wild = map term [0..] -- m - 1]+    -- Note: The upper bound (m - 1) was previously commented out. I+    -- restored it in order to make the substitution finite.+    sub rho wild = parallelS $ map term [0 .. m - 1]       where         -- thinking required.. but ignored         -- dropping the reverse seems to work better         -- Andreas, 2010-09-09: I DISAGREE.         -- Ulf, 2011-09-02: Thinking done. Neither was correct.         -- We had the wrong permutation and we used it incorrectly. Should work now.-        term i = case findIndex (Just i ==) rho of-          Nothing -> wild-          Just j  -> Var (fromIntegral j) []+        term i = maybe wild var $ findIndex (Just i ==) rho  patsToTerms :: [Arg Pattern] -> [Arg DisplayTerm] patsToTerms ps = evalState (toTerms ps) 0   where     mapMr f xs = reverse <$> mapM f (reverse xs) -    var :: State Nat Nat-    var = do+    nextVar :: State Nat Nat+    nextVar = do       i <- get       put (i + 1)       return i@@ -270,7 +281,7 @@      toTerm :: Pattern -> State Nat DisplayTerm     toTerm p = case p of-      VarP _      -> var >>= \i -> return $ DTerm (Var i [])+      VarP _      -> nextVar >>= \i -> return $ DTerm (var i)       DotP t      -> return $ DDot t       ConP c _ ps -> DCon c <$> toTerms ps       LitP l      -> return $ DTerm (Lit l)
src/full/Agda/Utils/Either.hs view
@@ -5,7 +5,8 @@ ------------------------------------------------------------------------  module Agda.Utils.Either-  ( isLeft, isRight+  ( mapEither, mapLeft, mapRight+  , isLeft, isRight   , allRight   , tests   ) where@@ -16,6 +17,21 @@  #include "../undefined.h" import Agda.Utils.Impossible++-- | 'Either' is a bifunctor.++mapEither :: (a -> c) -> (b -> d) -> Either a b -> Either c d+mapEither f g = either (Left . f) (Right . g)++-- | 'Either _ b' is a functor.++mapLeft :: (a -> c) -> Either a b -> Either c b+mapLeft f = mapEither f id++-- | 'Either a' is a functor.++mapRight :: (b -> d) -> Either a b -> Either a d+mapRight = mapEither id  -- | Returns 'True' iff the argument is @'Right' x@ for some @x@. 
src/full/Agda/Utils/FileName.hs view
@@ -7,13 +7,14 @@   , mkAbsolute   , absolute   , (===)+  , doesFileExistCaseSensitive   , tests   ) where  import Agda.Utils.TestHelpers import Agda.Utils.QuickCheck import Data.Function-import Data.Generics (Typeable, Data)+import Data.Typeable (Typeable) import Data.List import Data.Maybe import Control.Applicative@@ -21,6 +22,11 @@ import System.Directory import System.FilePath +#if mingw32_HOST_OS+import Control.Exception (bracket)+import System.Win32 (findFirstFile, findClose, getFindDataFileName)+#endif+ #include "../undefined.h" import Agda.Utils.Impossible @@ -30,8 +36,11 @@ -- paths point to the same files or directories.  newtype AbsolutePath = AbsolutePath { filePath :: FilePath }-  deriving (Show, Eq, Ord, Typeable, Data)+  deriving (Eq, Ord, Typeable) +instance Show AbsolutePath where+  show = filePath+ -- | The paths have to be absolute, valid and normalised, without -- trailing path separators. @@ -93,6 +102,22 @@  (===) :: AbsolutePath -> AbsolutePath -> Bool (===) = equalFilePath `on` filePath++-- | Case-sensitive doesFileExist for Windows.+-- This is case-sensitive only on the file name part, not on the directory part.+-- (Ideally, path components coming from module name components should be+--  checked case-sensitively and the other path components should be checked+--  case insenstively.)+doesFileExistCaseSensitive :: FilePath -> IO Bool+#if mingw32_HOST_OS+doesFileExistCaseSensitive f = do+  ex <- doesFileExist f+  if ex then bracket (findFirstFile f) (findClose . fst) $+               fmap (takeFileName f ==) . getFindDataFileName . snd+        else return False+#else+doesFileExistCaseSensitive f = doesFileExist f+#endif  ------------------------------------------------------------------------ -- Generators
− src/full/Agda/Utils/Generics.hs
@@ -1,39 +0,0 @@-{-# LANGUAGE Rank2Types #-}-{-| Contains some generic utility functions and reexports certain-    definitions from "Data.Generics".--}-module Agda.Utils.Generics-  ( module Data.Generics-  , isString-  , everythingBut-  , everywhereBut'-  , everywhereButM'-  ) where---- The explicit import list is included in order to support several--- versions of syb; one version of syb contains a definition named--- everythingBut.-import Data.Generics-  (GenericQ, mkQ, extQ, gmapQ, GenericT, gmapT, GenericM, gmapM)--isString :: GenericQ Bool-isString = mkQ False (const True :: String -> Bool)--everythingBut :: (r -> r -> r) -> GenericQ Bool -> GenericQ r -> GenericQ r-everythingBut (+) stop collect x-    | stop x	= collect x-    | otherwise	= foldr1 (+) $-		    collect x : gmapQ (everythingBut (+) stop collect) x---- | Same as everywhereBut except that when the stop condition becomes---   true, the function is called on the top level term (but not on the---   children).-everywhereBut' :: GenericQ Bool -> GenericT -> GenericT-everywhereBut' q f x-    | q x       = f x-    | otherwise = f (gmapT (everywhereBut' q f) x)--everywhereButM' :: Monad m => GenericQ Bool -> GenericM m -> GenericM m-everywhereButM' q f x-    | q x	= f x-    | otherwise	= f =<< gmapM (everywhereButM' q f) x
+ src/full/Agda/Utils/Geniplate.hs view
@@ -0,0 +1,43 @@+{-# LANGUAGE TemplateHaskell #-}++-- | Utilities related to Geniplate.++module Agda.Utils.Geniplate+  ( instanceUniverseBiT'+  , instanceTransformBiMT'+  , dontDescendInto+  ) where++import Data.Generics.Geniplate+import Data.Map (Map)++import qualified Agda.Syntax.Abstract.Name as A+import qualified Agda.Syntax.Concrete.Name as C+import qualified Agda.Syntax.Scope.Base as S++-- | Types which Geniplate should not descend into.++dontDescendInto =+  [ [t| String |]+  , [t| A.QName |]+  , [t| A.Name |]+  , [t| C.Name |]+  , [t| S.ScopeInfo |]+  , [t| Map A.QName A.QName |]+  , [t| Map A.ModuleName A.ModuleName |]+  , [t| A.AmbiguousQName |]+  ]++-- | A localised instance of 'instanceUniverseBiT'. The generated+-- 'universeBi' functions neither descend into the types in+-- 'dontDescendInto', nor into the types in the list argument.++instanceUniverseBiT' ts p =+  instanceUniverseBiT (ts ++ dontDescendInto) p++-- | A localised instance of 'instanceTransformBiMT'. The generated+-- 'transformBiM' functions neither descend into the types in+-- 'dontDescendInto', nor into the types in the list argument.++instanceTransformBiMT' ts p =+  instanceTransformBiMT (ts ++ dontDescendInto) p
src/full/Agda/Utils/Graph.hs view
@@ -1,45 +1,132 @@-{-# LANGUAGE DeriveFunctor #-}-module Agda.Utils.Graph where+{-# LANGUAGE DeriveFunctor, GeneralizedNewtypeDeriving #-} +module Agda.Utils.Graph+  ( Graph(..)+  , invariant+  , edges+  , edgesFrom+  , nodes+  , filterEdges+  , fromNodes+  , fromList+  , empty+  , singleton+  , insert+  , removeNode+  , removeEdge+  , union+  , unions+  , Agda.Utils.Graph.lookup+  , neighbours+  , sccs'+  , sccs+  , acyclic+  , transitiveClosure1+  , transitiveClosure+  , findPath+  , allPaths+  , nodeIn+  , edgeIn+  , tests+  )+  where++import Control.Applicative ((<$>), (<*>))++import Data.Function+import qualified Data.Graph as Graph+import qualified Data.List as List import qualified Data.Map as Map-import qualified Data.Set as Set import Data.Map (Map)+import qualified Data.Maybe as Maybe+import qualified Data.Set as Set import Data.Set (Set) +import qualified Agda.Utils.Map as Map+import Agda.Utils.QuickCheck import Agda.Utils.SemiRing+import Agda.Utils.TestHelpers  -- Only one edge between any two nodes. newtype Graph n e = Graph { unGraph :: Map n (Map n e) }-  deriving (Eq, Functor)+  deriving (Eq, Functor, Show) +-- | A structural invariant for the graphs.++invariant :: Ord n => Graph n e -> Bool+invariant g = connectedNodes `Set.isSubsetOf` nodes g+  where+  connectedNodes =+    Set.fromList $ concatMap (\(a, b, _) -> [a, b]) $ edges g+ edges :: Ord n => Graph n e -> [(n, n, e)] edges g = concatMap onNode $ Map.assocs $ unGraph g   where     onNode (from, es) = map (onNeighbour from) $ Map.assocs es     onNeighbour from (to, w) = (from, to, w) +-- | All edges originating in the given nodes.++edgesFrom :: Ord n => Graph n e -> [n] -> [(n, n, e)]+edgesFrom (Graph g) ns =+  concat $+  Maybe.catMaybes $+  map (\n1 -> fmap (\m -> map (\(n2, w) -> (n1, n2, w)) (Map.assocs m))+                   (Map.lookup n1 g))+      ns++-- | Returns all the nodes in the graph.+ nodes :: Ord n => Graph n e -> Set n-nodes = Set.fromList . concatMap f . edges-  where f (a, b, _) = [a, b]+nodes g = Map.keysSet (unGraph g) +-- | Constructs a completely disconnected graph containing the given+-- nodes.++fromNodes :: Ord n => [n] -> Graph n e+fromNodes = Graph . Map.fromList . map (\n -> (n, Map.empty))++prop_nodes_fromNodes ns = nodes (fromNodes ns) == Set.fromList ns+ fromList :: (SemiRing e, Ord n) => [(n, n, e)] -> Graph n e fromList es = unions [ singleton a b w | (a, b, w) <- es ]  empty :: Graph n e empty = Graph Map.empty -singleton :: n -> n -> e -> Graph n e-singleton a b w = Graph $ Map.singleton a (Map.singleton b w)+singleton :: Ord n => n -> n -> e -> Graph n e+singleton a b w =+  Graph $ Map.insert a (Map.singleton b w) $ Map.singleton b Map.empty  insert :: (SemiRing e, Ord n) => n -> n -> e -> Graph n e -> Graph n e-insert from to w g = union (singleton from to w) g+insert from to w g = union g (singleton from to w) +-- | Removes the given node, and all corresponding edges, from the+-- graph.++removeNode :: Ord n => n -> Graph n e -> Graph n e+removeNode n (Graph g) =+  Graph $ Map.delete n $ Map.map (Map.delete n) g++-- | @removeEdge n1 n2 g@ removes the edge going from @n1@ to @n2@, if+-- any.++removeEdge :: Ord n => n -> n -> Graph n e -> Graph n e+removeEdge n1 n2 (Graph g) =+  Graph $ Map.adjust (Map.delete n2) n1 g++filterEdges :: Ord n => (e -> Bool) -> Graph n e -> Graph n e+filterEdges f (Graph g) = Graph $ Map.mapMaybe filt g+  where filt m =+         let m' = Map.filter f m+         in  if Map.null m' then Nothing else Just m'+ union :: (SemiRing e, Ord n) => Graph n e -> Graph n e -> Graph n e union (Graph g1) (Graph g2) =   Graph $ Map.unionWith (Map.unionWith oplus) g1 g2  unions :: (SemiRing e, Ord n) => [Graph n e] -> Graph n e-unions = foldr union empty+unions = List.foldl' union empty  lookup :: Ord n => n -> n -> Graph n e -> Maybe e lookup a b g = Map.lookup b =<< Map.lookup a (unGraph g)@@ -47,27 +134,99 @@ neighbours :: Ord n => n -> Graph n e -> [(n, e)] neighbours a g = maybe [] Map.assocs $ Map.lookup a $ unGraph g -growGraph :: (SemiRing e, Ord n) => Graph n e -> Graph n e-growGraph g = foldr union g $ map newEdges $ edges g+-- | The graph's strongly connected components, in reverse topological+-- order.++sccs' :: Ord n => Graph n e -> [Graph.SCC n]+sccs' g =+  Graph.stronglyConnComp .+  map (\n -> (n, n, map fst $ neighbours n g)) .+  Set.toList .+  nodes $+  g++-- | The graph's strongly connected components, in reverse topological+-- order.++sccs :: Ord n => Graph n e -> [[n]]+sccs = map Graph.flattenSCC . sccs'++-- | Returns @True@ iff the graph is acyclic.++acyclic :: Ord n => Graph n e -> Bool+acyclic = all isAcyclic . sccs'   where+  isAcyclic Graph.AcyclicSCC{} = True+  isAcyclic Graph.CyclicSCC{}  = False++-- | Computes the transitive closure of the graph.+--+-- Note that this algorithm is not guaranteed to be correct (or+-- terminate) for arbitrary semirings.+--+-- This function operates on the entire graph at once.++transitiveClosure1 :: (Eq e, SemiRing e, Ord n) =>+                      Graph n e -> Graph n e+transitiveClosure1 = loop+  where+  loop g | g == g'   = g+         | otherwise = loop g'+    where g' = growGraph g++  growGraph g = List.foldl' union g $ map newEdges $ edges g+    where     newEdges (a, b, w) = case Map.lookup b (unGraph g) of-        Just es -> Graph $ Map.singleton a $ Map.map (otimes w) es-        Nothing -> empty+      Just es -> Graph $ Map.singleton a $ Map.map (otimes w) es+      Nothing -> empty +-- | Computes the transitive closure of the graph.+--+-- Note that this algorithm is not guaranteed to be correct (or+-- terminate) for arbitrary semirings.+--+-- This function operates on one strongly connected component at a+-- time.+ transitiveClosure :: (Eq e, SemiRing e, Ord n) => Graph n e -> Graph n e-transitiveClosure g = loop g-  where -- n = Set.size $ nodes g-    loop g | g == g'   = g-           | otherwise = loop g'-      where-        g' = growGraph g+transitiveClosure g = List.foldl' extend g $ sccs' g+  where+  edgesFrom' g ns = (g, edgesFrom g ns) +  extend g (Graph.AcyclicSCC scc) = fst $ growGraph [scc] (edgesFrom' g [scc])+  extend g (Graph.CyclicSCC  scc) = loop (edgesFrom' g scc)+    where+    loop g | equal g g' = fst g+           | otherwise  = loop g'+      where g' = growGraph scc g +    equal = (==) `on` snd++  growGraph scc (g, es) =+    edgesFrom' (List.foldl' union g $ map newEdges es) scc+    where+    newEdges (a, b, w) = case Map.lookup b (unGraph g) of+      Just es -> Graph $ Map.singleton a $ Map.map (otimes w) es+      Nothing -> empty++prop_transitiveClosure g = label sccInfo $+  transitiveClosure g == transitiveClosure1 g+  where+  sccInfo =+    (if noSCCs <= 3 then "   " ++ show noSCCs+                    else ">= 4") +++    " strongly connected component(s)"+    where noSCCs = length (sccs g)+ findPath :: (SemiRing e, Ord n) => (e -> Bool) -> n -> n -> Graph n e -> Maybe e findPath good a b g = case filter good $ allPaths good a b g of   []    -> Nothing   w : _ -> Just w +-- | @allPaths classify a b g@ returns a list of pathes (accumulated edge weights)+--   from node @a@ to node @b@ in @g@.+--   Alternative intermediate pathes are only considered if they+--   are distinguished by the @classify@ function. allPaths :: (SemiRing e, Ord n, Ord c) => (e -> c) -> n -> n -> Graph n e -> [e] allPaths classify a b g = paths Set.empty a   where@@ -81,3 +240,78 @@           where tag = (c, classify w)                 found | b == c    = [w]                       | otherwise = []++------------------------------------------------------------------------+-- Utilities used to test the code above++instance (Ord n, SemiRing e, Arbitrary n, Arbitrary e) =>+         Arbitrary (Graph n e) where+  arbitrary = do+    nodes <- sized $ \n -> resize (isqrt n) arbitrary+    edges <- mapM (\(n1, n2) -> (\w -> (n1, n2, w)) <$> arbitrary) =<<+                  listOfElements ((,) <$> nodes <*> nodes)+    return (fromList edges `union` fromNodes nodes)+    where+    isqrt :: Int -> Int+    isqrt = round . sqrt . fromIntegral++  shrink g =+    [ removeNode n g     | n <- Set.toList $ nodes g ] +++    [ removeEdge n1 n2 g | (n1, n2, _) <- edges g ]++-- | Generates a node from the graph. (Unless the graph is empty.)++nodeIn :: (Ord n, Arbitrary n) => Graph n e -> Gen n+nodeIn g = elementsUnlessEmpty (Set.toList $ nodes g)++-- | Generates an edge from the graph. (Unless the graph contains no+-- edges.)++edgeIn :: (Ord n, Arbitrary n, Arbitrary e) =>+          Graph n e -> Gen (n, n, e)+edgeIn g = elementsUnlessEmpty (edges g)++-- | Used to test 'transitiveClosure' and 'transitiveClosure1'.++type G = Graph Int E++-- | Used to test 'transitiveClosure' and 'transitiveClosure1'.++newtype E = E { unE :: Bool }+  deriving (Arbitrary, Eq, Show)++instance SemiRing E where+  oplus  (E x) (E y) = E (x || y)+  otimes (E x) (E y) = E (x && y)++-- | All tests.++tests :: IO Bool+tests = runTests "Agda.Utils.Graph"++    -- Make sure that the invariant is established/preserved.+  [ quickCheck' invariant'+  , quickCheck' (all invariant' . shrink)+  , quickCheck' (invariant' . fromNodes)+  , quickCheck' (invariant' . fromList)+  , quickCheck' (invariant' empty)+  , quickCheck' (\n1 n2 w -> invariant' (singleton n1 n2 w))+  , quickCheck' (\n1 n2 w g -> invariant' (insert n1 n2 w g))+  , quickCheck' (\g n -> invariant' (removeNode n g))+  , quickCheck' (\g -> forAll (nodeIn g) $ \n ->+                    invariant' (removeNode n g))+  , quickCheck' (\g n1 n2 -> invariant' (removeEdge n1 n2 g))+  , quickCheck' (\g -> forAll (edgeIn g) $ \(n1, n2, _) ->+                    invariant' (removeEdge n1 n2 g))+  , quickCheck' (\g1 g2 -> invariant' (union g1 g2))+  , quickCheck' (invariant' . unions)+  , quickCheck' (invariant' . transitiveClosure1)+  , quickCheck' (invariant' . transitiveClosure)++    -- Other properties.+  , quickCheck' (prop_nodes_fromNodes :: [Int] -> Bool)+  , quickCheck' (prop_transitiveClosure :: G -> Property)+  ]+  where+  invariant' :: G -> Bool+  invariant' = invariant
+ src/full/Agda/Utils/HashMap.hs view
@@ -0,0 +1,6 @@++module Agda.Utils.HashMap+  ( module HashMap ) where++import Data.HashMap.Strict as HashMap+
− src/full/Agda/Utils/IO/Locale.hs
@@ -1,66 +0,0 @@-{-# LANGUAGE CPP #-}---- | IO functions which are used when reading from standard input and--- writing to standard output. Uses the UTF-8 character encoding under--- versions of the base library up to 4.1, and whatever the locale--- specifies under base 4.2 (and later?; only if the locale is--- supported, see "System.IO").------ Note that 'hSetEncoding' can be used to change the behaviour of the--- functions below if base 4.2 (or later?) is used.--module Agda.Utils.IO.Locale-  ( print-  , putStr-  , putStrLn-  , stdoutFlush-  , hGetContents-  ) where--import Prelude (Show, IO, String)-import System.IO (Handle, hFlush, stdout)-#if MIN_VERSION_base(4,2,0)-import qualified Prelude-import qualified System.IO as IO-#else-import qualified System.IO.UTF8 as UTF8-#endif--stdoutFlush :: IO ()-stdoutFlush = hFlush stdout---- | Prints the value.--print :: Show a => a -> IO ()-#if MIN_VERSION_base(4,2,0)-print = Prelude.print-#else-print = UTF8.print-#endif---- | Prints the string.--putStr :: String -> IO ()-#if MIN_VERSION_base(4,2,0)-putStr = Prelude.putStr-#else-putStr = UTF8.putStr-#endif---- | Prints the string with an appended newline.--putStrLn :: String -> IO ()-#if MIN_VERSION_base(4,2,0)-putStrLn = Prelude.putStrLn-#else-putStrLn = UTF8.putStrLn-#endif---- | Returns the stream represented by the handle lazily.--hGetContents :: Handle -> IO String-#if MIN_VERSION_base(4,2,0)-hGetContents = IO.hGetContents-#else-hGetContents = UTF8.hGetContents-#endif
src/full/Agda/Utils/IO/UTF8.hs view
@@ -1,5 +1,3 @@-{-# LANGUAGE CPP #-}- -- | Text IO using the UTF8 character encoding.  module Agda.Utils.IO.UTF8@@ -8,11 +6,7 @@   , Agda.Utils.IO.UTF8.writeFile   ) where -#if MIN_VERSION_base(4,2,0) import qualified System.IO as IO-#else-import qualified System.IO.UTF8 as UTF8-#endif import Control.Applicative  import Agda.Utils.Unicode@@ -22,35 +16,26 @@  readTextFile :: FilePath -> IO String readTextFile file = convertLineEndings <$> do-#if MIN_VERSION_base(4,2,0)   h <- IO.openFile file IO.ReadMode   IO.hSetNewlineMode h IO.noNewlineTranslation   IO.hSetEncoding h IO.utf8   IO.hGetContents h-#else-  UTF8.readFile file-#endif  -- | Writes UTF8-encoded text to the handle, which should be opened -- for writing and in text mode. The native convention for line -- endings is used.+--+-- The handle's text encoding is not necessarily preserved, it is+-- changed to UTF8.  hPutStr :: IO.Handle -> String -> IO ()-#if MIN_VERSION_base(4,2,0) hPutStr h s = do   IO.hSetEncoding h IO.utf8   IO.hPutStr h s-#else-hPutStr = UTF8.hPutStr-#endif  -- | Writes a UTF8-encoded text file. The native convention for line -- endings is used.  writeFile :: FilePath -> String -> IO ()-#if MIN_VERSION_base(4,2,0) writeFile file s = IO.withFile file IO.WriteMode $ \h -> do   hPutStr h s-#else-writeFile = UTF8.writeFile-#endif
src/full/Agda/Utils/List.hs view
@@ -22,6 +22,33 @@ mhead []    = Nothing mhead (x:_) = Just x +-- | Opposite of cons @(:)@, safe.+uncons :: [a] -> Maybe (a, [a])+uncons []     = Nothing+uncons (x:xs) = Just (x,xs)++-- | downFrom n = [n-1,..1,0]+downFrom :: Integral a => a -> [a]+downFrom n | n <= 0     = []+           | otherwise = let n' = n-1 in n' : downFrom n'++-- | Update the last element of a list, if it exists+updateLast :: (a -> a) -> [a] -> [a]+updateLast f [] = []+updateLast f [a] = [f a]+updateLast f (a : as@(_ : _)) = a : updateLast f as++-- | A generalized version of @partition@.+--   (Cf. @mapMaybe@ vs. @filter@).+mapEither :: (a -> Either b c) -> [a] -> ([b],[c])+{-# INLINE mapEither #-}+mapEither f xs = foldr (deal f) ([],[]) xs++deal :: (a -> Either b c) -> a -> ([b],[c]) -> ([b],[c])+deal f a ~(bs,cs) = case f a of+  Left  b -> (b:bs, cs)+  Right c -> (bs, c:cs)+ -- | Sublist relation. isSublistOf :: Eq a => [a] -> [a] -> Bool isSublistOf []       ys = True@@ -67,6 +94,14 @@ holes []     = [] holes (x:xs) = (x, xs) : map (id -*- (x:)) (holes xs) +-- | Check whether a list is sorted.+--+-- Assumes that the 'Ord' instance implements a partial order.++sorted :: Ord a => [a] -> Bool+sorted [] = True+sorted xs = and $ zipWith (<=) (init xs) (tail xs)+ -- | Check whether all elements in a list are distinct from each -- other. Assumes that the 'Eq' instance stands for an equivalence -- relation.@@ -168,6 +203,13 @@   forAll natural $ \n ->     forAll (two $ vector n) $ \(xs, ys) ->       zipWith' f xs ys == zipWith f xs ys++-- | Like zipWith, but returns the leftover elements of the input lists.+zipWithTails :: (a -> b -> c) -> [a] -> [b] -> ([c], [a] , [b])+zipWithTails f xs       []       = ([], xs, [])+zipWithTails f []       ys       = ([], [] , ys)+zipWithTails f (x : xs) (y : ys) = (f x y : zs , as , bs)+  where (zs , as , bs) = zipWithTails f xs ys  -- | Efficient version of nub that sorts the list first. The tag function is --   assumed to be cheap. If it isn't pair up the elements with their tags and
src/full/Agda/Utils/Map.hs view
@@ -4,9 +4,11 @@  import Prelude hiding (map, lookup, mapM) import Control.Applicative-import Data.Map+import Data.Map as Map import Data.Traversable+ import Agda.Utils.Monad+import Agda.Utils.Tuple  #include "../undefined.h" import Agda.Utils.Impossible@@ -37,3 +39,10 @@ -- | Filter a map based on the keys. filterKeys :: Ord k => (k -> Bool) -> Map k a -> Map k a filterKeys p = filterWithKey (const . p)++-- | Unzip a map.+unzip :: Map k (a, b) -> (Map k a, Map k b)+unzip m = (Map.map fst m, Map.map snd m)++unzip3 :: Map k (a, b, c) -> (Map k a, Map k b, Map k c)+unzip3 m = (Map.map fst3 m, Map.map snd3 m, Map.map thd3 m)
src/full/Agda/Utils/Maybe.hs view
@@ -10,3 +10,7 @@  fromMaybeM :: Monad m => m a -> m (Maybe a) -> m a fromMaybeM m mm = maybe m return =<< mm++unzipMaybe :: Maybe (a,b) -> (Maybe a, Maybe b)+unzipMaybe Nothing      = (Nothing, Nothing)+unzipMaybe (Just (a,b)) = (Just a, Just b)
src/full/Agda/Utils/Monad.hs view
@@ -1,7 +1,13 @@-{-# LANGUAGE FlexibleContexts #-}+{-# LANGUAGE CPP, FlexibleContexts #-}  module Agda.Utils.Monad     ( module Agda.Utils.Monad+{- Andreas 2012-04-21: I'd like to reexport Control.Monad except+   patching when and unless, but the hiding syntax is not valid yet+   (only a proposed language extension)++    , module Control.Monad hiding (when, unless)+-}     , (<$>), (<*>)     )     where@@ -14,50 +20,84 @@ import qualified Control.Monad.State.Strict as SS import Control.Monad.Writer import Control.Applicative-import Data.Traversable hiding (sequence)-import Data.Foldable+import Data.Traversable as Trav hiding (sequence)+import Data.Foldable as Fold import Data.Monoid+import Data.Maybe  import Agda.Utils.List --- Monads -----------------------------------------------------------------+#include "../undefined.h"+import Agda.Utils.Impossible -infixl 8 <.>+-- Conditionals and monads ------------------------------------------------ -(<.>) :: Monad m => (b -> m c) -> (a -> m b) -> a -> m c-f <.> g = \x -> f =<< g x+-- | @when_@ is just @Control.Monad.when@ with a more general type.+when_ :: Monad m => Bool -> m a -> m ()+when_ b m = when b $ do m >> return () -whenM :: Monad m => m Bool -> m () -> m ()-whenM c m = do	b <- c-		when b m+-- | @unless_@ is just @Control.Monad.unless@ with a more general type.+unless_ :: Monad m => Bool -> m a -> m ()+unless_ b m = unless b $ do m >> return () -unlessM :: Monad m => m Bool -> m () -> m ()-unlessM c m = do    b <- c-		    unless b m+whenJust :: Monad m => Maybe a -> (a -> m ()) -> m ()+whenJust m k = flip (maybe $ return ()) m k +whenM :: Monad m => m Bool -> m a -> m ()+whenM c m = c >>= (`when_` m)++unlessM :: Monad m => m Bool -> m a -> m ()+unlessM c m = c >>= (`unless_` m)++whenJustM :: Monad m => m (Maybe a) -> (a -> m ()) -> m ()+whenJustM c m = c >>= (`whenJust` m)+ ifM :: Monad m => m Bool -> m a -> m a -> m a ifM c m m' =     do	b <- c 	if b then m else m' -forgetM :: Applicative m => m a -> m ()-forgetM m = const () <$> m+-- | Lazy monadic conjunction.+and2M :: Monad m => m Bool -> m Bool -> m Bool+and2M ma mb = ifM ma mb (return False) -concatMapM :: Applicative m => (a -> m [b]) -> [a] -> m [b]-concatMapM f xs = concat <$> traverse f xs+andM :: Monad m => [m Bool] -> m Bool+andM = Fold.foldl and2M (return True) --- | Depending on the monad you have to look at the result for---   the force to be effective. For the 'IO' monad you do.-forceM :: Monad m => [a] -> m ()-forceM xs = do () <- length xs `seq` return ()-	       return ()+-- | Lazy monadic disjunction.+or2M :: Monad m => m Bool -> m Bool -> m Bool+or2M ma mb = ifM ma (return True) mb -commuteM :: (Traversable f, Applicative m) => f (m a) -> m (f a)-commuteM = traverse id+orM :: Monad m => [m Bool] -> m Bool+orM = Fold.foldl or2M (return False) -fmapM :: (Traversable f, Applicative m) => (a -> m b) -> f a -> m (f b)-fmapM f = commuteM . fmap f+-- | Lazy monadic disjunction with @Either@  truth values.+altM1 :: Monad m => (a -> m (Either err b)) -> [a] -> m (Either err b)+altM1 f []       = __IMPOSSIBLE__+altM1 f [a]      = f a+altM1 f (a : as) = either (const $ altM1 f as) (return . Right) =<< f a +-- Loops gathering results in a Monoid ------------------------------------++-- | Generalized version of @mapM_ :: Monad m => (a -> m ()) -> [a] -> m ()@+--   Executes effects and collects results in left-to-right order.+--   Works best with left-associative monoids.+--+--   Note that there is an alternative+--+--     @mapM' f t = foldr mappend mempty <$> mapM f t@+--+--   that collects results in right-to-left order (effects still right-to-left).+--   It might be preferable for right associative monoids.+mapM' :: (Foldable t, Monad m, Monoid b) => (a -> m b) -> t a -> m b+mapM' f = Fold.foldl (\ mb a -> liftM2 mappend mb (f a)) (return mempty)++-- | Generalized version of @forM_ :: Monad m => [a] -> (a -> m ()) -> m ()@+forM' :: (Foldable t, Monad m, Monoid b) => t a -> (a -> m b) -> m b+forM' = flip mapM'++-- Continuation monad -----------------------------------------------------+ type Cont r a = (a -> r) -> r  -- | 'Control.Monad.mapM' for the continuation monad. Terribly useful.@@ -66,10 +106,18 @@ thread f (x:xs) ret =     f x $ \y -> thread f xs $ \ys -> ret (y:ys) +-- Lists and monads -------------------------------------------------------+ -- | Requires both lists to have the same lengths. zipWithM' :: Monad m => (a -> b -> m c) -> [a] -> [b] -> m [c] zipWithM' f xs ys = sequence (zipWith' f xs ys) +-- | A monadic version of @mapMaybe :: (a -> Maybe b) -> [a] -> [b]@.+mapMaybeM :: (Monad m, Functor m) => (a -> m (Maybe b)) -> [a] -> m [b]+mapMaybeM f xs = catMaybes <$> Trav.mapM f xs++-- Error monad ------------------------------------------------------------+ -- | Finally for the 'Error' class. Errors in the finally part take -- precedence over prior errors. @@ -92,15 +140,23 @@   resource <- acquire   compute resource `finally` release resource --- Maybe --------------------------------------------------------------------mapMaybeM :: Applicative m => (a -> m b) -> Maybe a -> m (Maybe b)-mapMaybeM f = maybe (pure Nothing) (\x -> Just <$> f x)+-- State monad ------------------------------------------------------------ --- Either -----------------------------------------------------------------+-- | Bracket without failure.  Typically used to preserve state.+bracket_ :: (Monad m)+         => m a         -- ^ Acquires resource. Run first.+         -> (a -> m c)  -- ^ Releases resource. Run last.+         -> m b         -- ^ Computes result. Run in-between.+         -> m b+bracket_ acquire release compute = do+  resource <- acquire+  result <- compute+  release resource+  return result -liftEither :: MonadError e m => Either e a -> m a-liftEither = either throwError return+-- | Restore state after computation.+localState :: (MonadState s m) => m a -> m a+localState = bracket_ get put  -- Read ------------------------------------------------------------------- @@ -109,3 +165,53 @@ 	    [(x,"")]	-> return x 	    _		->               throwError $ strMsg $ "readM: parse error string " ++ s+++++-- RETIRED STUFF ----------------------------------------------------------+++{- Andreas 2012-04-21: <.> is obsolete, it is called <=< in Control.Monad+infixl 8 <.>++(<.>) :: Monad m => (b -> m c) -> (a -> m b) -> a -> m c+f <.> g = \x -> f =<< g x+-}++{- RETIRED, Andreas, 2012-04-30.+   For GHC >= 7, there is now Control.Monad.void.+forgetM :: Applicative m => m a -> m ()+forgetM m = const () <$> m+-}++{- RETIRED, Andreas, 2012-04-30. Not used.+concatMapM :: Applicative m => (a -> m [b]) -> [a] -> m [b]+concatMapM f xs = concat <$> traverse f xs++-- | Depending on the monad you have to look at the result for+--   the force to be effective. For the 'IO' monad you do.+forceM :: Monad m => [a] -> m ()+forceM xs = do () <- length xs `seq` return ()+	       return ()++commuteM :: (Traversable f, Applicative m) => f (m a) -> m (f a)+commuteM = traverse id++-- these are just instances of traverse:++fmapM :: (Traversable f, Applicative m) => (a -> m b) -> f a -> m (f b)+fmapM f = commuteM . fmap f++mapMaybeM :: Applicative m => (a -> m b) -> Maybe a -> m (Maybe b)+mapMaybeM f = maybe (pure Nothing) (\x -> Just <$> f x)++-}++{- UNUSED++-- Either -----------------------------------------------------------------++liftEither :: MonadError e m => Either e a -> m a+liftEither = either throwError return+-}
src/full/Agda/Utils/Permutation.hs view
@@ -1,16 +1,20 @@ {-# LANGUAGE DeriveDataTypeable, CPP #-} module Agda.Utils.Permutation where -import Data.Generics (Typeable, Data)+import Data.Typeable (Typeable) import Data.List import Agda.Utils.Size import Agda.Utils.Impossible  #include "../undefined.h" --- | @permute [2,3,1] [x,y,z] = [y,z,x]@-data Permutation = Perm Integer [Integer]-  deriving (Eq, Data, Typeable)+-- | @permute [1,2,0] [x0,x1,x2] = [x1,x2,x0]@+--+--   Agda typing would be:+--   @Perm : {m : Nat}(n : Nat) -> Vec (Fin n) m -> Permutation@+--   @m@ is the 'size' of the permutation.+data Permutation = Perm { permRange :: Int, permPicks :: [Int] }+  deriving (Eq, Typeable)  instance Show Permutation where   show (Perm n xs) = showx [0..n - 1] ++ " -> " ++ showx xs@@ -23,10 +27,13 @@ instance Sized Permutation where   size (Perm _ xs) = size xs --- | @permute [2,3,1] [x1,x2,x3] = [x2,x3,x1]@+-- | @permute [1,2,0] [x0,x1,x2] = [x1,x2,x0]@ --   More precisely, @permute indices list = sublist@, generates @sublist@ --   from @list@ by picking the elements of list as indicated by @indices@.---   @permute [2,4,1] [x1,x2,x3,x4] = [x2,x4,x1]@+--   @permute [1,3,0] [x0,x1,x2,x3] = [x1,x3,x0]@+--+--   Agda typing:+--   @permute (Perm {m} n is) : Vec A m -> Vec A n@ permute :: Permutation -> [a] -> [a] permute (Perm _ is) xs = map (xs !!!) is   where@@ -34,12 +41,19 @@     (x:xs) !!! 0 = x     (x:xs) !!! n = xs !!! (n - 1) -idP :: Integer -> Permutation+idP :: Int -> Permutation idP n = Perm n [0..n - 1] -takeP :: Integer -> Permutation -> Permutation+takeP :: Int -> Permutation -> Permutation takeP n (Perm m xs) = Perm n $ filter (< n) xs +-- | @liftP k@ takes a @Perm {m} n@ to a @Perm {m+k} (n+k)@.+--   Analogous to 'Agda.TypeChecking.Substitution.liftS',+--   but Permutations operate on de Bruijn LEVELS, not indices.+liftP :: Int -> Permutation -> Permutation+liftP n (Perm m xs) = Perm (n + m) $ xs ++ [m..m+n-1]+-- liftP n (Perm m xs) = Perm (n + m) $ [0..n-1] ++ map (n+) xs -- WRONG, works for indices, but not for levels+ -- | @permute (compose p1 p2) == permute p1 . permute p2@ composeP :: Permutation -> Permutation -> Permutation composeP p1 (Perm n xs) = Perm n $ permute p1 xs@@ -71,11 +85,24 @@     holesBelow k = genericLength $ filter (< k) missing     adjust k = k - holesBelow k +-- | @permute (reverseP p) xs ==+--    reverse $ permute p $ reverse xs@+--+--   Example:+--   @+--        permute (reverseP (Perm 4 [1,3,0])) [x0,x1,x2,x3]+--     == permute (Perm 4 $ map (3-) [0,3,1]) [x0,x1,x2,x3]+--     == permute (Perm 4 [3,0,2]) [x0,x1,x2,x3]+--     == [x3,x0,x2]+--     == reverse [x2,x0,x3]+--     == reverse $ permute (Perm 4 [1,3,0]) [x3,x2,x1,x0]+--     == reverse $ permute (Perm 4 [1,3,0]) $ reverse [x0,x1,x2,x3]+--   @ reverseP :: Permutation -> Permutation reverseP (Perm n xs) = Perm n $ map ((n - 1) -) $ reverse xs  -- | @expandP i n π@ in the domain of @π@ replace the /i/th element by /n/ elements.-expandP :: Integer -> Integer -> Permutation -> Permutation+expandP :: Int -> Int -> Permutation -> Permutation expandP i n (Perm m xs) = Perm (m + n - 1) $ concatMap expand xs   where     expand j
+ src/full/Agda/Utils/Pointed.hs view
@@ -0,0 +1,14 @@+module Agda.Utils.Pointed where++-- | Pointed class.+--+--   We could have used Data.Pointed by Edward Kmett, but it has a+--   lot of package dependencies.+class Pointed f where+  point :: a -> f a++instance Pointed [] where+  point a = [a]++instance Pointed Maybe where+  point = Just
src/full/Agda/Utils/Pointer.hs view
@@ -1,24 +1,77 @@---- | Wrappers for 'IORef's.-module Agda.Utils.Pointer where+{-# LANGUAGE DeriveDataTypeable #-}+module Agda.Utils.Pointer+  ( Ptr, newPtr, derefPtr, setPtr+  , updatePtr, updatePtrM+  ) where -import Control.Monad.Trans+import Control.Applicative+import Control.DeepSeq+import Control.Concurrent.MVar+import Data.Foldable+import Data.Function+import Data.Hashable import Data.IORef+import Data.Traversable+import System.IO.Unsafe+import Data.HashTable.IO+import Data.Typeable -type Ptr a = IORef a+data Ptr a = Ptr { ptrTag :: !Integer+                 , ptrRef :: !(IORef a) }+  deriving (Typeable) -deref :: MonadIO io => Ptr a -> io a-deref p = liftIO $ readIORef p+{-# NOINLINE freshVar #-}+freshVar :: MVar Integer+freshVar = unsafePerformIO $ newMVar 0 -store :: MonadIO io => Ptr a -> a -> io ()-store p x = liftIO $ writeIORef p x+fresh :: IO Integer+fresh = do+    x <- takeMVar freshVar+    putMVar freshVar $! x + 1+    return x -alloc :: MonadIO io => a -> io (Ptr a)-alloc x = liftIO $ newIORef x+{-# NOINLINE newPtr #-}+newPtr :: a -> Ptr a+newPtr x = unsafePerformIO $ do+  i <- fresh+  Ptr i <$> newIORef x -updatePtr :: MonadIO io => Ptr a -> (a -> io a) -> io a-updatePtr p f = do-    x <- deref p-    y <- f x-    store p y-    return y+derefPtr :: Ptr a -> a+derefPtr p = unsafePerformIO $ readIORef $ ptrRef p++{-# NOINLINE updatePtr #-}+updatePtr :: (a -> a) -> Ptr a -> Ptr a+updatePtr f p = unsafePerformIO $ p <$ modifyIORef (ptrRef p) f++setPtr :: a -> Ptr a -> Ptr a+setPtr x = updatePtr (const x)++-- | If @f a@ contains many copies of @a@ they will all be the same pointer in+--   the result. If the function is well-behaved (i.e. preserves the implicit+--   equivalence, this shouldn't matter).+updatePtrM :: Functor f => (a -> f a) -> Ptr a -> f (Ptr a)+updatePtrM f p = flip setPtr p <$> f (derefPtr p)++instance Show a => Show (Ptr a) where+  show p = "#" ++ show (ptrTag p) ++ "{" ++ show (derefPtr p) ++ "}"++instance Functor Ptr where+  fmap f = newPtr . f . derefPtr++instance Foldable Ptr where+  foldMap f = f . derefPtr++instance Traversable Ptr where+  traverse f p = newPtr <$> f (derefPtr p)++instance Eq (Ptr a) where+  (==) = (==) `on` ptrTag++instance Ord (Ptr a) where+  compare = compare `on` ptrTag++instance Hashable (Ptr a) where+  hash = hash . ptrTag++instance NFData (Ptr a) where+
src/full/Agda/Utils/String.hs view
@@ -8,15 +8,15 @@ import Data.List import Numeric --- | 'quote' adds double quotes around the string, and escapes double--- quotes and backslashes within the string. This is different from--- the behaviour of 'show':+-- | 'quote' adds double quotes around the string, replaces newline+-- characters with @\n@, and escapes double quotes and backslashes+-- within the string. This is different from the behaviour of 'show': -- -- @ -- \> 'putStrLn' $ 'show' \"\\x2200\" -- \"\\8704\" -- \> 'putStrLn' $ 'quote' \"\\x2200\"--- \"&#x2200;\"+-- \"∀\" -- @ -- -- (The code examples above have been tested using version 4.2.0.0 of@@ -25,7 +25,8 @@ quote :: String -> String quote s = "\"" ++ concatMap escape s ++ "\""   where-  escape c | c `elem` escapeChars = ['\\', c]+  escape c | c == '\n'            = "\\n"+           | c `elem` escapeChars = ['\\', c]            | otherwise            = [c]    escapeChars = "\"\\"
src/full/Agda/Utils/Suffix.hs view
@@ -1,23 +1,60 @@-{-# LANGUAGE PatternGuards #-}+{-# LANGUAGE CPP, PatternGuards #-} module Agda.Utils.Suffix where  import Data.Char -data Suffix = NoSuffix | Prime Int | Index Int+#include "../undefined.h"+import Agda.Utils.Impossible -nextSuffix NoSuffix  = Prime 1-nextSuffix (Prime _) = Index 0	-- we only use single primes in generated names-nextSuffix (Index i) = Index $ i + 1+------------------------------------------------------------------------+-- Subscript digits +-- | Is the character one of the subscripts @'₀'@-@'₉'@?++isSubscriptDigit :: Char -> Bool+isSubscriptDigit c = '₀' <= c && c <= '₉'++-- | Converts @'0'@-@'9'@ to @'₀'@-@'₉'@.+--+-- Precondition: The digit needs to be in range.++toSubscriptDigit :: Char -> Char+toSubscriptDigit d+  | isDigit d = toEnum (fromEnum '₀' + (fromEnum d - fromEnum '0'))+  | otherwise = __IMPOSSIBLE__++-- | Converts @'₀'@-@'₉'@ to @'0'@-@'9'@.+--+-- Precondition: The digit needs to be in range.++fromSubscriptDigit :: Char -> Char+fromSubscriptDigit d+  | isSubscriptDigit d =+      toEnum (fromEnum '0' + (fromEnum d - fromEnum '₀'))+  | otherwise          = __IMPOSSIBLE__++------------------------------------------------------------------------+-- Suffices++data Suffix = NoSuffix | Prime Int | Index Int | Subscript Int++nextSuffix NoSuffix      = Subscript 1+nextSuffix (Prime i)     = Prime $ i + 1+nextSuffix (Index i)     = Index $ i + 1+nextSuffix (Subscript i) = Subscript $ i + 1+ suffixView :: String -> (String, Suffix) suffixView s-    | (ps@(_:_), s') <- span (=='\'') rs = (reverse s', Prime $ length ps)-    | (ns@(_:_), s') <- span isDigit rs	 = (reverse s', Index $ read $ reverse ns)-    | otherwise				 = (s, NoSuffix)-    where-	rs = reverse s+    | (ps@(_:_), s') <- span (=='\'') rs         = (reverse s', Prime $ length ps)+    | (ns@(_:_), s') <- span isDigit rs          = (reverse s', Index $ read $ reverse ns)+    | (ns@(_:_), s') <- span isSubscriptDigit rs = (reverse s',+                                                    Subscript $ read $+                                                      map fromSubscriptDigit $ reverse ns)+    | otherwise                                  = (s, NoSuffix)+    where rs = reverse s  addSuffix :: String -> Suffix -> String-addSuffix s NoSuffix = s-addSuffix s (Prime n) = s ++ replicate n '\''-addSuffix s (Index i) = s ++ show i+addSuffix s NoSuffix      = s+addSuffix s (Prime n)     = s ++ replicate n '\''+addSuffix s (Index i)     = s ++ show i+addSuffix s (Subscript i) = s ++ map toSubscriptDigit (show i)
src/full/Agda/Utils/TestHelpers.hs view
@@ -15,6 +15,7 @@   , maybeGen   , maybeCoGen   , listOfElements+  , elementsUnlessEmpty   , two   , three     -- * Test driver.@@ -26,7 +27,6 @@ import Data.List  import Agda.Utils.QuickCheck-import qualified Agda.Utils.IO.Locale as LocIO  ------------------------------------------------------------------------ -- Algebraic properties@@ -105,6 +105,13 @@ listOfElements [] = return [] listOfElements xs = listOf $ elements xs +-- | If the given list is non-empty, then an element from the list is+-- generated, and otherwise an arbitrary element is generated.++elementsUnlessEmpty :: Arbitrary a => [a] -> Gen a+elementsUnlessEmpty [] = arbitrary+elementsUnlessEmpty xs = elements xs+ -- | Generates values of 'Maybe' type, using the given generator to -- generate the contents of the 'Just' constructor. @@ -139,5 +146,5 @@          -> [IO Bool]          -> IO Bool runTests name tests = do-  LocIO.putStrLn name+  putStrLn name   fmap and $ sequence tests
+ src/full/Agda/Utils/Time.hs view
@@ -0,0 +1,33 @@+{-# LANGUAGE CPP #-}++-- | Time-related utilities.++module Agda.Utils.Time+  ( ClockTime+  , getClockTime+  ) where++#if MIN_VERSION_directory(1,1,1)+import qualified Data.Time+#else+import qualified System.Time+#endif++-- | Timestamps.++type ClockTime =+#if MIN_VERSION_directory(1,1,1)+  Data.Time.UTCTime+#else+  System.Time.ClockTime+#endif++-- | The current time.++getClockTime :: IO ClockTime+getClockTime =+#if MIN_VERSION_directory(1,1,1)+  Data.Time.getCurrentTime+#else+  System.Time.getClockTime+#endif
src/full/Agda/Utils/Tuple.hs view
@@ -1,14 +1,63 @@+{-# LANGUAGE TupleSections, GeneralizedNewtypeDeriving, DeriveFunctor, DeriveFoldable, DeriveTraversable #-}  module Agda.Utils.Tuple where +import Control.Applicative++import Data.Foldable+import Data.Traversable+ infix 2 -*- infix 3 /\ -- backslashes at EOL interacts badly with CPP... +-- | Bifunctoriality for pairs. (-*-) :: (a -> c) -> (b -> d) -> (a,b) -> (c,d)-(f -*- g) (x,y) = (f x, g y)+(f -*- g) ~(x,y) = (f x, g y) +-- | @mapFst f = f -*- id@+mapFst :: (a -> c) -> (a,b) -> (c,b)+mapFst f ~(x,y) = (f x, y)++-- | @mapSnd g = id -*- g@+mapSnd :: (b -> d) -> (a,b) -> (a,d)+mapSnd g ~(x,y) = (x, g y)++-- | Lifted pairing. (/\) :: (a -> b) -> (a -> c) -> a -> (b,c) (f /\ g) x = (f x, g x) +-- * Triple (stolen from Data.Tuple.HT)++{-# INLINE fst3 #-}+fst3 :: (a,b,c) -> a+fst3 ~(x,_,_) = x++{-# INLINE snd3 #-}+snd3 :: (a,b,c) -> b+snd3 ~(_,x,_) = x++{-# INLINE thd3 #-}+thd3 :: (a,b,c) -> c+thd3 ~(_,_,x) = x++{-# INLINE uncurry3 #-} uncurry3 :: (a -> b -> c -> d) -> (a,b,c) -> d-uncurry3 f (x,y,z) = f x y z+uncurry3 f ~(x,y,z) = f x y z++uncurry4 :: (a -> b -> c -> d -> e) -> (a,b,c,d) -> e+uncurry4 f ~(w,x,y,z) = f w x y z++-- | Monadic version of '-*-'.+mapPairM :: (Applicative m) => (a -> m c) -> (b -> m d) -> (a,b) -> m (c,d)+mapPairM f g ~(a,b) = (,) <$> f a <*> g b++-- | Monadic 'mapFst'.+mapFstM :: (Applicative m) => (a -> m c) -> (a,b) -> m (c,b)+mapFstM f ~(a,b) = (,b) <$> f a++-- | Monadic 'mapSnd'.+mapSndM :: (Applicative m) => (b -> m d) -> (a,b) -> m (a,d)+mapSndM f ~(a,b) = (a,) <$> f b++newtype List2 a = List2 { list2 :: (a,a) }+  deriving (Eq, Functor, Foldable, Traversable)
src/full/Agda/Utils/VarSet.hs view
@@ -7,12 +7,12 @@   )   where -import Data.Set as Set+import Data.IntSet as Set -type VarSet = Set Integer+type VarSet = Set.IntSet -subtract :: Integer -> VarSet -> VarSet-subtract n s = Set.mapMonotonic (Prelude.subtract n) s+subtract :: Int -> VarSet -> VarSet+subtract n s = Set.map (Prelude.subtract n) s  {- import Data.Bits
src/full/Agda/Utils/Warshall.hs view
@@ -280,9 +280,11 @@    v < v  for a rigid variable v +{- Andreas, 2012-09-19 OUTDATED   v <= v' for rigid variables v,v'    x < v   for a flexible variable x and a rigid variable v+-}  thus, for each flexible x, only one of the following cases is possible @@ -325,21 +327,27 @@          -- compute the sets of flexible and rigid node numbers          ns  = Map.keys (nodeMap gr)          -- a set of flexible variables-         flexs  = foldl (\ l k -> case k of (Flex i) -> i : l-                                            (Rigid _) -> l) [] ns+         flexs  = foldl' (\ l k -> case k of (Flex i) -> i : l+                                             (Rigid _) -> l) [] ns          -- a set of rigid variables-         rigids = foldl (\ l k -> case k of (Flex _) -> l-                                            (Rigid i) -> i : l) [] ns+         rigids = foldl' (\ l k -> case k of (Flex _) -> l+                                             (Rigid i) -> i : l) [] ns           -- rigid matrix indices-         rInds = foldl (\ l r -> let Just i = Map.lookup (Rigid r) (nodeMap gr)-                                 in i : l) [] rigids+         rInds = foldl' (\ l r -> let Just i = Map.lookup (Rigid r) (nodeMap gr)+                                  in i : l) [] rigids           -- check whether there is a solution          -- d   = [ m!(i,i) | i <- [0 .. (n-1)] ]  -- diagonal -- a rigid variable might not be less than it self, so no -.. on the -- rigid part of the diagonal-         solvable = all (\ x -> x >= Finite 0) [ m!(i,i) | i <- rInds ] &&+         solvable = all (\ x -> x >= Finite 0) [ m!(i,i) | i <- rInds ] && True++{-  Andreas, 2012-09-19+    We now can have constraints between rigid variables, like i < j.+    Thus we skip the following two test.  However, a solution must be+    checked for consistency with the constraints on rigid vars.+ -- a rigid variable might not be bounded below by infinity or -- bounded above by a constant -- it might not be related to another rigid variable@@ -357,7 +365,7 @@                     edge = m!(row,col)                 in  edge >= Finite 0)              [ (x,v) | x <- flexs, (RVar v) <- rigids ]-+-}           inScope :: FlexId -> Rigid -> Bool          inScope x (RConst _) = True@@ -378,7 +386,7 @@          loop1 flxs (r:rgds) subst =             let row = fromJust $ Map.lookup (Rigid r) (nodeMap gr)                 (flxs',subst') =-                  foldl (\ (flx,sub) f ->+                  foldl' (\ (flx,sub) f ->                           let col = fromJust $ Map.lookup (Flex f) (nodeMap gr)                           in  case (inScope f r, m!(row,col)) of --                                Finite z | z <= 0 ->@@ -518,9 +526,4 @@     g =~= g' = sort (edges g) == sort (edges g')  tests :: IO Bool-tests = runTests "Agda.Utils.Warshall"-  [ quickCheck' prop_smaller-  , quickCheck' prop_path-  , quickCheck' prop_disjoint-  , quickCheck' prop_stable-  ]+tests = runTests "Agda.Utils.Warshall" []
+ src/main/Main.hs view
@@ -0,0 +1,12 @@+-- | Wrapper for "Agda.Main".+--+-- Agda is installed as a library. This module is used to build the+-- executable.++module Main (main) where++import qualified Agda.Main ( main )+import Prelude ( IO )++main :: IO ()+main = Agda.Main.main