packages feed

tip-lib 0.1.2 → 0.2

raw patch · 43 files changed

+3757/−1653 lines, 43 filesdep +filepathdep +genifunctorsdep +structural-inductiondep −pretty-show

Dependencies added: filepath, genifunctors, structural-induction

Dependencies removed: pretty-show

Files

changelog view
@@ -1,3 +1,17 @@+tip-lib 0.2 (released 2015-10-28):+* New output modes:+    * Haskell with support for Feat, QuickCheck, LazySmallCheck, and smten.+    * TFF+    * SMTLIB with axiomatised function definitions+* New passes to manipulate assertions,+  apply structural induction, monomorphise, transform+  booleans and integers, axiomatize function declarations.+* Parser changes:+    * Support declare-const, define-fun, define-fun-rec.+    * Correctly handle let-expressions+* Pretty print chained let expressions in groups+* New helper exports in Tip.Core and Tip.Utils+ tip-lib 0.1.2 (released 2015-06-11): * Make haddock documentation build (reported by Peter Simons.) 
dist/build/Tip/Parser/LexTIP.hs view
@@ -29,18 +29,18 @@ import GlaExts #endif alex_base :: AlexAddr-alex_base = AlexA# "\xf8\xff\xff\xff\xb8\xff\xff\xff\x00\x00\x00\x00\x2d\x00\x00\x00\x00\x00\x00\x00\xad\x00\x00\x00\x2d\x01\x00\x00\xad\x01\x00\x00\xed\x01\x00\x00\x2d\x02\x00\x00\xed\x02\x00\x00\xad\x02\x00\x00\x00\x00\x00\x00\xa3\x03\x00\x00\xff\xff\xff\xff\x82\x04\x00\x00\xe5\x04\x00\x00\x00\x00\x00\x00\x48\x05\x00\x00\xab\x05\x00\x00\x0e\x06\x00\x00\x71\x06\x00\x00\xd4\x06\x00\x00\x37\x07\x00\x00\x9a\x07\x00\x00\xfd\x07\x00\x00\x60\x08\x00\x00\xc3\x08\x00\x00\x26\x09\x00\x00\x89\x09\x00\x00\xec\x09\x00\x00\x4f\x0a\x00\x00\xb2\x0a\x00\x00\x15\x0b\x00\x00\x78\x0b\x00\x00\xdb\x0b\x00\x00\x3e\x0c\x00\x00\xa1\x0c\x00\x00\x04\x0d\x00\x00\x67\x0d\x00\x00\xca\x0d\x00\x00\x2d\x0e\x00\x00\x90\x0e\x00\x00\xf3\x0e\x00\x00\x56\x0f\x00\x00\xb9\x0f\x00\x00\x1c\x10\x00\x00\x7f\x10\x00\x00\xe2\x10\x00\x00\x45\x11\x00\x00\xa8\x11\x00\x00\x0b\x12\x00\x00\x6e\x12\x00\x00\xd1\x12\x00\x00\x34\x13\x00\x00\x97\x13\x00\x00\xfa\x13\x00\x00\x5d\x14\x00\x00\xc0\x14\x00\x00\x23\x15\x00\x00\x86\x15\x00\x00\xe9\x15\x00\x00\x4c\x16\x00\x00\xaf\x16\x00\x00\x12\x17\x00\x00\x75\x17\x00\x00\xd8\x17\x00\x00\x3b\x18\x00\x00\x9e\x18\x00\x00\x01\x19\x00\x00\xdd\xff\xff\xff"#+alex_base = AlexA# "\xf8\xff\xff\xff\xb8\xff\xff\xff\x00\x00\x00\x00\x2d\x00\x00\x00\x00\x00\x00\x00\xad\x00\x00\x00\x2d\x01\x00\x00\xad\x01\x00\x00\xed\x01\x00\x00\x2d\x02\x00\x00\xed\x02\x00\x00\xad\x02\x00\x00\x00\x00\x00\x00\xa3\x03\x00\x00\xff\xff\xff\xff\x82\x04\x00\x00\xe5\x04\x00\x00\x48\x05\x00\x00\x00\x00\x00\x00\xab\x05\x00\x00\x0e\x06\x00\x00\x71\x06\x00\x00\xd4\x06\x00\x00\x37\x07\x00\x00\x9a\x07\x00\x00\xfd\x07\x00\x00\x60\x08\x00\x00\xc3\x08\x00\x00\x26\x09\x00\x00\x89\x09\x00\x00\xec\x09\x00\x00\x4f\x0a\x00\x00\xb2\x0a\x00\x00\x15\x0b\x00\x00\x78\x0b\x00\x00\xdb\x0b\x00\x00\x3e\x0c\x00\x00\xa1\x0c\x00\x00\x04\x0d\x00\x00\x67\x0d\x00\x00\xca\x0d\x00\x00\x2d\x0e\x00\x00\x90\x0e\x00\x00\xf3\x0e\x00\x00\x56\x0f\x00\x00\xb9\x0f\x00\x00\x1c\x10\x00\x00\x7f\x10\x00\x00\xe2\x10\x00\x00\x45\x11\x00\x00\xa8\x11\x00\x00\x0b\x12\x00\x00\x6e\x12\x00\x00\xd1\x12\x00\x00\x34\x13\x00\x00\x97\x13\x00\x00\xfa\x13\x00\x00\x5d\x14\x00\x00\xc0\x14\x00\x00\x23\x15\x00\x00\x86\x15\x00\x00\xe9\x15\x00\x00\x4c\x16\x00\x00\xaf\x16\x00\x00\x12\x17\x00\x00\x75\x17\x00\x00\xd8\x17\x00\x00\x3b\x18\x00\x00\x9e\x18\x00\x00\x01\x19\x00\x00\x64\x19\x00\x00\xc7\x19\x00\x00\x2a\x1a\x00\x00\xdd\xff\xff\xff"#  alex_table :: AlexAddr-alex_table = AlexA# "\x00\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x00\x00\x00\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x46\x00\x46\x00\x46\x00\x46\x00\x46\x00\x46\x00\x46\x00\x46\x00\x46\x00\x46\x00\x00\x00\x0e\x00\x33\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x0e\x00\x11\x00\x11\x00\x10\x00\x10\x00\x00\x00\x10\x00\x33\x00\x33\x00\x46\x00\x46\x00\x46\x00\x46\x00\x46\x00\x46\x00\x46\x00\x46\x00\x46\x00\x46\x00\x00\x00\x0d\x00\x0f\x00\x12\x00\x0f\x00\x33\x00\x10\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x00\x00\x00\x00\x00\x00\x33\x00\x33\x00\x00\x00\x2e\x00\x32\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\x00\x00\x00\x00\x00\x00\x33\x00\x0b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x08\x00\x01\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x06\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x0a\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x00\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x00\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x00\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x00\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0a\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0b\x00\x06\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x01\x00\x05\x00\x04\x00\x04\x00\x04\x00\x03\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x33\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x33\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x33\x00\x10\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x33\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x33\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x33\x00\x09\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x33\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x33\x00\x33\x00\x10\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x33\x00\x09\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x33\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x33\x00\x09\x00\x33\x00\x33\x00\x10\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x33\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x33\x00\x09\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x10\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x33\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x33\x00\x09\x00\x33\x00\x33\x00\x33\x00\x33\x00\x13\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x33\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x33\x00\x09\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x44\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x33\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x33\x00\x09\x00\x33\x00\x33\x00\x33\x00\x33\x00\x14\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x33\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x33\x00\x09\x00\x43\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x33\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x33\x00\x09\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x43\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x33\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x33\x00\x09\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x18\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x33\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x33\x00\x09\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x42\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x33\x00\x00\x00\x41\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x33\x00\x09\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x45\x00\x00\x00\x00\x00\x33\x00\x33\x00\x00\x00\x40\x00\x33\x00\x33\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x00\x00\x00\x00\x00\x00\x33\x00\x32\x00\x09\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x33\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x33\x00\x08\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x3f\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x45\x00\x00\x00\x00\x00\x33\x00\x33\x00\x00\x00\x1a\x00\x33\x00\x33\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x00\x00\x00\x00\x00\x00\x33\x00\x32\x00\x09\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x45\x00\x00\x00\x00\x00\x33\x00\x33\x00\x00\x00\x3e\x00\x33\x00\x33\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x00\x00\x00\x00\x00\x00\x33\x00\x32\x00\x08\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x33\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x33\x00\x08\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x1c\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x45\x00\x00\x00\x00\x00\x33\x00\x33\x00\x00\x00\x33\x00\x33\x00\x33\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x00\x00\x00\x00\x00\x00\x33\x00\x32\x00\x09\x00\x32\x00\x32\x00\x32\x00\x32\x00\x1d\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x45\x00\x00\x00\x00\x00\x33\x00\x33\x00\x00\x00\x33\x00\x33\x00\x33\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x00\x00\x00\x00\x00\x00\x33\x00\x32\x00\x08\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x1f\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x33\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x33\x00\x08\x00\x3d\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x45\x00\x00\x00\x00\x00\x33\x00\x33\x00\x00\x00\x33\x00\x33\x00\x33\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x00\x00\x00\x00\x00\x00\x33\x00\x32\x00\x09\x00\x32\x00\x32\x00\x23\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x33\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x33\x00\x08\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x3b\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x45\x00\x00\x00\x00\x00\x33\x00\x33\x00\x00\x00\x33\x00\x33\x00\x33\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x00\x00\x00\x00\x00\x00\x33\x00\x32\x00\x09\x00\x3a\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x45\x00\x00\x00\x00\x00\x33\x00\x33\x00\x00\x00\x33\x00\x33\x00\x33\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x00\x00\x00\x00\x00\x00\x33\x00\x32\x00\x08\x00\x32\x00\x32\x00\x32\x00\x32\x00\x25\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x45\x00\x00\x00\x00\x00\x33\x00\x33\x00\x00\x00\x33\x00\x33\x00\x33\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x00\x00\x00\x00\x00\x00\x33\x00\x32\x00\x08\x00\x32\x00\x32\x00\x32\x00\x32\x00\x39\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x33\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x33\x00\x08\x00\x38\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x45\x00\x00\x00\x00\x00\x33\x00\x33\x00\x00\x00\x33\x00\x33\x00\x33\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x00\x00\x00\x00\x00\x00\x33\x00\x32\x00\x09\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x29\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x45\x00\x00\x00\x00\x00\x33\x00\x33\x00\x00\x00\x37\x00\x33\x00\x33\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x00\x00\x00\x00\x00\x00\x33\x00\x32\x00\x08\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x45\x00\x00\x00\x00\x00\x33\x00\x33\x00\x00\x00\x33\x00\x33\x00\x33\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x00\x00\x00\x00\x00\x00\x33\x00\x32\x00\x08\x00\x32\x00\x32\x00\x36\x00\x32\x00\x32\x00\x31\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x45\x00\x00\x00\x00\x00\x33\x00\x33\x00\x00\x00\x33\x00\x33\x00\x33\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x00\x00\x00\x00\x00\x00\x33\x00\x32\x00\x08\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x2b\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x45\x00\x00\x00\x00\x00\x33\x00\x33\x00\x00\x00\x33\x00\x33\x00\x33\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x00\x00\x00\x00\x00\x00\x33\x00\x32\x00\x08\x00\x32\x00\x32\x00\x32\x00\x32\x00\x2c\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x45\x00\x00\x00\x00\x00\x33\x00\x33\x00\x00\x00\x33\x00\x33\x00\x33\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x00\x00\x00\x00\x00\x00\x33\x00\x32\x00\x08\x00\x32\x00\x32\x00\x32\x00\x32\x00\x2d\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x45\x00\x00\x00\x00\x00\x33\x00\x33\x00\x00\x00\x33\x00\x33\x00\x33\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x00\x00\x00\x00\x00\x00\x33\x00\x32\x00\x08\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x34\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x45\x00\x00\x00\x00\x00\x33\x00\x33\x00\x00\x00\x33\x00\x33\x00\x33\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x00\x00\x00\x00\x00\x00\x33\x00\x32\x00\x08\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x33\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x33\x00\x08\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x45\x00\x00\x00\x00\x00\x33\x00\x33\x00\x00\x00\x33\x00\x33\x00\x33\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x00\x00\x00\x00\x00\x00\x33\x00\x32\x00\x09\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x2f\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x45\x00\x00\x00\x00\x00\x33\x00\x33\x00\x00\x00\x33\x00\x33\x00\x33\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x00\x00\x00\x00\x00\x00\x33\x00\x32\x00\x08\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x28\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x45\x00\x00\x00\x00\x00\x33\x00\x33\x00\x00\x00\x33\x00\x33\x00\x33\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x00\x00\x00\x00\x00\x00\x33\x00\x32\x00\x08\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x27\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x33\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x33\x00\x08\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x26\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x33\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x33\x00\x09\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x24\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x45\x00\x00\x00\x00\x00\x33\x00\x33\x00\x00\x00\x33\x00\x33\x00\x33\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x00\x00\x00\x00\x00\x00\x33\x00\x32\x00\x09\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x3c\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x45\x00\x00\x00\x00\x00\x33\x00\x33\x00\x00\x00\x33\x00\x33\x00\x33\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x00\x00\x00\x00\x00\x00\x33\x00\x32\x00\x08\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x22\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x33\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x33\x00\x08\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x21\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x45\x00\x00\x00\x00\x00\x33\x00\x33\x00\x00\x00\x33\x00\x33\x00\x33\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x00\x00\x00\x00\x00\x00\x33\x00\x32\x00\x09\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x20\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x33\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x33\x00\x08\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x1e\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x33\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x33\x00\x09\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x19\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x33\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x33\x00\x09\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x17\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x33\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x33\x00\x09\x00\x33\x00\x33\x00\x33\x00\x2a\x00\x33\x00\x16\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x1b\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x33\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x33\x00\x09\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x15\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x33\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x33\x00\x09\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x43\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x33\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x33\x00\x09\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x10\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x33\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x33\x00\x09\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x10\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x45\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x00\x00\x00\x00\x00\x00\x00\x00\x45\x00\x09\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x00\x00\x00\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x00\x00\x0e\x00\x34\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x0e\x00\x12\x00\x12\x00\x11\x00\x11\x00\x00\x00\x12\x00\x34\x00\x34\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x00\x00\x0d\x00\x0f\x00\x13\x00\x0f\x00\x34\x00\x11\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x34\x00\x34\x00\x00\x00\x32\x00\x33\x00\x35\x00\x31\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x34\x00\x0b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x08\x00\x01\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x06\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x0a\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\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\x48\x00\x48\x00\x48\x00\x48\x00\x48\x00\x48\x00\x48\x00\x48\x00\x48\x00\x48\x00\x00\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\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\x48\x00\x48\x00\x48\x00\x48\x00\x00\x00\x48\x00\x48\x00\x48\x00\x48\x00\x48\x00\x48\x00\x48\x00\x48\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0a\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0b\x00\x06\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x01\x00\x05\x00\x04\x00\x04\x00\x04\x00\x03\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x34\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x34\x00\x00\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x34\x00\x11\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x34\x00\x00\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x34\x00\x00\x00\x43\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x34\x00\x09\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x1f\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x34\x00\x00\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x34\x00\x09\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x34\x00\x00\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x34\x00\x34\x00\x11\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x34\x00\x09\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x34\x00\x00\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x34\x00\x09\x00\x34\x00\x34\x00\x11\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x34\x00\x00\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x34\x00\x09\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x11\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x34\x00\x00\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x34\x00\x09\x00\x34\x00\x34\x00\x34\x00\x34\x00\x14\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x34\x00\x00\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x34\x00\x09\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x46\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x34\x00\x00\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x34\x00\x09\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x47\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x34\x00\x00\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x34\x00\x09\x00\x34\x00\x34\x00\x34\x00\x34\x00\x15\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x34\x00\x00\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x34\x00\x09\x00\x45\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x34\x00\x00\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x34\x00\x09\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x45\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x34\x00\x00\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x34\x00\x09\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x45\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x34\x00\x00\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x34\x00\x09\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x1a\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x34\x00\x00\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x34\x00\x09\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x44\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x34\x00\x00\x00\x43\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x34\x00\x09\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x48\x00\x00\x00\x00\x00\x34\x00\x34\x00\x00\x00\x42\x00\x34\x00\x34\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x34\x00\x33\x00\x09\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x48\x00\x00\x00\x00\x00\x34\x00\x34\x00\x00\x00\x41\x00\x34\x00\x34\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x34\x00\x33\x00\x08\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x34\x00\x00\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x34\x00\x08\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x40\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x48\x00\x00\x00\x00\x00\x34\x00\x34\x00\x00\x00\x1d\x00\x34\x00\x34\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x34\x00\x33\x00\x09\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x48\x00\x00\x00\x00\x00\x34\x00\x34\x00\x00\x00\x3f\x00\x34\x00\x34\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x34\x00\x33\x00\x08\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x34\x00\x00\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x34\x00\x08\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x3e\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x48\x00\x00\x00\x00\x00\x34\x00\x34\x00\x00\x00\x34\x00\x34\x00\x34\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x34\x00\x33\x00\x09\x00\x33\x00\x33\x00\x33\x00\x33\x00\x21\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x48\x00\x00\x00\x00\x00\x34\x00\x34\x00\x00\x00\x34\x00\x34\x00\x34\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x34\x00\x33\x00\x08\x00\x33\x00\x33\x00\x33\x00\x33\x00\x20\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x48\x00\x00\x00\x00\x00\x34\x00\x34\x00\x00\x00\x34\x00\x34\x00\x34\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x34\x00\x33\x00\x08\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x23\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x34\x00\x00\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x34\x00\x08\x00\x3d\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x48\x00\x00\x00\x00\x00\x34\x00\x34\x00\x00\x00\x34\x00\x34\x00\x34\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x34\x00\x33\x00\x09\x00\x33\x00\x33\x00\x28\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x48\x00\x00\x00\x00\x00\x34\x00\x34\x00\x00\x00\x34\x00\x34\x00\x34\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x34\x00\x33\x00\x08\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x3b\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x48\x00\x00\x00\x00\x00\x34\x00\x34\x00\x00\x00\x34\x00\x34\x00\x34\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x34\x00\x33\x00\x08\x00\x3a\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x48\x00\x00\x00\x00\x00\x34\x00\x34\x00\x00\x00\x34\x00\x34\x00\x34\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x34\x00\x33\x00\x08\x00\x33\x00\x33\x00\x33\x00\x33\x00\x2a\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x48\x00\x00\x00\x00\x00\x34\x00\x34\x00\x00\x00\x34\x00\x34\x00\x34\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x34\x00\x33\x00\x08\x00\x33\x00\x33\x00\x33\x00\x33\x00\x39\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x34\x00\x00\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x34\x00\x08\x00\x38\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x48\x00\x00\x00\x00\x00\x34\x00\x34\x00\x00\x00\x34\x00\x34\x00\x34\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x34\x00\x33\x00\x09\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x2e\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x48\x00\x00\x00\x00\x00\x34\x00\x34\x00\x00\x00\x34\x00\x34\x00\x34\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x34\x00\x33\x00\x08\x00\x33\x00\x33\x00\x33\x00\x33\x00\x37\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x48\x00\x00\x00\x00\x00\x34\x00\x34\x00\x00\x00\x34\x00\x34\x00\x34\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x34\x00\x33\x00\x08\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x30\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x48\x00\x00\x00\x00\x00\x34\x00\x34\x00\x00\x00\x34\x00\x34\x00\x34\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x34\x00\x33\x00\x08\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x34\x00\x00\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x34\x00\x08\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x48\x00\x00\x00\x00\x00\x34\x00\x34\x00\x00\x00\x34\x00\x34\x00\x34\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x34\x00\x33\x00\x09\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x2d\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x48\x00\x00\x00\x00\x00\x34\x00\x34\x00\x00\x00\x34\x00\x34\x00\x34\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x34\x00\x33\x00\x08\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x2c\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x48\x00\x00\x00\x00\x00\x34\x00\x34\x00\x00\x00\x34\x00\x34\x00\x34\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x34\x00\x33\x00\x08\x00\x33\x00\x33\x00\x36\x00\x33\x00\x33\x00\x2b\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x34\x00\x00\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x34\x00\x08\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x29\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x48\x00\x00\x00\x00\x00\x34\x00\x34\x00\x00\x00\x34\x00\x34\x00\x34\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x34\x00\x33\x00\x09\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x3c\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x48\x00\x00\x00\x00\x00\x34\x00\x34\x00\x00\x00\x34\x00\x34\x00\x34\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x34\x00\x33\x00\x08\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x26\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x48\x00\x00\x00\x00\x00\x34\x00\x34\x00\x00\x00\x34\x00\x34\x00\x34\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x34\x00\x33\x00\x08\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x27\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x48\x00\x00\x00\x00\x00\x34\x00\x34\x00\x00\x00\x34\x00\x34\x00\x34\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x34\x00\x33\x00\x08\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x24\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x34\x00\x00\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x34\x00\x08\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x22\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x34\x00\x00\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x34\x00\x09\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x1c\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x34\x00\x00\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x34\x00\x09\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x1b\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x34\x00\x00\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x34\x00\x09\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x19\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x34\x00\x00\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x34\x00\x09\x00\x34\x00\x34\x00\x25\x00\x2f\x00\x34\x00\x17\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x1e\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x34\x00\x00\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x34\x00\x09\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x18\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x34\x00\x00\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x34\x00\x09\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x16\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x34\x00\x00\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x34\x00\x09\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x45\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x34\x00\x00\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x34\x00\x09\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x11\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x34\x00\x00\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x34\x00\x09\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x11\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x34\x00\x00\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x34\x00\x09\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x10\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x48\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x48\x00\x48\x00\x48\x00\x48\x00\x48\x00\x48\x00\x48\x00\x48\x00\x48\x00\x48\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\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\x00\x00\x00\x00\x00\x00\x00\x00\x48\x00\x09\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\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"#  alex_check :: AlexAddr-alex_check = AlexA# "\xff\xff\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\x20\x00\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\x20\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\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\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\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\xc3\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\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\xff\xff\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xff\xff\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\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\xff\xff\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xff\xff\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\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\xff\xff\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xff\xff\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x0a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\xff\xff\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc3\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\x20\x00\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\x20\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\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\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\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\xc3\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\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\xff\xff\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xff\xff\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\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\xff\xff\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xff\xff\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\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\xff\xff\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xff\xff\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x0a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\xff\xff\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc3\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x0c\x00\x0c\x00\x02\x00\x02\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0d\x00\x0d\x00\x0d\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"#+alex_deflt = AlexA# "\xff\xff\x0c\x00\x0c\x00\x02\x00\x02\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0d\x00\x0d\x00\x0d\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"# -alex_accept = listArray (0::Int,70) [AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccSkip,AlexAccSkip,AlexAcc (alex_action_2),AlexAcc (alex_action_2),AlexAcc (alex_action_2),AlexAcc (alex_action_2),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_4),AlexAcc (alex_action_5)]+alex_accept = listArray (0::Int,73) [AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccSkip,AlexAccSkip,AlexAcc (alex_action_2),AlexAcc (alex_action_2),AlexAcc (alex_action_2),AlexAcc (alex_action_2),AlexAcc (alex_action_2),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_4),AlexAcc (alex_action_5)] {-# LINE 38 "src/Tip/Parser/LexTIP.x" #-}  @@ -106,7 +106,7 @@                               | s == a = t  resWords :: BTree-resWords = b "check-sat" 20 (b ">" 10 (b "-" 5 (b "*" 3 (b ")" 2 (b "(" 1 N N) N) (b "+" 4 N N)) (b "=" 8 (b "<=" 7 (b "<" 6 N N) N) (b "=>" 9 N N))) (b "and" 15 (b "Bool" 13 (b "@" 12 (b ">=" 11 N N) N) (b "Int" 14 N N)) (b "assert-not" 18 (b "assert" 17 (b "as" 16 N N) N) (b "case" 19 N N)))) (b "forall" 30 (b "define-funs-rec" 25 (b "declare-sort" 23 (b "declare-fun" 22 (b "declare-datatypes" 21 N N) N) (b "default" 24 N N)) (b "exists" 28 (b "div" 27 (b "distinct" 26 N N) N) (b "false" 29 N N))) (b "mod" 35 (b "let" 33 (b "lambda" 32 (b "ite" 31 N N) N) (b "match" 34 N N)) (b "par" 38 (b "or" 37 (b "not" 36 N N) N) (b "true" 39 N N))))+resWords = b "declare-datatypes" 22 (b ">=" 11 (b "<" 6 (b "*" 3 (b ")" 2 (b "(" 1 N N) N) (b "-" 5 (b "+" 4 N N) N)) (b "=>" 9 (b "=" 8 (b "<=" 7 N N) N) (b ">" 10 N N))) (b "assert" 17 (b "Int" 14 (b "Bool" 13 (b "@" 12 N N) N) (b "as" 16 (b "and" 15 N N) N)) (b "check-sat" 20 (b "case" 19 (b "assert-not" 18 N N) N) (b "declare-const" 21 N N)))) (b "forall" 33 (b "define-funs-rec" 28 (b "default" 25 (b "declare-sort" 24 (b "declare-fun" 23 N N) N) (b "define-fun-rec" 27 (b "define-fun" 26 N N) N)) (b "exists" 31 (b "div" 30 (b "distinct" 29 N N) N) (b "false" 32 N N))) (b "mod" 38 (b "let" 36 (b "lambda" 35 (b "ite" 34 N N) N) (b "match" 37 N N)) (b "par" 41 (b "or" 40 (b "not" 39 N N) N) (b "true" 42 N N))))    where b s n = let bs = id s                   in B bs (TS bs n) @@ -242,8 +242,13 @@   +++++ {-# LINE 10 "<command-line>" #-}-{-# LINE 1 "/usr/lib/ghc-7.10.1/include/ghcversion.h" #-}+{-# LINE 1 "/usr/lib/ghc-7.10.2/include/ghcversion.h" #-}   
dist/build/Tip/Parser/ParTIP.hs view
@@ -18,1207 +18,1365 @@ #else type HappyAny = forall a . a #endif-happyIn31 :: (Integer) -> (HappyAbsSyn )-happyIn31 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn31 #-}-happyOut31 :: (HappyAbsSyn ) -> (Integer)-happyOut31 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut31 #-}-happyIn32 :: (Symbol) -> (HappyAbsSyn )-happyIn32 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn32 #-}-happyOut32 :: (HappyAbsSyn ) -> (Symbol)-happyOut32 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut32 #-}-happyIn33 :: (Start) -> (HappyAbsSyn )-happyIn33 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn33 #-}-happyOut33 :: (HappyAbsSyn ) -> (Start)-happyOut33 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut33 #-}-happyIn34 :: ([Decl]) -> (HappyAbsSyn )-happyIn34 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn34 #-}-happyOut34 :: (HappyAbsSyn ) -> ([Decl])-happyOut34 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut34 #-}-happyIn35 :: (Decl) -> (HappyAbsSyn )-happyIn35 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn35 #-}-happyOut35 :: (HappyAbsSyn ) -> (Decl)-happyOut35 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut35 #-}-happyIn36 :: (Assertion) -> (HappyAbsSyn )-happyIn36 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn36 #-}-happyOut36 :: (HappyAbsSyn ) -> (Assertion)-happyOut36 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut36 #-}-happyIn37 :: (FunDef) -> (HappyAbsSyn )-happyIn37 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn37 #-}-happyOut37 :: (HappyAbsSyn ) -> (FunDef)-happyOut37 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut37 #-}-happyIn38 :: (InnerFunDef) -> (HappyAbsSyn )-happyIn38 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn38 #-}-happyOut38 :: (HappyAbsSyn ) -> (InnerFunDef)-happyOut38 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut38 #-}-happyIn39 :: (FunDecl) -> (HappyAbsSyn )-happyIn39 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn39 #-}-happyOut39 :: (HappyAbsSyn ) -> (FunDecl)-happyOut39 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut39 #-}-happyIn40 :: (InnerFunDecl) -> (HappyAbsSyn )-happyIn40 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn40 #-}-happyOut40 :: (HappyAbsSyn ) -> (InnerFunDecl)-happyOut40 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut40 #-}-happyIn41 :: (Datatype) -> (HappyAbsSyn )-happyIn41 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn41 #-}-happyOut41 :: (HappyAbsSyn ) -> (Datatype)-happyOut41 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut41 #-}-happyIn42 :: (Constructor) -> (HappyAbsSyn )-happyIn42 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn42 #-}-happyOut42 :: (HappyAbsSyn ) -> (Constructor)-happyOut42 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut42 #-}-happyIn43 :: (Binding) -> (HappyAbsSyn )-happyIn43 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn43 #-}-happyOut43 :: (HappyAbsSyn ) -> (Binding)-happyOut43 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut43 #-}-happyIn44 :: (LetDecl) -> (HappyAbsSyn )-happyIn44 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn44 #-}-happyOut44 :: (HappyAbsSyn ) -> (LetDecl)-happyOut44 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut44 #-}-happyIn45 :: (Type) -> (HappyAbsSyn )-happyIn45 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn45 #-}-happyOut45 :: (HappyAbsSyn ) -> (Type)-happyOut45 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut45 #-}-happyIn46 :: (Expr) -> (HappyAbsSyn )-happyIn46 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn46 #-}-happyOut46 :: (HappyAbsSyn ) -> (Expr)-happyOut46 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut46 #-}-happyIn47 :: (Binder) -> (HappyAbsSyn )-happyIn47 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn47 #-}-happyOut47 :: (HappyAbsSyn ) -> (Binder)-happyOut47 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut47 #-}-happyIn48 :: (Case) -> (HappyAbsSyn )-happyIn48 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn48 #-}-happyOut48 :: (HappyAbsSyn ) -> (Case)-happyOut48 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut48 #-}-happyIn49 :: (Pattern) -> (HappyAbsSyn )-happyIn49 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn49 #-}-happyOut49 :: (HappyAbsSyn ) -> (Pattern)-happyOut49 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut49 #-}-happyIn50 :: (Head) -> (HappyAbsSyn )-happyIn50 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn50 #-}-happyOut50 :: (HappyAbsSyn ) -> (Head)-happyOut50 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut50 #-}-happyIn51 :: ([LetDecl]) -> (HappyAbsSyn )-happyIn51 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn51 #-}-happyOut51 :: (HappyAbsSyn ) -> ([LetDecl])-happyOut51 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut51 #-}-happyIn52 :: ([Case]) -> (HappyAbsSyn )-happyIn52 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn52 #-}-happyOut52 :: (HappyAbsSyn ) -> ([Case])-happyOut52 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut52 #-}-happyIn53 :: ([Expr]) -> (HappyAbsSyn )-happyIn53 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn53 #-}-happyOut53 :: (HappyAbsSyn ) -> ([Expr])-happyOut53 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut53 #-}-happyIn54 :: ([Datatype]) -> (HappyAbsSyn )-happyIn54 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn54 #-}-happyOut54 :: (HappyAbsSyn ) -> ([Datatype])-happyOut54 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut54 #-}-happyIn55 :: ([Constructor]) -> (HappyAbsSyn )-happyIn55 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn55 #-}-happyOut55 :: (HappyAbsSyn ) -> ([Constructor])-happyOut55 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut55 #-}-happyIn56 :: ([Binding]) -> (HappyAbsSyn )-happyIn56 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn56 #-}-happyOut56 :: (HappyAbsSyn ) -> ([Binding])-happyOut56 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut56 #-}-happyIn57 :: ([Symbol]) -> (HappyAbsSyn )-happyIn57 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn57 #-}-happyOut57 :: (HappyAbsSyn ) -> ([Symbol])-happyOut57 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut57 #-}-happyIn58 :: ([Type]) -> (HappyAbsSyn )-happyIn58 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn58 #-}-happyOut58 :: (HappyAbsSyn ) -> ([Type])-happyOut58 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut58 #-}-happyIn59 :: ([FunDecl]) -> (HappyAbsSyn )-happyIn59 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn59 #-}-happyOut59 :: (HappyAbsSyn ) -> ([FunDecl])-happyOut59 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut59 #-}-happyIn60 :: ([FunDef]) -> (HappyAbsSyn )-happyIn60 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn60 #-}-happyOut60 :: (HappyAbsSyn ) -> ([FunDef])-happyOut60 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut60 #-}-happyInTok :: (Token) -> (HappyAbsSyn )-happyInTok x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyInTok #-}-happyOutTok :: (HappyAbsSyn ) -> (Token)-happyOutTok x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOutTok #-}---happyActOffsets :: HappyAddr-happyActOffsets = HappyA# "\x8f\x01\x8f\x01\x76\x00\x1d\x01\x8e\x01\x8c\x01\x4f\x00\x84\x01\x8b\x01\x8a\x01\x89\x01\x88\x01\x4e\x00\x4d\x00\xff\x00\x87\x01\x24\x00\xc8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x83\x01\x00\x00\x0b\x00\x05\x00\x03\x00\x03\x01\x0a\x00\x09\x00\x08\x00\x01\x00\x07\x00\x06\x00\x00\x00\x82\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\x82\x01\x81\x01\x00\x00\x7f\x01\x7e\x01\x7a\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7a\x01\xa1\x00\x00\x00\x00\x00\x00\x00\x7a\x01\xf8\xff\x00\x00\x00\x00\x7a\x01\x80\x01\x79\x01\x77\x01\x70\x01\x69\x01\x64\x01\x5e\x01\x7d\x01\x5c\x01\x5c\x01\x00\x00\x51\x01\x5b\x01\x5a\x01\x58\x01\x00\x00\x68\x00\x58\x01\x00\x00\x00\x00\x58\x01\x3c\x00\x7c\x01\x4f\x00\x57\x01\x7b\x01\x55\x01\xfd\x00\x55\x01\x00\x00\x78\x01\x76\x01\x00\x00\x53\x01\x00\x00\x00\x00\x00\x00\x7a\x00\x75\x01\x74\x01\x73\x01\x00\x00\x00\x00\x00\x00\x4e\x00\x39\x00\x00\x00\x00\x00\x72\x01\x00\x00\x39\x00\x71\x01\x39\x00\x24\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x53\x00\x39\x00\x00\x00\x00\x00\x4e\x00\x1e\x00\x00\x00\x4a\x00\x36\x00\x6f\x01\x6e\x01\x29\x01\x27\x01\x16\x00\x00\x00\x00\x00\x00\x00\x6d\x01\x52\x00\x00\x00\x25\x01\x00\x00\x6c\x01\x00\x00\x6b\x01\x6a\x01\x00\x00\x23\x01\x51\x00\x50\x00\x4e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x21\x01\x00\x00\x68\x01\x1f\x01\x18\x01\x67\x01\x00\x00\x00\x00\x00\x00\x21\x00\x00\x00\x21\x00\x00\x00\x66\x01\x65\x01\x4e\x00\x10\x00\x00\x00\x00\x00\x19\x00\xdc\x00\x21\x00\x63\x01\x62\x01\x50\x01\x61\x01\x60\x01\x00\x00\x00\x00\x5f\x01\x00\x00\x00\x00\x52\x01\x00\x00\x00\x00\x00\x00\x4f\x01\x00\x00\x00\x00"#--happyGotoOffsets :: HappyAddr-happyGotoOffsets = HappyA# "\x00\x01\x4d\x01\xaf\x00\x4e\x01\xc2\x00\x4b\x01\x0f\x01\xb1\x00\x56\x01\x54\x01\x49\x01\x4c\x01\xfe\x00\xf7\x00\x46\x01\x47\x01\x5c\x00\x02\x00\x4a\x01\x48\x01\x44\x01\x45\x01\x43\x01\x3e\x01\x33\x01\x31\x01\x2f\x01\x2b\x01\x00\x00\x00\x00\x6b\x00\xad\x00\xfc\x00\x42\x01\x3a\x01\x3f\x01\x3d\x01\xf5\x00\x38\x01\x37\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\x41\x01\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\x40\x01\x00\x00\x00\x00\x00\x00\x32\x01\x00\x00\x3c\x01\x00\x00\x3b\x01\x00\x00\x39\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x36\x01\x00\x00\x00\x00\x36\x01\x00\x00\x00\x00\x00\x00\x00\x00\xf2\x00\x00\x00\x67\x00\x35\x01\x00\x00\x00\x00\x0f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x01\x34\x01\x00\x00\x26\x01\x00\x00\x59\x00\x00\x00\x00\x00\x00\x00\x24\x01\x20\x01\x22\x01\xfb\x00\xef\x00\x1e\x01\x1a\x01\x00\x00\x1c\x01\xe5\x00\x00\x00\xdf\x00\x04\x00\x19\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x30\x01\xdb\x00\x1b\x01\x08\x01\xfa\x00\xd9\x00\x05\x01\xf9\x00\xf9\x00\x00\x00\x00\x00\x09\x01\x02\x01\xf9\x00\xf1\x00\xeb\x00\xe7\x00\x00\x00\xf8\x00\x00\x00\x60\x00\x00\x00\xe6\x00\x00\x00\x00\x00\x00\x00\xc7\x00\xcc\x00\xbd\x00\xbd\x00\x5d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x96\x00\x00\x00\x00\x00\x8a\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd5\x00\x00\x00\xb8\x00\x00\x00\x00\x00\x66\x00\x18\x00\x26\x00\x3a\x00\xf9\xff\x92\x00\x13\x00\x0d\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\x00\x00\x00\x00"#--happyDefActions :: HappyAddr-happyDefActions = HappyA# "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\xff\xa3\xff\xa1\xff\x9f\xff\x9d\xff\x9b\xff\x99\xff\x97\xff\x95\xff\x93\xff\x00\x00\xe3\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb7\xff\x00\x00\xac\xff\xae\xff\xad\xff\xa7\xff\xa6\xff\xb0\xff\xb1\xff\xa9\xff\xa8\xff\xb6\xff\xb4\xff\xaf\xff\xab\xff\xb5\xff\xaa\xff\xb2\xff\xb3\xff\xe2\xff\xb8\xff\x00\x00\x00\x00\xba\xff\x00\x00\x00\x00\x00\x00\xbc\xff\xbd\xff\xbe\xff\xc1\xff\xc7\xff\x00\x00\x00\x00\xbf\xff\xc0\xff\xcc\xff\x00\x00\x00\x00\xc8\xff\xc9\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd2\xff\x00\x00\x00\x00\x00\x00\x00\x00\xd5\xff\x00\x00\x00\x00\xd8\xff\xd7\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe1\xff\x00\x00\x00\x00\x93\xff\x00\x00\xdc\xff\x99\xff\xda\xff\x00\x00\x00\x00\x00\x00\x00\x00\x97\xff\x9d\xff\x9b\xff\x00\x00\x00\x00\x97\xff\x97\xff\x00\x00\xa1\xff\x00\x00\x00\x00\x00\x00\x00\x00\x99\xff\xa4\xff\xa2\xff\xa0\xff\x9e\xff\x9c\xff\x9a\xff\x98\xff\x96\xff\x94\xff\x92\xff\x00\x00\x00\x00\xa3\xff\xa5\xff\x00\x00\x00\x00\x9b\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x99\xff\x99\xff\x9b\xff\x00\x00\x00\x00\xdd\xff\x00\x00\xe0\xff\x00\x00\xdf\xff\x00\x00\x00\x00\x99\xff\x00\x00\x00\x00\x00\x00\x00\x00\xd0\xff\xcf\xff\xce\xff\xcd\xff\xcb\xff\xca\xff\x00\x00\xc5\xff\x00\x00\x00\x00\x00\x00\x00\x00\xb9\xff\xbb\xff\xc4\xff\x00\x00\xc6\xff\x00\x00\xd1\xff\x00\x00\x00\x00\x00\x00\x00\x00\x9f\xff\xa1\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc3\xff\xc2\xff\x00\x00\xd6\xff\xd4\xff\x00\x00\xde\xff\xdb\xff\xd9\xff\x00\x00\xd3\xff"#--happyCheck :: HappyAddr-happyCheck = HappyA# "\xff\xff\x09\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x00\x00\x01\x00\x16\x00\x0d\x00\x0e\x00\x02\x00\x04\x00\x05\x00\x13\x00\x12\x00\x01\x00\x02\x00\x01\x00\x01\x00\x02\x00\x0f\x00\x0a\x00\x1d\x00\x01\x00\x02\x00\x29\x00\x01\x00\x0d\x00\x0e\x00\x01\x00\x0e\x00\x01\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x29\x00\x2a\x00\x29\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x1d\x00\x01\x00\x02\x00\x29\x00\x01\x00\x1d\x00\x18\x00\x01\x00\x1d\x00\x29\x00\x27\x00\x28\x00\x29\x00\x0d\x00\x0e\x00\x27\x00\x28\x00\x29\x00\x27\x00\x28\x00\x29\x00\x01\x00\x02\x00\x29\x00\x01\x00\x01\x00\x01\x00\x17\x00\x02\x00\x02\x00\x02\x00\x02\x00\x1d\x00\x0d\x00\x0e\x00\x1d\x00\x01\x00\x0d\x00\x0e\x00\x01\x00\x01\x00\x29\x00\x27\x00\x28\x00\x29\x00\x27\x00\x28\x00\x29\x00\x06\x00\x07\x00\x01\x00\x10\x00\x1d\x00\x0e\x00\x13\x00\x07\x00\x12\x00\x08\x00\x09\x00\x06\x00\x07\x00\x29\x00\x27\x00\x28\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x11\x00\x12\x00\x0f\x00\x10\x00\x15\x00\x16\x00\x17\x00\x26\x00\x19\x00\x11\x00\x29\x00\x00\x00\x01\x00\x1a\x00\x1b\x00\x1c\x00\x0d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x0f\x00\x0c\x00\x29\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x01\x00\x01\x00\x0f\x00\x10\x00\x01\x00\x04\x00\x05\x00\x08\x00\x09\x00\x09\x00\x00\x00\x01\x00\x09\x00\x1a\x00\x1b\x00\x1c\x00\x01\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x0f\x00\x06\x00\x07\x00\x29\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x00\x00\x01\x00\x0f\x00\x0c\x00\x00\x00\x01\x00\x00\x00\x01\x00\x01\x00\x02\x00\x00\x00\x01\x00\x1a\x00\x1a\x00\x1b\x00\x0f\x00\x00\x00\x01\x00\x1f\x00\x0f\x00\x03\x00\x0f\x00\x23\x00\x24\x00\x25\x00\x0f\x00\x00\x00\x01\x00\x29\x00\x00\x00\x01\x00\x0f\x00\x00\x00\x01\x00\x00\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x0f\x00\x01\x00\x19\x00\x0f\x00\x02\x00\x03\x00\x0f\x00\x1a\x00\x0f\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x1a\x00\x0e\x00\x0b\x00\x11\x00\x12\x00\x01\x00\x14\x00\x15\x00\x16\x00\x17\x00\x0c\x00\x19\x00\x08\x00\x09\x00\x01\x00\x02\x00\x1c\x00\x14\x00\x1e\x00\x19\x00\x20\x00\x01\x00\x02\x00\x01\x00\x02\x00\x01\x00\x02\x00\x01\x00\x02\x00\x01\x00\x02\x00\x01\x00\x02\x00\x29\x00\x2a\x00\x11\x00\x12\x00\x15\x00\x01\x00\x16\x00\x1a\x00\x00\x00\x1b\x00\x01\x00\x01\x00\x18\x00\x1b\x00\x01\x00\x19\x00\x01\x00\x01\x00\x0c\x00\x1b\x00\x1a\x00\x01\x00\x01\x00\x01\x00\x0d\x00\x1d\x00\x0c\x00\x0a\x00\x1d\x00\x11\x00\x0b\x00\x1c\x00\x1b\x00\x1a\x00\xff\xff\xff\xff\x03\x00\x02\x00\x07\x00\x05\x00\x02\x00\x0c\x00\x10\x00\x19\x00\x11\x00\x0d\x00\x16\x00\x18\x00\x17\x00\x15\x00\x14\x00\x0b\x00\x0a\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x01\x00\x01\x00\xff\xff\x02\x00\x02\x00\x01\x00\x01\x00\x01\x00\x01\x00\xff\xff\x02\x00\x02\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x26\x00\x02\x00\x29\x00\x02\x00\x28\x00\x01\x00\x01\x00\x01\x00\x2a\x00\x29\x00\x01\x00\x2a\x00\x29\x00\xff\xff\x2a\x00\x2a\x00\x29\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x2a\x00\x01\x00\x01\x00\x13\x00\x29\x00\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\x29\x00\xff\xff\xff\xff\x2a\x00\x2a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2a\x00\x29\x00\x28\x00\x2a\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"#--happyTable :: HappyAddr-happyTable = HappyA# "\x00\x00\x82\x00\x4a\x00\x28\x00\x4f\x00\x3c\x00\x5e\x00\x53\x00\x42\x00\x59\x00\x57\x00\x55\x00\x63\x00\x46\x00\x47\x00\xcb\x00\x50\x00\x51\x00\xce\x00\x70\x00\x67\x00\x29\x00\x94\x00\x4f\x00\xb2\x00\x4c\x00\x4a\x00\xdb\x00\xd8\x00\x8c\x00\x4b\x00\x4a\x00\xba\x00\x3c\x00\x4a\x00\x50\x00\x51\x00\x3f\x00\xce\x00\x8f\x00\x4c\x00\x1e\x00\x3c\x00\xff\xff\x3c\x00\xff\xff\x3c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x4b\x00\x4f\x00\xb7\x00\x3c\x00\x4a\x00\x4b\x00\x40\x00\x78\x00\x4b\x00\x3c\x00\x4c\x00\x1e\x00\x3c\x00\x50\x00\x51\x00\x4c\x00\x1e\x00\x3c\x00\x4c\x00\x1e\x00\x3c\x00\x4f\x00\xb8\x00\x3c\x00\x4a\x00\x4f\x00\x5e\x00\xcc\x00\xc6\x00\xc7\x00\xad\x00\xbf\x00\x4b\x00\x50\x00\x51\x00\x4b\x00\x28\x00\x50\x00\x51\x00\x3c\x00\x4c\x00\x3c\x00\x4c\x00\x1e\x00\x3c\x00\x4c\x00\x1e\x00\x3c\x00\x92\x00\x61\x00\x59\x00\x82\x00\x4b\x00\xc4\x00\x83\x00\xcf\x00\x3d\x00\x74\x00\x5c\x00\x92\x00\x61\x00\x3c\x00\x4c\x00\x1e\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x65\x00\x66\x00\x35\x00\x85\x00\x69\x00\x6a\x00\x6b\x00\x7a\x00\x6c\x00\x8a\x00\x3c\x00\x46\x00\x47\x00\x36\x00\x37\x00\x44\x00\x89\x00\x45\x00\x38\x00\x46\x00\x86\x00\x87\x00\x39\x00\x3a\x00\x3b\x00\xa5\x00\x8b\x00\x8e\x00\x3c\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x59\x00\x59\x00\x35\x00\x85\x00\x59\x00\x66\x00\x67\x00\x91\x00\x5c\x00\xd5\x00\x46\x00\x47\x00\x5a\x00\x36\x00\x37\x00\x44\x00\x8f\x00\x45\x00\x38\x00\x46\x00\x86\x00\x87\x00\x39\x00\x3a\x00\x3b\x00\xd1\x00\x60\x00\x61\x00\x3c\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x46\x00\x47\x00\x35\x00\x8e\x00\x46\x00\x47\x00\x46\x00\x47\x00\x59\x00\xda\x00\x46\x00\x47\x00\xc8\x00\x36\x00\x37\x00\xd2\x00\x46\x00\x47\x00\x38\x00\x8b\x00\xaa\x00\xbd\x00\x39\x00\x3a\x00\x3b\x00\x95\x00\x46\x00\x47\x00\x3c\x00\x46\x00\x47\x00\x97\x00\x46\x00\x47\x00\x46\x00\x47\x00\x8f\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x9c\x00\x4c\x00\xae\x00\x76\x00\x6e\x00\x6f\x00\x8b\x00\xaf\x00\x48\x00\x90\x00\xba\x00\x9d\x00\x90\x00\xb0\x00\x4d\x00\x8d\x00\x65\x00\x66\x00\x59\x00\x72\x00\x69\x00\x6a\x00\x6b\x00\x8e\x00\x6c\x00\x5b\x00\x5c\x00\x42\x00\xc1\x00\x44\x00\xbb\x00\x45\x00\xb8\x00\x46\x00\x53\x00\xc2\x00\x55\x00\xc4\x00\x55\x00\xc8\x00\x63\x00\xac\x00\x57\x00\xb3\x00\x55\x00\xb4\x00\x3c\x00\xff\xff\x65\x00\x66\x00\xbc\x00\x8f\x00\x98\x00\x93\x00\xa6\x00\x9a\x00\x73\x00\x78\x00\x9f\x00\x9b\x00\x7c\x00\x9e\x00\x7d\x00\x7e\x00\x7f\x00\xa0\x00\xa5\x00\x80\x00\x88\x00\x8f\x00\x89\x00\xa7\x00\x8e\x00\x8c\x00\x1e\x00\x8a\x00\x8d\x00\x1f\x00\x20\x00\x21\x00\x00\x00\x00\x00\x6c\x00\xde\x00\x5e\x00\x63\x00\xdc\x00\x53\x00\x42\x00\x22\x00\x40\x00\x51\x00\x25\x00\x23\x00\x24\x00\x26\x00\x27\x00\x55\x00\x57\x00\xdd\x00\xd4\x00\xd5\x00\xd7\x00\xd8\x00\x60\x00\xd1\x00\x00\x00\xc0\x00\xc3\x00\xca\x00\xcb\x00\x6e\x00\xae\x00\x00\x00\xb5\x00\xb6\x00\x97\x00\x9a\x00\xa2\x00\xa3\x00\xa4\x00\x7b\x00\xa9\x00\x3c\x00\xaa\x00\x1e\x00\x73\x00\x76\x00\x7c\x00\xff\xff\x3c\x00\x55\x00\xff\xff\x3c\x00\x00\x00\xff\xff\xff\xff\x3c\x00\x42\x00\x53\x00\x55\x00\x57\x00\x59\x00\x60\x00\xff\xff\x63\x00\x6e\x00\x88\x00\x3c\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\x3c\x00\x00\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x3c\x00\x1e\x00\xff\xff\x3c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"#--happyReduceArr = Happy_Data_Array.array (28, 109) [-	(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)-	]--happy_n_terms = 43 :: Int-happy_n_nonterms = 30 :: Int--happyReduce_28 = happySpecReduce_1  0# happyReduction_28-happyReduction_28 happy_x_1-	 =  case happyOutTok happy_x_1 of { (PT _ (TI happy_var_1)) -> -	happyIn31-		 ((read ( happy_var_1)) :: Integer-	)}--happyReduce_29 = happySpecReduce_1  1# happyReduction_29-happyReduction_29 happy_x_1-	 =  case happyOutTok happy_x_1 of { happy_var_1 -> -	happyIn32-		 (Symbol (mkPosToken happy_var_1)-	)}--happyReduce_30 = happySpecReduce_1  2# happyReduction_30-happyReduction_30 happy_x_1-	 =  case happyOut34 happy_x_1 of { happy_var_1 -> -	happyIn33-		 (Start happy_var_1-	)}--happyReduce_31 = happySpecReduce_3  3# happyReduction_31-happyReduction_31 happy_x_3-	happy_x_2-	happy_x_1-	 =  happyIn34-		 ([]-	)--happyReduce_32 = happyReduce 4# 3# happyReduction_32-happyReduction_32 (happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOut35 happy_x_2 of { happy_var_2 -> -	case happyOut34 happy_x_4 of { happy_var_4 -> -	happyIn34-		 ((:) happy_var_2 happy_var_4-	) `HappyStk` happyRest}}--happyReduce_33 = happyReduce 7# 4# happyReduction_33-happyReduction_33 (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 happyOut57 happy_x_3 of { happy_var_3 -> -	case happyOut54 happy_x_6 of { happy_var_6 -> -	happyIn35-		 (DeclareDatatypes (reverse happy_var_3) (reverse happy_var_6)-	) `HappyStk` happyRest}}--happyReduce_34 = happySpecReduce_3  4# happyReduction_34-happyReduction_34 happy_x_3-	happy_x_2-	happy_x_1-	 =  case happyOut32 happy_x_2 of { happy_var_2 -> -	case happyOut31 happy_x_3 of { happy_var_3 -> -	happyIn35-		 (DeclareSort happy_var_2 happy_var_3-	)}}--happyReduce_35 = happySpecReduce_2  4# happyReduction_35-happyReduction_35 happy_x_2-	happy_x_1-	 =  case happyOut39 happy_x_2 of { happy_var_2 -> -	happyIn35-		 (DeclareFun happy_var_2-	)}--happyReduce_36 = happyReduce 7# 4# happyReduction_36-happyReduction_36 (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 happyOut60 happy_x_3 of { happy_var_3 -> -	case happyOut53 happy_x_6 of { happy_var_6 -> -	happyIn35-		 (DefineFunsRec (reverse happy_var_3) (reverse happy_var_6)-	) `HappyStk` happyRest}}--happyReduce_37 = happySpecReduce_2  4# happyReduction_37-happyReduction_37 happy_x_2-	happy_x_1-	 =  case happyOut36 happy_x_1 of { happy_var_1 -> -	case happyOut46 happy_x_2 of { happy_var_2 -> -	happyIn35-		 (MonoAssert happy_var_1 happy_var_2-	)}}--happyReduce_38 = happyReduce 8# 4# happyReduction_38-happyReduction_38 (happy_x_8 `HappyStk`-	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 happyOut36 happy_x_1 of { happy_var_1 -> -	case happyOut57 happy_x_5 of { happy_var_5 -> -	case happyOut46 happy_x_7 of { happy_var_7 -> -	happyIn35-		 (ParAssert happy_var_1 (reverse happy_var_5) happy_var_7-	) `HappyStk` happyRest}}}--happyReduce_39 = happySpecReduce_1  5# happyReduction_39-happyReduction_39 happy_x_1-	 =  happyIn36-		 (AssertIt-	)--happyReduce_40 = happySpecReduce_1  5# happyReduction_40-happyReduction_40 happy_x_1-	 =  happyIn36-		 (AssertNot-	)--happyReduce_41 = happyReduce 7# 6# happyReduction_41-happyReduction_41 (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 happyOut57 happy_x_4 of { happy_var_4 -> -	case happyOut38 happy_x_6 of { happy_var_6 -> -	happyIn37-		 (ParFunDef (reverse happy_var_4) happy_var_6-	) `HappyStk` happyRest}}--happyReduce_42 = happySpecReduce_1  6# happyReduction_42-happyReduction_42 happy_x_1-	 =  case happyOut38 happy_x_1 of { happy_var_1 -> -	happyIn37-		 (MonoFunDef happy_var_1-	)}--happyReduce_43 = happyReduce 7# 7# happyReduction_43-happyReduction_43 (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 happyOut32 happy_x_2 of { happy_var_2 -> -	case happyOut56 happy_x_4 of { happy_var_4 -> -	case happyOut45 happy_x_6 of { happy_var_6 -> -	happyIn38-		 (InnerFunDef happy_var_2 (reverse happy_var_4) happy_var_6-	) `HappyStk` happyRest}}}--happyReduce_44 = happyReduce 9# 8# happyReduction_44-happyReduction_44 (happy_x_9 `HappyStk`-	happy_x_8 `HappyStk`-	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 happyOut57 happy_x_4 of { happy_var_4 -> -	case happyOut40 happy_x_7 of { happy_var_7 -> -	happyIn39-		 (ParFunDecl (reverse happy_var_4) happy_var_7-	) `HappyStk` happyRest}}--happyReduce_45 = happySpecReduce_1  8# happyReduction_45-happyReduction_45 happy_x_1-	 =  case happyOut40 happy_x_1 of { happy_var_1 -> -	happyIn39-		 (MonoFunDecl happy_var_1-	)}--happyReduce_46 = happyReduce 5# 9# happyReduction_46-happyReduction_46 (happy_x_5 `HappyStk`-	happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOut32 happy_x_1 of { happy_var_1 -> -	case happyOut58 happy_x_3 of { happy_var_3 -> -	case happyOut45 happy_x_5 of { happy_var_5 -> -	happyIn40-		 (InnerFunDecl happy_var_1 (reverse happy_var_3) happy_var_5-	) `HappyStk` happyRest}}}--happyReduce_47 = happyReduce 4# 10# happyReduction_47-happyReduction_47 (happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOut32 happy_x_2 of { happy_var_2 -> -	case happyOut55 happy_x_3 of { happy_var_3 -> -	happyIn41-		 (Datatype happy_var_2 (reverse happy_var_3)-	) `HappyStk` happyRest}}--happyReduce_48 = happyReduce 4# 11# happyReduction_48-happyReduction_48 (happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOut32 happy_x_2 of { happy_var_2 -> -	case happyOut56 happy_x_3 of { happy_var_3 -> -	happyIn42-		 (Constructor happy_var_2 (reverse happy_var_3)-	) `HappyStk` happyRest}}--happyReduce_49 = happyReduce 4# 12# happyReduction_49-happyReduction_49 (happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOut32 happy_x_2 of { happy_var_2 -> -	case happyOut45 happy_x_3 of { happy_var_3 -> -	happyIn43-		 (Binding happy_var_2 happy_var_3-	) `HappyStk` happyRest}}--happyReduce_50 = happyReduce 4# 13# happyReduction_50-happyReduction_50 (happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOut43 happy_x_2 of { happy_var_2 -> -	case happyOut46 happy_x_3 of { happy_var_3 -> -	happyIn44-		 (LetDecl happy_var_2 happy_var_3-	) `HappyStk` happyRest}}--happyReduce_51 = happySpecReduce_1  14# happyReduction_51-happyReduction_51 happy_x_1-	 =  case happyOut32 happy_x_1 of { happy_var_1 -> -	happyIn45-		 (TyVar happy_var_1-	)}--happyReduce_52 = happyReduce 4# 14# happyReduction_52-happyReduction_52 (happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOut32 happy_x_2 of { happy_var_2 -> -	case happyOut58 happy_x_3 of { happy_var_3 -> -	happyIn45-		 (TyApp happy_var_2 (reverse happy_var_3)-	) `HappyStk` happyRest}}--happyReduce_53 = happyReduce 4# 14# happyReduction_53-happyReduction_53 (happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOut58 happy_x_3 of { happy_var_3 -> -	happyIn45-		 (ArrowTy (reverse happy_var_3)-	) `HappyStk` happyRest}--happyReduce_54 = happySpecReduce_1  14# happyReduction_54-happyReduction_54 happy_x_1-	 =  happyIn45-		 (IntTy-	)--happyReduce_55 = happySpecReduce_1  14# happyReduction_55-happyReduction_55 happy_x_1-	 =  happyIn45-		 (BoolTy-	)--happyReduce_56 = happySpecReduce_1  15# happyReduction_56-happyReduction_56 happy_x_1-	 =  case happyOut32 happy_x_1 of { happy_var_1 -> -	happyIn46-		 (Var happy_var_1-	)}--happyReduce_57 = happyReduce 5# 15# happyReduction_57-happyReduction_57 (happy_x_5 `HappyStk`-	happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOut46 happy_x_3 of { happy_var_3 -> -	case happyOut45 happy_x_4 of { happy_var_4 -> -	happyIn46-		 (As happy_var_3 happy_var_4-	) `HappyStk` happyRest}}--happyReduce_58 = happyReduce 4# 15# happyReduction_58-happyReduction_58 (happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOut50 happy_x_2 of { happy_var_2 -> -	case happyOut53 happy_x_3 of { happy_var_3 -> -	happyIn46-		 (App happy_var_2 (reverse happy_var_3)-	) `HappyStk` happyRest}}--happyReduce_59 = happyReduce 5# 15# happyReduction_59-happyReduction_59 (happy_x_5 `HappyStk`-	happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOut46 happy_x_3 of { happy_var_3 -> -	case happyOut52 happy_x_4 of { happy_var_4 -> -	happyIn46-		 (Match happy_var_3 (reverse happy_var_4)-	) `HappyStk` happyRest}}--happyReduce_60 = happyReduce 7# 15# happyReduction_60-happyReduction_60 (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 happyOut51 happy_x_4 of { happy_var_4 -> -	case happyOut46 happy_x_6 of { happy_var_6 -> -	happyIn46-		 (Let (reverse happy_var_4) happy_var_6-	) `HappyStk` happyRest}}--happyReduce_61 = happyReduce 7# 15# happyReduction_61-happyReduction_61 (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 happyOut47 happy_x_2 of { happy_var_2 -> -	case happyOut56 happy_x_4 of { happy_var_4 -> -	case happyOut46 happy_x_6 of { happy_var_6 -> -	happyIn46-		 (Binder happy_var_2 (reverse happy_var_4) happy_var_6-	) `HappyStk` happyRest}}}--happyReduce_62 = happySpecReduce_1  15# happyReduction_62-happyReduction_62 happy_x_1-	 =  case happyOut31 happy_x_1 of { happy_var_1 -> -	happyIn46-		 (LitInt happy_var_1-	)}--happyReduce_63 = happySpecReduce_1  15# happyReduction_63-happyReduction_63 happy_x_1-	 =  happyIn46-		 (LitTrue-	)--happyReduce_64 = happySpecReduce_1  15# happyReduction_64-happyReduction_64 happy_x_1-	 =  happyIn46-		 (LitFalse-	)--happyReduce_65 = happySpecReduce_1  16# happyReduction_65-happyReduction_65 happy_x_1-	 =  happyIn47-		 (Lambda-	)--happyReduce_66 = happySpecReduce_1  16# happyReduction_66-happyReduction_66 happy_x_1-	 =  happyIn47-		 (Forall-	)--happyReduce_67 = happySpecReduce_1  16# happyReduction_67-happyReduction_67 happy_x_1-	 =  happyIn47-		 (Exists-	)--happyReduce_68 = happyReduce 5# 17# happyReduction_68-happyReduction_68 (happy_x_5 `HappyStk`-	happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOut49 happy_x_3 of { happy_var_3 -> -	case happyOut46 happy_x_4 of { happy_var_4 -> -	happyIn48-		 (Case happy_var_3 happy_var_4-	) `HappyStk` happyRest}}--happyReduce_69 = happySpecReduce_1  18# happyReduction_69-happyReduction_69 happy_x_1-	 =  happyIn49-		 (Default-	)--happyReduce_70 = happyReduce 4# 18# happyReduction_70-happyReduction_70 (happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOut32 happy_x_2 of { happy_var_2 -> -	case happyOut57 happy_x_3 of { happy_var_3 -> -	happyIn49-		 (ConPat happy_var_2 (reverse happy_var_3)-	) `HappyStk` happyRest}}--happyReduce_71 = happySpecReduce_1  18# happyReduction_71-happyReduction_71 happy_x_1-	 =  case happyOut32 happy_x_1 of { happy_var_1 -> -	happyIn49-		 (SimplePat happy_var_1-	)}--happyReduce_72 = happySpecReduce_1  19# happyReduction_72-happyReduction_72 happy_x_1-	 =  case happyOut32 happy_x_1 of { happy_var_1 -> -	happyIn50-		 (Const happy_var_1-	)}--happyReduce_73 = happySpecReduce_1  19# happyReduction_73-happyReduction_73 happy_x_1-	 =  happyIn50-		 (At-	)--happyReduce_74 = happySpecReduce_1  19# happyReduction_74-happyReduction_74 happy_x_1-	 =  happyIn50-		 (IfThenElse-	)--happyReduce_75 = happySpecReduce_1  19# happyReduction_75-happyReduction_75 happy_x_1-	 =  happyIn50-		 (And-	)--happyReduce_76 = happySpecReduce_1  19# happyReduction_76-happyReduction_76 happy_x_1-	 =  happyIn50-		 (Or-	)--happyReduce_77 = happySpecReduce_1  19# happyReduction_77-happyReduction_77 happy_x_1-	 =  happyIn50-		 (Not-	)--happyReduce_78 = happySpecReduce_1  19# happyReduction_78-happyReduction_78 happy_x_1-	 =  happyIn50-		 (Implies-	)--happyReduce_79 = happySpecReduce_1  19# happyReduction_79-happyReduction_79 happy_x_1-	 =  happyIn50-		 (Equal-	)--happyReduce_80 = happySpecReduce_1  19# happyReduction_80-happyReduction_80 happy_x_1-	 =  happyIn50-		 (Distinct-	)--happyReduce_81 = happySpecReduce_1  19# happyReduction_81-happyReduction_81 happy_x_1-	 =  happyIn50-		 (IntAdd-	)--happyReduce_82 = happySpecReduce_1  19# happyReduction_82-happyReduction_82 happy_x_1-	 =  happyIn50-		 (IntSub-	)--happyReduce_83 = happySpecReduce_1  19# happyReduction_83-happyReduction_83 happy_x_1-	 =  happyIn50-		 (IntMul-	)--happyReduce_84 = happySpecReduce_1  19# happyReduction_84-happyReduction_84 happy_x_1-	 =  happyIn50-		 (IntDiv-	)--happyReduce_85 = happySpecReduce_1  19# happyReduction_85-happyReduction_85 happy_x_1-	 =  happyIn50-		 (IntMod-	)--happyReduce_86 = happySpecReduce_1  19# happyReduction_86-happyReduction_86 happy_x_1-	 =  happyIn50-		 (IntGt-	)--happyReduce_87 = happySpecReduce_1  19# happyReduction_87-happyReduction_87 happy_x_1-	 =  happyIn50-		 (IntGe-	)--happyReduce_88 = happySpecReduce_1  19# happyReduction_88-happyReduction_88 happy_x_1-	 =  happyIn50-		 (IntLt-	)--happyReduce_89 = happySpecReduce_1  19# happyReduction_89-happyReduction_89 happy_x_1-	 =  happyIn50-		 (IntLe-	)--happyReduce_90 = happySpecReduce_0  20# happyReduction_90-happyReduction_90  =  happyIn51-		 ([]-	)--happyReduce_91 = happySpecReduce_2  20# happyReduction_91-happyReduction_91 happy_x_2-	happy_x_1-	 =  case happyOut51 happy_x_1 of { happy_var_1 -> -	case happyOut44 happy_x_2 of { happy_var_2 -> -	happyIn51-		 (flip (:) happy_var_1 happy_var_2-	)}}--happyReduce_92 = happySpecReduce_0  21# happyReduction_92-happyReduction_92  =  happyIn52-		 ([]-	)--happyReduce_93 = happySpecReduce_2  21# happyReduction_93-happyReduction_93 happy_x_2-	happy_x_1-	 =  case happyOut52 happy_x_1 of { happy_var_1 -> -	case happyOut48 happy_x_2 of { happy_var_2 -> -	happyIn52-		 (flip (:) happy_var_1 happy_var_2-	)}}--happyReduce_94 = happySpecReduce_0  22# happyReduction_94-happyReduction_94  =  happyIn53-		 ([]-	)--happyReduce_95 = happySpecReduce_2  22# happyReduction_95-happyReduction_95 happy_x_2-	happy_x_1-	 =  case happyOut53 happy_x_1 of { happy_var_1 -> -	case happyOut46 happy_x_2 of { happy_var_2 -> -	happyIn53-		 (flip (:) happy_var_1 happy_var_2-	)}}--happyReduce_96 = happySpecReduce_0  23# happyReduction_96-happyReduction_96  =  happyIn54-		 ([]-	)--happyReduce_97 = happySpecReduce_2  23# happyReduction_97-happyReduction_97 happy_x_2-	happy_x_1-	 =  case happyOut54 happy_x_1 of { happy_var_1 -> -	case happyOut41 happy_x_2 of { happy_var_2 -> -	happyIn54-		 (flip (:) happy_var_1 happy_var_2-	)}}--happyReduce_98 = happySpecReduce_0  24# happyReduction_98-happyReduction_98  =  happyIn55-		 ([]-	)--happyReduce_99 = happySpecReduce_2  24# happyReduction_99-happyReduction_99 happy_x_2-	happy_x_1-	 =  case happyOut55 happy_x_1 of { happy_var_1 -> -	case happyOut42 happy_x_2 of { happy_var_2 -> -	happyIn55-		 (flip (:) happy_var_1 happy_var_2-	)}}--happyReduce_100 = happySpecReduce_0  25# happyReduction_100-happyReduction_100  =  happyIn56-		 ([]-	)--happyReduce_101 = happySpecReduce_2  25# happyReduction_101-happyReduction_101 happy_x_2-	happy_x_1-	 =  case happyOut56 happy_x_1 of { happy_var_1 -> -	case happyOut43 happy_x_2 of { happy_var_2 -> -	happyIn56-		 (flip (:) happy_var_1 happy_var_2-	)}}--happyReduce_102 = happySpecReduce_0  26# happyReduction_102-happyReduction_102  =  happyIn57-		 ([]-	)--happyReduce_103 = happySpecReduce_2  26# happyReduction_103-happyReduction_103 happy_x_2-	happy_x_1-	 =  case happyOut57 happy_x_1 of { happy_var_1 -> -	case happyOut32 happy_x_2 of { happy_var_2 -> -	happyIn57-		 (flip (:) happy_var_1 happy_var_2-	)}}--happyReduce_104 = happySpecReduce_0  27# happyReduction_104-happyReduction_104  =  happyIn58-		 ([]-	)--happyReduce_105 = happySpecReduce_2  27# happyReduction_105-happyReduction_105 happy_x_2-	happy_x_1-	 =  case happyOut58 happy_x_1 of { happy_var_1 -> -	case happyOut45 happy_x_2 of { happy_var_2 -> -	happyIn58-		 (flip (:) happy_var_1 happy_var_2-	)}}--happyReduce_106 = happySpecReduce_0  28# happyReduction_106-happyReduction_106  =  happyIn59-		 ([]-	)--happyReduce_107 = happySpecReduce_2  28# happyReduction_107-happyReduction_107 happy_x_2-	happy_x_1-	 =  case happyOut59 happy_x_1 of { happy_var_1 -> -	case happyOut39 happy_x_2 of { happy_var_2 -> -	happyIn59-		 (flip (:) happy_var_1 happy_var_2-	)}}--happyReduce_108 = happySpecReduce_0  29# happyReduction_108-happyReduction_108  =  happyIn60-		 ([]-	)--happyReduce_109 = happySpecReduce_2  29# happyReduction_109-happyReduction_109 happy_x_2-	happy_x_1-	 =  case happyOut60 happy_x_1 of { happy_var_1 -> -	case happyOut37 happy_x_2 of { happy_var_2 -> -	happyIn60-		 (flip (:) happy_var_1 happy_var_2-	)}}--happyNewToken action sts stk [] =-	happyDoAction 42# notHappyAtAll action sts stk []--happyNewToken action sts stk (tk:tks) =-	let cont i = happyDoAction i tk action sts stk tks in-	case tk of {-	PT _ (TS _ 1) -> cont 1#;-	PT _ (TS _ 2) -> cont 2#;-	PT _ (TS _ 3) -> cont 3#;-	PT _ (TS _ 4) -> cont 4#;-	PT _ (TS _ 5) -> cont 5#;-	PT _ (TS _ 6) -> cont 6#;-	PT _ (TS _ 7) -> cont 7#;-	PT _ (TS _ 8) -> cont 8#;-	PT _ (TS _ 9) -> cont 9#;-	PT _ (TS _ 10) -> cont 10#;-	PT _ (TS _ 11) -> cont 11#;-	PT _ (TS _ 12) -> cont 12#;-	PT _ (TS _ 13) -> cont 13#;-	PT _ (TS _ 14) -> cont 14#;-	PT _ (TS _ 15) -> cont 15#;-	PT _ (TS _ 16) -> cont 16#;-	PT _ (TS _ 17) -> cont 17#;-	PT _ (TS _ 18) -> cont 18#;-	PT _ (TS _ 19) -> cont 19#;-	PT _ (TS _ 20) -> cont 20#;-	PT _ (TS _ 21) -> cont 21#;-	PT _ (TS _ 22) -> cont 22#;-	PT _ (TS _ 23) -> cont 23#;-	PT _ (TS _ 24) -> cont 24#;-	PT _ (TS _ 25) -> cont 25#;-	PT _ (TS _ 26) -> cont 26#;-	PT _ (TS _ 27) -> cont 27#;-	PT _ (TS _ 28) -> cont 28#;-	PT _ (TS _ 29) -> cont 29#;-	PT _ (TS _ 30) -> cont 30#;-	PT _ (TS _ 31) -> cont 31#;-	PT _ (TS _ 32) -> cont 32#;-	PT _ (TS _ 33) -> cont 33#;-	PT _ (TS _ 34) -> cont 34#;-	PT _ (TS _ 35) -> cont 35#;-	PT _ (TS _ 36) -> cont 36#;-	PT _ (TS _ 37) -> cont 37#;-	PT _ (TS _ 38) -> cont 38#;-	PT _ (TS _ 39) -> cont 39#;-	PT _ (TI happy_dollar_dollar) -> cont 40#;-	PT _ (T_Symbol _) -> cont 41#;-	_ -> happyError' (tk:tks)-	}--happyError_ 42# tk tks = happyError' tks-happyError_ _ tk tks = happyError' (tk:tks)--happyThen :: () => Err a -> (a -> Err b) -> Err b-happyThen = (thenM)-happyReturn :: () => a -> Err a-happyReturn = (returnM)-happyThen1 m k tks = (thenM) m (\a -> k a tks)-happyReturn1 :: () => a -> b -> Err a-happyReturn1 = \a tks -> (returnM) a-happyError' :: () => [(Token)] -> Err a-happyError' = happyError--pStart tks = happySomeParser where-  happySomeParser = happyThen (happyParse 0# tks) (\x -> happyReturn (happyOut33 x))--pListDecl tks = happySomeParser where-  happySomeParser = happyThen (happyParse 1# tks) (\x -> happyReturn (happyOut34 x))--pDecl tks = happySomeParser where-  happySomeParser = happyThen (happyParse 2# tks) (\x -> happyReturn (happyOut35 x))--pAssertion tks = happySomeParser where-  happySomeParser = happyThen (happyParse 3# tks) (\x -> happyReturn (happyOut36 x))--pFunDef tks = happySomeParser where-  happySomeParser = happyThen (happyParse 4# tks) (\x -> happyReturn (happyOut37 x))--pInnerFunDef tks = happySomeParser where-  happySomeParser = happyThen (happyParse 5# tks) (\x -> happyReturn (happyOut38 x))--pFunDecl tks = happySomeParser where-  happySomeParser = happyThen (happyParse 6# tks) (\x -> happyReturn (happyOut39 x))--pInnerFunDecl tks = happySomeParser where-  happySomeParser = happyThen (happyParse 7# tks) (\x -> happyReturn (happyOut40 x))--pDatatype tks = happySomeParser where-  happySomeParser = happyThen (happyParse 8# tks) (\x -> happyReturn (happyOut41 x))--pConstructor tks = happySomeParser where-  happySomeParser = happyThen (happyParse 9# tks) (\x -> happyReturn (happyOut42 x))--pBinding tks = happySomeParser where-  happySomeParser = happyThen (happyParse 10# tks) (\x -> happyReturn (happyOut43 x))--pLetDecl tks = happySomeParser where-  happySomeParser = happyThen (happyParse 11# tks) (\x -> happyReturn (happyOut44 x))--pType tks = happySomeParser where-  happySomeParser = happyThen (happyParse 12# tks) (\x -> happyReturn (happyOut45 x))--pExpr tks = happySomeParser where-  happySomeParser = happyThen (happyParse 13# tks) (\x -> happyReturn (happyOut46 x))--pBinder tks = happySomeParser where-  happySomeParser = happyThen (happyParse 14# tks) (\x -> happyReturn (happyOut47 x))--pCase tks = happySomeParser where-  happySomeParser = happyThen (happyParse 15# tks) (\x -> happyReturn (happyOut48 x))--pPattern tks = happySomeParser where-  happySomeParser = happyThen (happyParse 16# tks) (\x -> happyReturn (happyOut49 x))--pHead tks = happySomeParser where-  happySomeParser = happyThen (happyParse 17# tks) (\x -> happyReturn (happyOut50 x))--pListLetDecl tks = happySomeParser where-  happySomeParser = happyThen (happyParse 18# tks) (\x -> happyReturn (happyOut51 x))--pListCase tks = happySomeParser where-  happySomeParser = happyThen (happyParse 19# tks) (\x -> happyReturn (happyOut52 x))--pListExpr tks = happySomeParser where-  happySomeParser = happyThen (happyParse 20# tks) (\x -> happyReturn (happyOut53 x))--pListDatatype tks = happySomeParser where-  happySomeParser = happyThen (happyParse 21# tks) (\x -> happyReturn (happyOut54 x))--pListConstructor tks = happySomeParser where-  happySomeParser = happyThen (happyParse 22# tks) (\x -> happyReturn (happyOut55 x))--pListBinding tks = happySomeParser where-  happySomeParser = happyThen (happyParse 23# tks) (\x -> happyReturn (happyOut56 x))--pListSymbol tks = happySomeParser where-  happySomeParser = happyThen (happyParse 24# tks) (\x -> happyReturn (happyOut57 x))--pListType tks = happySomeParser where-  happySomeParser = happyThen (happyParse 25# tks) (\x -> happyReturn (happyOut58 x))--pListFunDecl tks = happySomeParser where-  happySomeParser = happyThen (happyParse 26# tks) (\x -> happyReturn (happyOut59 x))--pListFunDef tks = happySomeParser where-  happySomeParser = happyThen (happyParse 27# tks) (\x -> happyReturn (happyOut60 x))--happySeq = happyDontSeq---returnM :: a -> Err a-returnM = return--thenM :: Err a -> (a -> Err b) -> Err b-thenM = (>>=)--happyError :: [Token] -> Err a-happyError ts =-  Bad $ "syntax error at " ++ tokenPos ts ++ -  case ts of-    [] -> []-    [Err _] -> " due to lexer error"-    _ -> " before " ++ unwords (map (id . prToken) (take 4 ts))--myLexer = tokens-{-# LINE 1 "templates/GenericTemplate.hs" #-}-{-# LINE 1 "templates/GenericTemplate.hs" #-}-{-# LINE 1 "<built-in>" #-}-{-# LINE 1 "<command-line>" #-}-{-# LINE 11 "<command-line>" #-}-# 1 "/usr/include/stdc-predef.h" 1 3 4--# 17 "/usr/include/stdc-predef.h" 3 4-------------------------------------------{-# LINE 11 "<command-line>" #-}-{-# LINE 1 "/usr/lib/ghc-7.10.1/include/ghcversion.h" #-}+happyIn34 :: (Integer) -> (HappyAbsSyn )+happyIn34 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn34 #-}+happyOut34 :: (HappyAbsSyn ) -> (Integer)+happyOut34 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut34 #-}+happyIn35 :: (Symbol) -> (HappyAbsSyn )+happyIn35 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn35 #-}+happyOut35 :: (HappyAbsSyn ) -> (Symbol)+happyOut35 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut35 #-}+happyIn36 :: (Start) -> (HappyAbsSyn )+happyIn36 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn36 #-}+happyOut36 :: (HappyAbsSyn ) -> (Start)+happyOut36 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut36 #-}+happyIn37 :: ([Decl]) -> (HappyAbsSyn )+happyIn37 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn37 #-}+happyOut37 :: (HappyAbsSyn ) -> ([Decl])+happyOut37 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut37 #-}+happyIn38 :: (Decl) -> (HappyAbsSyn )+happyIn38 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn38 #-}+happyOut38 :: (HappyAbsSyn ) -> (Decl)+happyOut38 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut38 #-}+happyIn39 :: (Assertion) -> (HappyAbsSyn )+happyIn39 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn39 #-}+happyOut39 :: (HappyAbsSyn ) -> (Assertion)+happyOut39 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut39 #-}+happyIn40 :: (Par) -> (HappyAbsSyn )+happyIn40 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn40 #-}+happyOut40 :: (HappyAbsSyn ) -> (Par)+happyOut40 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut40 #-}+happyIn41 :: (ConstDecl) -> (HappyAbsSyn )+happyIn41 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn41 #-}+happyOut41 :: (HappyAbsSyn ) -> (ConstDecl)+happyOut41 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut41 #-}+happyIn42 :: (FunDecl) -> (HappyAbsSyn )+happyIn42 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn42 #-}+happyOut42 :: (HappyAbsSyn ) -> (FunDecl)+happyOut42 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut42 #-}+happyIn43 :: (FunDef) -> (HappyAbsSyn )+happyIn43 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn43 #-}+happyOut43 :: (HappyAbsSyn ) -> (FunDef)+happyOut43 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut43 #-}+happyIn44 :: (FunDec) -> (HappyAbsSyn )+happyIn44 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn44 #-}+happyOut44 :: (HappyAbsSyn ) -> (FunDec)+happyOut44 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut44 #-}+happyIn45 :: (InnerFunDec) -> (HappyAbsSyn )+happyIn45 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn45 #-}+happyOut45 :: (HappyAbsSyn ) -> (InnerFunDec)+happyOut45 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut45 #-}+happyIn46 :: (Datatype) -> (HappyAbsSyn )+happyIn46 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn46 #-}+happyOut46 :: (HappyAbsSyn ) -> (Datatype)+happyOut46 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut46 #-}+happyIn47 :: (Constructor) -> (HappyAbsSyn )+happyIn47 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn47 #-}+happyOut47 :: (HappyAbsSyn ) -> (Constructor)+happyOut47 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut47 #-}+happyIn48 :: (Binding) -> (HappyAbsSyn )+happyIn48 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn48 #-}+happyOut48 :: (HappyAbsSyn ) -> (Binding)+happyOut48 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut48 #-}+happyIn49 :: (LetDecl) -> (HappyAbsSyn )+happyIn49 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn49 #-}+happyOut49 :: (HappyAbsSyn ) -> (LetDecl)+happyOut49 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut49 #-}+happyIn50 :: (Type) -> (HappyAbsSyn )+happyIn50 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn50 #-}+happyOut50 :: (HappyAbsSyn ) -> (Type)+happyOut50 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut50 #-}+happyIn51 :: (Expr) -> (HappyAbsSyn )+happyIn51 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn51 #-}+happyOut51 :: (HappyAbsSyn ) -> (Expr)+happyOut51 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut51 #-}+happyIn52 :: (Binder) -> (HappyAbsSyn )+happyIn52 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn52 #-}+happyOut52 :: (HappyAbsSyn ) -> (Binder)+happyOut52 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut52 #-}+happyIn53 :: (Case) -> (HappyAbsSyn )+happyIn53 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn53 #-}+happyOut53 :: (HappyAbsSyn ) -> (Case)+happyOut53 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut53 #-}+happyIn54 :: (Pattern) -> (HappyAbsSyn )+happyIn54 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn54 #-}+happyOut54 :: (HappyAbsSyn ) -> (Pattern)+happyOut54 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut54 #-}+happyIn55 :: (Head) -> (HappyAbsSyn )+happyIn55 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn55 #-}+happyOut55 :: (HappyAbsSyn ) -> (Head)+happyOut55 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut55 #-}+happyIn56 :: ([LetDecl]) -> (HappyAbsSyn )+happyIn56 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn56 #-}+happyOut56 :: (HappyAbsSyn ) -> ([LetDecl])+happyOut56 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut56 #-}+happyIn57 :: ([Case]) -> (HappyAbsSyn )+happyIn57 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn57 #-}+happyOut57 :: (HappyAbsSyn ) -> ([Case])+happyOut57 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut57 #-}+happyIn58 :: ([Expr]) -> (HappyAbsSyn )+happyIn58 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn58 #-}+happyOut58 :: (HappyAbsSyn ) -> ([Expr])+happyOut58 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut58 #-}+happyIn59 :: ([Datatype]) -> (HappyAbsSyn )+happyIn59 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn59 #-}+happyOut59 :: (HappyAbsSyn ) -> ([Datatype])+happyOut59 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut59 #-}+happyIn60 :: ([Constructor]) -> (HappyAbsSyn )+happyIn60 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn60 #-}+happyOut60 :: (HappyAbsSyn ) -> ([Constructor])+happyOut60 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut60 #-}+happyIn61 :: ([Binding]) -> (HappyAbsSyn )+happyIn61 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn61 #-}+happyOut61 :: (HappyAbsSyn ) -> ([Binding])+happyOut61 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut61 #-}+happyIn62 :: ([Symbol]) -> (HappyAbsSyn )+happyIn62 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn62 #-}+happyOut62 :: (HappyAbsSyn ) -> ([Symbol])+happyOut62 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut62 #-}+happyIn63 :: ([Type]) -> (HappyAbsSyn )+happyIn63 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn63 #-}+happyOut63 :: (HappyAbsSyn ) -> ([Type])+happyOut63 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut63 #-}+happyIn64 :: ([FunDecl]) -> (HappyAbsSyn )+happyIn64 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn64 #-}+happyOut64 :: (HappyAbsSyn ) -> ([FunDecl])+happyOut64 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut64 #-}+happyIn65 :: ([FunDef]) -> (HappyAbsSyn )+happyIn65 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn65 #-}+happyOut65 :: (HappyAbsSyn ) -> ([FunDef])+happyOut65 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut65 #-}+happyIn66 :: ([FunDec]) -> (HappyAbsSyn )+happyIn66 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn66 #-}+happyOut66 :: (HappyAbsSyn ) -> ([FunDec])+happyOut66 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut66 #-}+happyInTok :: (Token) -> (HappyAbsSyn )+happyInTok x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyInTok #-}+happyOutTok :: (HappyAbsSyn ) -> (Token)+happyOutTok x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOutTok #-}+++happyActOffsets :: HappyAddr+happyActOffsets = HappyA# "\xc1\x01\xc1\x01\x16\x01\x40\x01\xc0\x01\xbe\x01\xbe\x01\xbe\x01\xbf\x01\xbd\x01\xbc\x01\xbb\x01\xba\x01\xb9\x01\x54\x00\x49\x00\x14\x01\xb8\x01\x0e\x00\xd4\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb5\x01\x00\x00\x0a\x00\x23\x01\x23\x01\x03\x00\x23\x01\x09\x00\x08\x00\x07\x00\x01\x00\x06\x00\x04\x00\x00\x00\xb7\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\xb7\x01\xb6\x01\x00\x00\xb4\x01\xb3\x01\xb2\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb2\x01\xaa\x00\xaf\x01\x00\x00\x00\x00\x00\x00\xb1\x01\xf8\xff\x00\x00\x00\x00\xb1\x01\xb0\x01\xae\x01\xad\x01\xa8\x01\xac\x01\xa7\x01\xa4\x01\x9d\x01\x93\x01\x86\x01\x00\x00\x6b\x00\xab\x01\x85\x01\xaa\x01\x84\x01\x54\x00\x84\x01\x84\x01\xa9\x01\x83\x01\x00\x00\x00\x00\x83\x01\x21\x00\x3e\x00\xa6\x01\x1d\x00\x82\x01\x14\x00\x0d\x00\xa5\x01\x80\x01\x0a\x01\x80\x01\x00\x00\xa3\x01\xa2\x01\x00\x00\x00\x00\x7f\x01\x00\x00\x7f\x01\x7e\x01\x00\x00\x7a\x01\x00\x00\x00\x00\x7a\x01\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa1\x01\xa0\x01\x00\x00\x00\x00\x54\x00\x1b\x00\x00\x00\x00\x00\x00\x00\x9f\x01\x00\x00\x1b\x00\x9e\x01\x1b\x00\x0e\x00\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\x00\x1b\x00\x00\x00\x00\x00\x54\x00\x18\x00\x00\x00\x52\x00\x50\x00\x9c\x01\x9b\x01\x4b\x01\x49\x01\x9a\x01\x00\x00\x47\x01\x4e\x00\x55\x00\x1b\x00\x99\x01\x46\x00\x98\x01\x00\x00\x97\x01\x96\x01\x45\x01\x00\x00\x95\x01\x00\x00\x94\x01\x48\x01\x48\x01\x48\x01\x7c\x01\x46\x01\x92\x01\x00\x00\x54\x00\x54\x00\x43\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x41\x01\x00\x00\x91\x01\x3f\x01\x3d\x01\x90\x01\x00\x00\x00\x00\x00\x00\x1b\x00\x00\x00\x1b\x00\x54\x00\x1b\x00\x00\x00\x00\x00\x8f\x01\x00\x00\x8e\x01\x8d\x01\x8c\x01\x00\x00\x12\x00\x8b\x01\x8a\x01\x89\x01\xe9\x00\x88\x01\x00\x00\x87\x01\x79\x01\x76\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"#++happyGotoOffsets :: HappyAddr+happyGotoOffsets = HappyA# "\x3a\x01\x74\x01\x36\x01\x75\x01\x73\x01\x13\x01\x22\x01\xb7\x00\x2e\x01\x7d\x01\x7b\x01\x71\x01\x72\x01\x6d\x01\x09\x01\x07\x01\x6f\x01\x6c\x01\x11\x00\x15\x00\x70\x01\x6e\x01\x6a\x01\x6b\x01\x55\x01\x68\x01\x5a\x01\x54\x01\x52\x01\x4c\x01\x4e\x01\x00\x00\x00\x00\xb3\x00\x92\x00\x0d\x01\xfd\x00\x69\x01\x65\x01\x5c\x01\x61\x01\x05\x01\x59\x01\x58\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\x67\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x59\x00\x66\x01\x00\x00\x00\x00\x00\x00\x00\x00\x64\x01\x00\x00\x00\x00\x00\x00\x63\x01\x00\x00\x62\x01\x00\x00\x60\x01\x00\x00\x5f\x01\x00\x00\x5e\x01\x00\x00\x00\x00\xbb\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x01\x10\x01\x00\x00\x0b\x01\x5d\x01\x8d\x00\x70\x00\x00\x00\x00\x00\x5f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x42\x01\x00\x00\x57\x01\x00\x00\x56\x01\x5b\x01\x00\x00\x53\x01\x3e\x01\x00\x00\x51\x01\x00\x00\x66\x00\x3c\x01\x00\x00\x37\x01\x3b\x01\x00\x00\x4a\x01\x39\x01\x33\x01\xba\x00\xf3\x00\x19\x01\x12\x01\x00\x00\x00\x00\x11\x01\xee\x00\x00\x00\xec\x00\x0b\x00\x18\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1c\x01\xe8\x00\xf8\x00\xed\x00\xb6\x00\xe6\x00\xf0\x00\x90\x00\x90\x00\x00\x00\x00\x00\xea\x00\xd5\x00\x00\x00\xb9\x00\x9d\x00\x90\x00\xbe\x00\xe4\x00\x00\x00\xbe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1e\x00\x00\x00\x7a\x00\x00\x00\x00\x00\x6e\x00\x1a\x00\x08\x01\x00\x00\x91\x00\x00\x00\x00\x00\x8c\x00\x6f\x00\x87\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x87\x00\x00\x00\x00\x00\x5e\x00\x43\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc4\x00\x00\x00\xc2\x00\x58\x00\x99\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\xf5\xff\x65\x00\x00\x00\x00\x00\x00\x00\xf7\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"#++happyDefActions :: HappyAddr+happyDefActions = HappyA# "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\xff\x97\xff\x95\xff\x93\xff\x91\xff\x8f\xff\x8d\xff\x8b\xff\x89\xff\x87\xff\x85\xff\x00\x00\xe0\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xab\xff\x00\x00\xa0\xff\xa2\xff\xa1\xff\x9b\xff\x9a\xff\xa4\xff\xa5\xff\x9d\xff\x9c\xff\xaa\xff\xa8\xff\xa3\xff\x9f\xff\xa9\xff\x9e\xff\xa6\xff\xa7\xff\xdf\xff\xac\xff\x00\x00\x00\x00\xae\xff\x00\x00\x00\x00\x00\x00\xb0\xff\xb1\xff\xb2\xff\xb6\xff\xbc\xff\x00\x00\x00\x00\x00\x00\xb3\xff\xb4\xff\xc1\xff\x00\x00\x00\x00\xbd\xff\xbe\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xce\xff\xcd\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xde\xff\x00\x00\x00\x00\x85\xff\xd3\xff\x00\x00\xd5\xff\x00\x00\x00\x00\xd7\xff\x00\x00\x8d\xff\xd9\xff\x00\x00\xd0\xff\x00\x00\x8d\xff\xcb\xff\x8b\xff\x8f\xff\x00\x00\x00\x00\x91\xff\x8f\xff\x00\x00\x00\x00\x8b\xff\x8b\xff\xb5\xff\x00\x00\x95\xff\x00\x00\x00\x00\x00\x00\x00\x00\x8d\xff\x98\xff\x96\xff\x94\xff\x92\xff\x90\xff\x8e\xff\x8c\xff\x8a\xff\x88\xff\x86\xff\x84\xff\x00\x00\x00\x00\x97\xff\x99\xff\x00\x00\x00\x00\x8f\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8f\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xda\xff\x00\x00\x00\x00\x00\x00\xdd\xff\x00\x00\xdc\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xcc\xff\x00\x00\x00\x00\x00\x00\xc8\xff\xc5\xff\xc4\xff\xc3\xff\xc2\xff\xc0\xff\xbf\xff\x00\x00\xba\xff\x00\x00\x00\x00\x00\x00\x00\x00\xad\xff\xaf\xff\xb9\xff\x00\x00\xbb\xff\x00\x00\x00\x00\x00\x00\xca\xff\xcf\xff\x00\x00\x93\xff\x00\x00\x00\x00\x00\x00\x95\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc9\xff\x00\x00\x00\x00\x00\x00\xb8\xff\xb7\xff\xc6\xff\xd8\xff\xdb\xff\xd6\xff\xd4\xff\xd2\xff\xd1\xff"#++happyCheck :: HappyAddr+happyCheck = HappyA# "\xff\xff\x09\x00\x01\x00\x0c\x00\x01\x00\x01\x00\x05\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x18\x00\x01\x00\x01\x00\x0d\x00\x0e\x00\x01\x00\x01\x00\x02\x00\x01\x00\x01\x00\x05\x00\x19\x00\x01\x00\x02\x00\x01\x00\x01\x00\x05\x00\x01\x00\x14\x00\x05\x00\x20\x00\x01\x00\x09\x00\x2c\x00\x14\x00\x05\x00\x19\x00\x0a\x00\x0b\x00\x15\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2c\x00\x2d\x00\x2d\x00\x20\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x20\x00\x2c\x00\x2c\x00\x20\x00\x2a\x00\x2b\x00\x2c\x00\x01\x00\x2c\x00\x20\x00\x2a\x00\x2b\x00\x2c\x00\x2a\x00\x2b\x00\x2c\x00\x02\x00\x2c\x00\x01\x00\x2a\x00\x2b\x00\x2c\x00\x05\x00\x01\x00\x02\x00\x01\x00\x02\x00\x01\x00\x02\x00\x01\x00\x13\x00\x02\x00\x02\x00\x01\x00\x01\x00\x0d\x00\x0e\x00\x0d\x00\x0e\x00\x0d\x00\x0e\x00\x0d\x00\x0e\x00\x04\x00\x05\x00\x00\x00\x01\x00\x01\x00\x10\x00\x20\x00\x2c\x00\x12\x00\x06\x00\x0f\x00\x15\x00\x01\x00\x01\x00\x01\x00\x2c\x00\x2a\x00\x2b\x00\x2c\x00\x11\x00\x09\x00\x12\x00\x09\x00\x2c\x00\x15\x00\x2c\x00\x03\x00\x2c\x00\x10\x00\x2c\x00\x2c\x00\x2c\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x01\x00\x01\x00\x0f\x00\x10\x00\x01\x00\x01\x00\x01\x00\x29\x00\x0e\x00\x09\x00\x2c\x00\x07\x00\x00\x00\x01\x00\x09\x00\x10\x00\x1d\x00\x1e\x00\x1f\x00\x10\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x11\x00\x0e\x00\x2c\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x01\x00\x01\x00\x0f\x00\x10\x00\x01\x00\x01\x00\x0a\x00\x0b\x00\x01\x00\x09\x00\x06\x00\x00\x00\x01\x00\x00\x00\x01\x00\x10\x00\x1d\x00\x1e\x00\x1f\x00\x10\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x11\x00\x1b\x00\x11\x00\x2c\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x01\x00\x0d\x00\x0f\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x01\x00\x01\x00\x02\x00\x00\x00\x01\x00\x00\x00\x01\x00\x10\x00\x1d\x00\x1e\x00\x00\x00\x01\x00\x11\x00\x22\x00\x11\x00\x0e\x00\x11\x00\x26\x00\x27\x00\x28\x00\x11\x00\x01\x00\x11\x00\x2c\x00\x00\x00\x01\x00\x16\x00\x11\x00\x00\x00\x01\x00\x00\x00\x01\x00\x01\x00\x01\x00\x1b\x00\x01\x00\x10\x00\x01\x00\x17\x00\x08\x00\x01\x00\x11\x00\x08\x00\x01\x00\x08\x00\x11\x00\x07\x00\x11\x00\x10\x00\x07\x00\x11\x00\x12\x00\x01\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x01\x00\x1a\x00\x1b\x00\x1c\x00\x11\x00\x12\x00\x18\x00\x08\x00\x15\x00\x16\x00\x17\x00\x18\x00\x1d\x00\x1a\x00\x1b\x00\x1c\x00\x1f\x00\x1c\x00\x21\x00\x1d\x00\x23\x00\x0a\x00\x0b\x00\x04\x00\x05\x00\x02\x00\x03\x00\x01\x00\x02\x00\x01\x00\x02\x00\x01\x00\x02\x00\x01\x00\x02\x00\x01\x00\x02\x00\x01\x00\x02\x00\x01\x00\x02\x00\x01\x00\x02\x00\x1b\x00\x2c\x00\x2d\x00\x11\x00\x12\x00\x1a\x00\x1d\x00\x0b\x00\x1b\x00\x06\x00\x1c\x00\x06\x00\x1c\x00\x00\x00\x06\x00\x06\x00\x01\x00\x01\x00\x01\x00\x01\x00\x20\x00\x01\x00\x01\x00\x01\x00\x00\x00\x0f\x00\x01\x00\x0d\x00\x01\x00\x1f\x00\x13\x00\x0c\x00\x20\x00\x1a\x00\x1e\x00\x1d\x00\x2c\x00\x0e\x00\x2c\x00\xff\xff\x1c\x00\x03\x00\x02\x00\x06\x00\x05\x00\x02\x00\x0f\x00\x01\x00\x0d\x00\x13\x00\x0e\x00\x12\x00\x18\x00\x1b\x00\x19\x00\x17\x00\x16\x00\x0c\x00\x0b\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\xff\xff\x02\x00\x02\x00\x02\x00\x01\x00\x01\x00\x01\x00\x01\x00\x29\x00\x02\x00\x02\x00\x01\x00\x01\x00\x29\x00\x2b\x00\x01\x00\x01\x00\x01\x00\x2d\x00\x2c\x00\xff\xff\x2d\x00\x2d\x00\x2d\x00\x2d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x2c\x00\x01\x00\xff\xff\x01\x00\xff\xff\xff\xff\xff\xff\x13\x00\xff\xff\xff\xff\xff\xff\x2d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2c\x00\xff\xff\xff\xff\xff\xff\x2d\x00\x2d\x00\xff\xff\xff\xff\x2c\x00\x2c\x00\x2b\x00\x2d\x00\x2c\x00\xff\xff\x2d\x00\x2d\x00\x2b\x00\x2d\x00\x2c\x00\xff\xff\x2d\x00\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\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"#++happyTable :: HappyAddr+happyTable = HappyA# "\x00\x00\x96\x00\x4e\x00\xa1\x00\x54\x00\x58\x00\x4f\x00\x46\x00\x5e\x00\x5c\x00\x5a\x00\x63\x00\x40\x00\xee\x00\x80\x00\x43\x00\x55\x00\x56\x00\x40\x00\x4e\x00\x01\x01\x82\x00\x2c\x00\x4f\x00\xf2\x00\x4e\x00\xda\x00\x63\x00\x4e\x00\x4f\x00\x85\x00\xaa\x00\x4f\x00\x50\x00\x8a\x00\xeb\x00\x40\x00\x41\x00\x4f\x00\x44\x00\xa8\x00\x61\x00\x2d\x00\x51\x00\x21\x00\x40\x00\xff\xff\x40\x00\xff\xff\xff\xff\x50\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x50\x00\x40\x00\x40\x00\x50\x00\x51\x00\x21\x00\x40\x00\x88\x00\x40\x00\x50\x00\x51\x00\x21\x00\x40\x00\x51\x00\x21\x00\x40\x00\xcb\x00\x40\x00\x4e\x00\x51\x00\x21\x00\x40\x00\x4f\x00\x54\x00\xcf\x00\x54\x00\xd7\x00\x54\x00\xd8\x00\x54\x00\x9f\x00\xce\x00\xdf\x00\x51\x00\x2c\x00\x55\x00\x56\x00\x55\x00\x56\x00\x55\x00\x56\x00\x55\x00\x56\x00\x7b\x00\x6f\x00\x4a\x00\x4b\x00\x2c\x00\xf5\x00\x50\x00\x40\x00\x97\x00\xbb\x00\x9e\x00\x98\x00\x63\x00\x51\x00\x63\x00\x40\x00\x51\x00\x21\x00\x40\x00\xa0\x00\xec\x00\x97\x00\x7e\x00\x40\x00\x98\x00\x40\x00\xc5\x00\x40\x00\xe5\x00\x40\x00\x40\x00\x40\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x51\x00\x63\x00\x39\x00\x9a\x00\x51\x00\x67\x00\x63\x00\x6b\x00\xa3\x00\x80\x00\x40\x00\xe8\x00\x4a\x00\x4b\x00\xa7\x00\xe6\x00\x3a\x00\x3b\x00\x48\x00\xa5\x00\x49\x00\x3c\x00\x4a\x00\x9b\x00\x9c\x00\x3d\x00\x3e\x00\x3f\x00\x6b\x00\xf4\x00\xa3\x00\x40\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x51\x00\x63\x00\x39\x00\x9a\x00\x51\x00\x8e\x00\xa8\x00\x61\x00\xa4\x00\x64\x00\x8f\x00\x4a\x00\x4b\x00\x4a\x00\x4b\x00\xda\x00\x3a\x00\x3b\x00\x48\x00\xb3\x00\x49\x00\x3c\x00\x4a\x00\x9b\x00\x9c\x00\x3d\x00\x3e\x00\x3f\x00\xf6\x00\xd0\x00\xf7\x00\x40\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x51\x00\xa2\x00\x39\x00\x4a\x00\x4b\x00\x4a\x00\x4b\x00\x4a\x00\x4b\x00\x5e\x00\xfd\x00\x4a\x00\x4b\x00\x4a\x00\x4b\x00\x8b\x00\x3a\x00\x3b\x00\x4a\x00\x4b\x00\xcc\x00\x3c\x00\xa0\x00\xa3\x00\xdd\x00\x3d\x00\x3e\x00\x3f\x00\xab\x00\x51\x00\xad\x00\x40\x00\x4a\x00\x4b\x00\xdb\x00\xb2\x00\x4a\x00\x4b\x00\x4a\x00\x4b\x00\x65\x00\x51\x00\xd8\x00\x65\x00\xa5\x00\x65\x00\xdc\x00\xea\x00\x67\x00\x88\x00\x83\x00\x67\x00\xa6\x00\xa0\x00\x86\x00\x4c\x00\x52\x00\x68\x00\x6d\x00\x6e\x00\xa4\x00\x7d\x00\x71\x00\x72\x00\x73\x00\x74\x00\x65\x00\x75\x00\x76\x00\x77\x00\x6d\x00\x6e\x00\xae\x00\x66\x00\x71\x00\x72\x00\x73\x00\x74\x00\xb0\x00\x75\x00\x76\x00\x77\x00\x48\x00\xa9\x00\x49\x00\xb1\x00\x4a\x00\x60\x00\x61\x00\x6e\x00\x6f\x00\x79\x00\x7a\x00\x46\x00\xe1\x00\x58\x00\xe2\x00\x5a\x00\xe4\x00\x5a\x00\xe5\x00\x63\x00\xc7\x00\x5a\x00\xd0\x00\x5c\x00\xd3\x00\x5a\x00\xd4\x00\xb4\x00\x40\x00\xff\xff\x6d\x00\x6e\x00\xb5\x00\xb9\x00\xb6\x00\xb8\x00\xbc\x00\xba\x00\xbe\x00\xbd\x00\xbf\x00\xc0\x00\xc1\x00\x82\x00\x8e\x00\x90\x00\x91\x00\xc2\x00\x92\x00\x93\x00\x94\x00\x96\x00\x9e\x00\x9d\x00\xa2\x00\xa4\x00\x22\x00\x9f\x00\xa1\x00\x21\x00\x27\x00\x23\x00\x24\x00\x40\x00\xa3\x00\x40\x00\x00\x00\x25\x00\x77\x00\xf9\x00\x69\x00\x6b\x00\xfa\x00\x56\x00\xea\x00\x5a\x00\x44\x00\x58\x00\x46\x00\x29\x00\x26\x00\x28\x00\x2a\x00\x2b\x00\x5c\x00\x5e\x00\xfb\x00\xfc\x00\xfe\x00\xff\x00\x00\x01\xf0\x00\xf1\x00\xf2\x00\xf4\x00\xe0\x00\xe3\x00\xe8\x00\xee\x00\x79\x00\xc8\x00\xc9\x00\xca\x00\xcc\x00\x00\x00\xd2\x00\xd5\x00\xd6\x00\xad\x00\xb0\x00\x60\x00\xb8\x00\x6b\x00\xc4\x00\xc5\x00\x7e\x00\x86\x00\x6b\x00\x21\x00\x8b\x00\x8d\x00\x8e\x00\xff\xff\x40\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x46\x00\x58\x00\x5a\x00\x5c\x00\x5e\x00\x60\x00\x40\x00\x63\x00\x00\x00\x79\x00\x00\x00\x00\x00\x00\x00\x9d\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\x40\x00\x40\x00\x21\x00\xff\xff\x40\x00\x00\x00\xff\xff\xff\xff\x21\x00\xff\xff\x40\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x6b\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"#++happyReduceArr = Happy_Data_Array.array (31, 123) [+	(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)+	]++happy_n_terms = 46 :: Int+happy_n_nonterms = 33 :: Int++happyReduce_31 = happySpecReduce_1  0# happyReduction_31+happyReduction_31 happy_x_1+	 =  case happyOutTok happy_x_1 of { (PT _ (TI happy_var_1)) -> +	happyIn34+		 ((read ( happy_var_1)) :: Integer+	)}++happyReduce_32 = happySpecReduce_1  1# happyReduction_32+happyReduction_32 happy_x_1+	 =  case happyOutTok happy_x_1 of { happy_var_1 -> +	happyIn35+		 (Symbol (mkPosToken happy_var_1)+	)}++happyReduce_33 = happySpecReduce_1  2# happyReduction_33+happyReduction_33 happy_x_1+	 =  case happyOut37 happy_x_1 of { happy_var_1 -> +	happyIn36+		 (Start happy_var_1+	)}++happyReduce_34 = happySpecReduce_3  3# happyReduction_34+happyReduction_34 happy_x_3+	happy_x_2+	happy_x_1+	 =  happyIn37+		 ([]+	)++happyReduce_35 = happyReduce 4# 3# happyReduction_35+happyReduction_35 (happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut38 happy_x_2 of { happy_var_2 -> +	case happyOut37 happy_x_4 of { happy_var_4 -> +	happyIn37+		 ((:) happy_var_2 happy_var_4+	) `HappyStk` happyRest}}++happyReduce_36 = happyReduce 7# 4# happyReduction_36+happyReduction_36 (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 happyOut62 happy_x_3 of { happy_var_3 -> +	case happyOut59 happy_x_6 of { happy_var_6 -> +	happyIn38+		 (DeclareDatatypes (reverse happy_var_3) (reverse happy_var_6)+	) `HappyStk` happyRest}}++happyReduce_37 = happySpecReduce_3  4# happyReduction_37+happyReduction_37 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut35 happy_x_2 of { happy_var_2 -> +	case happyOut34 happy_x_3 of { happy_var_3 -> +	happyIn38+		 (DeclareSort happy_var_2 happy_var_3+	)}}++happyReduce_38 = happySpecReduce_2  4# happyReduction_38+happyReduction_38 happy_x_2+	happy_x_1+	 =  case happyOut41 happy_x_2 of { happy_var_2 -> +	happyIn38+		 (DeclareConst happy_var_2+	)}++happyReduce_39 = happyReduce 7# 4# happyReduction_39+happyReduction_39 (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 happyOut40 happy_x_3 of { happy_var_3 -> +	case happyOut41 happy_x_5 of { happy_var_5 -> +	happyIn38+		 (DeclareConstPar happy_var_3 happy_var_5+	) `HappyStk` happyRest}}++happyReduce_40 = happySpecReduce_2  4# happyReduction_40+happyReduction_40 happy_x_2+	happy_x_1+	 =  case happyOut42 happy_x_2 of { happy_var_2 -> +	happyIn38+		 (DeclareFun happy_var_2+	)}++happyReduce_41 = happyReduce 7# 4# happyReduction_41+happyReduction_41 (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 happyOut40 happy_x_3 of { happy_var_3 -> +	case happyOut42 happy_x_5 of { happy_var_5 -> +	happyIn38+		 (DeclareFunPar happy_var_3 happy_var_5+	) `HappyStk` happyRest}}++happyReduce_42 = happySpecReduce_2  4# happyReduction_42+happyReduction_42 happy_x_2+	happy_x_1+	 =  case happyOut43 happy_x_2 of { happy_var_2 -> +	happyIn38+		 (DefineFun happy_var_2+	)}++happyReduce_43 = happyReduce 7# 4# happyReduction_43+happyReduction_43 (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 happyOut40 happy_x_3 of { happy_var_3 -> +	case happyOut43 happy_x_5 of { happy_var_5 -> +	happyIn38+		 (DefineFunPar happy_var_3 happy_var_5+	) `HappyStk` happyRest}}++happyReduce_44 = happySpecReduce_2  4# happyReduction_44+happyReduction_44 happy_x_2+	happy_x_1+	 =  case happyOut43 happy_x_2 of { happy_var_2 -> +	happyIn38+		 (DefineFunRec happy_var_2+	)}++happyReduce_45 = happyReduce 7# 4# happyReduction_45+happyReduction_45 (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 happyOut40 happy_x_3 of { happy_var_3 -> +	case happyOut43 happy_x_5 of { happy_var_5 -> +	happyIn38+		 (DefineFunRecPar happy_var_3 happy_var_5+	) `HappyStk` happyRest}}++happyReduce_46 = happyReduce 7# 4# happyReduction_46+happyReduction_46 (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 happyOut66 happy_x_3 of { happy_var_3 -> +	case happyOut58 happy_x_6 of { happy_var_6 -> +	happyIn38+		 (DefineFunsRec (reverse happy_var_3) (reverse happy_var_6)+	) `HappyStk` happyRest}}++happyReduce_47 = happySpecReduce_2  4# happyReduction_47+happyReduction_47 happy_x_2+	happy_x_1+	 =  case happyOut39 happy_x_1 of { happy_var_1 -> +	case happyOut51 happy_x_2 of { happy_var_2 -> +	happyIn38+		 (Assert happy_var_1 happy_var_2+	)}}++happyReduce_48 = happyReduce 5# 4# happyReduction_48+happyReduction_48 (happy_x_5 `HappyStk`+	happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut39 happy_x_1 of { happy_var_1 -> +	case happyOut40 happy_x_3 of { happy_var_3 -> +	case happyOut51 happy_x_4 of { happy_var_4 -> +	happyIn38+		 (AssertPar happy_var_1 happy_var_3 happy_var_4+	) `HappyStk` happyRest}}}++happyReduce_49 = happySpecReduce_1  5# happyReduction_49+happyReduction_49 happy_x_1+	 =  happyIn39+		 (AssertIt+	)++happyReduce_50 = happySpecReduce_1  5# happyReduction_50+happyReduction_50 happy_x_1+	 =  happyIn39+		 (AssertNot+	)++happyReduce_51 = happyReduce 4# 6# happyReduction_51+happyReduction_51 (happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut62 happy_x_3 of { happy_var_3 -> +	happyIn40+		 (Par (reverse happy_var_3)+	) `HappyStk` happyRest}++happyReduce_52 = happySpecReduce_2  7# happyReduction_52+happyReduction_52 happy_x_2+	happy_x_1+	 =  case happyOut35 happy_x_1 of { happy_var_1 -> +	case happyOut50 happy_x_2 of { happy_var_2 -> +	happyIn41+		 (ConstDecl happy_var_1 happy_var_2+	)}}++happyReduce_53 = happyReduce 5# 8# happyReduction_53+happyReduction_53 (happy_x_5 `HappyStk`+	happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut35 happy_x_1 of { happy_var_1 -> +	case happyOut63 happy_x_3 of { happy_var_3 -> +	case happyOut50 happy_x_5 of { happy_var_5 -> +	happyIn42+		 (FunDecl happy_var_1 (reverse happy_var_3) happy_var_5+	) `HappyStk` happyRest}}}++happyReduce_54 = happyReduce 6# 9# happyReduction_54+happyReduction_54 (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 happyOut35 happy_x_1 of { happy_var_1 -> +	case happyOut61 happy_x_3 of { happy_var_3 -> +	case happyOut50 happy_x_5 of { happy_var_5 -> +	case happyOut51 happy_x_6 of { happy_var_6 -> +	happyIn43+		 (FunDef happy_var_1 (reverse happy_var_3) happy_var_5 happy_var_6+	) `HappyStk` happyRest}}}}++happyReduce_55 = happyReduce 4# 10# happyReduction_55+happyReduction_55 (happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut40 happy_x_2 of { happy_var_2 -> +	case happyOut45 happy_x_3 of { happy_var_3 -> +	happyIn44+		 (ParFunDec happy_var_2 happy_var_3+	) `HappyStk` happyRest}}++happyReduce_56 = happySpecReduce_1  10# happyReduction_56+happyReduction_56 happy_x_1+	 =  case happyOut45 happy_x_1 of { happy_var_1 -> +	happyIn44+		 (MonoFunDec happy_var_1+	)}++happyReduce_57 = happyReduce 7# 11# happyReduction_57+happyReduction_57 (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 happyOut35 happy_x_2 of { happy_var_2 -> +	case happyOut61 happy_x_4 of { happy_var_4 -> +	case happyOut50 happy_x_6 of { happy_var_6 -> +	happyIn45+		 (InnerFunDec happy_var_2 (reverse happy_var_4) happy_var_6+	) `HappyStk` happyRest}}}++happyReduce_58 = happyReduce 4# 12# happyReduction_58+happyReduction_58 (happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut35 happy_x_2 of { happy_var_2 -> +	case happyOut60 happy_x_3 of { happy_var_3 -> +	happyIn46+		 (Datatype happy_var_2 (reverse happy_var_3)+	) `HappyStk` happyRest}}++happyReduce_59 = happyReduce 4# 13# happyReduction_59+happyReduction_59 (happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut35 happy_x_2 of { happy_var_2 -> +	case happyOut61 happy_x_3 of { happy_var_3 -> +	happyIn47+		 (Constructor happy_var_2 (reverse happy_var_3)+	) `HappyStk` happyRest}}++happyReduce_60 = happyReduce 4# 14# happyReduction_60+happyReduction_60 (happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut35 happy_x_2 of { happy_var_2 -> +	case happyOut50 happy_x_3 of { happy_var_3 -> +	happyIn48+		 (Binding happy_var_2 happy_var_3+	) `HappyStk` happyRest}}++happyReduce_61 = happyReduce 4# 15# happyReduction_61+happyReduction_61 (happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut35 happy_x_2 of { happy_var_2 -> +	case happyOut51 happy_x_3 of { happy_var_3 -> +	happyIn49+		 (LetDecl happy_var_2 happy_var_3+	) `HappyStk` happyRest}}++happyReduce_62 = happySpecReduce_1  16# happyReduction_62+happyReduction_62 happy_x_1+	 =  case happyOut35 happy_x_1 of { happy_var_1 -> +	happyIn50+		 (TyVar happy_var_1+	)}++happyReduce_63 = happyReduce 4# 16# happyReduction_63+happyReduction_63 (happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut35 happy_x_2 of { happy_var_2 -> +	case happyOut63 happy_x_3 of { happy_var_3 -> +	happyIn50+		 (TyApp happy_var_2 (reverse happy_var_3)+	) `HappyStk` happyRest}}++happyReduce_64 = happyReduce 4# 16# happyReduction_64+happyReduction_64 (happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut63 happy_x_3 of { happy_var_3 -> +	happyIn50+		 (ArrowTy (reverse happy_var_3)+	) `HappyStk` happyRest}++happyReduce_65 = happySpecReduce_1  16# happyReduction_65+happyReduction_65 happy_x_1+	 =  happyIn50+		 (IntTy+	)++happyReduce_66 = happySpecReduce_1  16# happyReduction_66+happyReduction_66 happy_x_1+	 =  happyIn50+		 (BoolTy+	)++happyReduce_67 = happySpecReduce_1  17# happyReduction_67+happyReduction_67 happy_x_1+	 =  case happyOut35 happy_x_1 of { happy_var_1 -> +	happyIn51+		 (Var happy_var_1+	)}++happyReduce_68 = happyReduce 5# 17# happyReduction_68+happyReduction_68 (happy_x_5 `HappyStk`+	happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut51 happy_x_3 of { happy_var_3 -> +	case happyOut50 happy_x_4 of { happy_var_4 -> +	happyIn51+		 (As happy_var_3 happy_var_4+	) `HappyStk` happyRest}}++happyReduce_69 = happyReduce 4# 17# happyReduction_69+happyReduction_69 (happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut55 happy_x_2 of { happy_var_2 -> +	case happyOut58 happy_x_3 of { happy_var_3 -> +	happyIn51+		 (App happy_var_2 (reverse happy_var_3)+	) `HappyStk` happyRest}}++happyReduce_70 = happyReduce 5# 17# happyReduction_70+happyReduction_70 (happy_x_5 `HappyStk`+	happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut51 happy_x_3 of { happy_var_3 -> +	case happyOut57 happy_x_4 of { happy_var_4 -> +	happyIn51+		 (Match happy_var_3 (reverse happy_var_4)+	) `HappyStk` happyRest}}++happyReduce_71 = happyReduce 7# 17# happyReduction_71+happyReduction_71 (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 happyOut56 happy_x_4 of { happy_var_4 -> +	case happyOut51 happy_x_6 of { happy_var_6 -> +	happyIn51+		 (Let (reverse happy_var_4) happy_var_6+	) `HappyStk` happyRest}}++happyReduce_72 = happyReduce 7# 17# happyReduction_72+happyReduction_72 (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 happyOut52 happy_x_2 of { happy_var_2 -> +	case happyOut61 happy_x_4 of { happy_var_4 -> +	case happyOut51 happy_x_6 of { happy_var_6 -> +	happyIn51+		 (Binder happy_var_2 (reverse happy_var_4) happy_var_6+	) `HappyStk` happyRest}}}++happyReduce_73 = happySpecReduce_1  17# happyReduction_73+happyReduction_73 happy_x_1+	 =  case happyOut34 happy_x_1 of { happy_var_1 -> +	happyIn51+		 (LitInt happy_var_1+	)}++happyReduce_74 = happySpecReduce_2  17# happyReduction_74+happyReduction_74 happy_x_2+	happy_x_1+	 =  case happyOut34 happy_x_2 of { happy_var_2 -> +	happyIn51+		 (LitNegInt happy_var_2+	)}++happyReduce_75 = happySpecReduce_1  17# happyReduction_75+happyReduction_75 happy_x_1+	 =  happyIn51+		 (LitTrue+	)++happyReduce_76 = happySpecReduce_1  17# happyReduction_76+happyReduction_76 happy_x_1+	 =  happyIn51+		 (LitFalse+	)++happyReduce_77 = happySpecReduce_1  18# happyReduction_77+happyReduction_77 happy_x_1+	 =  happyIn52+		 (Lambda+	)++happyReduce_78 = happySpecReduce_1  18# happyReduction_78+happyReduction_78 happy_x_1+	 =  happyIn52+		 (Forall+	)++happyReduce_79 = happySpecReduce_1  18# happyReduction_79+happyReduction_79 happy_x_1+	 =  happyIn52+		 (Exists+	)++happyReduce_80 = happyReduce 5# 19# happyReduction_80+happyReduction_80 (happy_x_5 `HappyStk`+	happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut54 happy_x_3 of { happy_var_3 -> +	case happyOut51 happy_x_4 of { happy_var_4 -> +	happyIn53+		 (Case happy_var_3 happy_var_4+	) `HappyStk` happyRest}}++happyReduce_81 = happySpecReduce_1  20# happyReduction_81+happyReduction_81 happy_x_1+	 =  happyIn54+		 (Default+	)++happyReduce_82 = happyReduce 4# 20# happyReduction_82+happyReduction_82 (happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut35 happy_x_2 of { happy_var_2 -> +	case happyOut62 happy_x_3 of { happy_var_3 -> +	happyIn54+		 (ConPat happy_var_2 (reverse happy_var_3)+	) `HappyStk` happyRest}}++happyReduce_83 = happySpecReduce_1  20# happyReduction_83+happyReduction_83 happy_x_1+	 =  case happyOut35 happy_x_1 of { happy_var_1 -> +	happyIn54+		 (SimplePat happy_var_1+	)}++happyReduce_84 = happySpecReduce_1  21# happyReduction_84+happyReduction_84 happy_x_1+	 =  case happyOut35 happy_x_1 of { happy_var_1 -> +	happyIn55+		 (Const happy_var_1+	)}++happyReduce_85 = happySpecReduce_1  21# happyReduction_85+happyReduction_85 happy_x_1+	 =  happyIn55+		 (At+	)++happyReduce_86 = happySpecReduce_1  21# happyReduction_86+happyReduction_86 happy_x_1+	 =  happyIn55+		 (IfThenElse+	)++happyReduce_87 = happySpecReduce_1  21# happyReduction_87+happyReduction_87 happy_x_1+	 =  happyIn55+		 (And+	)++happyReduce_88 = happySpecReduce_1  21# happyReduction_88+happyReduction_88 happy_x_1+	 =  happyIn55+		 (Or+	)++happyReduce_89 = happySpecReduce_1  21# happyReduction_89+happyReduction_89 happy_x_1+	 =  happyIn55+		 (Not+	)++happyReduce_90 = happySpecReduce_1  21# happyReduction_90+happyReduction_90 happy_x_1+	 =  happyIn55+		 (Implies+	)++happyReduce_91 = happySpecReduce_1  21# happyReduction_91+happyReduction_91 happy_x_1+	 =  happyIn55+		 (Equal+	)++happyReduce_92 = happySpecReduce_1  21# happyReduction_92+happyReduction_92 happy_x_1+	 =  happyIn55+		 (Distinct+	)++happyReduce_93 = happySpecReduce_1  21# happyReduction_93+happyReduction_93 happy_x_1+	 =  happyIn55+		 (IntAdd+	)++happyReduce_94 = happySpecReduce_1  21# happyReduction_94+happyReduction_94 happy_x_1+	 =  happyIn55+		 (IntSub+	)++happyReduce_95 = happySpecReduce_1  21# happyReduction_95+happyReduction_95 happy_x_1+	 =  happyIn55+		 (IntMul+	)++happyReduce_96 = happySpecReduce_1  21# happyReduction_96+happyReduction_96 happy_x_1+	 =  happyIn55+		 (IntDiv+	)++happyReduce_97 = happySpecReduce_1  21# happyReduction_97+happyReduction_97 happy_x_1+	 =  happyIn55+		 (IntMod+	)++happyReduce_98 = happySpecReduce_1  21# happyReduction_98+happyReduction_98 happy_x_1+	 =  happyIn55+		 (IntGt+	)++happyReduce_99 = happySpecReduce_1  21# happyReduction_99+happyReduction_99 happy_x_1+	 =  happyIn55+		 (IntGe+	)++happyReduce_100 = happySpecReduce_1  21# happyReduction_100+happyReduction_100 happy_x_1+	 =  happyIn55+		 (IntLt+	)++happyReduce_101 = happySpecReduce_1  21# happyReduction_101+happyReduction_101 happy_x_1+	 =  happyIn55+		 (IntLe+	)++happyReduce_102 = happySpecReduce_0  22# happyReduction_102+happyReduction_102  =  happyIn56+		 ([]+	)++happyReduce_103 = happySpecReduce_2  22# happyReduction_103+happyReduction_103 happy_x_2+	happy_x_1+	 =  case happyOut56 happy_x_1 of { happy_var_1 -> +	case happyOut49 happy_x_2 of { happy_var_2 -> +	happyIn56+		 (flip (:) happy_var_1 happy_var_2+	)}}++happyReduce_104 = happySpecReduce_0  23# happyReduction_104+happyReduction_104  =  happyIn57+		 ([]+	)++happyReduce_105 = happySpecReduce_2  23# happyReduction_105+happyReduction_105 happy_x_2+	happy_x_1+	 =  case happyOut57 happy_x_1 of { happy_var_1 -> +	case happyOut53 happy_x_2 of { happy_var_2 -> +	happyIn57+		 (flip (:) happy_var_1 happy_var_2+	)}}++happyReduce_106 = happySpecReduce_0  24# happyReduction_106+happyReduction_106  =  happyIn58+		 ([]+	)++happyReduce_107 = happySpecReduce_2  24# happyReduction_107+happyReduction_107 happy_x_2+	happy_x_1+	 =  case happyOut58 happy_x_1 of { happy_var_1 -> +	case happyOut51 happy_x_2 of { happy_var_2 -> +	happyIn58+		 (flip (:) happy_var_1 happy_var_2+	)}}++happyReduce_108 = happySpecReduce_0  25# happyReduction_108+happyReduction_108  =  happyIn59+		 ([]+	)++happyReduce_109 = happySpecReduce_2  25# happyReduction_109+happyReduction_109 happy_x_2+	happy_x_1+	 =  case happyOut59 happy_x_1 of { happy_var_1 -> +	case happyOut46 happy_x_2 of { happy_var_2 -> +	happyIn59+		 (flip (:) happy_var_1 happy_var_2+	)}}++happyReduce_110 = happySpecReduce_0  26# happyReduction_110+happyReduction_110  =  happyIn60+		 ([]+	)++happyReduce_111 = happySpecReduce_2  26# happyReduction_111+happyReduction_111 happy_x_2+	happy_x_1+	 =  case happyOut60 happy_x_1 of { happy_var_1 -> +	case happyOut47 happy_x_2 of { happy_var_2 -> +	happyIn60+		 (flip (:) happy_var_1 happy_var_2+	)}}++happyReduce_112 = happySpecReduce_0  27# happyReduction_112+happyReduction_112  =  happyIn61+		 ([]+	)++happyReduce_113 = happySpecReduce_2  27# happyReduction_113+happyReduction_113 happy_x_2+	happy_x_1+	 =  case happyOut61 happy_x_1 of { happy_var_1 -> +	case happyOut48 happy_x_2 of { happy_var_2 -> +	happyIn61+		 (flip (:) happy_var_1 happy_var_2+	)}}++happyReduce_114 = happySpecReduce_0  28# happyReduction_114+happyReduction_114  =  happyIn62+		 ([]+	)++happyReduce_115 = happySpecReduce_2  28# happyReduction_115+happyReduction_115 happy_x_2+	happy_x_1+	 =  case happyOut62 happy_x_1 of { happy_var_1 -> +	case happyOut35 happy_x_2 of { happy_var_2 -> +	happyIn62+		 (flip (:) happy_var_1 happy_var_2+	)}}++happyReduce_116 = happySpecReduce_0  29# happyReduction_116+happyReduction_116  =  happyIn63+		 ([]+	)++happyReduce_117 = happySpecReduce_2  29# happyReduction_117+happyReduction_117 happy_x_2+	happy_x_1+	 =  case happyOut63 happy_x_1 of { happy_var_1 -> +	case happyOut50 happy_x_2 of { happy_var_2 -> +	happyIn63+		 (flip (:) happy_var_1 happy_var_2+	)}}++happyReduce_118 = happySpecReduce_0  30# happyReduction_118+happyReduction_118  =  happyIn64+		 ([]+	)++happyReduce_119 = happySpecReduce_2  30# happyReduction_119+happyReduction_119 happy_x_2+	happy_x_1+	 =  case happyOut64 happy_x_1 of { happy_var_1 -> +	case happyOut42 happy_x_2 of { happy_var_2 -> +	happyIn64+		 (flip (:) happy_var_1 happy_var_2+	)}}++happyReduce_120 = happySpecReduce_0  31# happyReduction_120+happyReduction_120  =  happyIn65+		 ([]+	)++happyReduce_121 = happySpecReduce_2  31# happyReduction_121+happyReduction_121 happy_x_2+	happy_x_1+	 =  case happyOut65 happy_x_1 of { happy_var_1 -> +	case happyOut43 happy_x_2 of { happy_var_2 -> +	happyIn65+		 (flip (:) happy_var_1 happy_var_2+	)}}++happyReduce_122 = happySpecReduce_0  32# happyReduction_122+happyReduction_122  =  happyIn66+		 ([]+	)++happyReduce_123 = happySpecReduce_2  32# happyReduction_123+happyReduction_123 happy_x_2+	happy_x_1+	 =  case happyOut66 happy_x_1 of { happy_var_1 -> +	case happyOut44 happy_x_2 of { happy_var_2 -> +	happyIn66+		 (flip (:) happy_var_1 happy_var_2+	)}}++happyNewToken action sts stk [] =+	happyDoAction 45# notHappyAtAll action sts stk []++happyNewToken action sts stk (tk:tks) =+	let cont i = happyDoAction i tk action sts stk tks in+	case tk of {+	PT _ (TS _ 1) -> cont 1#;+	PT _ (TS _ 2) -> cont 2#;+	PT _ (TS _ 3) -> cont 3#;+	PT _ (TS _ 4) -> cont 4#;+	PT _ (TS _ 5) -> cont 5#;+	PT _ (TS _ 6) -> cont 6#;+	PT _ (TS _ 7) -> cont 7#;+	PT _ (TS _ 8) -> cont 8#;+	PT _ (TS _ 9) -> cont 9#;+	PT _ (TS _ 10) -> cont 10#;+	PT _ (TS _ 11) -> cont 11#;+	PT _ (TS _ 12) -> cont 12#;+	PT _ (TS _ 13) -> cont 13#;+	PT _ (TS _ 14) -> cont 14#;+	PT _ (TS _ 15) -> cont 15#;+	PT _ (TS _ 16) -> cont 16#;+	PT _ (TS _ 17) -> cont 17#;+	PT _ (TS _ 18) -> cont 18#;+	PT _ (TS _ 19) -> cont 19#;+	PT _ (TS _ 20) -> cont 20#;+	PT _ (TS _ 21) -> cont 21#;+	PT _ (TS _ 22) -> cont 22#;+	PT _ (TS _ 23) -> cont 23#;+	PT _ (TS _ 24) -> cont 24#;+	PT _ (TS _ 25) -> cont 25#;+	PT _ (TS _ 26) -> cont 26#;+	PT _ (TS _ 27) -> cont 27#;+	PT _ (TS _ 28) -> cont 28#;+	PT _ (TS _ 29) -> cont 29#;+	PT _ (TS _ 30) -> cont 30#;+	PT _ (TS _ 31) -> cont 31#;+	PT _ (TS _ 32) -> cont 32#;+	PT _ (TS _ 33) -> cont 33#;+	PT _ (TS _ 34) -> cont 34#;+	PT _ (TS _ 35) -> cont 35#;+	PT _ (TS _ 36) -> cont 36#;+	PT _ (TS _ 37) -> cont 37#;+	PT _ (TS _ 38) -> cont 38#;+	PT _ (TS _ 39) -> cont 39#;+	PT _ (TS _ 40) -> cont 40#;+	PT _ (TS _ 41) -> cont 41#;+	PT _ (TS _ 42) -> cont 42#;+	PT _ (TI happy_dollar_dollar) -> cont 43#;+	PT _ (T_Symbol _) -> cont 44#;+	_ -> happyError' (tk:tks)+	}++happyError_ 45# tk tks = happyError' tks+happyError_ _ tk tks = happyError' (tk:tks)++happyThen :: () => Err a -> (a -> Err b) -> Err b+happyThen = (thenM)+happyReturn :: () => a -> Err a+happyReturn = (returnM)+happyThen1 m k tks = (thenM) m (\a -> k a tks)+happyReturn1 :: () => a -> b -> Err a+happyReturn1 = \a tks -> (returnM) a+happyError' :: () => [(Token)] -> Err a+happyError' = happyError++pStart tks = happySomeParser where+  happySomeParser = happyThen (happyParse 0# tks) (\x -> happyReturn (happyOut36 x))++pListDecl tks = happySomeParser where+  happySomeParser = happyThen (happyParse 1# tks) (\x -> happyReturn (happyOut37 x))++pDecl tks = happySomeParser where+  happySomeParser = happyThen (happyParse 2# tks) (\x -> happyReturn (happyOut38 x))++pAssertion tks = happySomeParser where+  happySomeParser = happyThen (happyParse 3# tks) (\x -> happyReturn (happyOut39 x))++pPar tks = happySomeParser where+  happySomeParser = happyThen (happyParse 4# tks) (\x -> happyReturn (happyOut40 x))++pConstDecl tks = happySomeParser where+  happySomeParser = happyThen (happyParse 5# tks) (\x -> happyReturn (happyOut41 x))++pFunDecl tks = happySomeParser where+  happySomeParser = happyThen (happyParse 6# tks) (\x -> happyReturn (happyOut42 x))++pFunDef tks = happySomeParser where+  happySomeParser = happyThen (happyParse 7# tks) (\x -> happyReturn (happyOut43 x))++pFunDec tks = happySomeParser where+  happySomeParser = happyThen (happyParse 8# tks) (\x -> happyReturn (happyOut44 x))++pInnerFunDec tks = happySomeParser where+  happySomeParser = happyThen (happyParse 9# tks) (\x -> happyReturn (happyOut45 x))++pDatatype tks = happySomeParser where+  happySomeParser = happyThen (happyParse 10# tks) (\x -> happyReturn (happyOut46 x))++pConstructor tks = happySomeParser where+  happySomeParser = happyThen (happyParse 11# tks) (\x -> happyReturn (happyOut47 x))++pBinding tks = happySomeParser where+  happySomeParser = happyThen (happyParse 12# tks) (\x -> happyReturn (happyOut48 x))++pLetDecl tks = happySomeParser where+  happySomeParser = happyThen (happyParse 13# tks) (\x -> happyReturn (happyOut49 x))++pType tks = happySomeParser where+  happySomeParser = happyThen (happyParse 14# tks) (\x -> happyReturn (happyOut50 x))++pExpr tks = happySomeParser where+  happySomeParser = happyThen (happyParse 15# tks) (\x -> happyReturn (happyOut51 x))++pBinder tks = happySomeParser where+  happySomeParser = happyThen (happyParse 16# tks) (\x -> happyReturn (happyOut52 x))++pCase tks = happySomeParser where+  happySomeParser = happyThen (happyParse 17# tks) (\x -> happyReturn (happyOut53 x))++pPattern tks = happySomeParser where+  happySomeParser = happyThen (happyParse 18# tks) (\x -> happyReturn (happyOut54 x))++pHead tks = happySomeParser where+  happySomeParser = happyThen (happyParse 19# tks) (\x -> happyReturn (happyOut55 x))++pListLetDecl tks = happySomeParser where+  happySomeParser = happyThen (happyParse 20# tks) (\x -> happyReturn (happyOut56 x))++pListCase tks = happySomeParser where+  happySomeParser = happyThen (happyParse 21# tks) (\x -> happyReturn (happyOut57 x))++pListExpr tks = happySomeParser where+  happySomeParser = happyThen (happyParse 22# tks) (\x -> happyReturn (happyOut58 x))++pListDatatype tks = happySomeParser where+  happySomeParser = happyThen (happyParse 23# tks) (\x -> happyReturn (happyOut59 x))++pListConstructor tks = happySomeParser where+  happySomeParser = happyThen (happyParse 24# tks) (\x -> happyReturn (happyOut60 x))++pListBinding tks = happySomeParser where+  happySomeParser = happyThen (happyParse 25# tks) (\x -> happyReturn (happyOut61 x))++pListSymbol tks = happySomeParser where+  happySomeParser = happyThen (happyParse 26# tks) (\x -> happyReturn (happyOut62 x))++pListType tks = happySomeParser where+  happySomeParser = happyThen (happyParse 27# tks) (\x -> happyReturn (happyOut63 x))++pListFunDecl tks = happySomeParser where+  happySomeParser = happyThen (happyParse 28# tks) (\x -> happyReturn (happyOut64 x))++pListFunDef tks = happySomeParser where+  happySomeParser = happyThen (happyParse 29# tks) (\x -> happyReturn (happyOut65 x))++pListFunDec tks = happySomeParser where+  happySomeParser = happyThen (happyParse 30# tks) (\x -> happyReturn (happyOut66 x))++happySeq = happyDontSeq+++returnM :: a -> Err a+returnM = return++thenM :: Err a -> (a -> Err b) -> Err b+thenM = (>>=)++happyError :: [Token] -> Err a+happyError ts =+  Bad $ "syntax error at " ++ tokenPos ts ++ +  case ts of+    [] -> []+    [Err _] -> " due to lexer error"+    _ -> " before " ++ unwords (map (id . prToken) (take 4 ts))++myLexer = tokens+{-# LINE 1 "templates/GenericTemplate.hs" #-}+{-# LINE 1 "templates/GenericTemplate.hs" #-}+{-# LINE 1 "<built-in>" #-}+{-# LINE 1 "<command-line>" #-}+{-# LINE 11 "<command-line>" #-}+# 1 "/usr/include/stdc-predef.h" 1 3 4++# 17 "/usr/include/stdc-predef.h" 3 4++++++++++++++++++++++++++++++++++++++++++++++++{-# LINE 11 "<command-line>" #-}+{-# LINE 1 "/usr/lib/ghc-7.10.2/include/ghcversion.h" #-}   
executable/Main.hs view
@@ -4,6 +4,7 @@  import Tip.Parser import Tip.Pretty.SMT as SMT+import Tip.Pretty.TFF as TFF import Tip.Pretty.Why3 as Why3 import Tip.Pretty.Isabelle as Isabelle import Tip.Pretty.Haskell as HS@@ -14,65 +15,98 @@ import Tip.Lint import Tip.Fresh import Tip.Core-import Options.Applicative +import System.FilePath+import Options.Applicative import Control.Monad -data OutputMode = Haskell | Why3 | CVC4 | Isabelle | TIP+data OutputMode = Haskell HS.Mode | Why3 | SMTLIB Bool | Isabelle | TIP | TFF  parseOutputMode :: Parser OutputMode parseOutputMode =-      flag' Haskell (long "haskell" <> help "Haskell output")+      flag' (Haskell HS.Plain)          (long "haskell"        <> help "Haskell output")+  <|> flag' (Haskell HS.Feat)           (long "haskell-feat"   <> help "Haskell output with Feat tests")+  <|> flag' (Haskell HS.QuickCheck)     (long "haskell-qc"     <> help "Haskell output with QuickCheck tests (Feat generators)")+  <|> flag' (Haskell (HS.LazySmallCheck False)) (long "haskell-lazysc"       <> help "Haskell output with LazySmallCheck tests")+  <|> flag' (Haskell (HS.LazySmallCheck True))  (long "haskell-lazysc-depth" <> help "Haskell output with LazySmallCheck tests up to some depth (given on command line)")+  <|> flag' (Haskell HS.Smten)                  (long "haskell-smten"        <> help "Haskell output with Smten (depth given on command line)")+  <|> flag' (Haskell HS.QuickSpec)      (long "haskell-spec"   <> help "Haskell output with QuickSpec signature (Feat generators)")   <|> flag' Why3 (long "why" <> help "WhyML output")-  <|> flag' CVC4 (long "smtlib" <> help "SMTLIB output (CVC4-compatible)")+  <|> flag' (SMTLIB False) (long "smtlib" <> help "SMTLIB output")+  <|> flag' (SMTLIB True)  (long "smtlib-ax-fun" <> help "SMTLIB output (axiomatise function declarations)")   <|> flag' Isabelle (long "isabelle" <> help "Isabelle output")+  <|> flag' TFF (long "tff" <> help "TPTP TFF output")   <|> flag  TIP TIP (long "tip" <> help "TIP output (default)") -optionParser :: Parser ([StandardPass], Maybe String, OutputMode)+optionParser :: Parser ([StandardPass], Maybe String, OutputMode, Maybe FilePath) optionParser =-  (,,) <$> parsePasses <*> parseFile <*> parseOutputMode+  (,,,) <$> parsePasses <*> parseFile <*> parseOutputMode <*> parseMultiPath   where     parseFile =       fmap Just (strArgument (metavar "FILENAME")) <|> pure Nothing +    parseMultiPath =+      fmap Just (strArgument (metavar "DIRECTORY")) <|> pure Nothing+ main :: IO () main = do-  (passes, files, mode) <-+  (passes, files, mode, multipath) <-     execParser $       info (helper <*> optionParser)         (fullDesc <>          progDesc "Transform a TIP problem" <>          header "tip - a tool for processing TIP problems")   case files of-    Nothing ->-      handle passes mode =<< getContents-    Just f ->-      handle passes mode =<< readFile f+    Nothing  -> handle passes mode multipath =<< getContents+    Just "-" -> handle passes mode multipath =<< getContents+    Just f   -> handle passes mode multipath =<< readFile f -handle :: [StandardPass] -> OutputMode -> String -> IO ()-handle passes mode s =+handle :: [StandardPass] -> OutputMode -> Maybe FilePath -> String -> IO ()+handle passes mode multipath s =   case parse s of     Left err  -> error $ "Parse failed: " ++ err     Right thy -> do-      let fmap_pp f = fmap (show . f)+      let fmap_pp f = fmap (show . map f)       let show_passes c = fmap (\ s -> c ++ show passes ++ "\n" ++ s)-      let pipeline =+      let (pretty,pipeline,ext) =             case mode of-              CVC4 ->-                fmap_pp SMT.ppTheory . runPasses-                  (passes ++-                  [ LambdaLift, AxiomatizeLambdas-                  , CollapseEqual, RemoveAliases+              SMTLIB ax_func_decls ->+                ( SMT.ppTheory+                , passes +++                  [ TypeSkolemConjecture, Monomorphise False+                  , LambdaLift, AxiomatizeLambdas+                  , SimplifyGently, CollapseEqual, RemoveAliases                   , SimplifyGently, RemoveMatch-                  , SimplifyGently, NegateConjecture-                  , SimplifyGently-                  ])-              Haskell ->-                fmap_pp HS.ppTheory . runPasses passes-              Why3 ->-                fmap_pp Why3.ppTheory . runPasses (passes ++ [CSEMatchWhy3])-              Isabelle ->-                fmap_pp Isabelle.ppTheory . runPasses passes-              TIP ->-                show_passes "; " . fmap_pp SMT.ppTheory . runPasses passes-      putStrLn (freshPass pipeline (lint "parse" thy))+                  , SimplifyGently, Monomorphise False ]+                  ++ [ AxiomatizeFuncdefs | ax_func_decls ]+                  ++ [ SimplifyGently, NegateConjecture ]+                , "smt2")+              TFF ->+                ( TFF.ppTheory+                , passes +++                  [ TypeSkolemConjecture, Monomorphise False+                  , LambdaLift, AxiomatizeLambdas+                  , SimplifyGently, CollapseEqual, RemoveAliases+                  , SimplifyGently, Monomorphise False, IfToBoolOp, CommuteMatch+                  , SimplifyGently, LetLift, SimplifyGently, AxiomatizeFuncdefs2+                  , SimplifyGently, AxiomatizeDatadecls+                  ]+                , "p")+              Haskell m -> (HS.ppTheory m,     passes, "hs")+              Why3      -> (Why3.ppTheory,     passes ++ [CSEMatchWhy3], "mlw")+              Isabelle  -> (Isabelle.ppTheory, passes, "thy")+              TIP       -> (SMT.ppTheory,      passes, "smt2")+      let thys = freshPass (runPasses pipeline) (lint "parse" thy)+      case multipath of+        Nothing ->+          case thys of+            [thy] -> print (pretty thy)+            []    -> error "No theory remaining"+            _     -> error "Multiple theories, specify an output path"+        Just d ->+          sequence_+            [ do putStrLn $ d </> show n <.> ext+                 writeFile (d </> show n <.> ext) (show (pretty thy) ++ "\n")+            | (n, thy) <- [(0 :: Int)..] `zip` thys+            ]+
src/Tip/Core.hs view
@@ -17,7 +17,7 @@ import Data.Foldable (Foldable) import qualified Data.Foldable as F import Data.Generics.Geniplate-import Data.List ((\\))+import Data.List ((\\),partition) import Data.Ord import Control.Monad import qualified Data.Map as Map@@ -37,7 +37,19 @@ (=/=) :: Expr a -> Expr a -> Expr a e1 =/= e2 = Builtin Distinct :@: [e1,e2] +oppositeQuant :: Quant -> Quant+oppositeQuant Forall = Exists+oppositeQuant Exists = Forall++gentleNeg :: Expr a -> Expr a+gentleNeg (Builtin Not :@: [e]) = e+gentleNeg e = Builtin Not :@: [e]+ neg :: Expr a -> Expr a+neg (Quant qi q lcs e)   = Quant qi (oppositeQuant q) lcs (neg e)+neg (Builtin And :@: es) = Builtin Or  :@: map neg es+neg (Builtin Or  :@: es) = Builtin And :@: map neg es+neg (Builtin Not :@: [e]) = e neg (Builtin op :@: [e1,e2])   | Equal    <- op = e1 =/= e2   | Distinct <- op = e1 === e2@@ -58,10 +70,24 @@   | otherwise = Builtin Or :@: [e1,e2]  ands :: [Expr a] -> Expr a-ands xs = foldl (/\) trueExpr xs+ands xs =+  case flatAnd (foldl (/\) trueExpr xs) of+    []  -> trueExpr+    [x] -> x+    xs  -> Builtin And :@: xs+  where+    flatAnd (Builtin And :@: xs) = concatMap flatAnd xs+    flatAnd x = [x]  ors :: [Expr a] -> Expr a-ors xs = foldl (\/) falseExpr xs+ors xs =+  case flatOr (foldl (\/) falseExpr xs) of+    []  -> falseExpr+    [x] -> x+    xs  -> Builtin Or :@: xs+  where+    flatOr (Builtin Or :@: xs) = concatMap flatOr xs+    flatOr x = [x]  (==>) :: Expr a -> Expr a -> Expr a e1 ==> e2@@ -114,25 +140,41 @@ apply e es@(_:_) = Builtin At :@: (e:es) apply _ [] = ERROR("tried to construct nullary lambda function") -applyType :: Ord a => [a] -> [Type a] -> Type a -> Type a-applyType tvs tys ty-  | length tvs == length tys =-      flip transformType ty $ \ty' ->-        case ty' of-          TyVar x ->-            Map.findWithDefault ty' x m-          _ -> ty'-  | otherwise = ERROR("wrong number of type arguments")+applyTypeIn :: Ord a => ((Type a -> Type a) -> f a -> f a) -> [a] -> [Type a] -> f a -> f a+applyTypeIn transformer tvs tys+  | length tvs /= length tys = ERROR("wrong number of type arguments")+  | otherwise = transformer $ \ty -> case ty of TyVar x -> Map.findWithDefault ty x m+                                                _       -> ty   where     m = Map.fromList (zip tvs tys) +applyType :: Ord a => [a] -> [Type a] -> Type a -> Type a+applyType = applyTypeIn transformType++applyTypeInExpr :: Ord a => [a] -> [Type a] -> Expr a -> Expr a+applyTypeInExpr = applyTypeIn transformTypeInExpr++applyTypeInDecl :: Ord a => [a] -> [Type a] -> Decl a -> Decl a+applyTypeInDecl = applyTypeIn transformTypeInDecl+ applyPolyType :: Ord a => PolyType a -> [Type a] -> ([Type a], Type a) applyPolyType PolyType{..} tys =   (map (applyType polytype_tvs tys) polytype_args,    applyType polytype_tvs tys polytype_res) +gblType :: Ord a => Global a -> ([Type a], Type a)+gblType Global{..} = applyPolyType gbl_type gbl_args++makeLets :: [(Local a,Expr a)] -> Expr a -> Expr a+makeLets []           e = e+makeLets ((x,ex):xes) e = Let x ex (makeLets xes e)+ -- * Predicates and examinations on expressions +collectLets :: Expr a -> ([(Local a,Expr a)],Expr a)+collectLets (Let y rhs e) = let (bs,e') = collectLets e in ((y,rhs):bs,e')+collectLets e             = ([],e)+ litView :: Expr a -> Maybe Lit litView (Builtin (Lit l) :@: []) = Just l litView _ = Nothing@@ -141,6 +183,11 @@ boolView e = case litView e of Just (Bool b) -> Just b                                _             -> Nothing +forallView :: Expr a -> ([Local a],Expr a)+forallView (Quant _ Forall vs1 e) = let (vs2,e') = forallView e+                                    in (vs1++vs2,e')+forallView e                      = ([],e)+ -- | A representation of Nested patterns, used in 'patternMatchingView' data DeepPattern a   = DeepConPat (Global a) [DeepPattern a]@@ -281,6 +328,8 @@ builtinType At ((_  :=>: res):_) = res builtinType At _ = ERROR("ill-typed lambda application") +theoryTypes :: (UniverseBi (t a) (Type a),Ord a) => t a -> [Type a]+theoryTypes = usort . universeBi  -- * Substition and refreshing @@ -288,7 +337,7 @@ freshLocal ty = liftM2 Local fresh (return ty)  freshArgs :: Name a => Global a -> Fresh [Local a]-freshArgs gbl = mapM freshLocal (polytype_args (gbl_type gbl))+freshArgs gbl = mapM freshLocal (fst (gblType gbl))  refreshLocal :: Name a => Local a -> Fresh (Local a) refreshLocal (Local name ty) = liftM2 Local (refresh name) (return ty)@@ -329,7 +378,7 @@ -- expression contains no binders (i.e. no lambdas, no lets, no quantifiers), -- since the binders are not refreshed at every insertion point. unsafeSubst :: Ord a => Expr a -> Local a -> Expr a -> Expr a-e `unsafeSubst` _ | not (null (bound e)) = error "Tip.unsafeSubst: contains binders"+e `unsafeSubst` _ | not (null (bound e)) = ERROR("unsafeSubst: contains binders") e `unsafeSubst` x = transformExpr $ \ e0 -> case e0 of   Lcl y | x == y -> e   _              -> e0@@ -398,13 +447,21 @@ projector dt Constructor{..} i tys =   Global proj_name (destructorType dt proj_ty) tys   where-    (proj_name, proj_ty) = con_args !! i+    (proj_name, proj_ty) = case drop i con_args of ca:_ -> ca; [] -> __  discriminator :: Datatype a -> Constructor a -> [Type a] -> Global a discriminator dt Constructor{..} tys =   Global con_discrim (destructorType dt (BuiltinType Boolean)) tys  -- * Operations on theories++-- | Goals in first component, assertions in second+theoryGoals :: Theory a -> ([Formula a],[Formula a])+theoryGoals = partitionGoals . thy_asserts++-- | Goals in first component, assertions in second+partitionGoals :: [Formula a] -> ([Formula a],[Formula a])+partitionGoals = partition ((Prove ==) . fm_role)  mapDecls :: forall a b . (forall t . Traversable t => t a -> t b) -> Theory a -> Theory b mapDecls k (Theory a b c d e) = Theory (map k a) (map k b) (map k c) (map k d) (map k e)
src/Tip/Fresh.hs view
@@ -6,7 +6,7 @@ import Tip.Utils import Tip.Pretty import Control.Applicative hiding (empty)-import Control.Monad.State+import Control.Monad.State.Strict import Control.Arrow ((&&&))  import Data.Foldable (Foldable)@@ -56,4 +56,10 @@ instance Name Int where   fresh     = Fresh (state (id &&& succ))   getUnique = id++instance Name a => Name (PPVar a) where+  fresh = fmap PPVar fresh+  refresh = fmap PPVar . refresh . unPPVar+  freshNamed = fmap PPVar . freshNamed+  refreshNamed s n = fmap PPVar (refreshNamed s (unPPVar n)) 
src/Tip/Haskell/Repr.hs view
@@ -20,6 +20,9 @@   | InstDecl [Type a] {- context -}              (Type a) {- head -}              [Decl a] {- declarations (associated types and fun decls) -}+  | ClassDecl [Type a] {- context -}+              (Type a) {- head -}+              [Decl a] {- declarations (type signatures) -}   | TypeDef (Type a) (Type a)   | Decl a `Where` [Decl a]   | TH (Expr a)
src/Tip/Haskell/Translate.hs view
@@ -4,17 +4,20 @@ {-# LANGUAGE GADTs #-} {-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE CPP #-}+{-# LANGUAGE PatternGuards #-} module Tip.Haskell.Translate where  #include "errors.h" import Tip.Haskell.Repr as H-import Tip.Core as T hiding (Formula(..),globals,Type(..))+import Tip.Core as T hiding (Formula(..),globals,Type(..),Decl(..)) import Tip.Core (Type((:=>:),BuiltinType)) import qualified Tip.Core as T import Tip.Pretty import Tip.Utils import Tip.Scope +import Data.Maybe (isNothing)+ import Tip.CallGraph  import Control.Monad@@ -47,9 +50,29 @@ quickSpec :: String -> HsId a quickSpec = Qualified "QuickSpec" (Just "QS") +sysEnv :: String -> HsId a+sysEnv = Qualified "System.Environment" (Just "Env")++smtenSym :: String -> HsId a+smtenSym = Qualified "Smten.Symbolic" (Just "S")++smtenEnv :: String -> HsId a+smtenEnv = Qualified "Smten.System.Environment" (Just "Env")++smtenMinisat :: String -> HsId a+smtenMinisat = Qualified "Smten.Symbolic.Solver.MiniSat" (Just "S")++smtenMonad :: String -> HsId a+smtenMonad = Qualified "Smten.Control.Monad" (Just "S")++-- smten also needs Prelude to be replaced with Smten.Prelude+ feat :: String -> HsId a feat = Qualified "Test.Feat" (Just "F") +lsc :: String -> HsId a+lsc = Qualified "Test.LazySmallCheck" (Just "L")+ typeable :: String -> HsId a typeable = Qualified "Data.Typeable" (Just "T") @@ -75,17 +98,25 @@   varStr (Other x) = varStr x   varStr (Derived o s) = s ++ varStr o -addHeader :: Decls a -> Decls a-addHeader (Decls ds) =-    Decls (map LANGUAGE ["TemplateHaskell","DeriveDataTypeable","TypeOperators","ImplicitParams","RankNTypes"] ++ Module "A" : ds)+addHeader :: String -> Decls a -> Decls a+addHeader mod_name (Decls ds) =+    Decls (map LANGUAGE ["TemplateHaskell","DeriveDataTypeable","TypeOperators","ImplicitParams","RankNTypes"] ++ Module mod_name : ds)  addImports :: Ord a => Decls (HsId a) -> Decls (HsId a) addImports d@(Decls ds) = Decls (QualImport "Text.Show.Functions" Nothing : imps ++ ds)   where   imps = usort [ QualImport m short | Qualified m short _ <- F.toList d ] -trTheory :: (Ord a,PrettyVar a) => Theory a -> Decls (HsId a)-trTheory = trTheory' . fmap Other+trTheory :: (Ord a,PrettyVar a) => Mode -> Theory a -> Decls (HsId a)+trTheory mode = fixup_prel . trTheory' mode . fmap Other+  where+  fixup_prel =+    case mode of+      Smten -> fmap fx+      _     -> id+    where+    fx (Qualified "Prelude" u v) = Qualified "Smten.Prelude" (Just "S") v+    fx u = u  data Kind = Expr | Formula deriving Eq @@ -97,34 +128,114 @@   where   imps = [TyImp (Derived f "imp") (H.TyCon (Derived f "") []) | Signature f _ <- thy_sigs] -trTheory' :: forall a b . (a ~ HsId b,Ord b,PrettyVar b) => Theory a -> Decls a-trTheory' thy@Theory{..} =+data Mode = Feat | QuickCheck | LazySmallCheck Bool | Smten | QuickSpec | Plain+  deriving (Eq,Ord,Show)++isLazySmallCheck LazySmallCheck{} = True+isLazySmallCheck _                = False++isSmten Smten{} = True+isSmten _       = False++trTheory' :: forall a b . (a ~ HsId b,Ord b,PrettyVar b) => Mode -> Theory a -> Decls a+trTheory' mode thy@Theory{..} =   Decls $+    concat [space_decl | isSmten mode ]  ++     concatMap tr_datatype thy_datatypes ++     map tr_sort thy_sorts ++     concatMap tr_sig thy_sigs ++     concatMap tr_func thy_funcs ++     tr_asserts thy_asserts ++-    [makeSig thy]+    [makeSig thy | mode == QuickSpec ]   where   (translate_UFs,imps) = ufInfo thy +  space_decl :: [Decl a]+  space_decl =+    [ ClassDecl [] (TyCon (Exact "Space") [TyVar (Exact "stv")])+                      [TySig (Exact "space") []+                         (TyArr (TyCon (prelude "Int") [])+                           (TyCon (smtenSym "Symbolic") [TyVar (Exact "stv")]))+                      ]+    , InstDecl [] (TyCon (Exact "Space") [TyCon (prelude "Bool") []])+        [funDecl+          (Exact "space")+          [d]+          (H.Case (Apply (prelude "<") [var d,H.Int 0])+            [(H.ConPat (prelude "True") [], Apply (smtenMonad "mzero") [])+            ,(H.WildPat,+               Apply (smtenMonad "msum")+                 [List+                   [ Apply (smtenMonad "return") [Apply (prelude "False") []]+                   , Apply (smtenMonad "return") [Apply (prelude "True") []]+                   ]])+            ])+        ]+    ]+    where d = Exact "d"+   tr_datatype :: Datatype a -> [Decl a]   tr_datatype (Datatype tc tvs cons) =     [ DataDecl tc tvs         [ (c,map (trType . snd) args) | Constructor c _ args <- cons ]-        (map prelude ["Eq","Ord","Show"] ++ [typeable "Typeable"])-    , TH (Apply (feat "deriveEnumerable") [QuoteTyCon tc])-    , InstDecl [H.TyCon (feat "Enumerable") [H.TyVar a] | a <- tvs]+        (map prelude ["Eq","Ord","Show"]+         ++ [typeable "Typeable" | not (isSmten mode) ])+    ]+    +++    [ TH (Apply (feat "deriveEnumerable") [QuoteTyCon tc])+    | any (== mode) [Feat, QuickCheck, QuickSpec] ]+    +++    [ InstDecl [H.TyCon (feat "Enumerable") [H.TyVar a] | a <- tvs]                (H.TyCon (quickCheck "Arbitrary") [H.TyCon tc (map H.TyVar tvs)])                [funDecl                   (quickCheck "arbitrary") []                   (Apply (quickCheck "sized") [Apply (feat "uniform") []])]+    | any (== mode) [QuickCheck, QuickSpec] ]+    +++    [ InstDecl+        [H.TyCon (lsc "Serial") [H.TyVar a] | a <- tvs]+        (H.TyCon (lsc "Serial") [H.TyCon tc (map H.TyVar tvs)])+        [funDecl+          (lsc "series")+          []+          (foldr1+            (\ e1 e2 -> Apply (lsc "\\/") [e1,e2])+            [ foldl+               (\ e _ -> Apply (lsc "><") [e,Apply (lsc "series") []])+               (Apply (lsc "cons") [Apply c []])+               as+            | Constructor c _ as <- cons+            ])]+    | isLazySmallCheck mode ]+    +++    [ InstDecl+        [H.TyCon (Exact "Space") [H.TyVar a] | a <- tvs]+        (H.TyCon (Exact "Space") [H.TyCon tc (map H.TyVar tvs)])+        [funDecl+          (Exact "space")+          [d]+          (H.Case (Apply (prelude "<") [var d,H.Int 0])+            [(H.ConPat (prelude "True") [], Apply (smtenMonad "mzero") [])+            ,(H.WildPat,+               Apply (smtenMonad "msum")+                 [List+                   [ foldl (\ e1 _ ->+                             Apply (smtenMonad "ap")+                               [e1,Apply (Exact "space")+                                     [Apply (prelude "-") [var d,H.Int 1]]])+                           (Apply (smtenMonad "return") [Apply c []])+                           args+                   | Constructor c _ args <- cons+                   ]])+            ])+        ]+    | let d = Exact "d"+    , isSmten mode     ]    tr_sort :: Sort a -> Decl a-  tr_sort (Sort _ i) | i /= 0 = error "Higher-kinded abstract sort"-  tr_sort (Sort s i) = TypeDef (TyCon s []) (TyCon (prelude "Int") [])+  tr_sort (Sort s i) | null i = TypeDef (TyCon s []) (TyCon (prelude "Int") [])+  tr_sort (Sort _ _) = error "Haskell.Translate: Poly-kinded abstract sort"    tr_sig :: Signature a -> [Decl a]   tr_sig (Signature f pt) =@@ -181,30 +292,90 @@         [ (map tr_deepPattern dps,tr_expr Expr rhs)         | (dps,rhs) <- patternMatchingView func_args func_body         ]+    ] +++    [ FunDecl+        (prop_version func_name)+        [ (map tr_deepPattern dps,tr_expr Formula rhs)+        | (dps,rhs) <- patternMatchingView func_args func_body+        ]+    | isLazySmallCheck mode && func_res == boolType     ] +  prop_version f = Derived f "property"+   tr_asserts :: [T.Formula a] -> [Decl a]   tr_asserts fms =-    let (names,decls) = unzip (zipWith tr_assert [1..] fms)-    in  decls {- ++-          [ TH (Apply (prelude "return") [List []])-          , funDecl (Exact "main") []-              (mkDo [ Stmt (THSplice (Apply (quickCheckAll "polyQuickCheck")-                                            [QuoteName name]))-                    | name <- names ]-                    Noop)-          ] -}+    let (info,decls) = unzip (zipWith tr_assert [1..] fms)+    in  concat decls +++          case mode of+            QuickCheck ->+              [ TH (Apply (prelude "return") [List []])+              , funDecl (Exact "main") []+                  (mkDo [ Stmt (THSplice (Apply (quickCheckAll "polyQuickCheck")+                                                [QuoteName name]))+                        | (name,_) <- info ]+                        Noop)+              ]+            LazySmallCheck md ->+              [ funDecl (Exact "main") []+                  ((`mkDo` Noop)+                     $  [Bind (Exact "args") (Apply (sysEnv "getArgs") [])]+                     ++ [Stmt (fn name) | (name,_) <- info])+              ]+              where+              fn name = case md of+                         False   -> Apply (lsc "test") [var name]+                         True    -> Apply (lsc "depthCheck")+                                      [read_head (var (Exact "args"))+                                      ,var name]+            Feat ->+              [ funDecl (Exact "main") []+                  (mkDo [Stmt (Apply (feat "featCheckStop")+                          [ H.Lam [TupPat (map VarPat vs)] (Apply name (map var vs))+                          ])+                        | (name,vs) <- info ] Noop)+              ]+            Smten | let [(name,vs)] = info ->+              [ funDecl (Exact "main") []+                  $ mkDo [Bind (Exact "args") (Apply (smtenEnv "getArgs") [])+                         ,Bind (Exact "r")+                          (Apply (smtenSym "run_symbolic")+                            [Apply (smtenMinisat "minisat") []+                            ,mkDo (+                              [ Bind v (Apply (Exact "space") [read_head (var (Exact "args"))])+                              | v <- vs ]+                              +++                              [ Stmt $ Apply (smtenMonad "guard") [Apply (prelude "not") [Apply name (map var vs)]] ])+                              (Apply (smtenMonad "return") [nestedTup (map var vs)])+                            ])+                        ]+                        (Apply (prelude "print") [var (Exact "r")])+              ]+            _ -> []+    where+    read_head e = Apply (prelude "read") [Apply (prelude "head") [e]] -  tr_assert :: Int -> T.Formula a -> (a,Decl a)-  tr_assert i (T.Formula r _ b) =-    (prop_name,funDecl prop_name args (assume (tr_expr Formula body)))+  tr_assert :: Int -> T.Formula a -> ((a,[a]),[Decl a])+  tr_assert i (T.Formula r _ tvs b) =+    ((prop_name,args),+      [ TySig prop_name []+          (foldr TyArr+             (case mode of LazySmallCheck{} -> H.TyCon (lsc "Property") []+                           _                -> H.TyCon (prelude "Bool") [])+             [ trType (applyType tvs (replicate (length tvs) (intType)) t)+             | Local _ t <- typed_args ])+      | mode == Feat || isLazySmallCheck mode || mode == Smten ]+      +++      [ funDecl prop_name args (assume (tr_expr (if mode == Feat || isSmten mode then Expr else Formula) body)) ]+    )     where     prop_name | i == 1    = Exact "prop"               | otherwise = Exact ("prop" ++ show i)-    (args,body) =+    (typed_args,body) =       case b of-        Quant _ Forall lcls term -> (map lcl_name lcls,term)+        Quant _ Forall lcls term -> (lcls,term)         _                        -> ([],b)+    args = map lcl_name typed_args      assume e =       case r of@@ -227,12 +398,17 @@   tr_expr k e0 =     case e0 of       Builtin (Lit (T.Int i)) :@: [] -> H.Int i-      Builtin (Lit (Bool b)) :@: []  -> withBool Apply b-      hd :@: es -> let (f,k') = tr_head k hd-                   in Apply f (map (tr_expr k') es)-      Lcl x -> var (lcl_name x)+      Builtin (Lit (Bool b)) :@: [] -> lsc_lift (withBool Apply b)+      Builtin Implies :@: [u,v] | mode == Smten -> tr_expr k (Builtin Or :@: [Builtin Not :@: [u],v])+      hd :@: es -> let ((f,k'),lft) = tr_head (map exprType es) k hd+                   in  lift_if lft (maybe_ty_sig e0 (Apply f (map (tr_expr k') es)))+      Lcl x -> lsc_lift (var (lcl_name x))       T.Lam xs b  -> H.Lam (map (VarPat . lcl_name) xs) (tr_expr Expr b)-      Match e alts -> H.Case (tr_expr Expr e) [ (tr_pattern p,tr_expr Expr rhs) | T.Case p rhs <- default_last alts ]+      Match e alts -> H.Case (tr_expr Expr e) [ (tr_pattern p,tr_expr brs_k rhs) | T.Case p rhs <- default_last alts ]+        where+        brs_k+          | isLazySmallCheck mode = k+          | otherwise             = Expr       T.Let x e b -> H.Let (lcl_name x) (tr_expr Expr e) (tr_expr k b)       T.Quant _ q xs b ->         foldr@@ -243,33 +419,57 @@           xs      where+    maybe_ty_sig e@(hd@(Gbl Global{..}) :@: es) he+       | isNothing (makeGlobal gbl_name gbl_type (map exprType es) Nothing)+         = he ::: trType (exprType e)+    maybe_ty_sig _ he = he++    lift_if b e+      | b && isLazySmallCheck mode = Apply (lsc "lift") [e]+      | otherwise = e+    lsc_lift = lift_if (k == Formula)+     default_last (def@(T.Case Default _):alts) = alts ++ [def]     default_last alts = alts -  tr_head :: Kind -> T.Head a -> (a,Kind)-  tr_head k (Gbl Global{..}) = (gbl_name,Expr)-  tr_head k (Builtin b)      = tr_builtin k b+  tr_head :: [T.Type a] -> Kind -> T.Head a -> ((a,Kind),Bool)+  tr_head ts k (Builtin b)      = tr_builtin ts k b+  tr_head ts k (Gbl Global{..})+    | stay_prop = ((prop_version gbl_name,Expr),False)+    | otherwise = ((gbl_name             ,Expr),False)+    where+    stay_prop = k == Formula+             && isLazySmallCheck mode+             && polytype_res gbl_type == boolType -  tr_builtin :: Kind -> T.Builtin -> (a,Kind)-  tr_builtin k b =+  tr_builtin :: [T.Type a] -> Kind -> T.Builtin -> ((a,Kind),Bool)+  tr_builtin ts k b =     case b of-      At        -> (prelude "id",Expr)+      At        -> ((prelude "id",Expr),False)       Lit{}     -> error "tr_builtin"-      And       -> case_kind ".&&."-      Or        -> case_kind ".||."-      Not       -> case_kind "neg"-      Implies   -> case_kind "==>"-      Equal     -> case_kind "==="-      Distinct  -> case_kind "=/="-      _         -> prelude_fn+      And       -> case_kind (tipDSL ".&&.") (Just (lsc "*&*"))+      Or        -> case_kind (tipDSL ".||.") (Just (lsc "*|*"))+      Not       -> case_kind (tipDSL "neg")  (Just (lsc "neg"))+      Implies   -> case_kind (tipDSL "==>")  (Just (lsc "*=>*"))+      Equal     -> case_kind (tipDSL "===") $ case ts of+                                                BuiltinType Boolean:_ -> Just (lsc "*=*")+                                                _                     -> Nothing+      Distinct  -> case_kind (tipDSL "=/=")  Nothing+      _         -> (prelude_fn,False)     where     Just prelude_str_ = lookup b hsBuiltins     prelude_fn = (prelude prelude_str_,Expr) -    case_kind sf =+    case_kind tip_version lsc_version =       case k of-        Expr    -> prelude_fn-        Formula -> (tipDSL sf,Formula)+        Expr    -> (prelude_fn,False)+        Formula ->+          case mode of+            LazySmallCheck{} ->+              case lsc_version of+                Just v  -> ((v,Formula),False)+                Nothing -> (prelude_fn,True)+            _ -> ((tip_version,Formula),False)    -- ignores the type variables   tr_polyType_inner :: T.PolyType a -> H.Type a@@ -399,6 +599,7 @@                | Signature f _ <- thy_sigs                ])           , (quickSpec "maxTermSize", Apply (prelude "Just") [H.Int (if translate_UFs then 15 else 7)])+          , (quickSpec "maxTermDepth", Apply (prelude "Just") [H.Int 4])           , (quickSpec "testTimeout", Apply (prelude "Just") [H.Int 100000])           ]       ]@@ -418,7 +619,7 @@    scp = scope thy -  cg = map (map defines) (flatCallGraph (CallGraphOpts True False) thy)+  cg = map (map defines) (flatCallGraph (CallGraphOpts False False) thy)    poly_type (PolyType _ args res) = args :=>: res 
src/Tip/Lint.hs view
@@ -14,7 +14,7 @@ --  * Default case comes first. No duplicate cases. -- --  * Expressions and formulas not mixed.-module Tip.Lint (lint, lintM, lintTheory) where+module Tip.Lint (lint, lintM, lintTheory, lintEither) where  #include "errors.h" import Tip.Core@@ -28,20 +28,14 @@ import Text.PrettyPrint import Tip.Pretty.SMT import Data.List---import Debug.Trace+-- import Debug.Trace  -- | Crashes if the theory is malformed lint :: (PrettyVar a, Ord a) => String -> Theory a -> Theory a-lint pass thy0@(renameAvoiding [] return -> thy) =-  -- trace ("Linting:" ++ pass ++ ":\n" ++ ppRender thy) $-  case lintTheory thy0 of-    Nothing -> thy0-    Just doc ->-      case lintTheory thy of-        Just doc ->-          error ("Lint failed after " ++ pass ++ ":\n" ++ show doc ++ "\n!!!")-        Nothing ->-          error ("Non-renamed linting pass failed!? " ++ pass ++ ":\n" ++ show doc ++ "\n!!!")+lint pass thy =+  case lintEither pass thy of+    Left doc -> error (show doc)+    Right x  -> x  -- | Same as 'lint', but returns in a monad, for convenience lintM :: (PrettyVar a, Ord a, Monad m) => String -> Theory a -> m (Theory a)@@ -57,12 +51,26 @@     Nothing -> throwError x     Just y  -> return y +-- | Returns a Left if the theory is malformed+lintEither :: (PrettyVar a, Ord a) => String -> Theory a -> Either Doc (Theory a)+lintEither pass thy0@(renameAvoiding [] return -> thy) =+--   trace (" ==== Linting: " ++ pass ++ " ====\n" ++ ppRender thy0 ++ "\n ====") $+  case lintTheory thy0 of+    Nothing -> return thy0+    Just doc ->+      case lintTheory thy of+        Just doc ->+          Left (text ("Lint failed after " ++ pass ++ ":") $$ doc $$ "!!!")+        Nothing ->+          Left (text ("Non-renamed linting pass failed!? " ++ pass ++ ":") $$ doc $$ "!!!")+ -- | Returns the error if the theory is malformed lintTheory :: (PrettyVar a, Ord a) => Theory a -> Maybe Doc lintTheory thy@Theory{..} =   either Just (const Nothing) .   runScope . withTheory thy $ inContext thy $ do     mapM_ lintDatatype thy_datatypes+    mapM_ lintSort thy_sorts     mapM_ lintSignature thy_sigs     mapM_ lintFunction thy_funcs     mapM_ lintFormula thy_asserts@@ -75,6 +83,11 @@       forM_ con_args $ \(_, ty) ->         lintType ty +lintSort :: (PrettyVar a, Ord a) => Sort a -> ScopeM a ()+lintSort sort@Sort{..} =+  local $ inContext sort $+    mapM_ newTyVar sort_tvs+ lintPolyType :: (PrettyVar a, Ord a) => PolyType a -> ScopeM a () lintPolyType polyty@PolyType{..} =   newScope $ inContext polyty $ do@@ -98,7 +111,7 @@   case info of     TyVarInfo ->       throwError (fsep ["Type variable", nest 2 (ppVar x), "used as type constructor"])-    SortInfo n -> checkArity n+    SortInfo Sort{..} -> checkArity (length sort_tvs)     DatatypeInfo Datatype{..} -> checkArity (length data_tvs)   mapM_ lintType tys lintType (args :=>: res) = do@@ -128,7 +141,7 @@   newLocal lcl  lintFormula :: (PrettyVar a, Ord a) => Formula a -> ScopeM a ()-lintFormula form@(Formula _ tvs expr) =+lintFormula form@(Formula _ _ tvs expr) =   local $ inContext form $ do     mapM_ newTyVar tvs     lintExpr FormulaKind expr@@ -183,9 +196,9 @@       "Expression of type", nest 2 (pp (exprType expr)),       "bound to variable" <+> pp lcl,       "of type", nest 2 (pp lcl_type)])-lintExpr ExprKind (Quant NoInfo _ lcls expr) =+lintExpr ExprKind (Quant _info _ lcls expr) =   throwError "Quantifier found in expression"-lintExpr FormulaKind (Quant NoInfo _ lcls expr) =+lintExpr FormulaKind (Quant _info _ lcls expr) =   local $ do     mapM_ lintBinder lcls     lintExpr FormulaKind expr@@ -247,13 +260,15 @@ lintCase :: (PrettyVar a, Ord a) => ExprKind -> Expr a -> Case a -> ScopeM a () lintCase kind _ (Case Default body) = lintExpr kind body lintCase kind _ (Case LitPat{} body) = lintExpr kind body-lintCase kind expr (Case (ConPat gbl@Global{..} args) body) =+lintCase kind expr (Case pat@(ConPat gbl@Global{..} args) body) =   local $ do-    mapM_ lintBinder args-    lintExpr kind (Gbl gbl :@: map Lcl args)+    inContext pat $ do+      mapM_ lintBinder args+      lintExpr kind (Gbl gbl :@: map Lcl args)+      check ("Global" <+> pp gbl <+> "used as constructor")+        (isJust . lookupConstructor gbl_name)+      let (_, res) = applyPolyType gbl_type gbl_args+      unless (res == exprType expr) $+        throwError (fsep ["Constructor", nest 2 (pp (Gbl gbl :@: map Lcl args)), "has type", nest 2 (pp res), "but should be", nest 2 (pp (exprType expr))])+     lintExpr kind body-    check ("Global" <+> pp gbl <+> "used as constructor")-      (isJust . lookupConstructor gbl_name)-    let (_, res) = applyPolyType gbl_type gbl_args-    unless (res == exprType expr) $-      throwError (fsep ["Constructor", nest 2 (pp (Gbl gbl :@: map Lcl args)), "has type", nest 2 (pp res), "but should be", nest 2 (pp (exprType expr))])
src/Tip/Parser.hs view
@@ -1,5 +1,5 @@ -- | Parses the TIP format-module Tip.Parser(parse,Id,idPos) where+module Tip.Parser(parse,parseFile,Id,idPos) where  import Data.Monoid @@ -9,6 +9,15 @@  import Tip.Parser.Convert import Tip.Core++-- | Parse from a file. If the string is empty or "-", then reads from stdin.+parseFile :: String -> IO (Either String (Theory Id))+parseFile file =+  do s <- case file of+       ""  -> getContents+       "-" -> getContents+       _   -> readFile file+     return (parse s)  -- | Parse, and get either an error or the string's theory parse :: String -> Either String (Theory Id)
src/Tip/Parser/AbsTIP.hs view
@@ -15,10 +15,17 @@ data Decl =    DeclareDatatypes [Symbol] [Datatype]  | DeclareSort Symbol Integer+ | DeclareConst ConstDecl+ | DeclareConstPar Par ConstDecl  | DeclareFun FunDecl- | DefineFunsRec [FunDef] [Expr]- | MonoAssert Assertion Expr- | ParAssert Assertion [Symbol] Expr+ | DeclareFunPar Par FunDecl+ | DefineFun FunDef+ | DefineFunPar Par FunDef+ | DefineFunRec FunDef+ | DefineFunRecPar Par FunDef+ | DefineFunsRec [FunDec] [Expr]+ | Assert Assertion Expr+ | AssertPar Assertion Par Expr   deriving (Eq,Ord,Show,Read)  data Assertion =@@ -26,24 +33,31 @@  | AssertNot   deriving (Eq,Ord,Show,Read) -data FunDef =-   ParFunDef [Symbol] InnerFunDef- | MonoFunDef InnerFunDef+data Par =+   Par [Symbol]   deriving (Eq,Ord,Show,Read) -data InnerFunDef =-   InnerFunDef Symbol [Binding] Type+data ConstDecl =+   ConstDecl Symbol Type   deriving (Eq,Ord,Show,Read)  data FunDecl =-   ParFunDecl [Symbol] InnerFunDecl- | MonoFunDecl InnerFunDecl+   FunDecl Symbol [Type] Type   deriving (Eq,Ord,Show,Read) -data InnerFunDecl =-   InnerFunDecl Symbol [Type] Type+data FunDef =+   FunDef Symbol [Binding] Type Expr   deriving (Eq,Ord,Show,Read) +data FunDec =+   ParFunDec Par InnerFunDec+ | MonoFunDec InnerFunDec+  deriving (Eq,Ord,Show,Read)++data InnerFunDec =+   InnerFunDec Symbol [Binding] Type+  deriving (Eq,Ord,Show,Read)+ data Datatype =    Datatype Symbol [Constructor]   deriving (Eq,Ord,Show,Read)@@ -57,7 +71,7 @@   deriving (Eq,Ord,Show,Read)  data LetDecl =-   LetDecl Binding Expr+   LetDecl Symbol Expr   deriving (Eq,Ord,Show,Read)  data Type =@@ -76,6 +90,7 @@  | Let [LetDecl] Expr  | Binder Binder [Binding] Expr  | LitInt Integer+ | LitNegInt Integer  | LitTrue  | LitFalse   deriving (Eq,Ord,Show,Read)
src/Tip/Parser/Convert.hs view
@@ -46,7 +46,7 @@   compare = compare `on` idUnique  instance PrettyVar Id where-  varStr (Id s _ _) = s+  varStr (Id s u _) = s -- ++ "_" ++ show u  instance Name Id where   freshNamed n@@ -81,7 +81,7 @@      lift $ modify (M.insert s (i,ik))      return i -trDecls :: [Decl] -> CM (Theory Id)+trDecls :: [A.Decl] -> CM (Theory Id) trDecls [] = return emptyTheory trDecls (d:ds) =   do thy <- trDecl d@@ -89,7 +89,7 @@        do thy_rest <- trDecls ds           return (thy `joinTheories` thy_rest) -trDecl :: Decl -> CM (Theory Id)+trDecl :: A.Decl -> CM (Theory Id) trDecl x =   local $     case x of@@ -97,7 +97,8 @@         do -- add their types, abstractly            forM_ datatypes $ \dt -> do              sym <- addSym GlobalId (dataSym dt)-             newSort (Sort sym (length tvs))+             tvi <- mapM (addSym LocalId) tvs+             newSort (Sort sym tvi)            newScope $              do tvi <- mapM (addSym LocalId) tvs                 mapM newTyVar tvi@@ -106,51 +107,67 @@        DeclareSort s n ->         do i <- addSym GlobalId s-           return emptyTheory{ thy_sorts = [Sort i (fromIntegral n)] }+           tvs <- lift . lift $ mapM refresh (replicate (fromInteger n) i)+           return emptyTheory{ thy_sorts = [Sort i tvs] } -      DeclareFun fundecl ->-        do d <- trFunDecl fundecl+      DeclareConst const_decl -> trDecl (DeclareConstPar emptyPar const_decl)++      DeclareConstPar par (ConstDecl s t) -> trDecl (DeclareFunPar par (FunDecl s [] t))++      DeclareFun        decl -> trDecl (DeclareFunPar emptyPar decl)+      DeclareFunPar par decl ->+        do d <- trFunDecl par decl            return emptyTheory{ thy_sigs = [d] } -      DefineFunsRec fundefs bodies ->+      DefineFun        def -> trDecl (DefineFunPar emptyPar def)+      DefineFunPar par def@(FunDef f _ _ _) ->+        do thy <- trDecl (DefineFunRecPar par def)+           let [fn] = thy_funcs thy+           when (func_name fn `elem` uses fn)+                (throwError $ ppSym f <+> "is recursive, but define-fun-rec was not used!")+           return thy++      DefineFunRec        def -> trDecl (DefineFunRecPar emptyPar def)+      DefineFunRecPar par def ->+        do sig <- trFunDecl par (defToDecl def)+           withTheory emptyTheory{ thy_sigs = [sig] } $ do+             fn <- trFunDef par def+             return emptyTheory{ thy_funcs = [fn] }++      DefineFunsRec decs bodies ->         do -- add their correct types, abstractly-           fds <- mapM (trFunDecl . defToDecl) fundefs+           fds <- mapM (uncurry trFunDecl . decToDecl) decs            withTheory emptyTheory{ thy_sigs = fds } $ do-             fns <- zipWithM trFunDef fundefs bodies+             fns <- sequence+                [ uncurry trFunDef (decToDef dec body)+                | (dec,body) <- decs `zip` bodies+                ]              return emptyTheory{ thy_funcs = fns } -      MonoAssert role expr    -> trDecl (ParAssert role [] expr)-      ParAssert role tvs expr ->+      A.Assert  role           expr -> trDecl (AssertPar role emptyPar expr)+      AssertPar role (Par tvs) expr ->         do tvi <- mapM (addSym LocalId) tvs            mapM newTyVar tvi-           let toRole AssertIt  = Assert+           let toRole AssertIt  = T.Assert                toRole AssertNot = Prove-           fm <- Formula (toRole role) tvi <$> trExpr expr+           fm <- Formula (toRole role) UserAsserted tvi <$> trExpr expr            return emptyTheory{ thy_asserts = [fm] } +emptyPar :: Par+emptyPar = Par [] +decToDecl :: FunDec -> (Par,FunDecl)+decToDecl dec = case dec of+  MonoFunDec inner -> decToDecl (ParFunDec emptyPar inner)+  ParFunDec par (InnerFunDec fsym bindings res_type) ->+    (par,FunDecl fsym (map bindingType bindings) res_type)  defToDecl :: FunDef -> FunDecl-defToDecl x = case x of-  MonoFunDef inner -> defToDecl (ParFunDef [] inner)-  ParFunDef tvs (InnerFunDef fsym bindings res_type) ->-    ParFunDecl tvs (InnerFunDecl fsym (map bindingType bindings) res_type)--trFunDef :: FunDef -> A.Expr -> CM (T.Function Id)-trFunDef x body = case x of-  MonoFunDef inner -> trFunDef (ParFunDef [] inner) body-  ParFunDef tvs (InnerFunDef fsym bindings res_type) ->-    newScope $-      do f <- lkSym fsym-         tvi <- mapM (addSym LocalId) tvs-         mapM newTyVar tvi-         args <- mapM trLocalBinding bindings-         Function f tvi args <$> trType res_type <*> trExpr body+defToDecl (FunDef fsym bindings res_type _) =+  FunDecl fsym (map bindingType bindings) res_type -trFunDecl :: FunDecl -> CM (T.Signature Id)-trFunDecl x = case x of-  MonoFunDecl inner -> trFunDecl (ParFunDecl [] inner)-  ParFunDecl tvs (InnerFunDecl fsym args res) ->+trFunDecl :: Par -> FunDecl -> CM (T.Signature Id)+trFunDecl (Par tvs) (FunDecl fsym args res) =     newScope $       do f <- addSym GlobalId fsym          tvi <- mapM (addSym LocalId) tvs@@ -158,6 +175,21 @@          pt <- PolyType tvi <$> mapM trType args <*> trType res          return (Signature f pt) +decToDef :: FunDec -> A.Expr -> (Par,FunDef)+decToDef dec body = case dec of+  MonoFunDec inner -> decToDef (ParFunDec emptyPar inner) body+  ParFunDec par (InnerFunDec fsym bindings res_type) ->+    (par,FunDef fsym bindings res_type body)++trFunDef :: Par -> FunDef -> CM (T.Function Id)+trFunDef (Par tvs) (FunDef fsym bindings res_type body) =+  newScope $+    do f <- lkSym fsym+       tvi <- mapM (addSym LocalId) tvs+       mapM newTyVar tvi+       args <- mapM trLocalBinding bindings+       Function f tvi args <$> trType res_type <*> trExpr body+ dataSym :: A.Datatype -> Symbol dataSym (A.Datatype sym _) = sym @@ -192,8 +224,14 @@  trLetDecls :: [LetDecl] -> A.Expr -> CM (T.Expr Id) trLetDecls [] e = trExpr e-trLetDecls (LetDecl binding expr:bs) e-  = newScope $ T.Let <$> trLocalBinding binding <*> trExpr expr <*> trLetDecls bs e+trLetDecls (LetDecl s expr:bs) e+  = do body <- trExpr expr+       x <- addSym LocalId s+       let l = Local x (exprType body)+       newScope $+         do newLocal l+            rest <- trLetDecls bs e+            return (T.Let l body rest)  trExpr :: A.Expr -> CM (T.Expr Id) trExpr e0 = case e0 of@@ -216,9 +254,10 @@                             return (T.Match e cases')   A.Let letdecls expr -> trLetDecls letdecls expr   A.Binder binder bindings expr -> newScope $ trBinder binder <$> mapM trLocalBinding bindings <*> trExpr expr-  A.LitInt n -> return $ intLit n-  A.LitTrue  -> return $ bool True-  A.LitFalse -> return $ bool False+  A.LitInt n    -> return $ intLit n+  A.LitNegInt n -> return $ intLit (negate n)+  A.LitTrue     -> return $ bool True+  A.LitFalse    -> return $ bool False  trHead :: Maybe (T.Type Id) -> A.Head -> [T.Expr Id] -> CM (T.Expr Id) trHead mgt A.IfThenElse  [c,t,f] = return (makeIf c t f)
src/Tip/Parser/LexTIP.x view
@@ -20,14 +20,14 @@ $u = [\0-\255]          -- universal: any character  @rsyms =    -- symbols and non-identifier-like reserved words-   \( | "check" \- "sat" | \) | "declare" \- "datatypes" | "declare" \- "sort" | "declare" \- "fun" | "define" \- "funs" \- "rec" | "assert" \- "not" | \= \> | \@ | \= | \+ | \- | \* | \> | \> \= | \< | \< \=+   \( | "check" \- "sat" | \) | "declare" \- "datatypes" | "declare" \- "sort" | "declare" \- "const" | "declare" \- "fun" | "define" \- "fun" | "define" \- "fun" \- "rec" | "define" \- "funs" \- "rec" | "assert" \- "not" | \= \> | \- | \@ | \= | \+ | \* | \> | \> \= | \< | \< \=  :- ";" [.]* ; -- Toss single line comments  $white+ ; @rsyms { tok (\p s -> PT p (eitherResIdent (TV . share) s)) }-($l | [\~ \! \@ \$ \% \^ \& \* \_ \- \+ \= \< \> \. \? \/]) ($l | $d | [\~ \! \@ \$ \% \^ \& \* \_ \- \+ \= \< \> \. \? \/]) * { tok (\p s -> PT p (eitherResIdent (T_Symbol . share) s)) }+($l | [\~ \! \@ \$ \% \^ \& \* \_ \+ \= \< \> \. \? \/]) ($l | $d | [\~ \! \@ \$ \% \^ \& \* \_ \- \+ \= \< \> \. \? \/]) * { tok (\p s -> PT p (eitherResIdent (T_Symbol . share) s)) }  $l $i*   { tok (\p s -> PT p (eitherResIdent (TV . share) s)) } @@ -99,7 +99,7 @@                               | s == a = t  resWords :: BTree-resWords = b "check-sat" 20 (b ">" 10 (b "-" 5 (b "*" 3 (b ")" 2 (b "(" 1 N N) N) (b "+" 4 N N)) (b "=" 8 (b "<=" 7 (b "<" 6 N N) N) (b "=>" 9 N N))) (b "and" 15 (b "Bool" 13 (b "@" 12 (b ">=" 11 N N) N) (b "Int" 14 N N)) (b "assert-not" 18 (b "assert" 17 (b "as" 16 N N) N) (b "case" 19 N N)))) (b "forall" 30 (b "define-funs-rec" 25 (b "declare-sort" 23 (b "declare-fun" 22 (b "declare-datatypes" 21 N N) N) (b "default" 24 N N)) (b "exists" 28 (b "div" 27 (b "distinct" 26 N N) N) (b "false" 29 N N))) (b "mod" 35 (b "let" 33 (b "lambda" 32 (b "ite" 31 N N) N) (b "match" 34 N N)) (b "par" 38 (b "or" 37 (b "not" 36 N N) N) (b "true" 39 N N))))+resWords = b "declare-datatypes" 22 (b ">=" 11 (b "<" 6 (b "*" 3 (b ")" 2 (b "(" 1 N N) N) (b "-" 5 (b "+" 4 N N) N)) (b "=>" 9 (b "=" 8 (b "<=" 7 N N) N) (b ">" 10 N N))) (b "assert" 17 (b "Int" 14 (b "Bool" 13 (b "@" 12 N N) N) (b "as" 16 (b "and" 15 N N) N)) (b "check-sat" 20 (b "case" 19 (b "assert-not" 18 N N) N) (b "declare-const" 21 N N)))) (b "forall" 33 (b "define-funs-rec" 28 (b "default" 25 (b "declare-sort" 24 (b "declare-fun" 23 N N) N) (b "define-fun-rec" 27 (b "define-fun" 26 N N) N)) (b "exists" 31 (b "div" 30 (b "distinct" 29 N N) N) (b "false" 32 N N))) (b "mod" 38 (b "let" 36 (b "lambda" 35 (b "ite" 34 N N) N) (b "match" 37 N N)) (b "par" 41 (b "or" 40 (b "not" 39 N N) N) (b "true" 42 N N))))    where b s n = let bs = id s                   in B bs (TS bs n) 
src/Tip/Parser/ParTIP.y view
@@ -12,10 +12,12 @@ %name pListDecl ListDecl %name pDecl Decl %name pAssertion Assertion-%name pFunDef FunDef-%name pInnerFunDef InnerFunDef+%name pPar Par+%name pConstDecl ConstDecl %name pFunDecl FunDecl-%name pInnerFunDecl InnerFunDecl+%name pFunDef FunDef+%name pFunDec FunDec+%name pInnerFunDec InnerFunDec %name pDatatype Datatype %name pConstructor Constructor %name pBinding Binding@@ -36,6 +38,7 @@ %name pListType ListType %name pListFunDecl ListFunDecl %name pListFunDef ListFunDef+%name pListFunDec ListFunDec  -- no lexer declaration %monad { Err } { thenM } { returnM }@@ -62,25 +65,28 @@   'assert-not' { PT _ (TS _ 18) }   'case' { PT _ (TS _ 19) }   'check-sat' { PT _ (TS _ 20) }-  'declare-datatypes' { PT _ (TS _ 21) }-  'declare-fun' { PT _ (TS _ 22) }-  'declare-sort' { PT _ (TS _ 23) }-  'default' { PT _ (TS _ 24) }-  'define-funs-rec' { PT _ (TS _ 25) }-  'distinct' { PT _ (TS _ 26) }-  'div' { PT _ (TS _ 27) }-  'exists' { PT _ (TS _ 28) }-  'false' { PT _ (TS _ 29) }-  'forall' { PT _ (TS _ 30) }-  'ite' { PT _ (TS _ 31) }-  'lambda' { PT _ (TS _ 32) }-  'let' { PT _ (TS _ 33) }-  'match' { PT _ (TS _ 34) }-  'mod' { PT _ (TS _ 35) }-  'not' { PT _ (TS _ 36) }-  'or' { PT _ (TS _ 37) }-  'par' { PT _ (TS _ 38) }-  'true' { PT _ (TS _ 39) }+  'declare-const' { PT _ (TS _ 21) }+  'declare-datatypes' { PT _ (TS _ 22) }+  'declare-fun' { PT _ (TS _ 23) }+  'declare-sort' { PT _ (TS _ 24) }+  'default' { PT _ (TS _ 25) }+  'define-fun' { PT _ (TS _ 26) }+  'define-fun-rec' { PT _ (TS _ 27) }+  'define-funs-rec' { PT _ (TS _ 28) }+  'distinct' { PT _ (TS _ 29) }+  'div' { PT _ (TS _ 30) }+  'exists' { PT _ (TS _ 31) }+  'false' { PT _ (TS _ 32) }+  'forall' { PT _ (TS _ 33) }+  'ite' { PT _ (TS _ 34) }+  'lambda' { PT _ (TS _ 35) }+  'let' { PT _ (TS _ 36) }+  'match' { PT _ (TS _ 37) }+  'mod' { PT _ (TS _ 38) }+  'not' { PT _ (TS _ 39) }+  'or' { PT _ (TS _ 40) }+  'par' { PT _ (TS _ 41) }+  'true' { PT _ (TS _ 42) }  L_integ  { PT _ (TI $$) } L_Symbol { PT _ (T_Symbol _) }@@ -103,10 +109,17 @@ Decl :: { Decl } Decl : 'declare-datatypes' '(' ListSymbol ')' '(' ListDatatype ')' { DeclareDatatypes (reverse $3) (reverse $6) }    | 'declare-sort' Symbol Integer { DeclareSort $2 $3 }+  | 'declare-const' ConstDecl { DeclareConst $2 }+  | 'declare-const' '(' Par '(' ConstDecl ')' ')' { DeclareConstPar $3 $5 }   | 'declare-fun' FunDecl { DeclareFun $2 }-  | 'define-funs-rec' '(' ListFunDef ')' '(' ListExpr ')' { DefineFunsRec (reverse $3) (reverse $6) }-  | Assertion Expr { MonoAssert $1 $2 }-  | Assertion '(' 'par' '(' ListSymbol ')' Expr ')' { ParAssert $1 (reverse $5) $7 }+  | 'declare-fun' '(' Par '(' FunDecl ')' ')' { DeclareFunPar $3 $5 }+  | 'define-fun' FunDef { DefineFun $2 }+  | 'define-fun' '(' Par '(' FunDef ')' ')' { DefineFunPar $3 $5 }+  | 'define-fun-rec' FunDef { DefineFunRec $2 }+  | 'define-fun-rec' '(' Par '(' FunDef ')' ')' { DefineFunRecPar $3 $5 }+  | 'define-funs-rec' '(' ListFunDec ')' '(' ListExpr ')' { DefineFunsRec (reverse $3) (reverse $6) }+  | Assertion Expr { Assert $1 $2 }+  | Assertion '(' Par Expr ')' { AssertPar $1 $3 $4 }   Assertion :: { Assertion }@@ -114,24 +127,31 @@   | 'assert-not' { AssertNot }  -FunDef :: { FunDef }-FunDef : '(' 'par' '(' ListSymbol ')' InnerFunDef ')' { ParFunDef (reverse $4) $6 } -  | InnerFunDef { MonoFunDef $1 }+Par :: { Par }+Par : 'par' '(' ListSymbol ')' { Par (reverse $3) }   -InnerFunDef :: { InnerFunDef }-InnerFunDef : '(' Symbol '(' ListBinding ')' Type ')' { InnerFunDef $2 (reverse $4) $6 } +ConstDecl :: { ConstDecl }+ConstDecl : Symbol Type { ConstDecl $1 $2 }    FunDecl :: { FunDecl }-FunDecl : '(' 'par' '(' ListSymbol ')' '(' InnerFunDecl ')' ')' { ParFunDecl (reverse $4) $7 } -  | InnerFunDecl { MonoFunDecl $1 }+FunDecl : Symbol '(' ListType ')' Type { FunDecl $1 (reverse $3) $5 }   -InnerFunDecl :: { InnerFunDecl }-InnerFunDecl : Symbol '(' ListType ')' Type { InnerFunDecl $1 (reverse $3) $5 } +FunDef :: { FunDef }+FunDef : Symbol '(' ListBinding ')' Type Expr { FunDef $1 (reverse $3) $5 $6 }   +FunDec :: { FunDec }+FunDec : '(' Par InnerFunDec ')' { ParFunDec $2 $3 } +  | InnerFunDec { MonoFunDec $1 }+++InnerFunDec :: { InnerFunDec }+InnerFunDec : '(' Symbol '(' ListBinding ')' Type ')' { InnerFunDec $2 (reverse $4) $6 } ++ Datatype :: { Datatype } Datatype : '(' Symbol ListConstructor ')' { Datatype $2 (reverse $3) }  @@ -145,7 +165,7 @@   LetDecl :: { LetDecl }-LetDecl : '(' Binding Expr ')' { LetDecl $2 $3 } +LetDecl : '(' Symbol Expr ')' { LetDecl $2 $3 }    Type :: { Type }@@ -164,6 +184,7 @@   | '(' 'let' '(' ListLetDecl ')' Expr ')' { Let (reverse $4) $6 }   | '(' Binder '(' ListBinding ')' Expr ')' { Binder $2 (reverse $4) $6 }   | Integer { LitInt $1 }+  | '-' Integer { LitNegInt $2 }   | 'true' { LitTrue }   | 'false' { LitFalse } @@ -253,6 +274,11 @@ ListFunDef :: { [FunDef] } ListFunDef : {- empty -} { [] }    | ListFunDef FunDef { flip (:) $1 $2 }+++ListFunDec :: { [FunDec] }+ListFunDec : {- empty -} { [] } +  | ListFunDec FunDec { flip (:) $1 $2 }   
+ src/Tip/Pass/AxiomatizeDatadecls.hs view
@@ -0,0 +1,81 @@+{-# LANGUAGE RecordWildCards #-}+{-# LANGUAGE CPP #-}+module Tip.Pass.AxiomatizeDatadecls where++#include "errors.h"+import Tip.Core+import Tip.Fresh+import Tip.Scope++import Data.List (tails)+import Data.Monoid++import qualified Data.Map as M++axiomatizeDatadecls :: Name a => Bool -> Theory a -> Fresh (Theory a)+axiomatizeDatadecls ueq thy@Theory{..} =+  do thys <- mapM (trDatatype ueq) thy_datatypes+     return (mconcat (thys ++ [thy { thy_datatypes = [] }]))++trDatatype :: Name a => Bool -> Datatype a -> Fresh (Theory a)+trDatatype ueq dt@Datatype{..} =+  do let ty_args = map TyVar data_tvs++     -- X = nil | X = cons(head(X), tail(X))+     domx <- freshNamed "x"+     let doml = Local domx (TyCon data_name ty_args)+     let domain =+           Formula Assert (DataDomain data_name) data_tvs $+             mkQuant Forall [doml] $+               ors+                 [ Lcl doml ===+                     Gbl (constructor dt c ty_args)+                       :@: [ Gbl (projector dt c i ty_args) :@: [Lcl doml]+                           | i <- [0..length args-1]+                           ]+                 | c@(Constructor _ _ args) <- data_cons+                 ]+     -- head(cons(X,Y)) = X+     inj <-+       sequence+         [ do qs <- mapM freshLocal (map snd args)+              return $+                Formula Assert (DataProjection data_name) data_tvs $+                  mkQuant Forall qs $+                    Gbl (projector dt c i ty_args) :@:+                      [Gbl (constructor dt c ty_args) :@: map Lcl qs]+                    ===+                    Lcl (case drop i qs of q:_ -> q; [] -> __)+         | c@(Constructor _ _ args) <- data_cons+         , i <- [0..length args-1]+         ]++     -- nil /= cons(X,Y)+     distinct <-+       sequence+         [ do qs_k <- mapM freshLocal (map snd args_k)+              qs_j <- mapM freshLocal (map snd args_j)+              let tm_k = Gbl (constructor dt k ty_args) :@: map Lcl qs_k+              let tm_j = Gbl (constructor dt j ty_args) :@: map Lcl qs_j+              return $+                Formula Assert (DataDistinct data_name) data_tvs $+                  mkQuant Forall (qs_k ++ qs_j) $+                    tm_k =/= tm_j+         | (k@(Constructor _ _ args_k),j@(Constructor _ _ args_j)) <- diag data_cons+         ]++     return $+       declsToTheory $+           [ SortDecl (Sort data_name data_tvs) ]+        ++ [ SigDecl (Signature gbl (globalType gbl_info))+           | let scp = scope emptyTheory { thy_datatypes = [dt] }+           , (gbl,gbl_info) <- M.toList (Tip.Scope.globals scp)+           , case gbl_info of+               DiscriminatorInfo{} -> False+               _ -> True+           ]+        ++ map AssertDecl (if ueq then inj else domain:inj ++ distinct)++diag :: [a] -> [(a,a)]+diag xs = [ (x,y) | x:ys <- tails xs, y <- ys ]+
src/Tip/Pass/AxiomatizeFuncdefs.hs view
@@ -6,18 +6,14 @@ #include "errors.h" import Tip.Core import Tip.Fresh+import Tip.Scope +import Data.List (delete) import Data.Generics.Geniplate import Control.Applicative ---conProjs :: Project a => Global a -> [Global a]-conProjs = undefined-{- (Global k (PolyType tvs arg_tys res_ty) ts _)-  = [ Global (project k i) (PolyType tvs [res_ty] arg_ty) ts ProjectNS-    | (i,arg_ty) <- zip [0..] arg_tys-    ]-    -}-+-- | Transforms define-fun to declare-fun in the most straightforward way.+--   All parts of the right hand side is preserved, including match and if-then-else. axiomatizeFuncdefs :: Theory a -> Theory a axiomatizeFuncdefs thy@Theory{..} =   thy{@@ -28,52 +24,69 @@  where   (abs,fms) = unzip (map axiomatize thy_funcs) --- Passes needed afterwards:------ 1)  x = e ==> F[x] ~~> F[e]------ 2)---     all x (D => (all y . E) /\ (all z . F))--- ~~>---     all x ((D => all y . E) /\ (D => all z . F))--- ~~>---     (all x y (D => E)) /\ (all x z (D => F))------ (TODO)- axiomatize :: forall a . Function a -> (Signature a, Formula a) axiomatize fn@Function{..} =   ( Signature func_name (funcType fn)-  , Formula Assert func_tvs (ax func_body)+  , Formula Assert (Definition func_name) func_tvs+     (mkQuant Forall func_args (lhs === func_body))   )  where   lhs = applyFunction fn (map TyVar func_tvs) (map Lcl func_args) -  ax :: Expr a -> Expr a-  ax e0 = case e0 of-    Match s (Case Default def_rhs:alts) -> invert_alts s alts def_rhs /\ ax_alts s alts+-- | Makes function definitions into case by converting case to+--   left hand side pattern matching.+axiomatizeFuncdefs2 :: Name a => Theory a -> Theory a+axiomatizeFuncdefs2 thy@Theory{..} =+  thy{+    thy_funcs   = [],+    thy_sigs    = thy_sigs ++ abs,+    thy_asserts = concat fms ++ thy_asserts+  }+ where+  scp = scope thy+  (abs,fms) = unzip (map (axiomatize2 scp) thy_funcs)++axiomatize2 :: forall a . Ord a => Scope a -> Function a -> (Signature a, [Formula a])+axiomatize2 scp fn@Function{..} =+  ( Signature func_name (funcType fn)+  , map (Formula Assert (Definition func_name) func_tvs)+     (ax func_args [] (map Lcl func_args) func_body)+  )+  where++  -- ax vars pre args body+  --   ~=+  -- forall vars . pre => f(args) = body+  ax :: [Local a] -> [Expr a] -> [Expr a] -> Expr a -> [Expr a]+  ax vars pre args e0 = case e0 of+    Match s (Case Default def_rhs:alts) -> ax vars (pre ++ map (invert_pat s . case_pat) alts) args def_rhs ++ ax_alts s alts     Match s alts -> ax_alts s alts-    Let{}        -> __ -- could use ==> while Let is neither recursive nor polymorphic+    Let x b e    -> ax (vars ++ [x]) (pre ++ [Lcl x === b]) args e     Lam{}        -> __     Quant{}      -> __-    _            -> lhs === e0 -- e0 should now only be (:@:) and Lcl-   where-    invert_alts :: Expr a -> [Case a] -> Expr a -> Expr a-    invert_alts _ []                def_rhs = def_rhs-    invert_alts s (Case pat _:alts) def_rhs = s === invert_pat s pat \/-                                              invert_alts s alts def_rhs-     where-      invert_pat :: Expr a -> Pattern a -> Expr a-      invert_pat _ Default      = __-      invert_pat _ (LitPat lit) = literal lit-      invert_pat s (ConPat k _) = Gbl k :@: [ Gbl p :@: [s] | p <- conProjs k ]+    _            ->+      -- e0 should now only be (:@:) and Lcl+      [mkQuant Forall vars (pre ===> applyFunction fn (map TyVar func_tvs) args === e0)]+    where+    invert_pat :: Expr a -> Pattern a -> Expr a+    invert_pat _ Default      = __+    invert_pat s (LitPat lit) = s =/= literal lit+    invert_pat s (ConPat k _) = s =/= (Gbl k :@: [ Gbl (projector dt c i (gbl_args k)) :@: [s] | i <- [0..length cargs-1] ])+      where+      Just (dt,c@(Constructor _ _ cargs)) = lookupConstructor (gbl_name k) scp -    ax_alts :: Expr a -> [Case a] -> Expr a-    ax_alts s alts = ands [ ax_pat s pat rhs | Case pat rhs <- alts ]-     where-      ax_pat :: Expr a -> Pattern a -> Expr a -> Expr a+    ax_alts :: Expr a -> [Case a] -> [Expr a]+    ax_alts s alts = concat [ ax_pat s pat rhs | Case pat rhs <- alts ]+      where+      ax_pat :: Expr a -> Pattern a -> Expr a -> [Expr a]       ax_pat _ Default       _   = __-      ax_pat s (LitPat lit)  rhs = s === literal lit ==> ax rhs-      ax_pat s (ConPat k bs) rhs = mkQuant Forall bs-                                     (s === Gbl k :@: map Lcl bs ==> ax rhs)+      ax_pat s (LitPat lit)  rhs = rec [] rhs s (literal lit)+      ax_pat s (ConPat k bs) rhs = rec bs rhs s (Gbl k :@: map Lcl bs)++      rec :: [Local a] -> Expr a -> Expr a -> Expr a -> [Expr a]+      rec new e (Lcl x) pat_expr =+        let su = unsafeSubst pat_expr x+        in  ax (delete x vars ++ new) (map su pre) (map su args) (su e)++      rec new e scrut   pat_expr = ax (vars ++ new) (pre ++ [scrut === pat_expr]) args e 
src/Tip/Pass/Booleans.hs view
@@ -1,8 +1,11 @@ {-# LANGUAGE FlexibleContexts, ViewPatterns, RecordWildCards #-}+{-# LANGUAGE ScopedTypeVariables #-} module Tip.Pass.Booleans where  import Tip.Core +import Tip.Fresh+ import Data.Generics.Geniplate  -- | Transforms boolean operators to if, but not in expression contexts.@@ -20,29 +23,42 @@ formulaBoolOpToIf e0 =   case e0 of     Builtin op :@: args@(a:_)-      | op `elem` [And,Or,Not,Implies] ||-        op `elem` [Equal,Distinct] && hasBoolType a ->-        Builtin op :@: map formulaBoolOpToIf args+      | op `elem` [And,Or,Not,Implies]+        -- || op `elem` [Equal,Distinct] && hasBoolType a ->+        -> Builtin op :@: map formulaBoolOpToIf args     Quant qi q as e -> Quant qi q as (formulaBoolOpToIf e)     _ -> boolOpToIf e0  hasBoolType :: Ord a => Expr a -> Bool hasBoolType e = exprType e == boolType --- | Transforms @and@, @or@, @=>@, @not@ and @=@ and @distict@ on @Bool@+-- | Transforms @and@, @or@, @=>@, @not@ and @=@ and @distinct@ on @Bool@ --   into @ite@ (i.e. @match@) boolOpToIf :: (Ord a,TransformBi (Expr a) (f a)) => f a -> f a boolOpToIf = transformExprIn $   \ e0 -> case e0 of-    Builtin And :@: [a,b]     -> makeIf a b falseExpr-    Builtin Or  :@: [a,b]     -> makeIf a trueExpr b-    Builtin Not :@: [a]       -> makeIf a falseExpr trueExpr-    Builtin Implies :@: [a,b] -> makeIf a b trueExpr-    Builtin Equal    :@: [a,b] | hasBoolType a -> makeIf a b (neg_if b)-    Builtin Distinct :@: [a,b] | hasBoolType a -> makeIf a (neg_if b) b+    Builtin And :@: as  -> ands as+    Builtin Or  :@: as  -> ors  as+    Builtin Not :@: [a] -> neg_if a+    Builtin Implies :@: [a, b] -> makeIf a b trueExpr+    Builtin Equal :@: as | all hasBoolType as -> equals as+    Builtin Distinct :@: as | all hasBoolType as -> distincts as     _ -> e0   where-    neg_if a = makeIf a falseExpr trueExpr+    ands []         = trueExpr+    ands [a]        = a+    ands (a:as)     = makeIf a (ands as) falseExpr+    ors  []         = falseExpr+    ors  [a]        = a+    ors  (a:as)     = makeIf a trueExpr (ors as)+    neg_if a        = makeIf a falseExpr trueExpr+    equals []       = trueExpr+    equals [_]      = trueExpr+    equals (a:as)   = makeIf a (ands as) (neg_if (ors as))+    distincts []    = trueExpr+    distincts [_]   = trueExpr+    distincts [a,b] = makeIf a (neg_if b) b+    distincts _     = falseExpr  -- | Transforms @ite@ (@match@) on boolean literals in the branches --   into the corresponding builtin boolean function.@@ -55,4 +71,68 @@       | Just True  <- boolView f -> b ==> t -- neg b \/ t       | Just False <- boolView f -> b /\ t     _ -> e0++-- | Names to replace the builtin boolean type with+data BoolNames a =+  BoolNames+    { boolName    :: a+    , trueName    :: a+    , falseName   :: a+    , isTrueName  :: a+    , isFalseName :: a+    }++freshBoolNames :: Name a => Fresh (BoolNames a)+freshBoolNames =+  do boolName    <- freshNamed "Bool"+     trueName    <- freshNamed "True"+     falseName   <- freshNamed "False"+     isTrueName  <- freshNamed "is-True"+     isFalseName <- freshNamed "is-False"+     return BoolNames{..}++boolGbl :: BoolNames a -> Bool -> Global a+boolGbl BoolNames{..} b = Global+  (if b then trueName else falseName)+  (PolyType [] [] (TyCon boolName []))+  []++boolExpr :: BoolNames a -> Bool -> Expr a+boolExpr names b = Gbl (boolGbl names b) :@: []++removeBuiltinBoolFrom :: forall f a . (TransformBi (Type a) (f a),TransformBi (Pattern a) (f a),TransformBi (Head a) (f a)) => BoolNames a -> f a -> f a+removeBuiltinBoolFrom names = transformBi h . transformBi f . transformBi g+  where+    f :: Head a -> Head a+    f (Builtin (Lit (Bool b))) = Gbl (boolGbl names b)+    f hd                       = hd++    g :: Pattern a -> Pattern a+    g (LitPat (Bool b))    = ConPat (boolGbl names b) []+    g pat                  = pat++    h :: Type a -> Type a+    h (BuiltinType Boolean) = TyCon (boolName names) []+    h ty                    = ty++removeBuiltinBoolWith :: Ord a => BoolNames a -> Theory a -> Theory a+removeBuiltinBoolWith names@BoolNames{..} Theory{..}+  = fixup_asserts+  $ removeBuiltinBoolFrom names Theory{thy_datatypes=bool_decl:thy_datatypes,..}+  where+    fixup_asserts Theory{..} = Theory{thy_asserts=map fixup_assert thy_asserts,..}+    fixup_assert (Formula r i tvs b) = Formula r i tvs (fixup_expr b)+    fixup_expr (Quant qi q vs e) = Quant qi q vs (fixup_expr e)+    fixup_expr e+      | TyCon tc [] <- exprType e+      , tc == boolName+      = boolExpr names True === e+    fixup_expr e = e++    bool_decl = Datatype boolName [] [Constructor falseName isFalseName []+                                     ,Constructor trueName isTrueName []]++removeBuiltinBool :: Name a => Theory a -> Fresh (Theory a)+removeBuiltinBool thy = do names <- freshBoolNames+                           return (removeBuiltinBoolWith names thy) 
src/Tip/Pass/CommuteMatch.hs view
@@ -1,45 +1,61 @@ {-# LANGUAGE CPP #-} {-# LANGUAGE PatternGuards #-} {-# LANGUAGE FlexibleContexts #-}+{-# LANGUAGE ScopedTypeVariables #-} module Tip.Pass.CommuteMatch where  #include "errors.h" import Tip.Core import Tip.Fresh+import Tip.Simplify+import Tip.Scope  import Data.Generics.Geniplate import Control.Applicative+import Data.Maybe  -- | Makes an effort to move match statements upwards: moves match above -- function applications, and moves matches inside scrutinees outside. -- -- Does not move past quantifiers, lets, and lambdas.-commuteMatch :: (Name a, TransformBiM Fresh (Expr a) (f a)) => f a -> Fresh (f a)-commuteMatch = transformExprInM $ \ e0 ->-  case e0 of-    Match (Match e inner_alts) outer_alts ->-      commuteMatch =<< do-        Match e <$> sequence-          [ Case lhs <$> freshen (Match rhs outer_alts)-          | Case lhs rhs <- inner_alts-          ]+commuteMatchTheory :: Name a => Theory a -> Fresh (Theory a)+commuteMatchTheory thy = commuteMatch (Just thy) thy -    hd :@: args-      | and [ not (logicalBuiltin b) | Builtin b <- [hd] ]-      , let isMatch Match{} = True-            isMatch _       = False-      , (left, Match e alts:right) <- break isMatch args-      -> commuteMatch =<< do-           Match e <$> sequence-             [ Case lhs <$> freshen (hd :@: (left ++ [rhs] ++ right))-             | Case lhs rhs <- alts-             ]+-- | Makes an effort to move match statements upwards: moves match above+-- function applications, and moves matches inside scrutinees outside.+--+-- Does not move past quantifiers, lets, and lambdas.+commuteMatch :: forall a f. (Name a, TransformBiM Fresh (Expr a) (f a)) => Maybe (Theory a) -> f a -> Fresh (f a)+commuteMatch mthy = aux+  where+    aux :: forall f. (TransformBiM Fresh (Expr a) (f a)) => f a -> Fresh (f a)+    aux = transformExprInM $ \e0 ->+      case e0 of+        Match (Match e inner_alts) outer_alts ->+          aux =<< do+            Match e <$> sequence+              [ Case lhs <$> freshen (match rhs outer_alts)+              | Case lhs rhs <- inner_alts+              ] -    Lam bs e  -> Lam bs <$> commuteMatch e+        hd :@: args+          | and [ not (logicalBuiltin b) | Builtin b <- [hd] ]+          , let isMatch Match{} = True+                isMatch _       = False+          , (left, Match e alts:right) <- break isMatch args+          -> aux =<< do+               Match e <$> sequence+                 [ Case lhs <$> freshen (hd :@: (left ++ [rhs] ++ right))+                 | Case lhs rhs <- alts+                 ] -    Quant qi q bs e -> Quant qi q bs <$> commuteMatch e+        Lam bs e  -> Lam bs <$> aux e -    Let x b e -> Let x b <$> commuteMatch e+        Quant qi q bs e -> Quant qi q bs <$> aux e -    _ -> return e0+        Let x b e -> Let x b <$> aux e +        _ -> return e0++    mscp = fmap scope mthy+    match e cases = fromMaybe (Match e cases) (tryMatch mscp e cases)
+ src/Tip/Pass/Concretise.hs view
@@ -0,0 +1,105 @@+{-# LANGUAGE ScopedTypeVariables #-}+module Tip.Pass.Concretise (intToNat, sortsToNat) where++import Tip.Core+import Tip.Parser+import Tip.Fresh+import Tip.Pretty+import Control.Monad.Writer+import Control.Applicative++import Data.Monoid++import qualified Data.Foldable as F++import qualified Data.Map as M+import Data.Map (Map)++import Data.Generics.Geniplate++import Tip.Utils++nat_theory :: Theory Id+Right nat_theory =+  parse+    $  "(declare-datatypes () ((Nat (Z) (S (p Nat))))) (define-fun-rec lt ((x Nat) (y Nat)) Bool (match y (case Z false) (case (S z) (match x (case Z true) (case (S n) (lt n z)))))) (define-fun-rec le ((x Nat) (y Nat)) Bool (match x (case Z true) (case (S z) (match y (case Z false) (case (S x2) (le z x2)))))) (define-fun-rec gt ((x Nat) (y Nat)) Bool (match x (case Z false) (case (S z) (match y (case Z true) (case (S x2) (gt z x2)))))) (define-fun-rec ge ((x Nat) (y Nat)) Bool (match y (case Z true) (case (S z) (match x (case Z false) (case (S x2) (ge x2 z)))))) (define-fun-rec equal ((x Nat) (y Nat)) Bool (match x (case Z (match y (case Z true) (case (S z) false))) (case (S x2) (match y (case Z false) (case (S y2) (equal x2 y2)))))) (define-fun unequal ((x Nat) (y Nat)) Bool (not (equal x y)))"+    ++ "(check-sat)"++renameWrt :: (Ord a,PrettyVar a,Name b) => Theory a -> f b -> Fresh (Theory b)+renameWrt thy _wrt =+  do rename_map <-+       M.fromList <$>+         sequence+           [ do n' <- freshNamed (varStr n)+                return (n,n')+           | n <- usort (F.toList thy)+           ]+     return (fmap (rename_map M.!) thy)++-- | Replaces abstract sorts with natural numbers+sortsToNat :: forall a . Name a => Theory a -> Fresh (Theory a)+sortsToNat thy+  | null (thy_sorts thy) = return thy+  | otherwise =+      do nat_thy <- nat_theory `renameWrt` thy+         let [nat] = thy_datatypes nat_thy+         let thy' =+               thy { thy_sorts = []+                   , thy_datatypes = nat:thy_datatypes thy+                   }+         let sorts = map sort_name (thy_sorts thy)+         let replace (TyCon s _) | s `elem` sorts = TyCon (data_name nat) []+             replace t0 = t0+         return (transformBi replace thy')++-- | Replaces the builtin Int to natural numbers,+--   if the only operations performed on are related to int ordering+intToNat :: forall a . Name a => Theory a -> Fresh (Theory a)+intToNat thy+  | any bad bs = return thy+  | otherwise =+     do nat_thy <- nat_theory `renameWrt` thy++        let [nat] = thy_datatypes nat_thy++        let [lt,le,gt,ge,eq,ne] = thy_funcs nat_thy++        let replaceE :: Expr a -> Writer [Function a] (Expr a)+            replaceE e0@(Builtin b :@: (es@(e1:_))) =+              case b of+                IntLt -> ret lt+                IntLe -> ret le+                IntGt -> ret gt+                IntGe -> ret ge+                Equal    | exprType e1 == intType -> ret eq+                Distinct | exprType e1 == intType -> ret ne+                _ -> return e0+              where+              ret :: Function a -> Writer [Function a] (Expr a)+              ret op = tell [op] >> return (applyFunction op [] es)+            replaceE e0 = return e0++        let replaceT :: Type a -> Writer Any (Type a)+            replaceT (BuiltinType Integer) = tell (Any True) >> return (TyCon (data_name nat) [])+            replaceT t0 = return t0++        let (thy',     fns_used) = runWriter (transformBiM replaceE thy)+            (thy'',Any ty_used)  = runWriter (transformBiM replaceT thy')++        let used_nat_thy+              | null fns_used && not ty_used = emptyTheory+              | otherwise                    = nat_thy { thy_funcs = usort fns_used }++        return (thy'' `joinTheories` used_nat_thy)+  where+  bs :: [Builtin]+  bs = usort (universeBi thy)++  bad (Lit Int{}) = True+  bad IntAdd = True+  bad IntSub = True+  bad IntMul = True+  bad IntDiv = True+  bad IntMod = True+  bad _      = False+
+ src/Tip/Pass/Conjecture.hs view
@@ -0,0 +1,98 @@+{-# LANGUAGE PatternGuards #-}+{-# LANGUAGE RecordWildCards #-}+{-# LANGUAGE FlexibleContexts #-}+{-# LANGUAGE CPP #-}+module Tip.Pass.Conjecture where++#include "errors.h"+import Tip.Core+import Tip.Fresh+import Control.Monad+import Control.Monad.Writer+import Data.Generics.Geniplate++-- | Splits a theory with many goals into many theories each with one goal+splitConjecture :: Theory a -> [Theory a]+splitConjecture thy =+  [ thy { thy_asserts = goal : assums } | goal <- goals ]+  where+  (goals,assums) = theoryGoals thy++-- | Splits, type skolems and skolemises conjectures!+skolemiseConjecture :: Name a => Theory a -> Fresh [Theory a]+skolemiseConjecture = mapM (skolemiseConjecture' <=< typeSkolemConjecture) . splitConjecture++-- | Skolemises a conjecture, assuming that there is just one goal and that it has no type variables.+skolemiseConjecture' :: Name a => Theory a -> Fresh (Theory a)+skolemiseConjecture' thy =+  case goals of+    [Formula Prove i tvs body] ->+      case tvs of+        [] -> do let (body',(sks,pre)) = runWriter (skolemise body)++                 sks' <- sequence+                   [ do v' <- refresh v+                        return (Signature v' (PolyType [] [] t))+                   | Local v t <- sks+                   ]++                 let su = substMany (sks `zip` map (\ sk -> applySignature sk [] []) sks')++                 body'' <- su body'++                 pre'' <- mapM su pre++                 return thy {+                       thy_sigs    = sks' ++ thy_sigs thy,+                       thy_asserts = Formula Prove i [] body'' : map (formula Assert []) pre'' ++ assums+                     }+        _ -> ERROR("Cannot skolemise conjecture with type variables")+    _ -> ERROR("Need one conjecture to skolemise conjecture")+  where+  (goals,assums) = theoryGoals thy++  formula r tvs (Quant (QuantIH i) q vs e) = Formula r (IH i) tvs (mkQuant q vs e)+  formula r tvs e = Formula r Unknown tvs e++skolemise :: Expr a -> Writer ([Local a],[Expr a]) (Expr a)+skolemise = go True+  where+  go i e0 =+    case e0 of+      Quant qi Forall lcls e  -> tell (lcls,[]) >> go True e+      Builtin Not :@: [e] | i -> go False (neg e)+      Builtin Implies :@: es  -> tell ([],init es) >> go True (last es)+      _                       -> return e0+++-- | Negates the conjecture: changes assert-not into assert, and+--   introduce skolem types in case the goal is polymorphic.+--   (runs 'typeSkolemConjecture')+negateConjecture :: Name a => Theory a -> Fresh (Theory a)+negateConjecture = fmap (declsPass (map neg1)) . typeSkolemConjecture+  where+  neg1 (AssertDecl (Formula Prove i [] form))+      = AssertDecl (Formula Assert i [] (gentleNeg form))+  neg1 d0 = d0++-- | Introduce skolem types in case the goal is polymorphic.+typeSkolemConjecture :: Name a => Theory a -> Fresh (Theory a)+typeSkolemConjecture thy =+  foldM ty_skolem1+    thy { thy_asserts = filter (not . isProve) (thy_asserts thy) }+    (filter isProve (thy_asserts thy))+  where+  isProve (Formula Prove _ _ form) = True+  isProve _ = False++  ty_skolem1 thy (Formula Prove i tvs form) = do+    tvs' <- mapM (refreshNamed "sk_") tvs+    return thy {+      thy_asserts = Formula Prove i [] (makeTyCons (zip tvs tvs') form):thy_asserts thy,+      thy_sorts = [ Sort tv [] | tv <- tvs' ] ++ thy_sorts thy }++  makeTyCons tvs =+    transformTypeInExpr $ \ty ->+      case ty of+        TyVar tv | Just tv' <- lookup tv tvs -> TyCon tv' []+        _ -> ty
+ src/Tip/Pass/DropSuffix.hs view
@@ -0,0 +1,26 @@+{-# LANGUAGE ScopedTypeVariables #-}+{-# LANGUAGE FlexibleContexts #-}+{-# LANGUAGE PatternGuards #-}+module Tip.Pass.DropSuffix where++import Data.Traversable+import Tip.Pretty+import Tip.Fresh+import Data.Map (Map)+import qualified Data.Map as M+import Control.Monad.State++dropSuffix :: forall f a . (Traversable f,Name a) => String -> f a -> Fresh (f a)+dropSuffix suf thy = evalStateT (traverse f thy) M.empty+  where+    f :: a -> StateT (Map a a) Fresh a+    f x+      | (pre,_:_) <- break (`elem` suf) (varStr x)+      = do m <- get+           case M.lookup x m of+             Just y  -> return y+             Nothing -> do y <- lift (freshNamed pre)+                           modify (M.insert x y)+                           return y+    f x = return x+
src/Tip/Pass/EqualFunctions.hs view
@@ -77,22 +77,22 @@  -- | If we have ----- > g x y = f x y+-- > g [a] x y = f [T1 a,T2 a] x y ----- then we remove @g@ and replace it with @f@ everywhere-removeAliases :: Eq a => Theory a -> Theory a+-- then we remove @g [t]@ and replace it with @f [T1 t,T2 t]@ everywhere+removeAliases :: Ord a => Theory a -> Theory a removeAliases thy@(Theory{thy_funcs=fns0})     | null renamings = thy     | otherwise = removeAliases $ renameGlobals renamings thy{ thy_funcs = survivors }   where     renamings = take 1       [ (g,k)-      | Function g ty_vars vars _res_ty (hd :@: args) <- fns0+      | Function g g_tvs vars _ (hd :@: args) <- fns0       , map Lcl vars == args-      , let (ok,k) = case hd of-              Gbl (Global f pty ty_args) -> (map TyVar ty_vars == ty_args, \ ts -> Gbl (Global f pty ts))-              Builtin{}                  -> (True, \ _ -> hd)-      , ok+      , let k = case hd of+                  Builtin{} -> \ _ -> hd+                  Gbl (Global f pty f_args) ->+                    \ g_app -> Gbl (Global f pty (map (applyType g_tvs g_app) f_args))       ]      remove = map fst renamings
+ src/Tip/Pass/Induction.hs view
@@ -0,0 +1,81 @@+{-# LANGUAGE RecordWildCards #-}+{-# LANGUAGE CPP #-}+module Tip.Pass.Induction where++#include "errors.h"+import Tip.Core+import Tip.Fresh+import Induction.Structural++import Control.Applicative++import Data.List (find,partition)++theoryTyEnv :: Ord a => Theory a -> TyEnv (Head a) (Type a)+theoryTyEnv Theory{..} (BuiltinType Boolean) =+  do return [(Builtin (Lit (Bool b)),[]) | b <- [False,True]]++theoryTyEnv Theory{..} t =+  do TyCon tc ts <- return t+     dt@Datatype{..} <- find ((tc ==) . data_name) thy_datatypes+     return+         [ (Gbl (constructor dt c ts)+           ,[ case applyType data_tvs ts t of+                t@(TyCon tc' _) | tc == tc' -> Rec t+                t@(args :=>: _)             -> Exp t args+                t                           -> NonRec t+            | (_proj,t) <- con_args c+            ]+           )+         | c <- data_cons+         ]++trTerm :: Term (Head a) (Local a) -> Expr a+trTerm (Var lcl)   = Lcl lcl+trTerm (Con h tms) = h :@: map trTerm tms+trTerm (Fun f tms) = Builtin At :@: (Lcl f:map trTerm tms)++-- | Applies induction at the given coordinates to the first goal+induction :: (Name a,Ord a) => [Int] -> Theory a -> Fresh [Theory a]+induction coords thy@Theory{..} =+  case goal of+    Formula Prove i tvs (Quant qi Forall lcls body)+      | cs@(_:_) <- [ x | x <- coords, x >= length lcls || x < 0 ] -> error $ "Induction coordinates " ++ show cs ++ " out of bounds!"+      | otherwise ->+      do (obligs,_) <-+           unTagMapM+             (\ (v :~ _) -> refresh v)+             (subtermInduction+               (theoryTyEnv thy)+               [(lcl_name,lcl_type) | Local{..} <- lcls]+               coords)++         split_goals <-+           sequence+             [ do let attach_type env v =+                        case lookup v (env ++ sks) of+                          Just t  -> Local v t+                          Nothing -> ERROR("Lost type of variable!")+                  let replace env ts = substMany (zip lcls (map (trTerm . fmap (attach_type env)) ts)) body+                  hyps <- sequence+                            [ Quant (QuantIH i) Forall [ Local v t | (v,t) <- prenex ]+                                <$> replace prenex inst+                            | (i, (prenex, inst)) <- [0..] `zip` hyps+                            ]+                  concl <- replace [] concl+                  let body' = hyps ===> concl+                  return+                    (Formula Prove i tvs+                      (mkQuant Forall [ Local v t | (v,t) <- sks] body'))+             | Obligation sks hyps concl <- obligs+             ]++         return+           [ thy { thy_asserts = goal' : goals ++ assums }+           | goal' <- split_goals+           ]++    _ -> return [thy]+  where+  (goal:goals,assums) = partitionGoals thy_asserts+
src/Tip/Pass/Lift.hs view
@@ -85,7 +85,7 @@   case func_body of     Lam lam_args e ->       let abs = Signature func_name (PolyType func_tvs (map lcl_type func_args) func_res)-          fm  = Formula Assert func_tvs+          fm  = Formula Assert (Defunction func_name) func_tvs                   (mkQuant                     Forall                     (func_args ++ lam_args)@@ -133,7 +133,8 @@     arities = usort [ length args | args :=>: _ <- universeBi thy :: [Type a] ]     makeArrow n = do       ty <- freshNamed ("fun" ++ show n)-      return (n, Sort ty (n+1))+      tvs <- replicateM (n+1) fresh+      return (n, Sort ty tvs)     makeAt arrows n = do       name <- freshNamed ("apply" ++ show n)       tvs <- mapM (freshNamed . mkTyVarName) [0..(n-1)]
+ src/Tip/Pass/Monomorphise.hs view
@@ -0,0 +1,234 @@+{-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE RecordWildCards #-}+{-# LANGUAGE ViewPatterns #-}+{-# LANGUAGE ScopedTypeVariables #-}+{-# LANGUAGE GeneralizedNewtypeDeriving #-}+{-# LANGUAGE OverloadedStrings #-}+module Tip.Pass.Monomorphise where++import Tip.Utils.Specialiser+import Tip.Utils+import Tip.Fresh+import Tip.Core hiding (Expr)+import qualified Tip.Core as Tip++import qualified Data.Foldable as F++import Tip.Pretty+import Text.PrettyPrint+import Tip.Pretty.SMT++import Control.Monad+import Control.Monad.Writer++import Data.Generics.Geniplate++import Data.List (union)++import Debug.Trace++trListTYPE :: (Type a -> Type a) -> [((a,[Type a]),a)] -> [((a,[Type a]),a)]+trListTYPE = undefined+return []+trList :: (Type a -> Type a) -> [((a,[Type a]),a)] -> [((a,[Type a]),a)]+trList = $(genTransformBi 'trListTYPE)++monomorphise :: forall a . Name a => Bool -> Theory a -> Fresh (Theory a)+monomorphise verbose = fmap (fmap unPPVar) . monomorphise' verbose . fmap PPVar++monomorphicThy :: Theory a -> Bool+monomorphicThy = all monomorphicDecl . theoryDecls++monomorphicDecl :: Decl a -> Bool+monomorphicDecl d =+  case d of+    DataDecl Datatype{..}  -> null data_tvs+    SortDecl Sort{..}      -> null sort_tvs+    SigDecl Signature{..}  -> null (polytype_tvs sig_type)+    FuncDecl Function{..}  -> null func_tvs+    AssertDecl Formula{..} -> null fm_tvs++monomorphise' :: forall a . (Name a,Pretty a) => Bool -> Theory a -> Fresh (Theory a)+monomorphise' _verbose thy | monomorphicThy thy = return thy+monomorphise'  verbose thy = do+    let ds = theoryDecls thy+        insts :: [(Decl a,Subst a Void (Con a))]+        loops :: [Decl a]+        rules = [ (d,declToRule True d) | d <- ds ]+        (insts,loops) = specialise rules+    when verbose $+      do traceM (show ("rules:" $\ pp rules))+         traceM (show ("loops:" $\ pp loops))+         traceM (show ("insts:" $\ pp insts))+    if null loops+      then do+        (insts',renames) <- runWriterT (mapM (uncurry renameDecl) insts)+        return $ renameWith (renameRenames renames) (declsToTheory insts')+      else return thy++exprGlobalRecords :: forall a . Ord a => Tip.Expr a -> [Expr (Con a) a]+exprGlobalRecords e = usort $+    [ Con (Pred gbl_name) (map trType gbl_args)+    | Global{..} <- universeBi e+    ]++-- why are you going to use exprTypeRecords?+exprTypeRecords :: forall a . Ord a => Tip.Expr a -> [Expr (Con a) a]+exprTypeRecords e = usort $+    [ t+    | Lcl (Local{..}) :: Tip.Expr a <- universeBi e+    , t <- typeRecords lcl_type+    ]+    +++    -- need this for nils lying around+    -- (another fix is to make list(a) or cons(a) imply a+    [ t+    | g@Global{..} :: Tip.Global a <- universeBi e+    -- , let (as,res) = gblType g+    -- , inst_ty <- res:as+    , inst_ty <- gbl_args -- NB: looks at the instantiated global type+    , t <- typeRecords inst_ty+    ]++++-- We're traversing right now to get all the TyArr that's needed+-- Otherwise it's enough to only use the top + add the rules+-- =>(a,b) -> a, b+typeRecords :: forall a . Ord a => Tip.Type a -> [Expr (Con a) a]+typeRecords t = usort $+    [ Con (TCon ty) (map trType args)+    | TyCon ty args :: Type a <- universeBi t+    ] +++    [ Con TyArr (map trType (args ++ [res]))+    | args :=>: res :: Type a <- universeBi t+    ]++exprRecords :: forall a . Ord a => Tip.Expr a -> [Expr (Con a) a]+exprRecords e = usort $ exprGlobalRecords e ++ exprTypeRecords e++renameRenames :: Ord a => [((a,[Type a]),a)] -> [((a,[Type a]),a)]+renameRenames su =+    let su' = trList (tyRename su) su+        su2 = usort (su ++ su')+    in  if su == su2 then su else renameRenames su2++tyRename :: Ord a => [((a,[Type a]),a)] -> Type a -> Type a+tyRename su (TyCon tc ts) | Just tc' <- lookup (tc,ts) su = TyCon tc' []+tyRename _  t0 = t0++renameWith :: Ord a => [((a,[Type a]),a)] -> Theory a -> Theory a+renameWith su = transformBi (tyRename su) . transformBi gbl+  where+    gbl (Global f (PolyType tvs args res) ts)+        | Just f' <- lookup (f,ts) su+        = let at = applyType tvs ts+          in  Global f' (PolyType [] (map at args) (at res)) []+    gbl g0 = g0++renameDecl :: forall a . Name a => Decl a -> Subst a Void (Con a) -> WriterT [((a,[Type a]),a)] Fresh (Decl a)+renameDecl d su = case d of+    SortDecl (Sort s tvs)  -> do+        s' <- rename tvs s+        return (SortDecl (Sort s' []))+    SigDecl (Signature f pt@(PolyType tvs _ _)) -> do+        f' <- rename tvs f+        let (args',res) = applyPolyType pt (ty_args tvs)+        return (SigDecl (Signature f' (PolyType [] args' res)))+    AssertDecl (Formula r i tvs b) ->+        return (ty_inst tvs (AssertDecl (Formula r i [] b)))++    DataDecl (Datatype tc tvs cons) -> do+        tc' <- rename tvs tc+        cons' <- sequence+            [ do k' <- rename tvs k+                 d' <- rename tvs d+                 args' <- sequence [ do p' <- rename tvs p; return (p',t) | (p,t) <- args ]+                 return (Constructor k' d' args')+            | Constructor k d args <- cons+            ]+        return (ty_inst tvs (DataDecl (Datatype tc' [] cons')))++    FuncDecl fn@(Function f tvs args res body) -> do+        f' <- rename tvs f+        let fn' = Function f' [] args res body+        return (ty_inst tvs (FuncDecl fn'))+  where+  ty_args tvs = [ toType (fmap absurd e) | tv <- tvs, let Just e = lookup tv su ]++  ty_inst :: [a] -> Decl a -> Decl a+  ty_inst tvs d = applyTypeInDecl tvs (ty_args tvs) d++  rename :: [a] -> a -> WriterT [((a,[Type a]),a)] Fresh a+  rename [] f = return f+  rename tvs f = do+    f' <- lift (refresh f)+    tell [((f,ty_args tvs),f')]+    return f'++data Con a = Pred a | TCon a | TyArr | TyBun BuiltinType | Dummy+  deriving (Eq,Ord,Show)++instance Pretty a => Pretty (Con a) where+  pp (Pred x)   = "Pred" <+> pp x+  pp (TCon x)   = "TCon" <+> pp x+  pp TyArr      = "=>"+  pp (TyBun bu) = ppBuiltinType bu+  pp Dummy      = "dummy"++trType :: Type a -> Expr (Con a) a+trType (TyCon tc ts)     = Con (TCon tc) (map trType ts)+trType (ts :=>: tr)      = Con TyArr (map trType ts ++ [trType tr])+trType (TyVar x)         = Var x+trType (BuiltinType bun) = Con (TyBun bun) []++toType :: Expr (Con a) a -> Type a+toType (Con (TCon tc) ts)   = TyCon tc (map toType ts)+toType (Con TyArr ts)       = map toType (init ts) :=>: toType (last ts)+toType (Var x)              = TyVar x+toType (Con (TyBun bun) []) = BuiltinType bun++close :: Expr (Con a) a -> Closed (Con a)+close = fmap (error "contains variables")++sigRule :: Ord a => a -> [a] -> [Type a] -> Type a -> [Rule (Con a) a]+sigRule f tvs args res = usort $+    [ Rule [Con (Pred f) (map Var tvs)] t+    | t0 <- res : args, t <- typeRecords t0+    ]++declToRule :: Ord a => Bool -> Decl a -> [Rule (Con a) a]+declToRule enthusiastic_function_inst d = usort $ case d of++    SortDecl (Sort d tvs) ->+        [Rule [Con (TCon d) (map Var tvs)] (Con Dummy [])]++    SigDecl (Signature f (PolyType tvs args res)) ->+        sigRule f tvs args res++    AssertDecl (Formula Prove _ tvs b) ->+        map (Rule []) (Con Dummy []:exprRecords b)++    AssertDecl (Formula Assert _ tvs b) ->+        -- careful instantiation+        [ Rule (exprGlobalRecords b) e+        | e <- Con Dummy []:exprTypeRecords b+        ]++    DataDecl (Datatype tc tvs cons) ->+        let tcon x = Con (TCon x) (map Var tvs)+            pred x = Con (Pred x) (map Var tvs)+        in  concat [ sigRule k tvs (map snd args) (TyCon tc (map TyVar tvs))+                   | Constructor k _ args <- cons+                   ]+            ++ [ Rule [tcon tc] (pred f)+               | Constructor k d args <- cons+               , f <- [k,d] ++ map fst args+               ]++    FuncDecl (Function f tvs args res body) ->+        [ Rule (exprGlobalRecords body) (Con (Pred f) (map Var tvs))+        | enthusiastic_function_inst ] +++        sigRule f tvs (map lcl_type args) res +++        map (Rule [Con (Pred f) (map Var tvs)]) (exprGlobalRecords body)+
− src/Tip/Pass/NegateConjecture.hs
@@ -1,30 +0,0 @@-{-# LANGUAGE PatternGuards #-}-module Tip.Pass.NegateConjecture where--import Tip.Core-import Tip.Fresh-import Control.Monad-import Data.Generics.Geniplate---- | Negates the conjecture: changes assert-not into assert, and---   introduce skolem types in case the goal is polymorphic.-negateConjecture :: Name a => Theory a -> Fresh (Theory a)-negateConjecture thy =-  foldM negateConjecture1-    thy { thy_asserts = filter (not . isProve) (thy_asserts thy) }-    (filter isProve (thy_asserts thy))-  where-    isProve (Formula Prove _ form) = True-    isProve _ = False--    negateConjecture1 thy (Formula Prove tvs form) = do-      tvs' <- mapM (refreshNamed "sk_") tvs-      return thy {-        thy_asserts = Formula Assert [] (neg (makeTyCons (zip tvs tvs') form)):thy_asserts thy,-        thy_sorts = [ Sort tv 0 | tv <- tvs' ] ++ thy_sorts thy }--    makeTyCons tvs =-      transformTypeInExpr $ \ty ->-        case ty of-          TyVar tv | Just tv' <- lookup tv tvs -> TyCon tv' []-          _ -> ty
src/Tip/Pass/Pipeline.hs view
@@ -1,3 +1,4 @@+{-# LANGUAGE ScopedTypeVariables #-} module Tip.Pass.Pipeline where  import Tip.Lint@@ -14,16 +15,19 @@ import Options.Applicative  class Pass p where-  runPass   :: Name a => p -> Theory a -> Fresh (Theory a)+  runPass   :: Name a => p -> Theory a -> Fresh [Theory a]   passName  :: p -> String   parsePass :: Parser p  unitPass :: Pass p => p -> Mod FlagFields () -> Parser p unitPass p mod = flag' () (long (flagify (passName p)) <> mod) *> pure p -runPassLinted :: (Pass p, Name a) => p -> Theory a -> Fresh (Theory a)-runPassLinted p = runPass p >=> lintM (passName p)+lintMany :: (Name a,Monad m) => String -> [Theory a] -> m [Theory a]+lintMany s thys = mapM (lintM s) thys +runPassLinted :: (Pass p,Name a) => p -> Theory a -> Fresh [Theory a]+runPassLinted p = runPass p >=> lintMany (passName p)+ -- | A sum type that supports 'Enum' and 'Bounded' data Choice a b = First a | Second b   deriving (Eq,Ord,Show)@@ -38,13 +42,17 @@   runPass   = choice runPass runPass   parsePass = (First <$> parsePass) <|> (Second <$> parsePass) -runPasses :: (Pass p,Name a) => [p] -> Theory a -> Fresh (Theory a)-runPasses = go []+runPasses :: (Pass p,Name a) => [p] -> Theory a -> Fresh [Theory a]+runPasses ps = continuePasses ps . return++continuePasses :: forall p a . (Pass p,Name a) => [p] -> [Theory a] -> Fresh [Theory a]+continuePasses = go []  where-  go _    [] = return+  go :: [String] -> [p] -> [Theory a] -> Fresh [Theory a]+  go _    []     = return   go past (p:ps) =-        runPass p-    >=> lintM (passName p ++ "(and " ++ intercalate "," past ++ ")")+        (fmap concat . mapM (runPass p))+    >=> lintMany (passName p ++ (if null past then "" else "(after " ++ intercalate "," past ++ ")"))     >=> go (passName p:past) ps  parsePasses :: Pass p => Parser [p]
+ src/Tip/Pass/SelectConjecture.hs view
@@ -0,0 +1,50 @@+-- Select a particular conjecture from the problem.+{-# LANGUAGE RecordWildCards #-}+module Tip.Pass.SelectConjecture where++import Tip.Core+import Data.List++makeConjecture :: Int -> Theory a -> Theory a+makeConjecture n thy@Theory{..}+  | n < 0 || n >= length asserts = error "Assertion number out of range"+  | otherwise =+      thy {+        thy_asserts =+          proves +++          [let u = (asserts !! n) { fm_role = Prove }+           in u { fm_body = neg (fm_body u) }+          ] +++          take n asserts ++ drop (n+1) asserts }+  where+    (asserts, proves) = partition ((== Assert) . fm_role) thy_asserts++selectConjecture :: Int -> Theory a -> Theory a+selectConjecture n thy@Theory{..}+  | n < 0 || n >= length proves = error "Conjecture number out of range"+  | otherwise = thy { thy_asserts = asserts ++ [proves !! n] }+  where+    (asserts, proves) = partition ((== Assert) . fm_role) thy_asserts++provedConjecture :: Int -> Theory a -> Theory a+provedConjecture n thy@Theory{..}+  | n < 0 || n >= length proves = error "Conjecture number out of range"+  | otherwise =+      thy {+        thy_asserts =+          asserts +++          [(proves !! n) { fm_role = Assert }] +++          take n proves ++ drop (n+1) proves }+  where+    (asserts, proves) = partition ((== Assert) . fm_role) thy_asserts++deleteConjecture :: Int -> Theory a -> Theory a+deleteConjecture n thy@Theory{..}+  | n < 0 || n >= length proves = error "Conjecture number out of range"+  | otherwise =+      thy {+        thy_asserts =+          asserts +++          take n proves ++ drop (n+1) proves }+  where+    (asserts, proves) = partition ((== Assert) . fm_role) thy_asserts
src/Tip/Passes.hs view
@@ -8,12 +8,22 @@   , simplifyTheory, gently, aggressively, SimplifyOpts(..)   , removeNewtype   , uncurryTheory-  , negateConjecture +  -- * Simplifyng conjectures+  , module Tip.Pass.Conjecture+  , module Tip.Pass.Concretise++  -- * Changing status of conjectures+  , makeConjecture+  , selectConjecture+  , provedConjecture+  , deleteConjecture+   -- * Boolean builtins   , ifToBoolOp   , boolOpToIf   , theoryBoolOpToIf+  , removeBuiltinBool    -- * Match expressions   , addMatch@@ -33,6 +43,22 @@   , letLift   , axiomatizeLambdas +  -- * Function definitions+  , axiomatizeFuncdefs+  , axiomatizeFuncdefs2++  -- * Data types+  , axiomatizeDatadecls++  -- * Monomorphisation+  , monomorphise++  -- * Induction+  , induction++  -- * Miscellaneous+  , dropSuffix+   -- * Building pass pipelines   , StandardPass(..)   , module Tip.Pass.Pipeline@@ -46,12 +72,19 @@ import Tip.Pass.CSEMatch import Tip.Pass.Uncurry import Tip.Pass.RemoveNewtype-import Tip.Pass.NegateConjecture+import Tip.Pass.Conjecture+import Tip.Pass.Concretise import Tip.Pass.EqualFunctions import Tip.Pass.Lift+import Tip.Pass.Monomorphise import Tip.Pass.Booleans import Tip.Pass.EliminateDeadCode import Tip.Pass.FillInCases+import Tip.Pass.AxiomatizeFuncdefs+import Tip.Pass.AxiomatizeDatadecls+import Tip.Pass.SelectConjecture+import Tip.Pass.DropSuffix+import Tip.Pass.Induction  import Tip.Fresh @@ -66,8 +99,14 @@   | RemoveNewtype   | UncurryTheory   | NegateConjecture+  | TypeSkolemConjecture+  | IntToNat+  | SortsToNat+  | SplitConjecture+  | SkolemiseConjecture   | IfToBoolOp   | BoolOpToIf+  | RemoveBuiltinBool   | AddMatch   | CommuteMatch   | RemoveMatch@@ -76,32 +115,61 @@   | LambdaLift   | LetLift   | AxiomatizeLambdas+  | AxiomatizeFuncdefs+  | AxiomatizeFuncdefs2+  | AxiomatizeDatadecls+  | AxiomatizeDatadeclsUEQ+  | Monomorphise Bool   | CSEMatch   | CSEMatchWhy3   | EliminateDeadCode- deriving (Eq,Ord,Show,Read,Enum,Bounded)+  | MakeConjecture Int+  | SelectConjecture Int+  | ProvedConjecture Int+  | DeleteConjecture Int+  | DropSuffix String+  | Induction [Int]+ deriving (Eq,Ord,Show,Read)  instance Pass StandardPass where   passName = show   runPass p = case p of-    SimplifyGently       -> simplifyTheory gently-    SimplifyAggressively -> simplifyTheory aggressively-    RemoveNewtype        -> return . removeNewtype-    UncurryTheory        -> uncurryTheory-    NegateConjecture     -> negateConjecture-    IfToBoolOp           -> return . ifToBoolOp-    BoolOpToIf           -> return . theoryBoolOpToIf-    AddMatch             -> addMatch-    CommuteMatch         -> commuteMatch-    RemoveMatch          -> removeMatch-    CollapseEqual        -> return . collapseEqual-    RemoveAliases        -> return . removeAliases-    LambdaLift           -> lambdaLift-    LetLift              -> letLift-    AxiomatizeLambdas    -> axiomatizeLambdas-    CSEMatch             -> return . cseMatch cseMatchNormal-    CSEMatchWhy3         -> return . cseMatch cseMatchWhy3-    EliminateDeadCode    -> return . eliminateDeadCode+    SimplifyGently       -> single $ simplifyTheory gently+    SimplifyAggressively -> single $ simplifyTheory aggressively+    RemoveNewtype        -> single $ return . removeNewtype+    UncurryTheory        -> single $ uncurryTheory+    NegateConjecture     -> single $ negateConjecture+    TypeSkolemConjecture -> single $ typeSkolemConjecture+    IntToNat             -> single $ intToNat+    SortsToNat           -> single $ sortsToNat+    SplitConjecture      -> return . splitConjecture+    SkolemiseConjecture  -> skolemiseConjecture+    IfToBoolOp           -> single $ return . ifToBoolOp+    BoolOpToIf           -> single $ return . theoryBoolOpToIf+    RemoveBuiltinBool    -> single $ removeBuiltinBool+    AddMatch             -> single $ addMatch+    CommuteMatch         -> single $ commuteMatchTheory+    RemoveMatch          -> single $ removeMatch+    CollapseEqual        -> single $ return . collapseEqual+    RemoveAliases        -> single $ return . removeAliases+    LambdaLift           -> single $ lambdaLift+    LetLift              -> single $ letLift+    AxiomatizeLambdas    -> single $ axiomatizeLambdas+    AxiomatizeFuncdefs   -> single $ return . axiomatizeFuncdefs+    AxiomatizeFuncdefs2  -> single $ return . axiomatizeFuncdefs2+    AxiomatizeDatadecls    -> single $ axiomatizeDatadecls False+    AxiomatizeDatadeclsUEQ -> single $ axiomatizeDatadecls True+    Monomorphise b       -> single $ monomorphise b+    CSEMatch             -> single $ return . cseMatch cseMatchNormal+    CSEMatchWhy3         -> single $ return . cseMatch cseMatchWhy3+    EliminateDeadCode    -> single $ return . eliminateDeadCode+    MakeConjecture n     -> single $ return . makeConjecture n+    SelectConjecture n   -> single $ return . selectConjecture n+    ProvedConjecture n   -> single $ return . provedConjecture n+    DeleteConjecture n   -> single $ return . deleteConjecture n+    DropSuffix cs        -> single $ dropSuffix cs+    Induction coords     -> induction coords+    where single m thy = do x <- m thy; return [x]   parsePass =     foldr (<|>) empty [       unitPass SimplifyGently $@@ -114,10 +182,22 @@         help "Eliminate unnecessary use of higher-order functions",       unitPass NegateConjecture $         help "Transform the goal into a negated conjecture",+      unitPass TypeSkolemConjecture $+        help "Skolemise the types in the conjecture",+      unitPass IntToNat $+        help "Replace builtin Integer with a a unary nat datatype nat (if only ordering is used)",+      unitPass SortsToNat $+        help "Replace abstract sorts with a unary nat datatype.",+      unitPass SplitConjecture $+        help "Puts goals in separate theories",+      unitPass SkolemiseConjecture $+        help "Skolemise the conjecture",       unitPass IfToBoolOp $         help "Replace if-then-else by and/or where appropriate",       unitPass BoolOpToIf $         help "Replace and/or by if-then-else",+      unitPass RemoveBuiltinBool $+        help "Replace the builtin bool with a datatype",       unitPass AddMatch $         help "Transform SMTLIB-style datatype access into pattern matching",       unitPass CommuteMatch $@@ -131,12 +211,53 @@       unitPass LambdaLift $         help "Lift lambdas to the top level",       unitPass LetLift $-        help "Lift let-expressions to the top level.",+        help "Lift let-expressions to the top level",       unitPass AxiomatizeLambdas $         help "Eliminate lambdas by axiomatisation (requires --lambda-lift)",+      unitPass AxiomatizeFuncdefs $+        help "Transform function definitions to axioms in the most straightforward way",+      unitPass AxiomatizeFuncdefs2 $+        help "Transform function definitions to axioms with left hand side pattern matching instead of match",+      unitPass AxiomatizeDatadecls $+        help "Transform data declarations to axioms",+      unitPass AxiomatizeDatadeclsUEQ $+        help "Transform data declarations to unit equality axioms (incomplete)",+      flag' () (long ("monomorphise") <> help "Try to monomorphise the problem") *> pure (Monomorphise False),+      flag' () (long ("monomorphise-verbose") <> help "Try to monomorphise the problem verbosely") *> pure (Monomorphise True),       unitPass CSEMatch $         help "Perform CSE on match scrutinees",       unitPass CSEMatchWhy3 $         help "Aggressively perform CSE on match scrutinees (helps Why3's termination checker)",       unitPass EliminateDeadCode $-        help "Dead code elimination (doesn't work on dead recursive functions)"]+        help "Dead code elimination (doesn't work on dead recursive functions)",+      fmap MakeConjecture $+        option auto $+          long "make-conjecture" <>+          metavar "CONJECTURE-NUMBER" <>+          help "Make an assert into an assert-not",+      fmap SelectConjecture $+        option auto $+          long "select-conjecture" <>+          metavar "CONJECTURE-NUMBER" <>+          help "Choose a particular conjecture from the problem",+      fmap ProvedConjecture $+        option auto $+          long "proved-conjecture" <>+          metavar "CONJECTURE-NUMBER" <>+          help "Mark a particular conjecture as proved",+      fmap DeleteConjecture $+        option auto $+          long "delete-conjecture" <>+          metavar "CONJECTURE-NUMBER" <>+          help "Delete a particular conjecture",+      fmap DropSuffix $+        option str $+          long "drop-suffix" <>+          metavar "SUFFIX-CHARS" <>+          help "Drop the suffix delimited by some character set",+      fmap Induction $+        option auto $+          long "induction" <>+          metavar "VAR-COORD" <>+          help "Perform induction on the variable coordinates"+      ]
src/Tip/Pretty.hs view
@@ -1,5 +1,6 @@ {-# LANGUAGE RecordWildCards, OverloadedStrings #-} {-# LANGUAGE TypeSynonymInstances, FlexibleInstances #-}+{-# LANGUAGE GeneralizedNewtypeDeriving #-} module Tip.Pretty where  import Text.PrettyPrint@@ -30,6 +31,34 @@ class PrettyVar a where   -- | The string in a variable   varStr :: a -> String++instance (PrettyVar a,PrettyVar b) => PrettyVar (Either a b) where+  varStr (Left x)  = varStr x+  varStr (Right y) = varStr y++instance (Pretty a,Pretty b) => Pretty (a,b) where+  pp (x,y) = parens (pp x <+> "," $\ pp y)++instance (Pretty a,Pretty b,Pretty c) => Pretty (a,b,c) where+  pp (x,y,z) = parens (pp x <+> "," $\ pp y <+> "," $\ pp z)++instance (Pretty a) => Pretty [a] where+  pp xs = brackets (sep (punctuate "," (map pp xs)))++instance Pretty Int where+  pp = int++instance Pretty () where+  pp _ = "()"++newtype PPVar a = PPVar { unPPVar :: a }+  deriving (Eq,Ord,PrettyVar)++instance PrettyVar a => Pretty (PPVar a) where+  pp (PPVar x) = ppVar x++instance PrettyVar a => Show (PPVar a) where+  show (PPVar x) = varStr x  -- | Variable to 'Doc' ppVar :: PrettyVar a => a -> Doc
src/Tip/Pretty/Haskell.hs view
@@ -1,5 +1,5 @@ {-# LANGUAGE OverloadedStrings #-}-module Tip.Pretty.Haskell (module Tip.Pretty.Haskell, RenameMap) where+module Tip.Pretty.Haskell (module Tip.Pretty.Haskell, RenameMap, Mode(..)) where  import Tip.Haskell.Repr import Tip.Haskell.Translate@@ -7,15 +7,22 @@ import qualified Tip.Core as T import Tip.Pretty import Tip.Fresh-import Text.PrettyPrint+import Text.PrettyPrint hiding (Mode)  import Data.Map (Map) -ppTheory :: Name a => T.Theory a -> Doc-ppTheory = fst . ppTheoryWithRenamings+ppTheory :: Name a => Mode -> T.Theory a -> Doc+ppTheory mode = fst . ppTheoryWithRenamings mod_name mode+  where+  mod_name =+    case mode of+      Feat{}           -> "Main"+      LazySmallCheck{} -> "Main"+      Smten{}          -> "Main"+      _                -> "A" -ppTheoryWithRenamings :: Name a => T.Theory a -> (Doc,RenameMap a)-ppTheoryWithRenamings = fst_pp . renameDecls . addHeader . addImports . trTheory+ppTheoryWithRenamings :: Name a => String -> Mode -> T.Theory a -> (Doc,RenameMap a)+ppTheoryWithRenamings mod_name mode = fst_pp . renameDecls . addHeader mod_name . addImports . trTheory mode   where fst_pp (x,y) = (pp x,y)  -- * Pretty printing@@ -108,6 +115,7 @@     ConPat k [] -> ppHsVar k     ConPat k ps -> parIf (i >= 1) (ppOper k (map (ppPat 1) ps))     TupPat ps   -> tuple (map (ppPat 0) ps)+    IntPat i    -> integer i     WildPat     -> "_"  instance PrettyHsVar a => Pretty (Decl a) where@@ -133,6 +141,10 @@                else "deriving" $\ tuple (map ppHsVar derivs))         InstDecl ctx head ds ->           (("instance" $\+            (pp_ctx ctx $\ pp head)) $\+               "where") $\ vcat (map (go 1) ds)+        ClassDecl ctx head ds ->+          (("class" $\             (pp_ctx ctx $\ pp head)) $\                "where") $\ vcat (map (go 1) ds)         TypeDef lhs rhs -> "type" <+> ppType False 0 lhs <+> "=" $\ pp rhs
src/Tip/Pretty/Isabelle.hs view
@@ -76,7 +76,7 @@ ppSort :: (PrettyVar a, Ord a) => Sort a -> Doc --ppSort (Sort sort 0) = "type" $\ ppVar sort ppSort (Sort sort n) =-  error $ "Can't translate abstract sort " ++ show (ppVar sort) ++ " of arity " ++ show n ++ " to Isabelle"+  error $ "Can't translate abstract sort " ++ show (ppVar sort) ++ " of arity " ++ show (length n) ++ " to Isabelle"  ppDatas :: (PrettyVar a, Ord a) => [Datatype a] -> Doc ppDatas []  = empty@@ -138,7 +138,7 @@   ppFormula :: (PrettyVar a, Ord a) => Formula a -> Int -> Doc-ppFormula (Formula role _tvs term) i =+ppFormula (Formula role _ _tvs term) i =   (ppRole role <+> ("x" <> int i) <+> ":") $\ quote (ppExpr 0 term) $$ "oops"   -- "by (tactic {* Subgoal.FOCUS_PARAMS (K (Tactic_Data.hard_tac @{context})) @{context} 1 *})" convenience 
src/Tip/Pretty/SMT.hs view
@@ -5,7 +5,7 @@  import Tip.Pretty import Tip.Types-import Tip.Core (ifView, topsort, neg, exprType, makeGlobal)+import Tip.Core (ifView, topsort, neg, exprType, makeGlobal, uses, collectLets) import Tip.Rename import Data.Maybe import Data.Char (isAlphaNum)@@ -44,7 +44,7 @@       ["(check-sat)"])  ppSort :: PrettyVar a => Sort a -> Doc-ppSort (Sort sort n) = parExpr "declare-sort" [ppVar sort, int n]+ppSort (Sort sort tvs) = parExpr "declare-sort" [ppVar sort, int (length tvs)]  ppDatas :: PrettyVar a => [Datatype a] -> Doc ppDatas datatypes@(Datatype _ tyvars _:_) =@@ -67,28 +67,36 @@ par' [] d = d par' xs d = parExprSep "par" [parens (fsep (map ppVar xs)), d] +par'' :: (PrettyVar a) => [a] -> Doc -> Doc+par'' xs d = par' xs (parens d)+ ppUninterp :: PrettyVar a => Signature a -> Doc ppUninterp (Signature f (PolyType tyvars arg_types result_type)) =-  apply "declare-fun"-    (par' tyvars-      (apply (ppVar f)-        (sep [parens (fsep (map ppType arg_types)), ppType result_type])))+  apply (if null arg_types then "declare-const" else "declare-fun")+    (par tyvars+      (ppVar f $\+        (sep [ if null arg_types then empty else parens (fsep (map ppType arg_types))+             , ppType result_type+             ])))  ppFuncs :: (Ord a, PrettyVar a) => [Function a] -> Doc+ppFuncs [f] =+      expr (if func_name f `elem` uses f+              then "define-fun-rec"+              else "define-fun")+           [ppFuncSig par f (ppExpr (func_body f))] ppFuncs fs = expr "define-funs-rec"-  [ parens (vcat (map ppFuncSig fs))+  [ parens (vcat [ppFuncSig par'' f empty | f <- fs])   , parens (vcat (map (ppExpr . func_body) fs))   ] -ppFuncSig :: PrettyVar a => Function a -> Doc-ppFuncSig (Function f tyvars args res_ty body) =-  (par' tyvars-    (parens-      (ppVar f $\ fsep [ppLocals args, ppType res_ty])))+ppFuncSig :: PrettyVar a => ([a] -> Doc -> Doc) -> Function a -> Doc -> Doc+ppFuncSig parv (Function f tyvars args res_ty body) content =+  parv tyvars (ppVar f $\ fsep [ppLocals args, ppType res_ty, content])  ppFormula :: (Ord a, PrettyVar a) => Formula a -> Doc-ppFormula (Formula Prove tvs term)  = apply "assert-not" (par' tvs (ppExpr term))-ppFormula (Formula Assert tvs term) = apply "assert"     (par' tvs (ppExpr term))+ppFormula (Formula Prove _ tvs term)  = apply "assert-not" (par' tvs (ppExpr term))+ppFormula (Formula Assert _ tvs term) = apply "assert"     (par' tvs (ppExpr term))  ppExpr :: (Ord a, PrettyVar a) => Expr a -> Doc ppExpr e | Just (c,t,f) <- ifView e = parExpr "ite" (map ppExpr [c,t,f])@@ -99,7 +107,12 @@ ppExpr (Lcl l)      = ppVar (lcl_name l) ppExpr (Lam ls e)   = parExprSep "lambda" [ppLocals ls,ppExpr e] ppExpr (Match e as) = "(match" $\ ppExpr e $\ (vcat (map ppCase as) <> ")")-ppExpr (Let x b e)  = parExprSep "let" [parens (parens (ppLocal x $\ ppExpr b)), ppExpr e]+ppExpr lets@Let{} =+  parExprSep "let"+    [ parens (vcat (map parens [ppVar (lcl_name x) $\ ppExpr b | (x,b) <- bs]))+    , ppExpr e+    ]+  where (bs,e) = collectLets lets ppExpr (Quant _ q ls e) = parExprSep (ppQuant q) [ppLocals ls, ppExpr e]  ppLocals :: PrettyVar a => [Local a] -> Doc@@ -156,11 +169,21 @@ ppType (TyVar x)     = ppVar x ppType (TyCon tc ts) = expr (ppVar tc) (map ppType ts) ppType (ts :=>: r)   = parExpr "=>" (map ppType (ts ++ [r]))-ppType (BuiltinType Integer) = "Int"-ppType (BuiltinType Boolean) = "Bool"+ppType (BuiltinType bu) = ppBuiltinType bu +ppBuiltinType :: BuiltinType -> Doc+ppBuiltinType Integer = "Int"+ppBuiltinType Boolean = "Bool"+ -- Temporary use SMTLIB as the pretty printer: +instance (Ord a,PrettyVar a) => Pretty (Decl a) where+  pp (DataDecl d)   = ppData d+  pp (SortDecl d)   = ppSort d+  pp (SigDecl d)    = ppUninterp d+  pp (FuncDecl d)   = ppFuncs [d]+  pp (AssertDecl d) = ppFormula d+ instance (Ord a,PrettyVar a) => Pretty (Theory a) where   pp = ppTheory @@ -188,6 +211,9 @@ instance PrettyVar a => Pretty (Datatype a) where   pp = ppDatas . return +instance PrettyVar a => Pretty (Sort a) where+  pp = ppSort+ instance PrettyVar a => Pretty (Signature a) where   pp = ppUninterp @@ -242,11 +268,32 @@     , "abs", "min", "max", "const"     , "mod", "div"     , "=", "=>", "+", "-", "*", ">", ">=", "<", "<=", "@", "!"+    , "as"+    , "declare-datatypes"+    , "declare-sort"+    , "declare-const"+    , "declare-const"+    , "declare-fun"+    , "declare-fun"+    , "define-fun"+    , "define-fun"+    , "define-fun-rec"+    , "define-fun-rec"+    , "define-funs-rec"+    , "check-sat"+    -- TIP:+    , "par"+    , "case"+    , "match"+    , "assert"+    , "assert-not"     -- Z3:     , "Bool", "Int", "Array", "List", "insert"     , "isZero"     , "map"+    , "select"+    , "subset", "union", "intersect"     -- CVC4:-    , "as", "concat"+    , "concat", "member"     ] 
+ src/Tip/Pretty/TFF.hs view
@@ -0,0 +1,141 @@+{-# LANGUAGE RecordWildCards, OverloadedStrings, PatternGuards, ViewPatterns #-}+module Tip.Pretty.TFF where++import Text.PrettyPrint++import Tip.Pretty+import Tip.Pretty.Why3(Why3Var(..))+import Tip.Types+import Tip.Core hiding (apply)+import Tip.Rename+import Data.Maybe+import Data.Char (isAlphaNum)++apply :: Doc -> [Doc] -> Doc+apply s [] = s+apply s xs = cat [s <> "(", nest 2 (fsep (punctuate (text ",") xs) <> ")")]++clause :: String -> String -> Doc -> Doc+clause name kind body =+  hang ("tff(" <> text name <> ", " <> text kind <> ",") 2+       (body <> ").")++validTFFChar :: Char -> String+validTFFChar x+  | isAlphaNum x || x == '_' = [x]+  | otherwise                = ""++ppTheory :: (Ord a,PrettyVar a) => Theory a -> Doc+ppTheory (renameAvoiding [] validTFFChar . tffvarify -> Theory{..})+  = vcat+     (map ppSort thy_sorts +++      map ppUninterp thy_sigs +++      map ppFormula thy_asserts)++ppSort :: PrettyVar a => Sort a -> Doc+ppSort (Sort sort []) =+  clause "type" "type" $+    ppVar sort <+> ":" <+> "$tType"++ppUninterp :: PrettyVar a => Signature a -> Doc+ppUninterp (Signature f (PolyType [] arg_types result_type)) =+  clause "func" "type" $+    ppVar f <+> ":" <+>+    case arg_types of+      [] -> ppType result_type+      _  -> sep (punctuate " *" (map ppType arg_types)) <+> ">" <+> ppType result_type++ppFormula :: (Ord a, PrettyVar a) => Formula a -> Doc+ppFormula (Formula Prove _ [] term)  =+  clause "goal" "conjecture" (ppExpr 0 (tffify term))+ppFormula (Formula Assert _ [] term) =+  clause "axiom" "axiom" (ppExpr 0 (tffify term))++tffify :: Ord a => Expr a -> Expr a+tffify =+  transformExpr $ \e ->+    case e of+      Builtin Equal :@: ts ->+        ands (zipWith (===) ts (tail ts))+      Builtin And :@: es -> ands es+      Builtin Or  :@: es -> ors  es+      _ -> e++tffvarify :: Ord a => Theory a -> Theory (Why3Var a)+tffvarify = uppercase . fmap (Why3Var False)+  where+    uppercase =+      transformExprIn $ \e ->+        case e of+          Lcl lcl -> Lcl (make_upper lcl)+          Quant i q ls body -> Quant i q (map make_upper ls) body+          _ -> e+    make_upper (Local (Why3Var _ lcl_name) lcl_type) =+      Local (Why3Var True lcl_name) lcl_type++ppExpr :: (Ord a, PrettyVar a) => Int -> Expr a -> Doc+ppExpr _ (Builtin Equal :@: [t, u]) =+  hang (ppExpr 2 t <+> "=") 2 (ppExpr 2 u)+ppExpr p (Builtin Distinct :@: [t, u]) =+  hang (ppExpr 2 t <+> "!=") 2 (ppExpr 2 u)+ppExpr p (Builtin And :@: ts) =+  parIf (p > 0) $+    let u:us = punctuate " &" (map (ppExpr 1) ts) in+    sep (u:map (nest 2) us)+ppExpr p (Builtin Or :@: ts) =+  parIf (p > 0) $+    let u:us = punctuate " |" (map (ppExpr 1) ts) in+    sep (u:map (nest 2) us)+ppExpr p (Builtin Implies :@: [t, u]) =+  parIf (p > 0) $+    hang (ppExpr 1 t <+> "=>") 2 (ppExpr 1 u)+ppExpr p (Builtin Not :@: [t]) =+  parIf (p > 1) $+    "~" <> ppExpr 1 t+ppExpr _ (hd :@: ts) =+  apply (ppHead hd) (map (ppExpr 0) ts)+ppExpr _ (Lcl l) = ppVar (lcl_name l)+ppExpr _ (Quant _ q ls e) =+  hang+    (ppQuant q <> brackets (fsep (punctuate "," (map ppLocal ls))) <> ":")+    2+    (ppExpr 1 e)++ppLocal :: PrettyVar a => Local a -> Doc+ppLocal Local{..} = ppVar lcl_name <> ":" <> ppType lcl_type++ppQuant :: Quant -> Doc+ppQuant Forall = "!"+ppQuant Exists = "?"++ppHead :: PrettyVar a => Head a -> Doc+ppHead (Builtin b) = ppBuiltin b+ppHead (Gbl Global{..}) = ppVar gbl_name++ppBuiltin :: Builtin -> Doc+ppBuiltin (Lit lit) = ppLit lit+ppBuiltin Distinct  = "$distinct"+ppBuiltin IntAdd    = "$plus_int"+ppBuiltin IntSub    = "$minus_int"+ppBuiltin IntMul    = "$times_int"+ppBuiltin IntDiv    = "$div_int"+ppBuiltin IntMod    = "$mod_int"+ppBuiltin IntGt     = "$greater_int"+ppBuiltin IntGe     = "$greatereq_int"+ppBuiltin IntLt     = "$less_int"+ppBuiltin IntLe     = "$lesseq_int"++ppLit :: Lit -> Doc+ppLit (Int i)      = integer i+ppLit (Bool True)  = "$true"+ppLit (Bool False) = "$false"+ppLit (String s)   = text (show s)++ppType :: PrettyVar a => Type a -> Doc+ppType (TyVar x)        = ppVar x+ppType (TyCon tc ts)    = apply (ppVar tc) (map ppType ts)+ppType (BuiltinType bu) = ppBuiltinType bu++ppBuiltinType :: BuiltinType -> Doc+ppBuiltinType Integer = "$int"+ppBuiltinType Boolean = "$o"
src/Tip/Pretty/Why3.hs view
@@ -72,9 +72,9 @@       zipWith ppFormula thy_asserts [0..])  ppSort :: (PrettyVar a, Ord a) => Sort a -> Doc-ppSort (Sort sort 0) = "type" $\ ppVar sort+ppSort (Sort sort []) = "type" $\ ppVar sort ppSort (Sort sort n) =-  error $ "Can't translate abstract sort " ++ show (ppVar sort) ++ " of arity " ++ show n ++ " to Why3"+  error $ "Can't translate abstract sort " ++ show (ppVar sort) ++ " of arity " ++ show (length n) ++ " to Why3"  ppDatas :: (PrettyVar a, Ord a) => [Datatype a] -> Doc ppDatas (d:ds) = vcat (ppData "type" d:map (ppData "with") ds)@@ -118,7 +118,7 @@ ppDeepPattern (DeepLitPat lit) = ppLit lit  ppFormula :: (PrettyVar a, Ord a) => Formula a -> Int -> Doc-ppFormula (Formula role _tvs term) i =+ppFormula (Formula role _ _tvs term) i =   (ppRole role <+> ("x" <> int i) <+> ":") $\ (ppExpr 0 term)  ppRole :: Role -> Doc
src/Tip/Scope.hs view
@@ -33,7 +33,7 @@ data TypeInfo a =     TyVarInfo   | DatatypeInfo (Datatype a)-  | SortInfo Int+  | SortInfo (Sort a)   deriving (Eq, Show)  data GlobalInfo a =@@ -173,10 +173,10 @@     types = M.insert ty TyVarInfo (types s) }  newSort :: (Monad m, Ord a, PrettyVar a) => Sort a -> ScopeT a m ()-newSort Sort{..} = do+newSort sort@Sort{..} = do   newName sort_name   modify $ \s -> s {-    types = M.insert sort_name (SortInfo sort_arity) (types s) }+    types = M.insert sort_name (SortInfo sort) (types s) }  newDatatype :: (Monad m, Ord a, PrettyVar a) => Datatype a -> ScopeT a m () newDatatype dt@Datatype{..} = do
src/Tip/Simplify.hs view
@@ -18,19 +18,32 @@   SimplifyOpts {     touch_lets    :: Bool,     -- ^ Allow simplifications on lets-    should_inline :: Maybe (Scope a) -> Expr a -> Bool,+    remove_variable_scrutinee_in_branches :: Bool,+    -- ^ transform+    -- @(match x (case (K y) (e x y)))@+    -- to+    -- @(match x (case (K y) (e (K y) y))@+    -- This is useful for triggering other known-case simplifications,+    -- and is therefore on by default.+    should_inline :: Occurrences -> Maybe (Scope a) -> Expr a -> Bool,     -- ^ Inlining predicate     inline_match  :: Bool     -- ^ Allow function inlining to introduce match   } +newtype Occurrences = Occurrences Int++-- | Gentle, but without inlining+gentlyNoInline :: SimplifyOpts a+gentlyNoInline = gently { should_inline = \ _ _ _ -> False }+ -- | Gentle options: if there is risk for code duplication, only inline atomic expressions gently :: SimplifyOpts a-gently       = SimplifyOpts True (const atomic) True+gently       = SimplifyOpts True True (\ (Occurrences occ) _ e -> occ <= 1 || atomic e) True  -- | Aggressive options: inline everything that might plausibly lead to simplification aggressively :: Name a => SimplifyOpts a-aggressively = SimplifyOpts True useful True+aggressively = SimplifyOpts True True (\ (Occurrences occ) mscp e -> occ <= 1 || useful mscp e) True   where     useful _ Lam{} = True     useful mscp (f :@: _) = isConstructor mscp f@@ -70,6 +83,25 @@              (e2, Any simplified) <- lift (runWriterT (aux e1))              if simplified then hooray $ return e2 else return e0 +        Match _ [Case Default body] -> hooray $ return body++        Match e (Case Default (Match e' cases'):cases) | e == e' ->+          hooray $ aux $+          Match e (filter (not . dead . case_pat) cases' ++ cases)+          where+            dead (LitPat l)   = LitPat l `elem` map case_pat cases+            dead (ConPat{..}) =+              gbl_name pat_con `elem`+                [ gbl_name pat_con | ConPat{..} <- map case_pat cases ]+            dead Default = False++        Match e (Case Default def:cases)+          | TyCon ty args <- exprType e,+            Just (d, c@Constructor{..}) <- missingCase mscp ty cases -> do+              let gbl = constructor d c args+              pat <- lift (fmap (ConPat gbl) (freshArgs gbl))+              aux (Match e (Case pat def:cases))+         Match e [Case _ e1,Case (LitPat (Bool b)) e2]           | e1 == bool (not b) && e2 == bool b -> hooray $ return e           | e1 == bool b && e2 == bool (not b) -> hooray $ return (neg e)@@ -77,24 +109,10 @@         Match (Let x e body) alts | touch_lets ->           aux (Let x e (Match body alts)) -        Match _ [Case Default body] -> hooray $ return body--        Match (hd :@: args) alts | isConstructor mscp hd ->-          -- We use reverse because the default case comes first and we want it last-          case filter (matches hd . case_pat) (reverse alts) of-            [] -> return e0-            Case (ConPat _ lcls) body:_ ->-              hooray $-              aux $-                foldr (uncurry Let) body (zip lcls args)-            Case _ body:_ -> hooray $ return body-          where-            matches (Gbl gbl) (ConPat gbl' _) = gbl == gbl'-            matches (Builtin (Lit lit)) (LitPat lit') = lit == lit'-            matches _ Default = True-            matches _ _ = False+        Match e alts+          | Just e' <- tryMatch mscp e alts -> hooray $ aux e' -        Match (Lcl x) alts ->+        Match (Lcl x) alts | remove_variable_scrutinee_in_branches ->           Match (Lcl x) <$> sequence           [ Case pat <$> case pat of               ConPat g bs -> subst ((Gbl g :@: map Lcl bs) /// x) rhs@@ -117,11 +135,30 @@          Builtin Equal :@: [litView -> Just s,litView -> Just t] -> hooray $ return (bool (s == t)) +        -- cons(x,y) == nil ~> false+        -- cons(x,y) /= nil ~> true+        --+        -- cons(x1,y1) == cons(x2,y2) ~> x1==x2 & y1==y2+        -- cons(x1,y1) /= cons(x2,y2) ~> x1/=x2 | y1/=y2+        Builtin eq_op :@: [Gbl k :@: kargs,Gbl j :@: jargs]+          | Just scp <- mscp+          , Just (_,Constructor kk _ _) <- lookupConstructor (gbl_name k) scp+          , Just (_,Constructor jj _ _) <- lookupConstructor (gbl_name j) scp+          , Just res <- case (eq_op, kk == jj) of+                          (Equal   ,False) -> Just falseExpr+                          (Distinct,False) -> Just trueExpr+                          (Equal,   True)  -> Just (ands (zipWith (===) kargs jargs))+                          (Distinct,True)  -> Just (ors  (zipWith (=/=) kargs jargs))+                          _                -> Nothing+          -> hooray $ aux res+         Builtin Distinct :@: [litView -> Just s,litView -> Just t] -> hooray $ return (bool (s /= t))          Builtin Not     :@: [e]      -> share (neg e)-        Builtin And     :@: [e1, e2] -> share (e1 /\ e2)-        Builtin Or      :@: [e1, e2] -> share (e1 \/ e2)+        Builtin And     :@: [e1, e2] | e1 == e2  -> return e1+                                     | otherwise -> share (e1 /\ e2)+        Builtin Or      :@: [e1, e2] | e1 == e2  -> return e1+                                     | otherwise -> share (e1 \/ e2)         Builtin Implies :@: [e1, e2] -> share (e1 ==> e2)          Builtin Equal :@: [e1, e2] ->@@ -152,7 +189,7 @@          _ -> return e0 -    inlineable body var val = should_inline mscp val || occurrences var body <= 1+    inlineable body var val = should_inline (Occurrences (occurrences var body)) mscp val     mscp = fmap scope mthy      isRecursiveGroup [fun] = defines fun `elem` uses fun@@ -182,3 +219,28 @@   scp <- mscp   lookupConstructor (gbl_name gbl) scp isConstructor _ _ = False++missingCase :: Name a => Maybe (Scope a) -> a -> [Case a] -> Maybe (Datatype a, Constructor a)+missingCase mscp tc cases = do+  scp <- mscp+  dt@Datatype{..} <- lookupDatatype tc scp+  let matched Constructor{..} =+        con_name `elem` [ gbl_name pat_con | ConPat{..} <- map case_pat cases ]+  case filter (not . matched) data_cons of+    [con] -> return (dt, con)+    _     -> Nothing++tryMatch :: Name a => Maybe (Scope a) -> Expr a -> [Case a] -> Maybe (Expr a)+tryMatch mscp (hd :@: args) alts | isConstructor mscp hd =+  -- We use reverse because the default case comes first and we want it last+  case filter (matches hd . case_pat) (reverse alts) of+    [] -> Nothing+    Case (ConPat _ lcls) body:_ ->+      Just $ foldr (uncurry Let) body (zip lcls args)+    Case _ body:_ -> Just body+  where+    matches (Gbl gbl) (ConPat gbl' _) = gbl == gbl'+    matches (Builtin (Lit lit)) (LitPat lit') = lit == lit'+    matches _ Default = True+    matches _ _ = False+tryMatch _ _ _ = Nothing
src/Tip/Types.hs view
@@ -1,4 +1,5 @@--- | The abstract syntax+-- | the abstract syntax+{-# LANGUAGE RecordWildCards #-} {-# LANGUAGE DeriveFunctor, DeriveFoldable, DeriveTraversable, PatternGuards #-} {-# LANGUAGE ExplicitForAll, FlexibleContexts, FlexibleInstances, TemplateHaskell, MultiParamTypeClasses #-} module Tip.Types where@@ -26,22 +27,25 @@ infix 5 :@:  data Expr a-  -- maybe move Lit from Builtin under Head to straight here   = Head a :@: [Expr a]+  -- ^ Function application: always perfectly saturated.+  --   Lambdas and locals are applied with 'At' as head.   | Lcl (Local a)   | Lam [Local a] (Expr a)   -- Merge with Quant?   | Match (Expr a) [Case a]   -- ^ The default case comes first if there is one   | Let (Local a) (Expr a) (Expr a)-  -- Allow a list of bound variables, like in SMT-LIB?+  -- ^ @Let (Local x t) b e@ = @(let ((l x)) b e)@+  -- Unlike SMT-LIB, this does not accept a list of bound+  -- variable-/expression-pairs. Fix?   | Quant QuantInfo Quant [Local a] (Expr a)   deriving (Eq,Ord,Show,Functor,Foldable,Traversable)  data Quant = Forall | Exists   deriving (Eq,Ord,Show) -data QuantInfo = NoInfo+data QuantInfo = NoInfo | QuantIH Int   deriving (Eq,Ord,Show)  data Case a = Case { case_pat :: Pattern a, case_rhs :: Expr a }@@ -133,7 +137,7 @@ -- | Uninterpreted sort data Sort a = Sort   { sort_name :: a-  , sort_arity :: Int }+  , sort_tvs  :: [a] }   deriving (Eq,Ord,Show,Functor,Foldable,Traversable)  -- | Data definition@@ -146,8 +150,12 @@  data Constructor a = Constructor   { con_name    :: a+  -- ^ Constructor name (e.g. @Cons@)   , con_discrim :: a+  -- ^ Discriminator name (e.g. @is-Cons@)   , con_args    :: [(a,Type a)]+  -- ^ Argument types names of their projectors+  --   (e.g. [(@head@,a),(@tail@,List a)])   }   deriving (Eq,Ord,Show,Functor,Foldable,Traversable) @@ -172,15 +180,64 @@  data Formula a = Formula   { fm_role :: Role+  , fm_info :: Info a   , fm_tvs  :: [a]   -- ^ top-level quantified type variables   , fm_body :: Expr a   }   deriving (Eq,Ord,Show,Functor,Foldable,Traversable) +data Info a+  = Definition a+  | IH Int+  | Lemma Int+  | Projection a+  | DataDomain a+  | DataProjection a+  | DataDistinct a+  | Defunction a+  | UserAsserted+  | Unknown+  deriving (Eq,Ord,Show,Functor,Foldable,Traversable)+ data Role = Assert | Prove   deriving (Eq,Ord,Show) +-- * Other views of theories++-- | The different kinds of declarations in a 'Theory'.+data Decl a+    = DataDecl (Datatype a)+    | SortDecl (Sort a)+    | SigDecl (Signature a)+    | FuncDecl (Function a)+    | AssertDecl (Formula a) -- rename to FormulaDecl?+  deriving (Eq,Ord,Show,Functor,Foldable,Traversable)++-- | 'Decl'arations in a 'Theory'+theoryDecls :: Theory a -> [Decl a]+theoryDecls (Theory{..}) =+    map DataDecl thy_datatypes +++    map SortDecl thy_sorts +++    map SigDecl thy_sigs +++    map FuncDecl thy_funcs +++    map AssertDecl thy_asserts++-- | Assemble a 'Theory' from some 'Decl'arations+declsToTheory :: [Decl a] -> Theory a+declsToTheory ds = Theory+    { thy_datatypes = [ d | DataDecl d   <- ds ]+    , thy_sorts     = [ d | SortDecl d   <- ds ]+    , thy_sigs      = [ d | SigDecl d    <- ds ]+    , thy_funcs     = [ d | FuncDecl d   <- ds ]+    , thy_asserts   = [ d | AssertDecl d <- ds ]+    }++declsPass :: ([Decl a] -> [Decl b]) -> Theory a -> Theory b+declsPass k = declsToTheory . k . theoryDecls++-- Instances+ instanceUniverseBi [t| forall a . (Expr a,Expr a) |] instanceUniverseBi [t| forall a . (Function a,Expr a) |] instanceUniverseBi [t| forall a . (Function a,Global a) |]@@ -194,6 +251,7 @@ instanceUniverseBi [t| forall a . (Type a,Type a) |] instanceUniverseBi [t| forall a . (Theory a,Constructor a) |] instanceUniverseBi [t| forall a . (Theory a,Global a) |]+instanceUniverseBi [t| forall a . (Theory a,Local a) |] instanceUniverseBi [t| forall a . (Theory a,Builtin) |] instanceTransformBi [t| forall a . (Expr a,Expr a) |] instanceTransformBi [t| forall a . (a,Expr a) |]@@ -206,6 +264,8 @@ instanceTransformBi [t| forall a . (Pattern a,Expr a) |] instanceTransformBi [t| forall a . (Pattern a,Theory a) |] instanceTransformBi [t| forall a . (Type a,Theory a) |]+instanceTransformBi [t| forall a . (Global a,Theory a) |]+instanceTransformBi [t| forall a . (Type a,Decl a) |] instanceTransformBi [t| forall a . (Type a,Expr a) |] instanceTransformBi [t| forall a . (Type a,Type a) |] instance Monad m => TransformBiM m (Expr a) (Expr a) where@@ -229,6 +289,9 @@ instance Monad m => TransformBiM m (Type a) (Type a) where   {-# INLINE transformBiM #-}   transformBiM = $(genTransformBiM' [t| forall m a . (Type a -> m (Type a)) -> Type a -> m (Type a) |])+instance Monad m => TransformBiM m (Type a) (Theory a) where+  {-# INLINE transformBiM #-}+  transformBiM = $(genTransformBiM' [t| forall m a . (Type a -> m (Type a)) -> Theory a -> m (Theory a) |]) instance Monad m => TransformBiM m (Function a) (Theory a) where   {-# INLINE transformBiM #-}   transformBiM = $(genTransformBiM' [t| forall m a . (Function a -> m (Function a)) -> Theory a -> m (Theory a) |])@@ -252,5 +315,8 @@ transformTypeInExpr =   $(genTransformBiT' [[t|PolyType|]] [t|forall a. (Type a -> Type a) -> Expr a -> Expr a|]) +transformTypeInDecl :: (Type a -> Type a) -> Decl a -> Decl a+transformTypeInDecl =+  $(genTransformBiT' [[t|PolyType|]] [t|forall a. (Type a -> Type a) -> Decl a -> Decl a|])  
src/Tip/Utils.hs view
@@ -1,29 +1,74 @@ {-# LANGUAGE ScopedTypeVariables #-}+{-# LANGUAGE DeriveFunctor #-} -- | Handy utilities module Tip.Utils where  import Data.List-import Data.Graph+import Data.Maybe+import Data.Graph hiding (components) import Data.List.Split import Data.Char import Data.Foldable (Foldable) import qualified Data.Foldable as F+import Data.Function (on) import Data.Ord+import Data.Function  -- | Sort and remove duplicates usort :: Ord a => [a] -> [a]-usort = map head . group . sort+usort = usortOn id --- | Sort things in topologically in strongly connected components-sortThings :: Ord name => (thing -> name) -> (thing -> [name]) -> [thing] -> [[thing]]-sortThings name refers things =-    map flattenSCC $ stronglyConnComp+-- | Sort and remove duplicates wrt some custom ordering+usortOn :: Ord b => (a -> b) -> [a] -> [a]+usortOn f = map head . groupBy ((==) `on` f) . sortBy (comparing f)++-- | Union on a predicate+unionOn :: Ord b => (a -> b) -> [a] -> [a] -> [a]+unionOn k = unionBy ((==) `on` k)++-- | Returns the duplicates in a list+duplicates :: Ord a => [a] -> [a]+duplicates xs = usort [ x | x <- xs, count x > 1 ]+  where count x = length (filter (== x) xs)++data Component a = Rec [a] | NonRec a+  deriving (Eq,Ord,Show,Functor)++flattenComponent :: Component a -> [a]+flattenComponent (Rec xs) = xs+flattenComponent (NonRec x) = [x]++-- | Strongly connected components+components :: Ord name => (thing -> name) -> (thing -> [name]) -> [thing] -> [Component thing]+components name refers things =+    [ case comp of+        [(thing,n,refs)]+          | n `notElem` refs -> NonRec thing+        _                    -> Rec [ thing | (thing,_,_) <- comp ]+    | comp <- map flattenSCC $ stronglyConnCompR         [ (thing,name thing,filter (`elem` names) (refers thing))         | thing <- things         ]+    ]   where-    names = map name things+  names = map name things +lookupComponent :: Eq thing => thing -> [Component thing] -> Maybe (Component thing)+lookupComponent x = listToMaybe . mapMaybe h+  where+  h c = case c of NonRec y | x == y      -> Just c+                  Rec ys   | x `elem` ys -> Just c+                  _ -> Nothing++-- | Sort things in topologically in strongly connected components+sortThings :: Ord name => (thing -> name) -> (thing -> [name]) -> [thing] -> [[thing]]+sortThings name refers things = map flattenComponent (components name refers things)++-- | Recursive+recursive :: Ord name => (thing -> name) -> (thing -> [name]) -> [thing] -> [name]+recursive name refers things =+  [ name x | Rec xs <- components name refers things, x <- xs ]+ -- | Makes a nice flag from a constructor string -- -- > > flagify "PrintPolyFOL"@@ -38,8 +83,16 @@ flagifyShow = flagify . show  -- | Calculates the maximum value of a foldable value.------ Useful to find the highest unique in a structure maximumOn :: forall f a b . (F.Foldable f,Ord b) => (a -> b) -> f a -> b maximumOn f = f . F.maximumBy (comparing f)++-- | Pair up a list with its previous elements+--+-- > withPrevious "abc" = [('a',""),('b',"a"),('c',"ab")]+withPrevious :: [a] -> [(a,[a])]+withPrevious xs = zip xs (inits xs)++-- | Cursored traversal with previous and next elements of a list+cursor :: [a] -> [([a],a,[a])]+cursor xs = [ let (l,x:r) = splitAt i xs in (l,x,r) | i <- [0..length xs-1] ] 
src/Tip/Utils/Rename.hs view
@@ -29,12 +29,20 @@     extra x = fromMaybe [] (find (x `elem`) families)      families =+      [ [ m ++ suff | m <- grp ]+      | grp <- base+      , suff <- ["","s","ss"]+      ]++    base =        [ ["a","b","c"]        , ["f","g","h"]-       , ["p","q"]+       , ["i","j","k"]        , ["n","m","o"]+       , ["p","q","r"]+       , ["s","t"]+       , ["u","v","w"]        , ["x","y","z"]-       , ["xs","ys","zs"]        ]  disambig2 :: (a -> String) -> (b -> String) -> Suggestor (Either a b) String
+ src/Tip/Utils/Specialiser.hs view
@@ -0,0 +1,209 @@+{-# LANGUAGE ScopedTypeVariables #-}+{-# LANGUAGE RecordWildCards #-}+{-# LANGUAGE FlexibleContexts #-}+{-# LANGUAGE ViewPatterns #-}+{-# LANGUAGE DeriveFunctor, DeriveFoldable, DeriveTraversable #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE CPP #-}+module Tip.Utils.Specialiser+    (specialise, Rule(..), Expr(..),+     Void, absurd,+     Closed, subtermRules, subterms, Subst, Inst) where++#include "errors.h"+import Tip.Fresh+import Tip.Utils+import Tip.Pretty++import Control.Applicative+import Control.Monad+import Data.Maybe+import Data.Foldable (Foldable)+import Data.Traversable (Traversable)++import Data.Set (Set)+import qualified Data.Set as S++import Data.Generics.Genifunctors++import Text.PrettyPrint++data Expr c a = Var a | Con c [Expr c a]+  deriving (Eq,Ord,Show,Functor,Foldable,Traversable)++data Rule c a = Rule+  { rule_pre  :: [Expr c a]+  -- ^ The trigger(s).+  , rule_post :: Expr c a+  -- ^ The action. The variables here must be a subset of those in pre.+  }+  deriving (Eq,Ord,Show,Functor,Foldable,Traversable)++return []++bimapRule :: (c -> c') -> (a -> a') -> Rule c a -> Rule c' a'+bimapRule = $(genFmap ''Rule)++mapRuleOrd :: (c -> c') -> Rule c a -> Rule c' a+mapRuleOrd c = bimapRule c id++instance (Pretty c,Pretty a) => Pretty (Expr c a) where+  pp (Var x)    = pp x+  pp (Con k es) = pp k <+> parens (fsep (punctuate "," (map pp es)))++instance (Pretty c,Pretty a) => Pretty (Rule c a) where+  pp (Rule ps q) = parens (fsep (punctuate "," (map pp ps))) <+> "=>" $\ pp q++subtermRules :: Rule c a -> [Rule c a]+subtermRules (Rule p q) = map (Rule p) (subterms q)++subterms :: Expr c a -> [Expr c a]+subterms e = e : case e of Var a    -> []+                           Con _ es -> concatMap subterms es++ruleVars :: Ord a => Rule c a -> [a]+ruleVars (Rule ps q) = usort $ concatMap go (q:ps)+  where+  go (Var x) = [x]+  go (Con c es) = concatMap go es++type Closed c = Expr c Void++data Sk c = Old c | Sk Int+  deriving (Eq,Ord,Show,Functor,Foldable,Traversable)++instance Pretty c => Pretty (Sk c) where+  pp (Old c) = pp c+  pp (Sk i)  = int i++instance Ord c => Name (Sk c) where+  fresh = Sk <$> fresh++instance PrettyVar (Sk c) where+  varStr _ = show ""++unSkolem :: Closed (Sk c) -> Expr c Int+unSkolem (Con (Old k) es) = Con k (map unSkolem es)+unSkolem (Con (Sk i) [])  = Var i++varOf :: Eq a => a -> Expr c a -> Bool+x `varOf` Var y    = x == y+x `varOf` Con _ es = any (x `varOf`) es++specialise :: forall d c a . (Ord d,Ord c,Ord a) =>+    [(d,[Rule c a])] -> ([(d,Subst a Void c)],[d])+specialise decl_rules = (which (usort (go [close [] s | (_,Rule [] s) <- named_rules])), scary)+  where+  free0,free,scary :: [d]+  (usort -> free0,usort -> scary) = separate [ (d,r) | (d,rs) <- decl_rules, r <- rs ]+  free = free0 \\ scary++  named_rules :: [(d,Rule c a)]+  named_rules = [ (d,r) | (d,rules) <- decl_rules, d `elem` free, r <- rules ]++  go :: [Closed c] -> [Closed c]+  go insts+    | null (new_insts \\ insts) = []+    | otherwise                 = new_insts `union` go (new_insts `union` insts)+    where+    new_insts = usort $ map (snd . snd) new+    new = step named_rules insts++  which :: [Closed c] -> [(d,Subst a Void c)]+  which cls = usort [ (d,i) | (d,(i,_)) <- step named_rules cls ]++-- Return the safe rules, and the scary rules+separate :: (Ord a,Ord c) => [(name,Rule c a)] -> ([name],[name])+separate = go []+  where+  go rs ((n,r):xs)+    | terminating (r:rs) = let (a,b) = go (r:rs) xs in (n:a,b  )+    | otherwise          = let (a,b) = go rs     xs in (  a,n:b)+  go _ _ = ([],[])++terminating :: forall a c . (Ord a,Ord c) => [Rule c a] -> Bool+terminating (map (mapRuleOrd Old) -> rs) = go 10 S.empty (usort (inst rs))+  where+  go :: Int -> Set (Closed (Sk c)) -> [Closed (Sk c)] -> Bool+  {-+  go i visited new+    | traceShow ("go" $\ sep ["i:" $\ pp i+                             ,"visited:" $\ pp (S.toList visited)+                             ,"new:" $\ pp new+                             ])+                False = undefined+  -}+  go 0 _ _  = False+  go _ _ [] = True+  go i visited new =+    let both = visited `S.union` S.fromList new+    in  go (i-1) both (unnamedStep rs new \\ S.toList both)++union :: Ord a => [a] -> [a] -> [a]+union (S.fromList -> s1) (S.fromList -> s2) = S.toList (s1 `S.union` s2)++(\\) :: Ord a => [a] -> [a] -> [a]+(\\) (S.fromList -> s1) (S.fromList -> s2) = S.toList (s1 S.\\ s2)++inst :: (Ord a,Ord c) => [Rule (Sk c) a] -> [Closed (Sk c)]+inst rules = runFresh $+  do i <- fresh+     return (concatMap (instPre i) rules)++instPre :: (Ord a,Ord c) => Sk c -> Rule (Sk c) a -> [Closed (Sk c)]+instPre c r =+  let su = [ (v,Con c []) | v <- ruleVars r ]+  in  map (close su) (rule_pre r)++close :: Eq a => [(a,Closed c)] -> Expr c a -> Closed c+close su (Var v)    = fromMaybe (ERROR("Unbound variable, did you run --type-skolem-conjecture?")) (lookup v su)+close su (Con c es) = Con c (map (close su) es)++unnamedStep :: (Ord c,Ord a) => [Rule c a] -> [Closed c] -> [Closed c]+unnamedStep rs = usort . map (snd . snd) . step (map ((,) ()) rs)++step :: (Ord name,Ord c,Ord a) => [(name,Rule c a)] -> [Closed c] -> [(name,Inst a c)]+step rs es = usort [ (name,i) | (name,r) <- rs, i <- activateOne r es ]++type Inst a c = (Subst a Void c,Closed c)++activateOne :: (Ord c,Ord a) => Rule c a -> [Closed c] -> [Inst a c]+activateOne (Rule ps q) es = [ (su,close su q) | su <- go ps ]+  where+    go []     = [[]] -- success, return the empty substitution+    go (p:ps) = [ su+                | e <- es+                , Just sua <- [match p e]+                , sub <- go ps+                , Just su <- [merge sua sub]+                ]+++type Subst a b c = [(a,Expr c b)]++merge :: (Ord a,Ord b,Ord c) => Subst a b c -> Subst a b c -> Maybe (Subst a b c)+merge xs ys =+  do guard (and [ maybe True (e ==) (lookup v ys) | (v,e) <- xs ])+     Just (unionOn fst xs ys)++merges :: (Ord a,Ord b,Ord c) => [Subst a b c] -> Maybe (Subst a b c)+merges = foldM merge []++match :: (Ord a,Ord b,Ord c) => Expr c a -> Expr c b -> Maybe (Subst a b c)+match (Var x) e = Just [(x,e)]+match (Con c xs) (Con d ys)+  | c == d+  , length xs == length ys+  = merges =<< zipWithM match xs ys+match _ _ = Nothing++data Void = Void !Void+  deriving (Eq,Ord,Show)++absurd :: Void -> a+absurd (Void v) = absurd v++instance Pretty Void where+  pp = absurd+
src/Tip/WorkerWrapper.hs view
@@ -29,7 +29,7 @@  workerWrapper :: Name a => [WorkerWrapper a] -> Theory a -> Fresh (Theory a) workerWrapper wws thy@Theory{..} =-  transformExprInM updateUse thy' >>= simplifyTheory gently+  transformExprInM updateUse thy' >>= simplifyTheory gentlyNoInline   where     thy' = thy { thy_funcs = map updateDef thy_funcs }     m = Map.fromList [(func_name (ww_func ww), ww) | ww <- wws]
tip-lib.cabal view
@@ -1,5 +1,5 @@ name:                tip-lib-version:             0.1.2+version:             0.2 synopsis:            tons of inductive problems - support library and tools description:         This package provides a tool for processing inductive theorem proving problems in TIP format (see the homepage for details). homepage:            http://tip-org.github.io@@ -34,6 +34,7 @@     Tip.Pretty.Why3     Tip.Pretty.Isabelle     Tip.Pretty.Haskell+    Tip.Pretty.TFF      Tip.Parser @@ -46,21 +47,29 @@     Tip.Haskell.Translate     Tip.Haskell.Rename     Tip.CallGraph+    Tip.Utils.Specialiser++    Tip.Pass.Booleans   other-modules:+    Tip.Pass.AddMatch     Tip.Pass.AxiomatizeFuncdefs-    Tip.Pass.Lift-    Tip.Pass.Booleans+    Tip.Pass.AxiomatizeDatadecls     Tip.Pass.CommuteMatch-    Tip.Pass.AddMatch+    Tip.Pass.Conjecture     Tip.Pass.CSEMatch-    Tip.Pass.RemoveNewtype-    Tip.Pass.RemoveMatch-    Tip.Pass.NegateConjecture-    Tip.Pass.EqualFunctions-    Tip.Pass.Uncurry-    Tip.Pass.Pipeline+    Tip.Pass.DropSuffix     Tip.Pass.EliminateDeadCode+    Tip.Pass.EqualFunctions     Tip.Pass.FillInCases+    Tip.Pass.Induction+    Tip.Pass.Lift+    Tip.Pass.Monomorphise+    Tip.Pass.Pipeline+    Tip.Pass.RemoveMatch+    Tip.Pass.RemoveNewtype+    Tip.Pass.SelectConjecture+    Tip.Pass.Uncurry+    Tip.Pass.Concretise      Tip.Parser.ErrM     Tip.Parser.AbsTIP@@ -74,12 +83,14 @@   default-language:    Haskell2010   build-depends:       base >=4 && <5,                        geniplate-mirror >=0.7.1,+                       genifunctors >= 0.3,                        split,                        containers,                        mtl,                        pretty,                        array,-                       optparse-applicative+                       optparse-applicative,+                       structural-induction >= 0.3 && < 0.4   build-tools:         alex, happy  executable tip@@ -87,6 +98,6 @@   default-language:    Haskell2010   build-depends:       base,                        tip-lib,-                       pretty-show,                        pretty,+                       filepath,                        optparse-applicative