clafer 0.4.0 → 0.4.1
raw patch · 25 files changed
+2597/−2311 lines, 25 filesdep +mtl-compatdep +transformers-compatdep ~HTTPdep ~QuickCheckdep ~aeson
Dependencies added: mtl-compat, transformers-compat
Dependency ranges changed: HTTP, QuickCheck, aeson, array, base, bytestring, clafer, cmdargs, containers, directory, filepath, lens, lens-aeson, mtl, network, network-uri, parsec, process, string-conversions, text, transformers
Files
- CHANGES.md +4/−0
- Makefile +2/−2
- README.md +14/−10
- clafer.cabal +52/−45
- dist/build/Language/Clafer/Front/LexClafer.hs +27/−15
- dist/build/Language/Clafer/Front/ParClafer.hs +1800/−1727
- src/Language/Clafer.hs +27/−55
- src/Language/Clafer/Common.hs +14/−18
- src/Language/Clafer/Css.hs +1/−0
- src/Language/Clafer/Front/AbsClafer.hs +34/−0
- src/Language/Clafer/Front/LexClafer.x +14/−4
- src/Language/Clafer/Front/ParClafer.y +163/−153
- src/Language/Clafer/Front/PrintClafer.hs +70/−64
- src/Language/Clafer/Generator/Alloy.hs +18/−7
- src/Language/Clafer/Generator/Choco.hs +18/−5
- src/Language/Clafer/Generator/Html.hs +62/−40
- src/Language/Clafer/Generator/Python.hs +3/−3
- src/Language/Clafer/Intermediate/Desugarer.hs +3/−2
- src/Language/Clafer/Intermediate/ResolverName.hs +54/−48
- src/Language/Clafer/Intermediate/ResolverType.hs +104/−74
- src/Language/Clafer/Intermediate/StringAnalyzer.hs +8/−6
- src/Language/Clafer/Intermediate/Tracing.hs +1/−0
- src/Language/Clafer/Intermediate/TypeSystem.hs +84/−17
- src/Language/Clafer/Optimizer/Optimizer.hs +17/−16
- src/Language/ClaferT.hs +3/−0
CHANGES.md view
@@ -1,3 +1,7 @@+# Clafer Version 0.4.1 released on Sep 1, 2015 + +[Release](https://github.com/gsdlab/clafer/pull/71) + # Clafer Version 0.4.0 released on Jul 28, 2015 [Release](https://github.com/gsdlab/clafer/pull/68)
Makefile view
@@ -60,7 +60,7 @@ .PHONY : test test: - cabal test + cabal test 2>/dev/null || : # supress error message and exit code if fail $(MAKE) -C $(TEST_DIR) test generateAlloyJSPythonHTMLDot: @@ -83,7 +83,7 @@ $(MAKE) -C $(TEST_DIR) clean tags: - hasktags --ctags --extendedctag . + hasktags --ctags --extendedctag --ignore-close-implementation . codex: codex update
README.md view
@@ -1,6 +1,9 @@+[](https://hackage.haskell.org/package/clafer) +[](http://travis-ci.org/gsdlab/clafer) + # Clafer, the Language -v0.4.0 +v0.4.1 [Clafer](http://clafer.org) is a general-purpose lightweight structural modeling language developed by [GSD Lab](http://gsd.uwaterloo.ca/), [University of Waterloo](http://uwaterloo.ca), and @@ -64,7 +67,7 @@ ### Installation from binaries -Binary distributions of the release 0.4.0 of Clafer Tools for Windows, Mac, and Linux, +Binary distributions of the release 0.4.1 of Clafer Tools for Windows, Mac, and Linux, can be downloaded from [Clafer Tools - Binary Distributions](http://gsd.uwaterloo.ca/clafer-tools-binary-distributions). @@ -77,12 +80,12 @@ * [GHC](https://www.haskell.org/downloads) v7.10.* -Clafer is now available on [Hackage](http://hackage.haskell.org/package/clafer-0.4.0/) and it can be installed using +Clafer is now available on [Hackage](http://hackage.haskell.org/package/clafer-0.4.1/) and it can be installed using 1. `cabal update` 2. `cabal install clafer` -3. on Windows `cd C:\Users\<user>\AppData\Roaming\cabal\i386-windows-ghc-7.10.1\clafer-0.4.0` -4. on Linux `ca ~/.cabal/share/x86_64-linux-ghc-7.10.1/clafer-0.4.0/` +3. on Windows `cd C:\Users\<user>\AppData\Roaming\cabal\i386-windows-ghc-7.10.2\clafer-0.4.1` +4. on Linux `ca ~/.cabal/share/x86_64-linux-ghc-7.10.2/clafer-0.4.1/` 5. to automatically download Alloy jars, execute * `cd tools` * `make` @@ -139,15 +142,14 @@ See [clafer-vim](https://github.com/wasowski/clafer-vim) -Usage -===== +## Usage -## Clafer Compiler +### Clafer Compiler (As printed by `clafer --help`) ``` -Clafer 0.4.0 +Clafer 0.4.1 clafer [OPTIONS] [FILE] @@ -255,7 +257,9 @@ * `//# STATS` - marks the insertion point for module statistics. The statistics can be omitted using the argument `--no-stats`. * `//# SUMMARY` - shorthand for `//# GRAPH` and `//# STATS` -He is some information about the development of the clafer compiler. +# Developing Clafer + +Here is some information about the development of the Clafer compiler. ## Branching
clafer.cabal view
@@ -1,5 +1,5 @@ Name: clafer -Version: 0.4.0 +Version: 0.4.1 Synopsis: Compiles Clafer models to other formats: Alloy, JavaScript, JSON, HTML, Dot. Description: Clafer is a general purpose, lightweight, structural modeling language developed at GSD Lab, University of Waterloo, and MODELS group at IT University of Copenhagen. Lightweight modeling aims at improving the understanding of the problem domain in the early stages of software development and determining the requirements with fewer defects. Clafer's goal is to make modeling more accessible to a wider range of users and domains. The tool provides a reference language implementation. It translates models to other formats (e.g. Alloy, JavaScript, JSON) to allow for reasoning with existing tools. Homepage: http://clafer.org @@ -10,62 +10,68 @@ Stability: Experimental Category: Model Build-type: Simple +tested-with: GHC == 7.8.3 + , GHC == 7.8.4 + , GHC == 7.10.1 + , GHC == 7.10.2 Cabal-version: >= 1.18 data-files: README.md - , CHANGES.md - , logo.pdf - , Makefile - , tools/ecore2clafer.jar - , tools/Makefile + , CHANGES.md + , logo.pdf + , Makefile + , tools/Makefile + , tools/ecore2clafer.jar source-repository head type: git location: git://github.com/gsdlab/clafer.git Executable clafer - build-tools: ghc >= 7.10.1 + build-tools: ghc >= 7.8.3 default-language: Haskell2010 main-is: clafer.hs hs-source-dirs: src-cmd - build-depends: base >= 4.8.0.0 && < 5 - , containers >= 0.5.6.2 - , filepath >= 1.4.0.0 - , process >= 1.2.3.0 + build-depends: base >= 4.7.0.1 && < 5 + , containers >= 0.5.5.1 + , filepath >= 1.3.0.2 + , process >= 1.2.0.0 - , mtl >= 2.2.1 + , mtl >= 2.1.3.1 - , cmdargs >= 0.10.13 + , cmdargs >= 0.10.12 , split >= 0.2.2 - , clafer == 0.4.0 + , clafer == 0.4.1 other-modules: Paths_clafer library - build-tools: ghc >= 7.10.1 + build-tools: ghc >= 7.8.3 default-language: Haskell2010 - build-depends: array >= 0.5.1.0 - , base >= 4.8.0.0 && < 5 - , bytestring >= 0.10.6.0 - , containers >= 0.5.6.2 - , directory >= 1.2.2.0 - , filepath >= 1.4.0.0 - , process >= 1.2.3.0 - , transformers >= 0.4.2.0 + build-depends: array >= 0.5.0.0 + , base >= 4.7.0.1 && < 5 + , bytestring >= 0.10.4.0 + , containers >= 0.5.5.1 + , directory >= 1.2.1.0 + , filepath >= 1.3.0.2 + , process >= 1.2.0.0 + , transformers >= 0.3.0.0 - , HTTP >= 4000.2.20 - , mtl >= 2.2.1 - , network >= 2.6.2.1 - , parsec >= 3.1.9 - , text >= 1.2.1.1 + , HTTP >= 4000.2.10 + , mtl >= 2.1.3.1 + , network >= 2.4.2.3 + , parsec >= 3.1.5 + , text >= 1.1.0.0 , aeson >= 0.8.0.2 - , cmdargs >= 0.10.13 + , cmdargs >= 0.10.12 , data-stringmap >= 1.0.1.1 , executable-path >= 0.0.3 , json-builder >= 0.3 - , lens >= 4.11.1 - , lens-aeson >= 1.0.0.4 - , network-uri >= 2.6.0.3 - , string-conversions >= 0.4 + , lens >= 4.6.0.1 + , lens-aeson >= 1.0.0.3 + , network-uri >= 2.5.0.0 + , string-conversions >= 0.3.0.3 , split >= 0.2.2 + , transformers-compat >= 0.3 && < 0.5 + , mtl-compat >= 0.2.1 hs-source-dirs: src ghc-options: -Wall -fno-warn-orphans @@ -108,28 +114,29 @@ other-modules: GetURL Test-Suite test-suite - build-tools: ghc >= 7.10.1 + build-tools: ghc >= 7.8.3 default-language: Haskell2010 type: exitcode-stdio-1.0 main-is: test-suite.hs hs-source-dirs: test - build-depends: base >= 4.8.0.0 && < 5 - , containers >= 0.5.6.2 - , directory >= 1.2.2.0 - , filepath >= 1.4.0.0 + build-depends: base >= 4.7.0.1 && < 5 + , containers >= 0.5.5.1 + , directory >= 1.2.1.0 + , filepath >= 1.3.0.2 , HUnit >= 1.2.5.2 - , mtl >= 2.2.1 - , QuickCheck >= 2.8.1 + , mtl >= 2.1.3.1 + , QuickCheck >= 2.6 , data-stringmap >= 1.0.1.1 - , lens >= 4.11.1 - , lens-aeson >= 1.0.0.4 + , lens >= 4.6.0.1 + , lens-aeson >= 1.0.0.3 , tasty >= 0.10.1.2 , tasty-hunit >= 0.9.2 , tasty-th >= 0.1.3 - - , clafer == 0.4.0 + , transformers-compat >= 0.3 && < 0.5 + , mtl-compat >= 0.2.1 + , clafer == 0.4.1 ghc-options: -Wall @@ -141,7 +148,7 @@ , Suite.TypeSystem Test-suite doctests - build-tools: ghc >= 7.10.1 + build-tools: ghc >= 7.8.3 default-language: Haskell2010 type: exitcode-stdio-1.0 ghc-options: -threaded -Wall
dist/build/Language/Clafer/Front/LexClafer.hs view
@@ -29,19 +29,19 @@ import GlaExts #endif alex_base :: AlexAddr -alex_base = AlexA# "\xf8\xff\xff\xff\x4c\x00\x00\x00\xcc\x00\x00\x00\x4c\x01\x00\x00\x4c\x02\x00\x00\x0c\x02\x00\x00\x00\x00\x00\x00\x7d\x02\x00\x00\x7d\x03\x00\x00\x34\x00\x00\x00\x3d\x03\x00\x00\x13\x04\x00\x00\x00\x00\x00\x00\x7f\x03\x00\x00\x93\x04\x00\x00\x08\x05\x00\x00\xd6\xff\xff\xff\x4d\x00\x00\x00\x61\x00\x00\x00\xea\xff\xff\xff\x08\x06\x00\x00\xc8\x05\x00\x00\x00\x00\x00\x00\xbe\x06\x00\x00\x00\x00\x00\x00\x7e\x00\x00\x00\xe7\xff\xff\xff\xe8\xff\xff\xff\x4f\x00\x00\x00\xd5\xff\xff\xff\xd7\xff\xff\xff\x00\x00\x00\x00\x9b\xff\xff\xff\xde\xff\xff\xff\x52\x00\x00\x00\xf1\xff\xff\xff\x0e\x00\x00\x00\x79\x00\x00\x00\x8c\x00\x00\x00\x99\x06\x00\x00\x00\x00\x00\x00\x97\x07\x00\x00"# +alex_base = AlexA# "\xf8\xff\xff\xff\x4c\x00\x00\x00\xef\x00\x00\x00\x92\x01\x00\x00\x35\x02\x00\x00\xd8\x02\x00\x00\x8d\xff\xff\xff\x98\xff\xff\xff\x99\xff\xff\xff\xa6\xff\xff\xff\x9b\xff\xff\xff\xa3\xff\xff\xff\xa0\xff\xff\xff\xa1\xff\xff\xff\xd8\x03\x00\x00\x92\xff\xff\xff\x98\x03\x00\x00\x98\x04\x00\x00\x93\xff\xff\xff\x58\x04\x00\x00\x58\x05\x00\x00\x18\x05\x00\x00\x9c\x05\x00\x00\x20\x06\x00\x00\xa4\x06\x00\x00\x28\x07\x00\x00\xfe\x07\x00\x00\xfe\x08\x00\x00\x34\x00\x00\x00\x69\x07\x00\x00\x7e\x09\x00\x00\x3e\x09\x00\x00\xbe\x09\x00\x00\x33\x0a\x00\x00\x4d\x00\x00\x00\x61\x00\x00\x00\x79\x00\x00\x00\x7e\x00\x00\x00\xe5\xff\xff\xff\x4f\x00\x00\x00\xd4\xff\xff\xff\xd5\xff\xff\xff\xed\xff\xff\xff\xb3\xff\xff\xff\x00\x00\x00\x00\xbc\xff\xff\xff\xd7\xff\xff\xff\x3d\x00\x00\x00\xf1\xff\xff\xff\x2d\x00\x00\x00\x52\x00\x00\x00\x8c\x00\x00\x00\x1d\x01\x00\x00\x03\x0b\x00\x00\x00\x00\x00\x00\x28\x0b\x00\x00\x79\x0b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xfd\x0b\x00\x00\x00\x00\x00\x00\x81\x0c\x00\x00"# alex_table :: AlexAddr -alex_table = AlexA# "\x00\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x1f\x00\x0b\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x17\x00\x1f\x00\x19\x00\x1d\x00\x0f\x00\x1f\x00\x1f\x00\x1f\x00\x13\x00\x1f\x00\x1f\x00\x1f\x00\x24\x00\x1b\x00\x1f\x00\x1c\x00\x23\x00\x1a\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x1e\x00\x1f\x00\x22\x00\x21\x00\x1e\x00\x1f\x00\x1f\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x1f\x00\x1f\x00\x1f\x00\x0f\x00\x00\x00\x1f\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x1f\x00\x20\x00\x1f\x00\x01\x00\x00\x00\x00\x00\x00\x00\x12\x00\x18\x00\x1f\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x1f\x00\x21\x00\x1f\x00\x21\x00\x0f\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x00\x00\x00\x00\x00\x00\x19\x00\x00\x00\x00\x00\x00\x00\x0f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x0f\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0e\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\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\x04\x00\x05\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x14\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x02\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x15\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x04\x00\x05\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x28\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x00\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x09\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x08\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x14\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x15\x00\x02\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0d\x00\x03\x00\x06\x00\x06\x00\x06\x00\x07\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x00\x00\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x12\x00\x0f\x00\x06\x00\x07\x00\x09\x00\x0a\x00\x0d\x00\x08\x00\x17\x00\x19\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x0c\x00\x2c\x00\x0b\x00\x1a\x00\x25\x00\x28\x00\x21\x00\x2c\x00\x38\x00\x2c\x00\x32\x00\x2c\x00\x2c\x00\x2c\x00\x31\x00\x26\x00\x2c\x00\x27\x00\x30\x00\x2a\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x29\x00\x2c\x00\x2f\x00\x2e\x00\x29\x00\x2c\x00\x2c\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x2b\x00\x2c\x00\x2c\x00\x21\x00\x2c\x00\x2c\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x2c\x00\x2d\x00\x2c\x00\x01\x00\x2c\x00\x2c\x00\x2c\x00\x2e\x00\x39\x00\x2c\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x00\x00\x2e\x00\x24\x00\x00\x00\x21\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\x25\x00\x00\x00\x00\x00\x00\x00\x21\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x21\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\x00\x00\x00\x00\x00\x00\x00\x00\x22\x00\x20\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\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\x14\x00\x15\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3a\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x18\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\x11\x00\x13\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\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\x11\x00\x13\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x16\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\x0e\x00\x10\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05\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\x0e\x00\x10\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x05\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\x0e\x00\x10\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x04\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\x0e\x00\x10\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x03\x00\x00\x00\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\x11\x00\x13\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x02\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\x11\x00\x13\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x14\x00\x15\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x36\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x00\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x1b\x00\x1d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x37\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x23\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\xff\xff\x00\x00\x00\x00\x00\x00\x37\x00\x00\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1e\x00\x1f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x02\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\x11\x00\x13\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x04\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\x0e\x00\x10\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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 :: AlexAddr -alex_check = AlexA# "\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\x26\x00\x2a\x00\x3d\x00\x2b\x00\x3d\x00\x3e\x00\x2f\x00\x7c\x00\x20\x00\x21\x00\x22\x00\x23\x00\x3e\x00\x25\x00\x26\x00\x2e\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x2a\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x22\x00\xff\xff\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\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\x2a\x00\xff\xff\xff\xff\xff\xff\x2d\x00\x2f\x00\x2d\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x3a\x00\x3e\x00\x3c\x00\x3d\x00\x5c\x00\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\x20\x00\xff\xff\xff\xff\xff\xff\x6e\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2e\x00\x74\x00\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\xff\xff\xc3\x00\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\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\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\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x2a\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\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\x22\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x0a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x65\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\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\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x79\x00\x6f\x00\x6f\x00\x63\x00\x6f\x00\x68\x00\x6c\x00\x6c\x00\x7c\x00\x7c\x00\x2b\x00\x3d\x00\x3d\x00\x3e\x00\x61\x00\x3e\x00\x63\x00\x2a\x00\x20\x00\x21\x00\x22\x00\x23\x00\x2f\x00\x25\x00\x26\x00\x2e\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\x7c\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\x22\x00\x2a\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\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\x2a\x00\x3a\x00\x26\x00\x3c\x00\x3d\x00\x2f\x00\x2d\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\x3e\x00\x2d\x00\xff\xff\x5c\x00\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\x20\x00\xff\xff\xff\xff\xff\xff\x6e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x74\x00\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\x2e\x00\xc3\x00\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x5d\x00\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7c\x00\xff\xff\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\x5d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7c\x00\xff\xff\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\x5d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7c\x00\xff\xff\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\x5d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7c\x00\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x7c\x00\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\x7c\x00\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\x7c\x00\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\x7c\x00\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\x2a\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x22\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\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\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\x65\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\x0a\x00\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x7c\x00\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\x7c\x00\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00"# alex_deflt :: AlexAddr -alex_deflt = AlexA# "\xff\xff\x0b\x00\xff\xff\xff\xff\x0b\x00\x0b\x00\x0c\x00\x0c\x00\x0f\x00\xff\xff\x0f\x00\x0b\x00\x16\x00\x16\x00\xff\xff\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\x17\x00\x17\x00\x17\x00\x17\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"# +alex_deflt = AlexA# "\xff\xff\x1a\x00\x19\x00\x19\x00\x17\x00\x17\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x17\x00\xff\xff\x17\x00\x19\x00\xff\xff\x19\x00\x1a\x00\x1a\x00\x17\x00\x17\x00\x19\x00\x19\x00\x1a\x00\x21\x00\xff\xff\x21\x00\x38\x00\x38\x00\xff\xff\x21\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\xff\xff\xff\xff\x19\x00\xff\xff\x17\x00"# -alex_accept = listArray (0::Int,41) [AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccSkip,AlexAccSkip,AlexAccSkip,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),AlexAcc (alex_action_6),AlexAcc (alex_action_7),AlexAcc (alex_action_8)] -{-# LINE 43 "src\Language\Clafer\Front\LexClafer.x" #-} +alex_accept = listArray (0::Int,61) [AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccSkip,AlexAcc (alex_action_1),AlexAcc (alex_action_1),AlexAcc (alex_action_1),AlexAcc (alex_action_1),AlexAcc (alex_action_1),AlexAcc (alex_action_1),AlexAcc (alex_action_1),AlexAcc (alex_action_1),AlexAcc (alex_action_1),AlexAcc (alex_action_1),AlexAcc (alex_action_1),AlexAcc (alex_action_1),AlexAcc (alex_action_1),AlexAcc (alex_action_2),AlexAcc (alex_action_3),AlexAcc (alex_action_4),AlexAcc (alex_action_5),AlexAcc (alex_action_6),AlexAcc (alex_action_7),AlexAcc (alex_action_8),AlexAcc (alex_action_9),AlexAcc (alex_action_9),AlexAcc (alex_action_10),AlexAcc (alex_action_10)] +{-# LINE 45 "src\Language\Clafer\Front\LexClafer.x" #-} tok :: (Posn -> String -> Token) -> (Posn -> String -> Token) @@ -62,6 +62,10 @@ | T_PosReal !String | T_PosString !String | T_PosIdent !String + | T_PosLineComment !String + | T_PosBlockComment !String + | T_PosAlloy !String + | T_PosChoco !String deriving (Eq,Show,Ord) @@ -101,6 +105,10 @@ PT _ (T_PosReal s) -> s PT _ (T_PosString s) -> s PT _ (T_PosIdent s) -> s + PT _ (T_PosLineComment s) -> s + PT _ (T_PosBlockComment s) -> s + PT _ (T_PosAlloy s) -> s + PT _ (T_PosChoco s) -> s data BTree = N | B String Tok BTree BTree deriving (Show) @@ -114,7 +122,7 @@ | s == a = t resWords :: BTree -resWords = b ">>" 33 (b "." 17 (b "**" 9 (b "&&" 5 (b "#" 3 (b "!=" 2 (b "!" 1 N N) N) (b "%" 4 N N)) (b ")" 7 (b "(" 6 N N) (b "*" 8 N N))) (b "-" 13 (b "++" 11 (b "+" 10 N N) (b "," 12 N N)) (b "->" 15 (b "--" 14 N N) (b "->>" 16 N N)))) (b "<:" 25 (b ":=" 21 (b "/" 19 (b ".." 18 N N) (b ":" 20 N N)) (b ";" 23 (b ":>" 22 N N) (b "<" 24 N N))) (b "=" 29 (b "<=" 27 (b "<<" 26 N N) (b "<=>" 28 N N)) (b ">" 31 (b "=>" 30 N N) (b ">=" 32 N N))))) (b "min" 49 (b "assert" 41 (b "]" 37 (b "[" 35 (b "?" 34 N N) (b "\\" 36 N N)) (b "abstract" 39 (b "`" 38 N N) (b "all" 40 N N))) (b "if" 45 (b "else" 43 (b "disj" 42 N N) (b "enum" 44 N N)) (b "lone" 47 (b "in" 46 N N) (b "max" 48 N N)))) (b "some" 57 (b "one" 53 (b "no" 51 (b "mux" 50 N N) (b "not" 52 N N)) (b "or" 55 (b "opt" 54 N N) (b "product" 56 N N))) (b "{" 61 (b "then" 59 (b "sum" 58 N N) (b "xor" 60 N N)) (b "||" 63 (b "|" 62 N N) (b "}" 64 N N))))) +resWords = b ">=" 33 (b "->>" 17 (b "*" 9 (b "&" 5 (b "#" 3 (b "!=" 2 (b "!" 1 N N) N) (b "%" 4 N N)) (b "(" 7 (b "&&" 6 N N) (b ")" 8 N N))) (b "," 13 (b "+" 11 (b "**" 10 N N) (b "++" 12 N N)) (b "--" 15 (b "-" 14 N N) (b "->" 16 N N)))) (b "<" 25 (b ":" 21 (b ".." 19 (b "." 18 N N) (b "/" 20 N N)) (b ":>" 23 (b ":=" 22 N N) (b ";" 24 N N))) (b "<=>" 29 (b "<<" 27 (b "<:" 26 N N) (b "<=" 28 N N)) (b "=>" 31 (b "=" 30 N N) (b ">" 32 N N))))) (b "min" 50 (b "assert" 42 (b "]" 38 (b "[" 36 (b "?" 35 (b ">>" 34 N N) N) (b "\\" 37 N N)) (b "abstract" 40 (b "`" 39 N N) (b "all" 41 N N))) (b "if" 46 (b "else" 44 (b "disj" 43 N N) (b "enum" 45 N N)) (b "lone" 48 (b "in" 47 N N) (b "max" 49 N N)))) (b "some" 58 (b "one" 54 (b "no" 52 (b "mux" 51 N N) (b "not" 53 N N)) (b "or" 56 (b "opt" 55 N N) (b "product" 57 N N))) (b "{" 62 (b "then" 60 (b "sum" 59 N N) (b "xor" 61 N N)) (b "||" 64 (b "|" 63 N N) (b "}" 65 N N))))) where b s n = let bs = id s in B bs (TS bs n) @@ -196,19 +204,23 @@ , 0x80 + oc Data.Bits..&. 0x3f ] -alex_action_3 = tok (\p s -> PT p (eitherResIdent (TV . share) s)) -alex_action_4 = tok (\p s -> PT p (eitherResIdent (T_PosInteger . share) s)) -alex_action_5 = tok (\p s -> PT p (eitherResIdent (T_PosDouble . share) s)) -alex_action_6 = tok (\p s -> PT p (eitherResIdent (T_PosReal . share) s)) -alex_action_7 = tok (\p s -> PT p (eitherResIdent (T_PosString . share) s)) -alex_action_8 = tok (\p s -> PT p (eitherResIdent (T_PosIdent . share) s)) -alex_action_9 = tok (\p s -> PT p (eitherResIdent (TV . share) s)) +alex_action_1 = tok (\p s -> PT p (eitherResIdent (TV . share) s)) +alex_action_2 = tok (\p s -> PT p (eitherResIdent (T_PosInteger . share) s)) +alex_action_3 = tok (\p s -> PT p (eitherResIdent (T_PosDouble . share) s)) +alex_action_4 = tok (\p s -> PT p (eitherResIdent (T_PosReal . share) s)) +alex_action_5 = tok (\p s -> PT p (eitherResIdent (T_PosString . share) s)) +alex_action_6 = tok (\p s -> PT p (eitherResIdent (T_PosIdent . share) s)) +alex_action_7 = tok (\p s -> PT p (eitherResIdent (T_PosLineComment . share) s)) +alex_action_8 = tok (\p s -> PT p (eitherResIdent (T_PosBlockComment . share) s)) +alex_action_9 = tok (\p s -> PT p (eitherResIdent (T_PosAlloy . share) s)) +alex_action_10 = tok (\p s -> PT p (eitherResIdent (T_PosChoco . share) s)) +alex_action_11 = tok (\p s -> PT p (eitherResIdent (TV . share) s)) {-# LINE 1 "templates\GenericTemplate.hs" #-} {-# LINE 1 "templates\\GenericTemplate.hs" #-} {-# LINE 1 "<built-in>" #-} {-# LINE 1 "<command-line>" #-} {-# LINE 8 "<command-line>" #-} -{-# LINE 1 "C:\\dev\\MinGHC-7.10.1\\ghc-7.10.1\\lib/include\\ghcversion.h" #-} +{-# LINE 1 "C:\\dev\\ghc-7.10.2\\lib/include\\ghcversion.h" #-}
dist/build/Language/Clafer/Front/ParClafer.hs view
@@ -48,1733 +48,1806 @@ happyOut12 :: (HappyAbsSyn ) -> (PosIdent) happyOut12 x = Happy_GHC_Exts.unsafeCoerce# x {-# INLINE happyOut12 #-} -happyIn13 :: (Module) -> (HappyAbsSyn ) -happyIn13 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn13 #-} -happyOut13 :: (HappyAbsSyn ) -> (Module) -happyOut13 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut13 #-} -happyIn14 :: (Declaration) -> (HappyAbsSyn ) -happyIn14 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn14 #-} -happyOut14 :: (HappyAbsSyn ) -> (Declaration) -happyOut14 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut14 #-} -happyIn15 :: (Clafer) -> (HappyAbsSyn ) -happyIn15 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn15 #-} -happyOut15 :: (HappyAbsSyn ) -> (Clafer) -happyOut15 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut15 #-} -happyIn16 :: (Constraint) -> (HappyAbsSyn ) -happyIn16 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn16 #-} -happyOut16 :: (HappyAbsSyn ) -> (Constraint) -happyOut16 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut16 #-} -happyIn17 :: (Assertion) -> (HappyAbsSyn ) -happyIn17 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn17 #-} -happyOut17 :: (HappyAbsSyn ) -> (Assertion) -happyOut17 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut17 #-} -happyIn18 :: (Goal) -> (HappyAbsSyn ) -happyIn18 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn18 #-} -happyOut18 :: (HappyAbsSyn ) -> (Goal) -happyOut18 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut18 #-} -happyIn19 :: (Abstract) -> (HappyAbsSyn ) -happyIn19 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn19 #-} -happyOut19 :: (HappyAbsSyn ) -> (Abstract) -happyOut19 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut19 #-} -happyIn20 :: (Elements) -> (HappyAbsSyn ) -happyIn20 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn20 #-} -happyOut20 :: (HappyAbsSyn ) -> (Elements) -happyOut20 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut20 #-} -happyIn21 :: (Element) -> (HappyAbsSyn ) -happyIn21 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn21 #-} -happyOut21 :: (HappyAbsSyn ) -> (Element) -happyOut21 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut21 #-} -happyIn22 :: (Super) -> (HappyAbsSyn ) -happyIn22 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn22 #-} -happyOut22 :: (HappyAbsSyn ) -> (Super) -happyOut22 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut22 #-} -happyIn23 :: (Reference) -> (HappyAbsSyn ) -happyIn23 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn23 #-} -happyOut23 :: (HappyAbsSyn ) -> (Reference) -happyOut23 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut23 #-} -happyIn24 :: (Init) -> (HappyAbsSyn ) -happyIn24 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn24 #-} -happyOut24 :: (HappyAbsSyn ) -> (Init) -happyOut24 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut24 #-} -happyIn25 :: (InitHow) -> (HappyAbsSyn ) -happyIn25 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn25 #-} -happyOut25 :: (HappyAbsSyn ) -> (InitHow) -happyOut25 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut25 #-} -happyIn26 :: (GCard) -> (HappyAbsSyn ) -happyIn26 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn26 #-} -happyOut26 :: (HappyAbsSyn ) -> (GCard) -happyOut26 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut26 #-} -happyIn27 :: (Card) -> (HappyAbsSyn ) -happyIn27 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn27 #-} -happyOut27 :: (HappyAbsSyn ) -> (Card) -happyOut27 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut27 #-} -happyIn28 :: (NCard) -> (HappyAbsSyn ) -happyIn28 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn28 #-} -happyOut28 :: (HappyAbsSyn ) -> (NCard) -happyOut28 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut28 #-} -happyIn29 :: (ExInteger) -> (HappyAbsSyn ) -happyIn29 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn29 #-} -happyOut29 :: (HappyAbsSyn ) -> (ExInteger) -happyOut29 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut29 #-} -happyIn30 :: (Name) -> (HappyAbsSyn ) -happyIn30 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn30 #-} -happyOut30 :: (HappyAbsSyn ) -> (Name) -happyOut30 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut30 #-} -happyIn31 :: (Exp) -> (HappyAbsSyn ) -happyIn31 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn31 #-} -happyOut31 :: (HappyAbsSyn ) -> (Exp) -happyOut31 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut31 #-} -happyIn32 :: (Exp) -> (HappyAbsSyn ) -happyIn32 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn32 #-} -happyOut32 :: (HappyAbsSyn ) -> (Exp) -happyOut32 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut32 #-} -happyIn33 :: (Exp) -> (HappyAbsSyn ) -happyIn33 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn33 #-} -happyOut33 :: (HappyAbsSyn ) -> (Exp) -happyOut33 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut33 #-} -happyIn34 :: (Exp) -> (HappyAbsSyn ) -happyIn34 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn34 #-} -happyOut34 :: (HappyAbsSyn ) -> (Exp) -happyOut34 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut34 #-} -happyIn35 :: (Exp) -> (HappyAbsSyn ) -happyIn35 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn35 #-} -happyOut35 :: (HappyAbsSyn ) -> (Exp) -happyOut35 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut35 #-} -happyIn36 :: (Exp) -> (HappyAbsSyn ) -happyIn36 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn36 #-} -happyOut36 :: (HappyAbsSyn ) -> (Exp) -happyOut36 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut36 #-} -happyIn37 :: (Exp) -> (HappyAbsSyn ) -happyIn37 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn37 #-} -happyOut37 :: (HappyAbsSyn ) -> (Exp) -happyOut37 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut37 #-} -happyIn38 :: (Exp) -> (HappyAbsSyn ) -happyIn38 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn38 #-} -happyOut38 :: (HappyAbsSyn ) -> (Exp) -happyOut38 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut38 #-} -happyIn39 :: (Exp) -> (HappyAbsSyn ) -happyIn39 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn39 #-} -happyOut39 :: (HappyAbsSyn ) -> (Exp) -happyOut39 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut39 #-} -happyIn40 :: (Exp) -> (HappyAbsSyn ) -happyIn40 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn40 #-} -happyOut40 :: (HappyAbsSyn ) -> (Exp) -happyOut40 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut40 #-} -happyIn41 :: (Exp) -> (HappyAbsSyn ) -happyIn41 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn41 #-} -happyOut41 :: (HappyAbsSyn ) -> (Exp) -happyOut41 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut41 #-} -happyIn42 :: (Exp) -> (HappyAbsSyn ) -happyIn42 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn42 #-} -happyOut42 :: (HappyAbsSyn ) -> (Exp) -happyOut42 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut42 #-} -happyIn43 :: (Exp) -> (HappyAbsSyn ) -happyIn43 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn43 #-} -happyOut43 :: (HappyAbsSyn ) -> (Exp) -happyOut43 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut43 #-} -happyIn44 :: (Exp) -> (HappyAbsSyn ) -happyIn44 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn44 #-} -happyOut44 :: (HappyAbsSyn ) -> (Exp) -happyOut44 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut44 #-} -happyIn45 :: (Exp) -> (HappyAbsSyn ) -happyIn45 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn45 #-} -happyOut45 :: (HappyAbsSyn ) -> (Exp) -happyOut45 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut45 #-} -happyIn46 :: (Exp) -> (HappyAbsSyn ) -happyIn46 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn46 #-} -happyOut46 :: (HappyAbsSyn ) -> (Exp) -happyOut46 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut46 #-} -happyIn47 :: (Exp) -> (HappyAbsSyn ) -happyIn47 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn47 #-} -happyOut47 :: (HappyAbsSyn ) -> (Exp) -happyOut47 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut47 #-} -happyIn48 :: (Exp) -> (HappyAbsSyn ) -happyIn48 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn48 #-} -happyOut48 :: (HappyAbsSyn ) -> (Exp) -happyOut48 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut48 #-} -happyIn49 :: (Exp) -> (HappyAbsSyn ) -happyIn49 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn49 #-} -happyOut49 :: (HappyAbsSyn ) -> (Exp) -happyOut49 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut49 #-} -happyIn50 :: (Exp) -> (HappyAbsSyn ) -happyIn50 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn50 #-} -happyOut50 :: (HappyAbsSyn ) -> (Exp) -happyOut50 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut50 #-} -happyIn51 :: (Decl) -> (HappyAbsSyn ) -happyIn51 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn51 #-} -happyOut51 :: (HappyAbsSyn ) -> (Decl) -happyOut51 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut51 #-} -happyIn52 :: (Quant) -> (HappyAbsSyn ) -happyIn52 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn52 #-} -happyOut52 :: (HappyAbsSyn ) -> (Quant) -happyOut52 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut52 #-} -happyIn53 :: (EnumId) -> (HappyAbsSyn ) -happyIn53 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn53 #-} -happyOut53 :: (HappyAbsSyn ) -> (EnumId) -happyOut53 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut53 #-} -happyIn54 :: (ModId) -> (HappyAbsSyn ) -happyIn54 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn54 #-} -happyOut54 :: (HappyAbsSyn ) -> (ModId) -happyOut54 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut54 #-} -happyIn55 :: (LocId) -> (HappyAbsSyn ) -happyIn55 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn55 #-} -happyOut55 :: (HappyAbsSyn ) -> (LocId) -happyOut55 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut55 #-} -happyIn56 :: ([Declaration]) -> (HappyAbsSyn ) -happyIn56 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn56 #-} -happyOut56 :: (HappyAbsSyn ) -> ([Declaration]) -happyOut56 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut56 #-} -happyIn57 :: ([EnumId]) -> (HappyAbsSyn ) -happyIn57 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn57 #-} -happyOut57 :: (HappyAbsSyn ) -> ([EnumId]) -happyOut57 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut57 #-} -happyIn58 :: ([Element]) -> (HappyAbsSyn ) -happyIn58 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn58 #-} -happyOut58 :: (HappyAbsSyn ) -> ([Element]) -happyOut58 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut58 #-} -happyIn59 :: ([Exp]) -> (HappyAbsSyn ) -happyIn59 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn59 #-} -happyOut59 :: (HappyAbsSyn ) -> ([Exp]) -happyOut59 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut59 #-} -happyIn60 :: ([LocId]) -> (HappyAbsSyn ) -happyIn60 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn60 #-} -happyOut60 :: (HappyAbsSyn ) -> ([LocId]) -happyOut60 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut60 #-} -happyIn61 :: ([ModId]) -> (HappyAbsSyn ) -happyIn61 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn61 #-} -happyOut61 :: (HappyAbsSyn ) -> ([ModId]) -happyOut61 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut61 #-} -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# "\x00\x00\x72\x01\x74\x01\x6d\x01\x7b\x01\x57\x01\x00\x00\x4e\x01\x00\x00\x4e\x01\x70\x01\x4b\x01\x00\x00\x4b\x01\xaa\x00\x00\x00\x4b\x01\x21\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x45\x01\x45\x01\x60\x01\x43\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x59\x00\x00\x00\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x55\x01\x51\x01\x31\x01\x32\x01\x68\x01\x00\x00\xff\xff\x00\x00\x08\x00\xda\x00\x00\x00\x00\x00\x53\x01\x54\x01\x3f\x00\x56\x01\x59\x01\x4a\x01\x00\x00\x31\x00\x1f\x01\x00\x00\xb0\x00\x29\x00\x77\x00\x29\x00\x00\x00\xde\xff\x29\x00\x00\x00\x93\x00\x93\x00\x00\x00\x00\x00\x00\x00\x29\x00\x00\x00\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x2d\x01\xfe\xff\x21\x01\xfb\xff\x1a\x01\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\xce\x00\x00\x00\x00\x00\x00\x00\x39\x00\xb9\x00\x00\x00\x00\x00\x00\x00\xf6\x00\x29\x00\xf6\x00\xef\x00\x00\x00\xd4\x00\xf5\x00\xf7\x00\xc5\x00\x00\x00\x02\x01\x00\x00\xff\xff\xc3\x00\xfc\xff\x00\x00\xc7\x00\xc2\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xcc\x00\xcc\x00\xcc\x00\xcc\x00\xcc\x00\xb0\x00\xb0\x00\xb0\x00\xb0\x00\xb0\x00\xb0\x00\xb0\x00\xca\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\xd9\x00\xb7\x00\xb4\x00\xea\x00\x00\x00\xb0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xda\x00\xda\x00\x00\x00\x00\x00\x00\x00\xd8\x00\x0d\x00\xde\x00\xde\x00\xd1\x00\xc0\x00\x00\x00\xa9\x00\x77\x00\x00\x00\x00\x00\x9d\x00\xb9\x00\x8b\x00\x77\x00\x29\x00\xb8\x00\xfb\xff\xb9\x00\xb9\x00\x00\x00\x85\x00\x00\x00\x00\x00\x00\x00\x19\x01\x79\x00\x0d\x00\x0d\x00\xf4\xff\x99\x00\x00\x00\x00\x00\x9c\x00\x77\x00\x00\x00\x77\x00\x00\x00\x00\x00\x00\x00\xb9\x00\x6c\x00\x77\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8c\x00\x00\x00"# - -happyGotoOffsets :: HappyAddr -happyGotoOffsets = HappyA# "\x11\x00\x04\x00\x9a\x00\x98\x00\x86\x00\x00\x00\x00\x00\x00\x00\x64\x00\x00\x00\x00\x00\x00\x00\x5c\x00\x00\x00\x65\x00\x00\x00\x00\x00\x30\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x87\x00\x00\x00\x7e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x48\x02\x4c\x00\x48\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x97\x04\x00\x00\x00\x00\xc0\x03\xd4\x05\x19\x02\xbd\x05\x00\x00\x9f\x00\xa4\x05\x00\x00\xd5\x02\xa6\x02\x00\x00\x00\x00\x00\x00\x8d\x05\x00\x00\x74\x05\x00\x00\x00\x00\x00\x00\x00\x00\xea\x01\x00\x00\x5b\x00\x0c\x00\x00\x00\x5d\x00\x00\x00\x6f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x94\x00\x00\x00\x00\x00\x00\x00\x58\x00\xa5\x06\x00\x00\x00\x00\x00\x00\x00\x00\x5d\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x83\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3a\x00\x00\x00\x00\x00\x00\x00\x51\x00\xbe\x06\x8e\x06\x84\x06\x75\x06\x6d\x06\x54\x06\x1d\x06\x2d\x05\x14\x05\xfd\x04\xe4\x04\xcd\x04\x80\x04\x67\x04\x50\x04\x37\x04\x20\x04\x07\x04\xf0\x03\x00\x00\x91\x03\x62\x03\x33\x03\x04\x03\x77\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd7\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbb\x01\x00\x00\x00\x00\x00\x00\x04\x06\x09\x00\x8c\x01\x44\x05\x00\x00\x14\x00\x3d\x06\x34\x06\x00\x00\x00\x00\x00\x00\x00\x00\xd8\xff\x5e\x01\x20\x00\x00\x00\x00\x00\x1a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5d\x01\x00\x00\x2e\x01\x00\x00\x00\x00\x00\x00\xed\x05\x0f\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"# - -happyDefActions :: HappyAddr -happyDefActions = HappyA# "\x84\xff\xee\xff\x00\x00\x00\x00\x00\x00\x00\x00\xfa\xff\x00\x00\x7e\xff\x00\x00\x00\x00\x00\x00\x7e\xff\x00\x00\xdc\xff\xed\xff\x00\x00\xee\xff\x83\xff\xea\xff\xe8\xff\xe6\xff\xe7\xff\xf3\xff\x00\x00\x00\x00\x00\x00\x00\x00\xd7\xff\xd9\xff\xd8\xff\xda\xff\xdb\xff\x00\x00\x7e\xff\x00\x00\x92\xff\x91\xff\x90\xff\x8f\xff\x86\xff\x93\xff\x7d\xff\xc8\xff\xc4\xff\xc2\xff\xc0\xff\xbe\xff\xbc\xff\xba\xff\xb1\xff\xaf\xff\xac\xff\xa8\xff\xa3\xff\xa1\xff\x9f\xff\x9d\xff\x9a\xff\x98\xff\x96\xff\x94\xff\x00\x00\x7a\xff\xcd\xff\x00\x00\x00\x00\x00\x00\x00\x00\xef\xff\x00\x00\x00\x00\x8a\xff\x00\x00\x00\x00\x8c\xff\x8b\xff\x89\xff\x00\x00\x88\xff\x00\x00\xf9\xff\xf8\xff\xf7\xff\xf6\xff\x00\x00\xf1\xff\xe5\xff\x00\x00\x00\x00\xd6\xff\xd2\xff\xec\xff\xd1\xff\xd3\xff\xd4\xff\xd5\xff\x00\x00\xce\xff\xd0\xff\xcf\xff\xe3\xff\x00\x00\xf0\xff\xa7\xff\xa6\xff\xc6\xff\x00\x00\xc7\xff\x00\x00\x85\xff\x00\x00\x7c\xff\x00\x00\x00\x00\xa4\xff\x00\x00\xa5\xff\xbb\xff\x00\x00\x86\xff\xb0\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc5\xff\xc3\xff\xc1\xff\xbf\xff\xbd\xff\x00\x00\xb3\xff\xb5\xff\xb8\xff\xb7\xff\xb6\xff\xb9\xff\xb4\xff\xad\xff\xae\xff\xaa\xff\xab\xff\xa9\xff\xa0\xff\x9e\xff\x9b\xff\x9c\xff\x99\xff\x97\xff\x95\xff\x00\x00\x00\x00\x79\xff\x8e\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe4\xff\xd6\xff\x00\x00\x00\x00\x87\xff\x82\xff\xf4\xff\xe9\xff\x80\xff\xee\xff\x00\x00\xe1\xff\xe2\xff\xe0\xff\x00\x00\xcb\xff\x7b\xff\x8d\xff\x00\x00\xc9\xff\x00\x00\xb2\xff\xca\xff\xcc\xff\x00\x00\xec\xff\x00\x00\xdd\xff\xde\xff\x81\xff\x7f\xff\xeb\xff\xdf\xff\xf2\xff\xa2\xff"# - -happyCheck :: HappyAddr -happyCheck = HappyA# "\xff\xff\x02\x00\x01\x00\x08\x00\x03\x00\x0a\x00\x08\x00\x06\x00\x2a\x00\x15\x00\x32\x00\x07\x00\x00\x00\x04\x00\x0d\x00\x0b\x00\x14\x00\x1d\x00\x0a\x00\x17\x00\x00\x00\x0d\x00\x05\x00\x18\x00\x0b\x00\x0c\x00\x1b\x00\x0c\x00\x1d\x00\x22\x00\x1f\x00\x20\x00\x01\x00\x15\x00\x03\x00\x45\x00\x04\x00\x06\x00\x25\x00\x13\x00\x14\x00\x28\x00\x10\x00\x11\x00\x0d\x00\x2e\x00\x2d\x00\x06\x00\x2f\x00\x30\x00\x31\x00\x34\x00\x33\x00\x34\x00\x35\x00\x06\x00\x2f\x00\x38\x00\x39\x00\x3a\x00\x41\x00\x34\x00\x04\x00\x41\x00\x21\x00\x30\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x28\x00\x0f\x00\x10\x00\x0b\x00\x0c\x00\x2d\x00\x2d\x00\x2f\x00\x30\x00\x31\x00\x31\x00\x33\x00\x34\x00\x35\x00\x04\x00\x2d\x00\x38\x00\x39\x00\x3a\x00\x01\x00\x2a\x00\x03\x00\x00\x00\x2d\x00\x06\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x00\x00\x0d\x00\x0f\x00\x2e\x00\x0e\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x35\x00\x13\x00\x14\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x12\x00\x01\x00\x14\x00\x03\x00\x0c\x00\x2b\x00\x06\x00\x25\x00\x33\x00\x2f\x00\x28\x00\x04\x00\x04\x00\x0d\x00\x34\x00\x2d\x00\x04\x00\x2f\x00\x30\x00\x31\x00\x04\x00\x33\x00\x34\x00\x35\x00\x33\x00\x0a\x00\x38\x00\x39\x00\x3a\x00\x01\x00\x16\x00\x03\x00\x33\x00\x04\x00\x06\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x28\x00\x0d\x00\x09\x00\x08\x00\x04\x00\x2d\x00\x19\x00\x2f\x00\x30\x00\x31\x00\x3d\x00\x33\x00\x34\x00\x35\x00\x2e\x00\x2b\x00\x38\x00\x39\x00\x3a\x00\x2f\x00\x03\x00\x35\x00\x19\x00\x06\x00\x34\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x0d\x00\x45\x00\x06\x00\x2d\x00\x2d\x00\x2f\x00\x3e\x00\x2b\x00\x31\x00\x33\x00\x34\x00\x35\x00\x11\x00\x2b\x00\x38\x00\x39\x00\x3a\x00\x2f\x00\x03\x00\x45\x00\x11\x00\x06\x00\x34\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x0d\x00\x09\x00\x3e\x00\x32\x00\x2d\x00\x04\x00\x2f\x00\x36\x00\x37\x00\x08\x00\x33\x00\x34\x00\x35\x00\x3c\x00\x3e\x00\x38\x00\x39\x00\x3a\x00\x41\x00\x0e\x00\x13\x00\x16\x00\x05\x00\x3c\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x3f\x00\x1e\x00\x2e\x00\x2d\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x38\x00\x3e\x00\x3a\x00\x45\x00\x45\x00\x07\x00\x45\x00\x14\x00\x17\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x3e\x00\x45\x00\x1e\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\x3b\x00\x2c\x00\x12\x00\x2e\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x1a\x00\x35\x00\x3d\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x23\x00\x0d\x00\x1d\x00\x26\x00\x27\x00\x14\x00\x29\x00\x24\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\x40\x00\x2c\x00\x11\x00\x2e\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x09\x00\x35\x00\x0e\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x16\x00\x0d\x00\x19\x00\x05\x00\x3c\x00\x1e\x00\x3f\x00\x1c\x00\x12\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\x45\x00\x2c\x00\x45\x00\x2e\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x46\x00\x35\x00\x23\x00\x46\x00\x1a\x00\x29\x00\x23\x00\x41\x00\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\xff\xff\x2c\x00\xff\xff\x2e\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\x35\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\xff\xff\x2c\x00\xff\xff\x2e\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\x35\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\xff\xff\x2c\x00\xff\xff\x2e\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\x35\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\xff\xff\x2c\x00\xff\xff\x2e\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\x35\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\xff\xff\x2c\x00\xff\xff\x2e\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\x35\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16\x00\xff\xff\xff\xff\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\xff\xff\x2c\x00\xff\xff\x2e\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\x35\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16\x00\xff\xff\xff\xff\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\xff\xff\x2c\x00\xff\xff\x2e\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\x35\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16\x00\xff\xff\xff\xff\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\xff\xff\x2c\x00\xff\xff\x2e\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\x35\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16\x00\xff\xff\xff\xff\xff\xff\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\xff\xff\x2c\x00\xff\xff\x2e\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\x35\x00\xff\xff\x1a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x23\x00\xff\xff\xff\xff\x26\x00\x27\x00\x16\x00\x29\x00\xff\xff\xff\xff\x2c\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\xff\xff\x2c\x00\xff\xff\x2e\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x46\x00\x35\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\xff\xff\x2c\x00\xff\xff\x2e\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\x35\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\xff\xff\x2c\x00\xff\xff\x2e\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\x35\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\xff\xff\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\xff\xff\x2c\x00\x16\x00\x2e\x00\xff\xff\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x35\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\xff\xff\x2c\x00\xff\xff\x2e\x00\x16\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x35\x00\xff\xff\xff\xff\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\xff\xff\x2c\x00\x16\x00\x2e\x00\xff\xff\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x35\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\xff\xff\x2c\x00\xff\xff\x2e\x00\x16\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x35\x00\xff\xff\xff\xff\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\xff\xff\x2c\x00\x16\x00\x2e\x00\xff\xff\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x35\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\xff\xff\x2c\x00\xff\xff\x2e\x00\x16\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x35\x00\xff\xff\xff\xff\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\xff\xff\x2c\x00\x16\x00\x2e\x00\xff\xff\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x35\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\xff\xff\x2c\x00\xff\xff\x2e\x00\x16\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x35\x00\xff\xff\xff\xff\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\xff\xff\x2c\x00\x16\x00\x2e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x35\x00\xff\xff\xff\xff\xff\xff\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\xff\xff\xff\xff\x2e\x00\x2f\x00\xff\xff\xff\xff\xff\xff\xff\xff\x34\x00\x35\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\xff\xff\xff\xff\x16\x00\x2e\x00\xff\xff\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x35\x00\xff\xff\xff\xff\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\xff\xff\xff\xff\xff\xff\x2e\x00\x16\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x35\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\xff\xff\xff\xff\x16\x00\x2e\x00\xff\xff\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x35\x00\xff\xff\xff\xff\xff\xff\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\xff\xff\xff\xff\xff\xff\x2e\x00\x16\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x35\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\xff\xff\xff\xff\x16\x00\x2e\x00\xff\xff\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x35\x00\xff\xff\xff\xff\xff\xff\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\xff\xff\xff\xff\xff\xff\x2e\x00\x16\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x35\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\xff\xff\xff\xff\x16\x00\x2e\x00\xff\xff\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x35\x00\xff\xff\xff\xff\xff\xff\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\xff\xff\xff\xff\xff\xff\x2e\x00\x16\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x35\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\xff\xff\xff\xff\x16\x00\x2e\x00\xff\xff\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x35\x00\xff\xff\xff\xff\xff\xff\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\xff\xff\xff\xff\xff\xff\x2e\x00\x16\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x35\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\xff\xff\xff\xff\x16\x00\x2e\x00\xff\xff\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x35\x00\xff\xff\xff\xff\xff\xff\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\xff\xff\xff\xff\xff\xff\x2e\x00\x16\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x35\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\xff\xff\xff\xff\x16\x00\x2e\x00\xff\xff\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x35\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\xff\xff\xff\xff\xff\xff\x2e\x00\x16\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x35\x00\xff\xff\xff\xff\xff\xff\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\xff\xff\xff\xff\x16\x00\x2e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x35\x00\x16\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\xff\xff\xff\xff\xff\xff\x2e\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\xff\xff\x35\x00\x16\x00\x2e\x00\xff\xff\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x35\x00\xff\xff\xff\xff\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\xff\xff\xff\xff\xff\xff\x2e\x00\x16\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x35\x00\xff\xff\x16\x00\xff\xff\xff\xff\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\x27\x00\x28\x00\x29\x00\x2a\x00\xff\xff\xff\xff\x16\x00\x2e\x00\x27\x00\x28\x00\x29\x00\x2a\x00\xff\xff\xff\xff\x35\x00\x2e\x00\x16\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x35\x00\xff\xff\x28\x00\x29\x00\x2a\x00\xff\xff\xff\xff\xff\xff\x2e\x00\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2a\x00\x35\x00\xff\xff\x16\x00\x2e\x00\xff\xff\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x35\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2a\x00\xff\xff\xff\xff\xff\xff\x2e\x00\x16\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x35\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2a\x00\xff\xff\xff\xff\xff\xff\x2e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x35\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x89\x00\x42\x00\x5f\x00\x43\x00\x60\x00\x65\x00\x44\x00\x73\x00\xd3\x00\xc0\x00\x0d\x00\x62\x00\x6e\x00\x45\x00\x0e\x00\x85\xff\xd4\x00\x87\x00\x85\xff\x5b\x00\x88\x00\x10\x00\x8a\x00\x80\x00\x81\x00\x8b\x00\xd8\x00\x8c\x00\x61\x00\x8d\x00\x8e\x00\x42\x00\x63\x00\x43\x00\x55\x00\xbb\x00\x44\x00\x68\x00\xc4\x00\x5d\x00\x47\x00\xd0\x00\xd1\x00\x45\x00\x8f\x00\x48\x00\x44\x00\x49\x00\x4a\x00\x4b\x00\x90\x00\x4c\x00\x4d\x00\x4e\x00\x44\x00\x70\x00\x4f\x00\x50\x00\x51\x00\x07\x00\xc7\x00\x28\x00\x07\x00\x46\x00\x11\x00\x07\x00\x52\x00\x53\x00\x54\x00\x55\x00\x47\x00\xba\x00\xbb\x00\x80\x00\x81\x00\x48\x00\xbc\x00\x49\x00\x4a\x00\x4b\x00\xd4\x00\x4c\x00\x4d\x00\x4e\x00\x6e\x00\x48\x00\x4f\x00\x50\x00\x51\x00\x42\x00\x7c\x00\x43\x00\x5b\x00\x48\x00\x44\x00\x07\x00\x52\x00\x53\x00\x54\x00\x55\x00\x1a\x00\x45\x00\xb8\x00\x3f\x00\x65\x00\x07\x00\x52\x00\x53\x00\x54\x00\x55\x00\xb0\x00\x5c\x00\x5d\x00\x07\x00\x52\x00\x53\x00\x54\x00\x55\x00\x1b\x00\x42\x00\x1c\x00\x43\x00\xbe\x00\xae\x00\x44\x00\x57\x00\x55\x00\x70\x00\x47\x00\x57\x00\x28\x00\x45\x00\x71\x00\x48\x00\x6e\x00\x49\x00\x4a\x00\x4b\x00\x59\x00\x4c\x00\x4d\x00\x4e\x00\x21\x00\x07\x00\x4f\x00\x50\x00\x51\x00\x42\x00\x5a\x00\x43\x00\x23\x00\xbb\x00\x44\x00\x07\x00\x52\x00\x53\x00\x54\x00\x55\x00\x47\x00\x45\x00\x09\x00\x0b\x00\x6e\x00\x48\x00\x83\x00\x49\x00\x4a\x00\x4b\x00\xc0\x00\x4c\x00\x4d\x00\x4e\x00\x3f\x00\xb2\x00\x4f\x00\x50\x00\x51\x00\x70\x00\x43\x00\x40\x00\x83\x00\x44\x00\x71\x00\x07\x00\x52\x00\x53\x00\x54\x00\x55\x00\x45\x00\x55\x00\x44\x00\x48\x00\xbc\x00\x49\x00\xc2\x00\xd0\x00\xbd\x00\x4c\x00\x4d\x00\x4e\x00\x7d\x00\x6f\x00\x4f\x00\x50\x00\x51\x00\x70\x00\x43\x00\x55\x00\x7d\x00\x44\x00\x71\x00\x07\x00\x52\x00\x53\x00\x54\x00\x55\x00\x45\x00\x7e\x00\xca\x00\x1e\x00\x48\x00\x84\x00\x49\x00\x1f\x00\x20\x00\x85\x00\x4c\x00\x4d\x00\x4e\x00\x21\x00\xcc\x00\x4f\x00\x50\x00\x51\x00\x07\x00\x7f\x00\x86\x00\x82\x00\x91\x00\x92\x00\x07\x00\x52\x00\x53\x00\x54\x00\x55\x00\x93\x00\x94\x00\x9b\x00\x48\x00\x07\x00\x52\x00\x53\x00\x54\x00\x55\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x4f\x00\xb0\x00\x51\x00\x55\x00\x55\x00\xb2\x00\x55\x00\xb4\x00\xb5\x00\x07\x00\x52\x00\x53\x00\x54\x00\x55\x00\xb6\x00\x55\x00\x94\x00\x29\x00\xd7\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\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\xb7\x00\x3e\x00\x59\x00\x3f\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x09\x00\x40\x00\xc0\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x0e\x00\x0d\x00\x17\x00\x62\x00\x19\x00\x10\x00\x67\x00\x0b\x00\x78\x00\x29\x00\xcd\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\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\xd7\x00\x3e\x00\x7d\x00\x3f\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x7e\x00\x40\x00\x7f\x00\x13\x00\x14\x00\x15\x00\x16\x00\x0e\x00\x82\x00\xd5\x00\x83\x00\x91\x00\x92\x00\x94\x00\x93\x00\x95\x00\x59\x00\x29\x00\xce\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\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\x55\x00\x3e\x00\x55\x00\x3f\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\xff\xff\x40\x00\x23\x00\xff\xff\x09\x00\x0b\x00\x0d\x00\x07\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x00\xc6\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\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\x00\x00\x3e\x00\x00\x00\x3f\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x00\xca\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\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\x00\x00\x3e\x00\x00\x00\x3f\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x3e\x00\x00\x00\x3f\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x00\x74\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\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\x00\x00\x3e\x00\x00\x00\x3f\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x3e\x00\x00\x00\x3f\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x00\x00\x00\x00\x00\x95\x00\x2d\x00\x2e\x00\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\x00\x00\x6b\x00\x00\x00\x3f\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x00\x00\x00\x00\x00\x6a\x00\x2d\x00\x2e\x00\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\x00\x00\x6b\x00\x00\x00\x3f\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x00\x00\x00\x00\x00\x6c\x00\x2d\x00\x2e\x00\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\x00\x00\x6b\x00\x00\x00\x3f\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x00\x00\x00\x00\x00\x00\x00\x96\x00\x2e\x00\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\x00\x00\x6b\x00\x00\x00\x3f\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x00\x00\x40\x00\x00\x00\x09\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0d\x00\x00\x00\x00\x00\x19\x00\x10\x00\x29\x00\x0b\x00\x00\x00\x00\x00\x1a\x00\x97\x00\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\x00\x00\x6b\x00\x00\x00\x3f\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\xf5\xff\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\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x98\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\x00\x00\x6b\x00\x00\x00\x3f\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x99\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\x00\x00\x6b\x00\x00\x00\x3f\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x00\x00\x00\x00\x76\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\x00\x00\x6b\x00\x29\x00\x3f\x00\x00\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x40\x00\xcc\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x00\x00\x6b\x00\x00\x00\x3f\x00\x29\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x40\x00\x00\x00\x00\x00\x9b\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x00\x00\x6b\x00\x29\x00\x3f\x00\x00\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x40\x00\x9c\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x00\x00\x6b\x00\x00\x00\x3f\x00\x29\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x40\x00\x00\x00\x00\x00\x9d\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x00\x00\x6b\x00\x29\x00\x3f\x00\x00\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x40\x00\x9e\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x00\x00\x6b\x00\x00\x00\x3f\x00\x29\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x40\x00\x00\x00\x00\x00\x9f\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x00\x00\x6b\x00\x29\x00\x3f\x00\x00\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x40\x00\xa0\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x00\x00\x6b\x00\x00\x00\x3f\x00\x29\x00\x24\x00\x25\x00\x26\x00\x27\x00\x78\x00\x40\x00\x00\x00\x00\x00\xa1\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x00\x00\x6b\x00\x29\x00\x3f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x79\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x7a\x00\x00\x00\x00\x00\x3f\x00\x70\x00\x00\x00\x00\x00\x00\x00\x00\x00\x71\x00\x40\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa2\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x00\x00\x00\x00\x29\x00\x3f\x00\x00\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x40\x00\x00\x00\x00\x00\xa3\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x00\x00\x00\x00\x00\x00\x3f\x00\x29\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa4\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x00\x00\x00\x00\x29\x00\x3f\x00\x00\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x40\x00\x00\x00\x00\x00\x00\x00\xa5\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x00\x00\x00\x00\x00\x00\x3f\x00\x29\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa6\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x00\x00\x00\x00\x29\x00\x3f\x00\x00\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc5\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x00\x00\x00\x00\x00\x00\x3f\x00\x29\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x79\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x00\x00\x00\x00\x29\x00\x3f\x00\x00\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x68\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x00\x00\x00\x00\x00\x00\x3f\x00\x29\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x69\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x00\x00\x00\x00\x29\x00\x3f\x00\x00\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6d\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x00\x00\x00\x00\x00\x00\x3f\x00\x29\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x73\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x00\x00\x00\x00\x29\x00\x3f\x00\x00\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x75\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x00\x00\x00\x00\x00\x00\x3f\x00\x29\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd9\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x00\x00\x00\x00\x29\x00\x3f\x00\x00\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc8\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x00\x00\x00\x00\x00\x00\x3f\x00\x29\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x40\x00\x00\x00\x00\x00\x00\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\xa7\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x00\x00\x00\x00\x29\x00\x3f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x29\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x00\x00\xc2\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x00\x00\x00\x00\x00\x00\x3f\x00\xc3\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x00\x00\x40\x00\x29\x00\x3f\x00\x00\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x40\x00\x00\x00\x00\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\xa8\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x00\x00\x00\x00\x00\x00\x3f\x00\x29\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x40\x00\x00\x00\x29\x00\x00\x00\x00\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x00\x00\xa9\x00\x3b\x00\x3c\x00\x3d\x00\x00\x00\x00\x00\x29\x00\x3f\x00\xaa\x00\x3b\x00\x3c\x00\x3d\x00\x00\x00\x00\x00\x40\x00\x3f\x00\x29\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x40\x00\x00\x00\xab\x00\x3c\x00\x3d\x00\x00\x00\x00\x00\x00\x00\x3f\x00\x00\x00\x00\x00\x00\x00\x00\x00\xac\x00\x3d\x00\x40\x00\x00\x00\x29\x00\x3f\x00\x00\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb7\x00\x3d\x00\x00\x00\x00\x00\x00\x00\x3f\x00\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xad\x00\x00\x00\x00\x00\x00\x00\x3f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"# - -happyReduceArr = Happy_Data_Array.array (5, 134) [ - (5 , happyReduce_5), - (6 , happyReduce_6), - (7 , happyReduce_7), - (8 , happyReduce_8), - (9 , happyReduce_9), - (10 , happyReduce_10), - (11 , happyReduce_11), - (12 , happyReduce_12), - (13 , happyReduce_13), - (14 , happyReduce_14), - (15 , happyReduce_15), - (16 , happyReduce_16), - (17 , happyReduce_17), - (18 , happyReduce_18), - (19 , happyReduce_19), - (20 , happyReduce_20), - (21 , happyReduce_21), - (22 , happyReduce_22), - (23 , happyReduce_23), - (24 , happyReduce_24), - (25 , happyReduce_25), - (26 , happyReduce_26), - (27 , happyReduce_27), - (28 , happyReduce_28), - (29 , happyReduce_29), - (30 , happyReduce_30), - (31 , happyReduce_31), - (32 , happyReduce_32), - (33 , happyReduce_33), - (34 , happyReduce_34), - (35 , happyReduce_35), - (36 , happyReduce_36), - (37 , happyReduce_37), - (38 , happyReduce_38), - (39 , happyReduce_39), - (40 , happyReduce_40), - (41 , happyReduce_41), - (42 , happyReduce_42), - (43 , happyReduce_43), - (44 , happyReduce_44), - (45 , happyReduce_45), - (46 , happyReduce_46), - (47 , happyReduce_47), - (48 , happyReduce_48), - (49 , happyReduce_49), - (50 , happyReduce_50), - (51 , happyReduce_51), - (52 , happyReduce_52), - (53 , happyReduce_53), - (54 , happyReduce_54), - (55 , happyReduce_55), - (56 , happyReduce_56), - (57 , happyReduce_57), - (58 , happyReduce_58), - (59 , happyReduce_59), - (60 , happyReduce_60), - (61 , happyReduce_61), - (62 , happyReduce_62), - (63 , happyReduce_63), - (64 , happyReduce_64), - (65 , happyReduce_65), - (66 , happyReduce_66), - (67 , happyReduce_67), - (68 , happyReduce_68), - (69 , happyReduce_69), - (70 , happyReduce_70), - (71 , happyReduce_71), - (72 , happyReduce_72), - (73 , happyReduce_73), - (74 , happyReduce_74), - (75 , happyReduce_75), - (76 , happyReduce_76), - (77 , happyReduce_77), - (78 , happyReduce_78), - (79 , happyReduce_79), - (80 , happyReduce_80), - (81 , happyReduce_81), - (82 , happyReduce_82), - (83 , happyReduce_83), - (84 , happyReduce_84), - (85 , happyReduce_85), - (86 , happyReduce_86), - (87 , happyReduce_87), - (88 , happyReduce_88), - (89 , happyReduce_89), - (90 , happyReduce_90), - (91 , happyReduce_91), - (92 , happyReduce_92), - (93 , happyReduce_93), - (94 , happyReduce_94), - (95 , happyReduce_95), - (96 , happyReduce_96), - (97 , happyReduce_97), - (98 , happyReduce_98), - (99 , happyReduce_99), - (100 , happyReduce_100), - (101 , happyReduce_101), - (102 , happyReduce_102), - (103 , happyReduce_103), - (104 , happyReduce_104), - (105 , happyReduce_105), - (106 , happyReduce_106), - (107 , happyReduce_107), - (108 , happyReduce_108), - (109 , happyReduce_109), - (110 , happyReduce_110), - (111 , happyReduce_111), - (112 , happyReduce_112), - (113 , happyReduce_113), - (114 , happyReduce_114), - (115 , happyReduce_115), - (116 , happyReduce_116), - (117 , happyReduce_117), - (118 , happyReduce_118), - (119 , happyReduce_119), - (120 , happyReduce_120), - (121 , happyReduce_121), - (122 , happyReduce_122), - (123 , happyReduce_123), - (124 , happyReduce_124), - (125 , happyReduce_125), - (126 , happyReduce_126), - (127 , happyReduce_127), - (128 , happyReduce_128), - (129 , happyReduce_129), - (130 , happyReduce_130), - (131 , happyReduce_131), - (132 , happyReduce_132), - (133 , happyReduce_133), - (134 , happyReduce_134) - ] - -happy_n_terms = 71 :: Int -happy_n_nonterms = 54 :: Int - -happyReduce_5 = happySpecReduce_1 0# happyReduction_5 -happyReduction_5 happy_x_1 - = case happyOutTok happy_x_1 of { happy_var_1 -> - happyIn8 - (PosInteger (mkPosToken happy_var_1) - )} - -happyReduce_6 = happySpecReduce_1 1# happyReduction_6 -happyReduction_6 happy_x_1 - = case happyOutTok happy_x_1 of { happy_var_1 -> - happyIn9 - (PosDouble (mkPosToken happy_var_1) - )} - -happyReduce_7 = happySpecReduce_1 2# happyReduction_7 -happyReduction_7 happy_x_1 - = case happyOutTok happy_x_1 of { happy_var_1 -> - happyIn10 - (PosReal (mkPosToken happy_var_1) - )} - -happyReduce_8 = happySpecReduce_1 3# happyReduction_8 -happyReduction_8 happy_x_1 - = case happyOutTok happy_x_1 of { happy_var_1 -> - happyIn11 - (PosString (mkPosToken happy_var_1) - )} - -happyReduce_9 = happySpecReduce_1 4# happyReduction_9 -happyReduction_9 happy_x_1 - = case happyOutTok happy_x_1 of { happy_var_1 -> - happyIn12 - (PosIdent (mkPosToken happy_var_1) - )} - -happyReduce_10 = happySpecReduce_1 5# happyReduction_10 -happyReduction_10 happy_x_1 - = case happyOut56 happy_x_1 of { happy_var_1 -> - happyIn13 - (Module ((mkCatSpan happy_var_1)) (reverse happy_var_1) - )} - -happyReduce_11 = happyReduce 4# 6# happyReduction_11 -happyReduction_11 (happy_x_4 `HappyStk` - happy_x_3 `HappyStk` - happy_x_2 `HappyStk` - happy_x_1 `HappyStk` - happyRest) - = case happyOutTok happy_x_1 of { happy_var_1 -> - case happyOut12 happy_x_2 of { happy_var_2 -> - case happyOutTok happy_x_3 of { happy_var_3 -> - case happyOut57 happy_x_4 of { happy_var_4 -> - happyIn14 - (EnumDecl ((mkTokenSpan happy_var_1) >- (mkCatSpan happy_var_2) >- (mkTokenSpan happy_var_3) >- (mkCatSpan happy_var_4)) happy_var_2 happy_var_4 - ) `HappyStk` happyRest}}}} - -happyReduce_12 = happySpecReduce_1 6# happyReduction_12 -happyReduction_12 happy_x_1 - = case happyOut21 happy_x_1 of { happy_var_1 -> - happyIn14 - (ElementDecl ((mkCatSpan happy_var_1)) happy_var_1 - )} - -happyReduce_13 = happyReduce 8# 7# happyReduction_13 -happyReduction_13 (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 happyOut19 happy_x_1 of { happy_var_1 -> - case happyOut26 happy_x_2 of { happy_var_2 -> - case happyOut12 happy_x_3 of { happy_var_3 -> - case happyOut22 happy_x_4 of { happy_var_4 -> - case happyOut23 happy_x_5 of { happy_var_5 -> - case happyOut27 happy_x_6 of { happy_var_6 -> - case happyOut24 happy_x_7 of { happy_var_7 -> - case happyOut20 happy_x_8 of { happy_var_8 -> - happyIn15 - (Clafer ((mkCatSpan happy_var_1) >- (mkCatSpan happy_var_2) >- (mkCatSpan happy_var_3) >- (mkCatSpan happy_var_4) >- (mkCatSpan happy_var_5) >- (mkCatSpan happy_var_6) >- (mkCatSpan happy_var_7) >- (mkCatSpan happy_var_8)) happy_var_1 happy_var_2 happy_var_3 happy_var_4 happy_var_5 happy_var_6 happy_var_7 happy_var_8 - ) `HappyStk` happyRest}}}}}}}} - -happyReduce_14 = happySpecReduce_3 8# happyReduction_14 -happyReduction_14 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOutTok happy_x_1 of { happy_var_1 -> - case happyOut59 happy_x_2 of { happy_var_2 -> - case happyOutTok happy_x_3 of { happy_var_3 -> - happyIn16 - (Constraint ((mkTokenSpan happy_var_1) >- (mkCatSpan happy_var_2) >- (mkTokenSpan happy_var_3)) (reverse happy_var_2) - )}}} - -happyReduce_15 = happyReduce 4# 9# happyReduction_15 -happyReduction_15 (happy_x_4 `HappyStk` - happy_x_3 `HappyStk` - happy_x_2 `HappyStk` - happy_x_1 `HappyStk` - happyRest) - = case happyOutTok happy_x_1 of { happy_var_1 -> - case happyOutTok happy_x_2 of { happy_var_2 -> - case happyOut59 happy_x_3 of { happy_var_3 -> - case happyOutTok happy_x_4 of { happy_var_4 -> - happyIn17 - (Assertion ((mkTokenSpan happy_var_1) >- (mkTokenSpan happy_var_2) >- (mkCatSpan happy_var_3) >- (mkTokenSpan happy_var_4)) (reverse happy_var_3) - ) `HappyStk` happyRest}}}} - -happyReduce_16 = happySpecReduce_3 10# happyReduction_16 -happyReduction_16 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOutTok happy_x_1 of { happy_var_1 -> - case happyOut59 happy_x_2 of { happy_var_2 -> - case happyOutTok happy_x_3 of { happy_var_3 -> - happyIn18 - (Goal ((mkTokenSpan happy_var_1) >- (mkCatSpan happy_var_2) >- (mkTokenSpan happy_var_3)) (reverse happy_var_2) - )}}} - -happyReduce_17 = happySpecReduce_0 11# happyReduction_17 -happyReduction_17 = happyIn19 - (AbstractEmpty noSpan - ) - -happyReduce_18 = happySpecReduce_1 11# happyReduction_18 -happyReduction_18 happy_x_1 - = case happyOutTok happy_x_1 of { happy_var_1 -> - happyIn19 - (Abstract ((mkTokenSpan happy_var_1)) - )} - -happyReduce_19 = happySpecReduce_0 12# happyReduction_19 -happyReduction_19 = happyIn20 - (ElementsEmpty noSpan - ) - -happyReduce_20 = happySpecReduce_3 12# happyReduction_20 -happyReduction_20 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOutTok happy_x_1 of { happy_var_1 -> - case happyOut58 happy_x_2 of { happy_var_2 -> - case happyOutTok happy_x_3 of { happy_var_3 -> - happyIn20 - (ElementsList ((mkTokenSpan happy_var_1) >- (mkCatSpan happy_var_2) >- (mkTokenSpan happy_var_3)) (reverse happy_var_2) - )}}} - -happyReduce_21 = happySpecReduce_1 13# happyReduction_21 -happyReduction_21 happy_x_1 - = case happyOut15 happy_x_1 of { happy_var_1 -> - happyIn21 - (Subclafer ((mkCatSpan happy_var_1)) happy_var_1 - )} - -happyReduce_22 = happyReduce 4# 13# happyReduction_22 -happyReduction_22 (happy_x_4 `HappyStk` - happy_x_3 `HappyStk` - happy_x_2 `HappyStk` - happy_x_1 `HappyStk` - happyRest) - = case happyOutTok happy_x_1 of { happy_var_1 -> - case happyOut30 happy_x_2 of { happy_var_2 -> - case happyOut27 happy_x_3 of { happy_var_3 -> - case happyOut20 happy_x_4 of { happy_var_4 -> - happyIn21 - (ClaferUse ((mkTokenSpan happy_var_1) >- (mkCatSpan happy_var_2) >- (mkCatSpan happy_var_3) >- (mkCatSpan happy_var_4)) happy_var_2 happy_var_3 happy_var_4 - ) `HappyStk` happyRest}}}} - -happyReduce_23 = happySpecReduce_1 13# happyReduction_23 -happyReduction_23 happy_x_1 - = case happyOut16 happy_x_1 of { happy_var_1 -> - happyIn21 - (Subconstraint ((mkCatSpan happy_var_1)) happy_var_1 - )} - -happyReduce_24 = happySpecReduce_1 13# happyReduction_24 -happyReduction_24 happy_x_1 - = case happyOut18 happy_x_1 of { happy_var_1 -> - happyIn21 - (Subgoal ((mkCatSpan happy_var_1)) happy_var_1 - )} - -happyReduce_25 = happySpecReduce_1 13# happyReduction_25 -happyReduction_25 happy_x_1 - = case happyOut17 happy_x_1 of { happy_var_1 -> - happyIn21 - (SubAssertion ((mkCatSpan happy_var_1)) happy_var_1 - )} - -happyReduce_26 = happySpecReduce_0 14# happyReduction_26 -happyReduction_26 = happyIn22 - (SuperEmpty noSpan - ) - -happyReduce_27 = happySpecReduce_2 14# happyReduction_27 -happyReduction_27 happy_x_2 - happy_x_1 - = case happyOutTok happy_x_1 of { happy_var_1 -> - case happyOut49 happy_x_2 of { happy_var_2 -> - happyIn22 - (SuperSome ((mkTokenSpan happy_var_1) >- (mkCatSpan happy_var_2)) happy_var_2 - )}} - -happyReduce_28 = happySpecReduce_0 15# happyReduction_28 -happyReduction_28 = happyIn23 - (ReferenceEmpty noSpan - ) - -happyReduce_29 = happySpecReduce_2 15# happyReduction_29 -happyReduction_29 happy_x_2 - happy_x_1 - = case happyOutTok happy_x_1 of { happy_var_1 -> - case happyOut46 happy_x_2 of { happy_var_2 -> - happyIn23 - (ReferenceSet ((mkTokenSpan happy_var_1) >- (mkCatSpan happy_var_2)) happy_var_2 - )}} - -happyReduce_30 = happySpecReduce_2 15# happyReduction_30 -happyReduction_30 happy_x_2 - happy_x_1 - = case happyOutTok happy_x_1 of { happy_var_1 -> - case happyOut46 happy_x_2 of { happy_var_2 -> - happyIn23 - (ReferenceBag ((mkTokenSpan happy_var_1) >- (mkCatSpan happy_var_2)) happy_var_2 - )}} - -happyReduce_31 = happySpecReduce_0 16# happyReduction_31 -happyReduction_31 = happyIn24 - (InitEmpty noSpan - ) - -happyReduce_32 = happySpecReduce_2 16# happyReduction_32 -happyReduction_32 happy_x_2 - happy_x_1 - = case happyOut25 happy_x_1 of { happy_var_1 -> - case happyOut31 happy_x_2 of { happy_var_2 -> - happyIn24 - (InitSome ((mkCatSpan happy_var_1) >- (mkCatSpan happy_var_2)) happy_var_1 happy_var_2 - )}} - -happyReduce_33 = happySpecReduce_1 17# happyReduction_33 -happyReduction_33 happy_x_1 - = case happyOutTok happy_x_1 of { happy_var_1 -> - happyIn25 - (InitConstant ((mkTokenSpan happy_var_1)) - )} - -happyReduce_34 = happySpecReduce_1 17# happyReduction_34 -happyReduction_34 happy_x_1 - = case happyOutTok happy_x_1 of { happy_var_1 -> - happyIn25 - (InitDefault ((mkTokenSpan happy_var_1)) - )} - -happyReduce_35 = happySpecReduce_0 18# happyReduction_35 -happyReduction_35 = happyIn26 - (GCardEmpty noSpan - ) - -happyReduce_36 = happySpecReduce_1 18# happyReduction_36 -happyReduction_36 happy_x_1 - = case happyOutTok happy_x_1 of { happy_var_1 -> - happyIn26 - (GCardXor ((mkTokenSpan happy_var_1)) - )} - -happyReduce_37 = happySpecReduce_1 18# happyReduction_37 -happyReduction_37 happy_x_1 - = case happyOutTok happy_x_1 of { happy_var_1 -> - happyIn26 - (GCardOr ((mkTokenSpan happy_var_1)) - )} - -happyReduce_38 = happySpecReduce_1 18# happyReduction_38 -happyReduction_38 happy_x_1 - = case happyOutTok happy_x_1 of { happy_var_1 -> - happyIn26 - (GCardMux ((mkTokenSpan happy_var_1)) - )} - -happyReduce_39 = happySpecReduce_1 18# happyReduction_39 -happyReduction_39 happy_x_1 - = case happyOutTok happy_x_1 of { happy_var_1 -> - happyIn26 - (GCardOpt ((mkTokenSpan happy_var_1)) - )} - -happyReduce_40 = happySpecReduce_1 18# happyReduction_40 -happyReduction_40 happy_x_1 - = case happyOut28 happy_x_1 of { happy_var_1 -> - happyIn26 - (GCardInterval ((mkCatSpan happy_var_1)) happy_var_1 - )} - -happyReduce_41 = happySpecReduce_0 19# happyReduction_41 -happyReduction_41 = happyIn27 - (CardEmpty noSpan - ) - -happyReduce_42 = happySpecReduce_1 19# happyReduction_42 -happyReduction_42 happy_x_1 - = case happyOutTok happy_x_1 of { happy_var_1 -> - happyIn27 - (CardLone ((mkTokenSpan happy_var_1)) - )} - -happyReduce_43 = happySpecReduce_1 19# happyReduction_43 -happyReduction_43 happy_x_1 - = case happyOutTok happy_x_1 of { happy_var_1 -> - happyIn27 - (CardSome ((mkTokenSpan happy_var_1)) - )} - -happyReduce_44 = happySpecReduce_1 19# happyReduction_44 -happyReduction_44 happy_x_1 - = case happyOutTok happy_x_1 of { happy_var_1 -> - happyIn27 - (CardAny ((mkTokenSpan happy_var_1)) - )} - -happyReduce_45 = happySpecReduce_1 19# happyReduction_45 -happyReduction_45 happy_x_1 - = case happyOut8 happy_x_1 of { happy_var_1 -> - happyIn27 - (CardNum ((mkCatSpan happy_var_1)) happy_var_1 - )} - -happyReduce_46 = happySpecReduce_1 19# happyReduction_46 -happyReduction_46 happy_x_1 - = case happyOut28 happy_x_1 of { happy_var_1 -> - happyIn27 - (CardInterval ((mkCatSpan happy_var_1)) happy_var_1 - )} - -happyReduce_47 = happySpecReduce_3 20# happyReduction_47 -happyReduction_47 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOut8 happy_x_1 of { happy_var_1 -> - case happyOutTok happy_x_2 of { happy_var_2 -> - case happyOut29 happy_x_3 of { happy_var_3 -> - happyIn28 - (NCard ((mkCatSpan happy_var_1) >- (mkTokenSpan happy_var_2) >- (mkCatSpan happy_var_3)) happy_var_1 happy_var_3 - )}}} - -happyReduce_48 = happySpecReduce_1 21# happyReduction_48 -happyReduction_48 happy_x_1 - = case happyOutTok happy_x_1 of { happy_var_1 -> - happyIn29 - (ExIntegerAst ((mkTokenSpan happy_var_1)) - )} - -happyReduce_49 = happySpecReduce_1 21# happyReduction_49 -happyReduction_49 happy_x_1 - = case happyOut8 happy_x_1 of { happy_var_1 -> - happyIn29 - (ExIntegerNum ((mkCatSpan happy_var_1)) happy_var_1 - )} - -happyReduce_50 = happySpecReduce_1 22# happyReduction_50 -happyReduction_50 happy_x_1 - = case happyOut61 happy_x_1 of { happy_var_1 -> - happyIn30 - (Path ((mkCatSpan happy_var_1)) happy_var_1 - )} - -happyReduce_51 = happyReduce 5# 23# happyReduction_51 -happyReduction_51 (happy_x_5 `HappyStk` - happy_x_4 `HappyStk` - happy_x_3 `HappyStk` - happy_x_2 `HappyStk` - happy_x_1 `HappyStk` - happyRest) - = case happyOutTok happy_x_1 of { happy_var_1 -> - case happyOutTok happy_x_2 of { happy_var_2 -> - case happyOut51 happy_x_3 of { happy_var_3 -> - case happyOutTok happy_x_4 of { happy_var_4 -> - case happyOut31 happy_x_5 of { happy_var_5 -> - happyIn31 - (EDeclAllDisj ((mkTokenSpan happy_var_1) >- (mkTokenSpan happy_var_2) >- (mkCatSpan happy_var_3) >- (mkTokenSpan happy_var_4) >- (mkCatSpan happy_var_5)) happy_var_3 happy_var_5 - ) `HappyStk` happyRest}}}}} - -happyReduce_52 = happyReduce 4# 23# happyReduction_52 -happyReduction_52 (happy_x_4 `HappyStk` - happy_x_3 `HappyStk` - happy_x_2 `HappyStk` - happy_x_1 `HappyStk` - happyRest) - = case happyOutTok happy_x_1 of { happy_var_1 -> - case happyOut51 happy_x_2 of { happy_var_2 -> - case happyOutTok happy_x_3 of { happy_var_3 -> - case happyOut31 happy_x_4 of { happy_var_4 -> - happyIn31 - (EDeclAll ((mkTokenSpan happy_var_1) >- (mkCatSpan happy_var_2) >- (mkTokenSpan happy_var_3) >- (mkCatSpan happy_var_4)) happy_var_2 happy_var_4 - ) `HappyStk` happyRest}}}} - -happyReduce_53 = happyReduce 5# 23# 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 happyOut52 happy_x_1 of { happy_var_1 -> - case happyOutTok happy_x_2 of { happy_var_2 -> - case happyOut51 happy_x_3 of { happy_var_3 -> - case happyOutTok happy_x_4 of { happy_var_4 -> - case happyOut31 happy_x_5 of { happy_var_5 -> - happyIn31 - (EDeclQuantDisj ((mkCatSpan happy_var_1) >- (mkTokenSpan happy_var_2) >- (mkCatSpan happy_var_3) >- (mkTokenSpan happy_var_4) >- (mkCatSpan happy_var_5)) happy_var_1 happy_var_3 happy_var_5 - ) `HappyStk` happyRest}}}}} - -happyReduce_54 = happyReduce 4# 23# happyReduction_54 -happyReduction_54 (happy_x_4 `HappyStk` - happy_x_3 `HappyStk` - happy_x_2 `HappyStk` - happy_x_1 `HappyStk` - happyRest) - = case happyOut52 happy_x_1 of { happy_var_1 -> - case happyOut51 happy_x_2 of { happy_var_2 -> - case happyOutTok happy_x_3 of { happy_var_3 -> - case happyOut31 happy_x_4 of { happy_var_4 -> - happyIn31 - (EDeclQuant ((mkCatSpan happy_var_1) >- (mkCatSpan happy_var_2) >- (mkTokenSpan happy_var_3) >- (mkCatSpan happy_var_4)) happy_var_1 happy_var_2 happy_var_4 - ) `HappyStk` happyRest}}}} - -happyReduce_55 = happySpecReduce_1 23# happyReduction_55 -happyReduction_55 happy_x_1 - = case happyOut32 happy_x_1 of { happy_var_1 -> - happyIn31 - (happy_var_1 - )} - -happyReduce_56 = happySpecReduce_2 24# happyReduction_56 -happyReduction_56 happy_x_2 - happy_x_1 - = case happyOutTok happy_x_1 of { happy_var_1 -> - case happyOut33 happy_x_2 of { happy_var_2 -> - happyIn32 - (EGMax ((mkTokenSpan happy_var_1) >- (mkCatSpan happy_var_2)) happy_var_2 - )}} - -happyReduce_57 = happySpecReduce_2 24# happyReduction_57 -happyReduction_57 happy_x_2 - happy_x_1 - = case happyOutTok happy_x_1 of { happy_var_1 -> - case happyOut33 happy_x_2 of { happy_var_2 -> - happyIn32 - (EGMin ((mkTokenSpan happy_var_1) >- (mkCatSpan happy_var_2)) happy_var_2 - )}} - -happyReduce_58 = happySpecReduce_3 24# happyReduction_58 -happyReduction_58 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOut32 happy_x_1 of { happy_var_1 -> - case happyOutTok happy_x_2 of { happy_var_2 -> - case happyOut33 happy_x_3 of { happy_var_3 -> - happyIn32 - (EIff ((mkCatSpan happy_var_1) >- (mkTokenSpan happy_var_2) >- (mkCatSpan happy_var_3)) happy_var_1 happy_var_3 - )}}} - -happyReduce_59 = happySpecReduce_1 24# happyReduction_59 -happyReduction_59 happy_x_1 - = case happyOut33 happy_x_1 of { happy_var_1 -> - happyIn32 - (happy_var_1 - )} - -happyReduce_60 = happySpecReduce_3 25# happyReduction_60 -happyReduction_60 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOut33 happy_x_1 of { happy_var_1 -> - case happyOutTok happy_x_2 of { happy_var_2 -> - case happyOut34 happy_x_3 of { happy_var_3 -> - happyIn33 - (EImplies ((mkCatSpan happy_var_1) >- (mkTokenSpan happy_var_2) >- (mkCatSpan happy_var_3)) happy_var_1 happy_var_3 - )}}} - -happyReduce_61 = happySpecReduce_1 25# happyReduction_61 -happyReduction_61 happy_x_1 - = case happyOut34 happy_x_1 of { happy_var_1 -> - happyIn33 - (happy_var_1 - )} - -happyReduce_62 = happySpecReduce_3 26# happyReduction_62 -happyReduction_62 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOut34 happy_x_1 of { happy_var_1 -> - case happyOutTok happy_x_2 of { happy_var_2 -> - case happyOut35 happy_x_3 of { happy_var_3 -> - happyIn34 - (EOr ((mkCatSpan happy_var_1) >- (mkTokenSpan happy_var_2) >- (mkCatSpan happy_var_3)) happy_var_1 happy_var_3 - )}}} - -happyReduce_63 = happySpecReduce_1 26# happyReduction_63 -happyReduction_63 happy_x_1 - = case happyOut35 happy_x_1 of { happy_var_1 -> - happyIn34 - (happy_var_1 - )} - -happyReduce_64 = happySpecReduce_3 27# happyReduction_64 -happyReduction_64 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOut35 happy_x_1 of { happy_var_1 -> - case happyOutTok happy_x_2 of { happy_var_2 -> - case happyOut36 happy_x_3 of { happy_var_3 -> - happyIn35 - (EXor ((mkCatSpan happy_var_1) >- (mkTokenSpan happy_var_2) >- (mkCatSpan happy_var_3)) happy_var_1 happy_var_3 - )}}} - -happyReduce_65 = happySpecReduce_1 27# happyReduction_65 -happyReduction_65 happy_x_1 - = case happyOut36 happy_x_1 of { happy_var_1 -> - happyIn35 - (happy_var_1 - )} - -happyReduce_66 = happySpecReduce_3 28# happyReduction_66 -happyReduction_66 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOut36 happy_x_1 of { happy_var_1 -> - case happyOutTok happy_x_2 of { happy_var_2 -> - case happyOut37 happy_x_3 of { happy_var_3 -> - happyIn36 - (EAnd ((mkCatSpan happy_var_1) >- (mkTokenSpan happy_var_2) >- (mkCatSpan happy_var_3)) happy_var_1 happy_var_3 - )}}} - -happyReduce_67 = happySpecReduce_1 28# happyReduction_67 -happyReduction_67 happy_x_1 - = case happyOut37 happy_x_1 of { happy_var_1 -> - happyIn36 - (happy_var_1 - )} - -happyReduce_68 = happySpecReduce_2 29# happyReduction_68 -happyReduction_68 happy_x_2 - happy_x_1 - = case happyOutTok happy_x_1 of { happy_var_1 -> - case happyOut38 happy_x_2 of { happy_var_2 -> - happyIn37 - (ENeg ((mkTokenSpan happy_var_1) >- (mkCatSpan happy_var_2)) happy_var_2 - )}} - -happyReduce_69 = happySpecReduce_1 29# happyReduction_69 -happyReduction_69 happy_x_1 - = case happyOut38 happy_x_1 of { happy_var_1 -> - happyIn37 - (happy_var_1 - )} - -happyReduce_70 = happySpecReduce_3 30# happyReduction_70 -happyReduction_70 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOut38 happy_x_1 of { happy_var_1 -> - case happyOutTok happy_x_2 of { happy_var_2 -> - case happyOut39 happy_x_3 of { happy_var_3 -> - happyIn38 - (ELt ((mkCatSpan happy_var_1) >- (mkTokenSpan happy_var_2) >- (mkCatSpan happy_var_3)) happy_var_1 happy_var_3 - )}}} - -happyReduce_71 = happySpecReduce_3 30# happyReduction_71 -happyReduction_71 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOut38 happy_x_1 of { happy_var_1 -> - case happyOutTok happy_x_2 of { happy_var_2 -> - case happyOut39 happy_x_3 of { happy_var_3 -> - happyIn38 - (EGt ((mkCatSpan happy_var_1) >- (mkTokenSpan happy_var_2) >- (mkCatSpan happy_var_3)) happy_var_1 happy_var_3 - )}}} - -happyReduce_72 = happySpecReduce_3 30# happyReduction_72 -happyReduction_72 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOut38 happy_x_1 of { happy_var_1 -> - case happyOutTok happy_x_2 of { happy_var_2 -> - case happyOut39 happy_x_3 of { happy_var_3 -> - happyIn38 - (EEq ((mkCatSpan happy_var_1) >- (mkTokenSpan happy_var_2) >- (mkCatSpan happy_var_3)) happy_var_1 happy_var_3 - )}}} - -happyReduce_73 = happySpecReduce_3 30# happyReduction_73 -happyReduction_73 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOut38 happy_x_1 of { happy_var_1 -> - case happyOutTok happy_x_2 of { happy_var_2 -> - case happyOut39 happy_x_3 of { happy_var_3 -> - happyIn38 - (ELte ((mkCatSpan happy_var_1) >- (mkTokenSpan happy_var_2) >- (mkCatSpan happy_var_3)) happy_var_1 happy_var_3 - )}}} - -happyReduce_74 = happySpecReduce_3 30# happyReduction_74 -happyReduction_74 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOut38 happy_x_1 of { happy_var_1 -> - case happyOutTok happy_x_2 of { happy_var_2 -> - case happyOut39 happy_x_3 of { happy_var_3 -> - happyIn38 - (EGte ((mkCatSpan happy_var_1) >- (mkTokenSpan happy_var_2) >- (mkCatSpan happy_var_3)) happy_var_1 happy_var_3 - )}}} - -happyReduce_75 = happySpecReduce_3 30# happyReduction_75 -happyReduction_75 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOut38 happy_x_1 of { happy_var_1 -> - case happyOutTok happy_x_2 of { happy_var_2 -> - case happyOut39 happy_x_3 of { happy_var_3 -> - happyIn38 - (ENeq ((mkCatSpan happy_var_1) >- (mkTokenSpan happy_var_2) >- (mkCatSpan happy_var_3)) happy_var_1 happy_var_3 - )}}} - -happyReduce_76 = happySpecReduce_3 30# happyReduction_76 -happyReduction_76 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOut38 happy_x_1 of { happy_var_1 -> - case happyOutTok happy_x_2 of { happy_var_2 -> - case happyOut39 happy_x_3 of { happy_var_3 -> - happyIn38 - (EIn ((mkCatSpan happy_var_1) >- (mkTokenSpan happy_var_2) >- (mkCatSpan happy_var_3)) happy_var_1 happy_var_3 - )}}} - -happyReduce_77 = happyReduce 4# 30# happyReduction_77 -happyReduction_77 (happy_x_4 `HappyStk` - happy_x_3 `HappyStk` - happy_x_2 `HappyStk` - happy_x_1 `HappyStk` - happyRest) - = case happyOut38 happy_x_1 of { happy_var_1 -> - case happyOutTok happy_x_2 of { happy_var_2 -> - case happyOutTok happy_x_3 of { happy_var_3 -> - case happyOut39 happy_x_4 of { happy_var_4 -> - happyIn38 - (ENin ((mkCatSpan happy_var_1) >- (mkTokenSpan happy_var_2) >- (mkTokenSpan happy_var_3) >- (mkCatSpan happy_var_4)) happy_var_1 happy_var_4 - ) `HappyStk` happyRest}}}} - -happyReduce_78 = happySpecReduce_1 30# happyReduction_78 -happyReduction_78 happy_x_1 - = case happyOut39 happy_x_1 of { happy_var_1 -> - happyIn38 - (happy_var_1 - )} - -happyReduce_79 = happySpecReduce_2 31# happyReduction_79 -happyReduction_79 happy_x_2 - happy_x_1 - = case happyOut52 happy_x_1 of { happy_var_1 -> - case happyOut43 happy_x_2 of { happy_var_2 -> - happyIn39 - (EQuantExp ((mkCatSpan happy_var_1) >- (mkCatSpan happy_var_2)) happy_var_1 happy_var_2 - )}} - -happyReduce_80 = happySpecReduce_1 31# happyReduction_80 -happyReduction_80 happy_x_1 - = case happyOut40 happy_x_1 of { happy_var_1 -> - happyIn39 - (happy_var_1 - )} - -happyReduce_81 = happySpecReduce_3 32# happyReduction_81 -happyReduction_81 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOut40 happy_x_1 of { happy_var_1 -> - case happyOutTok happy_x_2 of { happy_var_2 -> - case happyOut41 happy_x_3 of { happy_var_3 -> - happyIn40 - (EAdd ((mkCatSpan happy_var_1) >- (mkTokenSpan happy_var_2) >- (mkCatSpan happy_var_3)) happy_var_1 happy_var_3 - )}}} - -happyReduce_82 = happySpecReduce_3 32# happyReduction_82 -happyReduction_82 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOut40 happy_x_1 of { happy_var_1 -> - case happyOutTok happy_x_2 of { happy_var_2 -> - case happyOut41 happy_x_3 of { happy_var_3 -> - happyIn40 - (ESub ((mkCatSpan happy_var_1) >- (mkTokenSpan happy_var_2) >- (mkCatSpan happy_var_3)) happy_var_1 happy_var_3 - )}}} - -happyReduce_83 = happySpecReduce_1 32# happyReduction_83 -happyReduction_83 happy_x_1 - = case happyOut41 happy_x_1 of { happy_var_1 -> - happyIn40 - (happy_var_1 - )} - -happyReduce_84 = happySpecReduce_3 33# happyReduction_84 -happyReduction_84 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOut41 happy_x_1 of { happy_var_1 -> - case happyOutTok happy_x_2 of { happy_var_2 -> - case happyOut42 happy_x_3 of { happy_var_3 -> - happyIn41 - (EMul ((mkCatSpan happy_var_1) >- (mkTokenSpan happy_var_2) >- (mkCatSpan happy_var_3)) happy_var_1 happy_var_3 - )}}} - -happyReduce_85 = happySpecReduce_3 33# happyReduction_85 -happyReduction_85 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOut41 happy_x_1 of { happy_var_1 -> - case happyOutTok happy_x_2 of { happy_var_2 -> - case happyOut42 happy_x_3 of { happy_var_3 -> - happyIn41 - (EDiv ((mkCatSpan happy_var_1) >- (mkTokenSpan happy_var_2) >- (mkCatSpan happy_var_3)) happy_var_1 happy_var_3 - )}}} - -happyReduce_86 = happySpecReduce_3 33# happyReduction_86 -happyReduction_86 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOut41 happy_x_1 of { happy_var_1 -> - case happyOutTok happy_x_2 of { happy_var_2 -> - case happyOut42 happy_x_3 of { happy_var_3 -> - happyIn41 - (ERem ((mkCatSpan happy_var_1) >- (mkTokenSpan happy_var_2) >- (mkCatSpan happy_var_3)) happy_var_1 happy_var_3 - )}}} - -happyReduce_87 = happySpecReduce_1 33# happyReduction_87 -happyReduction_87 happy_x_1 - = case happyOut42 happy_x_1 of { happy_var_1 -> - happyIn41 - (happy_var_1 - )} - -happyReduce_88 = happySpecReduce_2 34# happyReduction_88 -happyReduction_88 happy_x_2 - happy_x_1 - = case happyOutTok happy_x_1 of { happy_var_1 -> - case happyOut43 happy_x_2 of { happy_var_2 -> - happyIn42 - (ESum ((mkTokenSpan happy_var_1) >- (mkCatSpan happy_var_2)) happy_var_2 - )}} - -happyReduce_89 = happySpecReduce_2 34# happyReduction_89 -happyReduction_89 happy_x_2 - happy_x_1 - = case happyOutTok happy_x_1 of { happy_var_1 -> - case happyOut43 happy_x_2 of { happy_var_2 -> - happyIn42 - (EProd ((mkTokenSpan happy_var_1) >- (mkCatSpan happy_var_2)) happy_var_2 - )}} - -happyReduce_90 = happySpecReduce_2 34# happyReduction_90 -happyReduction_90 happy_x_2 - happy_x_1 - = case happyOutTok happy_x_1 of { happy_var_1 -> - case happyOut43 happy_x_2 of { happy_var_2 -> - happyIn42 - (ECard ((mkTokenSpan happy_var_1) >- (mkCatSpan happy_var_2)) happy_var_2 - )}} - -happyReduce_91 = happySpecReduce_2 34# happyReduction_91 -happyReduction_91 happy_x_2 - happy_x_1 - = case happyOutTok happy_x_1 of { happy_var_1 -> - case happyOut43 happy_x_2 of { happy_var_2 -> - happyIn42 - (EMinExp ((mkTokenSpan happy_var_1) >- (mkCatSpan happy_var_2)) happy_var_2 - )}} - -happyReduce_92 = happySpecReduce_1 34# happyReduction_92 -happyReduction_92 happy_x_1 - = case happyOut43 happy_x_1 of { happy_var_1 -> - happyIn42 - (happy_var_1 - )} - -happyReduce_93 = happyReduce 6# 35# happyReduction_93 -happyReduction_93 (happy_x_6 `HappyStk` - happy_x_5 `HappyStk` - happy_x_4 `HappyStk` - happy_x_3 `HappyStk` - happy_x_2 `HappyStk` - happy_x_1 `HappyStk` - happyRest) - = case happyOutTok happy_x_1 of { happy_var_1 -> - case happyOut43 happy_x_2 of { happy_var_2 -> - case happyOutTok happy_x_3 of { happy_var_3 -> - case happyOut43 happy_x_4 of { happy_var_4 -> - case happyOutTok happy_x_5 of { happy_var_5 -> - case happyOut44 happy_x_6 of { happy_var_6 -> - happyIn43 - (EImpliesElse ((mkTokenSpan happy_var_1) >- (mkCatSpan happy_var_2) >- (mkTokenSpan happy_var_3) >- (mkCatSpan happy_var_4) >- (mkTokenSpan happy_var_5) >- (mkCatSpan happy_var_6)) happy_var_2 happy_var_4 happy_var_6 - ) `HappyStk` happyRest}}}}}} - -happyReduce_94 = happySpecReduce_1 35# happyReduction_94 -happyReduction_94 happy_x_1 - = case happyOut44 happy_x_1 of { happy_var_1 -> - happyIn43 - (happy_var_1 - )} - -happyReduce_95 = happySpecReduce_3 36# happyReduction_95 -happyReduction_95 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOut44 happy_x_1 of { happy_var_1 -> - case happyOutTok happy_x_2 of { happy_var_2 -> - case happyOut45 happy_x_3 of { happy_var_3 -> - happyIn44 - (EDomain ((mkCatSpan happy_var_1) >- (mkTokenSpan happy_var_2) >- (mkCatSpan happy_var_3)) happy_var_1 happy_var_3 - )}}} - -happyReduce_96 = happySpecReduce_1 36# happyReduction_96 -happyReduction_96 happy_x_1 - = case happyOut45 happy_x_1 of { happy_var_1 -> - happyIn44 - (happy_var_1 - )} - -happyReduce_97 = happySpecReduce_3 37# happyReduction_97 -happyReduction_97 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOut45 happy_x_1 of { happy_var_1 -> - case happyOutTok happy_x_2 of { happy_var_2 -> - case happyOut46 happy_x_3 of { happy_var_3 -> - happyIn45 - (ERange ((mkCatSpan happy_var_1) >- (mkTokenSpan happy_var_2) >- (mkCatSpan happy_var_3)) happy_var_1 happy_var_3 - )}}} - -happyReduce_98 = happySpecReduce_1 37# happyReduction_98 -happyReduction_98 happy_x_1 - = case happyOut46 happy_x_1 of { happy_var_1 -> - happyIn45 - (happy_var_1 - )} - -happyReduce_99 = happySpecReduce_3 38# happyReduction_99 -happyReduction_99 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOut46 happy_x_1 of { happy_var_1 -> - case happyOutTok happy_x_2 of { happy_var_2 -> - case happyOut47 happy_x_3 of { happy_var_3 -> - happyIn46 - (EUnion ((mkCatSpan happy_var_1) >- (mkTokenSpan happy_var_2) >- (mkCatSpan happy_var_3)) happy_var_1 happy_var_3 - )}}} - -happyReduce_100 = happySpecReduce_3 38# happyReduction_100 -happyReduction_100 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOut46 happy_x_1 of { happy_var_1 -> - case happyOutTok happy_x_2 of { happy_var_2 -> - case happyOut47 happy_x_3 of { happy_var_3 -> - happyIn46 - (EUnionCom ((mkCatSpan happy_var_1) >- (mkTokenSpan happy_var_2) >- (mkCatSpan happy_var_3)) happy_var_1 happy_var_3 - )}}} - -happyReduce_101 = happySpecReduce_1 38# happyReduction_101 -happyReduction_101 happy_x_1 - = case happyOut47 happy_x_1 of { happy_var_1 -> - happyIn46 - (happy_var_1 - )} - -happyReduce_102 = happySpecReduce_3 39# happyReduction_102 -happyReduction_102 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOut47 happy_x_1 of { happy_var_1 -> - case happyOutTok happy_x_2 of { happy_var_2 -> - case happyOut48 happy_x_3 of { happy_var_3 -> - happyIn47 - (EDifference ((mkCatSpan happy_var_1) >- (mkTokenSpan happy_var_2) >- (mkCatSpan happy_var_3)) happy_var_1 happy_var_3 - )}}} - -happyReduce_103 = happySpecReduce_1 39# happyReduction_103 -happyReduction_103 happy_x_1 - = case happyOut48 happy_x_1 of { happy_var_1 -> - happyIn47 - (happy_var_1 - )} - -happyReduce_104 = happySpecReduce_3 40# happyReduction_104 -happyReduction_104 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOut48 happy_x_1 of { happy_var_1 -> - case happyOutTok happy_x_2 of { happy_var_2 -> - case happyOut49 happy_x_3 of { happy_var_3 -> - happyIn48 - (EIntersection ((mkCatSpan happy_var_1) >- (mkTokenSpan happy_var_2) >- (mkCatSpan happy_var_3)) happy_var_1 happy_var_3 - )}}} - -happyReduce_105 = happySpecReduce_1 40# happyReduction_105 -happyReduction_105 happy_x_1 - = case happyOut49 happy_x_1 of { happy_var_1 -> - happyIn48 - (happy_var_1 - )} - -happyReduce_106 = happySpecReduce_3 41# happyReduction_106 -happyReduction_106 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOut49 happy_x_1 of { happy_var_1 -> - case happyOutTok happy_x_2 of { happy_var_2 -> - case happyOut50 happy_x_3 of { happy_var_3 -> - happyIn49 - (EJoin ((mkCatSpan happy_var_1) >- (mkTokenSpan happy_var_2) >- (mkCatSpan happy_var_3)) happy_var_1 happy_var_3 - )}}} - -happyReduce_107 = happySpecReduce_1 41# happyReduction_107 -happyReduction_107 happy_x_1 - = case happyOut50 happy_x_1 of { happy_var_1 -> - happyIn49 - (happy_var_1 - )} - -happyReduce_108 = happySpecReduce_1 42# happyReduction_108 -happyReduction_108 happy_x_1 - = case happyOut30 happy_x_1 of { happy_var_1 -> - happyIn50 - (ClaferId ((mkCatSpan happy_var_1)) happy_var_1 - )} - -happyReduce_109 = happySpecReduce_1 42# happyReduction_109 -happyReduction_109 happy_x_1 - = case happyOut8 happy_x_1 of { happy_var_1 -> - happyIn50 - (EInt ((mkCatSpan happy_var_1)) happy_var_1 - )} - -happyReduce_110 = happySpecReduce_1 42# happyReduction_110 -happyReduction_110 happy_x_1 - = case happyOut9 happy_x_1 of { happy_var_1 -> - happyIn50 - (EDouble ((mkCatSpan happy_var_1)) happy_var_1 - )} - -happyReduce_111 = happySpecReduce_1 42# happyReduction_111 -happyReduction_111 happy_x_1 - = case happyOut10 happy_x_1 of { happy_var_1 -> - happyIn50 - (EReal ((mkCatSpan happy_var_1)) happy_var_1 - )} - -happyReduce_112 = happySpecReduce_1 42# happyReduction_112 -happyReduction_112 happy_x_1 - = case happyOut11 happy_x_1 of { happy_var_1 -> - happyIn50 - (EStr ((mkCatSpan happy_var_1)) happy_var_1 - )} - -happyReduce_113 = happySpecReduce_3 42# happyReduction_113 -happyReduction_113 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOut31 happy_x_2 of { happy_var_2 -> - happyIn50 - (happy_var_2 - )} - -happyReduce_114 = happySpecReduce_3 43# happyReduction_114 -happyReduction_114 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOut60 happy_x_1 of { happy_var_1 -> - case happyOutTok happy_x_2 of { happy_var_2 -> - case happyOut44 happy_x_3 of { happy_var_3 -> - happyIn51 - (Decl ((mkCatSpan happy_var_1) >- (mkTokenSpan happy_var_2) >- (mkCatSpan happy_var_3)) happy_var_1 happy_var_3 - )}}} - -happyReduce_115 = happySpecReduce_1 44# happyReduction_115 -happyReduction_115 happy_x_1 - = case happyOutTok happy_x_1 of { happy_var_1 -> - happyIn52 - (QuantNo ((mkTokenSpan happy_var_1)) - )} - -happyReduce_116 = happySpecReduce_1 44# happyReduction_116 -happyReduction_116 happy_x_1 - = case happyOutTok happy_x_1 of { happy_var_1 -> - happyIn52 - (QuantNot ((mkTokenSpan happy_var_1)) - )} - -happyReduce_117 = happySpecReduce_1 44# happyReduction_117 -happyReduction_117 happy_x_1 - = case happyOutTok happy_x_1 of { happy_var_1 -> - happyIn52 - (QuantLone ((mkTokenSpan happy_var_1)) - )} - -happyReduce_118 = happySpecReduce_1 44# happyReduction_118 -happyReduction_118 happy_x_1 - = case happyOutTok happy_x_1 of { happy_var_1 -> - happyIn52 - (QuantOne ((mkTokenSpan happy_var_1)) - )} - -happyReduce_119 = happySpecReduce_1 44# happyReduction_119 -happyReduction_119 happy_x_1 - = case happyOutTok happy_x_1 of { happy_var_1 -> - happyIn52 - (QuantSome ((mkTokenSpan happy_var_1)) - )} - -happyReduce_120 = happySpecReduce_1 45# happyReduction_120 -happyReduction_120 happy_x_1 - = case happyOut12 happy_x_1 of { happy_var_1 -> - happyIn53 - (EnumIdIdent ((mkCatSpan happy_var_1)) happy_var_1 - )} - -happyReduce_121 = happySpecReduce_1 46# happyReduction_121 -happyReduction_121 happy_x_1 - = case happyOut12 happy_x_1 of { happy_var_1 -> - happyIn54 - (ModIdIdent ((mkCatSpan happy_var_1)) happy_var_1 - )} - -happyReduce_122 = happySpecReduce_1 47# happyReduction_122 -happyReduction_122 happy_x_1 - = case happyOut12 happy_x_1 of { happy_var_1 -> - happyIn55 - (LocIdIdent ((mkCatSpan happy_var_1)) happy_var_1 - )} - -happyReduce_123 = happySpecReduce_0 48# happyReduction_123 -happyReduction_123 = happyIn56 - ([] - ) - -happyReduce_124 = happySpecReduce_2 48# happyReduction_124 -happyReduction_124 happy_x_2 - happy_x_1 - = case happyOut56 happy_x_1 of { happy_var_1 -> - case happyOut14 happy_x_2 of { happy_var_2 -> - happyIn56 - (flip (:) happy_var_1 happy_var_2 - )}} - -happyReduce_125 = happySpecReduce_1 49# happyReduction_125 -happyReduction_125 happy_x_1 - = case happyOut53 happy_x_1 of { happy_var_1 -> - happyIn57 - ((:[]) happy_var_1 - )} - -happyReduce_126 = happySpecReduce_3 49# happyReduction_126 -happyReduction_126 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOut53 happy_x_1 of { happy_var_1 -> - case happyOut57 happy_x_3 of { happy_var_3 -> - happyIn57 - ((:) happy_var_1 happy_var_3 - )}} - -happyReduce_127 = happySpecReduce_0 50# happyReduction_127 -happyReduction_127 = happyIn58 - ([] - ) - -happyReduce_128 = happySpecReduce_2 50# happyReduction_128 -happyReduction_128 happy_x_2 - happy_x_1 - = case happyOut58 happy_x_1 of { happy_var_1 -> - case happyOut21 happy_x_2 of { happy_var_2 -> - happyIn58 - (flip (:) happy_var_1 happy_var_2 - )}} - -happyReduce_129 = happySpecReduce_0 51# happyReduction_129 -happyReduction_129 = happyIn59 - ([] - ) - -happyReduce_130 = happySpecReduce_2 51# happyReduction_130 -happyReduction_130 happy_x_2 - happy_x_1 - = case happyOut59 happy_x_1 of { happy_var_1 -> - case happyOut31 happy_x_2 of { happy_var_2 -> - happyIn59 - (flip (:) happy_var_1 happy_var_2 - )}} - -happyReduce_131 = happySpecReduce_1 52# happyReduction_131 -happyReduction_131 happy_x_1 - = case happyOut55 happy_x_1 of { happy_var_1 -> - happyIn60 - ((:[]) happy_var_1 - )} - -happyReduce_132 = happySpecReduce_3 52# happyReduction_132 -happyReduction_132 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOut55 happy_x_1 of { happy_var_1 -> - case happyOut60 happy_x_3 of { happy_var_3 -> - happyIn60 - ((:) happy_var_1 happy_var_3 - )}} - -happyReduce_133 = happySpecReduce_1 53# happyReduction_133 -happyReduction_133 happy_x_1 - = case happyOut54 happy_x_1 of { happy_var_1 -> - happyIn61 - ((:[]) happy_var_1 - )} - -happyReduce_134 = happySpecReduce_3 53# happyReduction_134 -happyReduction_134 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOut54 happy_x_1 of { happy_var_1 -> - case happyOut61 happy_x_3 of { happy_var_3 -> - happyIn61 - ((:) happy_var_1 happy_var_3 - )}} - -happyNewToken action sts stk [] = - happyDoAction 70# 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 _ (TS _ 43) -> cont 43#; - PT _ (TS _ 44) -> cont 44#; - PT _ (TS _ 45) -> cont 45#; - PT _ (TS _ 46) -> cont 46#; - PT _ (TS _ 47) -> cont 47#; - PT _ (TS _ 48) -> cont 48#; - PT _ (TS _ 49) -> cont 49#; - PT _ (TS _ 50) -> cont 50#; - PT _ (TS _ 51) -> cont 51#; - PT _ (TS _ 52) -> cont 52#; - PT _ (TS _ 53) -> cont 53#; - PT _ (TS _ 54) -> cont 54#; - PT _ (TS _ 55) -> cont 55#; - PT _ (TS _ 56) -> cont 56#; - PT _ (TS _ 57) -> cont 57#; - PT _ (TS _ 58) -> cont 58#; - PT _ (TS _ 59) -> cont 59#; - PT _ (TS _ 60) -> cont 60#; - PT _ (TS _ 61) -> cont 61#; - PT _ (TS _ 62) -> cont 62#; - PT _ (TS _ 63) -> cont 63#; - PT _ (TS _ 64) -> cont 64#; - PT _ (T_PosInteger _) -> cont 65#; - PT _ (T_PosDouble _) -> cont 66#; - PT _ (T_PosReal _) -> cont 67#; - PT _ (T_PosString _) -> cont 68#; - PT _ (T_PosIdent _) -> cont 69#; - _ -> happyError' (tk:tks) - } - -happyError_ 70# 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 - -pModule tks = happySomeParser where - happySomeParser = happyThen (happyParse 0# tks) (\x -> happyReturn (happyOut13 x)) - -pClafer tks = happySomeParser where - happySomeParser = happyThen (happyParse 1# tks) (\x -> happyReturn (happyOut15 x)) - -pConstraint tks = happySomeParser where - happySomeParser = happyThen (happyParse 2# tks) (\x -> happyReturn (happyOut16 x)) - -pAssertion tks = happySomeParser where - happySomeParser = happyThen (happyParse 3# tks) (\x -> happyReturn (happyOut17 x)) - -pGoal tks = happySomeParser where - happySomeParser = happyThen (happyParse 4# tks) (\x -> happyReturn (happyOut18 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 (pp ts) $ "syntax error at " ++ tokenPos ts ++ - case ts of - [] -> [] - [Err _] -> " due to lexer error" - _ -> " before " ++ unwords (map (id . prToken) (take 4 ts)) - -myLexer = tokens - -gp x@(PT (Pn _ l c) _) = Span (Pos (toInteger l) (toInteger c)) (Pos (toInteger l) (toInteger c + toInteger (length $ prToken x))) -pp (PT (Pn _ l c) _ :_) = Pos (toInteger l) (toInteger c) -pp (Err (Pn _ l c) :_) = Pos (toInteger l) (toInteger c) -pp _ = error "EOF" - -mkCatSpan :: (Spannable c) => c -> Span -mkCatSpan = getSpan - -mkTokenSpan :: Token -> Span -mkTokenSpan = gp -{-# LINE 1 "templates\GenericTemplate.hs" #-} -{-# LINE 1 "templates\\GenericTemplate.hs" #-} -{-# LINE 1 "<built-in>" #-} -{-# LINE 1 "<command-line>" #-} -{-# LINE 9 "<command-line>" #-} -{-# LINE 1 "C:\\dev\\MinGHC-7.10.1\\ghc-7.10.1\\lib/include\\ghcversion.h" #-} +happyIn13 :: (PosLineComment) -> (HappyAbsSyn ) +happyIn13 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn13 #-} +happyOut13 :: (HappyAbsSyn ) -> (PosLineComment) +happyOut13 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut13 #-} +happyIn14 :: (PosBlockComment) -> (HappyAbsSyn ) +happyIn14 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn14 #-} +happyOut14 :: (HappyAbsSyn ) -> (PosBlockComment) +happyOut14 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut14 #-} +happyIn15 :: (PosAlloy) -> (HappyAbsSyn ) +happyIn15 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn15 #-} +happyOut15 :: (HappyAbsSyn ) -> (PosAlloy) +happyOut15 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut15 #-} +happyIn16 :: (PosChoco) -> (HappyAbsSyn ) +happyIn16 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn16 #-} +happyOut16 :: (HappyAbsSyn ) -> (PosChoco) +happyOut16 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut16 #-} +happyIn17 :: (Module) -> (HappyAbsSyn ) +happyIn17 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn17 #-} +happyOut17 :: (HappyAbsSyn ) -> (Module) +happyOut17 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut17 #-} +happyIn18 :: (Declaration) -> (HappyAbsSyn ) +happyIn18 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn18 #-} +happyOut18 :: (HappyAbsSyn ) -> (Declaration) +happyOut18 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut18 #-} +happyIn19 :: (Clafer) -> (HappyAbsSyn ) +happyIn19 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn19 #-} +happyOut19 :: (HappyAbsSyn ) -> (Clafer) +happyOut19 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut19 #-} +happyIn20 :: (Constraint) -> (HappyAbsSyn ) +happyIn20 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn20 #-} +happyOut20 :: (HappyAbsSyn ) -> (Constraint) +happyOut20 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut20 #-} +happyIn21 :: (Assertion) -> (HappyAbsSyn ) +happyIn21 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn21 #-} +happyOut21 :: (HappyAbsSyn ) -> (Assertion) +happyOut21 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut21 #-} +happyIn22 :: (Goal) -> (HappyAbsSyn ) +happyIn22 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn22 #-} +happyOut22 :: (HappyAbsSyn ) -> (Goal) +happyOut22 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut22 #-} +happyIn23 :: (Abstract) -> (HappyAbsSyn ) +happyIn23 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn23 #-} +happyOut23 :: (HappyAbsSyn ) -> (Abstract) +happyOut23 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut23 #-} +happyIn24 :: (Elements) -> (HappyAbsSyn ) +happyIn24 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn24 #-} +happyOut24 :: (HappyAbsSyn ) -> (Elements) +happyOut24 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut24 #-} +happyIn25 :: (Element) -> (HappyAbsSyn ) +happyIn25 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn25 #-} +happyOut25 :: (HappyAbsSyn ) -> (Element) +happyOut25 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut25 #-} +happyIn26 :: (Super) -> (HappyAbsSyn ) +happyIn26 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn26 #-} +happyOut26 :: (HappyAbsSyn ) -> (Super) +happyOut26 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut26 #-} +happyIn27 :: (Reference) -> (HappyAbsSyn ) +happyIn27 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn27 #-} +happyOut27 :: (HappyAbsSyn ) -> (Reference) +happyOut27 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut27 #-} +happyIn28 :: (Init) -> (HappyAbsSyn ) +happyIn28 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn28 #-} +happyOut28 :: (HappyAbsSyn ) -> (Init) +happyOut28 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut28 #-} +happyIn29 :: (InitHow) -> (HappyAbsSyn ) +happyIn29 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn29 #-} +happyOut29 :: (HappyAbsSyn ) -> (InitHow) +happyOut29 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut29 #-} +happyIn30 :: (GCard) -> (HappyAbsSyn ) +happyIn30 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn30 #-} +happyOut30 :: (HappyAbsSyn ) -> (GCard) +happyOut30 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut30 #-} +happyIn31 :: (Card) -> (HappyAbsSyn ) +happyIn31 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn31 #-} +happyOut31 :: (HappyAbsSyn ) -> (Card) +happyOut31 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut31 #-} +happyIn32 :: (NCard) -> (HappyAbsSyn ) +happyIn32 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn32 #-} +happyOut32 :: (HappyAbsSyn ) -> (NCard) +happyOut32 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut32 #-} +happyIn33 :: (ExInteger) -> (HappyAbsSyn ) +happyIn33 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn33 #-} +happyOut33 :: (HappyAbsSyn ) -> (ExInteger) +happyOut33 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut33 #-} +happyIn34 :: (Name) -> (HappyAbsSyn ) +happyIn34 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn34 #-} +happyOut34 :: (HappyAbsSyn ) -> (Name) +happyOut34 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut34 #-} +happyIn35 :: (Exp) -> (HappyAbsSyn ) +happyIn35 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn35 #-} +happyOut35 :: (HappyAbsSyn ) -> (Exp) +happyOut35 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut35 #-} +happyIn36 :: (Exp) -> (HappyAbsSyn ) +happyIn36 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn36 #-} +happyOut36 :: (HappyAbsSyn ) -> (Exp) +happyOut36 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut36 #-} +happyIn37 :: (Exp) -> (HappyAbsSyn ) +happyIn37 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn37 #-} +happyOut37 :: (HappyAbsSyn ) -> (Exp) +happyOut37 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut37 #-} +happyIn38 :: (Exp) -> (HappyAbsSyn ) +happyIn38 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn38 #-} +happyOut38 :: (HappyAbsSyn ) -> (Exp) +happyOut38 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut38 #-} +happyIn39 :: (Exp) -> (HappyAbsSyn ) +happyIn39 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn39 #-} +happyOut39 :: (HappyAbsSyn ) -> (Exp) +happyOut39 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut39 #-} +happyIn40 :: (Exp) -> (HappyAbsSyn ) +happyIn40 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn40 #-} +happyOut40 :: (HappyAbsSyn ) -> (Exp) +happyOut40 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut40 #-} +happyIn41 :: (Exp) -> (HappyAbsSyn ) +happyIn41 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn41 #-} +happyOut41 :: (HappyAbsSyn ) -> (Exp) +happyOut41 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut41 #-} +happyIn42 :: (Exp) -> (HappyAbsSyn ) +happyIn42 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn42 #-} +happyOut42 :: (HappyAbsSyn ) -> (Exp) +happyOut42 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut42 #-} +happyIn43 :: (Exp) -> (HappyAbsSyn ) +happyIn43 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn43 #-} +happyOut43 :: (HappyAbsSyn ) -> (Exp) +happyOut43 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut43 #-} +happyIn44 :: (Exp) -> (HappyAbsSyn ) +happyIn44 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn44 #-} +happyOut44 :: (HappyAbsSyn ) -> (Exp) +happyOut44 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut44 #-} +happyIn45 :: (Exp) -> (HappyAbsSyn ) +happyIn45 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn45 #-} +happyOut45 :: (HappyAbsSyn ) -> (Exp) +happyOut45 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut45 #-} +happyIn46 :: (Exp) -> (HappyAbsSyn ) +happyIn46 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn46 #-} +happyOut46 :: (HappyAbsSyn ) -> (Exp) +happyOut46 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut46 #-} +happyIn47 :: (Exp) -> (HappyAbsSyn ) +happyIn47 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn47 #-} +happyOut47 :: (HappyAbsSyn ) -> (Exp) +happyOut47 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut47 #-} +happyIn48 :: (Exp) -> (HappyAbsSyn ) +happyIn48 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn48 #-} +happyOut48 :: (HappyAbsSyn ) -> (Exp) +happyOut48 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut48 #-} +happyIn49 :: (Exp) -> (HappyAbsSyn ) +happyIn49 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn49 #-} +happyOut49 :: (HappyAbsSyn ) -> (Exp) +happyOut49 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut49 #-} +happyIn50 :: (Exp) -> (HappyAbsSyn ) +happyIn50 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn50 #-} +happyOut50 :: (HappyAbsSyn ) -> (Exp) +happyOut50 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut50 #-} +happyIn51 :: (Exp) -> (HappyAbsSyn ) +happyIn51 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn51 #-} +happyOut51 :: (HappyAbsSyn ) -> (Exp) +happyOut51 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut51 #-} +happyIn52 :: (Exp) -> (HappyAbsSyn ) +happyIn52 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn52 #-} +happyOut52 :: (HappyAbsSyn ) -> (Exp) +happyOut52 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut52 #-} +happyIn53 :: (Exp) -> (HappyAbsSyn ) +happyIn53 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn53 #-} +happyOut53 :: (HappyAbsSyn ) -> (Exp) +happyOut53 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut53 #-} +happyIn54 :: (Exp) -> (HappyAbsSyn ) +happyIn54 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn54 #-} +happyOut54 :: (HappyAbsSyn ) -> (Exp) +happyOut54 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut54 #-} +happyIn55 :: (Decl) -> (HappyAbsSyn ) +happyIn55 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn55 #-} +happyOut55 :: (HappyAbsSyn ) -> (Decl) +happyOut55 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut55 #-} +happyIn56 :: (Quant) -> (HappyAbsSyn ) +happyIn56 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn56 #-} +happyOut56 :: (HappyAbsSyn ) -> (Quant) +happyOut56 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut56 #-} +happyIn57 :: (EnumId) -> (HappyAbsSyn ) +happyIn57 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn57 #-} +happyOut57 :: (HappyAbsSyn ) -> (EnumId) +happyOut57 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut57 #-} +happyIn58 :: (ModId) -> (HappyAbsSyn ) +happyIn58 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn58 #-} +happyOut58 :: (HappyAbsSyn ) -> (ModId) +happyOut58 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut58 #-} +happyIn59 :: (LocId) -> (HappyAbsSyn ) +happyIn59 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn59 #-} +happyOut59 :: (HappyAbsSyn ) -> (LocId) +happyOut59 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut59 #-} +happyIn60 :: ([Declaration]) -> (HappyAbsSyn ) +happyIn60 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn60 #-} +happyOut60 :: (HappyAbsSyn ) -> ([Declaration]) +happyOut60 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut60 #-} +happyIn61 :: ([EnumId]) -> (HappyAbsSyn ) +happyIn61 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn61 #-} +happyOut61 :: (HappyAbsSyn ) -> ([EnumId]) +happyOut61 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut61 #-} +happyIn62 :: ([Element]) -> (HappyAbsSyn ) +happyIn62 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn62 #-} +happyOut62 :: (HappyAbsSyn ) -> ([Element]) +happyOut62 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut62 #-} +happyIn63 :: ([Exp]) -> (HappyAbsSyn ) +happyIn63 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn63 #-} +happyOut63 :: (HappyAbsSyn ) -> ([Exp]) +happyOut63 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut63 #-} +happyIn64 :: ([LocId]) -> (HappyAbsSyn ) +happyIn64 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn64 #-} +happyOut64 :: (HappyAbsSyn ) -> ([LocId]) +happyOut64 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut64 #-} +happyIn65 :: ([ModId]) -> (HappyAbsSyn ) +happyIn65 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn65 #-} +happyOut65 :: (HappyAbsSyn ) -> ([ModId]) +happyOut65 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut65 #-} +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# "\x00\x00\x24\x01\x1f\x01\x18\x01\x03\x01\xfe\x00\x00\x00\xf4\x00\x00\x00\xf4\x00\x19\x01\xeb\x00\x00\x00\xeb\x00\xdd\xff\x00\x00\xeb\x00\x88\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xee\x00\xee\x00\x0a\x01\xd3\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x65\x00\x00\x00\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\x00\xfc\x00\xd8\x00\xda\x00\x10\x01\x00\x00\x0e\x05\x00\x00\x6c\x00\x03\x00\x00\x00\x00\x00\xfa\x00\xf3\x00\x90\x00\x01\x01\x11\x00\xef\x00\x00\x00\xa7\x00\xdb\x00\x00\x00\x3b\x00\xaf\x00\x83\x00\xaf\x00\x00\x00\xd8\xff\xaf\x00\x00\x00\xc9\x00\xc9\x00\x00\x00\x00\x00\x00\x00\xaf\x00\x00\x00\xaf\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\xe7\x00\xfd\xff\xdc\x00\x08\x00\xe5\x00\xb8\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa8\x00\x00\x00\x00\x00\x00\x00\x77\x00\x1a\x00\x00\x00\x00\x00\x00\x00\xd0\x00\xaf\x00\xd0\x00\xb4\x00\x00\x00\xa9\x00\xcf\x00\xcb\x00\x99\x00\x00\x00\xd6\x00\x00\x00\x0e\x05\x96\x00\x52\x00\x00\x00\x97\x00\x95\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x9f\x00\x9f\x00\x9f\x00\x9f\x00\x9f\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\xa4\x00\xc9\x00\xc9\x00\xc9\x00\xc9\x00\xc9\x00\xb2\x00\x8e\x00\x92\x00\xc5\x00\x00\x00\x3b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x00\x03\x00\x00\x00\x00\x00\x00\x00\xac\x00\x76\x00\xb3\x00\xb3\x00\x11\x00\xae\x00\xae\x00\x00\x00\x82\x00\x83\x00\x00\x00\x00\x00\x7b\x00\x1a\x00\x5e\x00\x83\x00\xaf\x00\x91\x00\x08\x00\x1a\x00\x1a\x00\x00\x00\x73\x00\x00\x00\x00\x00\x00\x00\x26\x01\x5b\x00\x76\x00\x76\x00\xef\xff\x68\x00\x00\x00\x00\x00\x76\x00\x83\x00\x00\x00\x83\x00\x00\x00\x00\x00\x00\x00\x1a\x00\x54\x00\x83\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x75\x00\x00\x00"# + +happyGotoOffsets :: HappyAddr +happyGotoOffsets = HappyA# "\xf8\xff\x0e\x00\x81\x00\x7c\x00\x64\x00\x00\x00\x00\x00\x00\x00\x44\x00\x00\x00\x00\x00\x00\x00\x42\x00\x00\x00\x18\x00\x00\x00\x00\x00\x3a\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x53\x00\x6a\x00\x00\x00\x57\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6a\x02\x17\x00\x6a\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x37\x05\x00\x00\x00\x00\xea\x03\x0a\x06\x37\x02\xec\x05\x00\x00\xe2\x00\xd7\x05\x00\x00\x03\x03\xd0\x02\x00\x00\x00\x00\x00\x00\xb9\x05\x00\x00\xa4\x05\x00\x00\x00\x00\x00\x00\x00\x00\x04\x02\x00\x00\x12\x00\x0a\x00\x00\x00\xfb\x00\x00\x00\x3c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x47\x00\x00\x00\x00\x00\x00\x00\x09\x00\xcf\x06\x00\x00\x00\x00\x00\x00\x00\x00\x86\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x05\x00\x03\x07\xc9\x06\xc1\x06\xb4\x06\xac\x06\x8e\x06\x79\x06\x3d\x06\x4b\x03\x18\x03\xe5\x02\xb2\x02\x7f\x02\x22\x05\xef\x04\xd4\x04\xa1\x04\x86\x04\x53\x04\x38\x04\x00\x00\xb7\x03\x9c\x03\x69\x03\x36\x03\x9d\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd1\x01\x00\x00\x00\x00\x00\x00\x70\x06\xa1\x00\x9e\x01\x71\x05\x00\x00\x98\x00\x5b\x06\x28\x06\x00\x00\x00\x00\x00\x00\x00\x00\xdc\xff\x67\x01\x21\x00\x00\x00\x00\x00\x14\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6b\x01\x00\x00\x38\x01\x00\x00\x00\x00\x00\x00\x1f\x06\xfe\xff\x05\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"# + +happyDefActions :: HappyAddr +happyDefActions = HappyA# "\x7f\xff\xea\xff\x00\x00\x00\x00\x00\x00\x00\x00\xfa\xff\x00\x00\x79\xff\x00\x00\x00\x00\x00\x00\x79\xff\x00\x00\xd8\xff\xe9\xff\x00\x00\xea\xff\x7e\xff\xe6\xff\xe4\xff\xe2\xff\xe3\xff\xef\xff\x00\x00\x00\x00\x00\x00\x00\x00\xd3\xff\xd5\xff\xd4\xff\xd6\xff\xd7\xff\x00\x00\x79\xff\x00\x00\x8d\xff\x8c\xff\x8b\xff\x8a\xff\x81\xff\x8e\xff\x78\xff\xc4\xff\xc0\xff\xbe\xff\xbc\xff\xba\xff\xb8\xff\xb6\xff\xad\xff\xab\xff\xa8\xff\xa4\xff\x9f\xff\x9d\xff\x9b\xff\x99\xff\x96\xff\x94\xff\x91\xff\x8f\xff\x00\x00\x75\xff\xc9\xff\x00\x00\x00\x00\x00\x00\x00\x00\xeb\xff\x00\x00\x00\x00\x85\xff\x00\x00\x00\x00\x87\xff\x86\xff\x84\xff\x00\x00\x83\xff\x00\x00\xf9\xff\xf8\xff\xf7\xff\xf6\xff\x00\x00\xed\xff\xe1\xff\x00\x00\x00\x00\xd2\xff\xce\xff\xe8\xff\xcd\xff\xcf\xff\xd0\xff\xd1\xff\x00\x00\xca\xff\xcc\xff\xcb\xff\xdf\xff\x00\x00\xec\xff\xa3\xff\xa2\xff\xc2\xff\x00\x00\xc3\xff\x00\x00\x80\xff\x00\x00\x77\xff\x00\x00\x00\x00\xa0\xff\x00\x00\xa1\xff\xb7\xff\x00\x00\x81\xff\xac\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1\xff\xbf\xff\xbd\xff\xbb\xff\xb9\xff\x00\x00\xaf\xff\xb1\xff\xb4\xff\xb3\xff\xb2\xff\xb5\xff\xb0\xff\xa9\xff\xaa\xff\xa6\xff\xa7\xff\xa5\xff\x9c\xff\x9a\xff\x97\xff\x98\xff\x95\xff\x93\xff\x92\xff\x90\xff\x00\x00\x00\x00\x74\xff\x89\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe0\xff\xd2\xff\x00\x00\x00\x00\x82\xff\x7d\xff\xf0\xff\xe5\xff\x7b\xff\xea\xff\x00\x00\xdd\xff\xde\xff\xdc\xff\x00\x00\xc7\xff\x76\xff\x88\xff\x00\x00\xc5\xff\x00\x00\xae\xff\xc6\xff\xc8\xff\x00\x00\xe8\xff\x00\x00\xd9\xff\xda\xff\x7c\xff\x7a\xff\xe7\xff\xdb\xff\xee\xff\x9e\xff"# + +happyCheck :: HappyAddr +happyCheck = HappyA# "\xff\xff\x09\x00\x01\x00\x2b\x00\x03\x00\x16\x00\x09\x00\x04\x00\x07\x00\x04\x00\x00\x00\x04\x00\x09\x00\x1e\x00\x10\x00\x0e\x00\x33\x00\x09\x00\x36\x00\x0b\x00\x37\x00\x38\x00\x05\x00\x14\x00\x00\x00\x0b\x00\x3d\x00\x0a\x00\x13\x00\x0f\x00\x46\x00\x42\x00\x01\x00\x07\x00\x03\x00\x19\x00\x12\x00\x04\x00\x07\x00\x26\x00\x14\x00\x15\x00\x29\x00\x23\x00\x34\x00\x0e\x00\x16\x00\x2e\x00\x18\x00\x30\x00\x31\x00\x32\x00\x2f\x00\x34\x00\x35\x00\x36\x00\x33\x00\x32\x00\x39\x00\x3a\x00\x3b\x00\x38\x00\x03\x00\x42\x00\x39\x00\x22\x00\x07\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x29\x00\x0e\x00\x42\x00\x04\x00\x10\x00\x2e\x00\x37\x00\x30\x00\x31\x00\x32\x00\x31\x00\x34\x00\x35\x00\x36\x00\x35\x00\x04\x00\x39\x00\x3a\x00\x3b\x00\x04\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x01\x00\x15\x00\x03\x00\x2e\x00\x18\x00\x30\x00\x07\x00\x1a\x00\x04\x00\x34\x00\x35\x00\x36\x00\x0e\x00\x0e\x00\x39\x00\x3a\x00\x3b\x00\x0b\x00\x31\x00\x37\x00\x0e\x00\x37\x00\x35\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x0c\x00\x0d\x00\x01\x00\x32\x00\x03\x00\x10\x00\x11\x00\x0d\x00\x07\x00\x26\x00\x39\x00\x0c\x00\x29\x00\x1a\x00\x04\x00\x0e\x00\x3e\x00\x2e\x00\x2c\x00\x30\x00\x31\x00\x32\x00\x00\x00\x34\x00\x35\x00\x36\x00\x0c\x00\x0d\x00\x39\x00\x3a\x00\x3b\x00\x46\x00\x03\x00\x12\x00\x46\x00\x04\x00\x07\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x29\x00\x0e\x00\x07\x00\x17\x00\x18\x00\x2e\x00\x3f\x00\x30\x00\x31\x00\x32\x00\x07\x00\x34\x00\x35\x00\x36\x00\x3f\x00\x2f\x00\x39\x00\x3a\x00\x3b\x00\x33\x00\x12\x00\x3f\x00\x0f\x00\x17\x00\x38\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x01\x00\x06\x00\x03\x00\x2e\x00\x40\x00\x3d\x00\x07\x00\x1f\x00\x2b\x00\x2f\x00\x33\x00\x2e\x00\x3f\x00\x0e\x00\x39\x00\x38\x00\x3b\x00\x46\x00\x46\x00\x2e\x00\x08\x00\x46\x00\x15\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x04\x00\x18\x00\x3f\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x46\x00\x1f\x00\x3c\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x3e\x00\x2e\x00\x13\x00\x30\x00\x1e\x00\x00\x00\x15\x00\x34\x00\x35\x00\x36\x00\x25\x00\x12\x00\x39\x00\x3a\x00\x3b\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x17\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x0f\x00\x2f\x00\x17\x00\x18\x00\x1a\x00\x33\x00\x06\x00\x3d\x00\x40\x00\x46\x00\x38\x00\x1f\x00\x1d\x00\x13\x00\x1b\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\x46\x00\x30\x00\x4b\x00\x32\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x24\x00\x39\x00\x4b\x00\x42\x00\x1b\x00\x2a\x00\x24\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x24\x00\x11\x00\x28\x00\x27\x00\x28\x00\xff\xff\x2a\x00\xff\xff\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\x41\x00\x30\x00\xff\xff\x32\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\x39\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\xff\xff\x11\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\xff\xff\x30\x00\xff\xff\x32\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\xff\xff\x30\x00\xff\xff\x32\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\xff\xff\x30\x00\xff\xff\x32\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\xff\xff\x30\x00\xff\xff\x32\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\xff\xff\x30\x00\xff\xff\x32\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\x39\x00\xff\xff\xff\xff\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\x01\x00\x02\x00\x03\x00\x04\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\x1a\x00\x30\x00\xff\xff\x32\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\x39\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\xff\xff\xff\xff\xff\xff\x32\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x1a\x00\x39\x00\xff\xff\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\x1a\x00\x30\x00\xff\xff\x32\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\x39\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\xff\xff\xff\xff\xff\xff\x32\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x1a\x00\x39\x00\xff\xff\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\x1a\x00\x30\x00\xff\xff\x32\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\x39\x00\xff\xff\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\xff\xff\xff\xff\xff\xff\x32\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x1a\x00\x39\x00\xff\xff\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\x1a\x00\x30\x00\xff\xff\x32\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\x39\x00\xff\xff\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\xff\xff\xff\xff\xff\xff\x32\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x1a\x00\x39\x00\xff\xff\xff\xff\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\x1a\x00\x30\x00\xff\xff\x32\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\x39\x00\xff\xff\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\xff\xff\xff\xff\xff\xff\x32\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x39\x00\xff\xff\xff\xff\xff\xff\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\xff\xff\x30\x00\xff\xff\x32\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\x39\x00\x1b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x24\x00\xff\xff\xff\xff\x27\x00\x28\x00\xff\xff\x2a\x00\xff\xff\xff\xff\x2d\x00\x1a\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\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\xff\xff\x30\x00\xff\xff\x32\x00\xff\xff\xff\xff\x1a\x00\xff\xff\x4b\x00\xff\xff\x39\x00\xff\xff\xff\xff\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\xff\xff\x30\x00\xff\xff\x32\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\xff\xff\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\xff\xff\x30\x00\xff\xff\x32\x00\xff\xff\xff\xff\x1a\x00\xff\xff\xff\xff\xff\xff\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\xff\xff\x30\x00\xff\xff\x32\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\xff\xff\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\xff\xff\x30\x00\xff\xff\x32\x00\xff\xff\xff\xff\x1a\x00\xff\xff\xff\xff\xff\xff\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\xff\xff\x30\x00\xff\xff\x32\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\xff\xff\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\xff\xff\x30\x00\xff\xff\x32\x00\xff\xff\xff\xff\x1a\x00\xff\xff\xff\xff\xff\xff\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\xff\xff\x30\x00\xff\xff\x32\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\xff\xff\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\xff\xff\x30\x00\xff\xff\x32\x00\xff\xff\xff\xff\x1a\x00\xff\xff\xff\xff\xff\xff\x39\x00\xff\xff\xff\xff\x02\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\xff\xff\x30\x00\xff\xff\x32\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x19\x00\x39\x00\xff\xff\x1c\x00\xff\xff\x1e\x00\xff\xff\x20\x00\x21\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x1a\x00\x2f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x35\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x1a\x00\x30\x00\xff\xff\x32\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x39\x00\xff\xff\xff\xff\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\xff\xff\xff\xff\x32\x00\x33\x00\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x39\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\xff\xff\xff\xff\xff\xff\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\x01\x00\x02\x00\x03\x00\x04\x00\x1a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x1a\x00\xff\xff\xff\xff\x32\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\x39\x00\xff\xff\xff\xff\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\xff\xff\xff\xff\xff\xff\x32\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x1a\x00\x39\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\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x1a\x00\xff\xff\xff\xff\x32\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\x39\x00\xff\xff\xff\xff\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\xff\xff\xff\xff\xff\xff\x32\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x1a\x00\x39\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\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x1a\x00\xff\xff\xff\xff\x32\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\x39\x00\xff\xff\xff\xff\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\xff\xff\xff\xff\xff\xff\x32\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x1a\x00\x39\x00\xff\xff\xff\xff\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\xff\xff\xff\xff\xff\xff\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x1a\x00\xff\xff\xff\xff\x32\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x1a\x00\x39\x00\xff\xff\xff\xff\xff\xff\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\xff\xff\xff\xff\xff\xff\x32\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x1a\x00\x39\x00\xff\xff\x32\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\xff\xff\xff\xff\xff\xff\x32\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x1a\x00\x39\x00\xff\xff\xff\xff\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x1a\x00\xff\xff\xff\xff\x32\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x1a\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\xff\xff\xff\xff\xff\xff\x32\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x1a\x00\x39\x00\xff\xff\x32\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\x39\x00\xff\xff\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\xff\xff\xff\xff\xff\xff\x32\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x1a\x00\x39\x00\xff\xff\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x1a\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\xff\xff\xff\xff\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x1a\x00\xff\xff\xff\xff\x32\x00\xff\xff\x2c\x00\x2d\x00\x2e\x00\x1a\x00\xff\xff\x39\x00\x32\x00\xff\xff\xff\xff\x1a\x00\xff\xff\xff\xff\xff\xff\x39\x00\x2d\x00\x2e\x00\xff\xff\xff\xff\xff\xff\x32\x00\xff\xff\xff\xff\x2d\x00\x2e\x00\xff\xff\xff\xff\x39\x00\x32\x00\x2d\x00\x2e\x00\xff\xff\xff\xff\xff\xff\x32\x00\x39\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2e\x00\xff\xff\xff\xff\xff\xff\x32\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x10\x00\x42\x00\x73\x00\x43\x00\xd5\x00\x65\x00\x85\x00\x44\x00\x6e\x00\x62\x00\x28\x00\x86\x00\xd6\x00\xda\x00\x45\x00\x1e\x00\x5f\x00\xc2\x00\x60\x00\x1f\x00\x20\x00\x7e\x00\x87\x00\x1a\x00\x0d\x00\x21\x00\x7f\x00\xba\x00\x0e\x00\x55\x00\x07\x00\x42\x00\x44\x00\x43\x00\x63\x00\x65\x00\xbd\x00\x44\x00\x68\x00\xd2\x00\xd3\x00\x47\x00\x61\x00\x11\x00\x45\x00\x1b\x00\x48\x00\x1c\x00\x49\x00\x4a\x00\x4b\x00\xb0\x00\x4c\x00\x4d\x00\x4e\x00\x70\x00\x3f\x00\x4f\x00\x50\x00\x51\x00\x71\x00\x43\x00\x07\x00\xb2\x00\x46\x00\x44\x00\x07\x00\x52\x00\x53\x00\x54\x00\x55\x00\x47\x00\x45\x00\x07\x00\xbd\x00\xc0\x00\x48\x00\x55\x00\x49\x00\x4a\x00\x4b\x00\xbe\x00\x4c\x00\x4d\x00\x4e\x00\xd6\x00\x28\x00\x4f\x00\x50\x00\x51\x00\x57\x00\x07\x00\x52\x00\x53\x00\x54\x00\x55\x00\x07\x00\x52\x00\x53\x00\x54\x00\x55\x00\x42\x00\x80\xff\x43\x00\x48\x00\x80\xff\x49\x00\x44\x00\x5a\x00\x59\x00\x4c\x00\x4d\x00\x4e\x00\x07\x00\x45\x00\x4f\x00\x50\x00\x51\x00\x88\x00\xbe\x00\x21\x00\x89\x00\x23\x00\xbf\x00\x07\x00\x52\x00\x53\x00\x54\x00\x55\x00\x81\x00\x82\x00\x42\x00\x3f\x00\x43\x00\xbc\x00\xbd\x00\x09\x00\x44\x00\x57\x00\x40\x00\x0b\x00\x47\x00\x84\x00\x6e\x00\x45\x00\xc2\x00\x48\x00\xd2\x00\x49\x00\x4a\x00\x4b\x00\x5b\x00\x4c\x00\x4d\x00\x4e\x00\x81\x00\x82\x00\x4f\x00\x50\x00\x51\x00\x55\x00\x43\x00\x7d\x00\x55\x00\x6e\x00\x44\x00\x07\x00\x52\x00\x53\x00\x54\x00\x55\x00\x47\x00\x45\x00\x44\x00\xc6\x00\x5d\x00\x48\x00\xc4\x00\x49\x00\x4a\x00\x4b\x00\x44\x00\x4c\x00\x4d\x00\x4e\x00\xcc\x00\xb4\x00\x4f\x00\x50\x00\x51\x00\x70\x00\x7d\x00\xce\x00\x80\x00\x83\x00\x71\x00\x07\x00\x52\x00\x53\x00\x54\x00\x55\x00\x42\x00\x92\x00\x43\x00\x48\x00\x94\x00\x93\x00\x44\x00\x95\x00\x7c\x00\x9c\x00\x70\x00\x48\x00\xb2\x00\x45\x00\x4f\x00\xc9\x00\x51\x00\x55\x00\x55\x00\x48\x00\xb4\x00\x55\x00\xb6\x00\x07\x00\x52\x00\x53\x00\x54\x00\x55\x00\x6e\x00\xb7\x00\xb8\x00\x07\x00\x52\x00\x53\x00\x54\x00\x55\x00\x55\x00\x95\x00\xb9\x00\x07\x00\x52\x00\x53\x00\x54\x00\x55\x00\xc2\x00\x48\x00\x59\x00\x49\x00\x62\x00\x5b\x00\x67\x00\x4c\x00\x4d\x00\x4e\x00\x78\x00\x7d\x00\x4f\x00\x50\x00\x51\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x83\x00\x07\x00\x52\x00\x53\x00\x54\x00\x55\x00\x80\x00\x6f\x00\x5c\x00\x5d\x00\x84\x00\x70\x00\x92\x00\x93\x00\x94\x00\x55\x00\x71\x00\x95\x00\x96\x00\x59\x00\x09\x00\x29\x00\xd9\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\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\x55\x00\x3e\x00\xff\xff\x3f\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x23\x00\x40\x00\xff\xff\x07\x00\x09\x00\x0b\x00\x0d\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x0e\x00\x0d\x00\x17\x00\x10\x00\x19\x00\x10\x00\x00\x00\x0b\x00\x00\x00\x29\x00\xcf\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\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\xd9\x00\x3e\x00\x00\x00\x3f\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x00\x00\x40\x00\x13\x00\x14\x00\x15\x00\x16\x00\x0e\x00\x00\x00\xd7\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x00\xd0\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\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\x00\x00\x3e\x00\x00\x00\x3f\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x00\xc8\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\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\x00\x00\x3e\x00\x00\x00\x3f\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x00\xcc\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\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\x00\x00\x3e\x00\x00\x00\x3f\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x3e\x00\x00\x00\x3f\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x00\x74\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\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\x00\x00\x3e\x00\x00\x00\x3f\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x29\x00\x3e\x00\x00\x00\x3f\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x00\x00\x40\x00\xa3\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x00\x00\x00\x00\x00\x00\x3f\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x40\x00\x00\x00\x96\x00\x2d\x00\x2e\x00\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\x29\x00\x6b\x00\x00\x00\x3f\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x00\x00\x40\x00\xa4\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x00\x00\x00\x00\x00\x00\x3f\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x40\x00\x00\x00\x6a\x00\x2d\x00\x2e\x00\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\x29\x00\x6b\x00\x00\x00\x3f\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x00\x00\x40\x00\x00\x00\xa5\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x00\x00\x00\x00\x00\x00\x3f\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x40\x00\x00\x00\x6c\x00\x2d\x00\x2e\x00\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\x29\x00\x6b\x00\x00\x00\x3f\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x00\x00\x40\x00\x00\x00\xa6\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x00\x00\x00\x00\x00\x00\x3f\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x40\x00\x00\x00\x00\x00\x97\x00\x2e\x00\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\x29\x00\x6b\x00\x00\x00\x3f\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x00\x00\x40\x00\x00\x00\xa7\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x00\x00\x00\x00\x00\x00\x3f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x00\x40\x00\x00\x00\x00\x00\x00\x00\x98\x00\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\x00\x00\x6b\x00\x00\x00\x3f\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x00\x00\x40\x00\x09\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0d\x00\x00\x00\x00\x00\x19\x00\x10\x00\x00\x00\x0b\x00\x00\x00\x00\x00\x1a\x00\x29\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x99\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\x00\x00\x6b\x00\x00\x00\x3f\x00\x00\x00\x00\x00\x29\x00\x00\x00\xf1\xff\x00\x00\x40\x00\x00\x00\x00\x00\x9a\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\x00\x00\x6b\x00\x00\x00\x3f\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x00\x00\x00\x00\x76\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\x00\x00\x6b\x00\x00\x00\x3f\x00\x00\x00\x00\x00\x29\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\xce\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x00\x00\x6b\x00\x00\x00\x3f\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x00\x00\x00\x00\x00\x00\x9c\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x00\x00\x6b\x00\x00\x00\x3f\x00\x00\x00\x00\x00\x29\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9d\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x00\x00\x6b\x00\x00\x00\x3f\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x00\x00\x00\x00\x00\x00\x9e\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x00\x00\x6b\x00\x00\x00\x3f\x00\x00\x00\x00\x00\x29\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9f\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x00\x00\x6b\x00\x00\x00\x3f\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x00\x00\x00\x00\x00\x00\xa0\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x00\x00\x6b\x00\x00\x00\x3f\x00\x00\x00\x00\x00\x29\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x8a\x00\x00\x00\xa1\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x00\x00\x6b\x00\x00\x00\x3f\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x8b\x00\x40\x00\x00\x00\x8c\x00\x00\x00\x8d\x00\x00\x00\x8e\x00\x8f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x24\x00\x25\x00\x26\x00\x27\x00\x78\x00\x29\x00\x90\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x91\x00\x00\x00\xa2\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x29\x00\x6b\x00\x00\x00\x3f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x79\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x7a\x00\x00\x00\x00\x00\x3f\x00\x70\x00\x00\x00\x00\x00\x00\x00\x00\x00\x71\x00\x40\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x29\x00\x00\x00\x00\x00\x3f\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x00\x00\x40\x00\x00\x00\x00\x00\x79\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x00\x00\x00\x00\x00\x00\x3f\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\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\x68\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x29\x00\x00\x00\x00\x00\x3f\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x00\x00\x40\x00\x00\x00\x00\x00\x69\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x00\x00\x00\x00\x00\x00\x3f\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\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\x6d\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x29\x00\x00\x00\x00\x00\x3f\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x00\x00\x40\x00\x00\x00\x00\x00\x73\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x00\x00\x00\x00\x00\x00\x3f\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x40\x00\x00\x00\x00\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x00\x00\x00\x00\x00\x00\x00\x00\x75\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x29\x00\x00\x00\x00\x00\x3f\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x40\x00\x00\x00\x00\x00\x00\x00\xdb\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x00\x00\x00\x00\x00\x00\x3f\x00\xc4\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x29\x00\x40\x00\x00\x00\x3f\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa8\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x00\x00\x00\x00\x00\x00\x3f\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x40\x00\x00\x00\x00\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc5\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x29\x00\x00\x00\x00\x00\x3f\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xca\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x00\x00\x00\x00\x00\x00\x3f\x00\xa9\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x29\x00\x40\x00\x00\x00\x3f\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x00\x00\x40\x00\x00\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\xaa\x00\x3b\x00\x3c\x00\x3d\x00\x00\x00\x00\x00\x00\x00\x3f\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x40\x00\x00\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x00\x00\x00\x00\x00\x00\xab\x00\x3b\x00\x3c\x00\x3d\x00\x29\x00\x00\x00\x00\x00\x3f\x00\x00\x00\xac\x00\x3c\x00\x3d\x00\x29\x00\x00\x00\x40\x00\x3f\x00\x00\x00\x00\x00\x29\x00\x00\x00\x00\x00\x00\x00\x40\x00\xad\x00\x3d\x00\x00\x00\x00\x00\x00\x00\x3f\x00\x00\x00\x00\x00\xae\x00\x3d\x00\x00\x00\x00\x00\x40\x00\x3f\x00\xb9\x00\x3d\x00\x00\x00\x00\x00\x00\x00\x3f\x00\x40\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\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\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xaf\x00\x00\x00\x00\x00\x00\x00\x3f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"# + +happyReduceArr = Happy_Data_Array.array (5, 139) [ + (5 , happyReduce_5), + (6 , happyReduce_6), + (7 , happyReduce_7), + (8 , happyReduce_8), + (9 , happyReduce_9), + (10 , happyReduce_10), + (11 , happyReduce_11), + (12 , happyReduce_12), + (13 , happyReduce_13), + (14 , happyReduce_14), + (15 , happyReduce_15), + (16 , happyReduce_16), + (17 , happyReduce_17), + (18 , happyReduce_18), + (19 , happyReduce_19), + (20 , happyReduce_20), + (21 , happyReduce_21), + (22 , happyReduce_22), + (23 , happyReduce_23), + (24 , happyReduce_24), + (25 , happyReduce_25), + (26 , happyReduce_26), + (27 , happyReduce_27), + (28 , happyReduce_28), + (29 , happyReduce_29), + (30 , happyReduce_30), + (31 , happyReduce_31), + (32 , happyReduce_32), + (33 , happyReduce_33), + (34 , happyReduce_34), + (35 , happyReduce_35), + (36 , happyReduce_36), + (37 , happyReduce_37), + (38 , happyReduce_38), + (39 , happyReduce_39), + (40 , happyReduce_40), + (41 , happyReduce_41), + (42 , happyReduce_42), + (43 , happyReduce_43), + (44 , happyReduce_44), + (45 , happyReduce_45), + (46 , happyReduce_46), + (47 , happyReduce_47), + (48 , happyReduce_48), + (49 , happyReduce_49), + (50 , happyReduce_50), + (51 , happyReduce_51), + (52 , happyReduce_52), + (53 , happyReduce_53), + (54 , happyReduce_54), + (55 , happyReduce_55), + (56 , happyReduce_56), + (57 , happyReduce_57), + (58 , happyReduce_58), + (59 , happyReduce_59), + (60 , happyReduce_60), + (61 , happyReduce_61), + (62 , happyReduce_62), + (63 , happyReduce_63), + (64 , happyReduce_64), + (65 , happyReduce_65), + (66 , happyReduce_66), + (67 , happyReduce_67), + (68 , happyReduce_68), + (69 , happyReduce_69), + (70 , happyReduce_70), + (71 , happyReduce_71), + (72 , happyReduce_72), + (73 , happyReduce_73), + (74 , happyReduce_74), + (75 , happyReduce_75), + (76 , happyReduce_76), + (77 , happyReduce_77), + (78 , happyReduce_78), + (79 , happyReduce_79), + (80 , happyReduce_80), + (81 , happyReduce_81), + (82 , happyReduce_82), + (83 , happyReduce_83), + (84 , happyReduce_84), + (85 , happyReduce_85), + (86 , happyReduce_86), + (87 , happyReduce_87), + (88 , happyReduce_88), + (89 , happyReduce_89), + (90 , happyReduce_90), + (91 , happyReduce_91), + (92 , happyReduce_92), + (93 , happyReduce_93), + (94 , happyReduce_94), + (95 , happyReduce_95), + (96 , happyReduce_96), + (97 , happyReduce_97), + (98 , happyReduce_98), + (99 , happyReduce_99), + (100 , happyReduce_100), + (101 , happyReduce_101), + (102 , happyReduce_102), + (103 , happyReduce_103), + (104 , happyReduce_104), + (105 , happyReduce_105), + (106 , happyReduce_106), + (107 , happyReduce_107), + (108 , happyReduce_108), + (109 , happyReduce_109), + (110 , happyReduce_110), + (111 , happyReduce_111), + (112 , happyReduce_112), + (113 , happyReduce_113), + (114 , happyReduce_114), + (115 , happyReduce_115), + (116 , happyReduce_116), + (117 , happyReduce_117), + (118 , happyReduce_118), + (119 , happyReduce_119), + (120 , happyReduce_120), + (121 , happyReduce_121), + (122 , happyReduce_122), + (123 , happyReduce_123), + (124 , happyReduce_124), + (125 , happyReduce_125), + (126 , happyReduce_126), + (127 , happyReduce_127), + (128 , happyReduce_128), + (129 , happyReduce_129), + (130 , happyReduce_130), + (131 , happyReduce_131), + (132 , happyReduce_132), + (133 , happyReduce_133), + (134 , happyReduce_134), + (135 , happyReduce_135), + (136 , happyReduce_136), + (137 , happyReduce_137), + (138 , happyReduce_138), + (139 , happyReduce_139) + ] + +happy_n_terms = 76 :: Int +happy_n_nonterms = 58 :: Int + +happyReduce_5 = happySpecReduce_1 0# happyReduction_5 +happyReduction_5 happy_x_1 + = case happyOutTok happy_x_1 of { happy_var_1 -> + happyIn8 + (PosInteger (mkPosToken happy_var_1) + )} + +happyReduce_6 = happySpecReduce_1 1# happyReduction_6 +happyReduction_6 happy_x_1 + = case happyOutTok happy_x_1 of { happy_var_1 -> + happyIn9 + (PosDouble (mkPosToken happy_var_1) + )} + +happyReduce_7 = happySpecReduce_1 2# happyReduction_7 +happyReduction_7 happy_x_1 + = case happyOutTok happy_x_1 of { happy_var_1 -> + happyIn10 + (PosReal (mkPosToken happy_var_1) + )} + +happyReduce_8 = happySpecReduce_1 3# happyReduction_8 +happyReduction_8 happy_x_1 + = case happyOutTok happy_x_1 of { happy_var_1 -> + happyIn11 + (PosString (mkPosToken happy_var_1) + )} + +happyReduce_9 = happySpecReduce_1 4# happyReduction_9 +happyReduction_9 happy_x_1 + = case happyOutTok happy_x_1 of { happy_var_1 -> + happyIn12 + (PosIdent (mkPosToken happy_var_1) + )} + +happyReduce_10 = happySpecReduce_1 5# happyReduction_10 +happyReduction_10 happy_x_1 + = case happyOutTok happy_x_1 of { happy_var_1 -> + happyIn13 + (PosLineComment (mkPosToken happy_var_1) + )} + +happyReduce_11 = happySpecReduce_1 6# happyReduction_11 +happyReduction_11 happy_x_1 + = case happyOutTok happy_x_1 of { happy_var_1 -> + happyIn14 + (PosBlockComment (mkPosToken happy_var_1) + )} + +happyReduce_12 = happySpecReduce_1 7# happyReduction_12 +happyReduction_12 happy_x_1 + = case happyOutTok happy_x_1 of { happy_var_1 -> + happyIn15 + (PosAlloy (mkPosToken happy_var_1) + )} + +happyReduce_13 = happySpecReduce_1 8# happyReduction_13 +happyReduction_13 happy_x_1 + = case happyOutTok happy_x_1 of { happy_var_1 -> + happyIn16 + (PosChoco (mkPosToken happy_var_1) + )} + +happyReduce_14 = happySpecReduce_1 9# happyReduction_14 +happyReduction_14 happy_x_1 + = case happyOut60 happy_x_1 of { happy_var_1 -> + happyIn17 + (Language.Clafer.Front.AbsClafer.Module ((mkCatSpan happy_var_1)) (reverse happy_var_1) + )} + +happyReduce_15 = happyReduce 4# 10# happyReduction_15 +happyReduction_15 (happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) + = case happyOutTok happy_x_1 of { happy_var_1 -> + case happyOut12 happy_x_2 of { happy_var_2 -> + case happyOutTok happy_x_3 of { happy_var_3 -> + case happyOut61 happy_x_4 of { happy_var_4 -> + happyIn18 + (Language.Clafer.Front.AbsClafer.EnumDecl ((mkTokenSpan happy_var_1) >- (mkCatSpan happy_var_2) >- (mkTokenSpan happy_var_3) >- (mkCatSpan happy_var_4)) happy_var_2 happy_var_4 + ) `HappyStk` happyRest}}}} + +happyReduce_16 = happySpecReduce_1 10# happyReduction_16 +happyReduction_16 happy_x_1 + = case happyOut25 happy_x_1 of { happy_var_1 -> + happyIn18 + (Language.Clafer.Front.AbsClafer.ElementDecl ((mkCatSpan happy_var_1)) happy_var_1 + )} + +happyReduce_17 = happyReduce 8# 11# happyReduction_17 +happyReduction_17 (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 happyOut23 happy_x_1 of { happy_var_1 -> + case happyOut30 happy_x_2 of { happy_var_2 -> + case happyOut12 happy_x_3 of { happy_var_3 -> + case happyOut26 happy_x_4 of { happy_var_4 -> + case happyOut27 happy_x_5 of { happy_var_5 -> + case happyOut31 happy_x_6 of { happy_var_6 -> + case happyOut28 happy_x_7 of { happy_var_7 -> + case happyOut24 happy_x_8 of { happy_var_8 -> + happyIn19 + (Language.Clafer.Front.AbsClafer.Clafer ((mkCatSpan happy_var_1) >- (mkCatSpan happy_var_2) >- (mkCatSpan happy_var_3) >- (mkCatSpan happy_var_4) >- (mkCatSpan happy_var_5) >- (mkCatSpan happy_var_6) >- (mkCatSpan happy_var_7) >- (mkCatSpan happy_var_8)) happy_var_1 happy_var_2 happy_var_3 happy_var_4 happy_var_5 happy_var_6 happy_var_7 happy_var_8 + ) `HappyStk` happyRest}}}}}}}} + +happyReduce_18 = happySpecReduce_3 12# happyReduction_18 +happyReduction_18 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOutTok happy_x_1 of { happy_var_1 -> + case happyOut63 happy_x_2 of { happy_var_2 -> + case happyOutTok happy_x_3 of { happy_var_3 -> + happyIn20 + (Language.Clafer.Front.AbsClafer.Constraint ((mkTokenSpan happy_var_1) >- (mkCatSpan happy_var_2) >- (mkTokenSpan happy_var_3)) (reverse happy_var_2) + )}}} + +happyReduce_19 = happyReduce 4# 13# happyReduction_19 +happyReduction_19 (happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) + = case happyOutTok happy_x_1 of { happy_var_1 -> + case happyOutTok happy_x_2 of { happy_var_2 -> + case happyOut63 happy_x_3 of { happy_var_3 -> + case happyOutTok happy_x_4 of { happy_var_4 -> + happyIn21 + (Language.Clafer.Front.AbsClafer.Assertion ((mkTokenSpan happy_var_1) >- (mkTokenSpan happy_var_2) >- (mkCatSpan happy_var_3) >- (mkTokenSpan happy_var_4)) (reverse happy_var_3) + ) `HappyStk` happyRest}}}} + +happyReduce_20 = happySpecReduce_3 14# happyReduction_20 +happyReduction_20 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOutTok happy_x_1 of { happy_var_1 -> + case happyOut63 happy_x_2 of { happy_var_2 -> + case happyOutTok happy_x_3 of { happy_var_3 -> + happyIn22 + (Language.Clafer.Front.AbsClafer.Goal ((mkTokenSpan happy_var_1) >- (mkCatSpan happy_var_2) >- (mkTokenSpan happy_var_3)) (reverse happy_var_2) + )}}} + +happyReduce_21 = happySpecReduce_0 15# happyReduction_21 +happyReduction_21 = happyIn23 + (Language.Clafer.Front.AbsClafer.AbstractEmpty noSpan + ) + +happyReduce_22 = happySpecReduce_1 15# happyReduction_22 +happyReduction_22 happy_x_1 + = case happyOutTok happy_x_1 of { happy_var_1 -> + happyIn23 + (Language.Clafer.Front.AbsClafer.Abstract ((mkTokenSpan happy_var_1)) + )} + +happyReduce_23 = happySpecReduce_0 16# happyReduction_23 +happyReduction_23 = happyIn24 + (Language.Clafer.Front.AbsClafer.ElementsEmpty noSpan + ) + +happyReduce_24 = happySpecReduce_3 16# happyReduction_24 +happyReduction_24 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOutTok happy_x_1 of { happy_var_1 -> + case happyOut62 happy_x_2 of { happy_var_2 -> + case happyOutTok happy_x_3 of { happy_var_3 -> + happyIn24 + (Language.Clafer.Front.AbsClafer.ElementsList ((mkTokenSpan happy_var_1) >- (mkCatSpan happy_var_2) >- (mkTokenSpan happy_var_3)) (reverse happy_var_2) + )}}} + +happyReduce_25 = happySpecReduce_1 17# happyReduction_25 +happyReduction_25 happy_x_1 + = case happyOut19 happy_x_1 of { happy_var_1 -> + happyIn25 + (Language.Clafer.Front.AbsClafer.Subclafer ((mkCatSpan happy_var_1)) happy_var_1 + )} + +happyReduce_26 = happyReduce 4# 17# happyReduction_26 +happyReduction_26 (happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) + = case happyOutTok happy_x_1 of { happy_var_1 -> + case happyOut34 happy_x_2 of { happy_var_2 -> + case happyOut31 happy_x_3 of { happy_var_3 -> + case happyOut24 happy_x_4 of { happy_var_4 -> + happyIn25 + (Language.Clafer.Front.AbsClafer.ClaferUse ((mkTokenSpan happy_var_1) >- (mkCatSpan happy_var_2) >- (mkCatSpan happy_var_3) >- (mkCatSpan happy_var_4)) happy_var_2 happy_var_3 happy_var_4 + ) `HappyStk` happyRest}}}} + +happyReduce_27 = happySpecReduce_1 17# happyReduction_27 +happyReduction_27 happy_x_1 + = case happyOut20 happy_x_1 of { happy_var_1 -> + happyIn25 + (Language.Clafer.Front.AbsClafer.Subconstraint ((mkCatSpan happy_var_1)) happy_var_1 + )} + +happyReduce_28 = happySpecReduce_1 17# happyReduction_28 +happyReduction_28 happy_x_1 + = case happyOut22 happy_x_1 of { happy_var_1 -> + happyIn25 + (Language.Clafer.Front.AbsClafer.Subgoal ((mkCatSpan happy_var_1)) happy_var_1 + )} + +happyReduce_29 = happySpecReduce_1 17# happyReduction_29 +happyReduction_29 happy_x_1 + = case happyOut21 happy_x_1 of { happy_var_1 -> + happyIn25 + (Language.Clafer.Front.AbsClafer.SubAssertion ((mkCatSpan happy_var_1)) happy_var_1 + )} + +happyReduce_30 = happySpecReduce_0 18# happyReduction_30 +happyReduction_30 = happyIn26 + (Language.Clafer.Front.AbsClafer.SuperEmpty noSpan + ) + +happyReduce_31 = happySpecReduce_2 18# happyReduction_31 +happyReduction_31 happy_x_2 + happy_x_1 + = case happyOutTok happy_x_1 of { happy_var_1 -> + case happyOut53 happy_x_2 of { happy_var_2 -> + happyIn26 + (Language.Clafer.Front.AbsClafer.SuperSome ((mkTokenSpan happy_var_1) >- (mkCatSpan happy_var_2)) happy_var_2 + )}} + +happyReduce_32 = happySpecReduce_0 19# happyReduction_32 +happyReduction_32 = happyIn27 + (Language.Clafer.Front.AbsClafer.ReferenceEmpty noSpan + ) + +happyReduce_33 = happySpecReduce_2 19# happyReduction_33 +happyReduction_33 happy_x_2 + happy_x_1 + = case happyOutTok happy_x_1 of { happy_var_1 -> + case happyOut50 happy_x_2 of { happy_var_2 -> + happyIn27 + (Language.Clafer.Front.AbsClafer.ReferenceSet ((mkTokenSpan happy_var_1) >- (mkCatSpan happy_var_2)) happy_var_2 + )}} + +happyReduce_34 = happySpecReduce_2 19# happyReduction_34 +happyReduction_34 happy_x_2 + happy_x_1 + = case happyOutTok happy_x_1 of { happy_var_1 -> + case happyOut50 happy_x_2 of { happy_var_2 -> + happyIn27 + (Language.Clafer.Front.AbsClafer.ReferenceBag ((mkTokenSpan happy_var_1) >- (mkCatSpan happy_var_2)) happy_var_2 + )}} + +happyReduce_35 = happySpecReduce_0 20# happyReduction_35 +happyReduction_35 = happyIn28 + (Language.Clafer.Front.AbsClafer.InitEmpty noSpan + ) + +happyReduce_36 = happySpecReduce_2 20# happyReduction_36 +happyReduction_36 happy_x_2 + happy_x_1 + = case happyOut29 happy_x_1 of { happy_var_1 -> + case happyOut35 happy_x_2 of { happy_var_2 -> + happyIn28 + (Language.Clafer.Front.AbsClafer.InitSome ((mkCatSpan happy_var_1) >- (mkCatSpan happy_var_2)) happy_var_1 happy_var_2 + )}} + +happyReduce_37 = happySpecReduce_1 21# happyReduction_37 +happyReduction_37 happy_x_1 + = case happyOutTok happy_x_1 of { happy_var_1 -> + happyIn29 + (Language.Clafer.Front.AbsClafer.InitConstant ((mkTokenSpan happy_var_1)) + )} + +happyReduce_38 = happySpecReduce_1 21# happyReduction_38 +happyReduction_38 happy_x_1 + = case happyOutTok happy_x_1 of { happy_var_1 -> + happyIn29 + (Language.Clafer.Front.AbsClafer.InitDefault ((mkTokenSpan happy_var_1)) + )} + +happyReduce_39 = happySpecReduce_0 22# happyReduction_39 +happyReduction_39 = happyIn30 + (Language.Clafer.Front.AbsClafer.GCardEmpty noSpan + ) + +happyReduce_40 = happySpecReduce_1 22# happyReduction_40 +happyReduction_40 happy_x_1 + = case happyOutTok happy_x_1 of { happy_var_1 -> + happyIn30 + (Language.Clafer.Front.AbsClafer.GCardXor ((mkTokenSpan happy_var_1)) + )} + +happyReduce_41 = happySpecReduce_1 22# happyReduction_41 +happyReduction_41 happy_x_1 + = case happyOutTok happy_x_1 of { happy_var_1 -> + happyIn30 + (Language.Clafer.Front.AbsClafer.GCardOr ((mkTokenSpan happy_var_1)) + )} + +happyReduce_42 = happySpecReduce_1 22# happyReduction_42 +happyReduction_42 happy_x_1 + = case happyOutTok happy_x_1 of { happy_var_1 -> + happyIn30 + (Language.Clafer.Front.AbsClafer.GCardMux ((mkTokenSpan happy_var_1)) + )} + +happyReduce_43 = happySpecReduce_1 22# happyReduction_43 +happyReduction_43 happy_x_1 + = case happyOutTok happy_x_1 of { happy_var_1 -> + happyIn30 + (Language.Clafer.Front.AbsClafer.GCardOpt ((mkTokenSpan happy_var_1)) + )} + +happyReduce_44 = happySpecReduce_1 22# happyReduction_44 +happyReduction_44 happy_x_1 + = case happyOut32 happy_x_1 of { happy_var_1 -> + happyIn30 + (Language.Clafer.Front.AbsClafer.GCardInterval ((mkCatSpan happy_var_1)) happy_var_1 + )} + +happyReduce_45 = happySpecReduce_0 23# happyReduction_45 +happyReduction_45 = happyIn31 + (Language.Clafer.Front.AbsClafer.CardEmpty noSpan + ) + +happyReduce_46 = happySpecReduce_1 23# happyReduction_46 +happyReduction_46 happy_x_1 + = case happyOutTok happy_x_1 of { happy_var_1 -> + happyIn31 + (Language.Clafer.Front.AbsClafer.CardLone ((mkTokenSpan happy_var_1)) + )} + +happyReduce_47 = happySpecReduce_1 23# happyReduction_47 +happyReduction_47 happy_x_1 + = case happyOutTok happy_x_1 of { happy_var_1 -> + happyIn31 + (Language.Clafer.Front.AbsClafer.CardSome ((mkTokenSpan happy_var_1)) + )} + +happyReduce_48 = happySpecReduce_1 23# happyReduction_48 +happyReduction_48 happy_x_1 + = case happyOutTok happy_x_1 of { happy_var_1 -> + happyIn31 + (Language.Clafer.Front.AbsClafer.CardAny ((mkTokenSpan happy_var_1)) + )} + +happyReduce_49 = happySpecReduce_1 23# happyReduction_49 +happyReduction_49 happy_x_1 + = case happyOut8 happy_x_1 of { happy_var_1 -> + happyIn31 + (Language.Clafer.Front.AbsClafer.CardNum ((mkCatSpan happy_var_1)) happy_var_1 + )} + +happyReduce_50 = happySpecReduce_1 23# happyReduction_50 +happyReduction_50 happy_x_1 + = case happyOut32 happy_x_1 of { happy_var_1 -> + happyIn31 + (Language.Clafer.Front.AbsClafer.CardInterval ((mkCatSpan happy_var_1)) happy_var_1 + )} + +happyReduce_51 = happySpecReduce_3 24# happyReduction_51 +happyReduction_51 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut8 happy_x_1 of { happy_var_1 -> + case happyOutTok happy_x_2 of { happy_var_2 -> + case happyOut33 happy_x_3 of { happy_var_3 -> + happyIn32 + (Language.Clafer.Front.AbsClafer.NCard ((mkCatSpan happy_var_1) >- (mkTokenSpan happy_var_2) >- (mkCatSpan happy_var_3)) happy_var_1 happy_var_3 + )}}} + +happyReduce_52 = happySpecReduce_1 25# happyReduction_52 +happyReduction_52 happy_x_1 + = case happyOutTok happy_x_1 of { happy_var_1 -> + happyIn33 + (Language.Clafer.Front.AbsClafer.ExIntegerAst ((mkTokenSpan happy_var_1)) + )} + +happyReduce_53 = happySpecReduce_1 25# happyReduction_53 +happyReduction_53 happy_x_1 + = case happyOut8 happy_x_1 of { happy_var_1 -> + happyIn33 + (Language.Clafer.Front.AbsClafer.ExIntegerNum ((mkCatSpan happy_var_1)) happy_var_1 + )} + +happyReduce_54 = happySpecReduce_1 26# happyReduction_54 +happyReduction_54 happy_x_1 + = case happyOut65 happy_x_1 of { happy_var_1 -> + happyIn34 + (Language.Clafer.Front.AbsClafer.Path ((mkCatSpan happy_var_1)) happy_var_1 + )} + +happyReduce_55 = happyReduce 5# 27# happyReduction_55 +happyReduction_55 (happy_x_5 `HappyStk` + happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) + = case happyOutTok happy_x_1 of { happy_var_1 -> + case happyOutTok happy_x_2 of { happy_var_2 -> + case happyOut55 happy_x_3 of { happy_var_3 -> + case happyOutTok happy_x_4 of { happy_var_4 -> + case happyOut35 happy_x_5 of { happy_var_5 -> + happyIn35 + (Language.Clafer.Front.AbsClafer.EDeclAllDisj ((mkTokenSpan happy_var_1) >- (mkTokenSpan happy_var_2) >- (mkCatSpan happy_var_3) >- (mkTokenSpan happy_var_4) >- (mkCatSpan happy_var_5)) happy_var_3 happy_var_5 + ) `HappyStk` happyRest}}}}} + +happyReduce_56 = happyReduce 4# 27# happyReduction_56 +happyReduction_56 (happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) + = case happyOutTok happy_x_1 of { happy_var_1 -> + case happyOut55 happy_x_2 of { happy_var_2 -> + case happyOutTok happy_x_3 of { happy_var_3 -> + case happyOut35 happy_x_4 of { happy_var_4 -> + happyIn35 + (Language.Clafer.Front.AbsClafer.EDeclAll ((mkTokenSpan happy_var_1) >- (mkCatSpan happy_var_2) >- (mkTokenSpan happy_var_3) >- (mkCatSpan happy_var_4)) happy_var_2 happy_var_4 + ) `HappyStk` happyRest}}}} + +happyReduce_57 = happyReduce 5# 27# 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 happyOut56 happy_x_1 of { happy_var_1 -> + case happyOutTok happy_x_2 of { happy_var_2 -> + case happyOut55 happy_x_3 of { happy_var_3 -> + case happyOutTok happy_x_4 of { happy_var_4 -> + case happyOut35 happy_x_5 of { happy_var_5 -> + happyIn35 + (Language.Clafer.Front.AbsClafer.EDeclQuantDisj ((mkCatSpan happy_var_1) >- (mkTokenSpan happy_var_2) >- (mkCatSpan happy_var_3) >- (mkTokenSpan happy_var_4) >- (mkCatSpan happy_var_5)) happy_var_1 happy_var_3 happy_var_5 + ) `HappyStk` happyRest}}}}} + +happyReduce_58 = happyReduce 4# 27# happyReduction_58 +happyReduction_58 (happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) + = case happyOut56 happy_x_1 of { happy_var_1 -> + case happyOut55 happy_x_2 of { happy_var_2 -> + case happyOutTok happy_x_3 of { happy_var_3 -> + case happyOut35 happy_x_4 of { happy_var_4 -> + happyIn35 + (Language.Clafer.Front.AbsClafer.EDeclQuant ((mkCatSpan happy_var_1) >- (mkCatSpan happy_var_2) >- (mkTokenSpan happy_var_3) >- (mkCatSpan happy_var_4)) happy_var_1 happy_var_2 happy_var_4 + ) `HappyStk` happyRest}}}} + +happyReduce_59 = happySpecReduce_1 27# happyReduction_59 +happyReduction_59 happy_x_1 + = case happyOut36 happy_x_1 of { happy_var_1 -> + happyIn35 + (happy_var_1 + )} + +happyReduce_60 = happySpecReduce_2 28# happyReduction_60 +happyReduction_60 happy_x_2 + happy_x_1 + = case happyOutTok happy_x_1 of { happy_var_1 -> + case happyOut37 happy_x_2 of { happy_var_2 -> + happyIn36 + (Language.Clafer.Front.AbsClafer.EGMax ((mkTokenSpan happy_var_1) >- (mkCatSpan happy_var_2)) happy_var_2 + )}} + +happyReduce_61 = happySpecReduce_2 28# happyReduction_61 +happyReduction_61 happy_x_2 + happy_x_1 + = case happyOutTok happy_x_1 of { happy_var_1 -> + case happyOut37 happy_x_2 of { happy_var_2 -> + happyIn36 + (Language.Clafer.Front.AbsClafer.EGMin ((mkTokenSpan happy_var_1) >- (mkCatSpan happy_var_2)) happy_var_2 + )}} + +happyReduce_62 = happySpecReduce_3 28# happyReduction_62 +happyReduction_62 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut36 happy_x_1 of { happy_var_1 -> + case happyOutTok happy_x_2 of { happy_var_2 -> + case happyOut37 happy_x_3 of { happy_var_3 -> + happyIn36 + (Language.Clafer.Front.AbsClafer.EIff ((mkCatSpan happy_var_1) >- (mkTokenSpan happy_var_2) >- (mkCatSpan happy_var_3)) happy_var_1 happy_var_3 + )}}} + +happyReduce_63 = happySpecReduce_1 28# happyReduction_63 +happyReduction_63 happy_x_1 + = case happyOut37 happy_x_1 of { happy_var_1 -> + happyIn36 + (happy_var_1 + )} + +happyReduce_64 = happySpecReduce_3 29# happyReduction_64 +happyReduction_64 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut37 happy_x_1 of { happy_var_1 -> + case happyOutTok happy_x_2 of { happy_var_2 -> + case happyOut38 happy_x_3 of { happy_var_3 -> + happyIn37 + (Language.Clafer.Front.AbsClafer.EImplies ((mkCatSpan happy_var_1) >- (mkTokenSpan happy_var_2) >- (mkCatSpan happy_var_3)) happy_var_1 happy_var_3 + )}}} + +happyReduce_65 = happySpecReduce_1 29# happyReduction_65 +happyReduction_65 happy_x_1 + = case happyOut38 happy_x_1 of { happy_var_1 -> + happyIn37 + (happy_var_1 + )} + +happyReduce_66 = happySpecReduce_3 30# happyReduction_66 +happyReduction_66 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut38 happy_x_1 of { happy_var_1 -> + case happyOutTok happy_x_2 of { happy_var_2 -> + case happyOut39 happy_x_3 of { happy_var_3 -> + happyIn38 + (Language.Clafer.Front.AbsClafer.EOr ((mkCatSpan happy_var_1) >- (mkTokenSpan happy_var_2) >- (mkCatSpan happy_var_3)) happy_var_1 happy_var_3 + )}}} + +happyReduce_67 = happySpecReduce_1 30# happyReduction_67 +happyReduction_67 happy_x_1 + = case happyOut39 happy_x_1 of { happy_var_1 -> + happyIn38 + (happy_var_1 + )} + +happyReduce_68 = happySpecReduce_3 31# happyReduction_68 +happyReduction_68 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut39 happy_x_1 of { happy_var_1 -> + case happyOutTok happy_x_2 of { happy_var_2 -> + case happyOut40 happy_x_3 of { happy_var_3 -> + happyIn39 + (Language.Clafer.Front.AbsClafer.EXor ((mkCatSpan happy_var_1) >- (mkTokenSpan happy_var_2) >- (mkCatSpan happy_var_3)) happy_var_1 happy_var_3 + )}}} + +happyReduce_69 = happySpecReduce_1 31# happyReduction_69 +happyReduction_69 happy_x_1 + = case happyOut40 happy_x_1 of { happy_var_1 -> + happyIn39 + (happy_var_1 + )} + +happyReduce_70 = happySpecReduce_3 32# happyReduction_70 +happyReduction_70 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut40 happy_x_1 of { happy_var_1 -> + case happyOutTok happy_x_2 of { happy_var_2 -> + case happyOut41 happy_x_3 of { happy_var_3 -> + happyIn40 + (Language.Clafer.Front.AbsClafer.EAnd ((mkCatSpan happy_var_1) >- (mkTokenSpan happy_var_2) >- (mkCatSpan happy_var_3)) happy_var_1 happy_var_3 + )}}} + +happyReduce_71 = happySpecReduce_1 32# happyReduction_71 +happyReduction_71 happy_x_1 + = case happyOut41 happy_x_1 of { happy_var_1 -> + happyIn40 + (happy_var_1 + )} + +happyReduce_72 = happySpecReduce_2 33# happyReduction_72 +happyReduction_72 happy_x_2 + happy_x_1 + = case happyOutTok happy_x_1 of { happy_var_1 -> + case happyOut42 happy_x_2 of { happy_var_2 -> + happyIn41 + (Language.Clafer.Front.AbsClafer.ENeg ((mkTokenSpan happy_var_1) >- (mkCatSpan happy_var_2)) happy_var_2 + )}} + +happyReduce_73 = happySpecReduce_1 33# happyReduction_73 +happyReduction_73 happy_x_1 + = case happyOut42 happy_x_1 of { happy_var_1 -> + happyIn41 + (happy_var_1 + )} + +happyReduce_74 = happySpecReduce_3 34# happyReduction_74 +happyReduction_74 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut42 happy_x_1 of { happy_var_1 -> + case happyOutTok happy_x_2 of { happy_var_2 -> + case happyOut43 happy_x_3 of { happy_var_3 -> + happyIn42 + (Language.Clafer.Front.AbsClafer.ELt ((mkCatSpan happy_var_1) >- (mkTokenSpan happy_var_2) >- (mkCatSpan happy_var_3)) happy_var_1 happy_var_3 + )}}} + +happyReduce_75 = happySpecReduce_3 34# happyReduction_75 +happyReduction_75 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut42 happy_x_1 of { happy_var_1 -> + case happyOutTok happy_x_2 of { happy_var_2 -> + case happyOut43 happy_x_3 of { happy_var_3 -> + happyIn42 + (Language.Clafer.Front.AbsClafer.EGt ((mkCatSpan happy_var_1) >- (mkTokenSpan happy_var_2) >- (mkCatSpan happy_var_3)) happy_var_1 happy_var_3 + )}}} + +happyReduce_76 = happySpecReduce_3 34# happyReduction_76 +happyReduction_76 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut42 happy_x_1 of { happy_var_1 -> + case happyOutTok happy_x_2 of { happy_var_2 -> + case happyOut43 happy_x_3 of { happy_var_3 -> + happyIn42 + (Language.Clafer.Front.AbsClafer.EEq ((mkCatSpan happy_var_1) >- (mkTokenSpan happy_var_2) >- (mkCatSpan happy_var_3)) happy_var_1 happy_var_3 + )}}} + +happyReduce_77 = happySpecReduce_3 34# happyReduction_77 +happyReduction_77 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut42 happy_x_1 of { happy_var_1 -> + case happyOutTok happy_x_2 of { happy_var_2 -> + case happyOut43 happy_x_3 of { happy_var_3 -> + happyIn42 + (Language.Clafer.Front.AbsClafer.ELte ((mkCatSpan happy_var_1) >- (mkTokenSpan happy_var_2) >- (mkCatSpan happy_var_3)) happy_var_1 happy_var_3 + )}}} + +happyReduce_78 = happySpecReduce_3 34# happyReduction_78 +happyReduction_78 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut42 happy_x_1 of { happy_var_1 -> + case happyOutTok happy_x_2 of { happy_var_2 -> + case happyOut43 happy_x_3 of { happy_var_3 -> + happyIn42 + (Language.Clafer.Front.AbsClafer.EGte ((mkCatSpan happy_var_1) >- (mkTokenSpan happy_var_2) >- (mkCatSpan happy_var_3)) happy_var_1 happy_var_3 + )}}} + +happyReduce_79 = happySpecReduce_3 34# happyReduction_79 +happyReduction_79 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut42 happy_x_1 of { happy_var_1 -> + case happyOutTok happy_x_2 of { happy_var_2 -> + case happyOut43 happy_x_3 of { happy_var_3 -> + happyIn42 + (Language.Clafer.Front.AbsClafer.ENeq ((mkCatSpan happy_var_1) >- (mkTokenSpan happy_var_2) >- (mkCatSpan happy_var_3)) happy_var_1 happy_var_3 + )}}} + +happyReduce_80 = happySpecReduce_3 34# happyReduction_80 +happyReduction_80 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut42 happy_x_1 of { happy_var_1 -> + case happyOutTok happy_x_2 of { happy_var_2 -> + case happyOut43 happy_x_3 of { happy_var_3 -> + happyIn42 + (Language.Clafer.Front.AbsClafer.EIn ((mkCatSpan happy_var_1) >- (mkTokenSpan happy_var_2) >- (mkCatSpan happy_var_3)) happy_var_1 happy_var_3 + )}}} + +happyReduce_81 = happyReduce 4# 34# happyReduction_81 +happyReduction_81 (happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) + = case happyOut42 happy_x_1 of { happy_var_1 -> + case happyOutTok happy_x_2 of { happy_var_2 -> + case happyOutTok happy_x_3 of { happy_var_3 -> + case happyOut43 happy_x_4 of { happy_var_4 -> + happyIn42 + (Language.Clafer.Front.AbsClafer.ENin ((mkCatSpan happy_var_1) >- (mkTokenSpan happy_var_2) >- (mkTokenSpan happy_var_3) >- (mkCatSpan happy_var_4)) happy_var_1 happy_var_4 + ) `HappyStk` happyRest}}}} + +happyReduce_82 = happySpecReduce_1 34# happyReduction_82 +happyReduction_82 happy_x_1 + = case happyOut43 happy_x_1 of { happy_var_1 -> + happyIn42 + (happy_var_1 + )} + +happyReduce_83 = happySpecReduce_2 35# happyReduction_83 +happyReduction_83 happy_x_2 + happy_x_1 + = case happyOut56 happy_x_1 of { happy_var_1 -> + case happyOut47 happy_x_2 of { happy_var_2 -> + happyIn43 + (Language.Clafer.Front.AbsClafer.EQuantExp ((mkCatSpan happy_var_1) >- (mkCatSpan happy_var_2)) happy_var_1 happy_var_2 + )}} + +happyReduce_84 = happySpecReduce_1 35# happyReduction_84 +happyReduction_84 happy_x_1 + = case happyOut44 happy_x_1 of { happy_var_1 -> + happyIn43 + (happy_var_1 + )} + +happyReduce_85 = happySpecReduce_3 36# happyReduction_85 +happyReduction_85 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut44 happy_x_1 of { happy_var_1 -> + case happyOutTok happy_x_2 of { happy_var_2 -> + case happyOut45 happy_x_3 of { happy_var_3 -> + happyIn44 + (Language.Clafer.Front.AbsClafer.EAdd ((mkCatSpan happy_var_1) >- (mkTokenSpan happy_var_2) >- (mkCatSpan happy_var_3)) happy_var_1 happy_var_3 + )}}} + +happyReduce_86 = happySpecReduce_3 36# happyReduction_86 +happyReduction_86 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut44 happy_x_1 of { happy_var_1 -> + case happyOutTok happy_x_2 of { happy_var_2 -> + case happyOut45 happy_x_3 of { happy_var_3 -> + happyIn44 + (Language.Clafer.Front.AbsClafer.ESub ((mkCatSpan happy_var_1) >- (mkTokenSpan happy_var_2) >- (mkCatSpan happy_var_3)) happy_var_1 happy_var_3 + )}}} + +happyReduce_87 = happySpecReduce_1 36# happyReduction_87 +happyReduction_87 happy_x_1 + = case happyOut45 happy_x_1 of { happy_var_1 -> + happyIn44 + (happy_var_1 + )} + +happyReduce_88 = happySpecReduce_3 37# happyReduction_88 +happyReduction_88 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut45 happy_x_1 of { happy_var_1 -> + case happyOutTok happy_x_2 of { happy_var_2 -> + case happyOut46 happy_x_3 of { happy_var_3 -> + happyIn45 + (Language.Clafer.Front.AbsClafer.EMul ((mkCatSpan happy_var_1) >- (mkTokenSpan happy_var_2) >- (mkCatSpan happy_var_3)) happy_var_1 happy_var_3 + )}}} + +happyReduce_89 = happySpecReduce_3 37# happyReduction_89 +happyReduction_89 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut45 happy_x_1 of { happy_var_1 -> + case happyOutTok happy_x_2 of { happy_var_2 -> + case happyOut46 happy_x_3 of { happy_var_3 -> + happyIn45 + (Language.Clafer.Front.AbsClafer.EDiv ((mkCatSpan happy_var_1) >- (mkTokenSpan happy_var_2) >- (mkCatSpan happy_var_3)) happy_var_1 happy_var_3 + )}}} + +happyReduce_90 = happySpecReduce_3 37# happyReduction_90 +happyReduction_90 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut45 happy_x_1 of { happy_var_1 -> + case happyOutTok happy_x_2 of { happy_var_2 -> + case happyOut46 happy_x_3 of { happy_var_3 -> + happyIn45 + (Language.Clafer.Front.AbsClafer.ERem ((mkCatSpan happy_var_1) >- (mkTokenSpan happy_var_2) >- (mkCatSpan happy_var_3)) happy_var_1 happy_var_3 + )}}} + +happyReduce_91 = happySpecReduce_1 37# happyReduction_91 +happyReduction_91 happy_x_1 + = case happyOut46 happy_x_1 of { happy_var_1 -> + happyIn45 + (happy_var_1 + )} + +happyReduce_92 = happySpecReduce_2 38# happyReduction_92 +happyReduction_92 happy_x_2 + happy_x_1 + = case happyOutTok happy_x_1 of { happy_var_1 -> + case happyOut47 happy_x_2 of { happy_var_2 -> + happyIn46 + (Language.Clafer.Front.AbsClafer.ESum ((mkTokenSpan happy_var_1) >- (mkCatSpan happy_var_2)) happy_var_2 + )}} + +happyReduce_93 = happySpecReduce_2 38# happyReduction_93 +happyReduction_93 happy_x_2 + happy_x_1 + = case happyOutTok happy_x_1 of { happy_var_1 -> + case happyOut47 happy_x_2 of { happy_var_2 -> + happyIn46 + (Language.Clafer.Front.AbsClafer.EProd ((mkTokenSpan happy_var_1) >- (mkCatSpan happy_var_2)) happy_var_2 + )}} + +happyReduce_94 = happySpecReduce_2 38# happyReduction_94 +happyReduction_94 happy_x_2 + happy_x_1 + = case happyOutTok happy_x_1 of { happy_var_1 -> + case happyOut47 happy_x_2 of { happy_var_2 -> + happyIn46 + (Language.Clafer.Front.AbsClafer.ECard ((mkTokenSpan happy_var_1) >- (mkCatSpan happy_var_2)) happy_var_2 + )}} + +happyReduce_95 = happySpecReduce_2 38# happyReduction_95 +happyReduction_95 happy_x_2 + happy_x_1 + = case happyOutTok happy_x_1 of { happy_var_1 -> + case happyOut47 happy_x_2 of { happy_var_2 -> + happyIn46 + (Language.Clafer.Front.AbsClafer.EMinExp ((mkTokenSpan happy_var_1) >- (mkCatSpan happy_var_2)) happy_var_2 + )}} + +happyReduce_96 = happySpecReduce_1 38# happyReduction_96 +happyReduction_96 happy_x_1 + = case happyOut47 happy_x_1 of { happy_var_1 -> + happyIn46 + (happy_var_1 + )} + +happyReduce_97 = happyReduce 6# 39# happyReduction_97 +happyReduction_97 (happy_x_6 `HappyStk` + happy_x_5 `HappyStk` + happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) + = case happyOutTok happy_x_1 of { happy_var_1 -> + case happyOut47 happy_x_2 of { happy_var_2 -> + case happyOutTok happy_x_3 of { happy_var_3 -> + case happyOut47 happy_x_4 of { happy_var_4 -> + case happyOutTok happy_x_5 of { happy_var_5 -> + case happyOut48 happy_x_6 of { happy_var_6 -> + happyIn47 + (Language.Clafer.Front.AbsClafer.EImpliesElse ((mkTokenSpan happy_var_1) >- (mkCatSpan happy_var_2) >- (mkTokenSpan happy_var_3) >- (mkCatSpan happy_var_4) >- (mkTokenSpan happy_var_5) >- (mkCatSpan happy_var_6)) happy_var_2 happy_var_4 happy_var_6 + ) `HappyStk` happyRest}}}}}} + +happyReduce_98 = happySpecReduce_1 39# happyReduction_98 +happyReduction_98 happy_x_1 + = case happyOut48 happy_x_1 of { happy_var_1 -> + happyIn47 + (happy_var_1 + )} + +happyReduce_99 = happySpecReduce_3 40# happyReduction_99 +happyReduction_99 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut48 happy_x_1 of { happy_var_1 -> + case happyOutTok happy_x_2 of { happy_var_2 -> + case happyOut49 happy_x_3 of { happy_var_3 -> + happyIn48 + (Language.Clafer.Front.AbsClafer.EDomain ((mkCatSpan happy_var_1) >- (mkTokenSpan happy_var_2) >- (mkCatSpan happy_var_3)) happy_var_1 happy_var_3 + )}}} + +happyReduce_100 = happySpecReduce_1 40# happyReduction_100 +happyReduction_100 happy_x_1 + = case happyOut49 happy_x_1 of { happy_var_1 -> + happyIn48 + (happy_var_1 + )} + +happyReduce_101 = happySpecReduce_3 41# happyReduction_101 +happyReduction_101 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut49 happy_x_1 of { happy_var_1 -> + case happyOutTok happy_x_2 of { happy_var_2 -> + case happyOut50 happy_x_3 of { happy_var_3 -> + happyIn49 + (Language.Clafer.Front.AbsClafer.ERange ((mkCatSpan happy_var_1) >- (mkTokenSpan happy_var_2) >- (mkCatSpan happy_var_3)) happy_var_1 happy_var_3 + )}}} + +happyReduce_102 = happySpecReduce_1 41# happyReduction_102 +happyReduction_102 happy_x_1 + = case happyOut50 happy_x_1 of { happy_var_1 -> + happyIn49 + (happy_var_1 + )} + +happyReduce_103 = happySpecReduce_3 42# happyReduction_103 +happyReduction_103 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut50 happy_x_1 of { happy_var_1 -> + case happyOutTok happy_x_2 of { happy_var_2 -> + case happyOut51 happy_x_3 of { happy_var_3 -> + happyIn50 + (Language.Clafer.Front.AbsClafer.EUnion ((mkCatSpan happy_var_1) >- (mkTokenSpan happy_var_2) >- (mkCatSpan happy_var_3)) happy_var_1 happy_var_3 + )}}} + +happyReduce_104 = happySpecReduce_3 42# happyReduction_104 +happyReduction_104 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut50 happy_x_1 of { happy_var_1 -> + case happyOutTok happy_x_2 of { happy_var_2 -> + case happyOut51 happy_x_3 of { happy_var_3 -> + happyIn50 + (Language.Clafer.Front.AbsClafer.EUnionCom ((mkCatSpan happy_var_1) >- (mkTokenSpan happy_var_2) >- (mkCatSpan happy_var_3)) happy_var_1 happy_var_3 + )}}} + +happyReduce_105 = happySpecReduce_1 42# happyReduction_105 +happyReduction_105 happy_x_1 + = case happyOut51 happy_x_1 of { happy_var_1 -> + happyIn50 + (happy_var_1 + )} + +happyReduce_106 = happySpecReduce_3 43# happyReduction_106 +happyReduction_106 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut51 happy_x_1 of { happy_var_1 -> + case happyOutTok happy_x_2 of { happy_var_2 -> + case happyOut52 happy_x_3 of { happy_var_3 -> + happyIn51 + (Language.Clafer.Front.AbsClafer.EDifference ((mkCatSpan happy_var_1) >- (mkTokenSpan happy_var_2) >- (mkCatSpan happy_var_3)) happy_var_1 happy_var_3 + )}}} + +happyReduce_107 = happySpecReduce_1 43# happyReduction_107 +happyReduction_107 happy_x_1 + = case happyOut52 happy_x_1 of { happy_var_1 -> + happyIn51 + (happy_var_1 + )} + +happyReduce_108 = happySpecReduce_3 44# happyReduction_108 +happyReduction_108 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut52 happy_x_1 of { happy_var_1 -> + case happyOutTok happy_x_2 of { happy_var_2 -> + case happyOut53 happy_x_3 of { happy_var_3 -> + happyIn52 + (Language.Clafer.Front.AbsClafer.EIntersection ((mkCatSpan happy_var_1) >- (mkTokenSpan happy_var_2) >- (mkCatSpan happy_var_3)) happy_var_1 happy_var_3 + )}}} + +happyReduce_109 = happySpecReduce_3 44# happyReduction_109 +happyReduction_109 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut52 happy_x_1 of { happy_var_1 -> + case happyOutTok happy_x_2 of { happy_var_2 -> + case happyOut53 happy_x_3 of { happy_var_3 -> + happyIn52 + (Language.Clafer.Front.AbsClafer.EIntersectionDeprecated ((mkCatSpan happy_var_1) >- (mkTokenSpan happy_var_2) >- (mkCatSpan happy_var_3)) happy_var_1 happy_var_3 + )}}} + +happyReduce_110 = happySpecReduce_1 44# happyReduction_110 +happyReduction_110 happy_x_1 + = case happyOut53 happy_x_1 of { happy_var_1 -> + happyIn52 + (happy_var_1 + )} + +happyReduce_111 = happySpecReduce_3 45# happyReduction_111 +happyReduction_111 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut53 happy_x_1 of { happy_var_1 -> + case happyOutTok happy_x_2 of { happy_var_2 -> + case happyOut54 happy_x_3 of { happy_var_3 -> + happyIn53 + (Language.Clafer.Front.AbsClafer.EJoin ((mkCatSpan happy_var_1) >- (mkTokenSpan happy_var_2) >- (mkCatSpan happy_var_3)) happy_var_1 happy_var_3 + )}}} + +happyReduce_112 = happySpecReduce_1 45# happyReduction_112 +happyReduction_112 happy_x_1 + = case happyOut54 happy_x_1 of { happy_var_1 -> + happyIn53 + (happy_var_1 + )} + +happyReduce_113 = happySpecReduce_1 46# happyReduction_113 +happyReduction_113 happy_x_1 + = case happyOut34 happy_x_1 of { happy_var_1 -> + happyIn54 + (Language.Clafer.Front.AbsClafer.ClaferId ((mkCatSpan happy_var_1)) happy_var_1 + )} + +happyReduce_114 = happySpecReduce_1 46# happyReduction_114 +happyReduction_114 happy_x_1 + = case happyOut8 happy_x_1 of { happy_var_1 -> + happyIn54 + (Language.Clafer.Front.AbsClafer.EInt ((mkCatSpan happy_var_1)) happy_var_1 + )} + +happyReduce_115 = happySpecReduce_1 46# happyReduction_115 +happyReduction_115 happy_x_1 + = case happyOut9 happy_x_1 of { happy_var_1 -> + happyIn54 + (Language.Clafer.Front.AbsClafer.EDouble ((mkCatSpan happy_var_1)) happy_var_1 + )} + +happyReduce_116 = happySpecReduce_1 46# happyReduction_116 +happyReduction_116 happy_x_1 + = case happyOut10 happy_x_1 of { happy_var_1 -> + happyIn54 + (Language.Clafer.Front.AbsClafer.EReal ((mkCatSpan happy_var_1)) happy_var_1 + )} + +happyReduce_117 = happySpecReduce_1 46# happyReduction_117 +happyReduction_117 happy_x_1 + = case happyOut11 happy_x_1 of { happy_var_1 -> + happyIn54 + (Language.Clafer.Front.AbsClafer.EStr ((mkCatSpan happy_var_1)) happy_var_1 + )} + +happyReduce_118 = happySpecReduce_3 46# happyReduction_118 +happyReduction_118 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut35 happy_x_2 of { happy_var_2 -> + happyIn54 + (happy_var_2 + )} + +happyReduce_119 = happySpecReduce_3 47# happyReduction_119 +happyReduction_119 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut64 happy_x_1 of { happy_var_1 -> + case happyOutTok happy_x_2 of { happy_var_2 -> + case happyOut50 happy_x_3 of { happy_var_3 -> + happyIn55 + (Language.Clafer.Front.AbsClafer.Decl ((mkCatSpan happy_var_1) >- (mkTokenSpan happy_var_2) >- (mkCatSpan happy_var_3)) happy_var_1 happy_var_3 + )}}} + +happyReduce_120 = happySpecReduce_1 48# happyReduction_120 +happyReduction_120 happy_x_1 + = case happyOutTok happy_x_1 of { happy_var_1 -> + happyIn56 + (Language.Clafer.Front.AbsClafer.QuantNo ((mkTokenSpan happy_var_1)) + )} + +happyReduce_121 = happySpecReduce_1 48# happyReduction_121 +happyReduction_121 happy_x_1 + = case happyOutTok happy_x_1 of { happy_var_1 -> + happyIn56 + (Language.Clafer.Front.AbsClafer.QuantNot ((mkTokenSpan happy_var_1)) + )} + +happyReduce_122 = happySpecReduce_1 48# happyReduction_122 +happyReduction_122 happy_x_1 + = case happyOutTok happy_x_1 of { happy_var_1 -> + happyIn56 + (Language.Clafer.Front.AbsClafer.QuantLone ((mkTokenSpan happy_var_1)) + )} + +happyReduce_123 = happySpecReduce_1 48# happyReduction_123 +happyReduction_123 happy_x_1 + = case happyOutTok happy_x_1 of { happy_var_1 -> + happyIn56 + (Language.Clafer.Front.AbsClafer.QuantOne ((mkTokenSpan happy_var_1)) + )} + +happyReduce_124 = happySpecReduce_1 48# happyReduction_124 +happyReduction_124 happy_x_1 + = case happyOutTok happy_x_1 of { happy_var_1 -> + happyIn56 + (Language.Clafer.Front.AbsClafer.QuantSome ((mkTokenSpan happy_var_1)) + )} + +happyReduce_125 = happySpecReduce_1 49# happyReduction_125 +happyReduction_125 happy_x_1 + = case happyOut12 happy_x_1 of { happy_var_1 -> + happyIn57 + (Language.Clafer.Front.AbsClafer.EnumIdIdent ((mkCatSpan happy_var_1)) happy_var_1 + )} + +happyReduce_126 = happySpecReduce_1 50# happyReduction_126 +happyReduction_126 happy_x_1 + = case happyOut12 happy_x_1 of { happy_var_1 -> + happyIn58 + (Language.Clafer.Front.AbsClafer.ModIdIdent ((mkCatSpan happy_var_1)) happy_var_1 + )} + +happyReduce_127 = happySpecReduce_1 51# happyReduction_127 +happyReduction_127 happy_x_1 + = case happyOut12 happy_x_1 of { happy_var_1 -> + happyIn59 + (Language.Clafer.Front.AbsClafer.LocIdIdent ((mkCatSpan happy_var_1)) happy_var_1 + )} + +happyReduce_128 = happySpecReduce_0 52# happyReduction_128 +happyReduction_128 = happyIn60 + ([] + ) + +happyReduce_129 = happySpecReduce_2 52# happyReduction_129 +happyReduction_129 happy_x_2 + happy_x_1 + = case happyOut60 happy_x_1 of { happy_var_1 -> + case happyOut18 happy_x_2 of { happy_var_2 -> + happyIn60 + (flip (:) happy_var_1 happy_var_2 + )}} + +happyReduce_130 = happySpecReduce_1 53# happyReduction_130 +happyReduction_130 happy_x_1 + = case happyOut57 happy_x_1 of { happy_var_1 -> + happyIn61 + ((:[]) happy_var_1 + )} + +happyReduce_131 = happySpecReduce_3 53# happyReduction_131 +happyReduction_131 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut57 happy_x_1 of { happy_var_1 -> + case happyOut61 happy_x_3 of { happy_var_3 -> + happyIn61 + ((:) happy_var_1 happy_var_3 + )}} + +happyReduce_132 = happySpecReduce_0 54# happyReduction_132 +happyReduction_132 = happyIn62 + ([] + ) + +happyReduce_133 = happySpecReduce_2 54# happyReduction_133 +happyReduction_133 happy_x_2 + happy_x_1 + = case happyOut62 happy_x_1 of { happy_var_1 -> + case happyOut25 happy_x_2 of { happy_var_2 -> + happyIn62 + (flip (:) happy_var_1 happy_var_2 + )}} + +happyReduce_134 = happySpecReduce_0 55# happyReduction_134 +happyReduction_134 = happyIn63 + ([] + ) + +happyReduce_135 = happySpecReduce_2 55# happyReduction_135 +happyReduction_135 happy_x_2 + happy_x_1 + = case happyOut63 happy_x_1 of { happy_var_1 -> + case happyOut35 happy_x_2 of { happy_var_2 -> + happyIn63 + (flip (:) happy_var_1 happy_var_2 + )}} + +happyReduce_136 = happySpecReduce_1 56# happyReduction_136 +happyReduction_136 happy_x_1 + = case happyOut59 happy_x_1 of { happy_var_1 -> + happyIn64 + ((:[]) happy_var_1 + )} + +happyReduce_137 = happySpecReduce_3 56# happyReduction_137 +happyReduction_137 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut59 happy_x_1 of { happy_var_1 -> + case happyOut64 happy_x_3 of { happy_var_3 -> + happyIn64 + ((:) happy_var_1 happy_var_3 + )}} + +happyReduce_138 = happySpecReduce_1 57# happyReduction_138 +happyReduction_138 happy_x_1 + = case happyOut58 happy_x_1 of { happy_var_1 -> + happyIn65 + ((:[]) happy_var_1 + )} + +happyReduce_139 = happySpecReduce_3 57# happyReduction_139 +happyReduction_139 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut58 happy_x_1 of { happy_var_1 -> + case happyOut65 happy_x_3 of { happy_var_3 -> + happyIn65 + ((:) happy_var_1 happy_var_3 + )}} + +happyNewToken action sts stk [] = + happyDoAction 75# 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 _ (TS _ 43) -> cont 43#; + PT _ (TS _ 44) -> cont 44#; + PT _ (TS _ 45) -> cont 45#; + PT _ (TS _ 46) -> cont 46#; + PT _ (TS _ 47) -> cont 47#; + PT _ (TS _ 48) -> cont 48#; + PT _ (TS _ 49) -> cont 49#; + PT _ (TS _ 50) -> cont 50#; + PT _ (TS _ 51) -> cont 51#; + PT _ (TS _ 52) -> cont 52#; + PT _ (TS _ 53) -> cont 53#; + PT _ (TS _ 54) -> cont 54#; + PT _ (TS _ 55) -> cont 55#; + PT _ (TS _ 56) -> cont 56#; + PT _ (TS _ 57) -> cont 57#; + PT _ (TS _ 58) -> cont 58#; + PT _ (TS _ 59) -> cont 59#; + PT _ (TS _ 60) -> cont 60#; + PT _ (TS _ 61) -> cont 61#; + PT _ (TS _ 62) -> cont 62#; + PT _ (TS _ 63) -> cont 63#; + PT _ (TS _ 64) -> cont 64#; + PT _ (TS _ 65) -> cont 65#; + PT _ (T_PosInteger _) -> cont 66#; + PT _ (T_PosDouble _) -> cont 67#; + PT _ (T_PosReal _) -> cont 68#; + PT _ (T_PosString _) -> cont 69#; + PT _ (T_PosIdent _) -> cont 70#; + PT _ (T_PosLineComment _) -> cont 71#; + PT _ (T_PosBlockComment _) -> cont 72#; + PT _ (T_PosAlloy _) -> cont 73#; + PT _ (T_PosChoco _) -> cont 74#; + _ -> happyError' (tk:tks) + } + +happyError_ 75# 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 + +pModule tks = happySomeParser where + happySomeParser = happyThen (happyParse 0# tks) (\x -> happyReturn (happyOut17 x)) + +pClafer tks = happySomeParser where + happySomeParser = happyThen (happyParse 1# tks) (\x -> happyReturn (happyOut19 x)) + +pConstraint tks = happySomeParser where + happySomeParser = happyThen (happyParse 2# tks) (\x -> happyReturn (happyOut20 x)) + +pAssertion tks = happySomeParser where + happySomeParser = happyThen (happyParse 3# tks) (\x -> happyReturn (happyOut21 x)) + +pGoal tks = happySomeParser where + happySomeParser = happyThen (happyParse 4# tks) (\x -> happyReturn (happyOut22 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 (pp ts) $ "syntax error at " ++ tokenPos ts ++ + case ts of + [] -> [] + [Err _] -> " due to lexer error" + _ -> " before " ++ unwords (map (id . prToken) (take 4 ts)) + +myLexer = tokens + +gp x@(PT (Pn _ l c) _) = Span (Pos (toInteger l) (toInteger c)) (Pos (toInteger l) (toInteger c + toInteger (length $ prToken x))) +pp (PT (Pn _ l c) _ :_) = Pos (toInteger l) (toInteger c) +pp (Err (Pn _ l c) :_) = Pos (toInteger l) (toInteger c) +pp _ = error "EOF" + +mkCatSpan :: (Spannable c) => c -> Span +mkCatSpan = getSpan + +mkTokenSpan :: Token -> Span +mkTokenSpan = gp +{-# LINE 1 "templates\GenericTemplate.hs" #-} +{-# LINE 1 "templates\\GenericTemplate.hs" #-} +{-# LINE 1 "<built-in>" #-} +{-# LINE 1 "<command-line>" #-} +{-# LINE 9 "<command-line>" #-} +{-# LINE 1 "C:\\dev\\ghc-7.10.2\\lib/include\\ghcversion.h" #-}
src/Language/Clafer.hs view
@@ -172,7 +172,7 @@ cth (Right r) _ = return r fragments model = map unlines $ fragments' $ lines model fragments' [] = [] - fragments' ("//# FRAGMENT":xs) = fragments' xs + fragments' ("//# FRAGMENT":xs) = fragments' $ " " : xs fragments' model = takeWhile (/= "//# FRAGMENT") model : fragments' (dropWhile (/= "//# FRAGMENT") model) -- htmlCatch :: Either ClaferErr CompilerResult -> ClaferArgs -> String -> IO(CompilerResult) htmlCatch (Right r) _ _ = return r @@ -341,55 +341,26 @@ parse = do env <- getEnv - astsErr <- mapM (parseFrag $ args env) $ modelFrags env - asts <- liftParseErrs astsErr + let completeModel = concat $ modelFrags env - -- We need to somehow combine all the ASTS together into a complete AST - -- However, the source positions inside the ASTs are relative to their - -- fragments. - -- - -- For example - -- Frag1: "A\nB\n" - -- Frag2: "C\n" - -- The "C" clafer in Frag2 has position (1, 1) because it is at the start of the fragment. - -- However, it should have position (3, 1) since that is its position in the complete model. - -- - -- We can - -- 1. Traverse the model and update the positions so that they are relative to model rather - -- than the fragment. - -- 2. Reparse the model as a complete model rather in fragments. - -- - -- The second one is easier so that's we'll do for now. There shouldn't be any errors since - -- each individual fragment already passed. - ast <- case asts of - -- Special case: if there is only one fragment, then the complete model is contained within it. - -- Don't need to reparse. This is the common case. - [oneFrag] -> return oneFrag - _ -> do - -- Combine all the fragment syntaxes - let completeModel = concat $ modelFrags env - completeAst <- (parseFrag $ args env) completeModel - liftParseErr completeAst + (astErr, otherTokens') <- (parseFrag $ args env) completeModel + ast <- liftParseErr astErr - putEnv env{ cAst = Just ast, astModuleTrace = traceAstModule ast } + putEnv env{ cAst = Just ast, astModuleTrace = traceAstModule ast, otherTokens = otherTokens' } where - parseFrag :: (Monad m) => ClaferArgs -> String -> ClaferT m (Err Module) - parseFrag args' = - (>>= (return . pModule)) . - (if not - ((new_layout args') || - (no_layout args')) - then - resolveLayout - else - return) - . myLexer . - (if (not $ no_layout args') && - (new_layout args') - then - resLayout - else - id) + parseFrag :: (Monad m) => ClaferArgs -> String -> ClaferT m (Err Module, [Token]) + parseFrag args' inputModel = do + let model' = if (not $ no_layout args') && (new_layout args') then resLayout inputModel else inputModel + let allTokens = myLexer model' + let (parseableTokens, otherTokens') = partition isParseable allTokens + tokens2 <- if not ((new_layout args') || (no_layout args')) then resolveLayout parseableTokens else return parseableTokens + return (pModule tokens2, otherTokens') + where + isParseable (PT _ (T_PosLineComment _)) = False + isParseable (PT _ (T_PosBlockComment _)) = False + isParseable (PT _ (T_PosAlloy _)) = False + isParseable (PT _ (T_PosChoco _)) = False + isParseable _ = True desugar :: Monad m => Maybe URL -> ClaferT m IModule desugar mURL = do @@ -435,13 +406,13 @@ genFragments :: [Declaration] -> [Pos] -> Map.Map Span [Ir] -> [(Span, String)] -> [String] genFragments [] _ _ comments = printComments comments genFragments (decl:decls') [] irMap comments = let (comments', c) = printPreComment (getSpan decl) comments in - [c] ++ (cleanOutput $ revertLayout $ printDeclaration decl 0 irMap True $ inDecl decl comments') : (genFragments decls' [] irMap $ afterDecl decl comments) + [c] ++ (cleanOutput $ revertLayout $ printDeclaration decl 0 irMap True $ inDecl decl comments') : (genFragments decls' [] irMap $ afterDecl decl comments') genFragments (decl:decls') (frg:frgs) irMap comments = if lne decl < frg then let (comments', c) = printPreComment (getSpan decl) comments in - [c] ++ (cleanOutput $ revertLayout $ printDeclaration decl 0 irMap True $ inDecl decl comments') : (genFragments decls' (frg:frgs) irMap $ afterDecl decl comments) + [c] ++ (cleanOutput $ revertLayout $ printDeclaration decl 0 irMap True $ inDecl decl comments') : (genFragments decls' (frg:frgs) irMap $ afterDecl decl comments') else "<!-- # FRAGMENT /-->" : genFragments (decl:decls') frgs irMap comments inDecl :: Declaration -> [(Span, String)] -> [(Span, String)] - inDecl decl comments = let s = getSpan decl in dropWhile (\x -> fst x < s) comments + inDecl decl comments = let s = getSpan decl in dropWhile (\x -> fst x <= s) comments afterDecl :: Declaration -> [(Span, String)] -> [(Span, String)] afterDecl decl comments = let (Span _ (Pos line' _)) = getSpan decl in dropWhile (\(x, _) -> let (Span _ (Pos line'' _)) = x in line'' <= line') comments printComments [] = [] @@ -479,6 +450,7 @@ (hasNoRealLiterals, hasNoProductOperator) = iExpBasedChecks iModule hasNoReferenceToReal = iClaferBasedChecks iModule cargs = args env + otherTokens' = otherTokens env modes = mode cargs stats = showStats au $ statsModule iModule scopes = getScopeStrategy (scope_strategy cargs) iModule @@ -490,7 +462,7 @@ then let (imod,strMap) = astrModule iModule - alloyCode = genModule cargs{mode = [Alloy]} (imod, genv) scopes + alloyCode = genModule cargs{mode = [Alloy]} (imod, genv) scopes otherTokens' addCommentStats = if no_stats cargs then const else addStats in [ (Alloy, @@ -507,9 +479,9 @@ else [ (Alloy, NoCompilerResult { reason = "Alloy output unavailable because the model contains: " - ++ (if hasNoRealLiterals then "" else " | a real number literal") - ++ (if hasNoReferenceToReal then "" else " | a reference to a real") - ++ (if hasNoProductOperator then "" else " | the product operator") + ++ (if hasNoRealLiterals then "" else " * a real number literal") + ++ (if hasNoReferenceToReal then "" else " * a reference to a real") + ++ (if hasNoProductOperator then "" else " * the product operator") ++ "." }) ] @@ -610,7 +582,7 @@ then [ (Choco, CompilerResult { extension = "js", - outputCode = genCModule (iModule, genv) scopes, + outputCode = genCModule (iModule, genv) scopes otherTokens', statistics = stats, claferEnv = env, mappingToAlloy = [],
src/Language/Clafer/Common.hs view
@@ -1,6 +1,6 @@ {-# LANGUAGE DeriveDataTypeable, RankNTypes, KindSignatures, FlexibleContexts #-} {- - Copyright (C) 2012-2015 Kacper Bak, Jimmy Liang <http://gsd.uwaterloo.ca> + Copyright (C) 2012-2015 Kacper Bak, Jimmy Liang, Michal Antkiewicz <http://gsd.uwaterloo.ca> Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in @@ -42,6 +42,7 @@ type Result = String transIdent :: PosIdent -> String +transIdent (PosIdent (_, "ref")) = "dref" transIdent (PosIdent (_, str)) = str mkIdent :: String -> PosIdent @@ -75,27 +76,22 @@ getRefIds :: PExp -> [String] getRefIds (PExp _ _ _ (IClaferId{ _sident = s})) = [s] getRefIds (PExp _ _ _ (IFunExp{_op=".", _exps = [_, rightExp]})) = getRefIds rightExp -getRefIds (PExp _ _ _ (IFunExp{_op="ifthenelse", _exps = [_, leftExp, rightExp]})) = getRefIds leftExp ++ getRefIds rightExp getRefIds (PExp _ _ _ (IFunExp{_op="++", _exps = [leftExp, rightExp]})) = getRefIds leftExp ++ getRefIds rightExp getRefIds (PExp _ _ _ (IFunExp{_op=",", _exps = [leftExp, rightExp]})) = getRefIds leftExp ++ getRefIds rightExp getRefIds (PExp _ _ _ (IFunExp{_op="--", _exps = [leftExp, rightExp]})) = getRefIds leftExp ++ getRefIds rightExp getRefIds (PExp _ _ _ (IFunExp{_op="**", _exps = [leftExp, rightExp]})) = getRefIds leftExp ++ getRefIds rightExp -getRefIds (PExp _ _ _ (IFunExp{_op="<:", _exps = [_, rightExp]})) = getRefIds rightExp -getRefIds (PExp _ _ _ (IFunExp{_op=":>", _exps = [leftExp, _]})) = getRefIds leftExp getRefIds (PExp _ _ _ (IInt _)) = [integerType] getRefIds (PExp _ _ _ (IDouble _)) = [doubleType] getRefIds (PExp _ _ _ (IReal _)) = [realType] getRefIds (PExp _ _ _ (IStr _)) = [stringType] +getRefIds (PExp _ _ _ (IDeclPExp{_quant = ISome})) = [] getRefIds pexp' = error $ "[Bug] Commmon.getRefIds called on unexpected argument '" ++ show pexp' ++ "'" isEqClaferId :: String -> IClafer -> Bool isEqClaferId uid' claf' = _uid claf' == uid' -mkPLClaferId :: CName -> Bool -> ClaferBinding -> PExp -mkPLClaferId id' isTop' bind' = pExpDefPidPos $ IClaferId "" id' isTop' bind' - -pExpDefPidPos :: IExp -> PExp -pExpDefPidPos = pExpDefPid noSpan +mkPLClaferId :: Span -> CName -> Bool -> ClaferBinding -> PExp +mkPLClaferId pos' id' isTop' bind' = pExpDefPid pos' $ IClaferId "" id' isTop' bind' pExpDefPid :: Span -> IExp -> PExp pExpDefPid = pExpDef "" @@ -150,10 +146,10 @@ allClafers :: [ IClafer ] allClafers = universeOn biplate iModule rootClafer = IClafer noSpan False (Just $ IGCard False (0, -1)) rootIdent rootIdent "" Nothing Nothing (Just (1,1)) (1, 1) (_mDecls iModule) - integerClafer = IClafer noSpan False (Just $ IGCard False (0, -1)) integerType integerType "" (Just $ pExpDefPidPos $ IClaferId "" doubleType True $ Just doubleType) Nothing (Just (1,1)) (1, 1) [] - intClafer = IClafer noSpan False (Just $ IGCard False (0, -1)) "int" "int" "" (Just $ pExpDefPidPos $ IClaferId "" doubleType True $ Just doubleType) Nothing (Just (1,1)) (1, 1) [] + integerClafer = IClafer noSpan False (Just $ IGCard False (0, -1)) integerType integerType "" (Just $ pExpDefPid noSpan $ IClaferId "" doubleType True $ Just doubleType) Nothing (Just (1,1)) (1, 1) [] + intClafer = IClafer noSpan False (Just $ IGCard False (0, -1)) "int" "int" "" (Just $ pExpDefPid noSpan $ IClaferId "" doubleType True $ Just doubleType) Nothing (Just (1,1)) (1, 1) [] stringClafer = IClafer noSpan False (Just $ IGCard False (0, -1)) stringType stringType "" Nothing Nothing (Just (1,1)) (1, 1) [] - doubleClafer = IClafer noSpan False (Just $ IGCard False (0, -1)) doubleType doubleType "" (Just $ pExpDefPidPos $ IClaferId "" realType True $ Just realType) Nothing (Just (1,1)) (1, 1) [] + doubleClafer = IClafer noSpan False (Just $ IGCard False (0, -1)) doubleType doubleType "" (Just $ pExpDefPid noSpan $ IClaferId "" realType True $ Just realType) Nothing (Just (1,1)) (1, 1) [] realClafer = IClafer noSpan False (Just $ IGCard False (0, -1)) realType realType "" Nothing Nothing (Just (1,1)) (1, 1) [] booleanClafer = IClafer noSpan False (Just $ IGCard False (0, -1)) booleanType booleanType "" Nothing Nothing (Just (1,1)) (1, 1) [] clafer = IClafer noSpan False (Just $ IGCard False (0, -1)) baseClafer baseClafer "" Nothing Nothing (Just (1,1)) (1, 1) [] @@ -488,9 +484,9 @@ iIfThenElse :: String iIfThenElse = "ifthenelse" -mkIFunExp :: String -> [IExp] -> IExp -mkIFunExp _ (x:[]) = x -mkIFunExp op' xs = foldl1 (\x y -> IFunExp op' $ map (PExp Nothing "" noSpan) [x,y]) xs +mkIFunExp :: Span -> String -> [IExp] -> IExp +mkIFunExp _ _ (x:[]) = x +mkIFunExp pos' op' xs = foldl1 (\x y -> IFunExp op' $ map (PExp Nothing "" pos') [x,y]) xs toLowerS :: String -> String toLowerS "" = "" @@ -511,14 +507,14 @@ parentIdent :: String parentIdent = "parent" -refIdent :: String -refIdent = "ref" +drefIdent :: String +drefIdent = "dref" childrenIdent :: String childrenIdent = "children" specialNames :: [String] -specialNames = [thisIdent, parentIdent, refIdent, rootIdent, childrenIdent] +specialNames = [thisIdent, parentIdent, drefIdent, rootIdent, childrenIdent] isSpecial :: String -> Bool isSpecial = flip elem specialNames
src/Language/Clafer/Css.hs view
@@ -34,6 +34,7 @@ ".standalonecomment { color: green; font-style:italic }", ".inlinecomment { color: green; padding-left:20px; font-style:italic }", ".error{background-color: yellow; color: red }", + ".deprecated{color: orange }", ".indent{padding-left:20px}", "a[href$='Lookup failed'] {color: red}", "a[href$='Uid not found'] {color: red}",
src/Language/Clafer/Front/AbsClafer.hs view
@@ -38,6 +38,14 @@ deriving (Eq, Ord, Show, Read, Data, Typeable, Generic) newtype PosIdent = PosIdent ((Int,Int),String) deriving (Eq, Ord, Show, Read, Data, Typeable, Generic) +newtype PosLineComment = PosLineComment ((Int,Int),String) + deriving (Eq, Ord, Show, Read, Data, Typeable, Generic) +newtype PosBlockComment = PosBlockComment ((Int,Int),String) + deriving (Eq, Ord, Show, Read, Data, Typeable, Generic) +newtype PosAlloy = PosAlloy ((Int,Int),String) + deriving (Eq, Ord, Show, Read, Data, Typeable, Generic) +newtype PosChoco = PosChoco ((Int,Int),String) + deriving (Eq, Ord, Show, Read, Data, Typeable, Generic) instance Spannable PosInteger where getSpan (PosInteger ((c, l), lex')) = Span (Pos c' l') (Pos c' $ l' + len lex') @@ -68,6 +76,30 @@ where c' = toInteger c l' = toInteger l +instance Spannable PosLineComment where + getSpan (PosLineComment ((c, l), lex')) = + Span (Pos c' l') (Pos c' $ l' + len lex') + where + c' = toInteger c + l' = toInteger l +instance Spannable PosBlockComment where + getSpan (PosBlockComment ((c, l), lex')) = + Span (Pos c' l') (Pos c' $ l' + len lex') + where + c' = toInteger c + l' = toInteger l +instance Spannable PosAlloy where + getSpan (PosAlloy ((c, l), lex')) = + Span (Pos c' l') (Pos c' $ l' + len lex') + where + c' = toInteger c + l' = toInteger l +instance Spannable PosChoco where + getSpan (PosChoco ((c, l), lex')) = + Span (Pos c' l') (Pos c' $ l' + len lex') + where + c' = toInteger c + l' = toInteger l data Module = Module Span [Declaration] deriving (Eq, Ord, Show, Read, Data, Typeable, Generic) @@ -241,6 +273,7 @@ | EUnionCom Span Exp Exp | EDifference Span Exp Exp | EIntersection Span Exp Exp + | EIntersectionDeprecated Span Exp Exp | EJoin Span Exp Exp | ClaferId Span Name | EInt Span PosInteger @@ -287,6 +320,7 @@ getSpan (EUnionCom s _ _ ) = s getSpan (EDifference s _ _ ) = s getSpan (EIntersection s _ _ ) = s + getSpan (EIntersectionDeprecated s _ _ ) = s getSpan (EJoin s _ _ ) = s getSpan (ClaferId s _ ) = s getSpan (EInt s _ ) = s
src/Language/Clafer/Front/LexClafer.x view
@@ -20,11 +20,9 @@ $u = [\0-\255] -- universal: any character @rsyms = -- symbols and non-identifier-like reserved words - \= | \[ | \] | \< \< | \> \> | \{ | \} | \` | \: | \- \> | \- \> \> | \: \= | \? | \+ | \* | \. \. | \| | \< \= \> | \= \> | \| \| | \& \& | \! | \< | \> | \< \= | \> \= | \! \= | \- | \/ | \% | \# | \< \: | \: \> | \+ \+ | \, | \- \- | \* \* | \. | \; | \\ | \( | \) + \= | \[ | \] | \< \< | \> \> | \{ | \} | \` | \: | \- \> | \- \> \> | \: \= | \? | \+ | \* | \. \. | \| | \< \= \> | \= \> | \| \| | \& \& | \! | \< | \> | \< \= | \> \= | \! \= | \- | \/ | \% | \# | \< \: | \: \> | \+ \+ | \, | \- \- | \* \* | \& | \. | \; | \\ | \( | \) :- -"//" [.]* ; -- Toss single line comments -"/*" ([$u # \*] | \*+ [$u # [\* \/]])* ("*")+ "/" ; $white+ ; @rsyms { tok (\p s -> PT p (eitherResIdent (TV . share) s)) } @@ -33,6 +31,10 @@ $d + \. $d + { tok (\p s -> PT p (eitherResIdent (T_PosReal . share) s)) } \" ($u # [\" \\]| \\ [\" \\ n t]) * \" { tok (\p s -> PT p (eitherResIdent (T_PosString . share) s)) } $l ($l | $d | \_ | \')* { tok (\p s -> PT p (eitherResIdent (T_PosIdent . share) s)) } +\/ \/ ($u # \n)* { tok (\p s -> PT p (eitherResIdent (T_PosLineComment . share) s)) } +\/ \* ($u # \* | \* + ($u # [\* \/]))* \* + \/ { tok (\p s -> PT p (eitherResIdent (T_PosBlockComment . share) s)) } +\[ a l l o y \| ($u # \| | \| + ($u # \])) * (\| \]) { tok (\p s -> PT p (eitherResIdent (T_PosAlloy . share) s)) } +\[ c h o c o \| ($u # \| | \| + ($u # \])) * (\| \]) { tok (\p s -> PT p (eitherResIdent (T_PosChoco . share) s)) } $l $i* { tok (\p s -> PT p (eitherResIdent (TV . share) s)) } @@ -60,6 +62,10 @@ | T_PosReal !String | T_PosString !String | T_PosIdent !String + | T_PosLineComment !String + | T_PosBlockComment !String + | T_PosAlloy !String + | T_PosChoco !String deriving (Eq,Show,Ord) @@ -99,6 +105,10 @@ PT _ (T_PosReal s) -> s PT _ (T_PosString s) -> s PT _ (T_PosIdent s) -> s + PT _ (T_PosLineComment s) -> s + PT _ (T_PosBlockComment s) -> s + PT _ (T_PosAlloy s) -> s + PT _ (T_PosChoco s) -> s data BTree = N | B String Tok BTree BTree deriving (Show) @@ -112,7 +122,7 @@ | s == a = t resWords :: BTree -resWords = b ">>" 33 (b "." 17 (b "**" 9 (b "&&" 5 (b "#" 3 (b "!=" 2 (b "!" 1 N N) N) (b "%" 4 N N)) (b ")" 7 (b "(" 6 N N) (b "*" 8 N N))) (b "-" 13 (b "++" 11 (b "+" 10 N N) (b "," 12 N N)) (b "->" 15 (b "--" 14 N N) (b "->>" 16 N N)))) (b "<:" 25 (b ":=" 21 (b "/" 19 (b ".." 18 N N) (b ":" 20 N N)) (b ";" 23 (b ":>" 22 N N) (b "<" 24 N N))) (b "=" 29 (b "<=" 27 (b "<<" 26 N N) (b "<=>" 28 N N)) (b ">" 31 (b "=>" 30 N N) (b ">=" 32 N N))))) (b "min" 49 (b "assert" 41 (b "]" 37 (b "[" 35 (b "?" 34 N N) (b "\\" 36 N N)) (b "abstract" 39 (b "`" 38 N N) (b "all" 40 N N))) (b "if" 45 (b "else" 43 (b "disj" 42 N N) (b "enum" 44 N N)) (b "lone" 47 (b "in" 46 N N) (b "max" 48 N N)))) (b "some" 57 (b "one" 53 (b "no" 51 (b "mux" 50 N N) (b "not" 52 N N)) (b "or" 55 (b "opt" 54 N N) (b "product" 56 N N))) (b "{" 61 (b "then" 59 (b "sum" 58 N N) (b "xor" 60 N N)) (b "||" 63 (b "|" 62 N N) (b "}" 64 N N))))) +resWords = b ">=" 33 (b "->>" 17 (b "*" 9 (b "&" 5 (b "#" 3 (b "!=" 2 (b "!" 1 N N) N) (b "%" 4 N N)) (b "(" 7 (b "&&" 6 N N) (b ")" 8 N N))) (b "," 13 (b "+" 11 (b "**" 10 N N) (b "++" 12 N N)) (b "--" 15 (b "-" 14 N N) (b "->" 16 N N)))) (b "<" 25 (b ":" 21 (b ".." 19 (b "." 18 N N) (b "/" 20 N N)) (b ":>" 23 (b ":=" 22 N N) (b ";" 24 N N))) (b "<=>" 29 (b "<<" 27 (b "<:" 26 N N) (b "<=" 28 N N)) (b "=>" 31 (b "=" 30 N N) (b ">" 32 N N))))) (b "min" 50 (b "assert" 42 (b "]" 38 (b "[" 36 (b "?" 35 (b ">>" 34 N N) N) (b "\\" 37 N N)) (b "abstract" 40 (b "`" 39 N N) (b "all" 41 N N))) (b "if" 46 (b "else" 44 (b "disj" 43 N N) (b "enum" 45 N N)) (b "lone" 48 (b "in" 47 N N) (b "max" 49 N N)))) (b "some" 58 (b "one" 54 (b "no" 52 (b "mux" 51 N N) (b "not" 53 N N)) (b "or" 56 (b "opt" 55 N N) (b "product" 57 N N))) (b "{" 62 (b "then" 60 (b "sum" 59 N N) (b "xor" 61 N N)) (b "||" 64 (b "|" 63 N N) (b "}" 65 N N))))) where b s n = let bs = id s in B bs (TS bs n)
src/Language/Clafer/Front/ParClafer.y view
@@ -21,72 +21,77 @@ '!=' { PT _ (TS _ 2) } '#' { PT _ (TS _ 3) } '%' { PT _ (TS _ 4) } - '&&' { PT _ (TS _ 5) } - '(' { PT _ (TS _ 6) } - ')' { PT _ (TS _ 7) } - '*' { PT _ (TS _ 8) } - '**' { PT _ (TS _ 9) } - '+' { PT _ (TS _ 10) } - '++' { PT _ (TS _ 11) } - ',' { PT _ (TS _ 12) } - '-' { PT _ (TS _ 13) } - '--' { PT _ (TS _ 14) } - '->' { PT _ (TS _ 15) } - '->>' { PT _ (TS _ 16) } - '.' { PT _ (TS _ 17) } - '..' { PT _ (TS _ 18) } - '/' { PT _ (TS _ 19) } - ':' { PT _ (TS _ 20) } - ':=' { PT _ (TS _ 21) } - ':>' { PT _ (TS _ 22) } - ';' { PT _ (TS _ 23) } - '<' { PT _ (TS _ 24) } - '<:' { PT _ (TS _ 25) } - '<<' { PT _ (TS _ 26) } - '<=' { PT _ (TS _ 27) } - '<=>' { PT _ (TS _ 28) } - '=' { PT _ (TS _ 29) } - '=>' { PT _ (TS _ 30) } - '>' { PT _ (TS _ 31) } - '>=' { PT _ (TS _ 32) } - '>>' { PT _ (TS _ 33) } - '?' { PT _ (TS _ 34) } - '[' { PT _ (TS _ 35) } - '\\' { PT _ (TS _ 36) } - ']' { PT _ (TS _ 37) } - '`' { PT _ (TS _ 38) } - 'abstract' { PT _ (TS _ 39) } - 'all' { PT _ (TS _ 40) } - 'assert' { PT _ (TS _ 41) } - 'disj' { PT _ (TS _ 42) } - 'else' { PT _ (TS _ 43) } - 'enum' { PT _ (TS _ 44) } - 'if' { PT _ (TS _ 45) } - 'in' { PT _ (TS _ 46) } - 'lone' { PT _ (TS _ 47) } - 'max' { PT _ (TS _ 48) } - 'min' { PT _ (TS _ 49) } - 'mux' { PT _ (TS _ 50) } - 'no' { PT _ (TS _ 51) } - 'not' { PT _ (TS _ 52) } - 'one' { PT _ (TS _ 53) } - 'opt' { PT _ (TS _ 54) } - 'or' { PT _ (TS _ 55) } - 'product' { PT _ (TS _ 56) } - 'some' { PT _ (TS _ 57) } - 'sum' { PT _ (TS _ 58) } - 'then' { PT _ (TS _ 59) } - 'xor' { PT _ (TS _ 60) } - '{' { PT _ (TS _ 61) } - '|' { PT _ (TS _ 62) } - '||' { PT _ (TS _ 63) } - '}' { PT _ (TS _ 64) } + '&' { PT _ (TS _ 5) } + '&&' { PT _ (TS _ 6) } + '(' { PT _ (TS _ 7) } + ')' { PT _ (TS _ 8) } + '*' { PT _ (TS _ 9) } + '**' { PT _ (TS _ 10) } + '+' { PT _ (TS _ 11) } + '++' { PT _ (TS _ 12) } + ',' { PT _ (TS _ 13) } + '-' { PT _ (TS _ 14) } + '--' { PT _ (TS _ 15) } + '->' { PT _ (TS _ 16) } + '->>' { PT _ (TS _ 17) } + '.' { PT _ (TS _ 18) } + '..' { PT _ (TS _ 19) } + '/' { PT _ (TS _ 20) } + ':' { PT _ (TS _ 21) } + ':=' { PT _ (TS _ 22) } + ':>' { PT _ (TS _ 23) } + ';' { PT _ (TS _ 24) } + '<' { PT _ (TS _ 25) } + '<:' { PT _ (TS _ 26) } + '<<' { PT _ (TS _ 27) } + '<=' { PT _ (TS _ 28) } + '<=>' { PT _ (TS _ 29) } + '=' { PT _ (TS _ 30) } + '=>' { PT _ (TS _ 31) } + '>' { PT _ (TS _ 32) } + '>=' { PT _ (TS _ 33) } + '>>' { PT _ (TS _ 34) } + '?' { PT _ (TS _ 35) } + '[' { PT _ (TS _ 36) } + '\\' { PT _ (TS _ 37) } + ']' { PT _ (TS _ 38) } + '`' { PT _ (TS _ 39) } + 'abstract' { PT _ (TS _ 40) } + 'all' { PT _ (TS _ 41) } + 'assert' { PT _ (TS _ 42) } + 'disj' { PT _ (TS _ 43) } + 'else' { PT _ (TS _ 44) } + 'enum' { PT _ (TS _ 45) } + 'if' { PT _ (TS _ 46) } + 'in' { PT _ (TS _ 47) } + 'lone' { PT _ (TS _ 48) } + 'max' { PT _ (TS _ 49) } + 'min' { PT _ (TS _ 50) } + 'mux' { PT _ (TS _ 51) } + 'no' { PT _ (TS _ 52) } + 'not' { PT _ (TS _ 53) } + 'one' { PT _ (TS _ 54) } + 'opt' { PT _ (TS _ 55) } + 'or' { PT _ (TS _ 56) } + 'product' { PT _ (TS _ 57) } + 'some' { PT _ (TS _ 58) } + 'sum' { PT _ (TS _ 59) } + 'then' { PT _ (TS _ 60) } + 'xor' { PT _ (TS _ 61) } + '{' { PT _ (TS _ 62) } + '|' { PT _ (TS _ 63) } + '||' { PT _ (TS _ 64) } + '}' { PT _ (TS _ 65) } L_PosInteger { PT _ (T_PosInteger _) } L_PosDouble { PT _ (T_PosDouble _) } L_PosReal { PT _ (T_PosReal _) } L_PosString { PT _ (T_PosString _) } L_PosIdent { PT _ (T_PosIdent _) } +L_PosLineComment { PT _ (T_PosLineComment _) } +L_PosBlockComment { PT _ (T_PosBlockComment _) } +L_PosAlloy { PT _ (T_PosAlloy _) } +L_PosChoco { PT _ (T_PosChoco _) } %% @@ -96,163 +101,168 @@ PosReal :: { PosReal} : L_PosReal { PosReal (mkPosToken $1)} PosString :: { PosString} : L_PosString { PosString (mkPosToken $1)} PosIdent :: { PosIdent} : L_PosIdent { PosIdent (mkPosToken $1)} +PosLineComment :: { PosLineComment} : L_PosLineComment { PosLineComment (mkPosToken $1)} +PosBlockComment :: { PosBlockComment} : L_PosBlockComment { PosBlockComment (mkPosToken $1)} +PosAlloy :: { PosAlloy} : L_PosAlloy { PosAlloy (mkPosToken $1)} +PosChoco :: { PosChoco} : L_PosChoco { PosChoco (mkPosToken $1)} Module :: { Module } -Module : ListDeclaration { Module ((mkCatSpan $1)) (reverse $1) } +Module : ListDeclaration { Language.Clafer.Front.AbsClafer.Module ((mkCatSpan $1)) (reverse $1) } Declaration :: { Declaration } -Declaration : 'enum' PosIdent '=' ListEnumId { EnumDecl ((mkTokenSpan $1) >- (mkCatSpan $2) >- (mkTokenSpan $3) >- (mkCatSpan $4)) $2 $4 } - | Element { ElementDecl ((mkCatSpan $1)) $1 } +Declaration : 'enum' PosIdent '=' ListEnumId { Language.Clafer.Front.AbsClafer.EnumDecl ((mkTokenSpan $1) >- (mkCatSpan $2) >- (mkTokenSpan $3) >- (mkCatSpan $4)) $2 $4 } + | Element { Language.Clafer.Front.AbsClafer.ElementDecl ((mkCatSpan $1)) $1 } Clafer :: { Clafer } -Clafer : Abstract GCard PosIdent Super Reference Card Init Elements { Clafer ((mkCatSpan $1) >- (mkCatSpan $2) >- (mkCatSpan $3) >- (mkCatSpan $4) >- (mkCatSpan $5) >- (mkCatSpan $6) >- (mkCatSpan $7) >- (mkCatSpan $8)) $1 $2 $3 $4 $5 $6 $7 $8 } +Clafer : Abstract GCard PosIdent Super Reference Card Init Elements { Language.Clafer.Front.AbsClafer.Clafer ((mkCatSpan $1) >- (mkCatSpan $2) >- (mkCatSpan $3) >- (mkCatSpan $4) >- (mkCatSpan $5) >- (mkCatSpan $6) >- (mkCatSpan $7) >- (mkCatSpan $8)) $1 $2 $3 $4 $5 $6 $7 $8 } Constraint :: { Constraint } -Constraint : '[' ListExp ']' { Constraint ((mkTokenSpan $1) >- (mkCatSpan $2) >- (mkTokenSpan $3)) (reverse $2) } +Constraint : '[' ListExp ']' { Language.Clafer.Front.AbsClafer.Constraint ((mkTokenSpan $1) >- (mkCatSpan $2) >- (mkTokenSpan $3)) (reverse $2) } Assertion :: { Assertion } -Assertion : 'assert' '[' ListExp ']' { Assertion ((mkTokenSpan $1) >- (mkTokenSpan $2) >- (mkCatSpan $3) >- (mkTokenSpan $4)) (reverse $3) } +Assertion : 'assert' '[' ListExp ']' { Language.Clafer.Front.AbsClafer.Assertion ((mkTokenSpan $1) >- (mkTokenSpan $2) >- (mkCatSpan $3) >- (mkTokenSpan $4)) (reverse $3) } Goal :: { Goal } -Goal : '<<' ListExp '>>' { Goal ((mkTokenSpan $1) >- (mkCatSpan $2) >- (mkTokenSpan $3)) (reverse $2) } +Goal : '<<' ListExp '>>' { Language.Clafer.Front.AbsClafer.Goal ((mkTokenSpan $1) >- (mkCatSpan $2) >- (mkTokenSpan $3)) (reverse $2) } Abstract :: { Abstract } -Abstract : {- empty -} { AbstractEmpty noSpan } - | 'abstract' { Abstract ((mkTokenSpan $1)) } +Abstract : {- empty -} { Language.Clafer.Front.AbsClafer.AbstractEmpty noSpan } + | 'abstract' { Language.Clafer.Front.AbsClafer.Abstract ((mkTokenSpan $1)) } Elements :: { Elements } -Elements : {- empty -} { ElementsEmpty noSpan } - | '{' ListElement '}' { ElementsList ((mkTokenSpan $1) >- (mkCatSpan $2) >- (mkTokenSpan $3)) (reverse $2) } +Elements : {- empty -} { Language.Clafer.Front.AbsClafer.ElementsEmpty noSpan } + | '{' ListElement '}' { Language.Clafer.Front.AbsClafer.ElementsList ((mkTokenSpan $1) >- (mkCatSpan $2) >- (mkTokenSpan $3)) (reverse $2) } Element :: { Element } -Element : Clafer { Subclafer ((mkCatSpan $1)) $1 } - | '`' Name Card Elements { ClaferUse ((mkTokenSpan $1) >- (mkCatSpan $2) >- (mkCatSpan $3) >- (mkCatSpan $4)) $2 $3 $4 } - | Constraint { Subconstraint ((mkCatSpan $1)) $1 } - | Goal { Subgoal ((mkCatSpan $1)) $1 } - | Assertion { SubAssertion ((mkCatSpan $1)) $1 } +Element : Clafer { Language.Clafer.Front.AbsClafer.Subclafer ((mkCatSpan $1)) $1 } + | '`' Name Card Elements { Language.Clafer.Front.AbsClafer.ClaferUse ((mkTokenSpan $1) >- (mkCatSpan $2) >- (mkCatSpan $3) >- (mkCatSpan $4)) $2 $3 $4 } + | Constraint { Language.Clafer.Front.AbsClafer.Subconstraint ((mkCatSpan $1)) $1 } + | Goal { Language.Clafer.Front.AbsClafer.Subgoal ((mkCatSpan $1)) $1 } + | Assertion { Language.Clafer.Front.AbsClafer.SubAssertion ((mkCatSpan $1)) $1 } Super :: { Super } -Super : {- empty -} { SuperEmpty noSpan } - | ':' Exp18 { SuperSome ((mkTokenSpan $1) >- (mkCatSpan $2)) $2 } +Super : {- empty -} { Language.Clafer.Front.AbsClafer.SuperEmpty noSpan } + | ':' Exp18 { Language.Clafer.Front.AbsClafer.SuperSome ((mkTokenSpan $1) >- (mkCatSpan $2)) $2 } Reference :: { Reference } -Reference : {- empty -} { ReferenceEmpty noSpan } - | '->' Exp15 { ReferenceSet ((mkTokenSpan $1) >- (mkCatSpan $2)) $2 } - | '->>' Exp15 { ReferenceBag ((mkTokenSpan $1) >- (mkCatSpan $2)) $2 } +Reference : {- empty -} { Language.Clafer.Front.AbsClafer.ReferenceEmpty noSpan } + | '->' Exp15 { Language.Clafer.Front.AbsClafer.ReferenceSet ((mkTokenSpan $1) >- (mkCatSpan $2)) $2 } + | '->>' Exp15 { Language.Clafer.Front.AbsClafer.ReferenceBag ((mkTokenSpan $1) >- (mkCatSpan $2)) $2 } Init :: { Init } -Init : {- empty -} { InitEmpty noSpan } - | InitHow Exp { InitSome ((mkCatSpan $1) >- (mkCatSpan $2)) $1 $2 } +Init : {- empty -} { Language.Clafer.Front.AbsClafer.InitEmpty noSpan } + | InitHow Exp { Language.Clafer.Front.AbsClafer.InitSome ((mkCatSpan $1) >- (mkCatSpan $2)) $1 $2 } InitHow :: { InitHow } -InitHow : '=' { InitConstant ((mkTokenSpan $1)) } - | ':=' { InitDefault ((mkTokenSpan $1)) } +InitHow : '=' { Language.Clafer.Front.AbsClafer.InitConstant ((mkTokenSpan $1)) } + | ':=' { Language.Clafer.Front.AbsClafer.InitDefault ((mkTokenSpan $1)) } GCard :: { GCard } -GCard : {- empty -} { GCardEmpty noSpan } - | 'xor' { GCardXor ((mkTokenSpan $1)) } - | 'or' { GCardOr ((mkTokenSpan $1)) } - | 'mux' { GCardMux ((mkTokenSpan $1)) } - | 'opt' { GCardOpt ((mkTokenSpan $1)) } - | NCard { GCardInterval ((mkCatSpan $1)) $1 } +GCard : {- empty -} { Language.Clafer.Front.AbsClafer.GCardEmpty noSpan } + | 'xor' { Language.Clafer.Front.AbsClafer.GCardXor ((mkTokenSpan $1)) } + | 'or' { Language.Clafer.Front.AbsClafer.GCardOr ((mkTokenSpan $1)) } + | 'mux' { Language.Clafer.Front.AbsClafer.GCardMux ((mkTokenSpan $1)) } + | 'opt' { Language.Clafer.Front.AbsClafer.GCardOpt ((mkTokenSpan $1)) } + | NCard { Language.Clafer.Front.AbsClafer.GCardInterval ((mkCatSpan $1)) $1 } Card :: { Card } -Card : {- empty -} { CardEmpty noSpan } - | '?' { CardLone ((mkTokenSpan $1)) } - | '+' { CardSome ((mkTokenSpan $1)) } - | '*' { CardAny ((mkTokenSpan $1)) } - | PosInteger { CardNum ((mkCatSpan $1)) $1 } - | NCard { CardInterval ((mkCatSpan $1)) $1 } +Card : {- empty -} { Language.Clafer.Front.AbsClafer.CardEmpty noSpan } + | '?' { Language.Clafer.Front.AbsClafer.CardLone ((mkTokenSpan $1)) } + | '+' { Language.Clafer.Front.AbsClafer.CardSome ((mkTokenSpan $1)) } + | '*' { Language.Clafer.Front.AbsClafer.CardAny ((mkTokenSpan $1)) } + | PosInteger { Language.Clafer.Front.AbsClafer.CardNum ((mkCatSpan $1)) $1 } + | NCard { Language.Clafer.Front.AbsClafer.CardInterval ((mkCatSpan $1)) $1 } NCard :: { NCard } -NCard : PosInteger '..' ExInteger { NCard ((mkCatSpan $1) >- (mkTokenSpan $2) >- (mkCatSpan $3)) $1 $3 } +NCard : PosInteger '..' ExInteger { Language.Clafer.Front.AbsClafer.NCard ((mkCatSpan $1) >- (mkTokenSpan $2) >- (mkCatSpan $3)) $1 $3 } ExInteger :: { ExInteger } -ExInteger : '*' { ExIntegerAst ((mkTokenSpan $1)) } - | PosInteger { ExIntegerNum ((mkCatSpan $1)) $1 } +ExInteger : '*' { Language.Clafer.Front.AbsClafer.ExIntegerAst ((mkTokenSpan $1)) } + | PosInteger { Language.Clafer.Front.AbsClafer.ExIntegerNum ((mkCatSpan $1)) $1 } Name :: { Name } -Name : ListModId { Path ((mkCatSpan $1)) $1 } +Name : ListModId { Language.Clafer.Front.AbsClafer.Path ((mkCatSpan $1)) $1 } Exp :: { Exp } -Exp : 'all' 'disj' Decl '|' Exp { EDeclAllDisj ((mkTokenSpan $1) >- (mkTokenSpan $2) >- (mkCatSpan $3) >- (mkTokenSpan $4) >- (mkCatSpan $5)) $3 $5 } - | 'all' Decl '|' Exp { EDeclAll ((mkTokenSpan $1) >- (mkCatSpan $2) >- (mkTokenSpan $3) >- (mkCatSpan $4)) $2 $4 } - | Quant 'disj' Decl '|' Exp { EDeclQuantDisj ((mkCatSpan $1) >- (mkTokenSpan $2) >- (mkCatSpan $3) >- (mkTokenSpan $4) >- (mkCatSpan $5)) $1 $3 $5 } - | Quant Decl '|' Exp { EDeclQuant ((mkCatSpan $1) >- (mkCatSpan $2) >- (mkTokenSpan $3) >- (mkCatSpan $4)) $1 $2 $4 } +Exp : 'all' 'disj' Decl '|' Exp { Language.Clafer.Front.AbsClafer.EDeclAllDisj ((mkTokenSpan $1) >- (mkTokenSpan $2) >- (mkCatSpan $3) >- (mkTokenSpan $4) >- (mkCatSpan $5)) $3 $5 } + | 'all' Decl '|' Exp { Language.Clafer.Front.AbsClafer.EDeclAll ((mkTokenSpan $1) >- (mkCatSpan $2) >- (mkTokenSpan $3) >- (mkCatSpan $4)) $2 $4 } + | Quant 'disj' Decl '|' Exp { Language.Clafer.Front.AbsClafer.EDeclQuantDisj ((mkCatSpan $1) >- (mkTokenSpan $2) >- (mkCatSpan $3) >- (mkTokenSpan $4) >- (mkCatSpan $5)) $1 $3 $5 } + | Quant Decl '|' Exp { Language.Clafer.Front.AbsClafer.EDeclQuant ((mkCatSpan $1) >- (mkCatSpan $2) >- (mkTokenSpan $3) >- (mkCatSpan $4)) $1 $2 $4 } | Exp1 { $1 } Exp1 :: { Exp } -Exp1 : 'max' Exp2 { EGMax ((mkTokenSpan $1) >- (mkCatSpan $2)) $2 } - | 'min' Exp2 { EGMin ((mkTokenSpan $1) >- (mkCatSpan $2)) $2 } - | Exp1 '<=>' Exp2 { EIff ((mkCatSpan $1) >- (mkTokenSpan $2) >- (mkCatSpan $3)) $1 $3 } +Exp1 : 'max' Exp2 { Language.Clafer.Front.AbsClafer.EGMax ((mkTokenSpan $1) >- (mkCatSpan $2)) $2 } + | 'min' Exp2 { Language.Clafer.Front.AbsClafer.EGMin ((mkTokenSpan $1) >- (mkCatSpan $2)) $2 } + | Exp1 '<=>' Exp2 { Language.Clafer.Front.AbsClafer.EIff ((mkCatSpan $1) >- (mkTokenSpan $2) >- (mkCatSpan $3)) $1 $3 } | Exp2 { $1 } Exp2 :: { Exp } -Exp2 : Exp2 '=>' Exp3 { EImplies ((mkCatSpan $1) >- (mkTokenSpan $2) >- (mkCatSpan $3)) $1 $3 } +Exp2 : Exp2 '=>' Exp3 { Language.Clafer.Front.AbsClafer.EImplies ((mkCatSpan $1) >- (mkTokenSpan $2) >- (mkCatSpan $3)) $1 $3 } | Exp3 { $1 } Exp3 :: { Exp } -Exp3 : Exp3 '||' Exp4 { EOr ((mkCatSpan $1) >- (mkTokenSpan $2) >- (mkCatSpan $3)) $1 $3 } +Exp3 : Exp3 '||' Exp4 { Language.Clafer.Front.AbsClafer.EOr ((mkCatSpan $1) >- (mkTokenSpan $2) >- (mkCatSpan $3)) $1 $3 } | Exp4 { $1 } Exp4 :: { Exp } -Exp4 : Exp4 'xor' Exp5 { EXor ((mkCatSpan $1) >- (mkTokenSpan $2) >- (mkCatSpan $3)) $1 $3 } +Exp4 : Exp4 'xor' Exp5 { Language.Clafer.Front.AbsClafer.EXor ((mkCatSpan $1) >- (mkTokenSpan $2) >- (mkCatSpan $3)) $1 $3 } | Exp5 { $1 } Exp5 :: { Exp } -Exp5 : Exp5 '&&' Exp6 { EAnd ((mkCatSpan $1) >- (mkTokenSpan $2) >- (mkCatSpan $3)) $1 $3 } +Exp5 : Exp5 '&&' Exp6 { Language.Clafer.Front.AbsClafer.EAnd ((mkCatSpan $1) >- (mkTokenSpan $2) >- (mkCatSpan $3)) $1 $3 } | Exp6 { $1 } Exp6 :: { Exp } -Exp6 : '!' Exp7 { ENeg ((mkTokenSpan $1) >- (mkCatSpan $2)) $2 } +Exp6 : '!' Exp7 { Language.Clafer.Front.AbsClafer.ENeg ((mkTokenSpan $1) >- (mkCatSpan $2)) $2 } | Exp7 { $1 } Exp7 :: { Exp } -Exp7 : Exp7 '<' Exp8 { ELt ((mkCatSpan $1) >- (mkTokenSpan $2) >- (mkCatSpan $3)) $1 $3 } - | Exp7 '>' Exp8 { EGt ((mkCatSpan $1) >- (mkTokenSpan $2) >- (mkCatSpan $3)) $1 $3 } - | Exp7 '=' Exp8 { EEq ((mkCatSpan $1) >- (mkTokenSpan $2) >- (mkCatSpan $3)) $1 $3 } - | Exp7 '<=' Exp8 { ELte ((mkCatSpan $1) >- (mkTokenSpan $2) >- (mkCatSpan $3)) $1 $3 } - | Exp7 '>=' Exp8 { EGte ((mkCatSpan $1) >- (mkTokenSpan $2) >- (mkCatSpan $3)) $1 $3 } - | Exp7 '!=' Exp8 { ENeq ((mkCatSpan $1) >- (mkTokenSpan $2) >- (mkCatSpan $3)) $1 $3 } - | Exp7 'in' Exp8 { EIn ((mkCatSpan $1) >- (mkTokenSpan $2) >- (mkCatSpan $3)) $1 $3 } - | Exp7 'not' 'in' Exp8 { ENin ((mkCatSpan $1) >- (mkTokenSpan $2) >- (mkTokenSpan $3) >- (mkCatSpan $4)) $1 $4 } +Exp7 : Exp7 '<' Exp8 { Language.Clafer.Front.AbsClafer.ELt ((mkCatSpan $1) >- (mkTokenSpan $2) >- (mkCatSpan $3)) $1 $3 } + | Exp7 '>' Exp8 { Language.Clafer.Front.AbsClafer.EGt ((mkCatSpan $1) >- (mkTokenSpan $2) >- (mkCatSpan $3)) $1 $3 } + | Exp7 '=' Exp8 { Language.Clafer.Front.AbsClafer.EEq ((mkCatSpan $1) >- (mkTokenSpan $2) >- (mkCatSpan $3)) $1 $3 } + | Exp7 '<=' Exp8 { Language.Clafer.Front.AbsClafer.ELte ((mkCatSpan $1) >- (mkTokenSpan $2) >- (mkCatSpan $3)) $1 $3 } + | Exp7 '>=' Exp8 { Language.Clafer.Front.AbsClafer.EGte ((mkCatSpan $1) >- (mkTokenSpan $2) >- (mkCatSpan $3)) $1 $3 } + | Exp7 '!=' Exp8 { Language.Clafer.Front.AbsClafer.ENeq ((mkCatSpan $1) >- (mkTokenSpan $2) >- (mkCatSpan $3)) $1 $3 } + | Exp7 'in' Exp8 { Language.Clafer.Front.AbsClafer.EIn ((mkCatSpan $1) >- (mkTokenSpan $2) >- (mkCatSpan $3)) $1 $3 } + | Exp7 'not' 'in' Exp8 { Language.Clafer.Front.AbsClafer.ENin ((mkCatSpan $1) >- (mkTokenSpan $2) >- (mkTokenSpan $3) >- (mkCatSpan $4)) $1 $4 } | Exp8 { $1 } Exp8 :: { Exp } -Exp8 : Quant Exp12 { EQuantExp ((mkCatSpan $1) >- (mkCatSpan $2)) $1 $2 } +Exp8 : Quant Exp12 { Language.Clafer.Front.AbsClafer.EQuantExp ((mkCatSpan $1) >- (mkCatSpan $2)) $1 $2 } | Exp9 { $1 } Exp9 :: { Exp } -Exp9 : Exp9 '+' Exp10 { EAdd ((mkCatSpan $1) >- (mkTokenSpan $2) >- (mkCatSpan $3)) $1 $3 } - | Exp9 '-' Exp10 { ESub ((mkCatSpan $1) >- (mkTokenSpan $2) >- (mkCatSpan $3)) $1 $3 } +Exp9 : Exp9 '+' Exp10 { Language.Clafer.Front.AbsClafer.EAdd ((mkCatSpan $1) >- (mkTokenSpan $2) >- (mkCatSpan $3)) $1 $3 } + | Exp9 '-' Exp10 { Language.Clafer.Front.AbsClafer.ESub ((mkCatSpan $1) >- (mkTokenSpan $2) >- (mkCatSpan $3)) $1 $3 } | Exp10 { $1 } Exp10 :: { Exp } -Exp10 : Exp10 '*' Exp11 { EMul ((mkCatSpan $1) >- (mkTokenSpan $2) >- (mkCatSpan $3)) $1 $3 } - | Exp10 '/' Exp11 { EDiv ((mkCatSpan $1) >- (mkTokenSpan $2) >- (mkCatSpan $3)) $1 $3 } - | Exp10 '%' Exp11 { ERem ((mkCatSpan $1) >- (mkTokenSpan $2) >- (mkCatSpan $3)) $1 $3 } +Exp10 : Exp10 '*' Exp11 { Language.Clafer.Front.AbsClafer.EMul ((mkCatSpan $1) >- (mkTokenSpan $2) >- (mkCatSpan $3)) $1 $3 } + | Exp10 '/' Exp11 { Language.Clafer.Front.AbsClafer.EDiv ((mkCatSpan $1) >- (mkTokenSpan $2) >- (mkCatSpan $3)) $1 $3 } + | Exp10 '%' Exp11 { Language.Clafer.Front.AbsClafer.ERem ((mkCatSpan $1) >- (mkTokenSpan $2) >- (mkCatSpan $3)) $1 $3 } | Exp11 { $1 } Exp11 :: { Exp } -Exp11 : 'sum' Exp12 { ESum ((mkTokenSpan $1) >- (mkCatSpan $2)) $2 } - | 'product' Exp12 { EProd ((mkTokenSpan $1) >- (mkCatSpan $2)) $2 } - | '#' Exp12 { ECard ((mkTokenSpan $1) >- (mkCatSpan $2)) $2 } - | '-' Exp12 { EMinExp ((mkTokenSpan $1) >- (mkCatSpan $2)) $2 } +Exp11 : 'sum' Exp12 { Language.Clafer.Front.AbsClafer.ESum ((mkTokenSpan $1) >- (mkCatSpan $2)) $2 } + | 'product' Exp12 { Language.Clafer.Front.AbsClafer.EProd ((mkTokenSpan $1) >- (mkCatSpan $2)) $2 } + | '#' Exp12 { Language.Clafer.Front.AbsClafer.ECard ((mkTokenSpan $1) >- (mkCatSpan $2)) $2 } + | '-' Exp12 { Language.Clafer.Front.AbsClafer.EMinExp ((mkTokenSpan $1) >- (mkCatSpan $2)) $2 } | Exp12 { $1 } Exp12 :: { Exp } -Exp12 : 'if' Exp12 'then' Exp12 'else' Exp13 { EImpliesElse ((mkTokenSpan $1) >- (mkCatSpan $2) >- (mkTokenSpan $3) >- (mkCatSpan $4) >- (mkTokenSpan $5) >- (mkCatSpan $6)) $2 $4 $6 } +Exp12 : 'if' Exp12 'then' Exp12 'else' Exp13 { Language.Clafer.Front.AbsClafer.EImpliesElse ((mkTokenSpan $1) >- (mkCatSpan $2) >- (mkTokenSpan $3) >- (mkCatSpan $4) >- (mkTokenSpan $5) >- (mkCatSpan $6)) $2 $4 $6 } | Exp13 { $1 } Exp13 :: { Exp } -Exp13 : Exp13 '<:' Exp14 { EDomain ((mkCatSpan $1) >- (mkTokenSpan $2) >- (mkCatSpan $3)) $1 $3 } +Exp13 : Exp13 '<:' Exp14 { Language.Clafer.Front.AbsClafer.EDomain ((mkCatSpan $1) >- (mkTokenSpan $2) >- (mkCatSpan $3)) $1 $3 } | Exp14 { $1 } Exp14 :: { Exp } -Exp14 : Exp14 ':>' Exp15 { ERange ((mkCatSpan $1) >- (mkTokenSpan $2) >- (mkCatSpan $3)) $1 $3 } +Exp14 : Exp14 ':>' Exp15 { Language.Clafer.Front.AbsClafer.ERange ((mkCatSpan $1) >- (mkTokenSpan $2) >- (mkCatSpan $3)) $1 $3 } | Exp15 { $1 } Exp15 :: { Exp } -Exp15 : Exp15 '++' Exp16 { EUnion ((mkCatSpan $1) >- (mkTokenSpan $2) >- (mkCatSpan $3)) $1 $3 } - | Exp15 ',' Exp16 { EUnionCom ((mkCatSpan $1) >- (mkTokenSpan $2) >- (mkCatSpan $3)) $1 $3 } +Exp15 : Exp15 '++' Exp16 { Language.Clafer.Front.AbsClafer.EUnion ((mkCatSpan $1) >- (mkTokenSpan $2) >- (mkCatSpan $3)) $1 $3 } + | Exp15 ',' Exp16 { Language.Clafer.Front.AbsClafer.EUnionCom ((mkCatSpan $1) >- (mkTokenSpan $2) >- (mkCatSpan $3)) $1 $3 } | Exp16 { $1 } Exp16 :: { Exp } -Exp16 : Exp16 '--' Exp17 { EDifference ((mkCatSpan $1) >- (mkTokenSpan $2) >- (mkCatSpan $3)) $1 $3 } +Exp16 : Exp16 '--' Exp17 { Language.Clafer.Front.AbsClafer.EDifference ((mkCatSpan $1) >- (mkTokenSpan $2) >- (mkCatSpan $3)) $1 $3 } | Exp17 { $1 } Exp17 :: { Exp } -Exp17 : Exp17 '**' Exp18 { EIntersection ((mkCatSpan $1) >- (mkTokenSpan $2) >- (mkCatSpan $3)) $1 $3 } +Exp17 : Exp17 '**' Exp18 { Language.Clafer.Front.AbsClafer.EIntersection ((mkCatSpan $1) >- (mkTokenSpan $2) >- (mkCatSpan $3)) $1 $3 } + | Exp17 '&' Exp18 { Language.Clafer.Front.AbsClafer.EIntersectionDeprecated ((mkCatSpan $1) >- (mkTokenSpan $2) >- (mkCatSpan $3)) $1 $3 } | Exp18 { $1 } Exp18 :: { Exp } -Exp18 : Exp18 '.' Exp19 { EJoin ((mkCatSpan $1) >- (mkTokenSpan $2) >- (mkCatSpan $3)) $1 $3 } +Exp18 : Exp18 '.' Exp19 { Language.Clafer.Front.AbsClafer.EJoin ((mkCatSpan $1) >- (mkTokenSpan $2) >- (mkCatSpan $3)) $1 $3 } | Exp19 { $1 } Exp19 :: { Exp } -Exp19 : Name { ClaferId ((mkCatSpan $1)) $1 } - | PosInteger { EInt ((mkCatSpan $1)) $1 } - | PosDouble { EDouble ((mkCatSpan $1)) $1 } - | PosReal { EReal ((mkCatSpan $1)) $1 } - | PosString { EStr ((mkCatSpan $1)) $1 } +Exp19 : Name { Language.Clafer.Front.AbsClafer.ClaferId ((mkCatSpan $1)) $1 } + | PosInteger { Language.Clafer.Front.AbsClafer.EInt ((mkCatSpan $1)) $1 } + | PosDouble { Language.Clafer.Front.AbsClafer.EDouble ((mkCatSpan $1)) $1 } + | PosReal { Language.Clafer.Front.AbsClafer.EReal ((mkCatSpan $1)) $1 } + | PosString { Language.Clafer.Front.AbsClafer.EStr ((mkCatSpan $1)) $1 } | '(' Exp ')' { $2 } Decl :: { Decl } -Decl : ListLocId ':' Exp13 { Decl ((mkCatSpan $1) >- (mkTokenSpan $2) >- (mkCatSpan $3)) $1 $3 } +Decl : ListLocId ':' Exp15 { Language.Clafer.Front.AbsClafer.Decl ((mkCatSpan $1) >- (mkTokenSpan $2) >- (mkCatSpan $3)) $1 $3 } Quant :: { Quant } -Quant : 'no' { QuantNo ((mkTokenSpan $1)) } - | 'not' { QuantNot ((mkTokenSpan $1)) } - | 'lone' { QuantLone ((mkTokenSpan $1)) } - | 'one' { QuantOne ((mkTokenSpan $1)) } - | 'some' { QuantSome ((mkTokenSpan $1)) } +Quant : 'no' { Language.Clafer.Front.AbsClafer.QuantNo ((mkTokenSpan $1)) } + | 'not' { Language.Clafer.Front.AbsClafer.QuantNot ((mkTokenSpan $1)) } + | 'lone' { Language.Clafer.Front.AbsClafer.QuantLone ((mkTokenSpan $1)) } + | 'one' { Language.Clafer.Front.AbsClafer.QuantOne ((mkTokenSpan $1)) } + | 'some' { Language.Clafer.Front.AbsClafer.QuantSome ((mkTokenSpan $1)) } EnumId :: { EnumId } -EnumId : PosIdent { EnumIdIdent ((mkCatSpan $1)) $1 } +EnumId : PosIdent { Language.Clafer.Front.AbsClafer.EnumIdIdent ((mkCatSpan $1)) $1 } ModId :: { ModId } -ModId : PosIdent { ModIdIdent ((mkCatSpan $1)) $1 } +ModId : PosIdent { Language.Clafer.Front.AbsClafer.ModIdIdent ((mkCatSpan $1)) $1 } LocId :: { LocId } -LocId : PosIdent { LocIdIdent ((mkCatSpan $1)) $1 } +LocId : PosIdent { Language.Clafer.Front.AbsClafer.LocIdIdent ((mkCatSpan $1)) $1 } ListDeclaration :: { [Declaration] } ListDeclaration : {- empty -} { [] } | ListDeclaration Declaration { flip (:) $1 $2 }
src/Language/Clafer/Front/PrintClafer.hs view
@@ -48,15 +48,15 @@ -- the printer class does the job class Print a where prt :: Int -> a -> Doc - prtList :: [a] -> Doc - prtList = concatD . map (prt 0) + prtList :: Int -> [a] -> Doc + prtList i = concatD . map (prt i) instance Print a => Print [a] where - prt _ = prtList + prt = prtList instance Print Char where prt _ s = doc (showChar '\'' . mkEsc '\'' s . showChar '\'') - prtList s = doc (showChar '"' . concatS (map (mkEsc '"') s) . showChar '"') + prtList _ s = doc (showChar '"' . concatS (map (mkEsc '"') s) . showChar '"') mkEsc :: Char -> Char -> ShowS mkEsc q s = case s of @@ -99,7 +99,23 @@ prt _ (PosIdent (_,i)) = doc (showString ( i)) +instance Print PosLineComment where + prt _ (PosLineComment (_,i)) = doc (showString ( i)) + +instance Print PosBlockComment where + prt _ (PosBlockComment (_,i)) = doc (showString ( i)) + + +instance Print PosAlloy where + prt _ (PosAlloy (_,i)) = doc (showString ( i)) + + +instance Print PosChoco where + prt _ (PosChoco (_,i)) = doc (showString ( i)) + + + instance Print Module where prt i e = case e of Module _ declarations -> prPrec i 0 (concatD [prt 0 declarations]) @@ -108,10 +124,8 @@ prt i e = case e of EnumDecl _ posident enumids -> prPrec i 0 (concatD [doc (showString "enum"), prt 0 posident, doc (showString "="), prt 0 enumids]) ElementDecl _ element -> prPrec i 0 (concatD [prt 0 element]) - prtList es = case es of - [] -> (concatD []) - x:xs -> (concatD [prt 0 x, prt 0 xs]) - + prtList _ [] = (concatD []) + prtList _ (x:xs) = (concatD [prt 0 x, prt 0 xs]) instance Print Clafer where prt i e = case e of Clafer _ abstract gcard posident super reference card init elements -> prPrec i 0 (concatD [prt 0 abstract, prt 0 gcard, prt 0 posident, prt 0 super, prt 0 reference, prt 0 card, prt 0 init, prt 0 elements]) @@ -145,20 +159,18 @@ Subconstraint _ constraint -> prPrec i 0 (concatD [prt 0 constraint]) Subgoal _ goal -> prPrec i 0 (concatD [prt 0 goal]) SubAssertion _ assertion -> prPrec i 0 (concatD [prt 0 assertion]) - prtList es = case es of - [] -> (concatD []) - x:xs -> (concatD [prt 0 x, prt 0 xs]) - + prtList _ [] = (concatD []) + prtList _ (x:xs) = (concatD [prt 0 x, prt 0 xs]) instance Print Super where prt i e = case e of SuperEmpty _ -> prPrec i 0 (concatD []) - SuperSome _ exp18 -> prPrec i 0 (concatD [doc (showString ":"), prt 18 exp18]) + SuperSome _ exp -> prPrec i 0 (concatD [doc (showString ":"), prt 18 exp]) instance Print Reference where prt i e = case e of ReferenceEmpty _ -> prPrec i 0 (concatD []) - ReferenceSet _ exp15 -> prPrec i 0 (concatD [doc (showString "->"), prt 15 exp15]) - ReferenceBag _ exp15 -> prPrec i 0 (concatD [doc (showString "->>"), prt 15 exp15]) + ReferenceSet _ exp -> prPrec i 0 (concatD [doc (showString "->"), prt 15 exp]) + ReferenceBag _ exp -> prPrec i 0 (concatD [doc (showString "->>"), prt 15 exp]) instance Print Init where prt i e = case e of @@ -207,52 +219,51 @@ EDeclAll _ decl exp -> prPrec i 0 (concatD [doc (showString "all"), prt 0 decl, doc (showString "|"), prt 0 exp]) EDeclQuantDisj _ quant decl exp -> prPrec i 0 (concatD [prt 0 quant, doc (showString "disj"), prt 0 decl, doc (showString "|"), prt 0 exp]) EDeclQuant _ quant decl exp -> prPrec i 0 (concatD [prt 0 quant, prt 0 decl, doc (showString "|"), prt 0 exp]) - EGMax _ exp2 -> prPrec i 1 (concatD [doc (showString "max"), prt 2 exp2]) - EGMin _ exp2 -> prPrec i 1 (concatD [doc (showString "min"), prt 2 exp2]) + EGMax _ exp -> prPrec i 1 (concatD [doc (showString "max"), prt 2 exp]) + EGMin _ exp -> prPrec i 1 (concatD [doc (showString "min"), prt 2 exp]) EIff _ exp1 exp2 -> prPrec i 1 (concatD [prt 1 exp1, doc (showString "<=>"), prt 2 exp2]) - EImplies _ exp2 exp3 -> prPrec i 2 (concatD [prt 2 exp2, doc (showString "=>"), prt 3 exp3]) - EOr _ exp3 exp4 -> prPrec i 3 (concatD [prt 3 exp3, doc (showString "||"), prt 4 exp4]) - EXor _ exp4 exp5 -> prPrec i 4 (concatD [prt 4 exp4, doc (showString "xor"), prt 5 exp5]) - EAnd _ exp5 exp6 -> prPrec i 5 (concatD [prt 5 exp5, doc (showString "&&"), prt 6 exp6]) - ENeg _ exp7 -> prPrec i 6 (concatD [doc (showString "!"), prt 7 exp7]) - ELt _ exp7 exp8 -> prPrec i 7 (concatD [prt 7 exp7, doc (showString "<"), prt 8 exp8]) - EGt _ exp7 exp8 -> prPrec i 7 (concatD [prt 7 exp7, doc (showString ">"), prt 8 exp8]) - EEq _ exp7 exp8 -> prPrec i 7 (concatD [prt 7 exp7, doc (showString "="), prt 8 exp8]) - ELte _ exp7 exp8 -> prPrec i 7 (concatD [prt 7 exp7, doc (showString "<="), prt 8 exp8]) - EGte _ exp7 exp8 -> prPrec i 7 (concatD [prt 7 exp7, doc (showString ">="), prt 8 exp8]) - ENeq _ exp7 exp8 -> prPrec i 7 (concatD [prt 7 exp7, doc (showString "!="), prt 8 exp8]) - EIn _ exp7 exp8 -> prPrec i 7 (concatD [prt 7 exp7, doc (showString "in"), prt 8 exp8]) - ENin _ exp7 exp8 -> prPrec i 7 (concatD [prt 7 exp7, doc (showString "not"), doc (showString "in"), prt 8 exp8]) - EQuantExp _ quant exp12 -> prPrec i 8 (concatD [prt 0 quant, prt 12 exp12]) - EAdd _ exp9 exp10 -> prPrec i 9 (concatD [prt 9 exp9, doc (showString "+"), prt 10 exp10]) - ESub _ exp9 exp10 -> prPrec i 9 (concatD [prt 9 exp9, doc (showString "-"), prt 10 exp10]) - EMul _ exp10 exp11 -> prPrec i 10 (concatD [prt 10 exp10, doc (showString "*"), prt 11 exp11]) - EDiv _ exp10 exp11 -> prPrec i 10 (concatD [prt 10 exp10, doc (showString "/"), prt 11 exp11]) - ERem _ exp10 exp11 -> prPrec i 10 (concatD [prt 10 exp10, doc (showString "%"), prt 11 exp11]) - ESum _ exp12 -> prPrec i 11 (concatD [doc (showString "sum"), prt 12 exp12]) - EProd _ exp12 -> prPrec i 11 (concatD [doc (showString "product"), prt 12 exp12]) - ECard _ exp12 -> prPrec i 11 (concatD [doc (showString "#"), prt 12 exp12]) - EMinExp _ exp12 -> prPrec i 11 (concatD [doc (showString "-"), prt 12 exp12]) - EImpliesElse _ exp120 exp12 exp13 -> prPrec i 12 (concatD [doc (showString "if"), prt 12 exp120, doc (showString "then"), prt 12 exp12, doc (showString "else"), prt 13 exp13]) - EDomain _ exp13 exp14 -> prPrec i 13 (concatD [prt 13 exp13, doc (showString "<:"), prt 14 exp14]) - ERange _ exp14 exp15 -> prPrec i 14 (concatD [prt 14 exp14, doc (showString ":>"), prt 15 exp15]) - EUnion _ exp15 exp16 -> prPrec i 15 (concatD [prt 15 exp15, doc (showString "++"), prt 16 exp16]) - EUnionCom _ exp15 exp16 -> prPrec i 15 (concatD [prt 15 exp15, doc (showString ","), prt 16 exp16]) - EDifference _ exp16 exp17 -> prPrec i 16 (concatD [prt 16 exp16, doc (showString "--"), prt 17 exp17]) - EIntersection _ exp17 exp18 -> prPrec i 17 (concatD [prt 17 exp17, doc (showString "**"), prt 18 exp18]) - EJoin _ exp18 exp19 -> prPrec i 18 (concatD [prt 18 exp18, doc (showString "."), prt 19 exp19]) + EImplies _ exp1 exp2 -> prPrec i 2 (concatD [prt 2 exp1, doc (showString "=>"), prt 3 exp2]) + EOr _ exp1 exp2 -> prPrec i 3 (concatD [prt 3 exp1, doc (showString "||"), prt 4 exp2]) + EXor _ exp1 exp2 -> prPrec i 4 (concatD [prt 4 exp1, doc (showString "xor"), prt 5 exp2]) + EAnd _ exp1 exp2 -> prPrec i 5 (concatD [prt 5 exp1, doc (showString "&&"), prt 6 exp2]) + ENeg _ exp -> prPrec i 6 (concatD [doc (showString "!"), prt 7 exp]) + ELt _ exp1 exp2 -> prPrec i 7 (concatD [prt 7 exp1, doc (showString "<"), prt 8 exp2]) + EGt _ exp1 exp2 -> prPrec i 7 (concatD [prt 7 exp1, doc (showString ">"), prt 8 exp2]) + EEq _ exp1 exp2 -> prPrec i 7 (concatD [prt 7 exp1, doc (showString "="), prt 8 exp2]) + ELte _ exp1 exp2 -> prPrec i 7 (concatD [prt 7 exp1, doc (showString "<="), prt 8 exp2]) + EGte _ exp1 exp2 -> prPrec i 7 (concatD [prt 7 exp1, doc (showString ">="), prt 8 exp2]) + ENeq _ exp1 exp2 -> prPrec i 7 (concatD [prt 7 exp1, doc (showString "!="), prt 8 exp2]) + EIn _ exp1 exp2 -> prPrec i 7 (concatD [prt 7 exp1, doc (showString "in"), prt 8 exp2]) + ENin _ exp1 exp2 -> prPrec i 7 (concatD [prt 7 exp1, doc (showString "not"), doc (showString "in"), prt 8 exp2]) + EQuantExp _ quant exp -> prPrec i 8 (concatD [prt 0 quant, prt 12 exp]) + EAdd _ exp1 exp2 -> prPrec i 9 (concatD [prt 9 exp1, doc (showString "+"), prt 10 exp2]) + ESub _ exp1 exp2 -> prPrec i 9 (concatD [prt 9 exp1, doc (showString "-"), prt 10 exp2]) + EMul _ exp1 exp2 -> prPrec i 10 (concatD [prt 10 exp1, doc (showString "*"), prt 11 exp2]) + EDiv _ exp1 exp2 -> prPrec i 10 (concatD [prt 10 exp1, doc (showString "/"), prt 11 exp2]) + ERem _ exp1 exp2 -> prPrec i 10 (concatD [prt 10 exp1, doc (showString "%"), prt 11 exp2]) + ESum _ exp -> prPrec i 11 (concatD [doc (showString "sum"), prt 12 exp]) + EProd _ exp -> prPrec i 11 (concatD [doc (showString "product"), prt 12 exp]) + ECard _ exp -> prPrec i 11 (concatD [doc (showString "#"), prt 12 exp]) + EMinExp _ exp -> prPrec i 11 (concatD [doc (showString "-"), prt 12 exp]) + EImpliesElse _ exp1 exp2 exp3 -> prPrec i 12 (concatD [doc (showString "if"), prt 12 exp1, doc (showString "then"), prt 12 exp2, doc (showString "else"), prt 13 exp3]) + EDomain _ exp1 exp2 -> prPrec i 13 (concatD [prt 13 exp1, doc (showString "<:"), prt 14 exp2]) + ERange _ exp1 exp2 -> prPrec i 14 (concatD [prt 14 exp1, doc (showString ":>"), prt 15 exp2]) + EUnion _ exp1 exp2 -> prPrec i 15 (concatD [prt 15 exp1, doc (showString "++"), prt 16 exp2]) + EUnionCom _ exp1 exp2 -> prPrec i 15 (concatD [prt 15 exp1, doc (showString ","), prt 16 exp2]) + EDifference _ exp1 exp2 -> prPrec i 16 (concatD [prt 16 exp1, doc (showString "--"), prt 17 exp2]) + EIntersection _ exp1 exp2 -> prPrec i 17 (concatD [prt 17 exp1, doc (showString "**"), prt 18 exp2]) + EIntersectionDeprecated _ exp1 exp2 -> prPrec i 17 (concatD [prt 17 exp1, doc (showString "&"), prt 18 exp2]) + EJoin _ exp1 exp2 -> prPrec i 18 (concatD [prt 18 exp1, doc (showString "."), prt 19 exp2]) ClaferId _ name -> prPrec i 19 (concatD [prt 0 name]) EInt _ posinteger -> prPrec i 19 (concatD [prt 0 posinteger]) EDouble _ posdouble -> prPrec i 19 (concatD [prt 0 posdouble]) EReal _ posreal -> prPrec i 19 (concatD [prt 0 posreal]) EStr _ posstring -> prPrec i 19 (concatD [prt 0 posstring]) - prtList es = case es of - [] -> (concatD []) - x:xs -> (concatD [prt 0 x, prt 0 xs]) - + prtList _ [] = (concatD []) + prtList _ (x:xs) = (concatD [prt 0 x, prt 0 xs]) instance Print Decl where prt i e = case e of - Decl _ locids exp13 -> prPrec i 0 (concatD [prt 0 locids, doc (showString ":"), prt 13 exp13]) + Decl _ locids exp -> prPrec i 0 (concatD [prt 0 locids, doc (showString ":"), prt 15 exp]) instance Print Quant where prt i e = case e of @@ -265,20 +276,15 @@ instance Print EnumId where prt i e = case e of EnumIdIdent _ posident -> prPrec i 0 (concatD [prt 0 posident]) - prtList es = case es of - [x] -> (concatD [prt 0 x]) - x:xs -> (concatD [prt 0 x, doc (showString "|"), prt 0 xs]) - + prtList _ [x] = (concatD [prt 0 x]) + prtList _ (x:xs) = (concatD [prt 0 x, doc (showString "|"), prt 0 xs]) instance Print ModId where prt i e = case e of ModIdIdent _ posident -> prPrec i 0 (concatD [prt 0 posident]) - prtList es = case es of - [x] -> (concatD [prt 0 x]) - x:xs -> (concatD [prt 0 x, doc (showString "\\"), prt 0 xs]) - + prtList _ [x] = (concatD [prt 0 x]) + prtList _ (x:xs) = (concatD [prt 0 x, doc (showString "\\"), prt 0 xs]) instance Print LocId where prt i e = case e of LocIdIdent _ posident -> prPrec i 0 (concatD [prt 0 posident]) - prtList es = case es of - [x] -> (concatD [prt 0 x]) - x:xs -> (concatD [prt 0 x, doc (showString ";"), prt 0 xs]) + prtList _ [x] = (concatD [prt 0 x]) + prtList _ (x:xs) = (concatD [prt 0 x, doc (showString ";"), prt 0 xs])
src/Language/Clafer/Generator/Alloy.hs view
@@ -32,6 +32,7 @@ import Language.Clafer.Common import Language.Clafer.ClaferArgs import Language.Clafer.Front.AbsClafer +import Language.Clafer.Front.LexClafer import Language.Clafer.Generator.Concat import Language.Clafer.Intermediate.Intclafer hiding (exp) @@ -44,8 +45,8 @@ -- | Alloy code generation -genModule :: ClaferArgs -> (IModule, GEnv) -> [(UID, Integer)] -> (Result, [(Span, IrTrace)]) -genModule claferargs' (imodule, genv) scopes = (flatten output, filter ((/= NoTrace) . snd) $ mapLineCol output) +genModule :: ClaferArgs -> (IModule, GEnv) -> [(UID, Integer)] -> [Token] -> (Result, [(Span, IrTrace)]) +genModule claferargs' (imodule, genv) scopes otherTokens' = (flatten output, filter ((/= NoTrace) . snd) $ mapLineCol output) where genScopes :: [(UID, Integer)] -> String @@ -54,17 +55,27 @@ forScopes' = "for 1" ++ genScopes scopes genEnv = GenEnv claferargs' (uidClaferMap genv) forScopes' - output = header genEnv +++ (cconcat $ map (genDeclaration genEnv) (_mDecls imodule)) + output = header genEnv otherTokens' +++ (cconcat $ map (genDeclaration genEnv) (_mDecls imodule)) -header :: GenEnv -> Concat -header genEnv = CString $ unlines +header :: GenEnv -> [Token] -> Concat +header genEnv otherTokens' = CString $ unlines [ "open util/integer" - , "pred show {}" + , genAlloyEscapes otherTokens' ++ "pred show {}" , if (validate $ claferargs genEnv) then "" else "run show " ++ forScopes genEnv , ""] +genAlloyEscapes :: [Token] -> String +genAlloyEscapes otherTokens' = concat $ map printAlloyEscape otherTokens' + where + printAlloyEscape (PT _ (T_PosAlloy code)) = let + code' = fromJust $ stripPrefix "[alloy|" code + in + (take ((length code') - 2) code') ++ "\n" + + printAlloyEscape _ = "" + -- 07th Mayo 2012 Rafael Olaechea genDeclaration :: GenEnv -> IElement -> Concat genDeclaration genEnv x = case x of @@ -425,7 +436,7 @@ IClaferId _ "integer" _ _ -> CString "Int" IClaferId _ "int" _ _ -> CString "Int" IClaferId _ "string" _ _ -> CString "Int" - IClaferId _ "ref" _ _ -> CString $ "@" ++ getTClaferUID iType' ++ "_ref" + IClaferId _ "dref" _ _ -> CString $ "@" ++ getTClaferUID iType' ++ "_ref" where getTClaferUID (Just TMap{_so = TClafer{_hi = [u]}}) = u getTClaferUID (Just TMap{_so = TClafer{_hi = (u:_)}}) = u
src/Language/Clafer/Generator/Choco.hs view
@@ -14,10 +14,12 @@ import Prelude hiding (exp) import Language.Clafer.Common import Language.Clafer.Intermediate.Intclafer +import Language.Clafer.Front.LexClafer + -- | Choco 3 code generation -genCModule :: (IModule, GEnv) -> [(UID, Integer)] -> Result -genCModule (imodule@IModule{_mDecls}, genv') scopes = +genCModule :: (IModule, GEnv) -> [(UID, Integer)] -> [Token] -> Result +genCModule (imodule@IModule{_mDecls}, genv') scopes otherTokens' = genScopes ++ "\n" ++ (genAbstractClafer =<< abstractClafers) @@ -26,6 +28,7 @@ ++ (genTopConstraint =<< _mDecls) ++ (genConstraint =<< clafers) ++ (genGoal =<< _mDecls) + ++ genChocoEscapes where uidIClaferMap' = uidClaferMap genv' root :: IClafer @@ -82,6 +85,16 @@ largestPositiveInt :: Integer largestPositiveInt = 2 ^ (bitwidth - 1) scopeMap = [uid' ++ ":" ++ show scope | (uid', scope) <- scopes, uid' /= "int"] + + genChocoEscapes :: String + genChocoEscapes = concat $ map printChocoEscape otherTokens' + where + printChocoEscape (PT _ (T_PosChoco code)) = let + code' = fromJust $ stripPrefix "[choco|" code + in + take ((length code') - 2) code' + printChocoEscape _ = "" + exprs :: [IExp] exprs = universeOn biplate imodule @@ -170,7 +183,7 @@ genLocal local = local ++ " = local(\"" ++ local ++ "\")" - genConstraintExp (IFunExp "." [e1, PExp{_exp = IClaferId{_sident = "ref"}}]) = + genConstraintExp (IFunExp "." [e1, PExp{_exp = IClaferId{_sident = "dref"}}]) = "joinRef(" ++ genConstraintPExp e1 ++ ")" genConstraintExp (IFunExp "." [e1, PExp{_exp = IClaferId{_sident = "parent"}}]) = "joinParent(" ++ genConstraintPExp e1 ++ ")" @@ -183,13 +196,13 @@ genConstraintExp (IFunExp "-" [arg1, arg2]) = "sub(" ++ genConstraintPExp arg1 ++ ", " ++ genConstraintPExp arg2 ++ ")" genConstraintExp (IFunExp "sum" args') - | [arg] <- args', PExp{_exp = IFunExp{_exps = [a, PExp{_exp = IClaferId{_sident = "ref"}}]}} <- rewrite arg = + | [arg] <- args', PExp{_exp = IFunExp{_exps = [a, PExp{_exp = IClaferId{_sident = "dref"}}]}} <- rewrite arg = "sum(" ++ genConstraintPExp a ++ ")" | [arg] <- args' = "sum(" ++ genConstraintPExp arg ++ ")" | otherwise = error $ "[bug] Choco.genConstraintExp: Unexpected sum argument: " ++ show args' genConstraintExp (IFunExp "product" args') - | [arg] <- args', PExp{_exp = IFunExp{_exps = [a, PExp{_exp = IClaferId{_sident = "ref"}}]}} <- rewrite arg = + | [arg] <- args', PExp{_exp = IFunExp{_exps = [a, PExp{_exp = IClaferId{_sident = "dref"}}]}} <- rewrite arg = "product(" ++ genConstraintPExp a ++ ")" | otherwise = error "Choco: Unexpected product argument." genConstraintExp (IFunExp "+" args') =
src/Language/Clafer/Generator/Html.hs view
@@ -20,21 +20,23 @@ SOFTWARE. -} -- | Generates HTML and plain text rendering of a Clafer model. -module Language.Clafer.Generator.Html (genHtml, - genText, - genTooltip, - printModule, - printDeclaration, - printDecl, - traceAstModule, - traceIrModule, - cleanOutput, - revertLayout, - printComment, - printPreComment, - printStandaloneComment, - printInlineComment, - highlightErrors) where +module Language.Clafer.Generator.Html + ( genHtml + , genText + , genTooltip + , printModule + , printDeclaration + , printDecl + , traceAstModule + , traceIrModule + , cleanOutput + , revertLayout + , printComment + , printPreComment + , printStandaloneComment + , printInlineComment + , highlightErrors + ) where import Language.ClaferT import Language.Clafer.Front.AbsClafer @@ -62,7 +64,7 @@ then findAll row (cs', concat [comments, printStandaloneComment comment ++ "\n"]) else findAll row (cs', concat [comments, printInlineComment comment ++ "\n"]) '/':'*':_:[] -> findAll row (cs', concat [comments, printStandaloneComment comment ++ "\n"]) - _ -> (cs', "Improper form of comment.")-- Should not happen. Bug. + _ -> (cs', "") | otherwise = ((c':cs'), comments) printComment :: Span -> [(Span, String)] -> ([(Span, String)], String) printComment _ [] = ([],[]) @@ -73,7 +75,7 @@ then (cs, printStandaloneComment comment ++ "\n") else (cs, printInlineComment comment ++ "\n") '/':'*':_:[] -> (cs, printStandaloneComment comment ++ "\n") - _ -> (cs, "Improper form of comment.")-- Should not happen. Bug. + _ -> (cs, "") | otherwise = (c:cs, "") where trim' = let f = reverse. dropWhile isSpace in f . f printStandaloneComment :: String -> String @@ -88,6 +90,11 @@ printInlineComment :: String -> String printInlineComment comment = "<span class=\"inlinecomment\">" ++ comment ++ "</span>" +printDeprecated :: String -> String -> Bool -> String +printDeprecated s m html = (while html $ "<span class=\"deprecated\" title=\"" ++ "Deprecated. " ++ m ++ "\">") + ++ s + ++ (while html "</span>") + -- | Generate the model as HTML document genHtml :: Module -> IModule -> String genHtml x ir = cleanOutput $ revertLayout $ printModule x (traceIrModule ir) True @@ -108,13 +115,13 @@ printIndentId 0 html ++ (while html "<span class=\"keyword\">") ++ "enum" ++ (while html "</span>") ++ " " ++ - (printPosIdent posIdent (Just uid') html) ++ + (printPosIdent posIdent mUid' html) ++ " = " ++ (concat $ intersperse " | " (map (\x -> printEnumId x indent irMap html comments) enumIds)) ++ comment ++ printIndentEnd html where - uid' = getUid posIdent irMap; + mUid' = getUid posIdent irMap; (comments', preComments) = printPreComment s comments; (_, comment) = printComment s comments' printDeclaration (ElementDecl _ element) indent irMap html comments = printElement element indent irMap html comments @@ -239,9 +246,23 @@ printPosIdent (PosIdent (_, id')) (Just uid') html = (while html $ "<span class=\"claferDecl\" id=\"" ++ uid' ++ "\">") ++ id' ++ (while html "</span>") printPosIdentRef :: PosIdent -> Map.Map Span [Ir] -> Bool -> String -printPosIdentRef (PosIdent (p, id')) irMap html - = (while html ("<a href=\"#" ++ uid' ++ "\"><span class=\"reference\">")) ++ id' ++ (while html "</span></a>") - where uid' = getUid (PosIdent (p, id')) irMap +printPosIdentRef (PosIdent (_, "dref")) _ html + = (while html "<span class=\"keyword\">") ++ "dref" ++ (while html "</span>") +printPosIdentRef (PosIdent (_, "this")) _ html + = (while html "<span class=\"keyword\">") ++ "this" ++ (while html "</span>") +printPosIdentRef (PosIdent (_, "parent")) _ html + = (while html "<span class=\"keyword\">") ++ "parent" ++ (while html "</span>") +printPosIdentRef (PosIdent (_, "root")) _ html + = (while html "<span class=\"keyword\">") ++ "root" ++ (while html "</span>") +printPosIdentRef (PosIdent (_, "ref")) _ html + = printDeprecated "ref" "Use `dref` instead." html +printPosIdentRef (PosIdent (_, id')) _ False = id' +printPosIdentRef (PosIdent (p, id')) irMap True + = case mUid' of + Just uid' -> "<a href=\"#" ++ uid' ++ "\"><span class=\"reference\">" ++ id' ++ "</span></a>" + Nothing -> id' + where + mUid' = getUid (PosIdent (p, id')) irMap printSuper :: Super -> Int -> Map.Map Span [Ir] -> Bool -> [(Span, String)] -> String printSuper (SuperEmpty _) _ _ _ _ = "" @@ -334,7 +355,8 @@ printExp (EUnion _ set1 set2) indent irMap html comments = (printExp set1 indent irMap html comments) ++ "++" ++ (printExp set2 indent irMap html comments) printExp (EUnionCom _ set1 set2) indent irMap html comments = (printExp set1 indent irMap html comments) ++ ", " ++ (printExp set2 indent irMap html comments) printExp (EDifference _ set1 set2) indent irMap html comments = (printExp set1 indent irMap html comments) ++ "--" ++ (printExp set2 indent irMap html comments) -printExp (EIntersection _ set1 set2) indent irMap html comments = (printExp set1 indent irMap html comments) ++ "&" ++ (printExp set2 indent irMap html comments) +printExp (EIntersection _ set1 set2) indent irMap html comments = (printExp set1 indent irMap html comments) ++ "**" ++ (printExp set2 indent irMap html comments) +printExp (EIntersectionDeprecated _ set1 set2) indent irMap html comments = (printExp set1 indent irMap html comments) ++ printDeprecated "&" "Use `**` instead." html ++ (printExp set2 indent irMap html comments) printExp (EDomain _ set1 set2) indent irMap html comments = (printExp set1 indent irMap html comments) ++ "<:" ++ (printExp set2 indent irMap html comments) printExp (ERange _ set1 set2) indent irMap html comments = (printExp set1 indent irMap html comments) ++ ":>" ++ (printExp set2 indent irMap html comments) printExp (EJoin _ set1 set2) indent irMap html comments = (printExp set1 indent irMap html comments) ++ "." ++ (printExp set2 indent irMap html comments) @@ -352,9 +374,9 @@ (QuantSome _) -> (while html "<span class=\"keyword\">") ++ "some" ++ (while html "</span>") ++ " " printEnumId :: EnumId -> Int -> Map.Map Span [Ir] -> Bool -> [(Span, String)] -> String -printEnumId (EnumIdIdent _ posident) _ irMap html _ = printPosIdent posident (Just uid') html +printEnumId (EnumIdIdent _ posident) _ irMap html _ = printPosIdent posident mUid' html where - uid' = getUid posident irMap + mUid' = getUid posident irMap printIndent :: Int -> Bool -> String printIndent 0 html = (while html "<div>") ++ "\n" @@ -381,22 +403,22 @@ rest [] = [] rest (_:xs) = xs -getUid :: PosIdent -> Map.Map Span [Ir] -> String +getUid :: PosIdent -> Map.Map Span [Ir] -> Maybe String getUid posIdent@(PosIdent (_, id')) irMap = - if Map.lookup (getSpan posIdent) irMap == Nothing - then "Lookup failed" - else let wrappedResult = head $ fromJust $ Map.lookup (getSpan posIdent) irMap in - findUid id' $ unwrap wrappedResult - where {unwrap (IRPExp pexp') = getIdentPExp pexp'; - unwrap (IRClafer iClafer') = [ _uid iClafer' ]; - unwrap x = error $ "Html:getUid:unwrap called on: " ++ show x; - getIdentPExp (PExp _ _ _ exp') = getIdentIExp exp'; - getIdentIExp (IFunExp _ exps') = concatMap getIdentPExp exps'; - getIdentIExp (IClaferId _ id'' _ _) = [id'']; - getIdentIExp (IDeclPExp _ _ pexp) = getIdentPExp pexp; - getIdentIExp _ = []; - findUid name (x:xs) = if name == dropUid x then x else findUid name xs; - findUid _ [] = "Uid not found"} + case Map.lookup (getSpan posIdent) irMap of + Nothing -> Nothing + Just wrappedResultList -> listToMaybe $ catMaybes $ map (findUid id') $ map unwrap wrappedResultList + where + unwrap (IRPExp pexp') = getIdentPExp pexp' + unwrap (IRClafer iClafer') = [ _uid iClafer' ] + unwrap x = error $ "Html:getUid:unwrap called on: " ++ show x + getIdentPExp (PExp _ _ _ exp') = getIdentIExp exp' + getIdentIExp (IFunExp _ exps') = concatMap getIdentPExp exps' + getIdentIExp (IClaferId _ id'' _ _) = [id''] + getIdentIExp (IDeclPExp _ _ pexp) = getIdentPExp pexp + getIdentIExp _ = [] + findUid name (x:xs) = if name == dropUid x then Just x else findUid name xs + findUid _ [] = Nothing getDivId :: Span -> Map.Map Span [Ir] -> String getDivId s irMap = if Map.lookup s irMap == Nothing
src/Language/Clafer/Generator/Python.hs view
@@ -172,7 +172,7 @@ genLocal local = local ++ " = local(\"" ++ local ++ "\")" - genConstraintExp (IFunExp "." [e1, PExp{_exp = IClaferId{_sident = "ref"}}]) = + genConstraintExp (IFunExp "." [e1, PExp{_exp = IClaferId{_sident = "dref"}}]) = "joinRef(" ++ genConstraintPExp e1 ++ ")" genConstraintExp (IFunExp "." [e1, PExp{_exp = IClaferId{_sident = "parent"}}]) = "joinParent(" ++ genConstraintPExp e1 ++ ")" @@ -185,13 +185,13 @@ genConstraintExp (IFunExp "-" [arg1, arg2]) = "sub(" ++ genConstraintPExp arg1 ++ ", " ++ genConstraintPExp arg2 ++ ")" genConstraintExp (IFunExp "sum" args') - | [arg] <- args', PExp{_exp = IFunExp{_exps = [a, PExp{_exp = IClaferId{_sident = "ref"}}]}} <- rewrite arg = + | [arg] <- args', PExp{_exp = IFunExp{_exps = [a, PExp{_exp = IClaferId{_sident = "dref"}}]}} <- rewrite arg = "sum(" ++ genConstraintPExp a ++ ")" | [arg] <- args' = "sum(" ++ genConstraintPExp arg ++ ")" | otherwise = error $ "[bug] Python.genConstraintExp: Unexpected sum argument: " ++ show args' genConstraintExp (IFunExp "product" args') - | [arg] <- args', PExp{_exp = IFunExp{_exps = [a, PExp{_exp = IClaferId{_sident = "ref"}}]}} <- rewrite arg = + | [arg] <- args', PExp{_exp = IFunExp{_exps = [a, PExp{_exp = IClaferId{_sident = "dref"}}]}} <- rewrite arg = "product(" ++ genConstraintPExp a ++ ")" | otherwise = error "Python: Unexpected product argument." genConstraintExp (IFunExp "+" args') =
src/Language/Clafer/Intermediate/Desugarer.hs view
@@ -96,7 +96,7 @@ (desugarElements elements'')) : (desugarInit id'' init'') getPExpClaferIdent :: Exp -> String -getPExpClaferIdent (ClaferId _ (Path _ [ (ModIdIdent _ (PosIdent (_, ident'))) ] )) = ident' +getPExpClaferIdent (ClaferId _ (Path _ [ (ModIdIdent _ pident') ] )) = transIdent pident' getPExpClaferIdent (EJoin _ _ e2) = getPExpClaferIdent e2 getPExpClaferIdent _ = error "Desugarer:getPExpClaferIdent not given a ClaferId PExp" @@ -121,7 +121,7 @@ desugarInit id' (InitSome s inithow exp') = [ IEConstraint (desugarInitHow inithow) (pExpDefPid s implIExp) ] where cId :: PExp - cId = mkPLClaferId (snd $ getIdent id') False Nothing + cId = mkPLClaferId (getSpan id') (snd $ getIdent id') False Nothing -- <id> = <exp'> assignIExp :: IExp assignIExp = (IFunExp "=" [cId, desugarExp exp']) @@ -316,6 +316,7 @@ EUnionCom _ exp0 exp' -> dop iUnion [exp0, exp'] EDifference _ exp0 exp' -> dop iDifference [exp0, exp'] EIntersection _ exp0 exp' -> dop iIntersection [exp0, exp'] + EIntersectionDeprecated _ exp0 exp' -> dop iIntersection [exp0, exp'] EDomain _ exp0 exp' -> dop iDomain [exp0, exp'] ERange _ exp0 exp' -> dop iRange [exp0, exp'] EJoin _ exp0 exp' -> dop iJoin [exp0, exp']
src/Language/Clafer/Intermediate/ResolverName.hs view
@@ -36,7 +36,6 @@ import Language.ClaferT import Language.Clafer.Common import Language.Clafer.Intermediate.Intclafer -import qualified Language.Clafer.Intermediate.Intclafer as I -- | this environment is created for each clafer data SEnv @@ -54,7 +53,7 @@ -- | How a given name was resolved data HowResolved - = Special -- ^ "this", "parent", "ref", "root", and "children" + = Special -- ^ "this", "parent", "dref", "root", and "children" | TypeSpecial -- ^ primitive type: "integer", "string" | Binding -- ^ local variable (in constraints) | Subclafers -- ^ clafer's descendant @@ -140,27 +139,22 @@ IEConstraint isHard' pexp -> IEConstraint isHard' <$> resolvePExp env pexp IEGoal isMaximize' pexp -> IEGoal isMaximize' <$> resolvePExp env pexp - -resolvePExp :: SEnv -> PExp -> Resolve PExp -resolvePExp env pexp = - do - exp' <- resolveIExp (_inPos pexp) env $ _exp pexp - return $ pexp {_exp = exp'} - -resolveIExp :: Span -> SEnv -> IExp -> Resolve IExp -resolveIExp pos' env x = case x of - IDeclPExp quant' decls' pexp -> do +resolvePExp :: SEnv -> PExp -> Resolve PExp +resolvePExp env pexp@PExp{_exp=x} = case x of + IDeclPExp quant' decls' pexp2 -> do let (decls'', env') = runState (runExceptT $ (mapM (ExceptT . processDecl) decls')) env - IDeclPExp quant' <$> decls'' <*> resolvePExp env' pexp + exp' <- IDeclPExp quant' <$> decls'' <*> resolvePExp env' pexp2 + return pexp{_exp=exp'} - IFunExp op' exps' -> if op' == iJoin then resNav else IFunExp op' <$> mapM (resolvePExp env) exps' - IInt _ -> return x - IDouble _ -> return x - IReal _ -> return x - IStr _ -> return x - IClaferId _ _ _ _ -> resNav - where - resNav = fst <$> resolveNav pos' env x True + IFunExp "." _ -> fst <$> resolveNav env pexp True + IFunExp op' exps' -> do + exp' <- IFunExp op' <$> mapM (resolvePExp env) exps' + return $ pexp {_exp = exp'} + IInt _ -> return pexp + IDouble _ -> return pexp + IReal _ -> return pexp + IStr _ -> return pexp + IClaferId{} -> fst <$> resolveNav env pexp True liftError :: Monad m => Either e a -> ExceptT e m a liftError = ExceptT . return @@ -168,45 +162,56 @@ processDecl :: MonadState SEnv m => IDecl -> m (Resolve IDecl) processDecl decl = runExceptT $ do env <- lift $ get - (body', path) <- liftError $ resolveNav (_inPos $ _body decl) env (I._exp $ _body decl) True + (body', path) <- liftError $ resolveNav env (_body decl) True lift $ modify (\e -> e { bindings = (_decls decl, path) : bindings e }) - return $ decl {_body = pExpDefPidPos body'} + return $ decl {_body = body'} -resolveNav :: Span -> SEnv -> IExp -> Bool -> Resolve (IExp, [IClafer]) -resolveNav pos' env x isFirst = case x of - IFunExp _ (pexp0:pexp:_) -> do - (exp0', path) <- resolveNav (_inPos pexp0) env (I._exp pexp0) True - (exp', path') <- resolveNav (_inPos pexp) env {context = listToMaybe path, resPath = path} - (I._exp pexp) False - return (IFunExp iJoin [pexp0{I._exp=exp0'}, pexp{I._exp=exp'}], path') - IClaferId modName' id' _ _ -> out - where - out - | isFirst = mkPath env <$> resolveName pos' env id' - | otherwise = mkPath' modName' <$> resolveImmName pos' env id' +resolveNav :: SEnv -> PExp -> Bool -> Resolve (PExp, [IClafer]) +resolveNav env pexp0@PExp{_inPos=pos', _exp=x} isFirst = case x of + IFunExp "." [pexp1,pexp2] -> do + (pexp1', path1) <- resolveNav env pexp1 True + (pexp2', path2) <- resolveNav env{context = listToMaybe path1, resPath = path1} pexp2 False + -- if `dref` was added to the RHS we need to left rotate the tree + case pexp2' of + PExp{_exp=IFunExp "." [pexp2'l, pexp2'r]} -> (case pexp2'l of + PExp{_exp=IClaferId{_sident="dref"}} -> + let -- move the `dref` to the LHS + pexp0' = pexp0{_exp=IFunExp iJoin [pexp1', pexp2'l]} + in -- keep the RHS as is + return (pexp2{_exp=IFunExp iJoin [pexp0', pexp2'r]}, path2) + _ -> return (pexp0{_exp=IFunExp iJoin [pexp1', pexp2']}, path2) + ) + _ -> return (pexp0{_exp=IFunExp iJoin [pexp1', pexp2']}, path2) + IClaferId modName' id' _ _ -> if isFirst + then do + (exp', path') <- mkPath pos' env <$> resolveName pos' env id' + return (pexp0{_exp=exp'}, path') + else do + (exp', path') <- mkPath' pos' modName' <$> resolveImmName pos' env id' + return (pexp0{_exp=exp'}, path') y -> throwError $ SemanticErr pos' $ "Cannot resolve nav of " ++ show y -- | Depending on how resolved construct a navigation path from 'context env' -mkPath :: SEnv -> (HowResolved, String, [IClafer]) -> (IExp, [IClafer]) -mkPath env (howResolved, id', path) = case howResolved of +mkPath :: Span -> SEnv -> (HowResolved, String, [IClafer]) -> (IExp, [IClafer]) +mkPath pos' env (howResolved, id', path) = case howResolved of Binding -> (IClaferId "" id' True Nothing, path) Special -> (specIExp id', path) TypeSpecial -> (IClaferId "" id' True (Just id'), path) Subclafers -> (toNav $ tail $ reverse $ map toTuple path, path) - Ancestor -> (toNav' $ adjustAncestor (fromJust $ context env) + Ancestor -> (toNav' pos' $ adjustAncestor (fromJust $ context env) (reverse $ map toTuple $ resPath env) (reverse $ map toTuple path), path) - Reference -> (toNav' $ reverse $ map toTuple path, path) - AbsClafer -> (toNav' $ reverse $ map toTuple path, path) - TopClafer -> (toNav' $ reverse $ map toTuple path, path) + Reference -> (toNav' pos' $ reverse $ map toTuple path, path) + AbsClafer -> (toNav' pos' $ reverse $ map toTuple path, path) + TopClafer -> (toNav' pos' $ reverse $ map toTuple path, path) where toNav tuplePath = foldl' - (\exp' (id'', cbind) -> IFunExp iJoin [pExpDefPidPos exp', mkPLClaferId id'' (fromMaybe False $ isTopLevel <$> cbind) $ _uid <$> cbind]) + (\exp' (id'', cbind) -> IFunExp iJoin [pExpDefPid pos' exp', mkPLClaferId pos' id'' (fromMaybe False $ isTopLevel <$> cbind) $ _uid <$> cbind]) (IClaferId "" thisIdent True (_uid <$> context env)) tuplePath specIExp "this" = IClaferId "" thisIdent True (_uid <$> context env) specIExp "parent" = toNav [("parent", Just $ head path)] - specIExp "ref" = toNav [("ref", Just $ head path)] + specIExp "dref" = toNav [("dref", Just $ head path)] specIExp "root" = IClaferId "" rootIdent True (Just rootIdent) specIExp "children" = toNav [(id', Just $ head path)] specIExp i = error $ "[BUG] ResolverName.specIExp: Unknown special id: " ++ i @@ -214,8 +219,9 @@ toTuple :: IClafer->(String, Maybe IClafer) toTuple c = (_uid c, Just c) -toNav' :: [(String, Maybe IClafer)] -> IExp -toNav' tuplePath = (mkIFunExp iJoin $ map (\(id', cbind) -> IClaferId "" id' (fromMaybe False $ isTopLevel <$> cbind) (_uid <$> cbind)) tuplePath) :: IExp +toNav' :: Span -> [(String, Maybe IClafer)] -> IExp +toNav' pos' tuplePath = + (mkIFunExp pos' iJoin $ map (\(id', cbind) -> IClaferId "" id' (fromMaybe False $ isTopLevel <$> cbind) (_uid <$> cbind)) tuplePath) :: IExp adjustAncestor :: IClafer -> [(String, Maybe IClafer)] -> [(String, Maybe IClafer)] -> [(String, Maybe IClafer)] adjustAncestor ctx cPath rPath = (thisIdent, Just ctx) : parents ++ (fromJust $ stripPrefix prefix rPath) @@ -225,9 +231,9 @@ eqIds a b = (fst a) == (fst b) -mkPath' :: String -> (HowResolved, String, [IClafer]) -> (IExp, [IClafer]) -mkPath' modName' (howResolved, id', path) = case howResolved of - Reference -> (toNav' (zip ["ref", id'] (map Just path)), path) +mkPath' :: Span -> String -> (HowResolved, String, [IClafer]) -> (IExp, [IClafer]) +mkPath' pos' modName' (howResolved, id', path) = case howResolved of + Reference -> (toNav' pos' (zip ["dref", id'] (map Just path)), path) _ -> (IClaferId modName' id' False (_uid <$> bind), path) where bind = case path of
src/Language/Clafer/Intermediate/ResolverType.hs view
@@ -40,14 +40,14 @@ import Data.Maybe import Prelude hiding (exp) - type TypeDecls = [(String, IType)] data TypeInfo = TypeInfo {iTypeDecls::TypeDecls, iUIDIClaferMap::UIDIClaferMap, iCurThis::IClafer, iCurPath::Maybe IType} newtype TypeAnalysis a = TypeAnalysis (ReaderT TypeInfo (Either ClaferSErr) a) deriving (MonadError ClaferSErr, Monad, Functor, MonadReader TypeInfo, Applicative) -typeOfUid :: MonadTypeAnalysis m => String -> m IType +-- return the type of a UID but give preference to local declarations in quantified expressions, which shadow global names +typeOfUid :: MonadTypeAnalysis m => UID -> m IType typeOfUid uid = (fromMaybe (TClafer [uid]) . lookup uid) <$> typeDecls class (Functor m, Monad m) => MonadTypeAnalysis m where @@ -105,12 +105,12 @@ claferWithUid :: (Monad m) => UIDIClaferMap -> String -> m IClafer claferWithUid uidIClaferMap' u = case findIClafer uidIClaferMap' u of Just c -> return c - Nothing -> fail $ "Analysis.claferWithUid: " ++ u ++ " not found!" + Nothing -> fail $ "ResolverType.claferWithUid: " ++ u ++ " not found!" parentOf :: (Monad m) => UIDIClaferMap -> UID -> m UID parentOf uidIClaferMap' c = case _parentUID <$> findIClafer uidIClaferMap' c of Just u -> return u - Nothing -> fail $ "Analysis.parentOf: " ++ c ++ " not found!" + Nothing -> fail $ "ResolverType.parentOf: " ++ c ++ " not found!" {- - C is an direct child of B. @@ -141,32 +141,9 @@ [t'] -> t' ts -> "[" ++ intercalate "," ts ++ "]" --- | This function is similar to 'intersection', but takes into account more ancestors to be able to combine --- clafers of different types, but with a common ancestor: --- Inputs: --- t1 is of type B --- t2 is of type C --- B : A --- C : A --- Outputs: --- the resulting type is: A, and the type combination is valid -getIfThenElseType :: Monad m => UIDIClaferMap -> IType -> IType -> m (Maybe IType) -getIfThenElseType uidIClaferMap' t1 t2 = do - h1 <- mapM (hierarchyMap uidIClaferMap' _uid) $ unionType t1 - h2 <- mapM (hierarchyMap uidIClaferMap' _uid) $ unionType t2 - let ut = catMaybes [commonHierarchy u1 u2 | u1 <- h1, u2 <- h2] - return $ fromUnionType ut - where - commonHierarchy :: [UID] -> [UID] -> Maybe UID - commonHierarchy h1 h2 = commonHierarchy' (reverse h1) (reverse h2) Nothing - commonHierarchy' (x:xs) (y:ys) accumulator = - if (x == y) - then - if (null xs || null ys) - then Just x - else commonHierarchy' xs ys $ Just x - else accumulator - commonHierarchy' _ _ _ = error "ResolverType.commonHierarchy' expects two non empty lists but was given at least one empty list!" -- Should never happen +showType :: PExp -> String +showType PExp{ _iType=Nothing } = "unknown type" +showType PExp{ _iType=(Just t) } = show t data TAMode = TAReferences -- | Phase one: only process references @@ -194,10 +171,18 @@ refs' <- resolveTPExp $ _ref originalReference case refs' of [] -> return Nothing - [ref'] -> return $ Just $ originalReference{_ref=(ref' & iType.traversed %~ (addHierarchy uidIClaferMap'))} - (ref':_) -> return $ Just $ originalReference{_ref=(ref' & iType.traversed %~ (addHierarchy uidIClaferMap'))} + [ref'] -> return $ refWithNewType uidIClaferMap' originalReference ref' + (ref':_) -> return $ refWithNewType uidIClaferMap' originalReference ref' elements' <- mapM (resolveTElement TAReferences (_uid iclafer)) (_elements iclafer) return $ IEClafer iclafer{_elements = elements', _reference=reference'} + where + refWithNewType uMap oRef r = let + r' = r & iType.traversed %~ (addHierarchy uMap) + in case _iType r' of + Nothing -> Nothing + Just t -> if isTBoolean t + then Nothing + else Just $ oRef{_ref=r'} resolveTElement TAReferences _ iec@(IEConstraint{}) = return iec resolveTElement TAReferences _ ieg@(IEGoal{}) = return ieg @@ -211,8 +196,8 @@ where testBoolean pexp' = do - unless (typeOf pexp' == TBoolean) $ - throwError $ SemanticErr (_inPos pexp') ("Cannot construct constraint on type '" ++ str (typeOf pexp') ++ "'") + unless (isTBoolean $ typeOf pexp') $ + throwError $ SemanticErr (_inPos pexp') ("Cannot construct constraint on type '" ++ showType pexp' ++ "'") return pexp' resolveTElement TAExpressions parent' (IEGoal isMaximize' pexp') = IEGoal isMaximize' <$> resolveTConstraint parent' pexp' @@ -235,7 +220,7 @@ (_, xs) -> return xs -- Case 3: At least one success. resolveTPExp' :: PExp -> TypeAnalysis [Either ClaferSErr PExp] -resolveTPExp' p@PExp{_inPos, _exp = IClaferId{_sident = "ref"}} = do +resolveTPExp' p@PExp{_inPos, _exp = IClaferId{_sident = "dref"}} = do uidIClaferMap' <- asks iUIDIClaferMap runListT $ runExceptT $ do curPath' <- curPath @@ -256,16 +241,21 @@ when (isNothing parent') $ throwError $ SemanticErr _inPos "Cannot parent from root" let result = p `withType` fromJust parent' - return result -- Case 1: Use the sident - <++> - addRef result -- Case 2: Dereference the sident 1..* times + return result Nothing -> throwError $ SemanticErr _inPos "Cannot parent at the start of a path" resolveTPExp' p@PExp{_exp = IClaferId{_sident = "integer"}} = runListT $ runExceptT $ return $ p `withType` TInteger resolveTPExp' p@PExp{_exp = IClaferId{_sident = "int"}} = runListT $ runExceptT $ return $ p `withType` TInteger resolveTPExp' p@PExp{_exp = IClaferId{_sident = "string"}} = runListT $ runExceptT $ return $ p `withType` TString resolveTPExp' p@PExp{_exp = IClaferId{_sident = "double"}} = runListT $ runExceptT $ return $ p `withType` TDouble resolveTPExp' p@PExp{_exp = IClaferId{_sident = "real"}} = runListT $ runExceptT $ return $ p `withType` TReal -resolveTPExp' p@PExp{_inPos, _exp = IClaferId{_sident}} = do +resolveTPExp' p@PExp{_inPos, _exp = IClaferId{_sident="this"}} = do + runListT $ runExceptT $ do + sident' <- _uid <$> curThis + result <- (p `withType`) <$> typeOfUid sident' + return result + <++> + addDref result -- Case 2: Dereference the sident 1..* times +resolveTPExp' p@PExp{_inPos, _exp = IClaferId{_sident, _isTop}} = do uidIClaferMap' <- asks iUIDIClaferMap runListT $ runExceptT $ do curPath' <- curPath @@ -274,15 +264,35 @@ c <- mapM (isChild uidIClaferMap' sident') $ unionType $ fromJust curPath' unless (or c) $ throwError $ SemanticErr _inPos ("'" ++ sident' ++ "' is not a child of type '" ++ str (fromJust curPath') ++ "'") result <- (p `withType`) <$> typeOfUid sident' - return result -- Case 1: Use the sident - <++> - addRef result -- Case 2: Dereference the sident 1..* times + if _isTop + then return result -- Case 1: Use the sident + <++> + addDref result -- Case 2: Dereference the sident 1..* times + <++> + addSome result + else return result -- all not top-level identifiers must be in a path resolveTPExp' p@PExp{_inPos, _exp} = - runListT $ runExceptT $ do - (iType', exp') <- ExceptT $ ListT $ resolveTExp _exp - return p{_iType = Just iType', _exp = exp'} + runListT $ runExceptT $ (case _exp of + e@IFunExp {_op = ".", _exps = [arg1, arg2]} -> do + (iType', exp') <- do + arg1' <- lift $ ListT $ resolveTPExp arg1 + localCurPath (typeOf arg1') $ do + arg2' <- liftError $ lift $ ListT $ resolveTPExp arg2 + (case _iType arg2' of + Just (t'@TClafer{}) -> return (t', e{_exps = [arg1', arg2']}) + Just (TMap{_ta=t'}) -> return (t', e{_exps = [arg1', arg2']}) + _ -> fail $ "Function '.' cannot be performed on " ++ showType arg1' ++ "\n.\n " ++ showType arg2') + let result = p{_iType = Just iType', _exp = exp'} + return result -- Case 1: Use the sident + <++> + addDref result -- Case 2: Dereference the sident 1..* times + <++> + addSome result + _ -> do + (iType', exp') <- ExceptT $ ListT $ resolveTExp _exp + return p{_iType = Just iType', _exp = exp'}) where resolveTExp :: IExp -> TypeAnalysis [Either ClaferSErr (IType, IExp)] resolveTExp e@(IInt _) = runListT $ runExceptT $ return (TInteger, e) @@ -297,9 +307,9 @@ let test c = unless c $ - throwError $ SemanticErr _inPos ("Function '" ++ _op ++ "' cannot be performed on " ++ _op ++ " '" ++ str t ++ "'") + throwError $ SemanticErr _inPos ("Function '" ++ _op ++ "' cannot be performed on " ++ _op ++ " '" ++ showType arg' ++ "'") let result - | _op == iNot = test (t == TBoolean) >> return TBoolean + | _op == iNot = test (isTBoolean t) >> return TBoolean | _op == iCSet = return TInteger | _op == iSumSet = test (isTInteger t) >> return TInteger | _op == iProdSet = test (isTInteger t) >> return TInteger @@ -308,20 +318,14 @@ result' <- result return (result', e{_exps = [arg']}) - resolveTExp e@IFunExp {_op = ".", _exps = [arg1, arg2]} = - do - runListT $ runExceptT $ do - arg1' <- lift $ ListT $ resolveTPExp arg1 - localCurPath (typeOf arg1') $ do - arg2' <- liftError $ lift $ ListT $ resolveTPExp arg2 - return (fromJust $ _iType arg2', e{_exps = [arg1', arg2']}) - resolveTExp e@IFunExp {_op = "++", _exps = [arg1, arg2]} = do arg1s' <- resolveTPExp arg1 arg2s' <- resolveTPExp arg2 let union' a b = typeOf a +++ typeOf b - return $ [return (union' arg1' arg2', e{_exps = [arg1', arg2']}) | (arg1', arg2') <- sortBy (comparing $ length . unionType . uncurry union') $ liftM2 (,) arg1s' arg2s'] + return $ [ return (union' arg1' arg2', e{_exps = [arg1', arg2']}) + | (arg1', arg2') <- sortBy (comparing $ length . unionType . uncurry union') $ liftM2 (,) arg1s' arg2s' + , (not $ isTBoolean $ typeOf arg1') && (not $ isTBoolean $ typeOf arg2') ] resolveTExp e@IFunExp {_op, _exps = [arg1, arg2]} = do uidIClaferMap' <- asks iUIDIClaferMap runListT $ runExceptT $ do @@ -333,16 +337,18 @@ do it <- intersection uidIClaferMap' e1 e2 case it of - Just it' -> return it' - Nothing -> throwError $ SemanticErr _inPos ("Function '" ++ _op ++ "' cannot be performed on '" ++ str t1 ++ "' " ++ _op ++ " '" ++ str t2 ++ "'") + Just it' -> if isTBoolean it' + then throwError $ SemanticErr _inPos ("Function '" ++ _op ++ "' cannot be performed on\n" ++ showType arg1' ++ "\n" ++ _op ++ "\n" ++ showType arg2') + else return it' + Nothing -> throwError $ SemanticErr _inPos ("Function '" ++ _op ++ "' cannot be performed on\n" ++ showType arg1' ++ "\n" ++ _op ++ "\n" ++ showType arg2') let testNotSame e1 e2 = when (e1 `sameAs` e2) $ throwError $ SemanticErr _inPos ("Function '" ++ _op ++ "' is redundant because the two subexpressions are always equivalent") let test c = unless c $ - throwError $ SemanticErr _inPos ("Function '" ++ _op ++ "' cannot be performed on '" ++ str t1 ++ "' " ++ _op ++ " '" ++ str t2 ++ "'") + throwError $ SemanticErr _inPos ("Function '" ++ _op ++ "' cannot be performed on\n" ++ showType arg1' ++ "\n" ++ _op ++ "\n" ++ showType arg2') let result - | _op `elem` logBinOps = test (t1 == TBoolean && t2 == TBoolean) >> return TBoolean + | _op `elem` logBinOps = test (isTBoolean t1 && isTBoolean t2) >> return TBoolean | _op `elem` [iLt, iGt, iLte, iGte] = test (numeric t1 && numeric t2) >> return TBoolean | _op `elem` [iEq, iNeq] = testNotSame arg1' arg2' >> testIntersect t1 t2 >> return TBoolean | _op == iDifference = testNotSame arg1' arg2' >> testIntersect t1 t2 >> return t1 @@ -367,42 +373,66 @@ let t1 = typeOf arg1' let t2 = typeOf arg2' let t3 = typeOf arg3' --- unless (False) $ --- throwError $ SemanticErr inPos ("The types are: '" ++ str t2 ++ "' and '" ++ str t3 ++ "'") - unless (t1 == TBoolean) $ - throwError $ SemanticErr _inPos ("The type of condition in 'if/then/else' must be 'TBoolean', insted it is " ++ str t1) + unless (isTBoolean t1) $ + throwError $ SemanticErr _inPos ("The type of condition in 'if/then/else' must be 'TBoolean', insted it is " ++ showType arg1') it <- getIfThenElseType uidIClaferMap' t2 t3 t <- case it of Just it' -> return it' - Nothing -> throwError $ SemanticErr _inPos ("Function 'if/then/else' cannot be performed on if '" ++ str t1 ++ "' then '" ++ str t2 ++ "' else '" ++ str t3 ++ "'") + Nothing -> throwError $ SemanticErr _inPos ("Function 'if/then/else' cannot be performed on \nif\n" ++ showType arg1' ++ "\nthen\n" ++ showType arg2' ++ "\nelse\n" ++ showType arg3') return (t, e{_exps = [arg1', arg2', arg3']}) - + -- some P, no P, one P + -- P must not be TBoolean + resolveTExp e@IDeclPExp{_oDecls=[], _bpexp} = + runListT $ runExceptT $ do + bpexp' <- liftError $ lift $ ListT $ resolveTPExp _bpexp + case _iType bpexp' of + Nothing -> fail $ "resolveTExp@IDeclPExp: No type computed for body\n" ++ show bpexp' + Just t' -> if isTBoolean t' + then throwError $ SemanticErr _inPos "The type of body of a quantified expression without local declarations must not be 'TBoolean'" + else return $ (TBoolean, e{_bpexp = bpexp'}) + -- some x : X | P, no x : X | P, one x : X | P + -- X must not be TBoolean, P must be TBoolean resolveTExp e@IDeclPExp{_oDecls, _bpexp} = runListT $ runExceptT $ do oDecls' <- mapM resolveTDecl _oDecls let extraDecls = [(decl, typeOf $ _body oDecl) | oDecl <- oDecls', decl <- _decls oDecl] localDecls extraDecls $ do bpexp' <- liftError $ lift $ ListT $ resolveTPExp _bpexp - return $ (TBoolean, e{_oDecls = oDecls', _bpexp = bpexp'}) + case _iType bpexp' of + Nothing -> fail $ "resolveTExp@IDeclPExp: No type computed for body\n" ++ show bpexp' + Just t' -> if isTBoolean t' + then return $ (TBoolean, e{_oDecls = oDecls', _bpexp = bpexp'}) + else throwError $ SemanticErr _inPos $ "The type of body of a quantified expression with local declarations must be 'TBoolean', instead it is\n" ++ showType bpexp' where resolveTDecl d@IDecl{_body} = do body' <- lift $ ListT $ resolveTPExp _body - return $ d{_body = body'} - + case _iType body' of + Nothing -> fail $ "resolveTExp@IDeclPExp: No type computed for local declaration\n" ++ show body' + Just t' -> if isTBoolean t' + then throwError $ SemanticErr _inPos "The type of declaration of a quantified expression must not be 'TBoolean'" + else return $ d{_body = body'} resolveTExp e = error $ "Unknown iexp: " ++ show e --- Adds "refs" at the end, effectively dereferencing Clafers when needed. -addRef :: PExp -> ExceptT ClaferSErr (ListT TypeAnalysis) PExp -addRef pexp = +-- Adds "dref"s at the end, effectively dereferencing Clafers when needed. +addDref :: PExp -> ExceptT ClaferSErr (ListT TypeAnalysis) PExp +addDref pexp = do localCurPath (typeOf pexp) $ do - deref <- (ExceptT $ ListT $ resolveTPExp' $ newPExp $ IClaferId "" "ref" False Nothing) `catchError` const (lift mzero) + deref <- (ExceptT $ ListT $ resolveTPExp' $ newPExp $ IClaferId "" "dref" False Nothing) `catchError` const (lift mzero) let result = (newPExp $ IFunExp "." [pexp, deref]) `withType` typeOf deref - return result <++> addRef result + return result <++> addDref result + where + newPExp = PExp Nothing "" $ _inPos pexp + +-- Adds a quantifier "some" at the beginning, effectively turning an identifier into a TBoolean expression +addSome :: PExp -> ExceptT ClaferSErr (ListT TypeAnalysis) PExp +addSome pexp = + do + localCurPath (typeOf pexp) $ return $ (newPExp $ IDeclPExp ISome [] pexp) `withType` TBoolean where newPExp = PExp Nothing "" $ _inPos pexp
src/Language/Clafer/Intermediate/StringAnalyzer.hs view
@@ -22,9 +22,11 @@ -} module Language.Clafer.Intermediate.StringAnalyzer where +import Control.Applicative +import Control.Monad.State import Data.Tuple import qualified Data.Map as Map -import Control.Monad.State +import Prelude import Language.Clafer.Intermediate.Intclafer @@ -40,24 +42,24 @@ flipMap = Map.fromList . map swap . Map.toList -astrClafer :: MonadState (Map.Map String Int) m => IClafer -> m IClafer +astrClafer :: Functor m => MonadState (Map.Map String Int) m => IClafer -> m IClafer astrClafer (IClafer s isAbstract' gcrd' ident' uid' puid' super' reference' crd' gCard elements') = do reference'' <- astrReference reference' elements'' <- astrElement `mapM` elements' return $ IClafer s isAbstract' gcrd' ident' uid' puid' super' reference'' crd' gCard elements'' -astrReference :: MonadState (Map.Map String Int) m => Maybe IReference -> m (Maybe IReference) +astrReference :: Functor m => MonadState (Map.Map String Int) m => Maybe IReference -> m (Maybe IReference) astrReference Nothing = return Nothing astrReference (Just (IReference isSet' ref')) = Just <$> IReference isSet' `liftM` astrPExp ref' -- astrs single subclafer -astrElement :: MonadState (Map.Map String Int) m => IElement -> m IElement +astrElement :: Functor m => MonadState (Map.Map String Int) m => IElement -> m IElement astrElement x = case x of IEClafer clafer -> IEClafer `liftM` astrClafer clafer IEConstraint isHard' pexp -> IEConstraint isHard' `liftM` astrPExp pexp IEGoal isMaximize' pexp -> IEGoal isMaximize' `liftM` astrPExp pexp -astrPExp :: MonadState (Map.Map String Int) m => PExp -> m PExp +astrPExp :: Functor m => MonadState (Map.Map String Int) m => PExp -> m PExp astrPExp (PExp (Just TString) pid' pos' exp') = PExp (Just TInteger) pid' pos' `liftM` astrIExp exp' astrPExp (PExp t pid' pos' (IFunExp op' exps')) = PExp t pid' pos' `liftM` @@ -66,7 +68,7 @@ (IDeclPExp quant' oDecls' `liftM` (astrPExp bpexp')) astrPExp x = return x -astrIExp :: MonadState (Map.Map String Int) m => IExp -> m IExp +astrIExp :: Functor m => MonadState (Map.Map String Int) m => IExp -> m IExp astrIExp x = case x of IFunExp op' exps' -> IFunExp op' `liftM` mapM astrPExp exps' IStr str -> do
src/Language/Clafer/Intermediate/Tracing.hs view
@@ -214,6 +214,7 @@ EUnionCom _ s1 s2 -> traverseExp s1 ++ traverseExp s2 EDifference _ s1 s2 -> traverseExp s1 ++ traverseExp s2 EIntersection _ s1 s2 -> traverseExp s1 ++ traverseExp s2 + EIntersectionDeprecated _ s1 s2 -> traverseExp s1 ++ traverseExp s2 EDomain _ s1 s2 -> traverseExp s1 ++ traverseExp s2 ERange _ s1 s2 -> traverseExp s1 ++ traverseExp s2 EJoin _ s1 s2 -> traverseExp s1 ++ traverseExp s2
src/Language/Clafer/Intermediate/TypeSystem.hs view
@@ -25,6 +25,7 @@ import Language.Clafer.Common import Language.Clafer.Intermediate.Intclafer hiding (uid) +import Control.Applicative import Control.Lens ((&), (<&>), (%~)) import Control.Monad (mplus, liftM) import Data.List (nub) @@ -43,14 +44,14 @@ EmplID -> integer Alice : Student - [ this.DOB.ref = 1990 ] - [ this.StudentID.ref = "123Alice" ] + [ this.DOB.dref = 1990 ] + [ this.StudentID.dref = "123Alice" ] Bob : Employee - [ this.EmplID.ref = 345 ] + [ this.EmplID.dref = 345 ] AliceAndBob -> Person -[ root.AliceAndBob.ref = Alice, Bob ] +[ root.AliceAndBob.dref = Alice, Bob ] AliceAndBob2 -> Alice ++ Bob -} @@ -117,6 +118,11 @@ isTString (TUnion un') = any isTString un' isTString _ = False +isTBoolean :: IType -> Bool +isTBoolean TBoolean = True +isTBoolean (TMap _ ta') = isTBoolean ta' +isTBoolean (TUnion un') = any isTBoolean un' +isTBoolean _ = False -- | Get TClafer for a given Clafer -- can only be called after inheritance resolver @@ -132,8 +138,8 @@ -- can only be called after inheritance resolver getTClaferByUID :: UIDIClaferMap -> UID -> Maybe IType getTClaferByUID uidIClaferMap' uid' = case uid' of - "root" -> Just $ rootTClafer - "clafer" -> Just $ claferTClafer + "root" -> Just rootTClafer + "clafer" -> Just claferTClafer _ -> findIClafer uidIClaferMap' uid' <&> getTClafer -- | Get TClafer for a given Clafer by its UID @@ -164,14 +170,14 @@ hierarchy :: (Monad m) => UIDIClaferMap -> UID -> m [IClafer] -hierarchy uidIClaferMap' uid' = (case findIClafer uidIClaferMap' uid' of +hierarchy uidIClaferMap' uid' = case findIClafer uidIClaferMap' uid' of Nothing -> fail $ "TypeSystem.hierarchy: clafer " ++ uid' ++ "not found!" - Just clafer -> return $ findHierarchy getSuper uidIClaferMap' clafer) + Just clafer -> return $ findHierarchy getSuper uidIClaferMap' clafer hierarchyMap :: (Monad m) => UIDIClaferMap -> (IClafer -> a) -> UID -> m [a] -hierarchyMap uidIClaferMap' f c = (case findIClafer uidIClaferMap' c of +hierarchyMap uidIClaferMap' f c = case findIClafer uidIClaferMap' c of Nothing -> fail $ "TypeSystem.hierarchyMap: clafer " ++ c ++ "not found!" - Just clafer -> return $ mapHierarchy f getSuper uidIClaferMap' clafer) + Just clafer -> return $ mapHierarchy f getSuper uidIClaferMap' clafer {- --------------------------------------- @@ -190,7 +196,7 @@ fromUnionType :: [String] -> Maybe IType fromUnionType u = - case nub $ u of + case nub u of ["string"] -> Just TString ["integer"] -> Just TInteger ["int"] -> Just TInteger @@ -230,6 +236,7 @@ TClafer {_hi = ["Alice","Student","Person"]} -} (+++) :: IType -> IType -> IType +TBoolean +++ TBoolean = TBoolean TString +++ TString = TString TReal +++ TReal = TReal TDouble +++ TDouble = TDouble @@ -237,7 +244,7 @@ t1@(TClafer u1) +++ t2@(TClafer u2) = if t1 == t2 then t1 else (TClafer $ nub $ u1 ++ u2) -- should be TUnion [t1,t2] -(TMap so1 ta1) +++ (TMap so2 ta2) = (TMap (so1 +++ so2) (ta1 +++ ta2)) +(TMap so1 ta1) +++ (TMap so2 ta2) = TMap (so1 +++ so2) (ta1 +++ ta2) (TUnion un1) +++ (TUnion un2) = collapseUnion (TUnion $ nub $ un1 ++ un2) (TUnion un1) +++ t2 = collapseUnion (TUnion $ nub $ un1 ++ [t2]) t1 +++ (TUnion un2) = collapseUnion (TUnion $ nub $ t1:un2) @@ -312,11 +319,11 @@ intersection uidIClaferMap' (TMap _ ta1) ot2 = do coercedType <- intersection uidIClaferMap' ta1 ot2 -- that means ot2 was coerced to ta1, so it's safe - return $ if (Just ta1) == coercedType then coercedType else Nothing + return $ if Just ta1 == coercedType then coercedType else Nothing intersection uidIClaferMap' ot1 (TMap _ ta2) = do coercedType <- intersection uidIClaferMap' ot1 ta2 -- that means ot2 was coerced to ta1, so it's safe - return $ if (Just ta2) == coercedType then coercedType else Nothing + return $ if Just ta2 == coercedType then coercedType else Nothing intersection _ _ _ = do -- traceM $ "(DEBUG) TypeSystem.intersection: cannot intersect incompatible types: '" -- ++ show t1 @@ -334,6 +341,58 @@ -- where -- contains i is = if i `elem` is then Just i else Nothing +-- | This function is similar to 'intersection', but takes into account more ancestors to be able to combine +-- clafers of different types, but with a common ancestor: +-- Inputs: +-- t1 is of type B +-- t2 is of type C +-- B : A +-- C : A +-- Outputs: +-- the resulting type is: A, and the type combination is valid +getIfThenElseType :: Monad m => UIDIClaferMap -> IType -> IType -> m (Maybe IType) +getIfThenElseType _ TBoolean TBoolean = return $ Just TBoolean +getIfThenElseType _ TString TString = return $ Just TString +getIfThenElseType _ TReal TReal = return $ Just TReal +getIfThenElseType _ TReal TDouble = return $ Just TReal +getIfThenElseType _ TDouble TReal = return $ Just TReal +getIfThenElseType _ TReal TInteger = return $ Just TReal +getIfThenElseType _ TInteger TReal = return $ Just TReal +getIfThenElseType _ TDouble TDouble = return $ Just TDouble +getIfThenElseType _ TDouble TInteger = return $ Just TDouble +getIfThenElseType _ TInteger TDouble = return $ Just TDouble +getIfThenElseType _ TInteger TInteger = return $ Just TInteger +getIfThenElseType uidIClaferMap' (TUnion t1s) t2@(TClafer _) = undefined {- o + t1s' <- mapM (getIfThenElseType uidIClaferMap' t2) t1s + return $ case catMaybes t1s' of + [] -> Nothing + [t] -> Just t + t1s'' -> Just $ TUnion t1s'' -} +getIfThenElseType uidIClaferMap' t1@(TClafer _) (TUnion t2s) = undefined {- do + t2s' <- mapM (getIfThenElseType uidIClaferMap' t1) t2s + return $ case catMaybes t2s' of + [] -> Nothing + [t] -> Just t + t2s'' -> Just $ TUnion t2s'' -} +getIfThenElseType uidIClaferMap' t@(TClafer ut1) (TClafer ut2) = if ut1 == ut2 + then return $ Just t + else do + h1 <- mapM (hierarchyMap uidIClaferMap' _uid) ut1 + h2 <- mapM (hierarchyMap uidIClaferMap' _uid) ut2 + let ut = catMaybes [commonHierarchy u1 u2 | u1 <- h1, u2 <- h2] + return $ fromUnionType ut + where + commonHierarchy :: [UID] -> [UID] -> Maybe UID + commonHierarchy h1 h2 = commonHierarchy' (reverse h1) (reverse h2) Nothing + commonHierarchy' (x:xs) (y:ys) accumulator = + if (x == y) + then + if (null xs || null ys) + then Just x + else commonHierarchy' xs ys $ Just x + else accumulator + commonHierarchy' _ _ _ = error "ResolverType.commonHierarchy' expects two non empty lists but was given at least one empty list!" -- Should never happen +getIfThenElseType _ _ _ = return Nothing {- | Compute the type of sequential composition of two types @@ -409,7 +468,14 @@ getTClafers _ _ = [] -{- Coersions -} +{- Coersions +>>> coerce tDrefMapDOB tDrefMapDOB +TInteger +>>> coerce tDrefMapDOB TInteger +TInteger +>>> coerce tDrefMapDOB tDrefMapDOB +TInteger +-} coerce :: IType -> IType -> IType -- basic coersions @@ -423,8 +489,9 @@ coerce TInteger TDouble = TDouble coerce TInteger TInteger = TInteger -- reduce complex types to simple ones -coerce (TMap s1 t1) t2 = TMap s1 $ coerce t1 t2 -coerce t1 (TMap s2 t2) = TMap s2 $ coerce t1 t2 +coerce (TMap _ t1) (TMap _ t2) = coerce t1 t2 +coerce (TMap _ t1) t2 = coerce t1 t2 +coerce t1 (TMap _ t2) = coerce t1 t2 coerce x y = error $ "TypeSystem.coerce: Cannot coerce not numeric: " ++ show x ++ " and " ++ show y
src/Language/Clafer/Optimizer/Optimizer.hs view
@@ -33,6 +33,7 @@ import Language.Clafer.Common import Language.Clafer.ClaferArgs +import Language.Clafer.Front.AbsClafer (Span(..)) import Language.Clafer.Intermediate.Intclafer import Language.ClaferT (ClaferErr, CErr(..)) @@ -123,36 +124,36 @@ IEGoal isMaximize' goal -> IEGoal isMaximize' `liftM` expPExp goal expPExp :: MonadState GEnv m => PExp -> m PExp -expPExp (PExp t pid' pos' exp') = PExp t pid' pos' `liftM` expIExp exp' +expPExp (PExp t pid' pos' exp') = PExp t pid' pos' `liftM` expIExp pos' exp' -expIExp :: MonadState GEnv m => IExp -> m IExp -expIExp x = case x of +expIExp :: MonadState GEnv m => Span -> IExp -> m IExp +expIExp pos' x = case x of IDeclPExp quant' decls' pexp -> do decls'' <- mapM expDecl decls' pexp' <- expPExp pexp return $ IDeclPExp quant' decls'' pexp' IFunExp op' exps' -> if op' == iJoin - then expNav x else IFunExp op' `liftM` mapM expPExp exps' - IClaferId _ _ _ _ -> expNav x + then expNav pos' x else IFunExp op' `liftM` mapM expPExp exps' + IClaferId _ _ _ _ -> expNav pos' x _ -> return x expDecl :: MonadState GEnv m => IDecl -> m IDecl expDecl x = case x of IDecl disj locids pexp -> IDecl disj locids `liftM` expPExp pexp -expNav :: MonadState GEnv m => IExp -> m IExp -expNav x = do +expNav :: MonadState GEnv m => Span -> IExp -> m IExp +expNav pos' x = do xs <- split' x return - xs' <- mapM (expNav' "") xs - return $ mkIFunExp iUnion $ map fst xs' + xs' <- mapM (expNav' pos' "") xs + return $ mkIFunExp pos' iUnion $ map fst xs' -expNav' :: MonadState GEnv m => String -> IExp -> m (IExp, String) -expNav' context (IFunExp _ (p0:p:_)) = do - (exp0', context') <- expNav' context $ _exp p0 - (exp', context'') <- expNav' context' $ _exp p +expNav' :: MonadState GEnv m => Span -> String -> IExp -> m (IExp, String) +expNav' pos' context (IFunExp _ (p0:p:_)) = do + (exp0', context') <- expNav' pos' context $ _exp p0 + (exp', context'') <- expNav' pos' context' $ _exp p return (IFunExp iJoin [ p0 {_exp = exp0'} , p {_exp = exp'}], context'') -expNav' context x@(IClaferId modName' id' isTop' bind' ) = do +expNav' pos' context x@(IClaferId modName' id' isTop' bind' ) = do st <- gets stable if Map.member id' st then do @@ -160,11 +161,11 @@ let (impls', context') = maybe (impls, "") (\y -> ([[head y]], head y)) $ find (\z -> context == (head.tail) z) impls - return (mkIFunExp iUnion $ map (\u -> IClaferId modName' u isTop' bind') $ + return (mkIFunExp pos' iUnion $ map (\u -> IClaferId modName' u isTop' bind') $ map head impls', context') else do return (x, id') -expNav' _ _ = error "Function expNav' from Optimizer expects an argument of type ClaferId or IFunExp but was given another IExp" +expNav' pos' _ _ = error $ "Function expNav' from Optimizer expects an argument of type ClaferId or IFunExp but was given another IExp, " ++ show pos' split' :: MonadState GEnv m => IExp -> (IExp -> m IExp) -> m [IExp] split'(IFunExp _ (p:pexp:_)) f =
src/Language/ClaferT.hs view
@@ -65,6 +65,7 @@ import Language.Clafer.ClaferArgs import Language.Clafer.Common import Language.Clafer.Front.AbsClafer +import Language.Clafer.Front.LexClafer import Language.Clafer.Intermediate.Intclafer import Language.Clafer.Intermediate.Tracing @@ -104,6 +105,7 @@ , cIr :: Maybe (IModule, GEnv, Bool) , frags :: [Pos] -- line numbers of fragment markers , astModuleTrace :: Map.Map Span [Ast] -- can keep the Ast map since it never changes + , otherTokens :: [Token] -- non-parseable tokens: comments and escape blocks } deriving Show -- | This simulates a field in the ClaferEnv that will always recompute the map, @@ -146,6 +148,7 @@ , cIr = Nothing , frags = [] , astModuleTrace = Map.empty + , otherTokens = [] } where args'' = if (CVLGraph `elem` (mode args') ||