hjs (empty) → 0.1
raw patch · 37 files changed
+6069/−0 lines, 37 filesdep +alexdep +basedep +happybuild-type:Customsetup-changedbinary-added
Dependencies added: alex, base, happy, mtl
Files
- .setup-config +1/−0
- AUTHORS +1/−0
- LICENSE +29/−0
- Setup.hs +2/−0
- dist/HJS-0.1.tar.gz binary
- doc/ECMA-262.pdf binary
- hjs.cabal +24/−0
- src/HJS/Interpreter/Interp.hs +214/−0
- src/HJS/Parser/JavaScript.hs +196/−0
- src/HJS/Parser/JavaScriptParser.hs +2021/−0
- src/HJS/Parser/JavaScriptParser.y +431/−0
- src/HJS/Parser/Lexer.hs +260/−0
- src/HJS/Parser/Lexer.x +83/−0
- src/HJS/Parser/LexerM.hs +97/−0
- src/HJS/Parser/ParserMonad.hs +40/−0
- src/HJS/Parser/Regex.hs +68/−0
- src/Main.hs +133/−0
- testsuite/10_expressions.js +15/−0
- testsuite/parsingonly/00_f.js +4/−0
- testsuite/parsingonly/02_semicolon.js +13/−0
- testsuite/parsingonly/04_if.js +3/−0
- testsuite/parsingonly/05_regex.js +18/−0
- testsuite/parsingonly/110_perfect.js +39/−0
- testsuite/parsingonly/120_js.js +73/−0
- testsuite/parsingonly/121_jsdefs.js +171/−0
- testsuite/parsingonly/122_jsexec.js +944/−0
- testsuite/parsingonly/123_jsparse.js +997/−0
- testsuite/parsingonly/15_literals.js +43/−0
- testsuite/parsingonly/20_statements.js +48/−0
- testsuite/parsingonly/25_trycatch.js +32/−0
- testsuite/parsingonly/40_functions.js +28/−0
- testsuite/parsingonly/5_comments.js +3/−0
- testsuite/parsingonly/errorline13.js +13/−0
- testsuite/parsingonly/fn.js +8/−0
- testsuite/parsingonly/regex.txt +2/−0
- utils/FixHappy.exe binary
- utils/FixHappy.hs +15/−0
+ .setup-config view
@@ -0,0 +1,1 @@+LocalBuildInfo {prefix = "C:\\Program Files", bindir = "$prefix\\Haskell\\bin", libdir = "$prefix\\Haskell", libsubdir = "$pkgid\\$compiler", libexecdir = "$prefix\\$pkgid", datadir = "$prefix\\Haskell", datasubdir = "$pkgid", compiler = Compiler {compilerFlavor = GHC, compilerVersion = Version {versionBranch = [6,6], versionTags = []}, compilerPath = "c:\\Software\\haskell\\ghc-6.6.0\\bin\\ghc.exe", compilerPkgTool = "c:\\Software\\haskell\\ghc-6.6.0\\bin\\ghc-pkg.exe"}, buildDir = "dist\\build", packageDeps = [PackageIdentifier {pkgName = "base", pkgVersion = Version {versionBranch = [2,0], versionTags = []}},PackageIdentifier {pkgName = "happy", pkgVersion = Version {versionBranch = [1,16], versionTags = []}},PackageIdentifier {pkgName = "alex", pkgVersion = Version {versionBranch = [2,1,0], versionTags = []}},PackageIdentifier {pkgName = "mtl", pkgVersion = Version {versionBranch = [1,0], versionTags = []}}], withPrograms = [("ar",Program {programName = "ar", programBinName = "ar", programArgs = [], programLocation = FoundOnSystem "c:\\Software\\haskell\\ghc-6.6.0\\bin\\ar.exe"}),("haddock",Program {programName = "haddock", programBinName = "haddock", programArgs = [], programLocation = EmptyLocation}),("pfesetup",Program {programName = "pfesetup", programBinName = "pfesetup", programArgs = [], programLocation = EmptyLocation}),("ranlib",Program {programName = "ranlib", programBinName = "ranlib", programArgs = [], programLocation = FoundOnSystem "c:\\Software\\MinGW\\bin\\ranlib.exe"}),("runghc",Program {programName = "runghc", programBinName = "runghc", programArgs = [], programLocation = FoundOnSystem "c:\\Software\\haskell\\ghc-6.6.0\\bin\\runghc.exe"}),("runhugs",Program {programName = "runhugs", programBinName = "runhugs", programArgs = [], programLocation = FoundOnSystem "c:\\software\\hugs98\\runhugs.exe"})], userConf = False, withHappy = Just "c:\\Software\\haskell\\happy\\happy-1.16\\happy.exe", withAlex = Just "c:\\Software\\haskell\\alex\\alex-2.1.0\\alex.exe", withHsc2hs = Just "c:\\Software\\haskell\\ghc-6.6.0\\bin\\hsc2hs.exe", withC2hs = Nothing, withCpphs = Nothing, withGreencard = Nothing, withVanillaLib = True, withProfLib = False, withProfExe = False, withGHCiLib = True, splitObjs = False}
+ AUTHORS view
@@ -0,0 +1,1 @@+Mark Wassell mwassell@bigpond.net.au
+ LICENSE view
@@ -0,0 +1,29 @@+Copyright 2007, Mark Wassell++All rights reserved.++Redistribution and use in source and binary forms, with or without+modification, are permitted provided that the following conditions are met:++- Redistributions of source code must retain the above copyright notice,+this list of conditions and the following disclaimer.+ +- Redistributions in binary form must reproduce the above copyright notice,+this list of conditions and the following disclaimer in the documentation+and/or other materials provided with the distribution.+ +- The name of the contributors may be not used to endorse or promote +products derived from this software without specific prior written permission. ++THIS SOFTWARE IS PROVIDED BY THE THE CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES,+INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE+THE CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR+SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER+CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT+LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY+OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH+DAMAGE.
+ Setup.hs view
@@ -0,0 +1,2 @@+import Distribution.Simple +main = defaultMain
+ dist/HJS-0.1.tar.gz view
binary file changed (absent → 20 bytes)
+ doc/ECMA-262.pdf view
binary file changed (absent → 720951 bytes)
+ hjs.cabal view
@@ -0,0 +1,24 @@+Name: hjs +Version: 0.1 +Copyright: Mark Wassell 2007 +License: BSD3 +license-file: LICENSE +Author: Mark Wassell<mwassell@bigpond.net.au> +Maintainer: mwassell@bigpond.net.au +Stability: experiemental +Homepage: +Category: Compilers/Interpreters +Build-Depends: base,happy>=1.16,alex>=2.1.0,mtl +Synopsis: Javascript Parser +Description: + A Javascript parser to be extended to an interpreter in later versions. + Parses as per ECMA-262 plus some parts of JS >=1.5 + +Executable: FixHappy +Main-Is: FixHappy.hs +Hs-Source-Dirs: utils + +Executable: hjs +Main-Is: Main.hs +Hs-Source-Dirs: src +
+ src/HJS/Interpreter/Interp.hs view
@@ -0,0 +1,214 @@+{-# OPTIONS -fglasgow-exts #-} +{-# OPTIONS -fallow-overlapping-instances #-} +module HJS.Interpreter.Interp where + +import Control.Monad.Identity +import Control.Monad.Error +import Control.Monad.State + + +import HJS.Parser.JavaScript + +import Data.Map (Map,fromList,lookup,empty,insert) + +class SubType sub sup where + inj :: sub -> sup + prj :: sup -> Maybe sub + +instance SubType a (Either a b) where + inj = Left + prj (Left x) = Just x + prj _ = Nothing + +instance SubType a b => SubType a (Either c b) where + inj = Right . inj + prj (Right a) = prj a + prj _ = Nothing + +data Ref = Ref String deriving Show + +-- Think I should be including Ref (ie what is returned by LeftExpr) into the Value type. +type Value = Either Int (Either String (Either Ref ())) +type Term = AddExpr + +data MyError = NoMsg | Msg String deriving Show + +instance Error MyError where + noMsg = NoMsg + strMsg = Msg + + + +type InterpM = StateT (Map String Value) (ErrorT String Identity) + +instance Show a => Show (InterpM a) where + show s = show $ runIdentity $ runErrorT $ (runStateT s empty) + +class InterpC t where + interp :: t -> InterpM Value + + +instance (InterpC t1, InterpC t2) => InterpC (Either t1 t2) where + interp (Left x) = interp x + interp (Right x) = interp x + +instance InterpC Literal where + interp (LitInt i) = unitInj i + +instance InterpC PrimExpr where + interp (Literal l) = interp l + interp (Ident s) = return $ inj (Ref s) + + + +instance InterpC MemberExpr where + interp (MemPrimExpr p) = interp p + + +instance InterpC NewExpr where + interp (MemberExpr p) = interp p + +-- LeftExpr will return a reference +instance InterpC LeftExpr where + interp (NewExpr n) = interp n + + + +-- PostFix returns a real value, so this is where references get dereferenced +instance InterpC PostFix where + interp (LeftExpr l) = do + r <- interp l + getValue r + + interp (PostInc l) = do + r <- interp l + v <- getValue r -- TODO fixme. + v' <- getValue r `bindPrj` \ i -> + unitInj (i+ 1) + putValue r v' + return v + + +instance InterpC UExpr where + interp (PostFix p) = interp p + +instance InterpC AddExpr where + interp (MultExpr x) = interp x + interp (Plus x y) = liftIt (+) x y + interp (Minus x y) = liftIt (-) x y + +instance InterpC ShiftE where + interp (AddExpr p) = interp p + +instance InterpC RelE where + interp (ShiftE p) = interp p + +instance InterpC EqualE where + interp (RelE p) = interp p + +instance InterpC BitAnd where + interp (EqualE p) = interp p + +instance InterpC BitXOR where + interp (BitAnd p) = interp p + +instance InterpC BitOR where + interp (BitXOR p) = interp p + +instance InterpC LogAnd where + interp (BitOR p) = interp p + +instance InterpC LogOr where + interp (LogAnd p) = interp p + +instance InterpC CondE where + interp (LogOr p) = interp p + +instance InterpC AssignE where + interp (CondE p) = interp p + interp (Assign left AssignNormal right) = do + v <- interp right + r <- interp left + putValue r v + +instance InterpC Expr where + interp (AssignE p) = interp p + +instance InterpC IfStmt where + interp (IfElse e s1 s2) = do + b <- interp e + case prj b of + Just (0::Int) -> interp s2 + _ -> interp s1 + +instance InterpC ItStmt where + interp (DoWhile s e ) = do + v <- interp s + b <- interp e + case prj b of + Just (0::Int) -> return v + _ -> interp (DoWhile s e ) + +instance InterpC Stmt where + interp (ExprStmt p) = interp p + interp (IfStmt p) = interp p + interp (Block xs) = foldM (\v x -> interp x) (Left 0) xs + interp (ItStmt p) = interp p + +instance InterpC SourceElement where + interp (Stmt s) = interp s + +instance InterpC JSProgram where + interp (JSProgram xs) = foldM (\v x -> interp x) (Left 0) xs + + + +liftIt f x y = interp x `bindPrj`\i -> + interp y `bindPrj` \j -> + unitInj ((f i j)) + +liftIt2 g x y = interp x `bindPrj`\i -> + interp y `bindPrj` \j -> g i j + +instance InterpC MultExpr where + interp (UExpr x) = interp x + interp (Times x y) = liftIt (*) x y + interp (Div x y) = liftIt2 (\i j -> + if j == 0 then + throwError "Divide by Zero" + else + unitInj ((i `div` j )::Int)) x y + + interp (Mod x y) = liftIt2 (\i j -> + if j == 0 then + throwError "Divide by Zero" + else + unitInj ((i `mod` j )::Int)) x y + +unitInj = return . inj + +m `bindPrj` k = + m >>= \a -> + case (prj a) of + Just x -> k x + Nothing -> error "Run time error" + + +-- Get value from environment if Value is a reference, throwError if it isn't +getValue :: Value -> InterpM Value +getValue v = do + env <- get + case prj v of + ((Just (Ref s))::Maybe Ref) -> case Data.Map.lookup s env of + Just val -> return val + Nothing -> throwError ("Error: Unbound reference " ++ s) + _ -> return v + + +putValue :: Value -> Value -> InterpM Value +putValue r v = do + env <- get + case prj r of + ((Just (Ref s))::Maybe Ref) -> put (insert s v env) >>= \_ -> return v + _ -> throwError "Error: Invalid Reference" +
+ src/HJS/Parser/JavaScript.hs view
@@ -0,0 +1,196 @@+module HJS.Parser.JavaScript where + + +class EmitHaskell a where + eHs :: a -> String + +data Literal = LitInt Int + | LitString String + deriving Show + +data PrimExpr + = Literal Literal + | Ident String + | Brack Expr + | This + | Regex String + | Array ArrayLit + | Object [Either (PropName, AssignE) GetterPutter ] + deriving Show + +data GetterPutter = + GetterPutter String FuncDecl | Putter FuncDecl deriving Show + +data PropName = PropNameId String | PropNameStr String | PropNameInt Int + deriving Show + +data ArrayLit = ArrSimple [AssignE] + deriving Show + +data MemberExpr = MemPrimExpr PrimExpr + | ArrayExpr MemberExpr Expr + | MemberNew MemberExpr [AssignE] + | MemberCall MemberExpr String + deriving Show + +data CallExpr = CallMember MemberExpr [AssignE] + | CallCall CallExpr [AssignE] + | CallSquare CallExpr Expr + | CallDot CallExpr String + deriving Show + +data NewExpr = MemberExpr MemberExpr + | NewNewExpr NewExpr + deriving Show + +data LeftExpr = NewExpr NewExpr + | CallExpr CallExpr + deriving Show + +data PostFix = LeftExpr LeftExpr + | PostInc LeftExpr + | PostDec LeftExpr + deriving Show + +data UExpr = PostFix PostFix + | Delete UExpr + | Void UExpr + | TypeOf UExpr + | DoublePlus UExpr + | DoubleMinus UExpr + | UnaryPlus UExpr + | UnaryMinus UExpr + | Not UExpr + | BitNot UExpr + deriving Show + + +data MultExpr = UExpr UExpr + | Times MultExpr UExpr + | Div MultExpr UExpr + | Mod MultExpr UExpr deriving Show + +data AddExpr = MultExpr MultExpr + | Plus AddExpr MultExpr + | Minus AddExpr MultExpr + deriving Show + +data ShiftE = AddExpr AddExpr + | ShiftLeft ShiftE AddExpr + | ShiftRight ShiftE AddExpr + | ShiftRight2 ShiftE AddExpr + deriving Show + +data RelE = ShiftE ShiftE + | LessThan RelE ShiftE + | GreaterThan RelE ShiftE + | LessEqual RelE ShiftE + | GreaterEqual RelE ShiftE + | InstanceOf RelE ShiftE + | InObject RelE ShiftE + deriving Show + +data EqualE = RelE RelE + | Equal EqualE RelE + | NotEqual EqualE RelE + | Equal2 EqualE RelE + | NotEqual2 EqualE RelE + + deriving Show + +data BitAnd = EqualE EqualE + | BABitAnd BitAnd EqualE + deriving Show + +data BitXOR = BitAnd BitAnd + | BXBitXOR BitXOR BitAnd + deriving Show + +data BitOR = BitXOR BitXOR + | BOBitOR BitOR BitXOR + deriving Show + +data LogAnd = BitOR BitOR + | LALogAnd LogAnd BitOR + deriving Show +data LogOr = LogAnd LogAnd + | LOLogOr LogOr LogAnd + deriving Show + +data CondE = LogOr LogOr + | CondIf LogOr AssignE AssignE + deriving Show + +data AssignOp = AssignNormal + | AssignOpMult + | AssignOpDiv + | AssignOpMod + | AssignOpPlus + | AssignOpMinus deriving Show + +data AssignE = CondE CondE + | Assign LeftExpr AssignOp AssignE + | AEFuncDecl FuncDecl + deriving Show + + + +data Expr = AssignE AssignE + deriving Show + +data VarDecl = VarDecl String (Maybe AssignE) deriving Show + +data IfStmt = IfElse Expr Stmt Stmt + | IfOnly Expr Stmt + | If2 Expr + | If3 + deriving Show + +data ItStmt = DoWhile Stmt Expr + | While Expr Stmt + | For (Maybe Expr) (Maybe Expr) (Maybe Expr) Stmt + | ForVar [VarDecl] (Maybe Expr) (Maybe Expr) Stmt + | ForIn [VarDecl] Expr Stmt + | It2 Expr + deriving Show + +data TryStmt = TryBC [Stmt] [Catch] + | TryBF [Stmt] [Stmt] + | TryBCF [Stmt] [Catch] [Stmt] + deriving Show + +data Catch = Catch String [Stmt] | CatchIf String [Stmt] Expr + deriving Show + +data Stmt = IfStmt IfStmt | EmptyStmt | ExprStmt Expr | ItStmt ItStmt | Block [Stmt] + | VarStmt [VarDecl ] + | TryStmt TryStmt + | ContStmt (Maybe String) + | BreakStmt (Maybe String) + | ReturnStmt (Maybe Expr) + | WithStmt Expr Stmt + | LabelledStmt String Stmt + | Switch Switch + | ThrowExpr Expr + deriving Show + +data Switch = SSwitch Expr CaseBlock + deriving Show + +data CaseBlock = CaseBlock [CaseClause] [DefaultClause] [CaseClause] + deriving Show + +data CaseClause = CaseClause Expr [Stmt] + deriving Show + +data DefaultClause = DefaultClause [Stmt] + deriving Show + +data FuncDecl = FuncDecl (Maybe String) [String] [SourceElement] + deriving Show + +data SourceElement = Stmt Stmt | SEFuncDecl FuncDecl + deriving Show + +data JSProgram = JSProgram [SourceElement] + deriving Show
+ src/HJS/Parser/JavaScriptParser.hs view
@@ -0,0 +1,2021 @@+{-# OPTIONS -cpp #-} +module HJS.Parser.JavaScriptParser where + +import Data.Char +import Control.Monad.State +import Control.Monad.Error + +import HJS.Parser.Lexer +import HJS.Parser.LexerM +import HJS.Parser.JavaScript +import HJS.Parser.ParserMonad +#if __GLASGOW_HASKELL__ >= 503 +import Data.Array +#else +import Array +#endif + +-- parser produced by Happy Version 1.16 + +data HappyAbsSyn t5 t6 t7 t8 t9 t11 t12 t13 t14 t15 t16 t18 t19 t20 t21 t22 t23 t24 t25 t26 t27 t28 t29 t30 t31 t32 t33 t34 t35 t36 t37 t38 t39 t40 t41 t42 t43 t44 t45 t46 t47 t48 t49 t50 t51 t52 t53 t54 t55 t56 t57 t58 t59 t60 t61 t62 t63 t64 t65 t66 + = HappyTerminal Token + | HappyErrorToken Int + | HappyAbsSyn5 t5 + | HappyAbsSyn6 t6 + | HappyAbsSyn7 t7 + | HappyAbsSyn8 t8 + | HappyAbsSyn9 t9 + | HappyAbsSyn10 (PrimExpr) + | HappyAbsSyn11 t11 + | HappyAbsSyn12 t12 + | HappyAbsSyn13 t13 + | HappyAbsSyn14 t14 + | HappyAbsSyn15 t15 + | HappyAbsSyn16 t16 + | HappyAbsSyn17 (MemberExpr) + | HappyAbsSyn18 t18 + | HappyAbsSyn19 t19 + | HappyAbsSyn20 t20 + | HappyAbsSyn21 t21 + | HappyAbsSyn22 t22 + | HappyAbsSyn23 t23 + | HappyAbsSyn24 t24 + | HappyAbsSyn25 t25 + | HappyAbsSyn26 t26 + | HappyAbsSyn27 t27 + | HappyAbsSyn28 t28 + | HappyAbsSyn29 t29 + | HappyAbsSyn30 t30 + | HappyAbsSyn31 t31 + | HappyAbsSyn32 t32 + | HappyAbsSyn33 t33 + | HappyAbsSyn34 t34 + | HappyAbsSyn35 t35 + | HappyAbsSyn36 t36 + | HappyAbsSyn37 t37 + | HappyAbsSyn38 t38 + | HappyAbsSyn39 t39 + | HappyAbsSyn40 t40 + | HappyAbsSyn41 t41 + | HappyAbsSyn42 t42 + | HappyAbsSyn43 t43 + | HappyAbsSyn44 t44 + | HappyAbsSyn45 t45 + | HappyAbsSyn46 t46 + | HappyAbsSyn47 t47 + | HappyAbsSyn48 t48 + | HappyAbsSyn49 t49 + | HappyAbsSyn50 t50 + | HappyAbsSyn51 t51 + | HappyAbsSyn52 t52 + | HappyAbsSyn53 t53 + | HappyAbsSyn54 t54 + | HappyAbsSyn55 t55 + | HappyAbsSyn56 t56 + | HappyAbsSyn57 t57 + | HappyAbsSyn58 t58 + | HappyAbsSyn59 t59 + | HappyAbsSyn60 t60 + | HappyAbsSyn61 t61 + | HappyAbsSyn62 t62 + | HappyAbsSyn63 t63 + | HappyAbsSyn64 t64 + | HappyAbsSyn65 t65 + | HappyAbsSyn66 t66 + +happyActOffsets :: Array Int Int +happyActOffsets = listArray (0,331) ([137,655,137,0,417,0,0,0,0,121,0,79,46,0,0,76,313,156,127,160,447,468,464,449,14,0,0,0,0,0,0,0,409,0,0,0,0,408,0,137,0,0,445,0,641,641,0,592,641,641,641,641,592,68,641,641,641,448,0,137,444,438,0,440,440,17,652,402,26,20,592,579,429,428,372,0,8,372,5,0,422,0,433,0,0,592,592,393,0,0,391,389,0,378,0,253,137,77,0,0,420,426,414,0,416,394,519,592,350,592,280,0,0,0,0,-1,386,4,385,74,0,0,0,0,0,388,0,0,137,0,0,592,641,641,641,641,641,641,641,641,641,641,641,641,641,641,641,641,641,641,641,641,641,641,641,592,0,0,0,0,0,0,0,0,0,507,384,592,0,383,592,0,347,0,345,0,296,0,0,0,0,0,0,76,76,277,277,277,156,156,156,156,156,156,127,127,127,127,160,377,363,375,364,362,0,0,592,0,0,0,0,369,368,365,0,322,23,9,367,367,0,592,266,0,366,0,200,0,0,358,326,0,0,0,0,349,334,592,146,0,0,0,305,137,0,337,0,0,242,300,335,0,0,10,592,592,592,137,592,137,0,592,0,592,0,0,0,0,284,321,0,274,314,271,592,592,0,137,283,-7,0,0,250,-25,0,592,270,592,137,239,137,293,246,592,137,592,222,137,0,0,260,0,237,592,137,0,226,232,0,223,0,143,0,203,137,-22,137,136,0,0,199,137,137,0,0,137,0,137,0,137,0,0 + ]) + +happyGotoOffsets :: Array Int Int +happyGotoOffsets = listArray (0,331) ([390,158,329,0,0,0,0,0,0,186,0,174,142,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,451,0,0,0,0,3443,3424,0,2465,3405,3386,3367,3348,2426,713,3329,3310,3291,0,0,1545,0,0,0,213,211,109,695,126,0,0,1918,1879,0,0,0,0,88,0,0,0,0,0,100,0,0,2387,2348,0,0,0,0,0,0,0,0,-15,869,130,0,0,0,94,0,0,83,0,1597,2309,0,2270,0,0,0,0,0,1493,0,86,0,0,0,0,0,0,0,0,0,0,1441,0,0,2738,2777,2805,2832,2858,2883,2976,2953,2930,2907,3109,3087,3065,3043,3021,2999,3173,3152,3131,3214,3194,3272,3253,3234,2699,0,0,0,0,0,0,0,0,0,2231,0,2191,0,0,2152,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2660,0,0,0,0,0,0,0,0,0,0,57,208,56,0,2621,0,0,33,0,206,0,0,0,53,0,0,0,0,0,0,2582,212,0,0,0,-8,1389,0,0,0,0,0,0,0,0,0,0,1840,2113,1801,1337,2074,1285,0,2543,0,2504,0,0,0,0,0,0,0,0,0,0,1762,2035,0,268,0,0,0,0,164,114,0,1996,2,1957,207,0,451,0,0,1723,1233,1684,0,1181,0,0,0,0,0,1645,1129,0,0,0,0,0,0,65,0,0,817,-40,765,-19,0,0,0,1077,1025,0,0,973,0,921,0,921,0,0 + ]) + +happyDefActions :: Array Int Int +happyDefActions = listArray (0,331) ([0,0,0,-11,0,-12,-29,-13,-14,-33,-43,-44,-45,-48,-58,-62,-65,-69,-76,-81,-83,-85,-87,-89,-91,-100,-102,-134,-170,-103,-104,-119,0,-106,-107,-108,-117,-171,0,-167,-168,-4,-10,-5,0,0,-6,0,0,0,0,0,-17,0,0,0,0,0,-105,0,0,0,-9,0,0,0,0,0,0,0,0,0,0,0,0,-10,0,0,0,-22,0,-28,-26,-27,-20,0,0,0,-101,-114,0,0,-112,0,-110,0,-121,-33,-34,-160,0,-163,-125,-147,-150,-124,-145,0,0,0,-45,-51,-50,-49,-122,0,-4,-10,-5,0,-18,-53,-52,-57,-56,0,-55,-54,0,-169,-135,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-98,-46,-47,-93,-94,-95,-96,-97,-36,0,0,0,-35,0,0,-8,0,-31,0,-38,0,-41,-39,-99,-61,-60,-59,-64,-63,-68,-67,-66,-75,-74,-71,-73,-72,-70,-80,-79,-78,-77,-82,-84,-86,-88,-90,0,-116,-15,0,-16,-25,-123,-120,0,0,0,-146,0,0,-10,0,0,-149,0,0,-164,-163,-32,-126,-129,-127,0,0,-109,-111,-118,-113,0,0,0,0,-21,-23,-24,0,0,-133,0,-130,-128,0,0,0,-151,-148,0,-145,0,-145,0,0,0,-19,0,-40,0,-37,-30,-42,-92,-137,0,-139,0,0,0,-145,0,-165,0,0,0,-115,-152,-155,0,-156,0,0,0,0,0,-166,0,0,-145,0,-145,0,0,-136,-138,0,-144,0,-145,0,-161,0,0,-131,0,-157,-155,-153,0,-121,0,-121,0,-162,-143,0,0,0,-140,-142,0,-132,-158,-154,-159,-141 + ]) + +happyCheck :: Array Int Int +happyCheck = listArray (0,3518) ([-1,2,3,4,11,6,7,3,9,10,2,3,4,53,5,40,35,12,40,15,3,12,12,3,39,40,41,10,14,3,16,32,33,34,35,12,37,35,39,40,41,42,43,51,51,40,71,72,40,71,51,5,53,54,55,56,57,58,59,60,61,62,53,53,65,66,67,68,69,70,2,3,4,53,6,7,53,9,10,53,34,35,73,73,8,9,12,10,35,10,57,45,46,47,48,49,73,9,10,11,32,33,34,35,48,37,49,39,40,41,42,43,38,36,37,36,37,52,53,51,44,53,54,55,56,57,58,59,60,61,62,10,49,65,66,67,68,69,70,2,3,4,56,6,7,15,9,10,2,3,4,57,25,26,27,28,56,36,37,1,2,35,4,5,6,56,8,53,54,32,33,34,35,31,37,39,39,50,41,42,43,21,22,23,24,29,30,31,51,15,53,54,55,56,57,58,59,60,61,62,73,15,65,66,67,68,69,70,1,2,11,4,5,6,71,8,52,53,15,12,13,14,10,11,17,18,19,20,21,22,23,24,25,26,27,28,29,30,15,32,33,34,35,11,37,38,40,41,11,42,43,44,45,11,12,47,48,50,47,48,47,48,55,63,64,58,40,60,61,1,2,11,4,5,6,53,8,11,12,40,12,13,14,6,7,17,18,19,20,21,22,23,24,25,26,27,28,29,30,53,32,33,34,35,11,37,38,11,12,39,42,43,44,45,34,35,63,64,50,6,7,71,39,55,53,11,58,53,60,61,1,2,11,4,5,6,52,8,3,39,3,12,13,14,39,11,17,18,19,20,21,22,23,24,25,26,27,28,29,30,11,32,33,34,35,39,37,38,10,3,3,42,43,44,45,53,11,15,10,50,11,17,19,38,55,38,3,3,59,60,61,1,2,18,4,5,6,20,8,11,15,15,12,13,14,55,12,17,18,19,20,21,22,23,24,25,26,27,28,29,30,5,32,33,34,35,12,37,38,3,10,53,42,43,44,45,3,15,10,10,50,39,53,3,53,55,53,75,10,59,60,61,1,2,10,4,5,6,10,8,15,53,53,12,13,14,17,20,17,18,19,20,21,22,23,24,25,26,27,28,29,30,18,32,33,34,35,19,37,38,-1,74,-1,42,43,44,45,-1,-1,-1,-1,50,-1,-1,-1,-1,55,-1,-1,2,3,4,61,6,7,-1,9,10,11,-1,-1,2,3,4,-1,6,7,-1,9,10,-1,-1,-1,-1,-1,-1,-1,-1,-1,32,33,34,35,-1,37,-1,39,-1,41,42,43,32,33,34,35,-1,37,-1,39,-1,41,42,43,-1,57,-1,-1,60,61,-1,-1,-1,-1,-1,-1,-1,57,58,-1,60,61,2,3,4,-1,6,7,-1,9,10,-1,-1,-1,-1,2,3,4,-1,6,7,-1,9,10,-1,-1,-1,-1,-1,-1,-1,-1,32,33,34,35,-1,37,-1,39,-1,41,42,43,-1,32,33,34,35,-1,37,-1,39,53,41,42,43,57,-1,-1,60,61,-1,-1,2,3,4,-1,6,7,57,9,10,60,61,2,3,4,2,3,4,-1,9,10,-1,9,10,-1,-1,-1,-1,-1,-1,-1,32,33,34,35,-1,37,-1,39,-1,41,42,43,-1,-1,-1,-1,37,-1,39,37,-1,39,-1,1,2,57,4,5,6,61,8,-1,-1,-1,12,13,57,-1,-1,57,61,1,2,-1,4,5,6,-1,8,9,10,11,12,13,14,-1,-1,17,18,19,20,21,22,23,24,25,26,27,28,29,30,-1,32,33,34,35,36,37,38,-1,-1,-1,42,43,44,45,-1,-1,-1,-1,50,-1,-1,1,2,55,4,5,6,-1,8,-1,-1,-1,12,13,14,-1,-1,17,18,19,20,21,22,23,24,25,26,27,28,29,30,-1,32,33,34,35,36,37,38,-1,-1,-1,42,43,44,45,-1,-1,-1,-1,50,-1,-1,1,2,55,4,5,6,-1,8,-1,-1,-1,12,13,14,-1,-1,17,18,19,20,21,22,23,24,25,26,27,28,29,30,-1,32,33,34,35,36,37,38,-1,-1,-1,42,43,44,45,-1,-1,-1,-1,50,-1,-1,1,2,55,4,5,6,-1,8,-1,-1,-1,12,13,14,-1,-1,17,18,19,20,21,22,23,24,25,26,27,28,29,30,-1,32,33,34,35,36,37,38,-1,-1,-1,42,43,44,45,-1,-1,-1,-1,50,-1,-1,1,2,55,4,5,6,-1,8,-1,-1,-1,12,13,14,-1,-1,17,18,19,20,21,22,23,24,25,26,27,28,29,30,-1,32,33,34,35,-1,37,38,-1,-1,-1,42,43,44,45,-1,-1,-1,-1,50,-1,-1,1,2,55,4,5,6,-1,8,-1,-1,-1,12,13,14,-1,-1,17,18,19,20,21,22,23,24,25,26,27,28,29,30,-1,32,33,34,35,-1,37,38,-1,-1,-1,42,43,44,45,-1,-1,-1,-1,50,-1,-1,1,2,55,4,5,6,-1,8,-1,-1,-1,12,13,14,-1,-1,17,18,19,20,21,22,23,24,25,26,27,28,29,30,-1,32,33,34,35,-1,37,38,-1,-1,-1,42,43,44,45,-1,-1,-1,-1,50,-1,-1,1,2,55,4,5,6,-1,8,-1,-1,-1,12,13,14,-1,-1,17,18,19,20,21,22,23,24,25,26,27,28,29,30,-1,32,33,34,35,-1,37,38,-1,-1,-1,42,43,44,45,-1,-1,-1,-1,50,-1,-1,1,2,55,4,5,6,-1,8,-1,-1,-1,12,13,14,-1,-1,17,18,19,20,21,22,23,24,25,26,27,28,29,30,-1,32,33,34,35,-1,37,38,-1,-1,-1,42,43,44,45,-1,-1,-1,-1,50,-1,-1,1,2,55,4,5,6,-1,8,-1,-1,-1,12,13,14,-1,-1,17,18,19,20,21,22,23,24,25,26,27,28,29,30,-1,32,33,34,35,-1,37,38,-1,-1,-1,42,43,44,45,-1,-1,-1,-1,50,-1,-1,1,2,55,4,5,6,-1,8,-1,-1,-1,12,13,14,-1,-1,17,18,19,20,21,22,23,24,25,26,27,28,29,30,-1,32,33,34,35,-1,37,38,-1,-1,-1,42,43,44,45,-1,-1,-1,-1,50,-1,-1,1,2,55,4,5,6,-1,8,-1,-1,-1,12,13,14,-1,-1,17,18,19,20,21,22,23,24,25,26,27,28,29,30,-1,32,33,34,35,-1,37,38,-1,-1,-1,42,43,44,45,-1,-1,-1,-1,50,-1,-1,1,2,55,4,5,6,-1,8,-1,-1,-1,12,13,14,-1,-1,17,18,19,20,21,22,23,24,25,26,27,28,29,30,-1,32,33,34,35,-1,37,38,-1,-1,-1,42,43,44,45,-1,-1,-1,-1,50,-1,-1,1,2,55,4,5,6,-1,8,-1,-1,-1,12,13,14,-1,-1,17,18,19,20,21,22,23,24,25,26,27,28,29,30,-1,32,33,34,35,-1,37,38,-1,-1,-1,42,43,44,45,-1,-1,-1,-1,50,-1,-1,1,2,55,4,5,6,-1,8,-1,-1,-1,12,13,14,-1,-1,17,18,19,20,21,22,23,24,25,26,27,28,29,30,-1,32,33,34,35,-1,37,38,-1,-1,-1,42,43,44,45,-1,-1,-1,-1,50,-1,-1,1,2,55,4,5,6,-1,8,-1,-1,-1,12,13,14,-1,-1,17,18,19,20,21,22,23,24,25,26,27,28,29,30,-1,32,33,34,35,-1,37,38,-1,-1,-1,42,43,44,45,-1,-1,-1,-1,50,-1,-1,1,2,55,4,5,6,-1,8,-1,-1,-1,12,13,14,-1,-1,17,18,19,20,21,22,23,24,25,26,27,28,29,30,-1,32,33,34,35,-1,37,38,-1,-1,-1,42,43,44,45,-1,-1,-1,-1,50,-1,-1,1,2,55,4,5,6,-1,8,-1,-1,-1,12,13,14,-1,-1,17,18,19,20,21,22,23,24,25,26,27,28,29,30,-1,32,33,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,46,47,48,1,2,-1,4,5,6,55,8,-1,-1,-1,12,13,14,-1,-1,17,18,19,20,21,22,23,24,25,26,27,28,29,30,-1,32,33,-1,-1,-1,-1,-1,-1,1,2,-1,4,5,6,46,8,-1,-1,-1,12,13,14,-1,55,17,18,19,20,21,22,23,24,25,26,27,28,29,30,-1,32,33,-1,-1,-1,-1,-1,-1,1,2,-1,4,5,6,46,8,-1,-1,-1,12,13,14,-1,55,17,18,19,20,21,22,23,24,25,26,27,28,29,30,-1,32,33,-1,-1,-1,-1,-1,-1,1,2,-1,4,5,6,46,8,-1,-1,-1,12,13,14,-1,55,17,18,19,20,21,22,23,24,25,26,27,28,29,30,-1,32,33,-1,-1,-1,-1,-1,-1,1,2,-1,4,5,6,46,8,-1,-1,-1,12,13,14,-1,55,17,18,19,20,21,22,23,24,25,26,27,28,29,30,-1,32,33,-1,-1,-1,-1,-1,-1,1,2,-1,4,5,6,46,8,-1,-1,-1,12,13,14,-1,55,17,18,19,20,21,22,23,24,25,26,27,28,29,30,-1,32,33,-1,-1,-1,-1,-1,-1,1,2,-1,4,5,6,46,8,-1,-1,-1,12,13,14,-1,55,17,18,19,20,21,22,23,24,25,26,27,28,29,30,-1,32,33,-1,-1,-1,-1,-1,-1,1,2,42,4,5,6,-1,8,-1,-1,-1,12,13,14,-1,55,17,18,19,20,21,22,23,24,25,26,27,28,29,30,-1,32,33,-1,-1,-1,-1,-1,-1,1,2,42,4,5,6,-1,8,-1,-1,-1,12,13,14,-1,55,17,18,19,20,21,22,23,24,25,26,27,28,29,30,-1,32,33,-1,-1,-1,-1,-1,-1,1,2,-1,4,5,6,-1,8,-1,-1,-1,12,13,14,-1,55,17,18,19,20,21,22,23,24,25,26,27,28,29,30,-1,32,33,-1,-1,-1,-1,-1,-1,1,2,-1,4,5,6,-1,8,-1,-1,-1,12,13,14,-1,55,17,18,19,20,21,22,23,24,25,26,27,28,29,30,-1,32,33,-1,-1,-1,-1,-1,-1,1,2,-1,4,5,6,-1,8,-1,-1,-1,12,13,14,-1,55,17,18,19,20,21,22,23,24,25,26,27,28,29,30,-1,32,33,-1,-1,-1,-1,-1,-1,1,2,-1,4,5,6,-1,8,-1,-1,-1,12,13,14,-1,55,17,18,19,20,21,22,23,24,25,26,27,28,29,30,-1,32,33,-1,-1,-1,-1,-1,-1,1,2,-1,4,5,6,-1,8,-1,-1,-1,12,13,14,-1,55,17,18,19,20,21,22,23,24,25,26,27,28,29,30,-1,32,33,-1,-1,-1,-1,-1,-1,1,2,-1,4,5,6,-1,8,-1,-1,-1,12,13,14,-1,55,17,18,19,20,21,22,23,24,25,26,27,28,29,30,-1,32,33,-1,-1,-1,-1,-1,-1,-1,1,2,-1,4,5,6,-1,8,-1,-1,-1,12,13,14,55,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,-1,32,-1,-1,-1,-1,-1,-1,-1,1,2,-1,4,5,6,-1,8,-1,-1,-1,12,13,14,-1,55,17,18,19,20,21,22,23,24,25,26,27,28,29,30,-1,32,33,-1,-1,-1,-1,-1,-1,1,2,-1,4,5,6,-1,8,-1,-1,-1,12,13,14,-1,55,17,18,19,20,21,22,23,24,25,26,27,28,29,30,-1,32,33,-1,-1,-1,-1,-1,-1,1,2,-1,4,5,6,-1,8,-1,-1,-1,12,13,14,-1,55,17,18,19,20,21,22,23,24,25,26,27,28,29,30,-1,32,33,-1,-1,-1,-1,-1,-1,1,2,-1,4,5,6,-1,8,-1,-1,-1,12,13,14,-1,55,17,18,19,20,21,22,23,24,25,26,27,28,29,30,-1,32,33,-1,-1,-1,-1,-1,-1,1,2,-1,4,5,6,7,8,-1,-1,-1,12,13,14,-1,55,17,18,19,20,21,22,23,24,25,26,27,28,29,30,-1,32,-1,-1,-1,-1,-1,-1,-1,1,2,-1,4,5,6,-1,8,-1,-1,-1,12,13,14,-1,55,17,18,19,20,21,22,23,24,25,26,27,28,29,30,-1,32,33,-1,-1,-1,-1,-1,-1,1,2,-1,4,5,6,-1,8,-1,-1,-1,12,13,14,-1,55,17,18,19,20,21,22,23,24,25,26,27,28,29,30,-1,32,-1,-1,-1,-1,-1,-1,-1,1,2,-1,4,5,6,-1,8,-1,-1,-1,12,13,14,-1,55,17,18,19,20,21,22,23,24,25,26,27,28,29,30,-1,32,-1,-1,-1,-1,-1,-1,-1,1,2,-1,4,5,6,-1,8,-1,-1,-1,12,13,14,-1,55,17,18,19,20,21,22,23,24,25,26,27,28,29,30,-1,32,-1,-1,-1,-1,-1,-1,-1,1,2,-1,4,5,6,-1,8,-1,-1,-1,12,13,14,-1,55,17,18,19,20,21,22,23,24,25,26,27,28,29,30,-1,32,-1,-1,-1,-1,-1,-1,-1,1,2,-1,4,5,6,-1,8,-1,-1,-1,12,13,14,-1,55,17,18,19,20,21,22,23,24,25,26,27,28,29,30,-1,32,-1,-1,-1,-1,-1,-1,-1,1,2,-1,4,5,6,-1,8,-1,-1,-1,12,13,14,-1,55,17,18,19,20,21,22,23,24,25,26,27,28,29,30,-1,32,-1,-1,-1,-1,-1,-1,-1,1,2,-1,4,5,6,-1,8,-1,-1,-1,12,13,14,-1,55,17,18,19,20,21,22,23,24,25,26,27,28,29,30,-1,32,-1,-1,-1,-1,-1,-1,-1,1,2,-1,4,5,6,-1,8,-1,-1,-1,12,13,14,-1,55,17,18,19,20,21,22,23,24,25,26,27,28,1,2,-1,4,5,6,-1,8,-1,-1,-1,12,13,14,-1,-1,17,18,19,20,21,22,23,24,25,26,27,1,2,-1,4,5,6,-1,8,-1,-1,-1,12,13,14,-1,-1,17,18,19,20,21,22,23,24,25,26,1,2,-1,4,5,6,-1,8,-1,-1,-1,12,13,14,-1,-1,17,18,19,20,21,22,23,24,25,1,2,-1,4,5,6,-1,8,-1,-1,-1,12,13,14,-1,-1,17,18,19,20,21,22,23,24,1,2,-1,4,5,6,-1,8,-1,-1,-1,12,13,14,-1,-1,17,18,19,20,21,22,23,1,2,-1,4,5,6,-1,8,-1,-1,-1,12,13,14,-1,-1,17,18,19,20,21,22,23,1,2,-1,4,5,6,-1,8,-1,-1,-1,12,13,14,-1,-1,17,18,19,20,21,22,23,1,2,-1,4,5,6,-1,8,-1,-1,-1,12,13,14,-1,-1,17,18,19,20,21,22,23,1,2,-1,4,5,6,-1,8,-1,-1,-1,12,13,14,-1,-1,17,18,19,20,21,22,1,2,-1,4,5,6,-1,8,-1,-1,-1,12,13,14,-1,-1,17,18,19,20,21,22,1,2,-1,4,5,6,-1,8,-1,-1,-1,12,13,14,-1,-1,17,18,19,20,21,22,1,2,-1,4,5,6,-1,8,-1,-1,-1,12,13,14,-1,-1,17,18,19,20,21,22,1,2,-1,4,5,6,-1,8,-1,-1,-1,12,13,14,-1,-1,17,18,19,20,21,22,1,2,-1,4,5,6,-1,8,-1,-1,-1,12,13,14,-1,-1,17,18,19,20,21,22,1,2,-1,4,5,6,-1,8,-1,-1,-1,12,13,14,-1,-1,17,18,19,20,21,1,2,-1,4,5,6,-1,8,-1,-1,-1,12,13,14,-1,-1,17,18,19,20,21,1,2,-1,4,5,6,-1,8,-1,-1,-1,12,13,14,-1,-1,17,18,19,20,21,1,2,-1,4,5,6,-1,8,-1,-1,-1,12,13,14,-1,-1,17,18,19,20,1,2,-1,4,5,6,-1,8,-1,-1,-1,12,13,14,-1,-1,17,18,19,20,1,2,-1,4,5,6,-1,8,-1,-1,-1,12,13,14,-1,-1,17,18,19,1,2,-1,4,5,6,-1,8,-1,-1,-1,12,13,14,-1,-1,17,18,19,1,2,-1,4,5,6,-1,8,-1,-1,-1,12,13,14,-1,-1,17,18,19,1,2,-1,4,5,6,-1,8,-1,-1,-1,12,13,14,-1,-1,17,18,19,1,2,-1,4,5,6,-1,8,-1,-1,-1,12,13,14,-1,-1,17,18,19,1,2,-1,4,5,6,-1,8,-1,-1,-1,12,13,14,-1,-1,17,18,19,1,2,-1,4,5,6,-1,8,-1,-1,-1,12,13,14,-1,-1,17,18,19,1,2,-1,4,5,6,-1,8,-1,-1,-1,12,13,14,-1,-1,17,18,19,1,2,-1,4,5,6,-1,8,-1,-1,-1,12,13,14,-1,-1,17,18,19,1,2,-1,4,5,6,-1,8,-1,-1,-1,12,13,14,-1,-1,17,18,19,1,2,-1,4,5,6,-1,8,-1,-1,-1,12,13,14,-1,-1,17,18,19,1,2,-1,4,5,6,-1,8,-1,-1,-1,12,13,14,-1,-1,17,18,19,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 + ]) + +happyTable :: Array Int Int +happyTable = listArray (0,3518) ([0,42,43,44,287,45,46,101,47,48,82,83,84,310,222,313,326,239,329,129,101,-150,220,92,226,227,228,102,132,94,133,49,50,51,52,220,53,308,54,211,55,56,57,281,288,240,286,314,85,286,58,157,59,60,61,62,63,64,65,66,67,68,-150,275,69,70,71,72,73,74,117,118,119,93,45,46,255,47,48,95,158,159,-150,276,153,154,207,166,244,166,248,160,161,162,163,164,256,78,79,80,49,50,51,52,252,53,220,54,85,55,56,57,208,170,171,167,168,315,284,58,155,59,60,61,62,63,64,65,66,67,68,166,220,69,70,71,72,73,74,42,43,44,208,45,46,225,47,48,82,83,84,222,142,143,144,145,208,170,171,3,4,95,5,74,7,99,8,310,311,49,50,51,52,155,53,97,54,146,55,56,57,138,139,140,141,148,149,150,58,164,59,60,61,62,63,64,65,66,67,68,147,168,69,70,71,72,73,74,3,4,326,5,6,7,286,8,283,284,315,9,10,11,240,80,12,13,14,15,16,17,18,19,20,21,22,23,24,25,317,26,27,28,29,318,30,31,246,247,322,32,33,34,35,279,251,253,103,36,102,103,105,103,37,230,231,306,319,290,40,3,4,323,5,6,7,300,8,250,251,306,9,10,11,151,152,12,13,14,15,16,17,18,19,20,21,22,23,24,25,304,26,27,28,29,305,30,31,263,264,97,32,33,34,35,158,159,230,231,36,151,152,286,289,37,294,295,289,296,290,40,3,4,297,5,6,7,298,8,277,278,280,9,10,11,283,243,12,13,14,15,16,17,18,19,20,21,22,23,24,25,244,26,27,28,29,97,30,31,246,224,105,32,33,34,35,257,258,262,259,36,260,134,136,265,37,266,174,176,38,39,40,3,4,135,5,6,7,137,8,206,-27,-28,9,10,11,213,220,12,13,14,15,16,17,18,19,20,21,22,23,24,25,222,26,27,28,29,220,30,31,224,225,232,32,33,34,35,101,238,86,87,36,97,233,105,234,37,235,-1,107,77,39,40,3,4,108,5,6,7,110,8,129,-171,131,9,10,11,134,137,12,13,14,15,16,17,18,19,20,21,22,23,24,25,135,26,27,28,29,136,30,31,0,172,0,32,33,34,35,0,0,0,0,36,0,0,0,0,37,0,0,42,76,44,129,45,46,0,47,48,179,0,0,42,218,44,0,45,46,0,47,48,0,0,0,0,0,0,0,0,0,49,50,51,52,0,53,0,77,0,55,56,57,49,50,51,52,0,53,0,77,0,55,56,57,0,63,0,0,66,67,0,0,0,0,0,0,0,63,219,0,66,67,42,76,44,0,45,46,0,47,48,0,0,0,0,42,76,44,0,45,46,0,47,48,0,0,0,0,0,0,0,0,49,50,51,52,0,53,0,77,0,55,56,57,0,49,50,51,52,0,53,0,77,90,55,56,57,63,0,0,66,67,0,0,42,76,44,0,45,46,63,47,48,66,67,42,76,44,42,76,44,0,47,48,0,47,48,0,0,0,0,0,0,0,49,50,51,52,0,53,0,77,0,55,56,57,0,0,0,0,53,0,77,53,0,77,0,3,4,63,5,6,7,67,8,0,0,0,97,98,63,0,0,63,67,3,4,0,5,6,7,0,8,78,79,80,9,10,11,0,0,12,13,14,15,16,17,18,19,20,21,22,23,24,25,0,26,27,114,29,115,30,31,0,0,0,32,33,34,35,0,0,0,0,36,0,0,3,4,88,5,6,7,0,8,0,0,0,9,10,11,0,0,12,13,14,15,16,17,18,19,20,21,22,23,24,25,0,26,27,114,29,327,30,31,0,0,0,32,33,34,35,0,0,0,0,36,0,0,3,4,88,5,6,7,0,8,0,0,0,9,10,11,0,0,12,13,14,15,16,17,18,19,20,21,22,23,24,25,0,26,27,114,29,329,30,31,0,0,0,32,33,34,35,0,0,0,0,36,0,0,3,4,88,5,6,7,0,8,0,0,0,9,10,11,0,0,12,13,14,15,16,17,18,19,20,21,22,23,24,25,0,26,27,114,29,115,30,31,0,0,0,32,33,34,35,0,0,0,0,36,0,0,3,4,88,5,6,7,0,8,0,0,0,9,10,11,0,0,12,13,14,15,16,17,18,19,20,21,22,23,24,25,0,26,27,209,29,0,30,31,0,0,0,32,33,34,35,0,0,0,0,36,0,0,3,4,88,5,6,7,0,8,0,0,0,9,10,11,0,0,12,13,14,15,16,17,18,19,20,21,22,23,24,25,0,26,27,330,29,0,30,31,0,0,0,32,33,34,35,0,0,0,0,36,0,0,3,4,88,5,6,7,0,8,0,0,0,9,10,11,0,0,12,13,14,15,16,17,18,19,20,21,22,23,24,25,0,26,27,323,29,0,30,31,0,0,0,32,33,34,35,0,0,0,0,36,0,0,3,4,88,5,6,7,0,8,0,0,0,9,10,11,0,0,12,13,14,15,16,17,18,19,20,21,22,23,24,25,0,26,27,324,29,0,30,31,0,0,0,32,33,34,35,0,0,0,0,36,0,0,3,4,88,5,6,7,0,8,0,0,0,9,10,11,0,0,12,13,14,15,16,17,18,19,20,21,22,23,24,25,0,26,27,319,29,0,30,31,0,0,0,32,33,34,35,0,0,0,0,36,0,0,3,4,88,5,6,7,0,8,0,0,0,9,10,11,0,0,12,13,14,15,16,17,18,19,20,21,22,23,24,25,0,26,27,298,29,0,30,31,0,0,0,32,33,34,35,0,0,0,0,36,0,0,3,4,88,5,6,7,0,8,0,0,0,9,10,11,0,0,12,13,14,15,16,17,18,19,20,21,22,23,24,25,0,26,27,301,29,0,30,31,0,0,0,32,33,34,35,0,0,0,0,36,0,0,3,4,88,5,6,7,0,8,0,0,0,9,10,11,0,0,12,13,14,15,16,17,18,19,20,21,22,23,24,25,0,26,27,268,29,0,30,31,0,0,0,32,33,34,35,0,0,0,0,36,0,0,3,4,88,5,6,7,0,8,0,0,0,9,10,11,0,0,12,13,14,15,16,17,18,19,20,21,22,23,24,25,0,26,27,270,29,0,30,31,0,0,0,32,33,34,35,0,0,0,0,36,0,0,3,4,88,5,6,7,0,8,0,0,0,9,10,11,0,0,12,13,14,15,16,17,18,19,20,21,22,23,24,25,0,26,27,280,29,0,30,31,0,0,0,32,33,34,35,0,0,0,0,36,0,0,3,4,88,5,6,7,0,8,0,0,0,9,10,11,0,0,12,13,14,15,16,17,18,19,20,21,22,23,24,25,0,26,27,204,29,0,30,31,0,0,0,32,33,34,35,0,0,0,0,36,0,0,3,4,88,5,6,7,0,8,0,0,0,9,10,11,0,0,12,13,14,15,16,17,18,19,20,21,22,23,24,25,0,26,27,209,29,0,30,31,0,0,0,32,33,34,35,0,0,0,0,36,0,0,3,4,88,5,6,7,0,8,0,0,0,9,10,11,0,0,12,13,14,15,16,17,18,19,20,21,22,23,24,25,0,26,27,108,29,0,30,31,0,0,0,32,33,34,35,0,0,0,0,36,0,0,3,4,88,5,6,7,0,8,0,0,0,9,10,11,0,0,12,13,14,15,16,17,18,19,20,21,22,23,24,25,0,26,214,0,0,0,0,0,0,0,0,0,0,0,0,215,216,103,3,4,0,5,6,7,88,8,0,0,0,9,10,11,0,0,12,13,14,15,16,17,18,19,20,21,22,23,24,25,0,26,214,0,0,0,0,0,0,3,4,0,5,6,7,320,8,0,0,0,9,10,11,0,88,12,13,14,15,16,17,18,19,20,21,22,23,24,25,0,26,214,0,0,0,0,0,0,3,4,0,5,6,7,300,8,0,0,0,9,10,11,0,88,12,13,14,15,16,17,18,19,20,21,22,23,24,25,0,26,214,0,0,0,0,0,0,3,4,0,5,6,7,302,8,0,0,0,9,10,11,0,88,12,13,14,15,16,17,18,19,20,21,22,23,24,25,0,26,214,0,0,0,0,0,0,3,4,0,5,6,7,292,8,0,0,0,9,10,11,0,88,12,13,14,15,16,17,18,19,20,21,22,23,24,25,0,26,214,0,0,0,0,0,0,3,4,0,5,6,7,271,8,0,0,0,9,10,11,0,88,12,13,14,15,16,17,18,19,20,21,22,23,24,25,0,26,214,0,0,0,0,0,0,3,4,0,5,6,7,273,8,0,0,0,9,10,11,0,88,12,13,14,15,16,17,18,19,20,21,22,23,24,25,0,26,27,0,0,0,0,0,0,3,4,87,5,6,7,0,8,0,0,0,9,10,11,0,88,12,13,14,15,16,17,18,19,20,21,22,23,24,25,0,26,27,0,0,0,0,0,0,3,4,90,5,6,7,0,8,0,0,0,9,10,11,0,88,12,13,14,15,16,17,18,19,20,21,22,23,24,25,0,26,307,0,0,0,0,0,0,3,4,0,5,6,7,0,8,0,0,0,9,10,11,0,88,12,13,14,15,16,17,18,19,20,21,22,23,24,25,0,26,309,0,0,0,0,0,0,3,4,0,5,6,7,0,8,0,0,0,9,10,11,0,88,12,13,14,15,16,17,18,19,20,21,22,23,24,25,0,26,291,0,0,0,0,0,0,3,4,0,5,6,7,0,8,0,0,0,9,10,11,0,88,12,13,14,15,16,17,18,19,20,21,22,23,24,25,0,26,269,0,0,0,0,0,0,3,4,0,5,6,7,0,8,0,0,0,9,10,11,0,88,12,13,14,15,16,17,18,19,20,21,22,23,24,25,0,26,272,0,0,0,0,0,0,3,4,0,5,6,7,0,8,0,0,0,9,10,11,0,88,12,13,14,15,16,17,18,19,20,21,22,23,24,25,0,26,172,0,0,0,0,0,0,3,4,0,5,6,7,0,8,0,0,0,9,10,11,0,88,12,13,14,15,16,17,18,19,20,21,22,23,24,25,0,26,174,0,0,0,0,0,0,0,3,4,0,5,6,7,0,8,0,0,0,9,10,11,88,176,12,13,14,15,16,17,18,19,20,21,22,23,24,25,0,177,0,0,0,0,0,0,0,3,4,0,5,6,7,0,8,0,0,0,9,10,11,0,88,12,13,14,15,16,17,18,19,20,21,22,23,24,25,0,26,211,0,0,0,0,0,0,3,4,0,5,6,7,0,8,0,0,0,9,10,11,0,88,12,13,14,15,16,17,18,19,20,21,22,23,24,25,0,26,213,0,0,0,0,0,0,3,4,0,5,6,7,0,8,0,0,0,9,10,11,0,88,12,13,14,15,16,17,18,19,20,21,22,23,24,25,0,26,235,0,0,0,0,0,0,3,4,0,5,6,7,0,8,0,0,0,9,10,11,0,88,12,13,14,15,16,17,18,19,20,21,22,23,24,25,0,26,236,0,0,0,0,0,0,3,4,0,5,6,7,119,8,0,0,0,9,10,11,0,88,12,13,14,15,16,17,18,19,20,21,22,23,24,25,0,120,0,0,0,0,0,0,0,3,4,0,5,6,7,0,8,0,0,0,9,10,11,0,88,12,13,14,15,16,17,18,19,20,21,22,23,24,25,0,26,125,0,0,0,0,0,0,3,4,0,5,6,7,0,8,0,0,0,9,10,11,0,88,12,13,14,15,16,17,18,19,20,21,22,23,24,25,0,266,0,0,0,0,0,0,0,3,4,0,5,6,7,0,8,0,0,0,9,10,11,0,88,12,13,14,15,16,17,18,19,20,21,22,23,24,25,0,267,0,0,0,0,0,0,0,3,4,0,5,6,7,0,8,0,0,0,9,10,11,0,88,12,13,14,15,16,17,18,19,20,21,22,23,24,25,0,241,0,0,0,0,0,0,0,3,4,0,5,6,7,0,8,0,0,0,9,10,11,0,88,12,13,14,15,16,17,18,19,20,21,22,23,24,25,0,251,0,0,0,0,0,0,0,3,4,0,5,6,7,0,8,0,0,0,9,10,11,0,88,12,13,14,15,16,17,18,19,20,21,22,23,24,25,0,260,0,0,0,0,0,0,0,3,4,0,5,6,7,0,8,0,0,0,9,10,11,0,88,12,13,14,15,16,17,18,19,20,21,22,23,24,25,0,179,0,0,0,0,0,0,0,3,4,0,5,6,7,0,8,0,0,0,9,10,11,0,88,12,13,14,15,16,17,18,19,20,21,22,23,24,25,0,203,0,0,0,0,0,0,0,3,4,0,5,6,7,0,8,0,0,0,9,10,11,0,88,110,13,14,15,16,17,18,19,20,21,22,202,3,4,0,5,6,7,0,8,0,0,0,9,10,11,0,0,110,13,14,15,16,17,18,19,20,21,201,3,4,0,5,6,7,0,8,0,0,0,9,10,11,0,0,110,13,14,15,16,17,18,19,20,200,3,4,0,5,6,7,0,8,0,0,0,9,10,11,0,0,110,13,14,15,16,17,18,19,199,3,4,0,5,6,7,0,8,0,0,0,9,10,11,0,0,110,13,14,15,16,17,18,198,3,4,0,5,6,7,0,8,0,0,0,9,10,11,0,0,110,13,14,15,16,17,194,3,4,0,5,6,7,0,8,0,0,0,9,10,11,0,0,110,13,14,15,16,17,195,3,4,0,5,6,7,0,8,0,0,0,9,10,11,0,0,110,13,14,15,16,17,196,3,4,0,5,6,7,0,8,0,0,0,9,10,11,0,0,110,13,14,15,16,17,197,3,4,0,5,6,7,0,8,0,0,0,9,10,11,0,0,110,13,14,15,16,188,3,4,0,5,6,7,0,8,0,0,0,9,10,11,0,0,110,13,14,15,16,189,3,4,0,5,6,7,0,8,0,0,0,9,10,11,0,0,110,13,14,15,16,190,3,4,0,5,6,7,0,8,0,0,0,9,10,11,0,0,110,13,14,15,16,191,3,4,0,5,6,7,0,8,0,0,0,9,10,11,0,0,110,13,14,15,16,192,3,4,0,5,6,7,0,8,0,0,0,9,10,11,0,0,110,13,14,15,16,193,3,4,0,5,6,7,0,8,0,0,0,9,10,11,0,0,110,13,14,15,185,3,4,0,5,6,7,0,8,0,0,0,9,10,11,0,0,110,13,14,15,186,3,4,0,5,6,7,0,8,0,0,0,9,10,11,0,0,110,13,14,15,187,3,4,0,5,6,7,0,8,0,0,0,9,10,11,0,0,110,13,14,183,3,4,0,5,6,7,0,8,0,0,0,9,10,11,0,0,110,13,14,184,3,4,0,5,6,7,0,8,0,0,0,9,10,11,0,0,110,13,180,3,4,0,5,6,7,0,8,0,0,0,9,10,11,0,0,110,13,181,3,4,0,5,6,7,0,8,0,0,0,9,10,11,0,0,110,13,182,3,4,0,5,6,7,0,8,0,0,0,9,10,11,0,0,110,13,111,3,4,0,5,6,7,0,8,0,0,0,9,10,11,0,0,110,13,112,3,4,0,5,6,7,0,8,0,0,0,9,10,11,0,0,110,13,113,3,4,0,5,6,7,0,8,0,0,0,9,10,11,0,0,110,13,121,3,4,0,5,6,7,0,8,0,0,0,9,10,11,0,0,110,13,122,3,4,0,5,6,7,0,8,0,0,0,9,10,11,0,0,110,13,123,3,4,0,5,6,7,0,8,0,0,0,9,10,11,0,0,110,13,124,3,4,0,5,6,7,0,8,0,0,0,9,10,11,0,0,110,13,126,3,4,0,5,6,7,0,8,0,0,0,9,10,11,0,0,110,13,127,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + ]) + +happyReduceArr = array (2, 170) [ + (2 , happyReduce_2), + (3 , happyReduce_3), + (4 , happyReduce_4), + (5 , happyReduce_5), + (6 , happyReduce_6), + (7 , happyReduce_7), + (8 , happyReduce_8), + (9 , happyReduce_9), + (10 , happyReduce_10), + (11 , happyReduce_11), + (12 , happyReduce_12), + (13 , happyReduce_13), + (14 , happyReduce_14), + (15 , happyReduce_15), + (16 , happyReduce_16), + (17 , happyReduce_17), + (18 , happyReduce_18), + (19 , happyReduce_19), + (20 , happyReduce_20), + (21 , happyReduce_21), + (22 , happyReduce_22), + (23 , happyReduce_23), + (24 , happyReduce_24), + (25 , happyReduce_25), + (26 , happyReduce_26), + (27 , happyReduce_27), + (28 , happyReduce_28), + (29 , happyReduce_29), + (30 , happyReduce_30), + (31 , happyReduce_31), + (32 , happyReduce_32), + (33 , happyReduce_33), + (34 , happyReduce_34), + (35 , happyReduce_35), + (36 , happyReduce_36), + (37 , happyReduce_37), + (38 , happyReduce_38), + (39 , happyReduce_39), + (40 , happyReduce_40), + (41 , happyReduce_41), + (42 , happyReduce_42), + (43 , happyReduce_43), + (44 , happyReduce_44), + (45 , happyReduce_45), + (46 , happyReduce_46), + (47 , happyReduce_47), + (48 , happyReduce_48), + (49 , happyReduce_49), + (50 , happyReduce_50), + (51 , happyReduce_51), + (52 , happyReduce_52), + (53 , happyReduce_53), + (54 , happyReduce_54), + (55 , happyReduce_55), + (56 , happyReduce_56), + (57 , happyReduce_57), + (58 , happyReduce_58), + (59 , happyReduce_59), + (60 , happyReduce_60), + (61 , happyReduce_61), + (62 , happyReduce_62), + (63 , happyReduce_63), + (64 , happyReduce_64), + (65 , happyReduce_65), + (66 , happyReduce_66), + (67 , happyReduce_67), + (68 , happyReduce_68), + (69 , happyReduce_69), + (70 , happyReduce_70), + (71 , happyReduce_71), + (72 , happyReduce_72), + (73 , happyReduce_73), + (74 , happyReduce_74), + (75 , happyReduce_75), + (76 , happyReduce_76), + (77 , happyReduce_77), + (78 , happyReduce_78), + (79 , happyReduce_79), + (80 , happyReduce_80), + (81 , happyReduce_81), + (82 , happyReduce_82), + (83 , happyReduce_83), + (84 , happyReduce_84), + (85 , happyReduce_85), + (86 , happyReduce_86), + (87 , happyReduce_87), + (88 , happyReduce_88), + (89 , happyReduce_89), + (90 , happyReduce_90), + (91 , happyReduce_91), + (92 , happyReduce_92), + (93 , happyReduce_93), + (94 , happyReduce_94), + (95 , happyReduce_95), + (96 , happyReduce_96), + (97 , happyReduce_97), + (98 , happyReduce_98), + (99 , happyReduce_99), + (100 , happyReduce_100), + (101 , happyReduce_101), + (102 , happyReduce_102), + (103 , happyReduce_103), + (104 , happyReduce_104), + (105 , happyReduce_105), + (106 , happyReduce_106), + (107 , happyReduce_107), + (108 , happyReduce_108), + (109 , happyReduce_109), + (110 , happyReduce_110), + (111 , happyReduce_111), + (112 , happyReduce_112), + (113 , happyReduce_113), + (114 , happyReduce_114), + (115 , happyReduce_115), + (116 , happyReduce_116), + (117 , happyReduce_117), + (118 , happyReduce_118), + (119 , happyReduce_119), + (120 , happyReduce_120), + (121 , happyReduce_121), + (122 , happyReduce_122), + (123 , happyReduce_123), + (124 , happyReduce_124), + (125 , happyReduce_125), + (126 , happyReduce_126), + (127 , happyReduce_127), + (128 , happyReduce_128), + (129 , happyReduce_129), + (130 , happyReduce_130), + (131 , happyReduce_131), + (132 , happyReduce_132), + (133 , happyReduce_133), + (134 , happyReduce_134), + (135 , happyReduce_135), + (136 , happyReduce_136), + (137 , happyReduce_137), + (138 , happyReduce_138), + (139 , happyReduce_139), + (140 , happyReduce_140), + (141 , happyReduce_141), + (142 , happyReduce_142), + (143 , happyReduce_143), + (144 , happyReduce_144), + (145 , happyReduce_145), + (146 , happyReduce_146), + (147 , happyReduce_147), + (148 , happyReduce_148), + (149 , happyReduce_149), + (150 , happyReduce_150), + (151 , happyReduce_151), + (152 , happyReduce_152), + (153 , happyReduce_153), + (154 , happyReduce_154), + (155 , happyReduce_155), + (156 , happyReduce_156), + (157 , happyReduce_157), + (158 , happyReduce_158), + (159 , happyReduce_159), + (160 , happyReduce_160), + (161 , happyReduce_161), + (162 , happyReduce_162), + (163 , happyReduce_163), + (164 , happyReduce_164), + (165 , happyReduce_165), + (166 , happyReduce_166), + (167 , happyReduce_167), + (168 , happyReduce_168), + (169 , happyReduce_169), + (170 , happyReduce_170) + ] + +happy_n_terms = 76 :: Int +happy_n_nonterms = 62 :: Int + +happyReduce_2 = happySpecReduce_1 0 happyReduction_2 +happyReduction_2 (HappyAbsSyn64 happy_var_1) + = HappyAbsSyn5 + (happy_var_1 + ) +happyReduction_2 _ = notHappyAtAll + +happyReduce_3 = happySpecReduce_1 1 happyReduction_3 +happyReduction_3 (HappyTerminal (TokenInt happy_var_1)) + = HappyAbsSyn6 + (LitInt happy_var_1 + ) +happyReduction_3 _ = notHappyAtAll + +happyReduce_4 = happySpecReduce_1 1 happyReduction_4 +happyReduction_4 (HappyTerminal (TokenStringLit happy_var_1)) + = HappyAbsSyn6 + (LitString happy_var_1 + ) +happyReduction_4 _ = notHappyAtAll + +happyReduce_5 = happySpecReduce_1 2 happyReduction_5 +happyReduction_5 _ + = HappyAbsSyn7 + ( + ) + +happyReduce_6 = happySpecReduce_1 3 happyReduction_6 +happyReduction_6 _ + = HappyAbsSyn8 + ( + ) + +happyReduce_7 = happySpecReduce_2 4 happyReduction_7 +happyReduction_7 (HappyTerminal (TokenRegex happy_var_2)) + _ + = HappyAbsSyn9 + (happy_var_2 + ) +happyReduction_7 _ _ = notHappyAtAll + +happyReduce_8 = happySpecReduce_1 5 happyReduction_8 +happyReduction_8 _ + = HappyAbsSyn10 + (This + ) + +happyReduce_9 = happySpecReduce_1 5 happyReduction_9 +happyReduction_9 (HappyTerminal (TokenIdent happy_var_1)) + = HappyAbsSyn10 + (Ident happy_var_1 + ) +happyReduction_9 _ = notHappyAtAll + +happyReduce_10 = happySpecReduce_1 5 happyReduction_10 +happyReduction_10 (HappyAbsSyn6 happy_var_1) + = HappyAbsSyn10 + (Literal happy_var_1 + ) +happyReduction_10 _ = notHappyAtAll + +happyReduce_11 = happySpecReduce_1 5 happyReduction_11 +happyReduction_11 (HappyAbsSyn9 happy_var_1) + = HappyAbsSyn10 + (Regex happy_var_1 + ) +happyReduction_11 _ = notHappyAtAll + +happyReduce_12 = happySpecReduce_1 5 happyReduction_12 +happyReduction_12 (HappyAbsSyn11 happy_var_1) + = HappyAbsSyn10 + (Array happy_var_1 + ) +happyReduction_12 _ = notHappyAtAll + +happyReduce_13 = happySpecReduce_1 5 happyReduction_13 +happyReduction_13 (HappyAbsSyn13 happy_var_1) + = HappyAbsSyn10 + (Object happy_var_1 + ) +happyReduction_13 _ = notHappyAtAll + +happyReduce_14 = happySpecReduce_3 5 happyReduction_14 +happyReduction_14 _ + (HappyAbsSyn38 happy_var_2) + _ + = HappyAbsSyn10 + (Brack happy_var_2 + ) +happyReduction_14 _ _ _ = notHappyAtAll + +happyReduce_15 = happySpecReduce_3 6 happyReduction_15 +happyReduction_15 _ + (HappyAbsSyn12 happy_var_2) + _ + = HappyAbsSyn11 + (ArrSimple happy_var_2 + ) +happyReduction_15 _ _ _ = notHappyAtAll + +happyReduce_16 = happySpecReduce_0 7 happyReduction_16 +happyReduction_16 = HappyAbsSyn12 + ([] + ) + +happyReduce_17 = happySpecReduce_1 7 happyReduction_17 +happyReduction_17 (HappyAbsSyn37 happy_var_1) + = HappyAbsSyn12 + ([happy_var_1] + ) +happyReduction_17 _ = notHappyAtAll + +happyReduce_18 = happySpecReduce_3 7 happyReduction_18 +happyReduction_18 (HappyAbsSyn37 happy_var_3) + _ + (HappyAbsSyn12 happy_var_1) + = HappyAbsSyn12 + (happy_var_1 ++ [happy_var_3] + ) +happyReduction_18 _ _ _ = notHappyAtAll + +happyReduce_19 = happySpecReduce_2 8 happyReduction_19 +happyReduction_19 _ + _ + = HappyAbsSyn13 + ([] + ) + +happyReduce_20 = happySpecReduce_3 8 happyReduction_20 +happyReduction_20 _ + (HappyAbsSyn14 happy_var_2) + _ + = HappyAbsSyn13 + (happy_var_2 + ) +happyReduction_20 _ _ _ = notHappyAtAll + +happyReduce_21 = happySpecReduce_1 9 happyReduction_21 +happyReduction_21 (HappyAbsSyn15 happy_var_1) + = HappyAbsSyn14 + ([happy_var_1 ] + ) +happyReduction_21 _ = notHappyAtAll + +happyReduce_22 = happySpecReduce_3 9 happyReduction_22 +happyReduction_22 (HappyAbsSyn15 happy_var_3) + _ + (HappyAbsSyn14 happy_var_1) + = HappyAbsSyn14 + (happy_var_1 ++ [happy_var_3] + ) +happyReduction_22 _ _ _ = notHappyAtAll + +happyReduce_23 = happySpecReduce_3 10 happyReduction_23 +happyReduction_23 (HappyAbsSyn37 happy_var_3) + _ + (HappyAbsSyn16 happy_var_1) + = HappyAbsSyn15 + (Left (happy_var_1, happy_var_3 ) + ) +happyReduction_23 _ _ _ = notHappyAtAll + +happyReduce_24 = happySpecReduce_2 10 happyReduction_24 +happyReduction_24 (HappyAbsSyn61 happy_var_2) + (HappyTerminal (TokenIdent happy_var_1)) + = HappyAbsSyn15 + (Right $ GetterPutter happy_var_1 happy_var_2 + ) +happyReduction_24 _ _ = notHappyAtAll + +happyReduce_25 = happySpecReduce_1 11 happyReduction_25 +happyReduction_25 (HappyTerminal (TokenIdent happy_var_1)) + = HappyAbsSyn16 + (PropNameId happy_var_1 + ) +happyReduction_25 _ = notHappyAtAll + +happyReduce_26 = happySpecReduce_1 11 happyReduction_26 +happyReduction_26 (HappyTerminal (TokenStringLit happy_var_1)) + = HappyAbsSyn16 + (PropNameStr happy_var_1 + ) +happyReduction_26 _ = notHappyAtAll + +happyReduce_27 = happySpecReduce_1 11 happyReduction_27 +happyReduction_27 (HappyTerminal (TokenInt happy_var_1)) + = HappyAbsSyn16 + (PropNameInt happy_var_1 + ) +happyReduction_27 _ = notHappyAtAll + +happyReduce_28 = happySpecReduce_1 12 happyReduction_28 +happyReduction_28 (HappyAbsSyn10 happy_var_1) + = HappyAbsSyn17 + (MemPrimExpr happy_var_1 + ) +happyReduction_28 _ = notHappyAtAll + +happyReduce_29 = happyReduce 4 12 happyReduction_29 +happyReduction_29 (_ `HappyStk` + (HappyAbsSyn38 happy_var_3) `HappyStk` + _ `HappyStk` + (HappyAbsSyn17 happy_var_1) `HappyStk` + happyRest) + = HappyAbsSyn17 + (ArrayExpr happy_var_1 happy_var_3 + ) `HappyStk` happyRest + +happyReduce_30 = happySpecReduce_3 12 happyReduction_30 +happyReduction_30 (HappyTerminal (TokenIdent happy_var_3)) + _ + (HappyAbsSyn17 happy_var_1) + = HappyAbsSyn17 + (MemberCall happy_var_1 happy_var_3 + ) +happyReduction_30 _ _ _ = notHappyAtAll + +happyReduce_31 = happySpecReduce_3 12 happyReduction_31 +happyReduction_31 (HappyAbsSyn20 happy_var_3) + (HappyAbsSyn17 happy_var_2) + _ + = HappyAbsSyn17 + (MemberNew happy_var_2 happy_var_3 + ) +happyReduction_31 _ _ _ = notHappyAtAll + +happyReduce_32 = happySpecReduce_1 13 happyReduction_32 +happyReduction_32 (HappyAbsSyn17 happy_var_1) + = HappyAbsSyn18 + (MemberExpr happy_var_1 + ) +happyReduction_32 _ = notHappyAtAll + +happyReduce_33 = happySpecReduce_2 13 happyReduction_33 +happyReduction_33 (HappyAbsSyn18 happy_var_2) + _ + = HappyAbsSyn18 + (NewNewExpr happy_var_2 + ) +happyReduction_33 _ _ = notHappyAtAll + +happyReduce_34 = happySpecReduce_2 14 happyReduction_34 +happyReduction_34 (HappyAbsSyn20 happy_var_2) + (HappyAbsSyn17 happy_var_1) + = HappyAbsSyn19 + (CallMember happy_var_1 happy_var_2 + ) +happyReduction_34 _ _ = notHappyAtAll + +happyReduce_35 = happySpecReduce_2 14 happyReduction_35 +happyReduction_35 (HappyAbsSyn20 happy_var_2) + (HappyAbsSyn19 happy_var_1) + = HappyAbsSyn19 + (CallCall happy_var_1 happy_var_2 + ) +happyReduction_35 _ _ = notHappyAtAll + +happyReduce_36 = happyReduce 4 14 happyReduction_36 +happyReduction_36 (_ `HappyStk` + (HappyAbsSyn38 happy_var_3) `HappyStk` + _ `HappyStk` + (HappyAbsSyn19 happy_var_1) `HappyStk` + happyRest) + = HappyAbsSyn19 + (CallSquare happy_var_1 happy_var_3 + ) `HappyStk` happyRest + +happyReduce_37 = happySpecReduce_3 14 happyReduction_37 +happyReduction_37 (HappyTerminal (TokenIdent happy_var_3)) + _ + (HappyAbsSyn19 happy_var_1) + = HappyAbsSyn19 + (CallDot happy_var_1 happy_var_3 + ) +happyReduction_37 _ _ _ = notHappyAtAll + +happyReduce_38 = happySpecReduce_2 15 happyReduction_38 +happyReduction_38 _ + _ + = HappyAbsSyn20 + ([] + ) + +happyReduce_39 = happySpecReduce_3 15 happyReduction_39 +happyReduction_39 _ + (HappyAbsSyn21 happy_var_2) + _ + = HappyAbsSyn20 + (happy_var_2 + ) +happyReduction_39 _ _ _ = notHappyAtAll + +happyReduce_40 = happySpecReduce_1 16 happyReduction_40 +happyReduction_40 (HappyAbsSyn37 happy_var_1) + = HappyAbsSyn21 + ([happy_var_1] + ) +happyReduction_40 _ = notHappyAtAll + +happyReduce_41 = happySpecReduce_3 16 happyReduction_41 +happyReduction_41 (HappyAbsSyn37 happy_var_3) + _ + (HappyAbsSyn21 happy_var_1) + = HappyAbsSyn21 + (happy_var_1 ++ [happy_var_3] + ) +happyReduction_41 _ _ _ = notHappyAtAll + +happyReduce_42 = happySpecReduce_1 17 happyReduction_42 +happyReduction_42 (HappyAbsSyn18 happy_var_1) + = HappyAbsSyn22 + (NewExpr happy_var_1 + ) +happyReduction_42 _ = notHappyAtAll + +happyReduce_43 = happySpecReduce_1 17 happyReduction_43 +happyReduction_43 (HappyAbsSyn19 happy_var_1) + = HappyAbsSyn22 + (CallExpr happy_var_1 + ) +happyReduction_43 _ = notHappyAtAll + +happyReduce_44 = happySpecReduce_1 18 happyReduction_44 +happyReduction_44 (HappyAbsSyn22 happy_var_1) + = HappyAbsSyn23 + (LeftExpr happy_var_1 + ) +happyReduction_44 _ = notHappyAtAll + +happyReduce_45 = happySpecReduce_2 18 happyReduction_45 +happyReduction_45 _ + (HappyAbsSyn22 happy_var_1) + = HappyAbsSyn23 + (PostInc happy_var_1 + ) +happyReduction_45 _ _ = notHappyAtAll + +happyReduce_46 = happySpecReduce_2 18 happyReduction_46 +happyReduction_46 _ + (HappyAbsSyn22 happy_var_1) + = HappyAbsSyn23 + (PostDec happy_var_1 + ) +happyReduction_46 _ _ = notHappyAtAll + +happyReduce_47 = happySpecReduce_1 19 happyReduction_47 +happyReduction_47 (HappyAbsSyn23 happy_var_1) + = HappyAbsSyn24 + (PostFix happy_var_1 + ) +happyReduction_47 _ = notHappyAtAll + +happyReduce_48 = happySpecReduce_2 19 happyReduction_48 +happyReduction_48 (HappyAbsSyn24 happy_var_2) + _ + = HappyAbsSyn24 + (Delete happy_var_2 + ) +happyReduction_48 _ _ = notHappyAtAll + +happyReduce_49 = happySpecReduce_2 19 happyReduction_49 +happyReduction_49 (HappyAbsSyn24 happy_var_2) + _ + = HappyAbsSyn24 + (Void happy_var_2 + ) +happyReduction_49 _ _ = notHappyAtAll + +happyReduce_50 = happySpecReduce_2 19 happyReduction_50 +happyReduction_50 (HappyAbsSyn24 happy_var_2) + _ + = HappyAbsSyn24 + (TypeOf happy_var_2 + ) +happyReduction_50 _ _ = notHappyAtAll + +happyReduce_51 = happySpecReduce_2 19 happyReduction_51 +happyReduction_51 (HappyAbsSyn24 happy_var_2) + _ + = HappyAbsSyn24 + (DoublePlus happy_var_2 + ) +happyReduction_51 _ _ = notHappyAtAll + +happyReduce_52 = happySpecReduce_2 19 happyReduction_52 +happyReduction_52 (HappyAbsSyn24 happy_var_2) + _ + = HappyAbsSyn24 + (DoubleMinus happy_var_2 + ) +happyReduction_52 _ _ = notHappyAtAll + +happyReduce_53 = happySpecReduce_2 19 happyReduction_53 +happyReduction_53 (HappyAbsSyn24 happy_var_2) + _ + = HappyAbsSyn24 + (UnaryPlus happy_var_2 + ) +happyReduction_53 _ _ = notHappyAtAll + +happyReduce_54 = happySpecReduce_2 19 happyReduction_54 +happyReduction_54 (HappyAbsSyn24 happy_var_2) + _ + = HappyAbsSyn24 + (UnaryMinus happy_var_2 + ) +happyReduction_54 _ _ = notHappyAtAll + +happyReduce_55 = happySpecReduce_2 19 happyReduction_55 +happyReduction_55 (HappyAbsSyn24 happy_var_2) + _ + = HappyAbsSyn24 + (Not happy_var_2 + ) +happyReduction_55 _ _ = notHappyAtAll + +happyReduce_56 = happySpecReduce_2 19 happyReduction_56 +happyReduction_56 (HappyAbsSyn24 happy_var_2) + _ + = HappyAbsSyn24 + (BitNot happy_var_2 + ) +happyReduction_56 _ _ = notHappyAtAll + +happyReduce_57 = happySpecReduce_1 20 happyReduction_57 +happyReduction_57 (HappyAbsSyn24 happy_var_1) + = HappyAbsSyn25 + (UExpr happy_var_1 + ) +happyReduction_57 _ = notHappyAtAll + +happyReduce_58 = happySpecReduce_3 20 happyReduction_58 +happyReduction_58 (HappyAbsSyn24 happy_var_3) + _ + (HappyAbsSyn25 happy_var_1) + = HappyAbsSyn25 + (Times happy_var_1 happy_var_3 + ) +happyReduction_58 _ _ _ = notHappyAtAll + +happyReduce_59 = happySpecReduce_3 20 happyReduction_59 +happyReduction_59 (HappyAbsSyn24 happy_var_3) + _ + (HappyAbsSyn25 happy_var_1) + = HappyAbsSyn25 + (Div happy_var_1 happy_var_3 + ) +happyReduction_59 _ _ _ = notHappyAtAll + +happyReduce_60 = happySpecReduce_3 20 happyReduction_60 +happyReduction_60 (HappyAbsSyn24 happy_var_3) + _ + (HappyAbsSyn25 happy_var_1) + = HappyAbsSyn25 + (Mod happy_var_1 happy_var_3 + ) +happyReduction_60 _ _ _ = notHappyAtAll + +happyReduce_61 = happySpecReduce_1 21 happyReduction_61 +happyReduction_61 (HappyAbsSyn25 happy_var_1) + = HappyAbsSyn26 + (MultExpr happy_var_1 + ) +happyReduction_61 _ = notHappyAtAll + +happyReduce_62 = happySpecReduce_3 21 happyReduction_62 +happyReduction_62 (HappyAbsSyn25 happy_var_3) + _ + (HappyAbsSyn26 happy_var_1) + = HappyAbsSyn26 + (Plus happy_var_1 happy_var_3 + ) +happyReduction_62 _ _ _ = notHappyAtAll + +happyReduce_63 = happySpecReduce_3 21 happyReduction_63 +happyReduction_63 (HappyAbsSyn25 happy_var_3) + _ + (HappyAbsSyn26 happy_var_1) + = HappyAbsSyn26 + (Minus happy_var_1 happy_var_3 + ) +happyReduction_63 _ _ _ = notHappyAtAll + +happyReduce_64 = happySpecReduce_1 22 happyReduction_64 +happyReduction_64 (HappyAbsSyn26 happy_var_1) + = HappyAbsSyn27 + (AddExpr happy_var_1 + ) +happyReduction_64 _ = notHappyAtAll + +happyReduce_65 = happySpecReduce_3 22 happyReduction_65 +happyReduction_65 (HappyAbsSyn26 happy_var_3) + _ + (HappyAbsSyn27 happy_var_1) + = HappyAbsSyn27 + (ShiftLeft happy_var_1 happy_var_3 + ) +happyReduction_65 _ _ _ = notHappyAtAll + +happyReduce_66 = happySpecReduce_3 22 happyReduction_66 +happyReduction_66 (HappyAbsSyn26 happy_var_3) + _ + (HappyAbsSyn27 happy_var_1) + = HappyAbsSyn27 + (ShiftRight happy_var_1 happy_var_3 + ) +happyReduction_66 _ _ _ = notHappyAtAll + +happyReduce_67 = happySpecReduce_3 22 happyReduction_67 +happyReduction_67 (HappyAbsSyn26 happy_var_3) + _ + (HappyAbsSyn27 happy_var_1) + = HappyAbsSyn27 + (ShiftRight2 happy_var_1 happy_var_3 + ) +happyReduction_67 _ _ _ = notHappyAtAll + +happyReduce_68 = happySpecReduce_1 23 happyReduction_68 +happyReduction_68 (HappyAbsSyn27 happy_var_1) + = HappyAbsSyn28 + (ShiftE happy_var_1 + ) +happyReduction_68 _ = notHappyAtAll + +happyReduce_69 = happySpecReduce_3 23 happyReduction_69 +happyReduction_69 (HappyAbsSyn27 happy_var_3) + _ + (HappyAbsSyn28 happy_var_1) + = HappyAbsSyn28 + (LessThan happy_var_1 happy_var_3 + ) +happyReduction_69 _ _ _ = notHappyAtAll + +happyReduce_70 = happySpecReduce_3 23 happyReduction_70 +happyReduction_70 (HappyAbsSyn27 happy_var_3) + _ + (HappyAbsSyn28 happy_var_1) + = HappyAbsSyn28 + (GreaterThan happy_var_1 happy_var_3 + ) +happyReduction_70 _ _ _ = notHappyAtAll + +happyReduce_71 = happySpecReduce_3 23 happyReduction_71 +happyReduction_71 (HappyAbsSyn27 happy_var_3) + _ + (HappyAbsSyn28 happy_var_1) + = HappyAbsSyn28 + (LessEqual happy_var_1 happy_var_3 + ) +happyReduction_71 _ _ _ = notHappyAtAll + +happyReduce_72 = happySpecReduce_3 23 happyReduction_72 +happyReduction_72 (HappyAbsSyn27 happy_var_3) + _ + (HappyAbsSyn28 happy_var_1) + = HappyAbsSyn28 + (GreaterEqual happy_var_1 happy_var_3 + ) +happyReduction_72 _ _ _ = notHappyAtAll + +happyReduce_73 = happySpecReduce_3 23 happyReduction_73 +happyReduction_73 (HappyAbsSyn27 happy_var_3) + _ + (HappyAbsSyn28 happy_var_1) + = HappyAbsSyn28 + (InstanceOf happy_var_1 happy_var_3 + ) +happyReduction_73 _ _ _ = notHappyAtAll + +happyReduce_74 = happySpecReduce_3 23 happyReduction_74 +happyReduction_74 (HappyAbsSyn27 happy_var_3) + _ + (HappyAbsSyn28 happy_var_1) + = HappyAbsSyn28 + (InObject happy_var_1 happy_var_3 + ) +happyReduction_74 _ _ _ = notHappyAtAll + +happyReduce_75 = happySpecReduce_1 24 happyReduction_75 +happyReduction_75 (HappyAbsSyn28 happy_var_1) + = HappyAbsSyn29 + (RelE happy_var_1 + ) +happyReduction_75 _ = notHappyAtAll + +happyReduce_76 = happySpecReduce_3 24 happyReduction_76 +happyReduction_76 (HappyAbsSyn28 happy_var_3) + _ + (HappyAbsSyn29 happy_var_1) + = HappyAbsSyn29 + (Equal happy_var_1 happy_var_3 + ) +happyReduction_76 _ _ _ = notHappyAtAll + +happyReduce_77 = happySpecReduce_3 24 happyReduction_77 +happyReduction_77 (HappyAbsSyn28 happy_var_3) + _ + (HappyAbsSyn29 happy_var_1) + = HappyAbsSyn29 + (NotEqual happy_var_1 happy_var_3 + ) +happyReduction_77 _ _ _ = notHappyAtAll + +happyReduce_78 = happySpecReduce_3 24 happyReduction_78 +happyReduction_78 (HappyAbsSyn28 happy_var_3) + _ + (HappyAbsSyn29 happy_var_1) + = HappyAbsSyn29 + (Equal2 happy_var_1 happy_var_3 + ) +happyReduction_78 _ _ _ = notHappyAtAll + +happyReduce_79 = happySpecReduce_3 24 happyReduction_79 +happyReduction_79 (HappyAbsSyn28 happy_var_3) + _ + (HappyAbsSyn29 happy_var_1) + = HappyAbsSyn29 + (NotEqual happy_var_1 happy_var_3 + ) +happyReduction_79 _ _ _ = notHappyAtAll + +happyReduce_80 = happySpecReduce_1 25 happyReduction_80 +happyReduction_80 (HappyAbsSyn29 happy_var_1) + = HappyAbsSyn30 + (EqualE happy_var_1 + ) +happyReduction_80 _ = notHappyAtAll + +happyReduce_81 = happySpecReduce_3 25 happyReduction_81 +happyReduction_81 (HappyAbsSyn29 happy_var_3) + _ + (HappyAbsSyn30 happy_var_1) + = HappyAbsSyn30 + (BABitAnd happy_var_1 happy_var_3 + ) +happyReduction_81 _ _ _ = notHappyAtAll + +happyReduce_82 = happySpecReduce_1 26 happyReduction_82 +happyReduction_82 (HappyAbsSyn30 happy_var_1) + = HappyAbsSyn31 + (BitAnd happy_var_1 + ) +happyReduction_82 _ = notHappyAtAll + +happyReduce_83 = happySpecReduce_3 26 happyReduction_83 +happyReduction_83 (HappyAbsSyn30 happy_var_3) + _ + (HappyAbsSyn31 happy_var_1) + = HappyAbsSyn31 + (BXBitXOR happy_var_1 happy_var_3 + ) +happyReduction_83 _ _ _ = notHappyAtAll + +happyReduce_84 = happySpecReduce_1 27 happyReduction_84 +happyReduction_84 (HappyAbsSyn31 happy_var_1) + = HappyAbsSyn32 + (BitXOR happy_var_1 + ) +happyReduction_84 _ = notHappyAtAll + +happyReduce_85 = happySpecReduce_3 27 happyReduction_85 +happyReduction_85 (HappyAbsSyn31 happy_var_3) + _ + (HappyAbsSyn32 happy_var_1) + = HappyAbsSyn32 + (BOBitOR happy_var_1 happy_var_3 + ) +happyReduction_85 _ _ _ = notHappyAtAll + +happyReduce_86 = happySpecReduce_1 28 happyReduction_86 +happyReduction_86 (HappyAbsSyn32 happy_var_1) + = HappyAbsSyn33 + (BitOR happy_var_1 + ) +happyReduction_86 _ = notHappyAtAll + +happyReduce_87 = happySpecReduce_3 28 happyReduction_87 +happyReduction_87 (HappyAbsSyn32 happy_var_3) + _ + (HappyAbsSyn33 happy_var_1) + = HappyAbsSyn33 + (LALogAnd happy_var_1 happy_var_3 + ) +happyReduction_87 _ _ _ = notHappyAtAll + +happyReduce_88 = happySpecReduce_1 29 happyReduction_88 +happyReduction_88 (HappyAbsSyn33 happy_var_1) + = HappyAbsSyn34 + (LogAnd happy_var_1 + ) +happyReduction_88 _ = notHappyAtAll + +happyReduce_89 = happySpecReduce_3 29 happyReduction_89 +happyReduction_89 (HappyAbsSyn33 happy_var_3) + _ + (HappyAbsSyn34 happy_var_1) + = HappyAbsSyn34 + (LOLogOr happy_var_1 happy_var_3 + ) +happyReduction_89 _ _ _ = notHappyAtAll + +happyReduce_90 = happySpecReduce_1 30 happyReduction_90 +happyReduction_90 (HappyAbsSyn34 happy_var_1) + = HappyAbsSyn35 + (LogOr happy_var_1 + ) +happyReduction_90 _ = notHappyAtAll + +happyReduce_91 = happyReduce 5 30 happyReduction_91 +happyReduction_91 ((HappyAbsSyn37 happy_var_5) `HappyStk` + _ `HappyStk` + (HappyAbsSyn37 happy_var_3) `HappyStk` + _ `HappyStk` + (HappyAbsSyn34 happy_var_1) `HappyStk` + happyRest) + = HappyAbsSyn35 + (CondIf happy_var_1 happy_var_3 happy_var_5 + ) `HappyStk` happyRest + +happyReduce_92 = happySpecReduce_1 31 happyReduction_92 +happyReduction_92 _ + = HappyAbsSyn36 + (AssignOpMult + ) + +happyReduce_93 = happySpecReduce_1 31 happyReduction_93 +happyReduction_93 _ + = HappyAbsSyn36 + (AssignOpDiv + ) + +happyReduce_94 = happySpecReduce_1 31 happyReduction_94 +happyReduction_94 _ + = HappyAbsSyn36 + (AssignOpMod + ) + +happyReduce_95 = happySpecReduce_1 31 happyReduction_95 +happyReduction_95 _ + = HappyAbsSyn36 + (AssignOpPlus + ) + +happyReduce_96 = happySpecReduce_1 31 happyReduction_96 +happyReduction_96 _ + = HappyAbsSyn36 + (AssignOpMinus + ) + +happyReduce_97 = happySpecReduce_1 31 happyReduction_97 +happyReduction_97 _ + = HappyAbsSyn36 + (AssignNormal + ) + +happyReduce_98 = happySpecReduce_3 32 happyReduction_98 +happyReduction_98 (HappyAbsSyn37 happy_var_3) + (HappyAbsSyn36 happy_var_2) + (HappyAbsSyn22 happy_var_1) + = HappyAbsSyn37 + (Assign happy_var_1 happy_var_2 happy_var_3 + ) +happyReduction_98 _ _ _ = notHappyAtAll + +happyReduce_99 = happySpecReduce_1 32 happyReduction_99 +happyReduction_99 (HappyAbsSyn35 happy_var_1) + = HappyAbsSyn37 + (CondE happy_var_1 + ) +happyReduction_99 _ = notHappyAtAll + +happyReduce_100 = happySpecReduce_1 32 happyReduction_100 +happyReduction_100 (HappyAbsSyn60 happy_var_1) + = HappyAbsSyn37 + (AEFuncDecl happy_var_1 + ) +happyReduction_100 _ = notHappyAtAll + +happyReduce_101 = happySpecReduce_1 33 happyReduction_101 +happyReduction_101 (HappyAbsSyn37 happy_var_1) + = HappyAbsSyn38 + (AssignE happy_var_1 + ) +happyReduction_101 _ = notHappyAtAll + +happyReduce_102 = happySpecReduce_1 34 happyReduction_102 +happyReduction_102 (HappyAbsSyn40 happy_var_1) + = HappyAbsSyn39 + (Block happy_var_1 + ) +happyReduction_102 _ = notHappyAtAll + +happyReduce_103 = happySpecReduce_1 34 happyReduction_103 +happyReduction_103 (HappyAbsSyn42 happy_var_1) + = HappyAbsSyn39 + (VarStmt happy_var_1 + ) +happyReduction_103 _ = notHappyAtAll + +happyReduce_104 = happySpecReduce_1 34 happyReduction_104 +happyReduction_104 _ + = HappyAbsSyn39 + (EmptyStmt + ) + +happyReduce_105 = happySpecReduce_1 34 happyReduction_105 +happyReduction_105 (HappyAbsSyn48 happy_var_1) + = HappyAbsSyn39 + (ExprStmt happy_var_1 + ) +happyReduction_105 _ = notHappyAtAll + +happyReduce_106 = happySpecReduce_1 34 happyReduction_106 +happyReduction_106 (HappyAbsSyn49 happy_var_1) + = HappyAbsSyn39 + (IfStmt happy_var_1 + ) +happyReduction_106 _ = notHappyAtAll + +happyReduce_107 = happySpecReduce_1 34 happyReduction_107 +happyReduction_107 (HappyAbsSyn50 happy_var_1) + = HappyAbsSyn39 + (ItStmt happy_var_1 + ) +happyReduction_107 _ = notHappyAtAll + +happyReduce_108 = happySpecReduce_3 34 happyReduction_108 +happyReduction_108 _ + (HappyTerminal (TokenIdent happy_var_2)) + _ + = HappyAbsSyn39 + (ContStmt $ Just happy_var_2 + ) +happyReduction_108 _ _ _ = notHappyAtAll + +happyReduce_109 = happySpecReduce_2 34 happyReduction_109 +happyReduction_109 _ + _ + = HappyAbsSyn39 + (ContStmt Nothing + ) + +happyReduce_110 = happySpecReduce_3 34 happyReduction_110 +happyReduction_110 _ + (HappyTerminal (TokenIdent happy_var_2)) + _ + = HappyAbsSyn39 + (BreakStmt $ Just happy_var_2 + ) +happyReduction_110 _ _ _ = notHappyAtAll + +happyReduce_111 = happySpecReduce_2 34 happyReduction_111 +happyReduction_111 _ + _ + = HappyAbsSyn39 + (BreakStmt Nothing + ) + +happyReduce_112 = happySpecReduce_3 34 happyReduction_112 +happyReduction_112 _ + (HappyAbsSyn47 happy_var_2) + _ + = HappyAbsSyn39 + (ReturnStmt $ Just happy_var_2 + ) +happyReduction_112 _ _ _ = notHappyAtAll + +happyReduce_113 = happySpecReduce_2 34 happyReduction_113 +happyReduction_113 _ + _ + = HappyAbsSyn39 + (ReturnStmt Nothing + ) + +happyReduce_114 = happyReduce 5 34 happyReduction_114 +happyReduction_114 ((HappyAbsSyn39 happy_var_5) `HappyStk` + _ `HappyStk` + (HappyAbsSyn38 happy_var_3) `HappyStk` + _ `HappyStk` + _ `HappyStk` + happyRest) + = HappyAbsSyn39 + (WithStmt happy_var_3 happy_var_5 + ) `HappyStk` happyRest + +happyReduce_115 = happySpecReduce_3 34 happyReduction_115 +happyReduction_115 (HappyAbsSyn39 happy_var_3) + _ + (HappyTerminal (TokenIdent happy_var_1)) + = HappyAbsSyn39 + (LabelledStmt happy_var_1 happy_var_3 + ) +happyReduction_115 _ _ _ = notHappyAtAll + +happyReduce_116 = happySpecReduce_1 34 happyReduction_116 +happyReduction_116 (HappyAbsSyn55 happy_var_1) + = HappyAbsSyn39 + (Switch happy_var_1 + ) +happyReduction_116 _ = notHappyAtAll + +happyReduce_117 = happySpecReduce_3 34 happyReduction_117 +happyReduction_117 _ + (HappyAbsSyn47 happy_var_2) + _ + = HappyAbsSyn39 + (ThrowExpr happy_var_2 + ) +happyReduction_117 _ _ _ = notHappyAtAll + +happyReduce_118 = happySpecReduce_1 34 happyReduction_118 +happyReduction_118 (HappyAbsSyn43 happy_var_1) + = HappyAbsSyn39 + (TryStmt happy_var_1 + ) +happyReduction_118 _ = notHappyAtAll + +happyReduce_119 = happySpecReduce_3 35 happyReduction_119 +happyReduction_119 _ + (HappyAbsSyn41 happy_var_2) + _ + = HappyAbsSyn40 + (happy_var_2 + ) +happyReduction_119 _ _ _ = notHappyAtAll + +happyReduce_120 = happySpecReduce_0 36 happyReduction_120 +happyReduction_120 = HappyAbsSyn41 + ([] + ) + +happyReduce_121 = happySpecReduce_1 36 happyReduction_121 +happyReduction_121 (HappyAbsSyn39 happy_var_1) + = HappyAbsSyn41 + ([happy_var_1] + ) +happyReduction_121 _ = notHappyAtAll + +happyReduce_122 = happySpecReduce_2 36 happyReduction_122 +happyReduction_122 (HappyAbsSyn39 happy_var_2) + (HappyAbsSyn41 happy_var_1) + = HappyAbsSyn41 + (happy_var_1 ++ [happy_var_2] + ) +happyReduction_122 _ _ = notHappyAtAll + +happyReduce_123 = happySpecReduce_2 37 happyReduction_123 +happyReduction_123 (HappyAbsSyn52 happy_var_2) + _ + = HappyAbsSyn42 + (happy_var_2 + ) +happyReduction_123 _ _ = notHappyAtAll + +happyReduce_124 = happySpecReduce_2 37 happyReduction_124 +happyReduction_124 (HappyAbsSyn52 happy_var_2) + _ + = HappyAbsSyn42 + (happy_var_2 + ) +happyReduction_124 _ _ = notHappyAtAll + +happyReduce_125 = happySpecReduce_3 38 happyReduction_125 +happyReduction_125 (HappyAbsSyn44 happy_var_3) + (HappyAbsSyn40 happy_var_2) + _ + = HappyAbsSyn43 + (TryBC happy_var_2 happy_var_3 + ) +happyReduction_125 _ _ _ = notHappyAtAll + +happyReduce_126 = happySpecReduce_3 38 happyReduction_126 +happyReduction_126 (HappyAbsSyn46 happy_var_3) + (HappyAbsSyn40 happy_var_2) + _ + = HappyAbsSyn43 + (TryBF happy_var_2 happy_var_3 + ) +happyReduction_126 _ _ _ = notHappyAtAll + +happyReduce_127 = happyReduce 4 38 happyReduction_127 +happyReduction_127 ((HappyAbsSyn46 happy_var_4) `HappyStk` + (HappyAbsSyn44 happy_var_3) `HappyStk` + (HappyAbsSyn40 happy_var_2) `HappyStk` + _ `HappyStk` + happyRest) + = HappyAbsSyn43 + (TryBCF happy_var_2 happy_var_3 happy_var_4 + ) `HappyStk` happyRest + +happyReduce_128 = happySpecReduce_1 39 happyReduction_128 +happyReduction_128 (HappyAbsSyn45 happy_var_1) + = HappyAbsSyn44 + ([happy_var_1] + ) +happyReduction_128 _ = notHappyAtAll + +happyReduce_129 = happySpecReduce_2 39 happyReduction_129 +happyReduction_129 (HappyAbsSyn45 happy_var_2) + (HappyAbsSyn44 happy_var_1) + = HappyAbsSyn44 + (happy_var_1 ++ [happy_var_2 ] + ) +happyReduction_129 _ _ = notHappyAtAll + +happyReduce_130 = happyReduce 5 40 happyReduction_130 +happyReduction_130 ((HappyAbsSyn40 happy_var_5) `HappyStk` + _ `HappyStk` + (HappyTerminal (TokenIdent happy_var_3)) `HappyStk` + _ `HappyStk` + _ `HappyStk` + happyRest) + = HappyAbsSyn45 + (Catch happy_var_3 happy_var_5 + ) `HappyStk` happyRest + +happyReduce_131 = happyReduce 7 40 happyReduction_131 +happyReduction_131 ((HappyAbsSyn40 happy_var_7) `HappyStk` + _ `HappyStk` + (HappyAbsSyn38 happy_var_5) `HappyStk` + _ `HappyStk` + (HappyTerminal (TokenIdent happy_var_3)) `HappyStk` + _ `HappyStk` + _ `HappyStk` + happyRest) + = HappyAbsSyn45 + (CatchIf happy_var_3 happy_var_7 happy_var_5 + ) `HappyStk` happyRest + +happyReduce_132 = happySpecReduce_2 41 happyReduction_132 +happyReduction_132 (HappyAbsSyn40 happy_var_2) + _ + = HappyAbsSyn46 + (happy_var_2 + ) +happyReduction_132 _ _ = notHappyAtAll + +happyReduce_133 = happyMonad2Reduce 1 42 happyReduction_133 +happyReduction_133 ((HappyAbsSyn38 happy_var_1) `HappyStk` + happyRest) tk + = happyThen (( \t -> autoSemiInsert t happy_var_1) tk + ) (\r -> happyReturn (HappyAbsSyn47 r)) + +happyReduce_134 = happySpecReduce_2 43 happyReduction_134 +happyReduction_134 _ + (HappyAbsSyn47 happy_var_1) + = HappyAbsSyn48 + (happy_var_1 + ) +happyReduction_134 _ _ = notHappyAtAll + +happyReduce_135 = happyReduce 7 44 happyReduction_135 +happyReduction_135 ((HappyAbsSyn39 happy_var_7) `HappyStk` + _ `HappyStk` + (HappyAbsSyn39 happy_var_5) `HappyStk` + _ `HappyStk` + (HappyAbsSyn38 happy_var_3) `HappyStk` + _ `HappyStk` + _ `HappyStk` + happyRest) + = HappyAbsSyn49 + (IfElse happy_var_3 happy_var_5 happy_var_7 + ) `HappyStk` happyRest + +happyReduce_136 = happyReduce 5 44 happyReduction_136 +happyReduction_136 ((HappyAbsSyn39 happy_var_5) `HappyStk` + _ `HappyStk` + (HappyAbsSyn38 happy_var_3) `HappyStk` + _ `HappyStk` + _ `HappyStk` + happyRest) + = HappyAbsSyn49 + (IfOnly happy_var_3 happy_var_5 + ) `HappyStk` happyRest + +happyReduce_137 = happyReduce 7 45 happyReduction_137 +happyReduction_137 (_ `HappyStk` + _ `HappyStk` + (HappyAbsSyn38 happy_var_5) `HappyStk` + _ `HappyStk` + _ `HappyStk` + (HappyAbsSyn39 happy_var_2) `HappyStk` + _ `HappyStk` + happyRest) + = HappyAbsSyn50 + (DoWhile happy_var_2 happy_var_5 + ) `HappyStk` happyRest + +happyReduce_138 = happyReduce 5 45 happyReduction_138 +happyReduction_138 ((HappyAbsSyn39 happy_var_5) `HappyStk` + _ `HappyStk` + (HappyAbsSyn38 happy_var_3) `HappyStk` + _ `HappyStk` + _ `HappyStk` + happyRest) + = HappyAbsSyn50 + (While happy_var_3 happy_var_5 + ) `HappyStk` happyRest + +happyReduce_139 = happyReduce 9 45 happyReduction_139 +happyReduction_139 ((HappyAbsSyn39 happy_var_9) `HappyStk` + _ `HappyStk` + (HappyAbsSyn51 happy_var_7) `HappyStk` + _ `HappyStk` + (HappyAbsSyn51 happy_var_5) `HappyStk` + _ `HappyStk` + (HappyAbsSyn51 happy_var_3) `HappyStk` + _ `HappyStk` + _ `HappyStk` + happyRest) + = HappyAbsSyn50 + (For happy_var_3 happy_var_5 happy_var_7 happy_var_9 + ) `HappyStk` happyRest + +happyReduce_140 = happyReduce 10 45 happyReduction_140 +happyReduction_140 ((HappyAbsSyn39 happy_var_10) `HappyStk` + _ `HappyStk` + (HappyAbsSyn51 happy_var_8) `HappyStk` + _ `HappyStk` + (HappyAbsSyn51 happy_var_6) `HappyStk` + _ `HappyStk` + (HappyAbsSyn52 happy_var_4) `HappyStk` + _ `HappyStk` + _ `HappyStk` + _ `HappyStk` + happyRest) + = HappyAbsSyn50 + (ForVar happy_var_4 happy_var_6 happy_var_8 happy_var_10 + ) `HappyStk` happyRest + +happyReduce_141 = happyReduce 9 45 happyReduction_141 +happyReduction_141 ((HappyAbsSyn39 happy_var_9) `HappyStk` + _ `HappyStk` + (HappyAbsSyn51 happy_var_7) `HappyStk` + _ `HappyStk` + (HappyAbsSyn51 happy_var_5) `HappyStk` + _ `HappyStk` + (HappyAbsSyn52 happy_var_3) `HappyStk` + _ `HappyStk` + _ `HappyStk` + happyRest) + = HappyAbsSyn50 + (ForVar happy_var_3 happy_var_5 happy_var_7 happy_var_9 + ) `HappyStk` happyRest + +happyReduce_142 = happyReduce 8 45 happyReduction_142 +happyReduction_142 ((HappyAbsSyn39 happy_var_8) `HappyStk` + _ `HappyStk` + (HappyAbsSyn38 happy_var_6) `HappyStk` + _ `HappyStk` + (HappyAbsSyn52 happy_var_4) `HappyStk` + _ `HappyStk` + _ `HappyStk` + _ `HappyStk` + happyRest) + = HappyAbsSyn50 + (ForIn happy_var_4 happy_var_6 happy_var_8 + ) `HappyStk` happyRest + +happyReduce_143 = happyReduce 7 45 happyReduction_143 +happyReduction_143 ((HappyAbsSyn39 happy_var_7) `HappyStk` + _ `HappyStk` + (HappyAbsSyn38 happy_var_5) `HappyStk` + _ `HappyStk` + (HappyAbsSyn52 happy_var_3) `HappyStk` + _ `HappyStk` + _ `HappyStk` + happyRest) + = HappyAbsSyn50 + (ForIn happy_var_3 happy_var_5 happy_var_7 + ) `HappyStk` happyRest + +happyReduce_144 = happySpecReduce_0 46 happyReduction_144 +happyReduction_144 = HappyAbsSyn51 + (Nothing + ) + +happyReduce_145 = happySpecReduce_1 46 happyReduction_145 +happyReduction_145 (HappyAbsSyn38 happy_var_1) + = HappyAbsSyn51 + (Just happy_var_1 + ) +happyReduction_145 _ = notHappyAtAll + +happyReduce_146 = happySpecReduce_1 47 happyReduction_146 +happyReduction_146 (HappyAbsSyn53 happy_var_1) + = HappyAbsSyn52 + ([happy_var_1] + ) +happyReduction_146 _ = notHappyAtAll + +happyReduce_147 = happySpecReduce_3 47 happyReduction_147 +happyReduction_147 (HappyAbsSyn53 happy_var_3) + _ + (HappyAbsSyn52 happy_var_1) + = HappyAbsSyn52 + (happy_var_1 ++ [happy_var_3] + ) +happyReduction_147 _ _ _ = notHappyAtAll + +happyReduce_148 = happySpecReduce_2 48 happyReduction_148 +happyReduction_148 (HappyAbsSyn54 happy_var_2) + (HappyTerminal (TokenIdent happy_var_1)) + = HappyAbsSyn53 + (VarDecl happy_var_1 happy_var_2 + ) +happyReduction_148 _ _ = notHappyAtAll + +happyReduce_149 = happySpecReduce_0 49 happyReduction_149 +happyReduction_149 = HappyAbsSyn54 + (Nothing + ) + +happyReduce_150 = happySpecReduce_2 49 happyReduction_150 +happyReduction_150 (HappyAbsSyn37 happy_var_2) + _ + = HappyAbsSyn54 + (Just happy_var_2 + ) +happyReduction_150 _ _ = notHappyAtAll + +happyReduce_151 = happyReduce 5 50 happyReduction_151 +happyReduction_151 ((HappyAbsSyn56 happy_var_5) `HappyStk` + _ `HappyStk` + (HappyAbsSyn38 happy_var_3) `HappyStk` + _ `HappyStk` + _ `HappyStk` + happyRest) + = HappyAbsSyn55 + (SSwitch happy_var_3 happy_var_5 + ) `HappyStk` happyRest + +happyReduce_152 = happySpecReduce_3 51 happyReduction_152 +happyReduction_152 _ + (HappyAbsSyn57 happy_var_2) + _ + = HappyAbsSyn56 + (CaseBlock happy_var_2 [] [] + ) +happyReduction_152 _ _ _ = notHappyAtAll + +happyReduce_153 = happyReduce 5 51 happyReduction_153 +happyReduction_153 (_ `HappyStk` + (HappyAbsSyn57 happy_var_4) `HappyStk` + (HappyAbsSyn59 happy_var_3) `HappyStk` + (HappyAbsSyn57 happy_var_2) `HappyStk` + _ `HappyStk` + happyRest) + = HappyAbsSyn56 + (CaseBlock happy_var_2 [happy_var_3] happy_var_4 + ) `HappyStk` happyRest + +happyReduce_154 = happySpecReduce_0 52 happyReduction_154 +happyReduction_154 = HappyAbsSyn57 + ([] + ) + +happyReduce_155 = happySpecReduce_1 52 happyReduction_155 +happyReduction_155 (HappyAbsSyn58 happy_var_1) + = HappyAbsSyn57 + ([happy_var_1] + ) +happyReduction_155 _ = notHappyAtAll + +happyReduce_156 = happySpecReduce_2 52 happyReduction_156 +happyReduction_156 (HappyAbsSyn58 happy_var_2) + (HappyAbsSyn57 happy_var_1) + = HappyAbsSyn57 + (happy_var_1 ++ [happy_var_2] + ) +happyReduction_156 _ _ = notHappyAtAll + +happyReduce_157 = happyReduce 4 53 happyReduction_157 +happyReduction_157 ((HappyAbsSyn41 happy_var_4) `HappyStk` + _ `HappyStk` + (HappyAbsSyn38 happy_var_2) `HappyStk` + _ `HappyStk` + happyRest) + = HappyAbsSyn58 + (CaseClause happy_var_2 happy_var_4 + ) `HappyStk` happyRest + +happyReduce_158 = happySpecReduce_3 54 happyReduction_158 +happyReduction_158 (HappyAbsSyn41 happy_var_3) + _ + _ + = HappyAbsSyn59 + (DefaultClause happy_var_3 + ) +happyReduction_158 _ _ _ = notHappyAtAll + +happyReduce_159 = happySpecReduce_2 55 happyReduction_159 +happyReduction_159 (HappyAbsSyn61 happy_var_2) + _ + = HappyAbsSyn60 + (happy_var_2 + ) +happyReduction_159 _ _ = notHappyAtAll + +happyReduce_160 = happyReduce 7 55 happyReduction_160 +happyReduction_160 (_ `HappyStk` + (HappyAbsSyn63 happy_var_6) `HappyStk` + _ `HappyStk` + _ `HappyStk` + (HappyAbsSyn62 happy_var_3) `HappyStk` + _ `HappyStk` + _ `HappyStk` + happyRest) + = HappyAbsSyn60 + (FuncDecl Nothing happy_var_3 happy_var_6 + ) `HappyStk` happyRest + +happyReduce_161 = happyReduce 7 56 happyReduction_161 +happyReduction_161 (_ `HappyStk` + (HappyAbsSyn63 happy_var_6) `HappyStk` + _ `HappyStk` + _ `HappyStk` + (HappyAbsSyn62 happy_var_3) `HappyStk` + _ `HappyStk` + (HappyTerminal (TokenIdent happy_var_1)) `HappyStk` + happyRest) + = HappyAbsSyn61 + (FuncDecl (Just happy_var_1) happy_var_3 happy_var_6 + ) `HappyStk` happyRest + +happyReduce_162 = happySpecReduce_0 57 happyReduction_162 +happyReduction_162 = HappyAbsSyn62 + ([] + ) + +happyReduce_163 = happySpecReduce_1 57 happyReduction_163 +happyReduction_163 (HappyTerminal (TokenIdent happy_var_1)) + = HappyAbsSyn62 + ([ happy_var_1 ] + ) +happyReduction_163 _ = notHappyAtAll + +happyReduce_164 = happySpecReduce_3 57 happyReduction_164 +happyReduction_164 (HappyTerminal (TokenIdent happy_var_3)) + _ + (HappyAbsSyn62 happy_var_1) + = HappyAbsSyn62 + (happy_var_1 ++ [happy_var_3] + ) +happyReduction_164 _ _ _ = notHappyAtAll + +happyReduce_165 = happySpecReduce_1 58 happyReduction_165 +happyReduction_165 (HappyAbsSyn65 happy_var_1) + = HappyAbsSyn63 + (happy_var_1 + ) +happyReduction_165 _ = notHappyAtAll + +happyReduce_166 = happySpecReduce_1 59 happyReduction_166 +happyReduction_166 (HappyAbsSyn65 happy_var_1) + = HappyAbsSyn64 + (JSProgram happy_var_1 + ) +happyReduction_166 _ = notHappyAtAll + +happyReduce_167 = happySpecReduce_1 60 happyReduction_167 +happyReduction_167 (HappyAbsSyn66 happy_var_1) + = HappyAbsSyn65 + ([happy_var_1] + ) +happyReduction_167 _ = notHappyAtAll + +happyReduce_168 = happySpecReduce_2 60 happyReduction_168 +happyReduction_168 (HappyAbsSyn66 happy_var_2) + (HappyAbsSyn65 happy_var_1) + = HappyAbsSyn65 + (happy_var_1 ++ [happy_var_2] + ) +happyReduction_168 _ _ = notHappyAtAll + +happyReduce_169 = happySpecReduce_1 61 happyReduction_169 +happyReduction_169 (HappyAbsSyn39 happy_var_1) + = HappyAbsSyn66 + (Stmt happy_var_1 + ) +happyReduction_169 _ = notHappyAtAll + +happyReduce_170 = happySpecReduce_1 61 happyReduction_170 +happyReduction_170 (HappyAbsSyn60 happy_var_1) + = HappyAbsSyn66 + (SEFuncDecl happy_var_1 + ) +happyReduction_170 _ = notHappyAtAll + +happyNewToken action sts stk + = lexerM action (\tk -> + let cont i = happyDoAction i tk action sts stk in + case tk of { + TokenEof -> happyDoAction 75 tk action sts stk; + TokenEof -> cont 1; + TokenInt happy_dollar_dollar -> cont 2; + TokenIdent happy_dollar_dollar -> cont 3; + TokenStringLit happy_dollar_dollar -> cont 4; + TokenROP "=" -> cont 5; + TokenROP "+" -> cont 6; + TokenROP "-" -> cont 7; + TokenROP "*" -> cont 8; + TokenROP "/" -> cont 9; + TokenROP "(" -> cont 10; + TokenROP ")" -> cont 11; + TokenROP "," -> cont 12; + TokenNL -> cont 13; + TokenROP "?" -> cont 14; + TokenROP ":" -> cont 15; + TokenROP "||" -> cont 16; + TokenROP "&&" -> cont 17; + TokenROP "|" -> cont 18; + TokenROP "^" -> cont 19; + TokenROP "&" -> cont 20; + TokenROP "==" -> cont 21; + TokenROP "!=" -> cont 22; + TokenROP "===" -> cont 23; + TokenROP "!==" -> cont 24; + TokenROP "<" -> cont 25; + TokenROP "<=" -> cont 26; + TokenROP ">=" -> cont 27; + TokenROP ">" -> cont 28; + TokenROP "<<" -> cont 29; + TokenROP ">>" -> cont 30; + TokenROP ">>>" -> cont 31; + TokenROP "!" -> cont 32; + TokenROP "~" -> cont 33; + TokenROP "++" -> cont 34; + TokenROP "--" -> cont 35; + TokenROP "." -> cont 36; + TokenROP "[" -> cont 37; + TokenROP "]" -> cont 38; + TokenROP "{" -> cont 39; + TokenROP "}" -> cont 40; + TokenRID "delete" -> cont 41; + TokenRID "void" -> cont 42; + TokenRID "typeof" -> cont 43; + TokenROP "%" -> cont 44; + TokenROP "*=" -> cont 45; + TokenROP "/=" -> cont 46; + TokenROP "%=" -> cont 47; + TokenROP "+=" -> cont 48; + TokenROP "-=" -> cont 49; + TokenRID "instanceof" -> cont 50; + TokenRID "if" -> cont 51; + TokenRID "else" -> cont 52; + TokenROP ";" -> cont 53; + TokenRID "do" -> cont 54; + TokenRID "while" -> cont 55; + TokenRID "for" -> cont 56; + TokenRID "this" -> cont 57; + TokenRID "var" -> cont 58; + TokenRID "const" -> cont 59; + TokenRID "function" -> cont 60; + TokenRID "new" -> cont 61; + TokenRID "try" -> cont 62; + TokenRID "catch" -> cont 63; + TokenRID "finally" -> cont 64; + TokenRID "continue" -> cont 65; + TokenRID "break" -> cont 66; + TokenRID "throw" -> cont 67; + TokenRID "return" -> cont 68; + TokenRID "with" -> cont 69; + TokenRID "switch" -> cont 70; + TokenRID "case" -> cont 71; + TokenRID "default" -> cont 72; + TokenRID "in" -> cont 73; + TokenRegex happy_dollar_dollar -> cont 74; + _ -> happyError' tk + }) + +happyError_ tk = happyError' tk + +happyThen :: () => P a -> (a -> P b) -> P b +happyThen = (>>=) +happyReturn :: () => a -> P a +happyReturn = (return) +happyThen1 = happyThen +happyReturn1 :: () => a -> P a +happyReturn1 = happyReturn +happyError' :: () => Token -> P a +happyError' tk = parseError tk + +jsprogram = happySomeParser where + happySomeParser = happyThen (happyParse 0) (\x -> case x of {HappyAbsSyn64 z -> happyReturn z; _other -> notHappyAtAll }) + +primexpr = happySomeParser where + happySomeParser = happyThen (happyParse 1) (\x -> case x of {HappyAbsSyn10 z -> happyReturn z; _other -> notHappyAtAll }) + +happySeq = happyDontSeq + + +parseError :: Token -> P a +parseError tok = do + s <- get + throwError ("parse error" ++ " tok = " ++ show tok ++ " rest=<" ++ (rest s) ++ "> lnum = " ++ show (lineno s) ++ " mode= " ++ show (mode s) ++ show (tr s)) +{-# LINE 1 "GenericTemplate.hs" #-} +{-# LINE 1 "<built-in>" #-} +{-# LINE 1 "<command line>" #-} +{-# LINE 1 "GenericTemplate.hs" #-} +-- Id: GenericTemplate.hs,v 1.26 2005/01/14 14:47:22 simonmar Exp + +{-# LINE 28 "GenericTemplate.hs" #-} + + +data Happy_IntList = HappyCons Int Happy_IntList + + + + + +{-# LINE 49 "GenericTemplate.hs" #-} + +{-# LINE 59 "GenericTemplate.hs" #-} + +{-# LINE 68 "GenericTemplate.hs" #-} + +infixr 9 `HappyStk` +data HappyStk a = HappyStk a (HappyStk a) + +----------------------------------------------------------------------------- +-- starting the parse + +happyParse start_state = happyNewToken start_state notHappyAtAll notHappyAtAll + +----------------------------------------------------------------------------- +-- Accepting the parse + +-- If the current token is (0), it means we've just accepted a partial +-- parse (a %partial parser). We must ignore the saved token on the top of +-- the stack in this case. +happyAccept (0) tk st sts (_ `HappyStk` ans `HappyStk` _) = + happyReturn1 ans +happyAccept j tk st sts (HappyStk ans _) = + (happyReturn1 ans) + +----------------------------------------------------------------------------- +-- Arrays only: do the next action + + + +happyDoAction i tk st + = {- nothing -} + + + case action of + (0) -> {- nothing -} + happyFail i tk st + (-1) -> {- nothing -} + happyAccept i tk st + n | (n < ((0) :: Int)) -> {- nothing -} + + (happyReduceArr ! rule) i tk st + where rule = ((negate ((n + ((1) :: Int))))) + n -> {- nothing -} + + + happyShift new_state i tk st + where new_state = (n - ((1) :: Int)) + where off = indexShortOffAddr happyActOffsets st + off_i = (off + i) + check = if (off_i >= ((0) :: Int)) + then (indexShortOffAddr happyCheck off_i == i) + else False + action | check = indexShortOffAddr happyTable off_i + | otherwise = indexShortOffAddr happyDefActions st + +{-# LINE 127 "GenericTemplate.hs" #-} + +{-# LINE 147 "GenericTemplate.hs" #-} +indexShortOffAddr arr off = arr ! off + + + + + + + + +----------------------------------------------------------------------------- +-- HappyState data type (not arrays) + +{-# LINE 170 "GenericTemplate.hs" #-} + +----------------------------------------------------------------------------- +-- Shifting a token + +happyShift new_state (0) tk st sts stk@(x `HappyStk` _) = + let i = (case x of { HappyErrorToken (i) -> i }) in +-- trace "shifting the error token" $ + happyDoAction i tk new_state (HappyCons (st) (sts)) (stk) + +happyShift new_state i tk st sts stk = + happyNewToken new_state (HappyCons (st) (sts)) ((HappyTerminal (tk))`HappyStk`stk) + +-- happyReduce is specialised for the common cases. + +happySpecReduce_0 i fn (0) tk st sts stk + = happyFail (0) tk st sts stk +happySpecReduce_0 nt fn j tk st@((action)) sts stk + = happyGoto nt j tk st (HappyCons (st) (sts)) (fn `HappyStk` stk) + +happySpecReduce_1 i fn (0) tk st sts stk + = happyFail (0) tk st sts stk +happySpecReduce_1 nt fn j tk _ sts@((HappyCons (st@(action)) (_))) (v1`HappyStk`stk') + = let r = fn v1 in + happySeq r (happyGoto nt j tk st sts (r `HappyStk` stk')) + +happySpecReduce_2 i fn (0) tk st sts stk + = happyFail (0) tk st sts stk +happySpecReduce_2 nt fn j tk _ (HappyCons (_) (sts@((HappyCons (st@(action)) (_))))) (v1`HappyStk`v2`HappyStk`stk') + = let r = fn v1 v2 in + happySeq r (happyGoto nt j tk st sts (r `HappyStk` stk')) + +happySpecReduce_3 i fn (0) tk st sts stk + = happyFail (0) tk st sts stk +happySpecReduce_3 nt fn j tk _ (HappyCons (_) ((HappyCons (_) (sts@((HappyCons (st@(action)) (_))))))) (v1`HappyStk`v2`HappyStk`v3`HappyStk`stk') + = let r = fn v1 v2 v3 in + happySeq r (happyGoto nt j tk st sts (r `HappyStk` stk')) + +happyReduce k i fn (0) tk st sts stk + = happyFail (0) tk st sts stk +happyReduce k nt fn j tk st sts stk + = case happyDrop (k - ((1) :: Int)) sts of + sts1@((HappyCons (st1@(action)) (_))) -> + let r = fn stk in -- it doesn't hurt to always seq here... + happyDoSeq r (happyGoto nt j tk st1 sts1 r) + +happyMonadReduce k nt fn (0) tk st sts stk + = happyFail (0) tk st sts stk +happyMonadReduce k nt fn j tk st sts stk = + happyThen1 (fn stk tk) (\r -> happyGoto nt j tk st1 sts1 (r `HappyStk` drop_stk)) + where sts1@((HappyCons (st1@(action)) (_))) = happyDrop k (HappyCons (st) (sts)) + drop_stk = happyDropStk k stk + +happyMonad2Reduce k nt fn (0) tk st sts stk + = happyFail (0) tk st sts stk +happyMonad2Reduce k nt fn j tk st sts stk = + happyThen1 (fn stk tk) (\r -> happyNewToken new_state sts1 (r `HappyStk` drop_stk)) + where sts1@((HappyCons (st1@(action)) (_))) = happyDrop k (HappyCons (st) (sts)) + drop_stk = happyDropStk k stk + + off = indexShortOffAddr happyGotoOffsets st1 + off_i = (off + nt) + new_state = indexShortOffAddr happyTable off_i + + + + +happyDrop (0) l = l +happyDrop n (HappyCons (_) (t)) = happyDrop (n - ((1) :: Int)) t + +happyDropStk (0) l = l +happyDropStk n (x `HappyStk` xs) = happyDropStk (n - ((1)::Int)) xs + +----------------------------------------------------------------------------- +-- Moving to a new state after a reduction + + +happyGoto nt j tk st = + {- nothing -} + happyDoAction j tk new_state + where off = indexShortOffAddr happyGotoOffsets st + off_i = (off + nt) + new_state = indexShortOffAddr happyTable off_i + + + + +----------------------------------------------------------------------------- +-- Error recovery ((0) is the error token) + +-- parse error if we are in recovery and we fail again +happyFail (0) tk old_st _ stk = +-- trace "failing" $ + happyError_ tk + +{- We don't need state discarding for our restricted implementation of + "error". In fact, it can cause some bogus parses, so I've disabled it + for now --SDM + +-- discard a state +happyFail (0) tk old_st (HappyCons ((action)) (sts)) + (saved_tok `HappyStk` _ `HappyStk` stk) = +-- trace ("discarding state, depth " ++ show (length stk)) $ + happyDoAction (0) tk action sts ((saved_tok`HappyStk`stk)) +-} + +-- Enter error recovery: generate an error token, +-- save the old token and carry on. +happyFail i tk (action) sts stk = +-- trace "entering error recovery" $ + happyDoAction (0) tk action sts ( (HappyErrorToken (i)) `HappyStk` stk) + +-- Internal happy errors: + +notHappyAtAll = error "Internal Happy error\n" + +----------------------------------------------------------------------------- +-- Hack to get the typechecker to accept our action functions + + + + + + + +----------------------------------------------------------------------------- +-- Seq-ing. If the --strict flag is given, then Happy emits +-- happySeq = happyDoSeq +-- otherwise it emits +-- happySeq = happyDontSeq + +happyDoSeq, happyDontSeq :: a -> b -> b +happyDoSeq a b = a `seq` b +happyDontSeq a b = b + +----------------------------------------------------------------------------- +-- Don't inline any functions from the template. GHC has a nasty habit +-- of deciding to inline happyGoto everywhere, which increases the size of +-- the generated parser quite a bit. + + +{-# NOINLINE happyDoAction #-} +{-# NOINLINE happyTable #-} +{-# NOINLINE happyCheck #-} +{-# NOINLINE happyActOffsets #-} +{-# NOINLINE happyGotoOffsets #-} +{-# NOINLINE happyDefActions #-} + +{-# NOINLINE happyShift #-} +{-# NOINLINE happySpecReduce_0 #-} +{-# NOINLINE happySpecReduce_1 #-} +{-# NOINLINE happySpecReduce_2 #-} +{-# NOINLINE happySpecReduce_3 #-} +{-# NOINLINE happyReduce #-} +{-# NOINLINE happyMonadReduce #-} +{-# NOINLINE happyGoto #-} +{-# NOINLINE happyFail #-} + +-- end of Happy Template.
+ src/HJS/Parser/JavaScriptParser.y view
@@ -0,0 +1,431 @@+-- +-- Author: Mark Wassell +-- +-- Created: 29 January 2007 +-- +-- Copyright (C) 2007 Mark Wassell +-- +-- This library is free software; you can redistribute it and/or +-- modify it under the terms of the GNU Lesser General Public +-- License as published by the Free Software Foundation; either +-- version 2.1 of the License, or (at your option) any later version. +-- +-- This library is distributed in the hope that it will be useful, +-- but WITHOUT ANY WARRANTY; without even the implied warranty of +-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +-- Lesser General Public License for more details. +-- +-- Specification of language comes from +-- Standard ECMA-262 3rd Edition - December 1999 +-- JavaScript 1.5 Reference http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference +-- The JavaScript in JavaScript interpreter + +{ +module HJS.Parser.JavaScriptParser where + +import Data.Char +import Control.Monad.State +import Control.Monad.Error + +import HJS.Parser.Lexer +import HJS.Parser.LexerM +import HJS.Parser.JavaScript +import HJS.Parser.ParserMonad +} + +%name jsprogram Program +%name primexpr PrimExpr + +%monad { P } +%lexer { lexerM } { TokenEof } +%tokentype { Token } +%error { parseError } + +%token + eof { TokenEof } + int { TokenInt $$ } + ident { TokenIdent $$ } + string { TokenStringLit $$ } + '=' { TokenROP "=" } + '+' { TokenROP "+" } + '-' { TokenROP "-" } + '*' { TokenROP "*" } + '/' { TokenROP "/" } + '(' { TokenROP "(" } + ')' { TokenROP ")" } + ',' { TokenROP "," } + '\n' { TokenNL } + '?' { TokenROP "?"} + ':' { TokenROP ":"} + '||' { TokenROP "||"} + '&&' { TokenROP "&&"} + '|' { TokenROP "|"} + '^' { TokenROP "^"} + '&' { TokenROP "&"} + '==' { TokenROP "=="} + '!=' { TokenROP "!="} + '===' { TokenROP "==="} + '!==' { TokenROP "!=="} + '<' { TokenROP "<"} + '<=' { TokenROP "<="} + '>=' { TokenROP ">="} + '>' { TokenROP ">"} + '<<' { TokenROP "<<"} + '>>' { TokenROP ">>"} + '>>>' { TokenROP ">>>"} + '!' { TokenROP "!"} + '~' { TokenROP "~"} + '++' { TokenROP "++"} + '--' { TokenROP "--"} + '.' { TokenROP "."} + '[' { TokenROP "["} + ']' { TokenROP "]"} + '{' { TokenROP "{"} + '}' { TokenROP "}"} + delete { TokenRID "delete" } + void { TokenRID "void" } + typeof { TokenRID "typeof" } + '%' { TokenROP "%" } + '*=' { TokenROP "*=" } + '/=' { TokenROP "/=" } + '%=' { TokenROP "%=" } + '+=' { TokenROP "+=" } + '-=' { TokenROP "-=" } + instanceof { TokenRID "instanceof" } + if { TokenRID "if" } + else { TokenRID "else" } + ';' { TokenROP ";" } + do { TokenRID "do" } + while { TokenRID "while" } + for { TokenRID "for" } + this { TokenRID "this" } + var { TokenRID "var" } + const { TokenRID "const" } + function { TokenRID "function" } + new { TokenRID "new" } + try { TokenRID "try" } + catch { TokenRID "catch" } + finally { TokenRID "finally" } + continue { TokenRID "continue" } + break { TokenRID "break" } + throw { TokenRID "throw" } + return { TokenRID "return" } + with { TokenRID "with" } + switch { TokenRID "switch"} + case { TokenRID "case"} + default { TokenRID "default"} + in { TokenRID "in"} + regex { TokenRegex $$ } + +%% + +Start : Program { $1 } + +-- +-- A.1 Lexical Grammar +-- + + +Literal : int { LitInt $1 } + | string { LitString $1 } + +{- Not exactly sure why putting %% works but it is important. + If not then it will lookahead using the normal lexer + and fail. I think %% discards this lookedahead to give + us a chance to switch the lexer. Also need to run + happy with -a option -} +RegExStart : '/' {} -- %% lexRegex } +RegExEnd : '/' {} + + + +RegEx : RegExStart regex { $2 } + + +-- +-- A.3 Expressions +-- + +PrimExpr :: { PrimExpr } + : this { This } + | ident { Ident $1 } + | Literal { Literal $1 } + | RegEx { Regex $1 } + | ArrayLit { Array $1 } + | ObjectLiteral { Object $1 } + | '(' Expr ')' { Brack $2 } + +ArrayLit : '[' ElementList ']' { ArrSimple $2 } + +ElementList : {- empty -} { [] } + | AssignE { [$1] } + | ElementList ',' AssignE { $1 ++ [$3]} + +ObjectLiteral : '{' '}' { [] } + | '{' PropertyList '}' { $2 } + +-- 'get' and 'put' covered in +-- http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Guide:Creating_New_Objects:Defining_Getters_and_Setters +-- Note that they are not reserved words + +PropertyList : Property { [$1 ] } + | PropertyList ',' Property { $1 ++ [$3] } + + +Property: + PropertyName ':' AssignE { Left ($1, $3 ) } + | ident FuncDecl2 { Right $ GetterPutter $1 $2 } + + +PropertyName : ident { PropNameId $1 } + | string { PropNameStr $1 } + | int { PropNameInt $1 } + +MemberExpr :: { MemberExpr } + : PrimExpr { MemPrimExpr $1 } + | MemberExpr '[' Expr ']' { ArrayExpr $1 $3 } + | MemberExpr '.' ident { MemberCall $1 $3 } + | new MemberExpr Arguments { MemberNew $2 $3 } + +NewExpr : MemberExpr { MemberExpr $1 } + | new NewExpr { NewNewExpr $2 } + +CallExpr : MemberExpr Arguments { CallMember $1 $2 } + | CallExpr Arguments { CallCall $1 $2 } + | CallExpr '[' Expr ']' { CallSquare $1 $3 } + | CallExpr '.' ident { CallDot $1 $3 } + +Arguments : '(' ')' { [] } + |'(' ArgumentList ')' { $2 } + +ArgumentList : AssignE { [$1] } + | ArgumentList ',' AssignE { $1 ++ [$3] } + +LeftExpr : NewExpr { NewExpr $1 } + | CallExpr { CallExpr $1 } + +PostFix : LeftExpr { LeftExpr $1 } + | LeftExpr '++' { PostInc $1 } + | LeftExpr '--' { PostDec $1 } + +UExpr : + PostFix { PostFix $1 } + | delete UExpr { Delete $2 } + | void UExpr { Void $2 } + | typeof UExpr { TypeOf $2 } + | '++' UExpr { DoublePlus $2 } + | '--' UExpr { DoubleMinus $2 } + | '+' UExpr { UnaryPlus $2 } + | '-' UExpr { UnaryMinus $2 } + | '!' UExpr { Not $2 } + | '~' UExpr { BitNot $2 } + +{- +MultExpr2 : MultExpr {% do + st <- get + put st { expectRegex = False } + return $1 + } + + +DivOp : '/' {% do + st <- get + throwError (show st) + put st { expectRegex = True } + return () + } + +-} + + +MultExpr : UExpr {UExpr $1 } + | MultExpr '*' UExpr { Times $1 $3 } + | MultExpr '/' UExpr {Div $1 $3 } + | MultExpr '%' UExpr { Mod $1 $3 } + + +AddExpr : MultExpr { MultExpr $1 } + | AddExpr '+' MultExpr { Plus $1 $3 } + | AddExpr '-' MultExpr { Minus $1 $3 } + +ShiftE : AddExpr { AddExpr $1 } + | ShiftE '<<' AddExpr { ShiftLeft $1 $3 } + | ShiftE '>>' AddExpr { ShiftRight $1 $3 } + | ShiftE '>>>' AddExpr {ShiftRight2 $1 $3 } + +RelE : ShiftE { ShiftE $1 } + | RelE '<' ShiftE { LessThan $1 $3 } + | RelE '>' ShiftE { GreaterThan $1 $3 } + | RelE '<=' ShiftE { LessEqual $1 $3 } + | RelE '>=' ShiftE { GreaterEqual $1 $3 } + | RelE instanceof ShiftE { InstanceOf $1 $3 } + | RelE in ShiftE { InObject $1 $3 } -- JavaScript 1.4 + + + +EqualE : RelE { RelE $1 } + | EqualE '==' RelE { Equal $1 $3 } + | EqualE '!=' RelE { NotEqual $1 $3 } + | EqualE '===' RelE { Equal2 $1 $3 } + | EqualE '!==' RelE { NotEqual $1 $3 } + + +BitAnd : EqualE { EqualE $1 } + | BitAnd '&' EqualE { BABitAnd $1 $3 } + +BitXOR : BitAnd { BitAnd $1 } + | BitXOR '^' BitAnd { BXBitXOR $1 $3 } + +BitOR : BitXOR { BitXOR $1 } + | BitOR '|' BitXOR { BOBitOR $1 $3 } + +LogAnd : BitOR { BitOR $1 } + | LogAnd '&&' BitOR { LALogAnd $1 $3 } + +LogOr : LogAnd { LogAnd $1 } + | LogOr '||' LogAnd { LOLogOr $1 $3 } + +CondE : LogOr { LogOr $1 } + | LogOr '?' AssignE ':' AssignE { CondIf $1 $3 $5 } + +AssignOp : '*=' { AssignOpMult } + | '/=' { AssignOpDiv } + | '%=' { AssignOpMod } + | '+=' { AssignOpPlus } + | '-=' { AssignOpMinus } + | '=' { AssignNormal } + +-- CondE { CondE $1 } + +AssignE : + LeftExpr AssignOp AssignE { Assign $1 $2 $3 } + | CondE { CondE $1 } + | FuncDecl { AEFuncDecl $1 } -- Not In spec. + +Expr : AssignE { AssignE $1 } + +-- +-- A.4 Statements +-- + +Stmt : + Block { Block $1 } + | VarStmt { VarStmt $1 } + | ';' { EmptyStmt } + | ExprStmt { ExprStmt $1 } + | IfStmt { IfStmt $1} + | ItStmt { ItStmt $1 } + | continue ident ';' { ContStmt $ Just $2 } + | continue ';' { ContStmt Nothing } + | break ident ';' { BreakStmt $ Just $2 } + | break ';' { BreakStmt Nothing } + | return ExprSemi ';' { ReturnStmt $ Just $2 } + | return ';' { ReturnStmt Nothing } + | with '(' Expr ')' Stmt { WithStmt $3 $5 } + | ident ':' Stmt { LabelledStmt $1 $3 } + | SwitchStmt { Switch $1 } + | throw ExprSemi ';' { ThrowExpr $2 } + | TryStmt { TryStmt $1 } + +Block : '{' StmtList '}' { $2 } + + +StmtList : {- empty -} { [] } + | Stmt { [$1] } + | StmtList Stmt { $1 ++ [$2] } + +VarStmt : var VarDeclList { $2 } + | const VarDeclList { $2 } -- No mention of usage of const in spec. Is it same as 'var' or just a no-op? + + + +TryStmt : try Block CatchList { TryBC $2 $3 } + | try Block Finally { TryBF $2 $3 } + | try Block CatchList Finally { TryBCF $2 $3 $4 } + +CatchList : Catch { [$1] } + | CatchList Catch { $1 ++ [$2 ] } + +Catch : catch '(' ident ')' Block { Catch $3 $5 } + | catch '(' ident if Expr ')' Block { CatchIf $3 $7 $5} -- JS 1.5 + +Finally : finally Block { $2 } + +ExprSemi : Expr {%% \t -> autoSemiInsert t $1 } + + +ExprStmt : ExprSemi ';' { $1 } + +IfStmt : if '(' Expr ')' Stmt else Stmt { IfElse $3 $5 $7 } + | if '(' Expr ')' Stmt { IfOnly $3 $5 } + +ItStmt : + do Stmt while '(' Expr ')' ';' { DoWhile $2 $5 } + | while '(' Expr ')' Stmt { While $3 $5 } + | for '(' ExprOpt ';' ExprOpt ';' ExprOpt ')' Stmt { For $3 $5 $7 $9 } + | for '(' var VarDeclList ';' ExprOpt ';' ExprOpt ')' Stmt { ForVar $4 $6 $8 $10 } + | for '(' VarDeclList ';' ExprOpt ';' ExprOpt ')' Stmt { ForVar $3 $5 $7 $9 } + | for '(' var VarDeclList in Expr ')' Stmt { ForIn $4 $6 $8 } + | for '(' VarDeclList in Expr ')' Stmt { ForIn $3 $5 $7 } + + +ExprOpt : {- empty -} { Nothing } + | Expr { Just $1 } + +VarDeclList : VarDecl { [$1] } + | VarDeclList ',' VarDecl { $1 ++ [$3] } + +VarDecl : ident Initialiser { VarDecl $1 $2 } + +Initialiser : {- empty -} { Nothing } + | '=' AssignE { Just $2 } + + +SwitchStmt : switch '(' Expr ')' CaseBlock { SSwitch $3 $5 } + +CaseBlock : '{' CaseClauses '}' { CaseBlock $2 [] [] } + | '{' CaseClauses DefaultClause CaseClauses '}' { CaseBlock $2 [$3] $4 } + +CaseClauses : {- empty -} { [] } + | CaseClause { [$1] } + | CaseClauses CaseClause { $1 ++ [$2] } + +CaseClause : case Expr ':' StmtList { CaseClause $2 $4 } + +DefaultClause : default ':' StmtList { DefaultClause $3 } + +-- +-- A.5 Function and Programs +-- + + +FuncDecl : + function FuncDecl2 { $2 } + | function '(' FormalParamList ')' '{' FuncBody '}' { FuncDecl Nothing $3 $6 } + +FuncDecl2 : ident '(' FormalParamList ')' '{' FuncBody '}' { FuncDecl (Just $1) $3 $6 } + + +FormalParamList : {- empty -} { [] } + | ident { [ $1 ] } + | FormalParamList ',' ident { $1 ++ [$3] } + +FuncBody : SourceElements { $1 } + +Program : SourceElements { JSProgram $1 } + +SourceElements : SourceElement { [$1] } + | SourceElements SourceElement { $1 ++ [$2] } + +SourceElement : Stmt { Stmt $1 } + | FuncDecl { SEFuncDecl $1 } + + +{ + +parseError :: Token -> P a +parseError tok = do + s <- get + throwError ("parse error" ++ " tok = " ++ show tok ++ " rest=<" ++ (rest s) ++ "> lnum = " ++ show (lineno s) ++ " mode= " ++ show (mode s) ++ show (tr s)) + +}
+ src/HJS/Parser/Lexer.hs view
@@ -0,0 +1,260 @@+{-# OPTIONS -cpp #-} +{-# LINE 1 "Lexer.x" #-} +module HJS.Parser.Lexer where + +#if __GLASGOW_HASKELL__ >= 603 +#include "ghcconfig.h" +#else +#include "config.h" +#endif +#if __GLASGOW_HASKELL__ >= 503 +import Data.Array +import Data.Char (ord) +import Data.Array.Base (unsafeAt) +#else +import Array +import Char (ord) +#endif +alex_base :: Array Int Int +alex_base = listArray (0,262) [1,19,0,217,335,20,21,64,414,622,830,1038,1246,1454,1662,1870,2078,2286,2494,2702,2910,3118,3326,3534,3742,3950,4158,4366,4574,4782,4990,5198,5406,5614,5822,6030,6238,6446,6654,6862,7070,7278,7486,7694,7902,8110,8318,8526,8734,8942,9150,9358,9566,9774,9982,10190,10398,10606,10814,11022,11230,11438,11646,11854,12062,12270,12478,12686,12894,13102,13310,13518,13726,13934,14142,14350,14558,14766,14974,15182,15390,15598,15806,16014,16222,16430,16638,16846,17054,17262,17470,17678,17886,18094,18302,18510,18718,18926,19134,19342,19550,19758,19966,20174,20382,20590,20798,21006,21214,21422,21630,21838,22046,22254,22462,22670,22878,23086,23294,23502,23710,23918,24126,24334,24542,24750,24958,25166,25374,25582,25790,25998,26206,26414,26622,26830,27038,27246,27454,27662,27870,28078,28286,28494,28702,28910,29118,29326,29534,29742,29950,30158,30366,30574,30782,30990,31198,31406,31614,31822,32030,32238,32446,32654,32862,33070,33278,33486,33694,33902,34110,34318,34526,34734,34942,35150,35358,35566,35774,35982,36190,36398,36606,36814,37022,37230,37438,37646,37854,38062,38270,38478,38686,38894,39102,39310,39518,39726,39934,40142,40350,40558,40766,40974,41182,41390,41598,41806,42014,42222,42430,8,9,28,0,27,0,0,0,0,0,0,0,0,17,18,0,0,0,0,0,0,0,42,0,23,0,24,0,26,0,0,0,0,29,0,-43,0,0,43,0,0,145,42638,42846,0,42975,43177,43379,0,43581,43783,43985] + +alex_table :: Array Int Int +alex_table = listArray (0,44240) [0,-1,-1,-1,-1,-1,-1,-1,-1,-1,7,7,7,7,7,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,7,224,256,-1,-1,239,233,260,226,227,225,213,222,215,223,6,252,252,252,252,252,252,252,252,252,252,220,219,235,211,237,221,-1,5,3,3,212,243,217,218,7,7,7,7,7,244,240,234,247,241,248,236,238,249,242,216,214,245,0,230,-1,231,232,7,-1,99,17,27,74,20,32,166,250,75,0,0,131,0,22,0,162,0,37,47,66,0,24,51,0,0,0,228,246,229,251,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,252,252,252,252,252,252,252,252,252,252,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,0,4,2,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,2,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,254,254,254,254,254,254,254,254,254,254,254,28,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,88,10,254,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,254,254,254,254,118,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,13,254,254,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,204,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,254,254,254,254,254,254,254,254,254,254,13,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,14,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,254,254,254,254,15,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,109,254,254,16,254,254,254,254,254,254,124,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,254,254,254,254,13,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,18,254,254,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,254,254,254,254,254,254,254,254,254,254,254,19,254,101,254,254,254,254,254,254,254,254,254,113,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,13,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,140,254,254,254,21,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,13,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,23,254,254,254,254,254,254,254,254,254,254,254,254,254,39,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,254,254,254,254,13,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,25,41,254,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,26,254,254,254,254,254,254,136,254,254,254,153,254,254,57,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,13,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,254,254,254,254,254,254,254,254,254,254,254,8,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,29,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,30,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,254,254,254,254,254,254,254,254,31,254,254,156,254,254,42,254,254,254,254,254,63,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,13,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,33,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,34,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,35,254,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,254,254,254,254,36,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,254,254,254,13,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,254,254,254,254,254,254,254,254,38,254,254,201,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,254,254,254,254,254,254,254,13,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,254,254,40,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,13,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,254,254,254,254,254,254,254,13,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,254,254,43,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,44,254,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,254,254,254,254,254,254,254,254,45,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,254,254,254,254,254,254,254,104,254,254,254,254,254,254,254,254,254,254,254,122,134,254,46,254,150,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,254,254,254,254,13,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,254,254,254,254,254,254,254,254,254,254,254,48,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,254,254,254,254,254,254,254,254,49,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,254,254,254,254,254,254,254,50,68,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,254,254,254,254,13,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,52,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,53,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,254,254,254,254,254,254,254,254,54,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,163,55,254,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,56,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,13,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,58,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,254,254,254,254,254,254,254,254,59,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,60,254,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,254,254,61,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,62,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,13,254,254,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,254,254,254,254,254,254,254,254,64,254,254,254,254,254,254,254,254,77,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,254,254,254,254,254,254,254,65,254,254,254,254,254,254,254,254,254,81,254,254,254,254,254,254,92,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,254,254,254,254,254,254,254,13,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,67,254,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,13,254,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,254,254,254,254,254,254,254,254,254,254,254,69,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,70,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,71,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,254,182,254,254,254,72,254,254,254,254,254,80,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,254,254,254,254,73,254,254,254,254,254,254,254,254,254,12,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,254,254,254,254,254,13,254,254,254,254,254,254,190,9,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,11,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,76,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,254,254,254,254,13,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,78,254,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,254,254,254,254,79,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,177,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,13,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,254,254,254,254,254,13,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,82,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,254,254,254,254,83,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,254,254,84,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,85,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,86,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,87,254,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,254,254,254,254,254,13,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,89,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,254,254,254,254,90,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,91,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,13,254,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,254,254,93,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,94,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,95,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,96,254,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,97,254,254,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,254,98,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,254,254,254,254,254,254,254,254,254,254,254,254,13,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,100,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,13,254,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,102,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,103,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,13,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,105,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,254,254,254,254,106,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,254,254,254,254,254,254,254,254,254,254,254,107,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,108,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,13,254,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,110,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,111,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,112,254,254,254,128,254,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,254,254,254,254,13,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,254,254,114,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,115,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,254,254,254,254,254,116,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,117,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,254,254,13,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,254,254,254,254,254,254,254,254,119,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,120,254,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,121,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,254,254,254,254,13,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,123,254,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,13,254,254,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,254,254,254,125,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,126,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,254,254,254,254,127,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,254,254,254,254,254,254,13,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,129,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,130,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,13,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,254,254,254,254,132,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,133,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,13,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,135,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,254,254,254,254,13,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,137,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,254,254,254,254,254,254,254,254,138,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,139,254,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,254,254,254,13,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,254,254,254,254,141,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,142,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,254,254,254,254,254,254,254,254,143,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,144,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,145,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,146,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,254,254,254,254,254,254,254,147,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,254,254,148,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,149,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,13,254,254,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,151,254,254,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,152,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,13,254,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,154,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,155,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,254,254,254,254,13,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,254,254,254,254,254,254,157,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,158,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,254,254,254,254,254,254,254,254,254,254,159,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,254,254,160,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,161,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,171,254,254,210,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,13,254,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,13,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,164,254,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,165,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,254,254,254,254,13,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,167,254,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,168,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,169,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,254,254,254,254,254,254,254,254,170,254,254,254,254,254,196,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,13,254,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,172,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,254,254,254,254,173,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,254,254,254,254,254,254,254,254,174,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,175,254,254,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,176,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,13,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,254,254,254,254,178,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,254,254,254,254,254,254,179,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,254,254,254,254,254,254,180,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,181,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,13,254,254,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,183,254,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,184,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,254,254,254,254,185,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,254,254,254,254,254,254,254,254,254,254,254,254,186,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,254,254,254,254,187,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,254,254,254,254,254,254,254,254,254,254,254,188,254,254,206,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,189,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,254,254,254,13,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,254,254,254,254,191,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,192,254,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,254,254,193,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,254,254,254,254,194,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,195,254,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,254,254,254,254,13,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,254,254,254,254,254,254,254,254,254,254,254,197,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,254,254,254,254,254,254,254,254,198,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,199,254,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,200,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,254,254,254,254,13,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,254,254,254,254,254,254,254,254,254,254,254,202,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,254,203,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,13,254,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,205,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,254,254,13,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,254,254,254,254,254,254,254,254,207,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,254,254,254,254,254,254,254,254,254,254,254,208,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,254,209,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,0,0,0,0,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,-1,-1,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,258,0,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0,254,254,254,254,254,254,254,254,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,258,0,255,0,0,0,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,258,0,255,0,0,0,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,262,0,0,0,0,0,0,259,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,262,0,0,0,0,0,0,259,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,262,0,0,0,0,0,0,259,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,0] + +alex_check :: Array Int Int +alex_check = listArray (0,44240) [-1,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,47,47,47,61,61,43,45,9,10,11,12,13,61,61,38,124,61,60,61,61,62,61,61,61,61,-1,91,92,93,94,32,96,97,98,99,100,101,102,103,62,105,-1,-1,108,-1,110,-1,112,-1,114,115,116,-1,118,119,-1,-1,-1,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,215,-1,-1,-1,-1,-1,-1,-1,-1,-1,9,10,-1,-1,13,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,247,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,9,10,-1,-1,13,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,0,1,2,3,4,5,6,7,8,9,-1,11,12,-1,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,-1,34,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,1,2,3,4,5,6,7,8,9,-1,11,12,215,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,-1,34,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,247,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,1,2,3,4,5,6,7,8,9,-1,11,12,215,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,-1,34,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,247,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,1,2,3,4,5,6,7,8,9,-1,11,12,215,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,-1,-1,-1,-1,-1,-1,39,-1,-1,-1,-1,-1,247,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,1,2,3,4,5,6,7,8,9,-1,11,12,215,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,-1,-1,-1,-1,-1,-1,39,-1,-1,-1,-1,-1,247,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,1,2,3,4,5,6,7,8,9,-1,11,12,215,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,-1,-1,-1,-1,-1,-1,39,-1,-1,-1,-1,-1,247,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,215,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,247,-1,-1,-1,-1,-1,-1,-1,-1] + +alex_deflt :: Array Int Int +alex_deflt = listArray (0,262) [253,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,257,257,257,-1,261,261,261] + +alex_accept = listArray (0::Int,262) [[],[],[(AlexAcc (alex_action_0))],[],[],[],[(AlexAcc (alex_action_3))],[(AlexAcc (alex_action_1))],[(AlexAcc (alex_action_2))],[(AlexAcc (alex_action_2))],[(AlexAcc (alex_action_2))],[(AlexAcc (alex_action_2))],[(AlexAcc (alex_action_2))],[(AlexAcc (alex_action_2))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_3))],[(AlexAcc (alex_action_3))],[(AlexAcc (alex_action_3))],[(AlexAcc (alex_action_3))],[(AlexAcc (alex_action_3))],[(AlexAcc (alex_action_3))],[(AlexAcc (alex_action_3))],[(AlexAcc (alex_action_3))],[(AlexAcc (alex_action_3))],[(AlexAcc (alex_action_3))],[(AlexAcc (alex_action_3))],[(AlexAcc (alex_action_3))],[(AlexAcc (alex_action_3))],[(AlexAcc (alex_action_3))],[(AlexAcc (alex_action_3))],[(AlexAcc (alex_action_3))],[(AlexAcc (alex_action_3))],[(AlexAcc (alex_action_3))],[(AlexAcc (alex_action_3))],[(AlexAcc (alex_action_3))],[(AlexAcc (alex_action_3))],[(AlexAcc (alex_action_3))],[(AlexAcc (alex_action_3))],[(AlexAcc (alex_action_3))],[(AlexAcc (alex_action_3))],[(AlexAcc (alex_action_3))],[(AlexAcc (alex_action_3))],[(AlexAcc (alex_action_3))],[(AlexAcc (alex_action_3))],[(AlexAcc (alex_action_3))],[(AlexAcc (alex_action_3))],[(AlexAcc (alex_action_3))],[(AlexAcc (alex_action_3))],[(AlexAcc (alex_action_3))],[(AlexAcc (alex_action_3))],[(AlexAcc (alex_action_3))],[(AlexAcc (alex_action_3))],[(AlexAcc (alex_action_3))],[(AlexAcc (alex_action_3))],[(AlexAcc (alex_action_3))],[(AlexAcc (alex_action_3))],[(AlexAcc (alex_action_4))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_6))],[],[],[],[(AlexAcc (alex_action_7))],[],[],[]] +{-# LINE 65 "Lexer.x" #-} +-- Each right-hand side has type :: String -> Token + + +data Token + = + TokenWhite + | TokenInt Int + | TokenIdent String + | TokenStringLit String + | TokenNL + | TokenRegex String + | TokenEof + | TokenRID String + | TokenROP String + deriving (Show,Eq) + + + +alex_action_0 = \s -> TokenWhite +alex_action_1 = \s -> TokenWhite +alex_action_2 = \s -> TokenRID s +alex_action_3 = \s -> TokenROP s +alex_action_4 = \s -> TokenInt $ read s +alex_action_5 = \s -> TokenIdent s +alex_action_6 = \s -> TokenStringLit s +alex_action_7 = \s -> TokenStringLit s +{-# LINE 1 "GenericTemplate.hs" #-} +{-# LINE 1 "<built-in>" #-} +{-# LINE 1 "<command line>" #-} +{-# LINE 1 "GenericTemplate.hs" #-} +-- ----------------------------------------------------------------------------- +-- ALEX TEMPLATE +-- +-- This code is in the PUBLIC DOMAIN; you may copy it freely and use +-- it for any purpose whatsoever. + +-- ----------------------------------------------------------------------------- +-- INTERNALS and main scanner engine + +{-# LINE 35 "GenericTemplate.hs" #-} + +{-# LINE 45 "GenericTemplate.hs" #-} + +{-# LINE 66 "GenericTemplate.hs" #-} +alexIndexInt16OffAddr arr off = arr ! off + + +{-# LINE 87 "GenericTemplate.hs" #-} +alexIndexInt32OffAddr arr off = arr ! off + + +{-# LINE 98 "GenericTemplate.hs" #-} +quickIndex arr i = arr ! i + + +-- ----------------------------------------------------------------------------- +-- Main lexing routines + +data AlexReturn a + = AlexEOF + | AlexError !AlexInput + | AlexSkip !AlexInput !Int + | AlexToken !AlexInput !Int a + +-- alexScan :: AlexInput -> StartCode -> AlexReturn a +alexScan input (sc) + = alexScanUser undefined input (sc) + +alexScanUser user input (sc) + = case alex_scan_tkn user input (0) input sc AlexNone of + (AlexNone, input') -> + case alexGetChar input of + Nothing -> + + + + AlexEOF + Just _ -> + + + + AlexError input' + + (AlexLastSkip input len, _) -> + + + + AlexSkip input len + + (AlexLastAcc k input len, _) -> + + + + AlexToken input len k + + +-- Push the input through the DFA, remembering the most recent accepting +-- state it encountered. + +alex_scan_tkn user orig_input len input s last_acc = + input `seq` -- strict in the input + let + new_acc = check_accs (alex_accept `quickIndex` (s)) + in + new_acc `seq` + case alexGetChar input of + Nothing -> (new_acc, input) + Just (c, new_input) -> + + + + let + base = alexIndexInt32OffAddr alex_base s + (ord_c) = ord c + offset = (base + ord_c) + check = alexIndexInt16OffAddr alex_check offset + + new_s = if (offset >= (0)) && (check == ord_c) + then alexIndexInt16OffAddr alex_table offset + else alexIndexInt16OffAddr alex_deflt s + in + case new_s of + (-1) -> (new_acc, input) + -- on an error, we want to keep the input *before* the + -- character that failed, not after. + _ -> alex_scan_tkn user orig_input (len + (1)) + new_input new_s new_acc + + where + check_accs [] = last_acc + check_accs (AlexAcc a : _) = AlexLastAcc a input (len) + check_accs (AlexAccSkip : _) = AlexLastSkip input (len) + check_accs (AlexAccPred a pred : rest) + | pred user orig_input (len) input + = AlexLastAcc a input (len) + check_accs (AlexAccSkipPred pred : rest) + | pred user orig_input (len) input + = AlexLastSkip input (len) + check_accs (_ : rest) = check_accs rest + +data AlexLastAcc a + = AlexNone + | AlexLastAcc a !AlexInput !Int + | AlexLastSkip !AlexInput !Int + +data AlexAcc a user + = AlexAcc a + | AlexAccSkip + | AlexAccPred a (AlexAccPred user) + | AlexAccSkipPred (AlexAccPred user) + +type AlexAccPred user = user -> AlexInput -> Int -> AlexInput -> Bool + +-- ----------------------------------------------------------------------------- +-- Predicates on a rule + +alexAndPred p1 p2 user in1 len in2 + = p1 user in1 len in2 && p2 user in1 len in2 + +--alexPrevCharIsPred :: Char -> AlexAccPred _ +alexPrevCharIs c _ input _ _ = c == alexInputPrevChar input + +--alexPrevCharIsOneOfPred :: Array Char Bool -> AlexAccPred _ +alexPrevCharIsOneOf arr _ input _ _ = arr ! alexInputPrevChar input + +--alexRightContext :: Int -> AlexAccPred _ +alexRightContext (sc) user _ _ input = + case alex_scan_tkn user input (0) input sc AlexNone of + (AlexNone, _) -> False + _ -> True + -- TODO: there's no need to find the longest + -- match when checking the right context, just + -- the first match will do. + +-- used by wrappers +iUnbox (i) = i +{-# LINE 1 "wrappers.hs" #-} +{-# LINE 1 "<built-in>" #-} +{-# LINE 1 "<command line>" #-} +{-# LINE 1 "wrappers.hs" #-} +-- ----------------------------------------------------------------------------- +-- Alex wrapper code. +-- +-- This code is in the PUBLIC DOMAIN; you may copy it freely and use +-- it for any purpose whatsoever. + +-- ----------------------------------------------------------------------------- +-- The input type + +{-# LINE 44 "wrappers.hs" #-} + +-- ----------------------------------------------------------------------------- +-- Default monad + +{-# LINE 126 "wrappers.hs" #-} + +-- ----------------------------------------------------------------------------- +-- Basic wrapper + + +type AlexInput = (Char,String) + +alexGetChar (_, []) = Nothing +alexGetChar (_, c:cs) = Just (c, (c,cs)) + +alexInputPrevChar (c,_) = c + +-- alexScanTokens :: String -> [token] +alexScanTokens str = go ('\n',str) + where go inp@(_,str) = + case alexScan inp 0 of + AlexEOF -> [] + AlexError _ -> error "lexical error" + AlexSkip inp' len -> go inp' + AlexToken inp' len act -> act (take len str) : go inp' + + +-- ----------------------------------------------------------------------------- +-- Posn wrapper + +-- Adds text positions to the basic model. + +{-# LINE 163 "wrappers.hs" #-} + +-- ----------------------------------------------------------------------------- +-- GScan wrapper + +-- For compatibility with previous versions of Alex, and because we can. +
+ src/HJS/Parser/Lexer.x view
@@ -0,0 +1,83 @@+{ +module HJS.Parser.Lexer where +} + +%wrapper "basic" + + +$whitechar = [ \t\n\r\f\v] +$spacechar = [ \t] +$special = [\(\)\,\;\[\]\`\{\}] + +$ascdigit = 0-9 +$unidigit = [] -- TODO +$digit = [$ascdigit $unidigit] + +$ascsymbol = [\!\#\$\%\&\*\+\.\/\<\=\>\?\@\\\^\|\-\~\,\;] +$unisymbol = [] -- TODO +$symbol = [$ascsymbol $unisymbol] # [$special \_\:\"\'] + +$large = [A-Z \xc0-\xd6 \xd8-\xde] +$small = [a-z \xdf-\xf6 \xf8-\xff \_] +$alpha = [$small $large] + +$graphic = [$small $large $symbol $digit $special \:\"\'\,] + +$octit = 0-7 +$hexit = [0-9 A-F a-f] +$nl = [\n\r] + +@stringdouble = $graphic # [\"] | " " | $nl +@stringsingle = $graphic # [\'] | " " | $nl + +@reservedid = + break|else|new|var|case|finally|return|void|catch|for|switch|while| + continue|function|this|with|default|if|throw|delete|in|try|do|instanceof|typeof| + abstract|enum|int|short| + boolean|export|interface|static| + byte|extends|long|super| + char|final|native|synchronized| + class|float|package|throws| + const|goto|private|transient| + debugger|implements|protected|volatile| + double|import|public + +@reservedop = + "==" | "=" | "+=" | "-=" | "++" | "--" | ";" | ":" | "?" | "," | "." | + "!" | "*" | "/" | "(" | ")" | "{" | "}" | "[" | "]" | "^" | "&" | "&&" | + "<=" | ">=" | "<" | ">" | "-" | "%" | "*=" | "/=" | "%=" | "+" | + "===" | "!==" | "!=" | "&&" | "||" | "|" | "<<" | ">>" | ">>>" | "~" + +@decimal = $digit+ + +@id = $alpha [$alpha $digit \_]* + +tokens :- + <0> "//" [$spacechar $printable]* $nl { \s -> TokenWhite } + <0> $white+ { \s -> TokenWhite } + <0> @reservedid { \s -> TokenRID s } + <0> @reservedop { \s -> TokenROP s } + <0> @decimal { \s -> TokenInt $ read s} + <0> @id { \s -> TokenIdent s } + <0> \" @stringdouble* \" { \s -> TokenStringLit s } + <0> \' @stringsingle* \' { \s -> TokenStringLit s } + +{ +-- Each right-hand side has type :: String -> Token + + +data Token + = + TokenWhite + | TokenInt Int + | TokenIdent String + | TokenStringLit String + | TokenNL + | TokenRegex String + | TokenEof + | TokenRID String + | TokenROP String + deriving (Show,Eq) + + +}
+ src/HJS/Parser/LexerM.hs view
@@ -0,0 +1,97 @@+{- + + The Monadic Lexer. + Provides a monadic wrapper around the Alex lexer and handles nasties + +-} + +module HJS.Parser.LexerM(lexer,lexerM,autoSemiInsert) where + +import Data.Char +import qualified Data.ByteString.Char8 as BS +import Control.Monad.State +import Control.Monad.Error +import Debug.Trace + +import HJS.Parser.ParserMonad +import HJS.Parser.Lexer +import HJS.Parser.Regex + +-- Cut down lexer for parsing comments. Cannot just skip over as we want to count the lines +lexerComment :: (Token -> P a) -> P a +lexerComment cont = do + st <- get + case (rest st) of + ('\n':cs) -> do put st { rest = cs, lineno = 1 + (lineno st) }; lexerComment cont + ('*':'/':cs) -> do put st { rest = cs }; lexerM 0 cont + (_:cs) -> do put st { rest = cs}; lexerComment cont + + + +lexerM :: Int -> (Token -> P a) -> P a +lexerM action cont = do + st <- get + put st { nl = False } + case action of + 46 -> case parseRegex ('/':(rest st)) of + Left s -> throwError s + Right (s,r) -> do + put st { rest = r, lastToken=Just $ TokenRegex ""} + cont (TokenRegex s) + _ -> lexerM' action cont + {- case expectRegex st && ((lastToken st) == (Just $ TokenROP "/")) of + True -> do + case parseRegex ('/':(rest st)) of + Left s -> throwError s + Right (s,r) -> do + put st { rest = r, lastToken=Just $ TokenRegex ""} + cont (TokenRegex s) + False -> lexerM' cont -} + + + +lexerM' :: Int -> (Token -> P a) -> P a +lexerM' action cont = do + st <- get + case (rest st) of + ('\n':cs) -> do put st { rest = cs, lineno = 1 + (lineno st),nl=True }; lexerM' 0 cont + ('/':'*':cs) -> do put st { rest = cs }; lexerComment cont + _ -> do let (token, cs) = lexer (rest st) + put st { rest=cs,rest2= (rest st),lastToken= Just token } + cont token + +lexerRegex :: String -> (Token,String) +lexerRegex s = case span (\c -> c /= '/') s of + (regex, rest) -> (TokenRegex regex, rest) + +lexer :: String -> (Token,String) +lexer str = go ('\n',str) + where go inp@(_,str) = + case alexScan inp 0 of + AlexEOF -> (TokenEof, []) + AlexError (c,cs) -> error ("lexical error on " ++ cs) + AlexSkip inp' len -> go inp' + AlexToken inp'@(c,cs) len act -> case act (take len str) of + TokenWhite -> go inp' + tok -> (tok, cs) + + + +-- Handle automatic semicolon insertion. This will get passed the current +-- lookahead token which will get discard so even if we have found a ';' we +-- need to put it backonto the stream so that it gets found again. +-- autoSemiInsert :: Token -> String -> P String +autoSemiInsert tok res = do + s <- get + case tok == (TokenROP ";") || tok == (TokenROP "}" ) || (nl s) of + True -> do + let r = if tok == (TokenROP ";") then + rest2 s + else (';':(rest2 s)) + put s { rest= r } + return res + _ -> throwError $ "Expecting Semi or NL " ++ (show tok) ++ (show s) + + +showToken tok = do + Debug.Trace.trace ("Token is " ++ (show tok)) ""
+ src/HJS/Parser/ParserMonad.hs view
@@ -0,0 +1,40 @@+module HJS.Parser.ParserMonad where + + +import Control.Monad.Identity +import Control.Monad.Error +import Control.Monad.State + +import HJS.Parser.Lexer + + +data ParseResult a = Ok a | Failed String deriving Show +data LexerMode = Normal | InComment | InRegex deriving Show +data LexerState = LS { rest::String,lineno::Int,mode::LexerMode,tr:: [String], + nl:: Bool, rest2 :: String, expectRegex :: Bool, lastToken::(Maybe Token)} deriving Show + +startState str = LS { rest=str, lineno=1, mode =Normal, tr=[], nl = False, rest2 = "", expectRegex = False,lastToken=Nothing} + +type P = StateT LexerState (ErrorT String Identity) + +getLineNo :: P Int +getLineNo = do + s <- get + return $ lineno s + +putLineNo :: Int -> P () +putLineNo l = do + s <- get + put s { lineno = l } + + + +trace :: String -> P () +trace ts = do + s <- get + put s { tr = ts : (tr s) } + +ifM a b c = do + case a of + True -> b + False -> c
+ src/HJS/Parser/Regex.hs view
@@ -0,0 +1,68 @@+module HJS.Parser.Regex(parseRegex,t) where + +import Data.Char +import Control.Monad.Identity +import Control.Monad.Error +import Control.Monad.State + +{- regex - '/' --> body +body - nterm not * / \ --> First char +body - \ nterm --> First char +first char -- nterm not / \ --> otherchars +first char -- \ nterm --> otherchars +other chars -- '/' --> regex2 +other chars -- nterm not / \ --> otherchars +others chars -- \ nterm --> otherchars +regex2 -- ipart --> flags +regex2 -- end ---> stop +flags -- ipart --> flags +flags -- end --> stop -} + + +data LState = Start | Body | FirstChar | OtherChars | Flags | State2 | Stop deriving Show + +type P = ErrorT String Identity + + +isNTerm c = isPrint c + +isFirstChar c = isNTerm c && not (elem c [ '*', '/', '\\']) +isOtherChar c = isNTerm c && not (elem c [ '/', '\\']) +isBSeq c c' = c == '\\' && isNTerm c' + + + +parseRegex str = runIdentity $ runErrorT $ parseRegex' Start str + + +doit str = (runIdentity $ runErrorT $ parseRegex' Start str) + +parseRegex' :: LState -> String -> P (String,String) +parseRegex' Start ('/':s) = parseRegex' Body s >>= fn '/' +parseRegex' Start _ = throwError "expecting '/'" + +parseRegex' Body (c:s) | isFirstChar c = parseRegex' FirstChar s >>= fn c +parseRegex' Body (c:c':s) | isBSeq c c' = parseRegex' FirstChar s >>= (\(s,r) -> return $ ((c:c':s),r)) + +parseRegex' FirstChar (c:s) | isOtherChar c = parseRegex' OtherChars s >>= fn c +parseRegex' FirstChar (c:c':s) | isBSeq c c' = parseRegex' OtherChars s >>= (\(s,r) -> return $ ((c:c':s),r)) +parseRegex' FirstChar ('/':s) = parseRegex' State2 s >>= fn '/' + +parseRegex' OtherChars (c:s) | isOtherChar c = parseRegex' OtherChars s >>= fn c +parseRegex' OtherChars (c:c':s) | isBSeq c c' = parseRegex' OtherChars s >>= (\(s,r) -> return $ ((c:c':s),r)) +parseRegex' OtherChars ('/':s) = parseRegex' State2 s >>= fn '/' + +parseRegex' State2 (c:s) | isAlpha c = parseRegex' Flags s >>= fn c +parseRegex' State2 r = return ([],r) + +parseRegex' Flags (c:s) | isAlpha c = parseRegex' Flags s >>= fn c +parseRegex' Flags r = return ([],r) + +parseRegex' st s = throwError $ "Not implemented <" ++ (show st) ++ "> <" ++ s ++ ">" + +fn :: Char -> (String,String) -> P (String ,String) +fn c (s,r) = return $ ((c:s),r) + +t = do + s <- readFile "../test/parsingonly/regex.txt" + putStrLn $ show $ parseRegex s
+ src/Main.hs view
@@ -0,0 +1,133 @@+{- + Haskell Javascript Parser + (c) Mark Wassell 2007 + See LICENSE file for license details + +-} +module Main(main,lexer,parseProgram,parseTest,parseFile) where + + +import Data.ByteString.Char8(split,pack,unpack,join,readInt) +import Data.List +import Data.Ord +import Data.Char + +import System.Console.GetOpt +import Data.Maybe ( fromMaybe ) + +import Control.Monad.Identity +import Control.Monad.Error +import Control.Monad.State + +import System.Directory +import System.Environment + +import HJS.Parser.Lexer +import HJS.Parser.LexerM +import HJS.Parser.JavaScriptParser +import HJS.Parser.JavaScript +import HJS.Parser.ParserMonad + +import HJS.Interpreter.Interp + +data VFlag = Quiet | ShowProgress | ShowErrors | ShowAST deriving (Show,Eq) + +-- Parse a JS program +parseProgram str = runIdentity $ runErrorT $ runStateT jsprogram + (startState str) + +-- Parse primitive expression +parsePrimExpr str = runIdentity $ runErrorT $ runStateT primexpr (startState str) + +-- Parse a file with supplied flags +parseFile :: [VFlag] -> String -> IO () +parseFile flags fname = do + ifM (elem ShowProgress flags) (putStr $ "Parsing \"" ++ fname) (return ()) + s <- readFile fname + handleResult flags $ parseProgram s + +handleResult flags (Right r) | (elem ShowProgress flags) = putStrLn ("\" ok") + | (elem ShowAST flags) = putStrLn ("\" ok " ++ show r) + | otherwise = return () +handleResult flags (Left r) | (elem ShowProgress flags) = putStrLn ("\" failed") + | (elem ShowErrors flags) = putStrLn ("\" failed" ++ r) + | otherwise = return () + +lexFile fname = do + s <- readFile fname + putStrLn $ show $ alexScanTokens s + +runFile fname = do + putStrLn $ "Running: " ++ fname + s <- readFile fname + case parseProgram s of + Right (r,s) -> putStrLn $ show $ interp r + Left s -> putStrLn s + + +main = do + s <- getArgs + main' s + +main' args = do + (opt, files) <- interpOpts args + case (foldr (\x s -> case x of Version -> (True || s); _ -> s) False opt) of + True -> putStrLn "HJS - JavaScript Parser - Version 0.1" + _ -> return () + let vf = foldr (\x s -> case x of (Verbose f) -> (f:s);_ -> s) [] opt + mapM_ (parseFile vf) files + + +parseTest = do + testFiles "../test" (parseFile []) + testFiles "../test/parsingonly" (parseFile []) + + +runTest = testFiles "../test" runFile + +testFiles dir action = do fileList <- getTestFiles dir + mapM_ action fileList + + + +getTestFiles dirName = do + dirList <- getDirectoryContents dirName + return $ map (\f -> dirName ++ "/" ++ f) $ + map unpack $ + map (Data.ByteString.Char8.join (pack "_")) $ + sortBy (comparing (readInt . head)) $ + filter (\l -> (<=) 2 (length l)) $ + map (split '_' . pack) $ + filter (\x -> last x /= '~' || head x == '.' ) dirList + + + + +data Flag = Verbose VFlag | Version + deriving Show + +options :: [OptDescr Flag] +options = + [ Option ['v'] ["verbose"] (OptArg vflag "LEVEL" ) "=1 show progrss, =2 show errors =3 show AST" + , Option ['V','?'] ["version"] (NoArg Version) "show version number" + ] + +vflag :: Maybe String -> Flag +vflag Nothing = Verbose Quiet +vflag (Just s) = let s' = filter (\c -> not $ isSpace c) s + in case s' of + "1" -> Verbose ShowProgress + "2" -> Verbose ShowErrors + "3" -> Verbose ShowAST + _ -> error $ "Cannot parse verbosity option " ++ s' + +--inp,outp :: Maybe String -> Flag +--outp = Output . fromMaybe "stdout" +--inp = Input . fromMaybe "stdin" + +interpOpts :: [String] -> IO ([Flag], [String]) +interpOpts argv = + case getOpt Permute options argv of + (o,n,[] ) -> return (o,n) + (_,_,errs) -> ioError (userError (concat errs ++ usageInfo header options)) + where header = "Usage: hjs [OPTION...] files..."
+ testsuite/10_expressions.js view
@@ -0,0 +1,15 @@+{ +i=10; +i++; + +if (i) { + x = i++; +} else { + x = 20; +} + +do { + x++; + i = i - 1; +} while(i); +}
+ testsuite/parsingonly/00_f.js view
@@ -0,0 +1,4 @@+function Hello(a) +{ + ExprArray(1,1); +}
+ testsuite/parsingonly/02_semicolon.js view
@@ -0,0 +1,13 @@+// Automatic semi-colon insertion + +{ 1 +2 } 3 + +return +a + b + +a = b +//--c - Fails + +a = b + c +(d + e).print()
+ testsuite/parsingonly/04_if.js view
@@ -0,0 +1,3 @@+{ + a = f ? e : g; +}
+ testsuite/parsingonly/05_regex.js view
@@ -0,0 +1,18 @@+x = 1/y; +var newlines = spaces.match(/\n/g); +var newlines = spaces.match(/\n/g); +opRegExpSrc += i.replace(/[?|^&(){}\[\]+\-*\/\.]/g, "\\$&"); + +for (var i = 0, j = tokens.length; i < j; i++) { + if (i > 0) + consts += ", "; + var t = tokens[i]; + if (/^[a-z]/.test(t)) { + consts += t.toUpperCase(); + keywords[t] = i; + } else { + consts += (/^\W/.test(t) ? opTypeNames[t] : t); + } + consts += " = " + x; + tokens[t] = j; +}
+ testsuite/parsingonly/110_perfect.js view
@@ -0,0 +1,39 @@+// Some simple testing of new, eval and some string stuff. + +// constructor -- expression array initialization +function ExprArray(n,v) +{ + // Initializes n values to v coerced to a string. + for (var i = 0; i < n; i++) { + this[i] = "" + v; + } +} + + +// Print the perfect numbers up to n and the sum expression for n's divisors. +function perfect(n) +{ + print("The perfect numbers up to " + n + " are:"); + + // We build sumOfDivisors[i] to hold a string expression for + // the sum of the divisors of i, excluding i itself. + var sumOfDivisors = new ExprArray(n+1,1); + for (var divisor = 2; divisor <= n; divisor++) { + for (var j = divisor + divisor; j <= n; j += divisor) { + sumOfDivisors[j] += " + " + divisor; + } + // At this point everything up to 'divisor' has its sumOfDivisors + // expression calculated, so we can determine whether it's perfect + // already by evaluating. + if (eval(sumOfDivisors[divisor]) == divisor) { + print("" + divisor + " = " + sumOfDivisors[divisor]); + } + } + print("That's all."); +} + + +print("\nA number is 'perfect' if it is equal to the sum of its"); +print("divisors (excluding itself).\n"); +perfect(500); +
+ testsuite/parsingonly/120_js.js view
@@ -0,0 +1,73 @@+/* ***** BEGIN LICENSE BLOCK *****+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1+ *+ * The contents of this file are subject to the Mozilla Public License Version+ * 1.1 (the "License"); you may not use this file except in compliance with+ * the License. You may obtain a copy of the License at+ * http://www.mozilla.org/MPL/+ *+ * Software distributed under the License is distributed on an "AS IS" basis,+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License+ * for the specific language governing rights and limitations under the+ * License.+ *+ * The Original Code is the Narcissus JavaScript engine.+ *+ * The Initial Developer of the Original Code is+ * Brendan Eich <brendan@mozilla.org>.+ * Portions created by the Initial Developer are Copyright (C) 2004+ * the Initial Developer. All Rights Reserved.+ *+ * Contributor(s):+ *+ * Alternatively, the contents of this file may be used under the terms of+ * either the GNU General Public License Version 2 or later (the "GPL"), or+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),+ * in which case the provisions of the GPL or the LGPL are applicable instead+ * of those above. If you wish to allow use of your version of this file only+ * under the terms of either the GPL or the LGPL, and not to allow others to+ * use your version of this file under the terms of the MPL, indicate your+ * decision by deleting the provisions above and replace them with the notice+ * and other provisions required by the GPL or the LGPL. If you do not delete+ * the provisions above, a recipient may use your version of this file under+ * the terms of any one of the MPL, the GPL or the LGPL.+ *+ * ***** END LICENSE BLOCK ***** */++/*+ * Narcissus - JS implemented in JS.+ *+ * Native objects and classes implemented metacircularly:+ * the global object (singleton)+ * eval+ * function objects, Function+ *+ * SpiderMonkey extensions used:+ * catch guards+ * const declarations+ * get and set functions in object initialisers+ * Object.prototype.__defineGetter__+ * Object.prototype.__defineSetter__+ * Object.prototype.__defineProperty__+ * Object.prototype.__proto__+ * filename and line number arguments to *Error constructors+ * callable regular expression objects+ *+ * SpiderMonkey extensions supported metacircularly:+ * catch guards+ * const declarations+ * get and set functions in object initialisers+ */++/*+ * Loads a file relative to the calling script's (our) source directory, and not+ * the directory that the executing shell is being run out of.+ */+function my_load(filename) {+ evaluate(snarf(filename), filename, 1);+}++my_load('jsdefs.js');+my_load('jsparse.js');+my_load('jsexec.js');+
+ testsuite/parsingonly/121_jsdefs.js view
@@ -0,0 +1,171 @@+/* ***** BEGIN LICENSE BLOCK *****+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1+ *+ * The contents of this file are subject to the Mozilla Public License Version+ * 1.1 (the "License"); you may not use this file except in compliance with+ * the License. You may obtain a copy of the License at+ * http://www.mozilla.org/MPL/+ *+ * Software distributed under the License is distributed on an "AS IS" basis,+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License+ * for the specific language governing rights and limitations under the+ * License.+ *+ * The Original Code is the Narcissus JavaScript engine.+ *+ * The Initial Developer of the Original Code is+ * Brendan Eich <brendan@mozilla.org>.+ * Portions created by the Initial Developer are Copyright (C) 2004+ * the Initial Developer. All Rights Reserved.+ *+ * Contributor(s):+ *+ * Alternatively, the contents of this file may be used under the terms of+ * either the GNU General Public License Version 2 or later (the "GPL"), or+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),+ * in which case the provisions of the GPL or the LGPL are applicable instead+ * of those above. If you wish to allow use of your version of this file only+ * under the terms of either the GPL or the LGPL, and not to allow others to+ * use your version of this file under the terms of the MPL, indicate your+ * decision by deleting the provisions above and replace them with the notice+ * and other provisions required by the GPL or the LGPL. If you do not delete+ * the provisions above, a recipient may use your version of this file under+ * the terms of any one of the MPL, the GPL or the LGPL.+ *+ * ***** END LICENSE BLOCK ***** */++/*+ * Narcissus - JS implemented in JS.+ *+ * Well-known constants and lookup tables. Many consts are generated from the+ * tokens table via eval to minimize redundancy, so consumers must be compiled+ * separately to take advantage of the simple switch-case constant propagation+ * done by SpiderMonkey.+ */++const GLOBAL = this;++var tokens = [+ // End of source. ++ "END",++ // Operators and punctuators. Some pair-wise order matters, e.g. (+, -)+ // and (UNARY_PLUS, UNARY_MINUS).+ "\n", ";",+ ",",+ "=",+ "?", ":", "CONDITIONAL",+ "||",+ "&&",+ "|",+ "^",+ "&",+ "==", "!=", "===", "!==",+ "<", "<=", ">=", ">",+ "<<", ">>", ">>>",+ "+", "-",+ "*", "/", "%",+ "!", "~", "UNARY_PLUS", "UNARY_MINUS",+ "++", "--",+ ".",+ "[", "]",+ "{", "}",+ "(", ")",++ // Nonterminal tree node type codes.+ "SCRIPT", "BLOCK", "LABEL", "FOR_IN", "CALL", "NEW_WITH_ARGS", "INDEX",+ "ARRAY_INIT", "OBJECT_INIT", "PROPERTY_INIT", "GETTER", "SETTER",+ "GROUP", "LIST",++ // Terminals.+ "IDENTIFIER", "NUMBER", "STRING", "REGEXP",++ // Keywords.+ "break",+ "case", "catch", "const", "continue",+ "debugger", "default", "delete", "do",+ "else", "enum",+ "false", "finally", "for", "function",+ "if", "in", "instanceof",+ "new", "null",+ "return",+ "switch",+ "this", "throw", "true", "try", "typeof",+ "var", "void",+ "while", "with"+];++// Operator and punctuator mapping from token to tree node type name.+// NB: superstring tokens (e.g., ++) must come before their substring token+// counterparts (+ in the example), so that the opRegExp regular expression+// synthesized from this list makes the longest possible match.+var opTypeNames = {+ '\n': "NEWLINE",+ ';': "SEMICOLON",+ ',': "COMMA",+ '?': "HOOK",+ ':': "COLON",+ '||': "OR",+ '&&': "AND",+ '|': "BITWISE_OR",+ '^': "BITWISE_XOR",+ '&': "BITWISE_AND",+ '===': "STRICT_EQ",+ '==': "EQ",+ '=': "ASSIGN",+ '!==': "STRICT_NE",+ '!=': "NE",+ '<<': "LSH",+ '<=': "LE",+ '<': "LT",+ '>>>': "URSH",+ '>>': "RSH",+ '>=': "GE",+ '>': "GT",+ '++': "INCREMENT",+ '--': "DECREMENT",+ '+': "PLUS",+ '-': "MINUS",+ '*': "MUL",+ '/': "DIV",+ '%': "MOD",+ '!': "NOT",+ '~': "BITWISE_NOT",+ '.': "DOT",+ '[': "LEFT_BRACKET",+ ']': "RIGHT_BRACKET",+ '{': "LEFT_CURLY",+ '}': "RIGHT_CURLY",+ '(': "LEFT_PAREN",+ ')': "RIGHT_PAREN"+};++// Hash of keyword identifier to tokens index. NB: we must null __proto__ to+// avoid toString, etc. namespace pollution.+var keywords = {__proto__: null};++// Define const END, etc., based on the token names. Also map name to index.+var consts = "const ";+for (var i = 0, j = tokens.length; i < j; i++) {+ if (i > 0)+ consts += ", ";+ var t = tokens[i];+ if (/^[a-z]/.test(t)) {+ consts += t.toUpperCase();+ keywords[t] = i;+ } else {+ consts += (/^\W/.test(t) ? opTypeNames[t] : t);+ }+ consts += " = " + i;+ tokens[t] = i;+}+eval(consts + ";");++// Map assignment operators to their indexes in the tokens array.+var assignOps = ['|', '^', '&', '<<', '>>', '>>>', '+', '-', '*', '/', '%'];++for (i = 0, j = assignOps.length; i < j; i++) {+ t = assignOps[i];+ assignOps[t] = tokens[t];+}
+ testsuite/parsingonly/122_jsexec.js view
@@ -0,0 +1,944 @@+/* ***** BEGIN LICENSE BLOCK *****+ * vim: set ts=4 sw=4 et tw=80:+ *+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1+ *+ * The contents of this file are subject to the Mozilla Public License Version+ * 1.1 (the "License"); you may not use this file except in compliance with+ * the License. You may obtain a copy of the License at+ * http://www.mozilla.org/MPL/+ *+ * Software distributed under the License is distributed on an "AS IS" basis,+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License+ * for the specific language governing rights and limitations under the+ * License.+ *+ * The Original Code is the Narcissus JavaScript engine.+ *+ * The Initial Developer of the Original Code is+ * Brendan Eich <brendan@mozilla.org>.+ * Portions created by the Initial Developer are Copyright (C) 2004+ * the Initial Developer. All Rights Reserved.+ *+ * Contributor(s):+ *+ * Alternatively, the contents of this file may be used under the terms of+ * either the GNU General Public License Version 2 or later (the "GPL"), or+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),+ * in which case the provisions of the GPL or the LGPL are applicable instead+ * of those above. If you wish to allow use of your version of this file only+ * under the terms of either the GPL or the LGPL, and not to allow others to+ * use your version of this file under the terms of the MPL, indicate your+ * decision by deleting the provisions above and replace them with the notice+ * and other provisions required by the GPL or the LGPL. If you do not delete+ * the provisions above, a recipient may use your version of this file under+ * the terms of any one of the MPL, the GPL or the LGPL.+ *+ * ***** END LICENSE BLOCK ***** */++/*+ * Narcissus - JS implemented in JS.+ *+ * Execution of parse trees.+ *+ * Standard classes except for eval, Function, Array, and String are borrowed+ * from the host JS environment. Function is metacircular. Array and String+ * are reflected via wrapping the corresponding native constructor and adding+ * an extra level of prototype-based delegation.+ */++const GLOBAL_CODE = 0, EVAL_CODE = 1, FUNCTION_CODE = 2;++function ExecutionContext(type) {+ this.type = type;+}++var global = {+ // Value properties.+ NaN: NaN, Infinity: Infinity, undefined: undefined,++ // Function properties.+ eval: function eval(s) {+ if (typeof s != "string")+ return s;++ var x = ExecutionContext.current;+ var x2 = new ExecutionContext(EVAL_CODE);+ x2.thisObject = x.thisObject;+ x2.caller = x.caller;+ x2.callee = x.callee;+ x2.scope = x.scope;+ ExecutionContext.current = x2;+ try {+ execute(parse(s), x2);+ } catch (e if e == THROW) {+ x.result = x2.result;+ throw e;+ } finally {+ ExecutionContext.current = x;+ }+ return x2.result;+ },+ parseInt: parseInt, parseFloat: parseFloat,+ isNaN: isNaN, isFinite: isFinite,+ decodeURI: decodeURI, encodeURI: encodeURI,+ decodeURIComponent: decodeURIComponent,+ encodeURIComponent: encodeURIComponent,++ // Class constructors. Where ECMA-262 requires C.length == 1, we declare+ // a dummy formal parameter.+ Object: Object,+ Function: function Function(dummy) {+ var p = "", b = "", n = arguments.length;+ if (n) {+ var m = n - 1;+ if (m) {+ p += arguments[0];+ for (var k = 1; k < m; k++)+ p += "," + arguments[k];+ }+ b += arguments[m];+ }++ // XXX We want to pass a good file and line to the tokenizer.+ // Note the anonymous name to maintain parity with Spidermonkey.+ var t = new Tokenizer("anonymous(" + p + ") {" + b + "}");++ // NB: Use the STATEMENT_FORM constant since we don't want to push this+ // function onto the null compilation context.+ var f = FunctionDefinition(t, null, false, STATEMENT_FORM);+ var s = {object: global, parent: null};+ return new FunctionObject(f, s);+ },+ Array: function Array(dummy) {+ // Array when called as a function acts as a constructor.+ return GLOBAL.Array.apply(this, arguments);+ },+ String: function String(s) {+ // Called as function or constructor: convert argument to string type.+ s = arguments.length ? "" + s : "";+ if (this instanceof String) {+ // Called as constructor: save the argument as the string value+ // of this String object and return this object.+ this.value = s;+ return this;+ }+ return s;+ },+ Boolean: Boolean, Number: Number, Date: Date, RegExp: RegExp,+ Error: Error, EvalError: EvalError, RangeError: RangeError,+ ReferenceError: ReferenceError, SyntaxError: SyntaxError,+ TypeError: TypeError, URIError: URIError,++ // Other properties.+ Math: Math,++ // Extensions to ECMA.+ snarf: snarf, evaluate: evaluate,+ load: function load(s) {+ if (typeof s != "string")+ return s;++ evaluate(snarf(s), s, 1)+ },+ print: print, version: null+};++// Helper to avoid Object.prototype.hasOwnProperty polluting scope objects.+function hasDirectProperty(o, p) {+ return Object.prototype.hasOwnProperty.call(o, p);+}++// Reflect a host class into the target global environment by delegation.+function reflectClass(name, proto) {+ var gctor = global[name];+ gctor.__defineProperty__('prototype', proto, true, true, true);+ proto.__defineProperty__('constructor', gctor, false, false, true);+ return proto;+}++// Reflect Array -- note that all Array methods are generic.+reflectClass('Array', new Array);++// Reflect String, overriding non-generic methods.+var gSp = reflectClass('String', new String);+gSp.toSource = function () { return this.value.toSource(); };+gSp.toString = function () { return this.value; };+gSp.valueOf = function () { return this.value; };+global.String.fromCharCode = String.fromCharCode;++var XCp = ExecutionContext.prototype;+ExecutionContext.current = XCp.caller = XCp.callee = null;+XCp.scope = {object: global, parent: null};+XCp.thisObject = global;+XCp.result = undefined;+XCp.target = null;+XCp.ecmaStrictMode = false;++function Reference(base, propertyName, node) {+ this.base = base;+ this.propertyName = propertyName;+ this.node = node;+}++Reference.prototype.toString = function () { return this.node.getSource(); }++function getValue(v) {+ if (v instanceof Reference) {+ if (!v.base) {+ throw new ReferenceError(v.propertyName + " is not defined",+ v.node.filename, v.node.lineno);+ }+ return v.base[v.propertyName];+ }+ return v;+}++function putValue(v, w, vn) {+ if (v instanceof Reference)+ return (v.base || global)[v.propertyName] = w;+ throw new ReferenceError("Invalid assignment left-hand side",+ vn.filename, vn.lineno);+}++function isPrimitive(v) {+ var t = typeof v;+ return (t == "object") ? v === null : t != "function";+}++function isObject(v) {+ var t = typeof v;+ return (t == "object") ? v !== null : t == "function";+}++// If r instanceof Reference, v == getValue(r); else v === r. If passed, rn+// is the node whose execute result was r.+function toObject(v, r, rn) {+ switch (typeof v) {+ case "boolean":+ return new global.Boolean(v);+ case "number":+ return new global.Number(v);+ case "string":+ return new global.String(v);+ case "function":+ return v;+ case "object":+ if (v !== null)+ return v;+ }+ var message = r + " (type " + (typeof v) + ") has no properties";+ throw rn ? new TypeError(message, rn.filename, rn.lineno)+ : new TypeError(message);+}++function execute(n, x) {+ var a, f, i, j, r, s, t, u, v;++ switch (n.type) {+ case FUNCTION:+ if (n.functionForm != DECLARED_FORM) {+ if (!n.name || n.functionForm == STATEMENT_FORM) {+ v = new FunctionObject(n, x.scope);+ if (n.functionForm == STATEMENT_FORM)+ x.scope.object.__defineProperty__(n.name, v, true);+ } else {+ t = new Object;+ x.scope = {object: t, parent: x.scope};+ try {+ v = new FunctionObject(n, x.scope);+ t.__defineProperty__(n.name, v, true, true);+ } finally {+ x.scope = x.scope.parent;+ }+ }+ }+ break;++ case SCRIPT:+ t = x.scope.object;+ a = n.funDecls;+ for (i = 0, j = a.length; i < j; i++) {+ s = a[i].name;+ f = new FunctionObject(a[i], x.scope);+ t.__defineProperty__(s, f, x.type != EVAL_CODE);+ }+ a = n.varDecls;+ for (i = 0, j = a.length; i < j; i++) {+ u = a[i];+ s = u.name;+ if (u.readOnly && hasDirectProperty(t, s)) {+ throw new TypeError("Redeclaration of const " + s,+ u.filename, u.lineno);+ }+ if (u.readOnly || !hasDirectProperty(t, s)) {+ t.__defineProperty__(s, undefined, x.type != EVAL_CODE,+ u.readOnly);+ }+ }+ // FALL THROUGH++ case BLOCK:+ for (i = 0, j = n.length; i < j; i++)+ execute(n[i], x);+ break;++ case IF:+ if (getValue(execute(n.condition, x)))+ execute(n.thenPart, x);+ else if (n.elsePart)+ execute(n.elsePart, x);+ break;++ case SWITCH:+ s = getValue(execute(n.discriminant, x));+ a = n.cases;+ var matchDefault = false;+ switch_loop:+ for (i = 0, j = a.length; ; i++) {+ if (i == j) {+ if (n.defaultIndex >= 0) {+ i = n.defaultIndex - 1; // no case matched, do default+ matchDefault = true;+ continue;+ }+ break; // no default, exit switch_loop+ }+ t = a[i]; // next case (might be default!)+ if (t.type == CASE) {+ u = getValue(execute(t.caseLabel, x));+ } else {+ if (!matchDefault) // not defaulting, skip for now+ continue;+ u = s; // force match to do default+ }+ if (u === s) {+ for (;;) { // this loop exits switch_loop+ if (t.statements.length) {+ try {+ execute(t.statements, x);+ } catch (e if e == BREAK && x.target == n) {+ break switch_loop;+ }+ }+ if (++i == j)+ break switch_loop;+ t = a[i];+ }+ // NOT REACHED+ }+ }+ break;++ case FOR:+ n.setup && getValue(execute(n.setup, x));+ // FALL THROUGH+ case WHILE:+ while (!n.condition || getValue(execute(n.condition, x))) {+ try {+ execute(n.body, x);+ } catch (e if e == BREAK && x.target == n) {+ break;+ } catch (e if e == CONTINUE && x.target == n) {+ continue;+ }+ n.update && getValue(execute(n.update, x));+ }+ break;++ case FOR_IN:+ u = n.varDecl;+ if (u)+ execute(u, x);+ r = n.iterator;+ s = execute(n.object, x);+ v = getValue(s);++ // ECMA deviation to track extant browser JS implementation behavior.+ t = (v == null && !x.ecmaStrictMode) ? v : toObject(v, s, n.object);+ a = [];+ for (i in t)+ a.push(i);+ for (i = 0, j = a.length; i < j; i++) {+ putValue(execute(r, x), a[i], r);+ try {+ execute(n.body, x);+ } catch (e if e == BREAK && x.target == n) {+ break;+ } catch (e if e == CONTINUE && x.target == n) {+ continue;+ }+ }+ break;++ case DO:+ do {+ try {+ execute(n.body, x);+ } catch (e if e == BREAK && x.target == n) {+ break;+ } catch (e if e == CONTINUE && x.target == n) {+ continue;+ }+ } while (getValue(execute(n.condition, x)));+ break;++ case BREAK:+ case CONTINUE:+ x.target = n.target;+ throw n.type;++ case TRY:+ try {+ execute(n.tryBlock, x);+ } catch (e if e == THROW && (j = n.catchClauses.length)) {+ e = x.result;+ x.result = undefined;+ for (i = 0; ; i++) {+ if (i == j) {+ x.result = e;+ throw THROW;+ }+ t = n.catchClauses[i];+ x.scope = {object: {}, parent: x.scope};+ x.scope.object.__defineProperty__(t.varName, e, true);+ try {+ if (t.guard && !getValue(execute(t.guard, x)))+ continue;+ execute(t.block, x);+ break;+ } finally {+ x.scope = x.scope.parent;+ }+ }+ } finally {+ if (n.finallyBlock)+ execute(n.finallyBlock, x);+ }+ break;++ case THROW:+ x.result = getValue(execute(n.exception, x));+ throw THROW;++ case RETURN:+ x.result = getValue(execute(n.value, x));+ throw RETURN;++ case WITH:+ r = execute(n.object, x);+ t = toObject(getValue(r), r, n.object);+ x.scope = {object: t, parent: x.scope};+ try {+ execute(n.body, x);+ } finally {+ x.scope = x.scope.parent;+ }+ break;++ case VAR:+ case CONST:+ for (i = 0, j = n.length; i < j; i++) {+ u = n[i].initializer;+ if (!u)+ continue;+ t = n[i].name;+ for (s = x.scope; s; s = s.parent) {+ if (hasDirectProperty(s.object, t))+ break;+ }+ u = getValue(execute(u, x));+ if (n.type == CONST)+ s.object.__defineProperty__(t, u, x.type != EVAL_CODE, true);+ else+ s.object[t] = u;+ }+ break;++ case DEBUGGER:+ throw "NYI: " + tokens[n.type];++ case SEMICOLON:+ if (n.expression)+ x.result = getValue(execute(n.expression, x));+ break;++ case LABEL:+ try {+ execute(n.statement, x);+ } catch (e if e == BREAK && x.target == n) {+ }+ break;++ case COMMA:+ for (i = 0, j = n.length; i < j; i++)+ v = getValue(execute(n[i], x));+ break;++ case ASSIGN:+ r = execute(n[0], x);+ t = n[0].assignOp;+ if (t)+ u = getValue(r);+ v = getValue(execute(n[1], x));+ if (t) {+ switch (t) {+ case BITWISE_OR: v = u | v; break;+ case BITWISE_XOR: v = u ^ v; break;+ case BITWISE_AND: v = u & v; break;+ case LSH: v = u << v; break;+ case RSH: v = u >> v; break;+ case URSH: v = u >>> v; break;+ case PLUS: v = u + v; break;+ case MINUS: v = u - v; break;+ case MUL: v = u * v; break;+ case DIV: v = u / v; break;+ case MOD: v = u % v; break;+ }+ }+ putValue(r, v, n[0]);+ break;++ case CONDITIONAL:+ v = getValue(execute(n[0], x)) ? getValue(execute(n[1], x))+ : getValue(execute(n[2], x));+ break;++ case OR:+ v = getValue(execute(n[0], x)) || getValue(execute(n[1], x));+ break;++ case AND:+ v = getValue(execute(n[0], x)) && getValue(execute(n[1], x));+ break;++ case BITWISE_OR:+ v = getValue(execute(n[0], x)) | getValue(execute(n[1], x));+ break;++ case BITWISE_XOR:+ v = getValue(execute(n[0], x)) ^ getValue(execute(n[1], x));+ break;++ case BITWISE_AND:+ v = getValue(execute(n[0], x)) & getValue(execute(n[1], x));+ break;++ case EQ:+ v = getValue(execute(n[0], x)) == getValue(execute(n[1], x));+ break;++ case NE:+ v = getValue(execute(n[0], x)) != getValue(execute(n[1], x));+ break;++ case STRICT_EQ:+ v = getValue(execute(n[0], x)) === getValue(execute(n[1], x));+ break;++ case STRICT_NE:+ v = getValue(execute(n[0], x)) !== getValue(execute(n[1], x));+ break;++ case LT:+ v = getValue(execute(n[0], x)) < getValue(execute(n[1], x));+ break;++ case LE:+ v = getValue(execute(n[0], x)) <= getValue(execute(n[1], x));+ break;++ case GE:+ v = getValue(execute(n[0], x)) >= getValue(execute(n[1], x));+ break;++ case GT:+ v = getValue(execute(n[0], x)) > getValue(execute(n[1], x));+ break;++ case IN:+ v = getValue(execute(n[0], x)) in getValue(execute(n[1], x));+ break;++ case INSTANCEOF:+ t = getValue(execute(n[0], x));+ u = getValue(execute(n[1], x));+ if (isObject(u) && typeof u.__hasInstance__ == "function")+ v = u.__hasInstance__(t);+ else+ v = t instanceof u;+ break;++ case LSH:+ v = getValue(execute(n[0], x)) << getValue(execute(n[1], x));+ break;++ case RSH:+ v = getValue(execute(n[0], x)) >> getValue(execute(n[1], x));+ break;++ case URSH:+ v = getValue(execute(n[0], x)) >>> getValue(execute(n[1], x));+ break;++ case PLUS:+ v = getValue(execute(n[0], x)) + getValue(execute(n[1], x));+ break;++ case MINUS:+ v = getValue(execute(n[0], x)) - getValue(execute(n[1], x));+ break;++ case MUL:+ v = getValue(execute(n[0], x)) * getValue(execute(n[1], x));+ break;++ case DIV:+ v = getValue(execute(n[0], x)) / getValue(execute(n[1], x));+ break;++ case MOD:+ v = getValue(execute(n[0], x)) % getValue(execute(n[1], x));+ break;++ case DELETE:+ t = execute(n[0], x);+ v = !(t instanceof Reference) || delete t.base[t.propertyName];+ break;++ case VOID:+ getValue(execute(n[0], x));+ break;++ case TYPEOF:+ t = execute(n[0], x);+ if (t instanceof Reference)+ t = t.base ? t.base[t.propertyName] : undefined;+ v = typeof t;+ break;++ case NOT:+ v = !getValue(execute(n[0], x));+ break;++ case BITWISE_NOT:+ v = ~getValue(execute(n[0], x));+ break;++ case UNARY_PLUS:+ v = +getValue(execute(n[0], x));+ break;++ case UNARY_MINUS:+ v = -getValue(execute(n[0], x));+ break;++ case INCREMENT:+ case DECREMENT:+ t = execute(n[0], x);+ u = Number(getValue(t));+ if (n.postfix)+ v = u;+ putValue(t, (n.type == INCREMENT) ? ++u : --u, n[0]);+ if (!n.postfix)+ v = u;+ break;++ case DOT:+ r = execute(n[0], x);+ t = getValue(r);+ u = n[1].value;+ v = new Reference(toObject(t, r, n[0]), u, n);+ break;++ case INDEX:+ r = execute(n[0], x);+ t = getValue(r);+ u = getValue(execute(n[1], x));+ v = new Reference(toObject(t, r, n[0]), String(u), n);+ break;++ case LIST:+ // Curse ECMA for specifying that arguments is not an Array object!+ v = {};+ for (i = 0, j = n.length; i < j; i++) {+ u = getValue(execute(n[i], x));+ v.__defineProperty__(i, u, false, false, true);+ }+ v.__defineProperty__('length', i, false, false, true);+ break;++ case CALL:+ r = execute(n[0], x);+ a = execute(n[1], x);+ f = getValue(r);+ if (isPrimitive(f) || typeof f.__call__ != "function") {+ throw new TypeError(r + " is not callable",+ n[0].filename, n[0].lineno);+ }+ t = (r instanceof Reference) ? r.base : null;+ if (t instanceof Activation)+ t = null;+ v = f.__call__(t, a, x);+ break;++ case NEW:+ case NEW_WITH_ARGS:+ r = execute(n[0], x);+ f = getValue(r);+ if (n.type == NEW) {+ a = {};+ a.__defineProperty__('length', 0, false, false, true);+ } else {+ a = execute(n[1], x);+ }+ if (isPrimitive(f) || typeof f.__construct__ != "function") {+ throw new TypeError(r + " is not a constructor",+ n[0].filename, n[0].lineno);+ }+ v = f.__construct__(a, x);+ break;++ case ARRAY_INIT:+ v = [];+ for (i = 0, j = n.length; i < j; i++) {+ if (n[i])+ v[i] = getValue(execute(n[i], x));+ }+ v.length = j;+ break;++ case OBJECT_INIT:+ v = {};+ for (i = 0, j = n.length; i < j; i++) {+ t = n[i];+ if (t.type == PROPERTY_INIT) {+ v[t[0].value] = getValue(execute(t[1], x));+ } else {+ f = new FunctionObject(t, x.scope);+ u = (t.type == GETTER) ? '__defineGetter__'+ : '__defineSetter__';+ v[u](t.name, thunk(f, x));+ }+ }+ break;++ case NULL:+ v = null;+ break;++ case THIS:+ v = x.thisObject;+ break;++ case TRUE:+ v = true;+ break;++ case FALSE:+ v = false;+ break;++ case IDENTIFIER:+ for (s = x.scope; s; s = s.parent) {+ if (n.value in s.object)+ break;+ }+ v = new Reference(s && s.object, n.value, n);+ break;++ case NUMBER:+ case STRING:+ case REGEXP:+ v = n.value;+ break;++ case GROUP:+ v = execute(n[0], x);+ break;++ default:+ throw "PANIC: unknown operation " + n.type + ": " + uneval(n);+ }++ return v;+}++function Activation(f, a) {+ for (var i = 0, j = f.params.length; i < j; i++)+ this.__defineProperty__(f.params[i], a[i], true);+ this.__defineProperty__('arguments', a, true);+}++// Null Activation.prototype's proto slot so that Object.prototype.* does not+// pollute the scope of heavyweight functions. Also delete its 'constructor'+// property so that it doesn't pollute function scopes. But first, we must+// copy __defineProperty__ down from Object.prototype.++Activation.prototype.__defineProperty__ = Object.prototype.__defineProperty__;+Activation.prototype.__proto__ = null;+delete Activation.prototype.constructor;++function FunctionObject(node, scope) {+ this.node = node;+ this.scope = scope;+ this.__defineProperty__('length', node.params.length, true, true, true);+ var proto = {};+ this.__defineProperty__('prototype', proto, true);+ proto.__defineProperty__('constructor', this, false, false, true);+}++var FOp = FunctionObject.prototype = {+ // Internal methods.+ __call__: function (t, a, x) {+ var x2 = new ExecutionContext(FUNCTION_CODE);+ x2.thisObject = t || global;+ x2.caller = x;+ x2.callee = this;+ a.__defineProperty__('callee', this, false, false, true);+ var f = this.node;+ x2.scope = {object: new Activation(f, a), parent: this.scope};++ ExecutionContext.current = x2;+ try {+ execute(f.body, x2);+ } catch (e if e == RETURN) {+ return x2.result;+ } catch (e if e == THROW) {+ x.result = x2.result;+ throw THROW;+ } finally {+ ExecutionContext.current = x;+ }+ return undefined;+ },++ __construct__: function (a, x) {+ var o = new Object;+ var p = this.prototype;+ if (isObject(p))+ o.__proto__ = p;+ // else o.__proto__ defaulted to Object.prototype++ var v = this.__call__(o, a, x);+ if (isObject(v))+ return v;+ return o;+ },++ __hasInstance__: function (v) {+ if (isPrimitive(v))+ return false;+ var p = this.prototype;+ if (isPrimitive(p)) {+ throw new TypeError("'prototype' property is not an object",+ this.node.filename, this.node.lineno);+ }+ var o;+ while ((o = v.__proto__)) {+ if (o == p)+ return true;+ v = o;+ }+ return false;+ },++ // Standard methods.+ toString: function () {+ return this.node.getSource();+ },++ apply: function (t, a) {+ // Curse ECMA again!+ if (typeof this.__call__ != "function") {+ throw new TypeError("Function.prototype.apply called on" ++ " uncallable object");+ }++ if (t === undefined || t === null)+ t = global;+ else if (typeof t != "object")+ t = toObject(t, t);++ if (a === undefined || a === null) {+ a = {};+ a.__defineProperty__('length', 0, false, false, true);+ } else if (a instanceof Array) {+ var v = {};+ for (var i = 0, j = a.length; i < j; i++)+ v.__defineProperty__(i, a[i], false, false, true);+ v.__defineProperty__('length', i, false, false, true);+ a = v;+ } else if (!(a instanceof Object)) {+ // XXX check for a non-arguments object+ throw new TypeError("Second argument to Function.prototype.apply" ++ " must be an array or arguments object",+ this.node.filename, this.node.lineno);+ }++ return this.__call__(t, a, ExecutionContext.current);+ },++ call: function (t) {+ // Curse ECMA a third time!+ var a = Array.prototype.splice.call(arguments, 1);+ return this.apply(t, a);+ }+};++// Connect Function.prototype and Function.prototype.constructor in global.+reflectClass('Function', FOp);++// Help native and host-scripted functions be like FunctionObjects.+var Fp = Function.prototype;+var REp = RegExp.prototype;++if (!('__call__' in Fp)) {+ Fp.__defineProperty__('__call__', function (t, a, x) {+ // Curse ECMA yet again!+ a = Array.prototype.splice.call(a, 0, a.length);+ return this.apply(t, a);+ }, true, true, true);++ REp.__defineProperty__('__call__', function (t, a, x) {+ a = Array.prototype.splice.call(a, 0, a.length);+ return this.exec.apply(this, a);+ }, true, true, true);++ Fp.__defineProperty__('__construct__', function (a, x) {+ a = Array.prototype.splice.call(a, 0, a.length);+ return this.__applyConstructor__(a);+ }, true, true, true);++ // Since we use native functions such as Date along with host ones such+ // as global.eval, we want both to be considered instances of the native+ // Function constructor.+ Fp.__defineProperty__('__hasInstance__', function (v) {+ return v instanceof Function || v instanceof global.Function;+ }, true, true, true);+}++function thunk(f, x) {+ return function () { return f.__call__(this, arguments, x); };+}++function evaluate(s, f, l) {+ if (typeof s != "string")+ return s;++ var x = ExecutionContext.current;+ var x2 = new ExecutionContext(GLOBAL_CODE);+ ExecutionContext.current = x2;+ try {+ execute(parse(s, f, l), x2);+ } catch (e if e == THROW) {+ if (x) {+ x.result = x2.result;+ throw THROW;+ }+ throw x2.result;+ } finally {+ ExecutionContext.current = x;+ }+ return x2.result;+}
+ testsuite/parsingonly/123_jsparse.js view
@@ -0,0 +1,997 @@+/* vim: set sw=4 ts=8 et tw=80: */+/* ***** BEGIN LICENSE BLOCK *****+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1+ *+ * The contents of this file are subject to the Mozilla Public License Version+ * 1.1 (the "License"); you may not use this file except in compliance with+ * the License. You may obtain a copy of the License at+ * http://www.mozilla.org/MPL/+ *+ * Software distributed under the License is distributed on an "AS IS" basis,+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License+ * for the specific language governing rights and limitations under the+ * License.+ *+ * The Original Code is the Narcissus JavaScript engine.+ *+ * The Initial Developer of the Original Code is+ * Brendan Eich <brendan@mozilla.org>.+ * Portions created by the Initial Developer are Copyright (C) 2004+ * the Initial Developer. All Rights Reserved.+ *+ * Contributor(s):+ *+ * Alternatively, the contents of this file may be used under the terms of+ * either the GNU General Public License Version 2 or later (the "GPL"), or+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),+ * in which case the provisions of the GPL or the LGPL are applicable instead+ * of those above. If you wish to allow use of your version of this file only+ * under the terms of either the GPL or the LGPL, and not to allow others to+ * use your version of this file under the terms of the MPL, indicate your+ * decision by deleting the provisions above and replace them with the notice+ * and other provisions required by the GPL or the LGPL. If you do not delete+ * the provisions above, a recipient may use your version of this file under+ * the terms of any one of the MPL, the GPL or the LGPL.+ *+ * ***** END LICENSE BLOCK ***** */++/*+ * Narcissus - JS implemented in JS.+ *+ * Lexical scanner and parser.+ */++// Build a regexp that recognizes operators and punctuators (except newline).+var opRegExpSrc = "^";+for (i in opTypeNames) {+ if (i == '\n')+ continue;+ if (opRegExpSrc != "^")+ opRegExpSrc += "|^";+ opRegExpSrc += i.replace(/[?|^&(){}\[\]+\-*\/\.]/g, "\\$&");+}+var opRegExp = new RegExp(opRegExpSrc);++// A regexp to match floating point literals (but not integer literals).+var fpRegExp = /^\d+\.\d*(?:[eE][-+]?\d+)?|^\d+(?:\.\d*)?[eE][-+]?\d+|^\.\d+(?:[eE][-+]?\d+)?/;++function Tokenizer(s, f, l) {+ this.cursor = 0;+ this.source = String(s);+ this.tokens = [];+ this.tokenIndex = 0;+ this.lookahead = 0;+ this.scanNewlines = false;+ this.scanOperand = true;+ this.filename = f || "";+ this.lineno = l || 1;+}++Tokenizer.prototype = {+ get input() {+ return this.source.substring(this.cursor);+ },++ get done() {+ return this.peek() == END;+ },++ get token() {+ return this.tokens[this.tokenIndex];+ },++ match: function (tt) {+ return this.get() == tt || this.unget();+ },++ mustMatch: function (tt) {+ if (!this.match(tt))+ throw this.newSyntaxError("Missing " + tokens[tt].toLowerCase());+ return this.token;+ },++ peek: function () {+ var tt;+ if (this.lookahead) {+ tt = this.tokens[(this.tokenIndex + this.lookahead) & 3].type;+ } else {+ tt = this.get();+ this.unget();+ }+ return tt;+ },++ peekOnSameLine: function () {+ this.scanNewlines = true;+ var tt = this.peek();+ this.scanNewlines = false;+ return tt;+ },++ get: function () {+ var token;+ while (this.lookahead) {+ --this.lookahead;+ this.tokenIndex = (this.tokenIndex + 1) & 3;+ token = this.tokens[this.tokenIndex];+ if (token.type != NEWLINE || this.scanNewlines)+ return token.type;+ }++ for (;;) {+ var input = this.input;+ var match = (this.scanNewlines ? /^[ \t]+/ : /^\s+/)(input);+ if (match) {+ var spaces = match[0];+ this.cursor += spaces.length;+ var newlines = spaces.match(/\n/g);+ if (newlines)+ this.lineno += newlines.length;+ input = this.input;+ }++ if (!(match = /^\/(?:\*(?:.|\n)*?\*\/|\/.*)/(input)))+ break;+ var comment = match[0];+ this.cursor += comment.length;+ newlines = comment.match(/\n/g);+ if (newlines)+ this.lineno += newlines.length+ }++ this.tokenIndex = (this.tokenIndex + 1) & 3;+ token = this.tokens[this.tokenIndex];+ if (!token)+ this.tokens[this.tokenIndex] = token = {};++ if (!input)+ return token.type = END;++ if ((match = fpRegExp(input))) {+ token.type = NUMBER;+ token.value = parseFloat(match[0]);+ } else if ((match = /^0[xX][\da-fA-F]+|^0[0-7]*|^\d+/(input))) {+ token.type = NUMBER;+ token.value = parseInt(match[0]);+ } else if ((match = /^\w+/(input))) {+ var id = match[0];+ token.type = keywords[id] || IDENTIFIER;+ token.value = id;+ } else if ((match = /^"(?:\\.|[^"])*"|^'(?:[^']|\\.)*'/(input))) { //"){+ token.type = STRING;+ token.value = eval(match[0]);+ } else if (this.scanOperand &&+ (match = /^\/((?:\\.|[^\/])+)\/([gi]*)/(input))) {+ token.type = REGEXP;+ token.value = new RegExp(match[1], match[2]);+ } else if ((match = opRegExp(input))) {+ var op = match[0];+ if (assignOps[op] && input[op.length] == '=') {+ token.type = ASSIGN;+ token.assignOp = GLOBAL[opTypeNames[op]];+ match[0] += '=';+ } else {+ token.type = GLOBAL[opTypeNames[op]];+ if (this.scanOperand &&+ (token.type == PLUS || token.type == MINUS)) {+ token.type += UNARY_PLUS - PLUS;+ }+ token.assignOp = null;+ }+ token.value = op;+ } else {+ throw this.newSyntaxError("Illegal token");+ }++ token.start = this.cursor;+ this.cursor += match[0].length;+ token.end = this.cursor;+ token.lineno = this.lineno;+ return token.type;+ },++ unget: function () {+ if (++this.lookahead == 4) throw "PANIC: too much lookahead!";+ this.tokenIndex = (this.tokenIndex - 1) & 3;+ },++ newSyntaxError: function (m) {+ var e = new SyntaxError(m, this.filename, this.lineno);+ e.source = this.source;+ e.cursor = this.cursor;+ return e;+ }+};++function CompilerContext(inFunction) {+ this.inFunction = inFunction;+ this.stmtStack = [];+ this.funDecls = [];+ this.varDecls = [];+}++var CCp = CompilerContext.prototype;+CCp.bracketLevel = CCp.curlyLevel = CCp.parenLevel = CCp.hookLevel = 0;+CCp.ecmaStrictMode = CCp.inForLoopInit = false;++function Script(t, x) {+ var n = Statements(t, x);+ n.type = SCRIPT;+ n.funDecls = x.funDecls;+ n.varDecls = x.varDecls;+ return n;+}++// Node extends Array, which we extend slightly with a top-of-stack method.+Array.prototype.__defineProperty__(+ 'top',+ function () { + return this.length && this[this.length-1]; + },+ false, false, true+);++function Node(t, type) {+ var token = t.token;+ if (token) {+ this.type = type || token.type;+ this.value = token.value;+ this.lineno = token.lineno;+ this.start = token.start;+ this.end = token.end;+ } else {+ this.type = type;+ this.lineno = t.lineno;+ }+ this.tokenizer = t;++ for (var i = 2; i < arguments.length; i++)+ this.push(arguments[i]);+}++var Np = Node.prototype = new Array;+Np.constructor = Node;+Np.toSource = Object.prototype.toSource;++// Always use push to add operands to an expression, to update start and end.+Np.push = function (kid) {+ if (kid.start < this.start)+ this.start = kid.start;+ if (this.end < kid.end)+ this.end = kid.end;+ return Array.prototype.push.call(this, kid);+}++Node.indentLevel = 0;++function tokenstr(tt) {+ var t = tokens[tt];+ return /^\W/.test(t) ? opTypeNames[t] : t.toUpperCase();+}++Np.toString = function () {+ var a = [];+ for (var i in this) {+ if (this.hasOwnProperty(i) && i != 'type')+ a.push({id: i, value: this[i]});+ }+ a.sort(function (a,b) { return (a.id < b.id) ? -1 : 1; });+ const INDENTATION = " ";+ var n = ++Node.indentLevel;+ var s = "{\n" + INDENTATION.repeat(n) + "type: " + tokenstr(this.type);+ for (i = 0; i < a.length; i++)+ s += ",\n" + INDENTATION.repeat(n) + a[i].id + ": " + a[i].value;+ n = --Node.indentLevel;+ s += "\n" + INDENTATION.repeat(n) + "}";+ return s;+}++Np.getSource = function () {+ return this.tokenizer.source.slice(this.start, this.end);+};++Np.__defineGetter__('filename',+ function () { return this.tokenizer.filename; });++String.prototype.__defineProperty__(+ 'repeat',+ function (n) {+ var s = "", t = this + s;+ while (--n >= 0)+ s += t;+ return s;+ },+ false, false, true+);++// Statement stack and nested statement handler.+function nest(t, x, node, func, end) {+ x.stmtStack.push(node);+ var n = func(t, x);+ x.stmtStack.pop();+ end && t.mustMatch(end);+ return n;+}++function Statements(t, x) {+ var n = new Node(t, BLOCK);+ x.stmtStack.push(n);+ while (!t.done && t.peek() != RIGHT_CURLY)+ n.push(Statement(t, x));+ x.stmtStack.pop();+ return n;+}++function Block(t, x) {+ t.mustMatch(LEFT_CURLY);+ var n = Statements(t, x);+ t.mustMatch(RIGHT_CURLY);+ return n;+}++const DECLARED_FORM = 0, EXPRESSED_FORM = 1, STATEMENT_FORM = 2;++function Statement(t, x) {+ var i, label, n, n2, ss, tt = t.get();++ // Cases for statements ending in a right curly return early, avoiding the+ // common semicolon insertion magic after this switch.+ switch (tt) {+ case FUNCTION:+ return FunctionDefinition(t, x, true,+ (x.stmtStack.length > 1)+ ? STATEMENT_FORM+ : DECLARED_FORM);++ case LEFT_CURLY:+ n = Statements(t, x);+ t.mustMatch(RIGHT_CURLY);+ return n;++ case IF:+ n = new Node(t);+ n.condition = ParenExpression(t, x);+ x.stmtStack.push(n);+ n.thenPart = Statement(t, x);+ n.elsePart = t.match(ELSE) ? Statement(t, x) : null;+ x.stmtStack.pop();+ return n;++ case SWITCH:+ n = new Node(t);+ t.mustMatch(LEFT_PAREN);+ n.discriminant = Expression(t, x);+ t.mustMatch(RIGHT_PAREN);+ n.cases = [];+ n.defaultIndex = -1;+ x.stmtStack.push(n);+ t.mustMatch(LEFT_CURLY);+ while ((tt = t.get()) != RIGHT_CURLY) {+ switch (tt) {+ case DEFAULT:+ if (n.defaultIndex >= 0)+ throw t.newSyntaxError("More than one switch default");+ // FALL THROUGH+ case CASE:+ n2 = new Node(t);+ if (tt == DEFAULT)+ n.defaultIndex = n.cases.length;+ else+ n2.caseLabel = Expression(t, x, COLON);+ break;+ default:+ throw t.newSyntaxError("Invalid switch case");+ }+ t.mustMatch(COLON);+ n2.statements = new Node(t, BLOCK);+ while ((tt=t.peek()) != CASE && tt != DEFAULT && tt != RIGHT_CURLY)+ n2.statements.push(Statement(t, x));+ n.cases.push(n2);+ }+ x.stmtStack.pop();+ return n;++ case FOR:+ n = new Node(t);+ n.isLoop = true;+ t.mustMatch(LEFT_PAREN);+ if ((tt = t.peek()) != SEMICOLON) {+ x.inForLoopInit = true;+ if (tt == VAR || tt == CONST) {+ t.get();+ n2 = Variables(t, x);+ } else {+ n2 = Expression(t, x);+ }+ x.inForLoopInit = false;+ }+ if (n2 && t.match(IN)) {+ n.type = FOR_IN;+ if (n2.type == VAR) {+ if (n2.length != 1) {+ throw new SyntaxError("Invalid for..in left-hand side",+ t.filename, n2.lineno);+ }++ // NB: n2[0].type == IDENTIFIER and n2[0].value == n2[0].name.+ n.iterator = n2[0];+ n.varDecl = n2;+ } else {+ n.iterator = n2;+ n.varDecl = null;+ }+ n.object = Expression(t, x);+ } else {+ n.setup = n2 || null;+ t.mustMatch(SEMICOLON);+ n.condition = (t.peek() == SEMICOLON) ? null : Expression(t, x);+ t.mustMatch(SEMICOLON);+ n.update = (t.peek() == RIGHT_PAREN) ? null : Expression(t, x);+ }+ t.mustMatch(RIGHT_PAREN);+ n.body = nest(t, x, n, Statement);+ return n;++ case WHILE:+ n = new Node(t);+ n.isLoop = true;+ n.condition = ParenExpression(t, x);+ n.body = nest(t, x, n, Statement);+ return n;++ case DO:+ n = new Node(t);+ n.isLoop = true;+ n.body = nest(t, x, n, Statement, WHILE);+ n.condition = ParenExpression(t, x);+ if (!x.ecmaStrictMode) {+ // <script language="JavaScript"> (without version hints) may need+ // automatic semicolon insertion without a newline after do-while.+ // See http://bugzilla.mozilla.org/show_bug.cgi?id=238945.+ t.match(SEMICOLON);+ return n;+ }+ break;++ case BREAK:+ case CONTINUE:+ n = new Node(t);+ if (t.peekOnSameLine() == IDENTIFIER) {+ t.get();+ n.label = t.token.value;+ }+ ss = x.stmtStack;+ i = ss.length;+ label = n.label;+ if (label) {+ do {+ if (--i < 0)+ throw t.newSyntaxError("Label not found");+ } while (ss[i].label != label);+ } else {+ do {+ if (--i < 0) {+ throw t.newSyntaxError("Invalid " + ((tt == BREAK)+ ? "break"+ : "continue"));+ }+ } while (!ss[i].isLoop && (tt != BREAK || ss[i].type != SWITCH));+ }+ n.target = ss[i];+ break;++ case TRY:+ n = new Node(t);+ n.tryBlock = Block(t, x);+ n.catchClauses = [];+ while (t.match(CATCH)) {+ n2 = new Node(t);+ t.mustMatch(LEFT_PAREN);+ n2.varName = t.mustMatch(IDENTIFIER).value;+ if (t.match(IF)) {+ if (x.ecmaStrictMode)+ throw t.newSyntaxError("Illegal catch guard");+ if (n.catchClauses.length && !n.catchClauses.top().guard)+ throw t.newSyntaxError("Guarded catch after unguarded");+ n2.guard = Expression(t, x);+ } else {+ n2.guard = null;+ }+ t.mustMatch(RIGHT_PAREN);+ n2.block = Block(t, x);+ n.catchClauses.push(n2);+ }+ if (t.match(FINALLY))+ n.finallyBlock = Block(t, x);+ if (!n.catchClauses.length && !n.finallyBlock)+ throw t.newSyntaxError("Invalid try statement");+ return n;++ case CATCH:+ case FINALLY:+ throw t.newSyntaxError(tokens[tt] + " without preceding try");++ case THROW:+ n = new Node(t);+ n.exception = Expression(t, x);+ break;++ case RETURN:+ if (!x.inFunction)+ throw t.newSyntaxError("Invalid return");+ n = new Node(t);+ tt = t.peekOnSameLine();+ if (tt != END && tt != NEWLINE && tt != SEMICOLON && tt != RIGHT_CURLY)+ n.value = Expression(t, x);+ break;++ case WITH:+ n = new Node(t);+ n.object = ParenExpression(t, x);+ n.body = nest(t, x, n, Statement);+ return n;++ case VAR:+ case CONST:+ n = Variables(t, x);+ break;++ case DEBUGGER:+ n = new Node(t);+ break;++ case NEWLINE:+ case SEMICOLON:+ n = new Node(t, SEMICOLON);+ n.expression = null;+ return n;++ default:+ if (tt == IDENTIFIER && t.peek() == COLON) {+ label = t.token.value;+ ss = x.stmtStack;+ for (i = ss.length-1; i >= 0; --i) {+ if (ss[i].label == label)+ throw t.newSyntaxError("Duplicate label");+ }+ t.get();+ n = new Node(t, LABEL);+ n.label = label;+ n.statement = nest(t, x, n, Statement);+ return n;+ }++ n = new Node(t, SEMICOLON);+ t.unget();+ n.expression = Expression(t, x);+ n.end = n.expression.end;+ break;+ }++ if (t.lineno == t.token.lineno) {+ tt = t.peekOnSameLine();+ if (tt != END && tt != NEWLINE && tt != SEMICOLON && tt != RIGHT_CURLY)+ throw t.newSyntaxError("Missing ; before statement");+ }+ t.match(SEMICOLON);+ return n;+}++function FunctionDefinition(t, x, requireName, functionForm) {+ var f = new Node(t);+ if (f.type != FUNCTION)+ f.type = (f.value == "get") ? GETTER : SETTER;+ if (t.match(IDENTIFIER))+ f.name = t.token.value;+ else if (requireName)+ throw t.newSyntaxError("Missing function identifier");++ t.mustMatch(LEFT_PAREN);+ f.params = [];+ var tt;+ while ((tt = t.get()) != RIGHT_PAREN) {+ if (tt != IDENTIFIER)+ throw t.newSyntaxError("Missing formal parameter");+ f.params.push(t.token.value);+ if (t.peek() != RIGHT_PAREN)+ t.mustMatch(COMMA);+ }++ t.mustMatch(LEFT_CURLY);+ var x2 = new CompilerContext(true);+ f.body = Script(t, x2);+ t.mustMatch(RIGHT_CURLY);+ f.end = t.token.end;++ f.functionForm = functionForm;+ if (functionForm == DECLARED_FORM)+ x.funDecls.push(f);+ return f;+}++function Variables(t, x) {+ var n = new Node(t);+ do {+ t.mustMatch(IDENTIFIER);+ var n2 = new Node(t);+ n2.name = n2.value;+ if (t.match(ASSIGN)) {+ if (t.token.assignOp)+ throw t.newSyntaxError("Invalid variable initialization");+ n2.initializer = Expression(t, x, COMMA);+ }+ n2.readOnly = (n.type == CONST);+ n.push(n2);+ x.varDecls.push(n2);+ } while (t.match(COMMA));+ return n;+}++function ParenExpression(t, x) {+ t.mustMatch(LEFT_PAREN);+ var n = Expression(t, x);+ t.mustMatch(RIGHT_PAREN);+ return n;+}++var opPrecedence = {+ SEMICOLON: 0,+ COMMA: 1,+ ASSIGN: 2, HOOK: 2, COLON: 2, CONDITIONAL: 2,+ // The above all have to have the same precedence, see bug 330975.+ OR: 4,+ AND: 5,+ BITWISE_OR: 6,+ BITWISE_XOR: 7,+ BITWISE_AND: 8,+ EQ: 9, NE: 9, STRICT_EQ: 9, STRICT_NE: 9,+ LT: 10, LE: 10, GE: 10, GT: 10, IN: 10, INSTANCEOF: 10,+ LSH: 11, RSH: 11, URSH: 11,+ PLUS: 12, MINUS: 12,+ MUL: 13, DIV: 13, MOD: 13,+ DELETE: 14, VOID: 14, TYPEOF: 14, // PRE_INCREMENT: 14, PRE_DECREMENT: 14,+ NOT: 14, BITWISE_NOT: 14, UNARY_PLUS: 14, UNARY_MINUS: 14,+ INCREMENT: 15, DECREMENT: 15, // postfix+ NEW: 16,+ DOT: 17+};++// Map operator type code to precedence.+for (i in opPrecedence)+ opPrecedence[GLOBAL[i]] = opPrecedence[i];++var opArity = {+ COMMA: -2,+ ASSIGN: 2,+ CONDITIONAL: 3,+ OR: 2,+ AND: 2,+ BITWISE_OR: 2,+ BITWISE_XOR: 2,+ BITWISE_AND: 2,+ EQ: 2, NE: 2, STRICT_EQ: 2, STRICT_NE: 2,+ LT: 2, LE: 2, GE: 2, GT: 2, IN: 2, INSTANCEOF: 2,+ LSH: 2, RSH: 2, URSH: 2,+ PLUS: 2, MINUS: 2,+ MUL: 2, DIV: 2, MOD: 2,+ DELETE: 1, VOID: 1, TYPEOF: 1, // PRE_INCREMENT: 1, PRE_DECREMENT: 1,+ NOT: 1, BITWISE_NOT: 1, UNARY_PLUS: 1, UNARY_MINUS: 1,+ INCREMENT: 1, DECREMENT: 1, // postfix+ NEW: 1, NEW_WITH_ARGS: 2, DOT: 2, INDEX: 2, CALL: 2,+ ARRAY_INIT: 1, OBJECT_INIT: 1, GROUP: 1+};++// Map operator type code to arity.+for (i in opArity)+ opArity[GLOBAL[i]] = opArity[i];++function Expression(t, x, stop) {+ var n, id, tt, operators = [], operands = [];+ var bl = x.bracketLevel, cl = x.curlyLevel, pl = x.parenLevel,+ hl = x.hookLevel;++ function reduce() {+ var n = operators.pop();+ var op = n.type;+ var arity = opArity[op];+ if (arity == -2) {+ // Flatten left-associative trees.+ var left = operands.length >= 2 && operands[operands.length-2];+ if (left.type == op) {+ var right = operands.pop();+ left.push(right);+ return left;+ }+ arity = 2;+ }++ // Always use push to add operands to n, to update start and end.+ var a = operands.splice(operands.length - arity);+ for (var i = 0; i < arity; i++)+ n.push(a[i]);++ // Include closing bracket or postfix operator in [start,end).+ if (n.end < t.token.end)+ n.end = t.token.end;++ operands.push(n);+ return n;+ }++loop:+ while ((tt = t.get()) != END) {+ if (tt == stop &&+ x.bracketLevel == bl && x.curlyLevel == cl && x.parenLevel == pl &&+ x.hookLevel == hl) {+ // Stop only if tt matches the optional stop parameter, and that+ // token is not quoted by some kind of bracket.+ break;+ }+ switch (tt) {+ case SEMICOLON:+ // NB: cannot be empty, Statement handled that.+ break loop;++ case ASSIGN:+ case HOOK:+ case COLON:+ if (t.scanOperand)+ break loop;+ // Use >, not >=, for right-associative ASSIGN and HOOK/COLON.+ while (opPrecedence[operators.top().type] > opPrecedence[tt] ||+ (tt == COLON && operators.top().type == ASSIGN)) {+ reduce();+ }+ if (tt == COLON) {+ n = operators.top();+ if (n.type != HOOK)+ throw t.newSyntaxError("Invalid label");+ n.type = CONDITIONAL;+ --x.hookLevel;+ } else {+ operators.push(new Node(t));+ if (tt == ASSIGN)+ operands.top().assignOp = t.token.assignOp;+ else+ ++x.hookLevel; // tt == HOOK+ }+ t.scanOperand = true;+ break;++ case IN:+ // An in operator should not be parsed if we're parsing the head of+ // a for (...) loop, unless it is in the then part of a conditional+ // expression, or parenthesized somehow.+ if (x.inForLoopInit && !x.hookLevel &&+ !x.bracketLevel && !x.curlyLevel && !x.parenLevel) {+ break loop;+ }+ // FALL THROUGH+ case COMMA:+ // Treat comma as left-associative so reduce can fold left-heavy+ // COMMA trees into a single array.+ // FALL THROUGH+ case OR:+ case AND:+ case BITWISE_OR:+ case BITWISE_XOR:+ case BITWISE_AND:+ case EQ: case NE: case STRICT_EQ: case STRICT_NE:+ case LT: case LE: case GE: case GT:+ case INSTANCEOF:+ case LSH: case RSH: case URSH:+ case PLUS: case MINUS:+ case MUL: case DIV: case MOD:+ case DOT:+ if (t.scanOperand)+ break loop;+ while (opPrecedence[operators.top().type] >= opPrecedence[tt])+ reduce();+ if (tt == DOT) {+ t.mustMatch(IDENTIFIER);+ operands.push(new Node(t, DOT, operands.pop(), new Node(t)));+ } else {+ operators.push(new Node(t));+ t.scanOperand = true;+ }+ break;++ case DELETE: case VOID: case TYPEOF:+ case NOT: case BITWISE_NOT: case UNARY_PLUS: case UNARY_MINUS:+ case NEW:+ if (!t.scanOperand)+ break loop;+ operators.push(new Node(t));+ break;++ case INCREMENT: case DECREMENT:+ if (t.scanOperand) {+ operators.push(new Node(t)); // prefix increment or decrement+ } else {+ // Use >, not >=, so postfix has higher precedence than prefix.+ while (opPrecedence[operators.top().type] > opPrecedence[tt])+ reduce();+ n = new Node(t, tt, operands.pop());+ n.postfix = true;+ operands.push(n);+ }+ break;++ case FUNCTION:+ if (!t.scanOperand)+ break loop;+ operands.push(FunctionDefinition(t, x, false, EXPRESSED_FORM));+ t.scanOperand = false;+ break;++ case NULL: case THIS: case TRUE: case FALSE:+ case IDENTIFIER: case NUMBER: case STRING: case REGEXP:+ if (!t.scanOperand)+ break loop;+ operands.push(new Node(t));+ t.scanOperand = false;+ break;++ case LEFT_BRACKET:+ if (t.scanOperand) {+ // Array initialiser. Parse using recursive descent, as the+ // sub-grammar here is not an operator grammar.+ n = new Node(t, ARRAY_INIT);+ while ((tt = t.peek()) != RIGHT_BRACKET) {+ if (tt == COMMA) {+ t.get();+ n.push(null);+ continue;+ }+ n.push(Expression(t, x, COMMA));+ if (!t.match(COMMA))+ break;+ }+ t.mustMatch(RIGHT_BRACKET);+ operands.push(n);+ t.scanOperand = false;+ } else {+ // Property indexing operator.+ operators.push(new Node(t, INDEX));+ t.scanOperand = true;+ ++x.bracketLevel;+ }+ break;++ case RIGHT_BRACKET:+ if (t.scanOperand || x.bracketLevel == bl)+ break loop;+ while (reduce().type != INDEX)+ continue;+ --x.bracketLevel;+ break;++ case LEFT_CURLY:+ if (!t.scanOperand)+ break loop;+ // Object initialiser. As for array initialisers (see above),+ // parse using recursive descent.+ ++x.curlyLevel;+ n = new Node(t, OBJECT_INIT);+ object_init:+ if (!t.match(RIGHT_CURLY)) {+ do {+ tt = t.get();+ if ((t.token.value == "get" || t.token.value == "set") &&+ t.peek() == IDENTIFIER) {+ if (x.ecmaStrictMode)+ throw t.newSyntaxError("Illegal property accessor");+ n.push(FunctionDefinition(t, x, true, EXPRESSED_FORM));+ } else {+ switch (tt) {+ case IDENTIFIER:+ case NUMBER:+ case STRING:+ id = new Node(t);+ break;+ case RIGHT_CURLY:+ if (x.ecmaStrictMode)+ throw t.newSyntaxError("Illegal trailing ,");+ break object_init;+ default:+ throw t.newSyntaxError("Invalid property name");+ }+ t.mustMatch(COLON);+ n.push(new Node(t, PROPERTY_INIT, id,+ Expression(t, x, COMMA)));+ }+ } while (t.match(COMMA));+ t.mustMatch(RIGHT_CURLY);+ }+ operands.push(n);+ t.scanOperand = false;+ --x.curlyLevel;+ break;++ case RIGHT_CURLY:+ if (!t.scanOperand && x.curlyLevel != cl)+ throw "PANIC: right curly botch";+ break loop;++ case LEFT_PAREN:+ if (t.scanOperand) {+ operators.push(new Node(t, GROUP));+ } else {+ while (opPrecedence[operators.top().type] > opPrecedence[NEW])+ reduce();++ // Handle () now, to regularize the n-ary case for n > 0.+ // We must set scanOperand in case there are arguments and+ // the first one is a regexp or unary+/-.+ n = operators.top();+ t.scanOperand = true;+ if (t.match(RIGHT_PAREN)) {+ if (n.type == NEW) {+ --operators.length;+ n.push(operands.pop());+ } else {+ n = new Node(t, CALL, operands.pop(),+ new Node(t, LIST));+ }+ operands.push(n);+ t.scanOperand = false;+ break;+ }+ if (n.type == NEW)+ n.type = NEW_WITH_ARGS;+ else+ operators.push(new Node(t, CALL));+ }+ ++x.parenLevel;+ break;++ case RIGHT_PAREN:+ if (t.scanOperand || x.parenLevel == pl)+ break loop;+ while ((tt = reduce().type) != GROUP && tt != CALL &&+ tt != NEW_WITH_ARGS) {+ continue;+ }+ if (tt != GROUP) {+ n = operands.top();+ if (n[1].type != COMMA)+ n[1] = new Node(t, LIST, n[1]);+ else+ n[1].type = LIST;+ }+ --x.parenLevel;+ break;++ // Automatic semicolon insertion means we may scan across a newline+ // and into the beginning of another statement. If so, break out of+ // the while loop and let the t.scanOperand logic handle errors.+ default:+ break loop;+ }+ }++ if (x.hookLevel != hl)+ throw t.newSyntaxError("Missing : after ?");+ if (x.parenLevel != pl)+ throw t.newSyntaxError("Missing ) in parenthetical");+ if (x.bracketLevel != bl)+ throw t.newSyntaxError("Missing ] in index expression");+ if (t.scanOperand)+ throw t.newSyntaxError("Missing operand");++ // Resume default mode, scanning for operands, not operators.+ t.scanOperand = true;+ t.unget();+ while (operators.length)+ reduce();+ return operands.pop();+}++function parse(s, f, l) {+ var t = new Tokenizer(s, f, l);+ var x = new CompilerContext(false);+ var n = Script(t, x);+ if (!t.done)+ throw t.newSyntaxError("Syntax error");+ return n;+}
+ testsuite/parsingonly/15_literals.js view
@@ -0,0 +1,43 @@+const GLOBAL = this; + +var tokens = [ + + "END", + + // Operators and punctuators. Some pair-wise order matters, e.g. (+, -) + // and (UNARY_PLUS, UNARY_MINUS). + "\n", ";"]; + +var opTypeNames = { + '\n': "NEWLINE", + ';': "SEMICOLON", + ',': "COMMA" +}; + +var assignOps = ['|', '^', '&', '<<', '>>', '>>>', '+', '-', '*', '/', '%']; + +function eval(s) { + a=-1; +} + +var global = { + // Value properties. + NaN: NaN, Infinity: Infinity, undefined: undefined, + + + + + // Exte + snarf: snarf, evaluate: evaluate, + load: function load(s) { + if (typeof s != "string") + return s; + + evaluate(snarf(s), s, 1); + }, + print: print, version: null +}; + +function eval(s) { +; +}
+ testsuite/parsingonly/20_statements.js view
@@ -0,0 +1,48 @@+{ + +t ? '1' : 'b'; + +if (getValue) + execute; +else { + execute; +} + + +for (i = 0; i <= 5; i++) +{ + x += i; +} + +for (var i = 0; i < n; i++) { + this[i] = 1 + v; +} + +var sumOfDivisors = new ExprArray(n+1,1); +} + +for (var i = 0; i < j; i++) { + if (i > 0) + consts += ", "; + var t = tokens[i]; +} + +for (var i = 0, j = tokens.length; i < j; i++) { + if (i > 0) + consts += ", "; + var t = tokens[i]; +} + + +for (i = 0; ; i++) +{ + x += i; +} + +if (typeof s != "string") + return; + + + +var a, f, i, j, r, s, t, u, v; +
+ testsuite/parsingonly/25_trycatch.js view
@@ -0,0 +1,32 @@+function message() +{ +try + { + adddlert("Welcome guest!"); + } +catch(err) + { + txt="There was an error on this page.\n\n"; + txt+="Error description: " + err.description + "\n\n"; + txt+="Click OK to continue.\n\n"; + alert(txt); + } +} + + try { + execute(parse(s), x2); + } catch (e if e == THROW) { + x.result = x2.result; + throw e; + } finally { + ExecutionContext.current = x; + } + + try { + execute(n.body, x); + } catch (e if e == BREAK && x.target == n) { + break; + } catch (e if e == CONTINUE && x.target == n) { + continue; + } + n.update && getValue(execute(n.update, x));
+ testsuite/parsingonly/40_functions.js view
@@ -0,0 +1,28 @@+ + +// constructor -- expression array initialization +function ExprArray(n,v) +{ + // Initializes n values to v coerced to a string. + for (var i = 0; i < n; i++) { + this[i] = "" + v; + } +} + +function Hello() +{ + ExprArray(1,1); +} + +Reference.prototype.toString = function () { return this.node.getSource(); } + +function getValue(v) { + if (v instanceof Reference) { + if (!v.base) { + throw new ReferenceError(v.propertyName + " is not defined", + v.node.filename, v.node.lineno); + } + return v.base[v.propertyName]; + } + return v; +}
+ testsuite/parsingonly/5_comments.js view
@@ -0,0 +1,3 @@+// Helper to avoid Object.prototype.hasOwnProperty polluting scope objects. + +i=1;
+ testsuite/parsingonly/errorline13.js view
@@ -0,0 +1,13 @@+// Test to make sure we're handling comment lines correctly as part of line number tracking +/* + +*/ +1+1; +x; + + + + +// +// ++
+ testsuite/parsingonly/fn.js view
@@ -0,0 +1,8 @@+ +var global = { + NaN: NaN, Infinity: Infinity, undefined: undefined, + + eval: function eval(s) { + a=-1; + } +};
+ testsuite/parsingonly/regex.txt view
@@ -0,0 +1,2 @@+/\n/g +/[?|^&(){}\[\]+\-*\/\.]/g, "\\$&");
+ utils/FixHappy.exe view
binary file changed (absent → 572060 bytes)
+ utils/FixHappy.hs view
@@ -0,0 +1,15 @@+module Main where + +import Prelude hiding (writeFile, readFile,splitAt) +import Data.ByteString.Char8 + +repl :: ByteString -> ByteString +repl s = case findSubstring (pack "lexerM") s of + Nothing -> error "Cannot find string" + Just i -> let (a,b) = splitAt (i+6) s + in a `append` (pack " action ") `append` b + + +main = do + s <- readFile "JavaScriptParser.hs" + writeFile "JavaScriptParser.hs" (repl s)