MicroHs 0.12.6.1 → 0.13.0.0
raw patch · 119 files changed
+16166/−14006 lines, 119 files
Files
- Makefile +38/−12
- MicroHs.cabal +1/−1
- README.md +2/−0
- generated/cpphs.c +2200/−2160
- generated/mhs.c +6393/−6314
- lib/AllOfLib.hs +5/−0
- lib/Control/Concurrent.hs +116/−0
- lib/Control/Concurrent/Chan.hs +137/−0
- lib/Control/Concurrent/MVar.hs +110/−0
- lib/Control/Concurrent/QSem.hs +129/−0
- lib/Control/Concurrent/QSemN.hs +131/−0
- lib/Control/Exception.hs +47/−12
- lib/Control/Exception/Internal.hs +156/−7
- lib/Data/Double.hs +4/−77
- lib/Data/Enum.hs +1/−61
- lib/Data/Enum_Class.hs +72/−0
- lib/Data/Float.hs +4/−77
- lib/Data/FloatW.hs +11/−0
- lib/Data/Generics.hs +0/−32
- lib/Data/IORef.hs +5/−0
- lib/Data/Int.hs +16/−18
- lib/Data/Integral.hs +2/−1
- lib/Data/MArray.hs +0/−38
- lib/Data/Word.hs +10/−1
- lib/Foreign/C/Types.hs +19/−35
- lib/Interactive.hs +0/−6
- lib/Primitives.hs +45/−0
- lib/System/IO.hs +9/−1
- lib/System/IO/Internal.hs +1/−3
- lib/System/IO/PrintOrRun.hs +7/−2
- lib/System/Info.hs +4/−5
- lib/dist-mcabal/autogen/Paths_libs.hs +2/−2
- mhs/MHSPrelude.hs +1/−1
- paths/Paths_MicroHs.hs +1/−1
- src/MicroHs/Compile.hs +4/−4
- src/MicroHs/Deriving.hs +2/−2
- src/MicroHs/ExpPrint.hs +1/−1
- src/MicroHs/Expr.hs +17/−10
- src/MicroHs/FFI.hs +11/−8
- src/MicroHs/Interactive.hs +27/−21
- src/MicroHs/Parse.hs +16/−7
- src/MicroHs/Translate.hs +16/−1
- src/MicroHs/TypeCheck.hs +70/−51
- src/runtime/bfile.c +4/−4
- src/runtime/config-unix-64.h +26/−0
- src/runtime/eval.c +5933/−4934
- src/runtime/mhsffi.h +26/−24
- tests/Arith.hs +0/−1
- tests/BindPat.hs +0/−1
- tests/Block.hs +8/−0
- tests/Block.ref +1/−0
- tests/Case.hs +0/−1
- tests/Catch.hs +2/−1
- tests/Catch.ref +3/−2
- tests/Class.hs +0/−1
- tests/Concur.hs +44/−0
- tests/Concur.ref +6/−0
- tests/Default.hs +0/−1
- tests/Delay.hs +30/−0
- tests/Delay.ref +4/−0
- tests/Deriving.hs +0/−1
- tests/Dict.hs +0/−1
- tests/Eq.hs +0/−1
- tests/Exists.hs +0/−1
- tests/Exn.hs +0/−9
- tests/FArith.hs +0/−1
- tests/Fac.hs +0/−1
- tests/Floating.hs +0/−1
- tests/ForeignC.hs +3/−7
- tests/Fork.hs +17/−0
- tests/Fork.ref +2/−0
- tests/FunDep.hs +0/−1
- tests/Guard.hs +0/−1
- tests/Hello.hs +0/−1
- tests/HigherKind.hs +0/−1
- tests/IOArray.hs +0/−1
- tests/IOTest.hs +0/−1
- tests/Infix.hs +0/−1
- tests/Info.hs +0/−1
- tests/Interactive.hs +3/−5
- tests/ListCompr.hs +0/−1
- tests/LitMatch.hs +0/−1
- tests/LocalPoly.hs +0/−1
- tests/MVar.hs +57/−0
- tests/MVar.ref +25/−0
- tests/Makefile +15/−3
- tests/Mask.hs +20/−0
- tests/Mask.ref +5/−0
- tests/Misc.hs +0/−1
- tests/Multi.hs +0/−1
- tests/MutRec.hs +0/−1
- tests/Newtype.hs +0/−1
- tests/ParseInd.hs +0/−1
- tests/PartRed.hs +1/−1
- tests/PartRed.ref +1/−1
- tests/PolyKind.hs +0/−1
- tests/Rank2.hs +0/−1
- tests/Read.hs +0/−1
- tests/Readline.hs +0/−1
- tests/Record.hs +0/−1
- tests/RtsExn.hs +7/−0
- tests/RtsExn.ref +1/−0
- tests/ST.hs +0/−1
- tests/Sieve.hs +0/−1
- tests/Storable.hs +0/−1
- tests/StringTest.hs +0/−1
- tests/Symbol.hs +0/−1
- tests/TestMap.hs +0/−1
- tests/ThrSt.hs +26/−0
- tests/ThrSt.ref +1/−0
- tests/Throw.hs +25/−0
- tests/Throw.ref +3/−0
- tests/TypeApp.hs +4/−0
- tests/TypeApp.ref +1/−0
- tests/TypeEq.hs +0/−1
- tests/TypeLits.hs +0/−1
- tests/TypeSyn.hs +19/−0
- tests/Typeable.hs +0/−1
- tests/View.hs +0/−1
Makefile view
@@ -41,7 +41,7 @@ MHSINC=$(MHSINCNP) -ipaths MAINMODULE=MicroHs.Main #-.PHONY: clean bootstrap install ghcgen newmhs newmhsz cachelib timecompile exampletest cachetest runtest runtestmhs everytest everytestmhs nfibtest info+.PHONY: clean bootstrap install ghcgen newmhs newmhsz cachelib timecompile exampletest cachetest runtest runtestmhs everytest everytestmhs nfibtest info install minstall installmsg all: bin/mhs bin/cpphs bin/mcabal @@ -168,9 +168,12 @@ # Run test examples with sanitized mhs-compiled compiler runtestsan: bin/mhsevalsane sanitizemhs- cd tests; make MHS="../bin/mhssane +RTS -H4M -RTS -CR" cache+ cd tests; make MHS="../bin/mhssane +RTS -H4M -RTS -CW" cache cd tests; make MHS="../bin/mhssane +RTS -H4M -RTS -CR" EVAL="../bin/mhsevalsane +RTS -H1M -RTS" info test errtest +runtestgsan: bin/mhsevalsane bin/gmhs+ cd tests; make EVAL="../bin/mhsevalsane +RTS -H1M -RTS" info test errtest+ # Run test examples going via JavaScript runtestemscripten: bin/mhseval bin/mhs bin/cpphs cd tests; make MHS=../bin/mhs cache; MHSDIR=.. make MHS="../bin/mhs -CR -temscripten -oout.js" EVAL="node out.js" info test errtest@@ -199,12 +202,16 @@ @git rev-parse HEAD time mhs +RTS -v -RTS -z -imhs -isrc -ipaths $(MAINMODULE) -# timegmhscompile: @date @git rev-parse HEAD- time bin/gmhs -s -imhs -isrc -ipaths $(MAINMODULE)+ time bin/gmhs -imhs -isrc -ipaths $(MAINMODULE) +timeghccompile:+ @date+ @git rev-parse HEAD+ time $(GHC) -fforce-recomp $(GHCFLAGS) -O0 $(MAINMODULE) -o bin/gmhs+ # cachelib: @-rm -f .mhscache@@ -231,9 +238,9 @@ @echo "*** Set environment variable MHSDIR to $(PREFIX)/lib/mhs" @echo "***" -everytest: newmhs runtest exampletest cachetest bootcombtest nfibtest info+everytest: newmhs bin/cpphs runtest exampletest cachetest bootcombtest nfibtest info -everytestmhs: bin/mhs bin/mhseval exampletest cachetest bootstrap runtestmhs nfibtest info+everytestmhs: bin/mhs bin/cpphs bin/mhseval exampletest cachetest bootstrap runtestmhs nfibtest info bootcombtest: bin/gmhs bin/mhseval bin/gmhs $(MHSINC) -ogmhs.comb $(MAINMODULE)@@ -245,10 +252,15 @@ bin/mhs Example && bin/mhseval bin/mhs Example -oEx && ./Ex && rm Ex +examplejs: bin/mhs Example.hs+ bin/mhs -temscripten Example -oEx.js+ node Ex.js+ rm Ex.js+ info: bin/mhs bin/mhs -r -itests Info -cachetest: bin/mhs bin/mhseval Example.hs+cachetest: bin/mhs bin/cpphs bin/mhseval Example.hs rm -f .mhscache bin/mhs -CW AllOfLib bin/mhs -CR Example && bin/mhseval@@ -260,8 +272,8 @@ ###### -VERSION=0.12.6.1-HVERSION=0,12,6,1+VERSION=0.13.0.0+HVERSION=0,13,0,0 MCABAL=$(HOME)/.mcabal MCABALMHS=$(MCABAL)/mhs-$(VERSION) MDATA=$(MCABALMHS)/packages/mhs-$(VERSION)/data@@ -305,11 +317,25 @@ rm -f generated/mcabal.c make generated/mcabal.c -minstall: install-install: bin/cpphs bin/mcabal $(MCABALBIN)/mhs+install: installmsg minstall++installmsg:+ @echo '***************************************************'+ @echo "* Installing MicroHs $(VERSION)"+ @echo "* Binaries (in $(MCABALBIN)):"+ @echo '* mhs - MicroHs compiler'+ @echo '* cpphs - C preprocessor'+ @echo '* mcabal - cabal for MicroHs'+ @echo '* Libraries:'+ @echo '* base (bytestring, directory, filepath, text)'+ @echo '***************************************************'+ @echo ''++minstall: bin/cpphs bin/mcabal $(MCABALBIN)/mhs cp bin/cpphs bin/mcabal $(MCABALBIN) cd lib; PATH=$(MCABALBIN):"$$PATH" mcabal $(MCABALGMP) install- PATH=$(MCABALBIN):"$$PATH" mcabal install+# We don't really need to rebuild mhs+# PATH=$(MCABALBIN):"$$PATH" mcabal install @echo $$PATH | tr ':' '\012' | grep -q $(MCABALBIN) || echo '***' Add $(MCABALBIN) to the PATH #####
MicroHs.cabal view
@@ -1,6 +1,6 @@ cabal-version: 3.0 name: MicroHs-version: 0.12.6.1+version: 0.13.0.0 -- *** When changing the version number, also -- *** run 'sh updateversion.sh' -- *** Yeah, it stinks.
README.md view
@@ -49,6 +49,7 @@ * AllowAmbiguousTypes * BangPatterns * BinaryLiterals+ * BlockArguments * ConstraintKinds * DefaultSignatures * DeriveAnyClass@@ -95,6 +96,7 @@ * PolymorphicComponents * RankNTypes * RecordWildCards+ * RequiredTypeArguments * QualifiedDo * ScopedTypeVariables * StandaloneDeriving
generated/cpphs.c view
@@ -1,2164 +1,2204 @@ static unsigned char data[] = {-122,76,90,49,117,168,0,0,31,118,55,46,50,10,57,51,57,10,65,32,-95,48,32,95,50,52,32,64,95,50,53,32,95,51,53,32,64,95,51,55,-32,1,64,64,224,22,4,1,52,48,224,22,13,0,50,224,22,0,1,49,-49,160,23,7,51,54,50,32,64,67,39,32,224,17,0,5,64,66,32,95,-49,50,160,11,7,83,32,83,32,95,51,54,54,64,4,0,56,96,45,31,-57,32,95,51,55,49,32,73,32,64,64,102,114,111,109,85,84,70,56,32,-34,45,45,99,112,112,34,32,64,64,64,64,64,24,3,95,51,56,54,64,-12,64,73,224,103,0,1,56,56,64,79,3,39,32,83,39,224,194,0,10,-64,64,67,39,66,32,66,32,95,51,57,64,17,0,50,96,58,224,108,26,-6,118,101,114,115,105,111,110,128,112,96,188,192,80,0,66,64,228,7,53,-32,64,67,32,95,50,51,64,67,64,5,7,79,32,35,51,50,32,64,75,-64,94,1,52,50,96,153,9,64,95,52,51,50,32,95,52,51,51,96,13,-224,150,61,2,104,101,108,161,4,224,147,12,0,66,128,147,224,49,1,6,-85,115,97,103,101,58,32,96,50,224,176,4,224,34,1,21,32,91,102,105,-108,101,32,46,46,46,93,32,91,32,45,68,115,121,109,32,92,124,128,8,-3,61,118,97,108,96,12,12,73,112,97,116,104,32,93,42,32,32,91,45,-79,64,47,2,93,94,42,64,84,224,75,6,15,94,41,94,41,91,45,45,-110,111,109,97,99,114,111,93,32,96,11,3,108,105,110,101,96,10,64,8,-5,112,114,97,103,109,97,96,14,224,10,2,3,116,101,120,116,224,81,20,-4,115,116,114,105,112,96,42,96,9,3,45,101,111,108,96,13,5,104,97,-115,104,101,115,128,93,4,97,121,111,117,116,96,10,3,117,110,108,105,192,-79,224,74,6,0,32,98,71,3,32,115,116,100,64,7,8,45,111,112,116,-105,111,110,115,32,96,54,7,105,110,99,108,117,100,101,61,64,223,4,110,-97,109,101,93,161,105,225,203,8,7,66,32,67,32,67,39,32,83,98,213,-128,8,160,9,160,12,96,13,224,29,0,0,39,97,161,0,66,64,11,224,-8,5,0,39,65,177,0,66,226,20,2,0,66,98,35,226,19,2,1,52,-51,64,23,128,71,224,38,3,193,240,128,10,225,243,6,6,110,107,110,111,-119,110,32,128,219,129,251,64,178,0,39,193,255,0,52,67,210,226,43,9,-10,44,32,102,111,114,32,118,97,108,105,100,160,59,4,115,32,116,114,121,-226,60,5,226,55,2,130,141,129,101,225,36,4,3,54,32,35,49,225,57,-0,96,121,96,235,224,232,2,64,139,224,229,1,100,26,4,56,50,32,95,-55,67,191,4,95,57,57,32,64,96,64,228,88,0,64,234,224,120,1,18,-65,116,32,109,111,115,116,32,111,110,101,32,111,117,116,112,117,116,32,98,-193,20,40,45,79,41,32,99,97,110,32,98,101,32,115,112,101,99,105,102,-105,101,100,96,156,224,152,2,64,111,128,0,131,144,0,67,161,67,0,83,-64,31,68,182,129,108,0,66,161,153,1,51,57,196,178,4,64,95,57,49,-48,98,159,6,56,53,32,95,50,48,57,96,72,129,231,128,26,2,95,51,-51,160,246,2,95,57,49,96,191,1,57,49,97,196,1,57,49,66,54,2,-95,57,49,160,71,128,103,128,0,1,58,57,65,85,3,10,65,32,89,66,-23,1,32,66,96,142,130,93,98,29,64,5,226,64,0,3,66,32,95,53,-128,68,64,185,128,188,224,9,11,160,65,66,102,10,66,32,95,56,54,54,-32,64,95,54,57,64,56,160,6,1,64,66,96,111,1,80,32,68,176,192,-119,161,16,64,251,128,65,2,32,61,61,65,137,128,212,64,125,0,85,160,-25,2,95,49,50,131,8,96,236,224,82,42,129,133,224,82,68,195,153,224,-82,22,2,95,57,50,129,185,160,72,160,2,224,60,0,98,11,129,124,128,-20,224,21,0,64,1,194,27,64,92,1,52,52,64,4,4,55,32,64,35,-52,67,78,160,0,224,85,3,64,162,224,85,4,65,155,224,81,4,0,67,-160,121,224,19,4,224,99,12,0,55,160,181,198,57,0,39,64,2,100,71,-226,176,3,164,80,64,103,0,80,96,26,225,4,4,224,97,1,98,239,1,-57,51,66,23,0,53,161,57,224,87,9,192,140,128,11,2,67,39,32,64,-82,225,86,6,224,52,2,96,237,224,51,3,160,26,96,53,67,225,64,54,-129,207,2,95,49,54,65,140,129,120,96,48,162,236,1,32,64,225,87,4,-131,39,193,38,225,126,16,128,38,98,30,96,101,192,17,128,130,224,175,5,-96,40,192,129,160,135,160,6,0,58,99,152,3,10,65,32,83,96,145,96,-153,65,37,67,245,0,83,128,131,194,121,225,255,11,0,83,64,233,128,251,-226,66,0,224,37,3,71,216,196,48,130,13,224,32,6,0,56,96,70,225,-254,14,96,194,69,178,68,120,0,66,64,150,6,49,32,64,95,56,54,56,-160,33,229,30,1,2,47,92,92,229,145,1,64,46,1,95,57,72,154,96,-62,98,148,164,188,65,170,1,95,57,102,209,97,169,64,190,0,85,99,106,-0,64,64,235,133,14,2,95,51,54,67,254,4,79,32,35,52,57,136,222,-5,64,64,64,85,32,65,64,8,3,95,52,53,48,99,102,224,166,0,1,-64,35,96,45,128,0,65,50,2,95,51,55,192,160,232,211,17,199,118,128,-181,165,69,224,234,4,105,220,3,55,55,32,35,101,129,96,0,64,68,5,-67,32,95,55,54,55,169,51,69,87,65,64,0,58,98,214,5,10,65,32,-79,32,80,230,52,2,232,148,0,104,99,1,57,49,64,49,224,33,9,72,-161,160,32,65,34,224,32,7,232,192,1,128,36,0,50,64,142,224,36,7,-224,32,4,129,60,224,32,5,72,236,160,30,66,118,224,30,7,104,224,160,-31,65,156,224,31,12,73,0,160,35,65,219,224,35,7,137,22,160,32,65,-21,224,201,8,105,44,160,32,74,174,224,32,7,105,66,160,31,65,217,225,-43,9,2,119,97,114,107,30,2,95,57,50,65,76,162,27,128,0,0,58,-97,139,1,10,65,98,85,133,155,1,85,32,64,21,0,52,224,21,2,65,-27,128,21,0,51,96,21,64,19,1,52,32,65,217,0,58,98,177,224,40,-0,64,225,128,40,0,49,160,40,1,95,49,130,142,1,95,49,96,123,0,-58,99,164,99,185,224,1,8,4,39,32,95,57,49,139,26,2,51,55,50,-98,135,0,54,64,18,66,146,130,6,224,26,14,133,112,224,27,12,97,247,-203,177,192,19,98,249,224,18,5,99,118,64,129,1,49,53,139,213,224,27,-6,224,17,5,198,193,224,112,11,102,187,224,19,6,100,46,224,18,5,108,-120,224,18,5,101,10,224,84,13,96,252,0,58,103,16,161,126,0,48,161,-126,64,26,128,18,0,57,192,17,133,26,3,80,32,35,56,192,17,131,102,-3,80,32,35,55,192,17,129,243,2,80,32,35,193,198,64,183,128,17,0,-53,192,17,225,235,0,0,54,192,17,129,234,3,80,32,35,51,192,17,193,-230,73,173,128,17,129,222,64,162,160,17,65,158,128,17,192,179,65,203,78,-187,1,54,54,136,41,198,93,165,138,2,67,32,60,69,71,161,145,224,25,-9,136,230,224,26,13,97,153,135,191,230,173,0,160,26,168,167,0,85,69,-59,69,70,232,144,1,134,89,66,167,1,64,85,194,168,129,224,0,85,64,-61,103,176,224,49,5,106,37,128,49,128,37,133,90,132,222,128,0,224,132,-13,98,103,224,87,17,98,106,224,87,20,224,59,17,65,21,224,59,10,2,-57,49,54,67,134,206,173,224,160,1,225,67,15,96,64,224,189,13,99,76,-225,66,12,107,111,225,66,15,224,44,6,64,36,224,43,11,224,116,13,163,-247,224,70,9,102,73,224,114,30,144,229,224,114,10,225,3,14,194,70,224,-25,9,136,64,224,168,11,176,228,224,124,9,64,24,224,168,31,64,94,225,-27,33,226,210,16,226,209,20,224,43,6,226,203,2,225,27,6,192,115,227,-98,5,225,0,16,226,219,1,224,97,6,226,213,2,224,141,24,226,197,2,-224,141,5,224,44,11,226,117,15,101,90,82,227,101,63,68,113,133,19,76,-165,209,206,77,106,64,74,172,157,96,20,128,216,206,82,96,8,205,205,1,-49,53,162,252,99,85,201,126,224,16,3,105,105,224,122,0,96,117,0,54,-160,117,224,1,9,172,95,160,66,224,29,18,224,26,17,224,23,14,224,20,-11,224,17,8,224,14,5,224,11,2,192,8,108,147,128,0,0,58,103,148,-101,193,5,75,32,95,51,51,57,232,93,2,31,92,34,47,118,97,114,47,-102,111,108,100,101,114,115,47,122,50,47,56,52,112,116,102,51,98,120,55,-104,53,52,48,112,23,107,110,99,121,48,121,50,120,112,99,48,48,48,48,-103,110,47,84,47,109,104,115,105,110,64,13,15,48,48,57,57,57,53,46,-104,115,92,34,44,56,48,58,49,138,84,134,32,134,140,65,100,0,75,139,-239,69,113,136,79,106,116,0,90,203,26,0,58,111,184,96,43,0,90,224,-43,0,134,148,240,29,3,103,217,208,31,193,170,129,243,143,125,224,29,1,-172,138,2,57,48,50,225,229,1,66,112,98,231,241,218,2,3,95,57,48,-51,79,172,0,55,80,175,136,101,76,131,0,48,162,131,0,80,233,133,4,-3,115,116,100,105,169,130,96,182,108,129,2,95,54,57,99,76,0,58,112,-147,103,16,81,104,73,143,0,58,96,38,96,196,65,143,2,95,57,48,78,-0,1,57,48,66,205,131,115,1,95,54,108,132,64,193,245,86,1,2,54,-56,54,242,93,3,14,84,70,45,56,47,47,82,79,85,78,68,84,82,73,-80,129,96,236,209,0,242,164,1,86,14,96,189,0,52,168,217,1,95,54,-108,197,0,58,96,205,1,10,65,65,134,0,50,96,148,131,70,161,50,1,-57,48,100,173,1,54,55,72,163,96,49,0,58,96,167,226,242,0,2,95,-57,48,96,95,97,104,110,121,0,95,96,15,128,127,160,199,193,115,192,15,-128,215,134,226,239,49,3,0,95,96,155,0,95,143,192,0,58,96,123,97,-246,98,48,64,103,65,64,64,192,97,141,0,58,97,157,74,103,96,85,225,-225,6,3,95,56,54,57,104,118,2,95,57,48,141,156,65,61,0,56,86,-252,64,57,130,81,228,10,3,226,63,4,97,42,0,56,118,193,227,72,0,-247,36,1,192,223,239,230,0,161,194,1,56,54,82,120,100,143,1,95,56,-83,56,96,39,135,199,96,223,137,246,1,56,53,138,138,197,90,234,147,1,-1,56,56,65,103,0,56,119,76,84,84,150,32,82,226,1,55,52,202,144,-5,66,32,95,55,50,50,64,214,98,145,203,86,1,56,52,66,62,96,58,-128,70,2,64,95,56,110,5,2,95,56,52,229,51,0,0,58,97,11,65,-222,1,32,80,67,33,77,183,0,75,87,46,66,157,99,7,0,58,96,86,-162,149,69,66,160,133,64,142,1,54,32,128,139,1,56,56,96,218,65,112,-0,54,70,24,64,249,66,230,133,171,1,56,57,102,11,1,56,57,143,246,-6,95,56,57,56,32,64,58,97,14,96,120,147,90,227,108,0,0,79,67,-130,0,95,143,243,131,137,161,206,162,249,239,187,10,177,35,224,39,25,163,-178,130,154,64,40,99,246,65,33,208,133,198,21,128,16,224,136,0,3,64,-64,82,32,129,199,224,103,0,0,83,160,103,178,36,228,86,0,240,28,8,-207,21,224,90,27,224,35,27,70,254,0,55,97,65,204,6,128,37,226,62,-1,98,65,98,101,241,192,20,97,151,128,115,65,12,192,181,138,47,228,82,-1,10,98,101,103,105,110,123,99,111,100,101,125,132,77,160,158,161,216,242,-51,4,64,99,224,133,1,164,117,225,17,8,224,120,9,240,136,25,2,101,-110,100,224,131,3,224,133,7,226,94,0,197,226,129,65,2,95,56,57,129,-215,128,0,164,132,226,33,17,100,13,192,153,224,184,9,112,194,160,30,128,-96,210,140,2,95,52,53,66,250,96,81,68,196,69,88,4,52,50,32,95,-51,72,15,224,147,0,0,56,84,229,6,95,53,49,54,32,95,54,91,138,-81,165,163,140,2,95,56,57,142,49,192,200,224,100,2,96,57,64,205,115,-62,178,46,224,241,1,246,143,0,128,114,1,52,53,129,137,193,30,106,138,-160,44,225,52,14,0,58,96,8,69,244,0,50,133,245,96,53,3,10,65,-32,90,160,1,85,180,96,38,208,55,0,90,64,149,224,4,1,96,6,168,-64,0,58,96,229,224,37,11,0,90,66,210,160,34,133,169,2,75,32,75,-70,66,96,142,201,171,193,152,201,164,226,188,7,69,198,100,89,64,30,0,-82,160,47,212,92,71,233,248,222,0,128,59,129,244,99,164,166,114,224,2,-0,128,20,224,21,14,163,230,224,2,0,224,43,0,224,15,2,134,8,162,-72,64,3,230,30,2,129,19,224,16,2,246,78,0,130,13,224,154,11,234,-133,0,192,83,228,89,2,96,96,0,80,101,150,67,26,128,24,1,95,51,-70,98,180,183,128,5,3,95,56,57,48,244,113,3,6,112,114,111,103,114,-97,109,99,55,224,21,1,5,99,111,109,109,101,110,114,67,128,75,165,21,-71,176,229,12,3,165,38,163,167,101,214,192,49,224,228,3,160,225,245,208,-3,103,205,72,199,0,56,84,36,84,126,224,59,0,224,47,0,160,251,161,-14,161,11,224,255,4,133,209,224,249,4,96,253,224,176,41,224,177,53,192,-60,225,196,46,162,89,128,157,96,30,67,44,227,61,0,225,198,26,225,176,-3,225,220,13,181,119,225,203,103,68,48,103,169,128,213,198,178,161,29,227,-152,1,224,68,19,0,58,96,140,104,14,161,51,96,60,160,5,230,151,2,-236,134,3,1,92,34,160,246,230,115,0,128,46,97,114,128,196,253,67,6,-4,76,105,110,101,32,160,52,193,35,221,118,2,49,51,53,69,174,135,110,-224,59,10,191,166,136,50,96,50,224,34,8,0,32,86,129,5,32,98,101,-102,111,114,160,102,253,151,10,64,35,0,46,253,150,2,192,170,97,123,224,-10,8,224,99,8,1,73,110,157,78,192,63,225,234,2,96,105,224,249,14,-2,32,97,116,128,157,224,253,136,96,0,225,173,161,0,58,99,150,98,169,-64,1,0,80,72,166,66,252,195,0,167,163,103,203,224,15,2,103,179,132,-50,224,193,10,231,216,4,224,14,0,112,80,107,91,173,93,75,112,2,55,-32,95,126,205,115,224,99,106,78,216,64,25,0,54,90,232,2,95,56,55,-217,132,131,19,74,221,103,61,172,21,0,56,105,21,0,56,108,251,109,117,-204,14,68,17,0,53,235,199,3,236,72,31,96,173,0,80,64,61,127,101,-233,190,3,216,117,0,58,109,57,239,221,1,175,182,96,24,136,120,0,85,-128,22,224,24,3,0,54,224,24,1,64,2,97,28,0,58,96,179,128,22,-0,51,168,155,160,49,64,27,200,119,64,1,0,89,193,129,64,1,134,63,-237,178,3,140,105,157,95,249,28,0,133,36,197,183,232,32,7,160,21,96,-18,192,88,140,182,224,35,7,224,41,3,224,43,1,96,136,235,100,3,226,-103,1,7,95,95,70,73,76,69,95,95,227,23,2,224,79,54,2,76,73,-78,224,79,20,166,13,224,79,32,2,68,65,84,224,79,68,2,84,73,77,-224,79,5,96,45,192,77,254,173,0,105,247,98,192,236,209,1,92,88,0,-53,203,36,143,103,0,55,230,142,1,128,151,224,2,7,192,30,225,79,3,-224,106,2,224,181,7,224,49,2,224,151,15,224,85,0,224,14,3,206,199,-196,17,224,30,0,229,210,0,224,173,6,224,118,2,234,45,6,224,18,2,-128,56,64,200,240,96,0,64,3,224,24,3,229,253,0,231,253,1,99,184,-149,32,192,5,152,40,225,34,1,0,79,128,149,64,48,72,142,192,189,3,-95,55,52,52,64,168,2,50,48,49,172,249,238,197,0,104,96,252,76,2,-224,173,3,224,175,1,224,22,65,225,172,13,160,25,97,15,97,80,205,182,-225,95,7,224,89,5,118,78,160,0,226,190,3,128,85,192,35,96,85,224,-59,4,226,219,12,226,246,0,129,65,161,45,76,156,1,64,95,113,234,83,-11,0,57,65,76,0,54,142,53,192,62,224,115,1,161,202,224,115,0,128,-88,242,116,3,96,15,1,55,56,242,103,0,230,3,7,229,244,8,224,101,-0,226,46,6,226,52,3,224,233,2,226,54,1,234,53,5,226,58,16,227,-94,4,98,62,224,56,1,109,254,129,43,1,95,55,128,145,226,41,6,226,-252,7,119,56,246,92,76,5,49,53,50,58,50,50,196,94,225,88,6,2,-95,54,53,224,9,0,230,18,2,2,95,56,55,79,26,1,55,52,234,102,-5,7,37,72,58,37,77,58,37,83,202,110,2,95,56,55,225,50,0,226,-111,13,224,104,47,6,100,32,37,98,32,37,89,224,104,31,65,190,96,18,-64,113,232,77,1,2,95,56,55,161,171,224,38,14,2,49,52,51,64,43,-96,36,2,95,56,56,226,58,0,224,101,8,227,126,2,97,219,96,219,64,-30,244,32,3,232,105,0,160,2,96,19,226,37,3,231,70,7,160,2,224,-39,12,226,160,0,224,120,9,224,124,15,224,181,8,224,141,3,131,201,234,-60,0,224,194,17,224,97,36,172,242,76,194,104,124,137,215,160,231,128,10,-224,75,0,64,142,2,95,50,52,129,126,204,249,2,95,49,55,93,165,64,-9,2,51,52,49,208,176,2,95,56,56,64,8,244,48,2,103,63,1,56,-56,138,60,193,48,1,95,56,95,111,129,26,1,95,55,86,38,144,14,64,-0,0,58,105,223,105,3,246,254,4,1,95,52,68,39,128,253,246,181,1,-243,37,0,105,5,96,61,145,135,202,219,5,75,32,95,55,54,51,227,158,-2,75,14,6,98,114,101,97,107,115,44,76,81,227,173,63,3,50,53,58,-54,130,243,224,113,105,107,63,0,75,154,30,1,75,50,96,7,0,58,97,-136,202,101,64,14,139,242,106,189,65,140,0,58,99,98,88,124,227,233,0,-1,56,55,124,91,225,93,1,97,255,0,55,148,65,0,50,73,1,97,129,-2,35,49,48,151,166,64,67,139,19,2,73,32,58,96,40,64,78,2,56,-55,53,64,13,0,54,96,13,3,94,71,69,84,73,38,3,77,73,76,76,-96,36,138,250,112,43,225,32,1,16,100,101,102,97,117,108,116,84,105,109,-101,76,111,99,97,108,101,64,214,0,58,100,92,147,208,229,229,0,228,36,-3,66,226,91,226,98,227,0,58,68,143,161,247,98,196,131,66,172,7,195,-28,219,135,227,182,4,224,30,1,128,16,91,62,84,246,160,40,227,88,1,-120,21,234,10,1,2,79,32,35,89,178,96,126,224,45,2,224,120,6,224,-100,1,224,9,8,0,39,235,224,5,171,239,64,16,228,74,0,231,217,6,-164,95,240,88,3,244,85,13,224,182,3,241,240,2,228,172,10,232,21,12,-161,8,158,188,140,182,160,61,172,83,224,8,2,234,101,4,224,69,2,225,-42,7,0,49,236,164,2,224,157,5,132,122,246,168,1,224,50,0,0,52,-224,50,5,224,185,2,187,100,167,179,64,244,248,102,0,229,9,3,157,108,-225,253,1,160,10,1,95,54,85,222,128,0,160,96,224,186,3,226,37,2,-225,50,9,160,2,224,29,1,165,151,230,61,6,224,220,0,97,164,224,17,-3,242,160,3,96,246,161,241,97,221,161,252,178,110,1,95,56,124,225,128,-0,225,115,3,224,2,0,225,124,31,230,10,2,192,45,224,73,13,224,67,-1,225,141,8,225,192,4,192,175,100,26,147,96,161,42,244,58,1,243,46,-1,2,49,57,49,243,47,5,224,54,3,224,53,16,243,100,7,224,52,3,-127,210,193,163,155,164,130,0,160,6,134,79,224,37,2,64,16,64,97,160,-66,226,4,2,89,253,80,40,0,73,166,133,226,214,1,227,11,15,226,177,-3,248,175,2,128,113,64,5,1,58,56,75,206,230,195,42,96,15,0,58,-103,116,69,38,93,20,102,194,128,212,0,67,74,174,196,238,133,207,132,43,-149,112,96,2,235,122,3,238,112,3,133,20,161,245,94,52,158,64,64,207,-2,95,56,54,130,109,212,245,235,84,1,128,233,2,83,32,85,66,7,241,-21,8,98,204,160,4,229,162,1,64,180,178,34,251,9,15,8,35,105,110,-99,108,117,100,101,32,202,39,210,182,224,48,15,1,92,34,242,192,2,243,-6,8,0,35,115,6,0,49,192,77,224,138,1,0,54,66,62,224,69,14,-64,239,131,93,255,4,3,0,83,64,125,4,57,32,95,56,54,123,200,0,-51,66,89,64,111,126,35,0,54,251,225,23,2,92,92,47,160,95,161,83,-1,64,58,127,178,242,252,2,162,117,161,172,146,217,95,22,0,53,130,24,-76,120,1,51,54,102,57,160,42,0,58,64,118,135,52,5,56,48,32,75,-32,85,228,69,0,227,169,1,129,21,224,11,0,1,95,56,128,65,128,127,-135,151,192,44,192,46,224,61,17,192,8,219,10,64,75,242,197,0,128,144,-242,192,0,0,52,168,108,66,57,200,108,168,94,64,255,128,18,0,50,104,-130,64,18,227,20,2,165,68,128,9,132,130,135,48,229,112,2,225,40,1,-196,160,194,238,160,164,1,95,56,92,178,243,248,3,99,194,3,95,52,52,-48,247,196,0,225,105,2,98,254,67,204,1,95,56,88,171,227,119,0,0,-55,72,187,190,147,64,13,128,135,1,95,56,78,48,0,58,99,41,201,57,-147,199,193,24,181,69,0,39,66,231,156,227,0,54,170,218,98,131,116,109,-1,53,49,72,80,67,71,162,147,64,5,0,79,149,41,229,78,0,1,95,-56,75,3,0,58,96,195,105,67,1,53,55,82,32,230,214,0,0,58,96,-31,248,91,3,231,241,2,68,223,129,31,134,133,131,241,1,95,56,96,205,-97,25,253,141,3,128,13,229,145,2,96,35,2,55,57,48,233,222,0,135,-238,1,95,56,93,246,0,58,96,46,226,62,2,136,162,225,162,1,225,171,-4,230,63,4,232,189,1,225,118,0,64,184,228,130,0,102,61,201,170,1,-95,51,69,48,2,95,52,51,96,179,3,39,32,95,48,234,130,1,0,52,-74,122,126,106,227,248,8,31,85,110,109,97,116,99,104,101,100,32,35,105,-102,58,32,112,111,115,105,116,105,111,110,115,32,111,102,32,111,112,101,110,-12,32,99,111,110,116,101,120,116,32,97,114,101,58,163,251,64,81,129,136,-67,211,106,79,1,52,51,206,109,228,10,0,232,78,1,133,242,98,193,224,-225,6,211,209,0,85,229,204,1,232,133,3,224,42,5,242,43,25,231,141,-4,238,112,0,224,40,1,161,55,200,79,224,25,3,241,240,0,224,69,9,-224,72,0,224,184,7,96,75,224,146,13,163,160,167,187,66,104,100,245,184,-18,192,0,226,4,10,160,53,224,31,20,226,42,0,130,181,224,171,2,163,-231,224,36,6,224,71,16,160,43,224,146,2,224,41,15,224,50,1,224,191,-26,224,45,2,224,93,5,192,175,224,31,4,224,2,12,224,52,4,224,191,-23,224,56,17,99,30,224,42,2,224,5,6,225,61,7,224,60,6,225,211,-8,224,1,5,246,213,14,4,100,101,102,105,110,109,127,224,0,7,224,177,-6,224,140,3,224,14,9,224,140,61,4,117,110,100,101,102,224,139,26,225,-79,6,225,45,7,224,139,60,1,105,102,224,140,132,224,139,14,227,75,3,-224,139,12,192,11,227,165,0,128,0,224,131,19,224,178,7,224,43,19,224,-175,16,224,172,10,225,55,6,226,65,6,224,198,4,224,129,57,2,101,108,-115,226,213,11,224,131,102,225,7,12,225,179,6,224,131,86,1,110,100,225,-140,121,5,112,114,97,103,109,97,224,133,10,199,81,0,66,119,194,192,13,-96,98,250,185,4,141,143,224,22,3,192,134,103,28,224,11,10,239,150,9,-128,125,192,16,250,187,8,128,233,230,255,6,232,4,4,65,8,238,9,2,-84,202,184,98,106,127,224,212,0,160,0,231,152,3,249,157,5,225,108,6,-227,156,4,224,159,1,224,1,1,225,135,11,224,39,11,64,1,227,144,15,-141,127,225,130,8,230,86,6,228,48,12,224,100,9,224,144,10,224,36,9,-64,1,224,141,14,6,119,97,114,110,105,110,103,224,141,7,226,117,4,226,-132,6,224,113,54,4,101,114,114,111,114,224,111,10,224,2,9,224,247,0,-224,87,6,224,149,0,224,68,2,224,128,11,128,34,224,132,12,78,181,224,-131,6,224,61,7,207,193,78,22,112,105,0,51,75,149,224,0,1,227,46,-1,192,171,128,115,192,9,227,41,1,224,8,4,64,189,204,46,138,82,1,-95,49,108,109,1,52,52,77,15,0,52,83,121,64,46,113,229,80,227,151,-240,128,20,75,64,0,52,109,78,157,115,1,95,52,172,96,224,27,3,142,-60,224,211,6,225,181,6,225,202,2,227,218,1,224,38,8,224,19,10,224,-16,7,224,13,0,108,223,238,69,1,209,22,107,243,77,173,2,95,53,49,-79,130,108,76,160,0,227,171,3,226,0,34,235,132,9,64,1,235,79,14,-0,83,64,71,225,97,0,225,197,0,0,66,236,246,5,192,0,225,211,12,-253,0,1,128,251,237,32,0,193,166,64,76,77,196,0,50,113,209,0,54,-65,177,193,144,237,63,0,128,15,237,66,5,0,87,131,123,20,58,32,117,-110,107,110,111,119,110,32,100,105,114,101,99,116,105,118,101,32,35,130,156,-98,2,146,14,224,61,8,4,94,42,105,110,32,96,38,237,73,7,224,203,-7,165,209,97,234,128,150,226,39,4,226,11,9,129,201,1,95,54,98,139,-225,165,6,226,243,255,128,2,226,243,4,128,31,160,45,226,245,11,116,199,-1,95,51,80,213,160,0,225,92,3,96,206,89,157,96,97,225,247,44,230,-208,2,160,226,130,159,65,117,128,5,194,158,128,166,231,70,26,96,31,226,-62,3,163,8,227,5,1,96,13,226,233,4,226,180,46,224,146,31,64,0,-231,178,7,161,204,232,131,16,245,158,6,226,13,1,226,186,0,129,220,224,-131,1,96,50,1,54,57,145,21,3,66,32,95,55,90,229,2,95,52,52,-191,84,225,72,0,224,98,0,0,85,161,87,192,86,228,58,3,119,87,224,-193,1,128,145,64,5,147,6,245,86,16,225,42,2,255,119,3,224,67,1,-210,218,179,57,224,80,2,115,89,163,195,224,0,0,224,222,1,160,9,161,-98,0,50,96,213,224,160,3,130,205,194,80,128,16,229,46,0,224,70,15,-129,169,99,149,66,252,226,233,1,242,87,44,107,48,93,182,226,48,10,241,-246,11,224,149,21,3,95,55,55,56,127,43,192,237,224,49,35,128,16,160,-201,230,26,7,226,69,4,226,101,3,194,9,1,95,56,88,93,226,59,1,-193,93,193,195,83,167,224,119,2,160,34,101,40,130,135,224,41,15,64,21,-66,118,84,106,93,143,224,59,43,96,180,103,12,224,70,6,192,55,99,23,-161,33,128,13,194,27,116,80,160,54,129,49,226,72,10,192,55,229,32,0,-64,0,227,35,2,224,28,8,224,15,5,224,64,3,64,26,224,33,5,69,-129,117,244,160,161,102,234,149,249,129,102,213,251,128,230,246,0,8,122,139,-0,50,64,19,65,20,64,19,166,119,96,0,224,206,8,76,187,131,3,2,-95,51,56,117,204,249,154,10,134,229,70,145,96,115,226,68,7,251,5,0,-195,38,192,17,224,94,5,99,58,247,72,0,224,119,27,224,61,17,193,43,-162,19,128,223,202,223,96,20,229,5,2,162,52,192,15,162,58,224,14,1,-137,104,192,53,96,32,134,177,192,101,97,85,135,223,1,56,53,232,251,1,-1,56,53,128,246,70,28,92,208,162,141,224,200,10,192,49,231,246,5,0,-56,251,232,0,224,139,1,165,180,224,171,2,224,170,0,226,63,1,160,9,-96,8,167,175,119,154,226,232,3,252,240,0,3,95,49,55,52,160,9,2,-51,52,49,97,184,160,32,0,57,69,101,1,52,52,253,156,0,110,151,2,-64,35,49,230,148,0,225,127,1,222,254,195,241,221,9,1,95,52,168,45,-237,79,10,76,171,1,95,51,102,110,160,78,226,207,0,231,126,12,232,247,-6,225,0,5,192,83,230,220,14,164,234,232,188,0,226,224,1,230,47,1,-225,98,2,225,234,1,64,124,203,126,235,178,4,139,169,224,49,4,225,129,-0,224,77,5,160,31,247,2,4,224,30,6,224,114,1,247,3,41,224,156,-5,229,166,7,224,2,1,247,202,10,226,76,0,224,90,10,138,193,224,90,-0,239,165,9,224,32,3,224,206,8,204,132,0,56,224,209,1,110,143,244,-227,13,224,43,26,96,39,224,30,17,244,161,9,227,236,2,237,93,7,224,-166,2,224,195,1,224,189,5,224,105,15,243,85,6,225,21,6,224,78,42,-244,40,4,224,173,5,224,77,1,224,74,1,0,67,224,74,17,243,107,5,-128,46,99,44,0,95,69,143,128,19,226,50,1,96,151,96,13,232,232,6,-224,57,3,124,0,128,34,66,61,192,122,92,8,156,9,230,213,2,128,101,-64,34,251,236,0,128,34,201,19,233,35,115,192,207,113,30,225,93,0,96,-103,101,182,224,217,11,224,251,24,161,87,196,73,96,14,165,61,160,220,228,-193,5,239,85,6,233,64,27,97,51,74,236,237,65,3,194,9,224,10,2,-232,37,4,194,55,226,243,1,232,202,0,224,240,19,230,195,1,137,26,224,-223,7,224,122,1,161,77,235,248,4,225,254,0,198,86,192,85,231,234,12,-231,209,16,228,138,5,99,175,239,213,4,226,176,2,97,151,231,99,37,224,-192,1,231,70,18,230,57,9,231,68,85,231,34,0,231,35,10,231,32,5,-231,31,5,161,16,135,22,224,245,29,224,228,19,231,30,5,231,23,3,96,-13,2,51,51,57,227,142,2,31,92,34,47,118,97,114,47,102,111,108,100,-101,114,115,47,122,50,47,56,52,112,116,102,51,98,120,55,104,53,52,48,-112,23,107,110,99,121,48,121,50,120,112,99,48,48,48,48,103,110,47,84,-47,109,104,115,105,110,64,13,15,48,48,57,57,57,53,46,104,115,92,34,-44,54,56,58,53,132,179,0,58,96,122,127,251,0,85,131,33,87,34,132,-172,196,183,65,42,66,145,226,101,3,194,103,0,58,97,152,4,10,65,32,-80,32,131,251,99,191,111,255,231,79,2,97,117,65,70,130,149,201,97,160,-15,1,35,57,164,123,96,12,96,43,233,131,0,0,58,96,8,96,159,239,-88,4,2,95,52,52,66,16,64,176,228,124,0,1,64,64,171,129,0,58,-98,157,5,10,65,32,85,32,90,224,1,2,0,75,225,88,0,0,58,106,-46,96,85,98,206,65,196,0,55,64,227,65,192,160,253,194,9,128,184,98,-243,1,52,54,64,108,68,23,139,174,1,95,56,64,221,1,95,56,105,123,-3,67,39,32,79,65,51,0,80,65,206,145,90,240,146,8,0,35,157,121,-0,32,199,85,96,174,0,79,128,243,162,55,96,6,97,133,132,79,128,157,-0,75,172,71,98,111,96,164,226,27,10,5,92,34,44,48,58,48,225,215,-0,0,49,96,225,2,95,56,52,224,37,3,3,112,114,101,68,96,131,0,-100,64,39,0,58,96,169,1,10,65,102,223,114,74,65,4,1,95,54,65,-226,97,223,96,4,138,84,0,58,64,72,129,84,1,75,50,65,75,129,78,-0,58,96,253,128,22,0,51,96,22,98,30,0,58,97,26,161,97,64,1,-194,31,64,0,227,23,1,168,25,227,126,6,129,128,224,25,15,232,255,2,-224,29,13,233,32,3,224,33,16,224,36,3,224,37,20,224,40,4,224,41,-23,224,44,5,224,45,26,224,48,6,224,49,29,224,52,7,230,243,3,224,-38,4,232,214,6,237,128,0,224,0,1,193,138,224,55,5,224,103,14,224,-40,19,224,43,6,224,83,30,224,75,16,224,41,50,192,232,199,133,165,110,-244,158,6,224,5,9,235,168,0,225,21,3,192,1,0,89,224,96,1,224,-28,9,224,32,6,224,172,14,230,102,1,224,42,2,224,74,11,172,52,192,-155,233,12,1,192,5,224,105,2,192,67,230,163,5,192,250,64,25,245,161,-1,160,13,224,2,4,224,242,16,165,197,5,67,32,60,32,64,35,237,14,-3,224,67,9,128,218,192,34,224,70,5,160,203,128,70,230,228,0,224,37,-7,148,208,224,22,4,75,188,192,19,224,103,3,237,255,6,224,13,5,97,-94,230,121,9,64,0,65,32,0,85,81,195,100,209,102,105,81,156,224,27,-0,129,66,64,74,65,98,98,10,69,201,89,105,234,212,2,225,39,9,224,-186,0,224,25,4,0,82,224,187,0,227,133,7,128,24,224,41,1,225,236,-1,224,184,5,250,190,2,224,44,2,225,176,0,224,64,4,96,185,238,193,-5,104,237,128,0,224,221,9,96,5,150,40,230,161,5,1,32,32,236,201,-0,224,252,11,224,134,1,128,13,234,223,1,97,89,170,111,71,166,160,11,-224,0,4,224,178,1,128,1,238,221,9,226,70,17,128,28,162,70,235,146,-1,224,37,4,225,8,1,3,67,32,61,61,224,39,17,193,177,225,155,8,-229,27,0,224,81,1,251,237,0,224,100,4,64,44,96,42,160,173,160,26,-96,17,90,88,172,183,225,4,1,192,106,240,37,8,192,36,64,61,75,220,-2,95,54,57,161,109,226,124,12,224,78,0,224,1,17,226,143,1,224,43,-21,194,161,224,37,9,225,151,10,225,49,0,224,1,1,226,183,15,235,96,-1,224,47,6,253,55,13,226,189,13,241,127,3,196,217,227,159,9,233,168,-2,162,129,67,51,161,48,225,55,8,192,105,238,23,13,226,134,6,253,227,-14,227,172,16,253,218,3,224,50,6,229,99,4,226,240,9,197,205,224,51,-3,225,111,35,254,230,3,230,4,5,96,2,195,79,228,226,19,1,51,32,-240,207,2,228,2,2,226,21,9,228,102,19,224,125,8,227,78,0,224,123,-19,0,49,224,123,15,160,57,163,112,232,203,10,224,41,1,128,91,224,248,-6,0,66,192,40,224,38,0,231,127,0,224,73,16,224,70,27,160,108,224,-65,11,224,62,4,224,53,2,161,192,64,12,193,10,226,175,2,228,42,10,-225,46,7,128,5,224,77,11,160,209,64,21,0,85,142,73,113,133,1,56,-50,99,64,0,67,76,145,246,233,2,224,89,60,97,241,224,89,5,211,243,-224,89,15,225,24,2,194,68,96,4,224,67,2,228,238,16,226,2,3,130,-204,225,127,0,64,14,161,78,65,106,129,110,192,44,200,254,69,15,0,82,-236,123,0,77,71,226,216,2,236,128,8,192,53,160,252,129,170,241,229,4,-224,38,0,143,188,168,74,164,245,160,94,239,181,78,5,50,49,53,58,49,-51,227,158,13,192,1,234,134,3,224,31,11,224,35,7,225,96,6,224,2,-2,234,174,12,224,83,14,228,156,1,225,52,0,234,177,20,161,99,227,109,-6,64,43,234,181,67,232,131,3,227,246,10,224,74,35,235,0,255,225,39,-10,235,0,255,235,0,17,226,46,48,229,9,2,224,37,5,226,46,2,224,-86,6,234,193,8,96,78,225,116,8,231,205,13,224,181,3,224,43,2,182,-118,225,115,26,255,209,5,161,39,192,8,64,48,151,50,93,163,83,64,246,-182,11,225,143,5,1,45,123,232,17,4,233,62,53,194,95,87,124,0,35,-234,166,1,224,36,2,224,58,10,232,247,14,224,233,7,96,42,225,40,32,-0,49,135,159,96,0,226,157,34,1,125,45,226,157,20,225,246,2,198,163,-226,124,9,128,21,224,160,4,227,126,13,224,225,11,227,126,33,224,225,3,-192,59,226,11,23,250,193,7,224,254,18,224,84,0,195,72,224,88,3,160,-147,117,46,121,210,117,172,233,103,6,224,67,1,192,1,229,131,62,135,55,-229,131,13,224,47,2,228,58,6,123,71,224,161,5,226,24,9,229,148,17,-224,0,1,224,188,1,160,140,96,62,239,107,21,224,52,6,230,251,6,239,-70,2,163,128,231,164,2,224,76,1,228,210,29,236,173,2,224,37,5,225,-125,10,226,197,2,231,116,10,128,24,224,102,8,226,200,8,120,92,224,90,-9,194,200,225,19,7,224,198,1,224,45,1,225,16,2,224,89,2,224,90,-12,201,53,129,34,153,221,224,50,2,224,44,3,227,16,10,64,99,2,95,-56,51,152,61,226,13,0,249,36,2,224,63,22,98,120,192,63,224,54,2,-224,65,8,225,80,10,160,246,224,241,5,64,144,224,194,11,160,129,227,125,-28,96,142,226,219,24,192,14,160,26,224,47,5,228,237,21,64,1,241,212,-213,241,214,9,224,46,18,241,217,5,224,40,6,228,8,10,225,57,0,224,-1,1,227,75,15,241,220,144,224,229,9,224,226,10,224,152,4,230,244,75,-224,62,2,226,224,9,229,188,1,0,57,240,243,3,0,45,230,212,3,224,-101,6,64,1,224,202,47,233,203,13,224,203,72,1,56,32,105,73,233,177,-16,161,200,232,221,7,224,5,6,224,229,14,225,11,7,225,182,16,243,126,-255,224,122,4,196,248,224,123,19,243,126,21,240,27,7,225,59,6,232,63,-1,225,117,7,224,179,0,102,208,227,251,3,241,220,18,224,95,60,105,71,-224,95,30,226,25,1,128,95,225,191,10,244,69,9,169,2,224,80,23,224,-77,30,224,73,25,224,70,27,160,108,224,65,11,224,62,4,224,53,2,129,-65,234,137,11,244,147,190,224,89,81,244,237,77,226,0,13,128,164,97,219,-226,19,0,224,41,6,160,188,224,247,1,224,1,3,161,241,227,34,15,224,-74,6,233,41,6,98,20,192,88,224,85,6,236,226,7,235,101,12,128,82,-239,20,11,192,5,232,26,7,224,155,5,225,102,42,3,66,32,79,32,128,-70,97,112,160,12,225,187,0,233,129,13,226,41,9,229,33,0,1,51,48,-160,78,224,73,6,224,50,18,64,94,229,84,1,1,39,39,197,84,224,50,-22,224,170,7,224,148,23,64,190,64,51,0,52,224,222,3,192,58,194,21,-193,191,128,76,165,83,128,87,98,24,132,14,192,44,205,215,247,51,194,4,-57,52,58,49,49,230,214,1,234,70,5,224,214,3,192,1,247,28,1,224,-25,7,192,1,230,150,3,224,37,15,224,35,4,224,30,10,97,19,247,135,-4,224,36,9,192,1,247,174,5,230,211,7,224,2,0,228,13,3,230,217,-3,224,200,18,193,176,168,217,224,5,8,224,68,3,160,73,227,117,2,163,-123,228,67,13,224,116,4,224,34,6,224,157,4,224,154,13,164,183,240,51,-8,64,0,231,128,3,231,57,10,232,55,5,224,95,27,242,19,4,192,95,-237,213,4,128,5,224,106,20,224,97,20,232,245,3,224,38,8,164,188,3,-67,32,61,61,224,42,20,247,106,15,241,38,3,234,227,9,229,211,8,237,-12,33,247,128,69,1,39,32,244,179,22,240,130,6,96,12,162,112,194,170,-243,208,5,65,169,243,210,7,225,240,13,239,61,3,226,59,2,164,146,128,-1,225,52,10,225,104,7,240,57,1,224,102,9,229,22,0,224,28,11,0,-90,224,79,14,192,107,166,210,224,31,6,167,1,230,224,2,231,113,14,228,-21,11,225,247,8,193,68,199,142,162,43,193,89,160,32,128,73,244,148,2,-225,172,0,129,122,229,185,3,197,186,224,103,5,245,51,1,226,137,64,243,-194,22,224,64,4,225,41,10,240,181,2,228,192,0,207,136,224,222,19,233,-32,6,128,191,224,126,1,224,13,4,129,69,224,117,12,64,113,225,78,2,-251,120,3,235,112,1,128,0,224,201,1,64,1,245,18,255,245,18,221,226,-154,0,131,135,229,44,9,96,207,244,133,8,224,0,1,192,166,160,170,164,-58,167,162,227,139,13,224,52,5,194,212,224,22,9,193,234,248,14,6,224,-37,5,226,174,10,64,1,228,251,0,224,73,1,160,2,225,39,0,160,25,-64,220,226,195,6,128,21,192,176,230,31,9,225,19,14,227,228,3,225,67,-4,224,0,4,224,167,5,224,1,9,245,115,8,236,115,3,225,90,4,224,-166,0,225,99,12,194,90,225,145,5,224,42,11,224,123,1,252,138,34,227,-68,7,96,42,229,230,0,224,105,6,227,204,21,231,254,25,224,130,23,229,-94,7,9,51,54,57,32,95,51,55,49,32,73,244,37,4,242,106,3,224,-50,3,0,56,148,78,224,54,5,236,222,6,226,207,2,231,192,1,198,194,-231,199,14,224,193,3,243,224,13,65,114,231,246,11,234,13,8,231,170,10,-225,219,5,225,32,10,231,171,19,230,86,5,194,242,231,168,6,224,163,1,-160,16,192,58,128,148,129,213,247,37,7,128,56,99,24,0,79,134,213,225,-73,1,231,186,2,225,6,6,240,106,3,193,109,200,134,225,91,10,224,54,-0,129,23,224,69,3,224,92,6,231,221,103,227,248,3,64,62,225,8,13,-192,57,233,108,4,224,229,17,227,64,18,232,0,16,227,132,50,245,47,2,-224,130,5,225,7,9,241,59,2,225,7,29,241,24,5,224,51,30,240,109,-8,226,136,5,224,158,3,224,178,0,98,25,192,188,229,167,0,224,16,0,-1,56,51,134,82,229,92,1,1,95,56,152,125,96,30,251,60,0,64,0,-229,209,17,225,26,5,64,11,225,116,6,227,220,0,227,123,1,224,151,1,-128,16,176,187,128,5,103,231,224,89,1,96,37,226,148,2,224,173,1,194,-48,230,162,16,192,93,245,16,27,227,151,0,224,117,1,128,1,251,213,1,-224,80,0,224,224,6,227,180,1,128,209,230,170,5,162,92,224,67,1,224,-61,7,224,64,2,224,61,22,163,42,224,59,11,224,55,4,224,52,2,225,-15,4,128,158,246,110,16,224,243,1,228,237,2,228,234,4,225,78,14,245,-171,10,224,76,71,192,223,96,51,226,140,9,160,217,128,204,224,60,6,128,-0,226,124,1,226,133,4,224,169,6,165,42,105,116,140,61,128,98,237,112,-12,128,50,230,187,1,224,98,8,228,195,12,243,169,7,224,155,13,236,108,-2,224,106,1,128,44,243,199,101,5,49,55,49,58,49,50,250,159,4,108,-27,229,48,1,2,51,54,56,129,110,196,99,196,57,72,66,64,44,165,45,-224,39,8,68,130,1,50,54,224,47,1,2,64,95,49,97,252,0,83,65,-200,1,53,56,64,24,1,49,50,98,27,2,51,54,54,165,109,232,202,2,-1,95,96,160,149,224,47,3,0,52,224,47,17,0,39,224,48,0,224,33,-15,7,40,41,44,91,93,59,123,125,128,38,224,37,15,2,32,94,41,224,-32,21,22,58,33,35,36,37,38,42,43,46,47,60,61,62,63,64,92,92,-92,94,92,124,45,126,192,52,193,15,230,172,2,82,132,224,20,4,67,146,-142,172,128,11,230,212,0,7,58,56,52,54,32,64,10,65,162,192,130,82,-98,176,162,209,130,193,67,11,0,54,64,48,130,58,3,80,32,95,51,229,-236,0,194,98,224,30,1,225,206,9,234,62,15,3,108,105,110,101,226,11,-0,224,74,53,5,112,114,97,103,109,97,224,76,0,232,8,0,128,214,224,-71,33,2,100,101,102,224,148,1,132,40,193,76,224,55,20,4,117,110,100,-101,102,128,54,193,28,64,192,2,95,50,48,112,46,0,54,129,52,227,82,-75,3,56,56,58,53,96,120,0,90,64,169,0,56,65,230,107,124,192,0,-195,240,160,138,128,213,160,2,3,95,51,55,57,64,51,0,53,64,216,142,-205,161,252,97,239,225,236,0,224,183,76,0,57,160,183,233,87,3,225,250,-1,199,164,160,13,164,196,225,139,18,3,79,32,35,52,234,18,4,237,211,-0,130,187,224,244,0,119,136,162,93,199,0,75,164,97,36,1,51,54,144,-98,65,47,1,51,56,224,246,2,16,105,110,99,111,109,112,108,101,116,101,-32,109,97,99,114,111,32,98,41,7,105,116,105,111,110,58,94,42,128,200,-224,54,10,2,32,32,35,130,82,0,32,163,176,0,39,160,34,68,175,64,-7,224,182,3,3,95,56,51,54,96,16,233,158,7,224,202,0,129,38,232,-157,4,160,201,226,223,20,224,83,9,235,39,8,227,117,34,64,77,0,49,-224,77,2,226,78,1,161,104,64,68,232,12,5,227,221,10,228,90,0,161,-20,0,56,74,148,229,188,0,243,33,0,1,95,57,105,94,96,16,160,96,-237,25,0,102,18,192,76,194,203,110,174,162,203,128,207,160,25,65,102,128,-25,1,95,56,64,191,224,31,1,6,55,50,50,32,95,55,52,202,208,231,-171,4,65,167,0,54,170,190,64,8,7,52,53,53,32,95,52,52,50,64,-9,96,31,234,217,5,128,147,64,40,0,57,64,136,0,54,64,87,0,52,-229,143,5,197,125,1,95,54,139,30,128,116,131,158,97,7,226,28,1,226,-71,1,0,35,228,224,2,224,56,2,224,55,4,0,55,224,55,11,229,99,-0,224,53,2,64,163,96,167,64,253,67,14,129,7,0,80,224,243,0,227,-145,13,130,22,237,248,2,226,27,13,68,77,233,185,7,195,205,195,199,224,-79,1,136,153,234,77,1,2,95,49,53,134,195,135,13,96,98,224,33,1,-130,82,73,177,240,215,1,234,199,3,160,203,224,170,28,225,36,2,0,35,-230,56,1,195,93,128,111,228,150,22,241,202,7,224,101,31,192,62,176,28,-229,145,1,140,124,225,12,8,160,251,64,12,226,123,5,224,12,3,128,0,-164,36,224,53,0,163,204,225,80,8,225,79,8,163,170,224,23,8,237,160,-4,0,89,96,181,227,28,1,229,151,2,224,138,6,0,58,109,252,6,10,-65,32,75,50,32,58,96,69,64,11,2,32,75,32,64,25,0,51,160,13,-0,65,96,13,0,50,96,13,4,95,56,51,51,32,99,237,224,4,1,0,-58,99,168,64,28,4,51,56,48,32,75,75,82,10,32,67,32,80,32,75,-32,95,55,54,51,226,230,2,15,114,101,112,108,97,99,101,109,101,110,116,-44,32,97,116,32,230,164,63,3,50,53,58,54,129,181,224,114,106,75,139,-224,116,105,0,90,140,28,97,142,96,132,0,52,224,132,106,65,249,0,48,-225,249,14,100,232,65,143,101,41,64,9,200,247,96,12,96,189,96,17,162,-209,64,18,140,239,224,26,1,226,212,0,0,58,102,48,2,10,65,32,64,-246,0,90,68,50,192,4,150,54,0,58,96,100,1,10,65,224,29,7,224,-34,5,0,55,160,34,70,43,101,101,1,95,54,75,88,0,58,71,207,226,-190,27,69,164,5,98,114,101,97,107,115,226,189,95,224,113,88,1,64,90,-225,148,0,97,43,193,143,65,36,88,75,225,132,0,0,58,106,126,161,62,-184,103,224,10,30,232,75,1,0,32,82,83,225,209,0,132,108,192,44,224,-7,11,224,70,2,224,59,2,0,58,96,163,225,236,6,224,60,5,128,41,-0,58,96,217,98,53,0,90,120,95,0,58,114,253,96,57,2,80,32,35,-64,245,0,85,97,254,130,195,4,80,32,35,51,32,71,113,0,58,119,77,-192,38,64,255,96,38,95,7,101,15,142,193,0,58,112,182,226,147,1,128,-96,64,25,224,213,10,64,144,0,58,114,131,160,28,1,80,32,153,219,0,-80,96,72,129,10,3,80,32,35,53,192,128,128,225,0,80,119,161,128,17,-128,202,3,80,32,35,54,192,17,128,203,112,141,233,181,1,111,168,70,149,-72,108,0,49,70,232,6,55,52,55,32,95,55,53,68,165,0,53,137,153,-64,128,169,246,129,41,143,132,2,58,56,50,129,9,128,74,79,98,224,65,-14,73,141,70,44,169,236,0,67,72,223,0,49,230,181,0,1,95,55,168,-195,96,86,2,58,56,49,193,77,200,198,237,245,4,156,117,96,8,151,248,-2,95,56,49,170,64,232,136,4,199,225,247,33,8,128,207,96,8,1,95,-54,69,6,232,139,0,224,60,4,245,36,2,162,145,64,189,96,224,7,64,-95,49,57,49,32,95,57,231,92,3,128,48,1,95,56,144,158,224,20,0,-135,252,224,33,2,165,134,192,38,64,238,196,138,226,2,1,194,189,0,58,-96,39,194,186,98,85,64,235,228,149,0,72,144,0,50,72,61,101,60,233,-51,0,225,108,7,232,197,1,225,108,1,96,37,81,88,225,238,9,64,101,-194,121,129,218,117,233,74,249,1,55,56,99,222,201,33,115,151,96,138,237,-97,16,31,67,97,110,110,111,116,32,101,120,112,97,110,100,32,35,105,102,-32,100,105,114,101,99,116,105,118,101,32,105,110,32,102,1,105,108,237,68,-3,205,70,2,95,49,51,75,144,151,54,224,81,6,4,58,94,42,32,32,-250,163,2,224,140,1,5,66,32,95,48,32,95,67,29,162,53,2,95,51,-57,64,16,67,185,3,95,51,54,53,225,49,3,168,210,96,52,2,52,50,-52,64,4,128,54,224,193,8,31,87,97,114,110,105,110,103,58,32,116,114,-97,105,108,105,110,103,32,99,104,97,114,97,99,116,101,114,115,32,97,102,-116,1,101,114,64,214,238,43,17,142,88,97,0,3,115,105,111,110,224,245,-47,224,240,1,130,68,97,145,1,95,56,82,253,225,144,43,4,112,97,114,-115,101,225,143,76,227,71,3,225,143,17,147,144,109,188,225,152,11,1,95,-56,146,211,225,159,90,224,255,56,225,153,3,2,95,49,50,192,241,64,0,-1,58,56,84,109,72,43,224,224,0,96,8,0,56,174,53,236,85,15,1,-47,47,128,83,174,152,129,19,0,58,97,19,64,76,5,49,49,32,95,55,-48,67,189,2,56,49,49,99,158,224,17,1,1,52,56,78,158,78,140,65,-124,128,19,5,55,49,51,32,95,55,241,240,5,2,124,92,124,160,99,0,-55,64,219,0,55,117,149,96,40,162,83,229,248,1,160,70,99,68,0,51,-181,71,128,143,171,228,224,143,3,0,48,224,143,45,1,38,38,224,141,16,-143,213,224,141,17,212,245,64,40,64,141,1,52,55,68,209,96,113,224,10,-13,224,135,9,78,224,0,51,206,224,224,188,2,224,140,2,96,217,96,218,-224,129,0,129,209,224,49,5,1,56,48,143,232,224,17,3,66,53,128,188,-224,38,5,128,21,224,212,5,170,126,224,83,9,245,255,1,1,53,55,64,-20,2,51,52,49,159,143,130,115,128,41,0,49,72,116,224,17,5,0,52,-188,122,2,95,55,52,64,247,224,208,3,96,188,0,58,96,216,225,55,28,-225,77,31,225,213,1,1,62,61,161,213,224,144,2,5,53,57,32,95,53,-56,161,56,225,138,12,1,54,50,225,138,1,224,55,1,1,56,50,224,55,-1,224,117,21,0,60,224,117,9,1,55,53,224,60,21,64,117,244,103,0,-224,55,2,72,32,224,116,29,0,61,224,234,10,225,173,0,224,61,24,0,-33,224,61,9,105,34,192,61,0,58,98,69,225,165,6,226,33,3,0,54,-137,128,224,29,1,226,132,7,72,33,226,132,38,224,18,4,130,63,128,50,-0,58,96,6,224,141,6,225,84,12,80,20,225,84,8,1,57,56,65,84,-160,86,224,54,13,242,109,0,225,78,3,73,116,192,55,0,58,96,209,225,-16,16,2,55,56,57,225,16,23,73,6,225,16,8,170,174,225,16,35,64,-13,0,58,96,6,227,68,17,224,228,13,226,230,11,0,53,225,27,25,0,-55,224,54,10,0,55,71,88,1,56,48,166,120,228,225,14,224,56,11,1,-50,50,72,69,160,56,0,58,97,21,101,209,0,50,68,39,1,57,49,96,-90,0,50,192,33,2,95,55,57,69,145,128,11,2,50,50,55,224,11,2,-0,56,224,11,0,1,56,48,68,93,2,50,51,54,192,17,108,125,64,9,-106,81,0,83,102,234,237,134,0,0,80,136,170,227,9,1,12,73,110,116,-101,103,101,114,58,32,100,105,118,105,105,48,3,98,121,32,48,167,98,237,-194,1,107,253,64,64,82,184,5,80,32,95,50,49,54,64,4,71,83,146,-197,224,17,9,128,64,237,104,5,135,228,245,25,1,247,48,3,65,0,128,-55,128,37,104,213,1,95,55,118,186,2,95,56,48,101,123,128,42,98,29,-192,36,171,243,160,12,0,83,139,136,2,56,48,49,75,192,0,65,128,134,-233,34,2,109,121,64,5,160,88,182,169,152,186,136,124,0,85,83,95,128,-0,80,230,0,48,199,157,192,0,0,58,97,113,1,10,65,160,194,64,58,-1,95,50,151,49,0,55,109,80,64,49,252,14,3,64,9,0,89,161,61,-224,19,0,237,85,0,64,63,255,30,4,245,222,5,192,219,173,22,235,125,-3,128,238,128,69,78,82,109,232,66,95,0,52,99,127,160,220,206,74,120,-74,73,216,192,28,96,241,68,27,0,49,109,89,0,67,67,8,192,12,1,-95,50,78,21,64,0,2,95,53,52,134,227,151,161,129,219,0,58,97,95,-140,177,224,211,1,206,150,173,205,206,19,224,7,2,71,83,0,53,78,0,-2,95,53,56,106,111,129,196,0,80,97,142,103,226,128,6,193,150,96,26,-77,58,64,21,64,59,0,54,66,235,1,53,56,183,131,64,32,160,49,96,-28,200,185,96,58,0,39,160,46,96,26,168,56,249,165,1,143,133,0,83,-250,200,0,238,182,5,242,231,1,64,69,0,56,67,150,1,53,55,174,126,-193,122,161,125,225,229,0,96,17,64,87,161,193,97,122,1,55,57,110,41,-192,95,160,163,128,220,160,12,0,67,224,37,0,64,253,97,107,153,146,224,-197,16,64,39,64,48,192,243,225,16,3,227,134,2,101,143,98,209,64,137,-0,50,86,4,98,13,239,75,0,121,93,112,231,104,216,1,67,39,66,133,-1,95,55,64,21,162,139,224,77,3,224,13,5,0,58,99,144,112,241,228,-80,6,15,108,97,115,116,58,32,101,109,112,116,121,32,108,105,115,116,100,-74,129,44,2,85,32,64,81,235,128,98,67,73,96,8,68,255,224,89,1,-0,79,113,249,64,127,0,58,97,13,227,72,0,132,232,1,75,32,64,23,-134,138,99,223,0,58,97,255,175,162,68,24,219,230,227,56,1,113,68,98,-43,1,53,53,64,187,2,95,53,54,97,47,160,14,0,58,100,9,2,10,-65,32,87,151,133,33,222,123,248,185,1,192,93,96,70,158,4,131,186,228,-148,0,243,93,11,64,133,234,72,1,0,49,112,250,2,95,49,55,64,11,-65,129,234,84,2,254,240,0,133,105,0,67,131,153,129,166,96,48,224,47,-1,194,229,64,0,64,60,0,58,101,54,161,39,130,187,1,95,50,84,14,-129,29,132,171,224,27,7,129,71,204,79,0,50,127,90,103,7,169,126,1,-95,51,71,46,0,58,102,146,97,106,3,75,51,32,75,68,0,0,58,70,-250,160,81,0,95,71,112,103,216,195,225,153,217,131,67,184,210,251,179,1,-0,35,132,73,100,8,65,58,161,169,161,85,178,45,224,47,3,0,49,82,-240,196,198,224,79,10,0,49,172,171,0,85,82,85,0,54,231,200,1,128,-16,0,55,224,16,2,160,18,231,236,3,135,170,84,16,163,195,1,82,32,-225,143,2,84,145,131,4,0,58,104,219,115,201,64,221,1,95,55,67,108,-64,135,0,55,92,204,129,145,193,194,115,25,1,95,55,84,159,0,58,64,-109,224,54,22,192,137,84,169,224,54,1,130,220,224,54,17,129,68,1,95,-53,122,108,224,53,0,0,54,227,4,0,97,76,250,94,2,226,150,0,226,-154,0,225,112,0,196,242,128,253,224,47,1,195,67,64,2,101,32,228,210,-1,128,2,211,237,224,91,4,193,254,224,22,0,164,193,128,98,230,23,0,-0,64,102,200,224,57,0,133,231,224,117,0,230,248,4,224,162,0,67,13,-98,7,137,178,96,61,64,27,1,95,50,83,58,67,178,254,6,1,160,171,-1,79,32,115,212,97,196,225,64,5,198,255,0,58,97,92,97,53,103,158,-234,191,9,224,13,1,233,226,2,0,55,71,234,233,209,0,130,36,234,214,-4,2,55,49,57,66,89,64,111,0,55,96,39,0,56,194,198,70,174,238,-17,0,96,168,3,95,55,49,56,160,44,64,68,1,51,56,64,58,108,60,-133,186,192,209,96,59,224,98,0,75,112,64,65,224,81,48,0,58,116,89,-136,195,224,187,5,99,16,167,40,196,248,103,183,244,213,2,229,236,1,6,-100,101,102,105,110,101,100,170,46,160,53,225,70,5,193,231,224,100,3,239,-26,6,0,55,92,245,193,48,225,59,4,71,28,1,56,49,163,239,241,190,-16,1,44,41,210,18,235,185,5,0,52,233,84,1,96,135,162,135,225,71,-2,147,218,0,52,69,96,0,55,78,240,204,108,132,17,245,135,6,0,90,-69,36,0,54,75,104,0,55,109,150,236,158,4,96,0,227,68,2,225,8,-10,224,18,10,225,24,7,228,147,1,66,180,164,242,234,27,0,224,45,12,-65,75,224,65,12,66,26,82,193,224,166,8,224,88,9,224,184,7,168,208,-69,143,255,254,31,226,9,5,230,10,0,130,185,0,67,139,38,129,85,229,-203,0,139,173,87,8,104,173,97,137,66,9,165,70,224,182,0,65,202,0,-56,237,75,9,225,166,0,224,5,3,139,144,0,75,128,45,93,250,224,69,-13,1,64,75,82,202,224,26,3,232,244,1,93,171,224,26,14,71,165,243,-213,4,251,241,63,4,51,56,58,49,50,161,59,0,75,234,171,0,128,210,-227,86,1,133,61,224,10,0,225,58,0,168,100,120,150,224,240,15,225,55,-7,171,0,160,81,165,213,64,13,161,175,225,75,7,64,24,251,207,1,224,-111,38,67,59,64,1,67,124,197,72,98,159,92,1,1,95,55,142,64,229,-82,6,224,113,6,238,136,0,96,169,224,69,1,197,3,65,52,162,8,3,-32,95,55,55,67,93,211,140,224,89,10,225,201,81,1,52,53,225,201,1,-0,58,101,165,251,91,2,231,114,2,0,80,135,214,64,255,227,121,2,230,-255,6,70,249,136,227,234,213,4,192,21,167,95,96,69,64,229,172,161,0,-58,68,202,232,13,1,213,54,2,95,51,54,93,23,69,79,128,28,128,24,-152,25,67,217,0,54,87,60,0,67,67,231,0,54,197,113,225,32,1,2,-39,96,95,128,213,0,58,102,206,74,54,2,55,48,48,136,104,0,55,83,-58,96,197,108,185,97,233,64,21,1,50,32,224,64,2,25,69,120,112,101,-99,116,101,100,32,101,110,100,32,111,102,32,105,110,112,117,116,32,40,69,-79,70,229,189,0,0,58,103,91,251,156,15,0,55,75,62,106,139,226,18,-3,248,96,8,0,35,95,149,0,32,128,82,133,238,248,82,2,0,51,64,-226,98,122,64,20,81,164,210,20,128,31,2,49,52,51,64,36,174,251,128,-146,137,143,0,80,160,225,194,99,170,174,104,53,234,150,5,1,64,35,75,-96,192,188,0,80,66,141,70,206,193,229,193,167,160,26,0,53,99,56,171,-146,64,0,140,133,162,45,162,15,229,139,1,78,98,224,92,1,224,10,0,-235,111,13,75,223,129,6,203,114,227,221,0,235,76,10,169,22,64,26,65,-211,64,153,128,172,224,26,0,224,108,1,66,189,208,89,144,25,224,223,0,-192,173,235,215,19,128,79,169,249,99,6,162,186,237,112,5,224,224,2,224,-179,13,129,104,128,115,98,10,224,144,2,66,53,225,95,11,224,44,19,224,-199,3,128,0,1,58,55,86,17,5,10,65,32,65,32,58,96,76,3,10,-65,32,75,64,10,211,95,209,216,128,172,130,29,224,244,12,0,51,96,86,-224,199,13,124,60,90,125,132,175,160,7,193,75,135,42,230,11,1,224,61,-1,190,100,131,118,1,95,55,131,231,1,58,55,80,170,141,161,103,201,200,-196,0,55,144,123,133,68,133,217,96,56,0,58,96,56,224,205,1,114,77,-232,169,36,171,231,233,89,3,126,240,154,156,234,160,2,68,22,233,236,0,-233,173,20,161,161,230,67,3,224,128,16,224,43,7,236,203,4,230,203,0,-134,57,96,45,67,178,232,125,5,97,8,223,208,167,10,225,125,3,231,13,-6,144,198,172,137,230,162,9,64,244,124,125,134,218,224,208,0,245,10,3,-224,7,7,197,204,129,197,230,202,14,128,0,230,187,78,2,51,55,55,230,-187,3,66,46,240,57,4,131,153,225,73,5,225,82,6,180,0,212,6,188,-187,195,111,92,58,100,54,66,187,0,54,155,166,114,132,1,95,55,113,145,-144,218,108,195,66,49,107,99,242,163,0,224,69,0,224,60,14,128,42,162,-12,255,142,16,5,109,97,99,114,111,32,128,227,193,238,166,32,129,206,224,-51,10,1,32,101,198,186,128,55,160,136,96,53,64,144,230,88,1,224,145,-6,192,91,224,74,2,23,97,114,103,117,109,101,110,116,115,44,32,98,117,-116,32,119,97,115,32,103,105,118,101,110,128,90,224,77,5,160,208,161,243,-179,132,165,10,64,2,1,95,55,127,218,96,178,247,20,4,233,219,2,201,-203,181,168,160,223,0,54,88,99,235,200,4,66,212,160,98,66,116,1,54,-55,228,92,1,108,48,132,206,2,55,52,52,71,217,123,42,166,235,165,203,-244,178,4,65,249,64,98,81,116,224,101,8,128,42,224,100,9,65,53,96,-11,67,60,65,223,193,69,165,169,133,64,64,125,65,119,69,211,228,48,0,-0,58,99,36,72,146,2,53,54,57,67,165,0,58,96,64,177,69,71,104,-0,75,64,83,0,51,225,136,2,4,101,120,112,97,110,88,238,4,44,32,-97,116,32,233,253,64,2,53,58,54,130,35,224,112,104,108,236,224,114,103,-69,130,224,229,104,65,243,0,58,98,43,228,157,4,224,9,1,98,226,0,-55,74,236,160,20,0,95,142,79,70,97,1,95,55,146,40,181,110,83,228,-181,206,64,83,137,234,231,212,0,246,10,1,128,71,142,208,132,242,224,53,-2,0,54,226,106,21,227,242,2,226,106,93,224,112,87,226,106,10,224,114,-89,226,106,8,224,114,89,0,32,111,137,0,58,100,134,225,224,19,6,114,-101,112,108,97,99,101,64,140,225,226,95,224,114,89,225,228,10,224,116,91,-151,116,81,130,224,123,103,0,58,105,171,143,24,0,52,74,247,123,157,2,-95,55,54,121,7,91,131,5,10,65,32,73,32,58,96,16,70,107,1,52,-56,109,193,75,171,1,95,55,104,111,1,95,51,93,96,160,56,0,51,106,-245,192,11,84,52,96,11,0,58,96,6,121,117,3,51,54,32,75,175,161,-0,49,232,36,3,6,110,111,32,102,105,101,108,200,110,96,29,104,1,117,-54,128,105,0,49,107,69,96,11,0,58,96,6,96,145,0,57,66,156,1,-51,53,72,65,0,50,251,147,3,17,67,111,110,116,114,111,108,46,69,120,-99,101,112,116,105,111,110,46,95,246,3,114,110,97,108,64,98,224,39,1,-10,82,101,99,83,101,108,69,114,114,111,114,96,123,97,140,0,58,96,226,-227,0,2,0,73,140,55,64,28,99,33,1,75,51,65,33,73,61,175,186,-120,185,146,29,91,214,69,40,64,8,0,55,88,177,1,95,51,88,224,229,-129,1,233,133,1,72,92,105,252,157,235,236,224,3,197,181,96,37,150,65,-65,161,0,53,65,3,0,53,172,30,0,58,107,200,124,76,5,52,56,32,-95,50,53,65,44,96,28,1,95,50,224,40,1,1,95,51,81,57,1,95,-51,140,67,1,53,52,129,194,154,247,160,106,1,53,53,224,20,9,1,50,-57,65,216,160,77,0,57,65,216,96,11,0,58,96,6,151,70,109,214,138,-246,203,44,128,2,128,184,142,19,78,18,0,53,86,225,136,245,242,15,1,-152,204,88,143,64,7,73,90,218,127,128,60,236,15,0,5,50,56,52,32,-95,50,124,24,234,194,4,76,31,160,50,65,37,1,53,51,128,22,90,187,-125,39,160,0,224,113,90,0,54,224,113,5,224,42,6,224,15,7,0,58,-65,111,97,66,170,182,217,216,224,153,12,207,89,3,95,50,56,51,224,148,-0,64,163,141,30,130,124,224,13,1,224,149,16,128,80,0,58,66,0,98,-50,2,56,32,58,96,42,199,253,171,226,0,55,84,208,135,241,81,144,139,-104,177,73,161,36,64,5,235,103,0,64,152,0,50,74,239,186,141,128,30,-64,22,253,205,0,136,157,0,53,160,14,253,219,8,131,27,0,64,192,194,-224,40,0,0,35,242,147,0,154,190,2,95,55,53,132,77,0,53,132,141,-111,88,100,137,77,100,0,58,96,29,1,10,65,81,186,0,49,64,218,132,-32,96,245,0,58,96,39,114,209,0,58,96,223,96,24,126,43,65,106,232,-255,5,107,171,128,230,194,219,104,252,0,54,121,48,233,107,0,67,147,4,-64,95,49,57,49,192,228,97,216,64,21,224,117,2,251,107,4,105,92,175,-164,144,109,169,92,108,164,111,65,210,20,0,58,100,24,224,165,2,129,167,-226,47,1,160,5,112,174,0,64,77,8,1,75,52,130,47,1,95,55,147,-238,68,47,149,47,149,43,96,35,158,206,192,35,160,139,0,58,80,157,129,-79,224,93,7,0,55,92,105,160,93,98,71,224,93,0,129,24,117,153,149,-152,224,95,10,239,54,1,124,253,227,134,0,170,78,147,217,123,186,97,111,-245,211,7,209,97,99,26,0,52,66,204,224,231,12,240,54,1,179,177,224,-137,11,188,8,229,245,1,31,87,104,101,110,32,108,111,111,107,105,110,103,-32,102,111,114,32,97,32,110,111,110,45,101,109,112,116,121,32,115,101,113,-24,117,101,110,99,101,32,119,105,116,104,32,115,101,112,97,114,97,116,111,-114,115,58,94,42,94,149,184,0,58,97,92,135,56,215,150,241,212,0,0,-48,205,163,64,210,242,28,3,224,41,8,0,49,192,41,241,245,4,0,58,-114,68,128,92,241,252,2,124,200,133,105,130,58,230,48,6,98,150,251,170,-2,239,214,11,239,213,10,176,9,239,179,6,2,103,111,116,160,35,224,157,-6,0,58,64,187,64,156,119,10,0,89,161,221,68,33,224,140,2,239,1,-10,0,64,172,90,241,196,75,4,49,48,57,58,55,128,173,175,243,98,89,-0,52,68,233,224,14,1,244,151,3,68,88,224,25,13,66,46,0,83,64,-213,64,25,252,8,2,128,30,68,59,96,57,244,246,20,1,49,50,98,138,-224,33,18,135,98,224,66,19,153,2,99,42,245,58,8,88,49,64,234,70,-20,88,135,165,229,208,52,96,164,192,12,96,43,230,75,0,6,95,52,52,-57,32,95,53,68,78,129,45,224,66,27,128,139,224,67,53,96,240,224,66,-6,1,55,50,165,249,224,134,30,97,85,224,67,15,196,6,228,111,0,101,-43,129,196,228,211,1,249,233,5,255,91,16,7,59,40,41,91,93,123,125,-96,195,1,230,6,0,104,216,228,200,0,71,19,224,102,6,250,89,3,0,-50,225,183,6,2,64,35,57,135,34,229,60,1,128,6,157,253,128,97,154,-66,165,5,227,191,8,13,66,97,100,32,99,104,97,114,97,99,116,101,114,-58,131,161,211,62,167,44,167,127,226,160,1,162,203,128,116,64,192,128,31,-233,163,3,226,99,10,102,222,192,33,135,253,161,91,160,46,160,71,224,202,-0,65,90,126,196,115,59,230,72,3,230,222,0,85,234,100,109,132,154,129,-226,96,50,230,252,1,233,144,1,200,186,129,232,192,91,211,75,224,48,8,-224,46,14,129,14,226,95,6,224,62,10,96,54,252,23,30,1,95,39,229,-26,0,230,165,0,224,98,26,64,79,64,101,96,11,102,240,96,47,3,64,-67,32,79,230,49,2,226,159,26,22,33,64,35,36,37,38,42,43,46,47,-60,61,62,63,92,92,92,94,92,124,58,45,126,160,148,129,229,193,226,169,-164,97,223,224,207,15,1,101,69,224,58,12,202,246,128,18,229,17,15,132,-6,224,110,4,226,17,8,192,130,225,138,11,226,25,11,230,180,6,0,43,-230,173,2,226,36,6,226,28,7,224,180,30,214,170,224,180,82,0,45,224,-180,34,224,128,65,0,79,138,254,194,78,224,124,30,196,117,224,197,8,3,-109,105,115,115,73,33,7,43,47,45,47,100,105,103,105,168,20,224,39,8,-14,97,102,116,101,114,32,101,32,105,110,32,102,108,111,97,224,38,15,6,-108,105,116,101,114,97,108,164,184,64,155,254,128,7,214,235,224,204,8,224,-68,1,2,46,46,46,227,126,1,96,229,195,72,64,0,94,74,194,198,0,-85,101,65,64,218,170,234,225,165,9,255,151,3,0,105,184,145,224,35,6,-2,115,116,114,65,2,160,187,128,34,96,118,198,20,97,164,129,131,138,198,-232,78,6,193,202,245,178,10,64,186,221,36,230,161,0,97,176,106,188,97,-148,80,222,233,54,77,3,49,56,58,52,210,133,228,144,3,121,45,126,23,-248,131,0,64,0,248,127,4,97,89,64,48,96,39,230,129,2,124,252,81,-6,128,60,249,206,0,0,67,102,233,0,52,81,168,105,152,96,0,129,156,-234,45,8,225,160,13,160,169,1,58,55,66,32,114,77,253,25,2,221,110,-1,95,55,72,173,194,70,224,72,2,202,249,0,97,225,201,0,71,72,163,-164,225,182,7,64,181,235,75,2,224,70,1,3,98,105,110,100,128,51,235,-154,4,0,52,98,105,224,17,3,64,58,93,240,224,143,15,224,132,3,4,-32,104,97,115,32,115,1,3,110,97,108,32,198,92,65,144,224,150,41,236,-74,5,97,45,206,225,130,122,0,83,158,156,160,96,99,60,77,229,96,15,-237,232,8,0,58,64,200,174,208,116,19,64,57,236,153,8,106,31,128,93,-236,240,2,165,94,224,192,3,91,31,107,61,224,213,9,224,181,2,224,225,-12,225,191,14,0,44,108,169,0,39,231,144,0,224,152,14,134,3,224,138,-4,155,247,224,27,13,235,157,5,224,27,4,0,49,99,147,224,28,15,156,-25,224,28,15,163,232,224,28,13,229,242,0,224,28,11,224,144,18,97,83,-224,27,14,196,90,224,27,12,133,111,224,83,13,192,55,101,70,0,83,198,-46,224,157,15,236,170,0,224,28,10,141,10,64,22,3,83,32,95,54,144,-41,238,165,3,229,146,8,18,117,110,114,101,99,111,103,110,105,115,101,100,-32,101,115,99,97,112,101,239,144,1,1,105,110,225,253,4,3,58,32,92,-92,97,249,233,66,2,207,35,224,137,7,157,88,224,27,14,97,124,224,27,-14,98,40,224,27,14,97,151,224,27,14,97,95,224,27,13,93,186,224,27,-16,214,33,224,27,11,97,235,224,27,14,224,195,18,149,122,224,27,13,0,-56,224,83,18,0,56,102,136,224,27,14,228,67,0,228,164,5,81,168,86,-232,230,177,75,5,51,48,56,58,49,52,163,235,83,76,227,234,5,224,138,-8,66,198,229,198,24,196,120,0,35,130,199,235,117,16,4,39,92,92,86,-84,228,104,0,224,125,26,65,60,224,125,33,152,25,224,125,19,1,85,83,-228,230,3,1,55,48,78,254,224,4,15,224,155,22,112,21,230,224,34,224,-67,12,110,167,225,93,33,160,186,224,154,61,224,86,1,211,223,226,11,60,-224,67,22,67,70,224,154,33,99,88,224,242,28,226,41,37,167,174,224,174,-25,225,228,59,224,242,38,224,243,32,100,62,224,156,54,101,182,224,156,34,-236,242,0,227,189,27,124,114,227,189,33,128,248,227,189,18,4,83,79,72,-39,32,96,7,128,6,1,84,88,128,7,0,73,128,6,1,89,78,128,7,-5,85,66,39,32,111,114,96,10,0,80,240,102,1,228,109,73,151,44,224,-175,18,0,82,228,109,9,225,210,90,102,197,224,198,33,183,242,225,32,27,-103,255,224,157,55,224,67,28,226,112,1,228,243,0,225,102,17,2,78,85,-76,193,240,2,78,65,75,225,241,35,104,68,228,53,34,225,241,24,1,76,-70,230,221,35,231,91,37,142,6,224,124,18,0,72,231,90,82,0,50,224,-125,24,0,71,226,236,40,225,125,39,165,24,224,219,73,105,218,224,219,19,-1,70,70,194,96,0,70,224,229,1,232,65,20,225,250,60,224,67,22,230,-87,37,221,96,225,149,24,230,242,58,226,217,38,208,202,231,74,62,224,155,-22,68,81,224,155,33,168,40,224,243,63,229,96,22,231,141,38,193,211,225,-56,25,119,11,224,88,33,192,245,227,107,63,224,246,22,224,157,38,218,175,-227,177,15,2,111,110,101,82,241,3,39,92,92,69,168,34,2,69,79,84,-128,7,1,78,81,128,7,1,84,66,128,7,0,77,195,216,2,69,83,67,-227,217,14,224,188,23,234,34,59,225,247,37,0,49,225,1,1,224,88,60,-224,224,59,224,156,1,234,34,35,225,249,28,229,90,37,122,29,224,174,34,-129,74,224,85,23,0,53,230,171,38,134,82,224,86,25,228,140,37,220,160,-224,86,24,238,87,37,146,96,96,20,231,3,17,1,68,69,233,101,0,2,-68,76,69,224,10,0,6,67,91,49,46,46,52,93,227,59,9,228,55,23,-238,250,38,164,234,234,164,94,237,178,38,247,139,0,225,62,17,1,67,82,-193,50,2,67,65,78,225,45,40,228,100,106,196,98,233,111,73,233,110,24,-0,66,226,106,1,0,66,233,111,2,228,78,62,225,38,23,236,160,37,196,-237,224,206,18,1,65,67,236,148,2,153,241,4,53,32,64,95,53,80,92,-6,95,55,51,48,32,95,51,189,77,224,29,10,0,49,224,29,2,218,47,-224,31,0,86,49,1,95,48,160,138,154,54,0,50,64,209,213,201,2,95,-55,51,92,23,192,63,224,251,8,86,81,159,176,0,48,64,54,2,95,49,-53,66,138,0,53,64,76,0,35,123,237,88,218,92,94,128,18,0,57,96,-71,246,124,22,249,149,4,4,99,116,114,108,45,182,129,8,109,97,108,102,-111,114,109,101,100,86,114,1,92,94,97,17,246,116,3,125,103,224,203,2,-96,225,64,224,5,49,57,49,32,95,57,98,99,0,51,81,184,96,5,128,-159,193,84,225,143,1,187,45,224,17,3,128,40,224,17,2,151,239,228,94,-4,180,57,224,35,2,224,34,8,188,81,224,17,2,174,14,224,17,2,224,-88,8,162,235,227,86,8,224,234,2,158,98,68,5,225,90,6,253,104,7,-217,190,225,97,4,162,88,0,58,123,64,1,10,65,118,75,0,83,66,210,-0,55,76,214,224,61,1,6,100,101,99,105,109,97,108,129,117,65,84,0,-55,123,112,158,212,97,196,0,50,126,50,96,229,3,95,51,52,49,94,56,-128,188,152,185,1,95,55,78,3,0,58,66,81,186,190,1,55,48,66,53,-154,179,156,245,155,161,67,0,0,58,98,137,224,143,18,2,111,99,116,224,-141,37,161,73,1,53,52,98,8,192,140,0,49,224,100,20,2,104,101,120,-224,240,36,131,204,1,95,55,105,95,224,99,0,0,48,96,99,227,43,4,-6,95,49,53,51,32,35,52,64,147,99,54,0,51,71,116,152,229,224,38,-9,123,39,224,38,0,186,253,64,174,224,39,6,102,185,224,39,0,152,224,-3,95,51,54,48,226,3,2,8,100,105,103,105,116,84,111,73,110,189,201,-227,30,12,224,16,0,163,40,64,86,193,204,224,49,28,96,176,224,49,21,-96,39,96,255,1,64,58,97,39,65,133,0,39,127,143,191,208,157,20,158,-81,64,0,128,27,64,5,228,133,1,100,178,0,49,73,216,103,66,1,95,-55,207,227,64,38,128,42,227,38,1,153,69,1,39,66,65,197,1,66,39,-96,5,2,32,95,53,122,63,224,117,0,96,11,125,148,96,7,2,83,32,-95,252,136,3,0,67,68,84,128,74,226,9,16,160,124,1,95,50,115,138,-67,144,99,150,0,50,64,245,2,66,32,80,197,77,224,62,18,160,67,222,-175,229,33,9,1,94,42,227,202,0,108,169,6,114,32,109,111,114,101,32,-165,16,254,229,7,0,32,97,243,0,115,227,231,0,66,225,66,142,98,59,-0,56,97,138,1,54,32,65,26,128,14,226,83,1,229,184,0,226,128,0,-229,202,2,194,133,224,45,10,194,134,224,45,2,130,139,64,124,159,8,171,-141,225,185,0,97,184,224,145,1,0,54,88,81,5,67,32,95,51,54,54,-167,85,231,16,3,1,96,95,199,12,230,142,3,78,114,230,89,22,0,69,-254,191,0,10,110,32,105,100,101,110,116,105,102,105,101,190,190,1,92,34,-225,62,4,1,79,32,101,246,220,206,1,58,55,86,184,128,184,103,46,3,-49,32,95,49,102,64,0,58,96,120,96,25,1,50,48,100,71,64,1,0,-80,64,35,66,230,130,122,197,143,1,55,48,132,23,99,25,162,217,0,58,-97,0,128,64,0,49,229,21,0,98,55,2,95,55,48,137,24,1,32,89,-100,159,0,83,72,26,0,75,65,119,96,4,162,39,192,50,99,103,98,108,-0,89,69,85,162,198,64,4,224,55,1,198,42,128,62,96,10,194,117,0,-89,66,238,2,39,32,80,225,69,24,18,102,97,105,108,101,100,32,116,111,-32,112,97,114,115,101,32,97,110,121,79,44,22,116,104,101,32,112,111,115,-115,105,98,108,101,32,99,104,111,105,99,101,115,58,94,42,97,85,99,165,-1,55,32,121,141,64,11,3,50,50,32,85,99,137,129,108,224,98,8,192,-55,224,53,1,97,237,0,54,159,19,196,11,1,32,66,128,91,227,235,0,-129,6,224,19,2,0,83,96,14,228,80,0,128,2,128,20,224,55,2,225,-32,4,224,26,3,0,90,161,37,192,38,128,76,96,11,0,39,102,184,192,-91,1,95,49,97,202,0,80,160,64,194,53,226,34,1,198,242,0,89,132,-117,74,136,136,126,132,210,193,1,64,52,0,58,65,29,128,45,128,115,0,-80,70,67,86,198,5,10,65,32,85,32,58,66,102,166,78,0,39,64,2,-64,59,72,125,132,80,0,75,96,85,1,95,55,155,146,132,181,97,125,99,-29,0,85,64,31,0,65,224,33,3,66,101,225,123,5,3,73,110,32,97,-255,236,0,225,136,12,1,83,39,65,121,101,75,99,185,0,56,194,110,69,-108,224,135,12,161,31,64,137,0,52,94,155,160,137,170,98,188,62,0,58,-68,14,168,25,64,18,64,44,70,49,224,80,11,0,58,96,117,128,43,3,-54,32,95,52,97,59,226,255,0,133,123,193,83,67,210,1,52,49,250,31,-2,0,55,103,166,0,58,64,210,129,72,0,85,193,142,2,90,32,90,69,-118,1,52,53,67,201,235,211,2,198,203,131,31,234,115,0,0,90,130,195,-96,220,160,85,96,0,0,58,96,11,97,174,0,75,96,228,0,58,97,127,-96,16,0,73,65,205,64,196,67,241,203,121,97,21,132,22,101,9,2,95,-52,53,192,230,233,44,0,235,121,6,64,237,3,83,32,64,82,227,171,3,-225,196,1,0,80,67,153,9,46,115,97,116,105,115,102,121,58,32,131,178,-236,122,7,96,95,130,107,99,58,100,180,0,50,161,11,224,75,1,6,82,-97,110,32,111,117,116,67,227,10,105,110,112,117,116,32,40,69,79,70,41,-197,45,137,183,64,73,130,161,3,95,52,55,56,64,21,0,55,69,198,224,-153,10,0,110,164,54,162,86,74,180,2,95,52,56,76,149,133,20,1,52,-56,102,24,64,11,0,58,96,6,163,9,228,227,1,0,83,202,51,67,200,-227,191,9,99,182,99,185,98,94,0,58,96,98,64,152,1,54,51,108,251,-130,33,138,122,229,10,0,0,58,96,165,64,37,97,28,130,61,224,35,1,-96,226,129,235,232,121,0,224,14,6,232,106,7,1,95,49,193,6,2,64,-95,50,97,231,128,10,96,48,64,10,0,58,96,6,64,114,192,18,224,230,-5,229,202,9,0,67,162,125,65,54,96,181,229,191,4,2,95,52,57,224,-127,0,1,95,51,97,69,192,103,130,140,1,95,51,225,72,3,136,152,142,-14,172,223,96,50,71,187,0,58,96,6,128,50,67,230,224,122,0,134,60,-107,168,128,130,160,80,139,81,224,74,7,132,251,64,6,2,10,65,32,67,-90,0,85,128,16,194,210,0,90,128,242,65,171,69,57,0,58,96,82,161,-238,64,20,224,28,6,130,95,2,73,32,58,96,192,97,209,2,32,95,54,-73,158,2,58,54,57,170,64,1,32,80,66,24,0,80,78,222,100,40,224,-12,0,139,164,192,45,129,235,66,66,233,245,0,230,37,5,96,197,129,120,-132,237,138,13,166,60,0,83,160,58,0,64,96,18,224,5,4,230,113,6,-160,60,230,145,2,230,127,14,129,195,224,19,2,64,62,0,66,143,83,243,-150,2,202,124,192,42,134,2,227,8,3,132,165,224,215,2,224,40,3,0,-64,224,76,3,174,196,128,57,224,110,12,100,250,224,206,1,162,244,134,81,-0,50,67,86,64,46,100,252,64,5,96,157,198,215,2,64,64,79,68,249,-167,9,224,64,56,224,199,0,224,73,44,135,103,66,9,128,30,4,79,32,-35,52,54,224,91,3,203,255,225,1,15,128,114,3,82,32,95,51,78,47,-224,153,5,98,37,0,39,96,2,99,41,98,112,128,39,224,119,24,225,239,-1,64,1,0,89,192,23,226,135,1,226,68,5,224,48,4,72,125,224,66,-6,200,127,224,63,9,70,105,244,100,0,161,241,192,182,2,95,51,57,64,-29,200,253,224,78,1,3,95,52,50,52,64,4,224,24,9,232,49,5,23,-87,97,114,110,105,110,103,58,32,67,97,110,39,116,32,102,105,110,100,32,-102,105,108,101,203,83,224,60,3,236,212,0,224,19,2,224,78,6,19,92,-34,32,105,110,32,100,105,114,101,99,116,111,114,105,101,115,94,42,94,134,-110,225,168,1,64,2,192,72,160,68,0,54,146,164,224,13,0,0,54,237,-48,4,224,65,0,225,144,20,224,139,8,17,94,42,32,32,65,115,107,101,-100,32,102,111,114,32,98,121,58,32,134,183,2,49,51,53,72,117,183,77,-160,58,69,255,97,100,164,117,64,74,243,213,15,6,109,105,115,115,105,110,-103,97,39,160,84,244,1,6,224,148,2,206,247,161,203,70,116,142,238,0,-54,80,146,193,20,67,11,77,51,0,55,65,176,224,39,6,0,57,106,32,-224,163,3,234,172,0,160,63,65,51,70,64,73,20,225,89,1,225,102,0,-1,95,54,111,188,168,237,131,23,160,19,128,0,112,140,100,98,1,52,51,-64,66,137,241,64,200,64,39,0,54,101,118,134,239,0,85,102,11,0,90,-64,111,148,86,0,58,96,31,229,208,0,78,14,0,54,235,34,0,74,173,-105,226,1,53,53,96,31,96,222,238,26,15,2,92,92,47,161,230,204,43,-0,58,96,100,2,10,65,32,108,222,97,249,129,75,228,48,0,97,206,64,-105,0,58,96,50,1,10,65,224,122,0,224,210,1,229,53,7,135,251,100,-110,161,3,225,24,12,0,58,96,7,96,81,0,58,65,92,166,116,225,152,-1,3,67,32,95,54,93,89,2,95,54,54,71,147,65,180,0,54,170,186,-192,35,2,95,54,56,226,201,3,15,85,84,70,45,56,47,47,82,79,85,-78,68,84,82,73,80,128,238,133,238,227,228,1,0,95,78,147,2,95,54,-57,146,1,1,54,55,64,141,0,58,98,4,204,133,132,83,2,95,54,56,-168,119,224,150,4,2,95,54,56,97,255,230,69,1,64,34,115,31,97,9,-152,76,1,55,57,145,209,0,35,228,234,1,162,133,103,31,224,42,2,65,-174,64,254,5,35,50,48,57,53,49,104,23,3,35,53,53,50,65,245,193,-142,224,124,2,0,52,177,31,226,173,4,225,111,0,150,182,130,113,0,67,-68,157,75,51,0,52,77,30,243,182,3,20,71,101,116,67,111,110,116,101,-110,116,115,58,32,115,117,114,114,111,103,97,116,138,115,129,102,193,42,129,-28,225,60,3,65,147,82,19,1,95,54,96,105,224,131,0,227,143,0,0,-58,97,87,4,10,65,32,75,51,70,7,0,58,96,39,9,10,65,32,94,-103,101,116,98,32,58,97,59,105,59,3,57,57,32,79,81,238,80,77,1,-95,52,72,180,138,145,97,116,180,116,129,37,0,51,64,112,225,228,22,243,-200,6,20,117,110,107,110,111,119,110,32,116,101,120,116,32,101,110,99,111,-100,105,110,103,235,225,2,98,59,0,51,108,232,66,65,130,122,67,228,1,-56,48,64,4,132,166,100,239,97,63,0,55,192,20,64,46,169,252,1,52,-56,67,10,2,54,56,49,97,12,66,247,0,73,68,27,71,109,0,85,64,-23,130,85,64,53,140,234,0,50,110,90,0,58,96,24,106,215,2,51,54,-32,77,188,97,94,0,49,143,232,0,85,96,35,1,95,51,247,83,0,0,-52,96,142,64,92,3,95,49,52,50,192,11,0,58,96,6,96,132,5,57,-32,75,32,95,51,67,253,1,51,50,225,0,3,65,223,19,114,111,108,46,-69,120,99,101,112,116,105,111,110,46,73,110,116,101,114,110,150,20,224,39,-1,3,83,111,109,101,224,35,0,97,32,193,133,195,14,129,23,123,178,203,-103,0,83,64,242,0,55,108,155,100,163,0,58,65,54,224,230,0,109,210,-96,30,9,10,65,32,99,97,116,99,104,32,58,96,63,147,86,227,75,4,-3,64,95,54,53,152,134,70,18,0,54,83,19,0,54,91,72,224,160,1,-6,111,112,101,110,70,105,108,173,17,226,242,1,0,58,100,26,100,61,67,-98,78,56,96,57,171,33,71,159,158,37,167,202,146,121,1,95,52,83,84,-136,127,64,167,64,3,200,142,96,52,97,191,244,94,3,241,123,7,166,141,-96,128,130,9,228,179,8,64,209,164,179,69,44,194,110,0,49,127,58,227,-76,3,131,94,224,33,2,84,124,128,90,216,109,228,86,2,0,54,108,89,-0,51,65,113,247,5,1,143,193,224,32,3,0,52,109,33,224,19,6,104,-165,1,95,54,116,104,1,95,54,103,3,224,119,1,120,80,96,138,96,114,-1,95,52,76,76,3,95,54,55,49,97,83,130,105,5,94,102,108,117,115,-104,67,192,64,22,213,32,229,18,1,1,54,50,208,243,229,103,1,65,69,-132,244,224,5,0,78,157,64,4,64,114,64,3,224,131,4,224,13,6,228,-137,6,134,115,1,95,52,69,32,1,95,54,117,69,228,142,3,101,74,64,-175,228,125,0,0,65,64,190,64,22,96,213,0,66,78,246,109,49,96,51,-138,185,0,58,96,60,128,245,1,54,54,85,157,0,48,96,52,130,89,8,-65,46,119,114,105,116,101,32,58,96,26,65,4,4,99,108,111,115,101,65,-4,64,126,231,172,0,1,95,54,103,125,2,54,51,32,64,62,160,87,129,-192,7,116,111,70,117,110,80,116,114,64,50,129,95,80,244,0,90,68,254,-167,3,65,56,103,220,68,13,66,128,118,76,67,115,96,233,224,9,1,96,-29,110,185,138,140,161,224,152,36,101,1,0,50,96,133,65,240,0,58,96,-6,129,6,0,58,98,137,129,177,225,180,4,67,123,117,75,75,26,229,21,-2,171,156,230,247,8,68,6,0,53,231,119,0,0,53,100,148,0,54,89,-75,234,87,1,67,92,113,166,131,70,198,190,79,148,0,54,121,191,1,95,-54,205,164,0,58,99,38,165,231,0,80,134,8,0,95,106,50,160,5,102,-18,0,58,96,47,228,135,0,231,9,4,0,54,146,5,103,124,226,41,4,-97,141,119,89,135,118,224,55,6,90,112,224,177,1,228,80,0,162,164,0,-95,204,155,0,58,96,177,79,83,4,79,46,112,101,114,93,91,4,73,79,-32,94,38,162,3,64,31,0,54,96,31,6,102,112,102,105,110,32,58,64,-118,128,14,2,110,101,119,64,14,130,1,8,94,97,100,100,95,70,73,76,-69,64,18,130,2,96,18,3,117,116,102,56,64,18,207,212,1,95,52,67,-243,64,166,64,89,187,119,229,45,7,137,89,126,132,160,213,158,144,129,65,-235,31,3,3,79,32,35,49,79,227,101,205,224,26,10,0,57,199,178,224,-27,8,74,135,224,26,11,229,3,1,1,119,43,234,70,0,142,1,228,166,-4,98,144,1,95,54,100,236,225,96,3,194,19,226,105,8,0,58,98,134,-103,18,1,49,52,99,66,0,58,96,61,163,21,192,233,106,100,102,134,1,-95,52,115,226,192,6,130,247,96,118,0,58,96,6,100,174,70,55,1,32,-58,96,160,97,95,246,84,0,166,209,138,221,246,115,10,166,47,77,250,171,-1,224,47,2,130,24,77,21,104,195,1,54,51,204,0,171,35,71,15,99,-228,132,105,236,151,0,67,240,97,42,199,66,66,105,0,52,66,219,170,31,-0,67,123,74,156,3,160,18,2,58,54,52,232,60,0,118,15,182,156,64,-24,168,67,2,53,49,55,64,4,0,56,64,255,99,143,0,53,83,76,160,-11,1,54,50,160,80,3,95,54,51,48,160,90,65,152,0,49,192,33,0,-58,96,6,182,38,70,54,1,95,53,83,19,0,58,64,34,128,22,92,1,-66,97,0,66,99,94,0,53,117,95,0,54,77,220,2,53,57,56,78,30,-75,51,169,249,67,130,0,53,65,208,0,80,64,165,166,236,155,196,96,246,-115,170,67,168,236,100,1,98,216,96,84,64,184,123,22,224,23,7,160,76,-135,23,227,176,0,128,27,205,69,192,24,192,52,1,95,54,101,67,96,21,-83,83,129,131,102,140,2,32,61,61,75,103,97,29,85,125,0,54,68,106,-226,216,1,2,98,105,110,182,6,224,61,1,175,80,235,229,0,234,146,2,-65,0,0,51,225,0,0,96,102,234,179,5,79,64,227,131,0,0,53,224,-172,0,1,80,32,160,12,225,30,0,224,213,1,241,150,4,65,138,211,204,-85,158,96,33,119,248,0,56,70,205,192,195,200,52,64,204,224,43,2,0,-50,64,121,9,95,52,57,57,32,95,56,32,95,52,70,195,128,38,131,34,-77,117,78,139,98,96,103,43,75,15,130,13,0,53,85,239,1,95,54,69,-147,0,58,65,239,160,22,98,3,0,50,116,49,66,162,225,116,0,64,18,-0,54,161,192,100,177,2,51,57,52,64,23,131,61,196,24,157,193,1,95,-53,134,190,0,58,96,93,195,227,185,50,0,83,180,40,78,86,2,67,32,-60,88,149,64,43,224,25,12,104,0,149,127,207,251,160,25,96,232,97,189,-155,70,225,248,0,98,105,194,153,233,109,0,160,43,96,131,226,41,6,64,-99,160,48,128,36,192,202,96,194,96,0,224,129,12,166,152,224,85,14,101,-13,224,85,9,98,50,224,144,22,65,14,224,58,21,224,145,1,225,45,4,-100,82,224,171,12,96,202,224,112,16,99,43,224,171,45,101,156,224,171,21,-224,59,16,106,167,224,59,9,144,209,160,0,165,248,98,86,0,58,96,6,-226,77,0,112,155,71,23,98,142,66,149,229,139,0,96,107,66,185,70,116,-193,207,136,172,160,159,0,50,67,84,128,17,2,64,75,51,64,116,232,203,-2,102,24,108,230,224,23,0,224,24,0,224,93,0,118,239,224,99,6,224,-86,4,233,24,0,224,142,13,1,51,49,224,47,7,224,24,2,0,53,76,-229,160,21,161,1,133,204,64,6,208,192,165,72,67,243,129,85,65,15,105,-229,0,56,100,21,224,187,0,128,131,67,13,128,17,96,104,224,91,0,96,-86,198,12,0,85,227,30,13,164,215,192,31,107,74,0,50,77,1,224,24,-0,229,181,7,147,150,96,91,132,221,0,80,170,250,173,123,2,95,53,52,-68,192,79,151,90,18,0,53,138,30,81,179,128,19,233,171,0,172,96,96,-14,159,153,96,66,224,63,2,4,95,51,52,49,32,188,158,64,247,202,220,-224,10,1,0,58,96,172,230,237,4,230,79,14,131,53,248,77,1,255,95,-0,108,247,115,51,227,224,2,160,27,97,22,160,49,141,4,230,32,7,0,-53,241,60,1,224,119,13,160,229,231,21,2,225,84,10,79,110,160,0,109,-60,0,58,71,253,99,16,69,203,2,95,54,50,116,99,64,80,64,19,229,-200,5,133,187,0,58,96,35,96,49,72,46,0,53,116,167,128,10,116,116,-160,10,64,152,160,10,97,106,64,10,0,54,109,147,128,10,93,219,1,95,-54,171,82,96,135,177,47,0,53,112,203,74,120,1,95,54,66,25,0,58,-96,36,137,246,224,142,0,1,52,53,161,173,230,91,4,128,58,114,203,128,-243,64,20,236,167,3,224,43,9,64,214,224,43,9,161,146,224,25,1,224,-18,1,0,54,85,218,105,53,165,219,0,58,96,165,251,112,6,72,7,123,-112,96,38,224,188,6,129,54,0,57,64,193,100,251,96,11,131,194,67,114,-224,40,5,224,55,11,113,77,160,10,163,59,224,39,3,1,56,55,194,202,-224,196,7,207,89,130,90,191,148,128,77,84,135,227,54,0,224,68,6,224,-66,2,237,177,0,0,58,97,59,224,217,7,64,145,64,67,224,199,5,225,-173,4,224,74,12,235,216,0,224,74,5,70,1,224,74,6,0,49,104,0,-224,18,1,128,94,224,233,8,225,171,2,1,95,54,145,224,96,105,66,87,-225,171,2,0,80,66,95,64,30,171,251,100,170,0,85,96,20,222,86,224,-146,2,0,56,110,64,113,76,1,95,54,95,243,225,73,6,183,137,232,239,-5,1,48,48,224,53,4,144,157,247,119,12,1,95,39,234,84,3,224,205,-10,136,102,170,31,0,58,99,66,192,183,138,38,64,20,131,70,81,249,2,-95,49,53,119,21,125,182,224,185,6,1,95,51,64,61,64,47,210,65,1,-95,51,75,212,114,47,232,160,5,224,18,6,65,179,247,211,0,168,52,114,-74,231,211,4,231,152,2,233,66,2,224,10,2,253,253,0,128,66,64,20,-224,29,1,224,75,4,233,6,2,233,141,4,224,151,6,65,40,101,0,234,-20,5,224,50,1,224,60,2,224,39,6,67,133,224,39,12,65,31,131,220,-225,79,3,127,221,225,79,2,139,4,106,234,0,58,97,92,224,47,7,64,-186,1,95,54,65,19,0,58,96,38,211,22,71,203,0,95,84,203,0,49,-80,34,0,35,114,171,1,67,32,224,17,1,1,64,35,120,123,0,58,96,-58,225,164,17,96,249,233,140,14,224,244,3,233,56,14,224,34,2,0,58,-96,171,160,190,66,220,80,137,1,35,49,85,65,64,199,103,104,0,54,141,-251,64,244,224,199,14,110,193,224,199,5,0,49,101,45,0,58,96,59,224,-200,2,226,51,5,224,146,11,0,58,96,117,224,251,22,224,18,5,65,245,-224,18,6,66,66,226,83,26,224,10,13,226,44,31,0,58,98,24,228,51,-5,1,54,48,79,69,99,196,161,82,99,249,138,219,0,79,246,47,2,1,-46,46,67,251,224,17,3,1,58,58,128,17,2,79,32,35,83,164,71,251,-96,12,90,2,224,12,0,0,49,71,27,128,13,224,57,1,1,60,45,224,-75,7,1,45,62,224,75,1,224,48,0,96,62,189,183,224,44,3,0,61,-96,44,200,107,128,0,229,184,5,0,54,141,177,224,20,5,79,234,129,5,-132,81,100,150,65,103,100,150,64,49,161,197,228,250,11,22,33,64,35,36,-37,38,63,43,46,47,60,61,62,63,92,92,92,94,92,124,58,45,126,64,-136,0,58,97,62,142,88,229,140,2,100,97,137,103,0,82,79,39,195,4,-224,37,3,133,125,229,78,9,229,67,2,71,129,224,91,8,170,95,144,138,-239,213,2,118,146,235,147,1,66,20,105,220,192,31,224,161,10,128,24,70,-106,98,127,230,185,4,224,151,17,239,234,1,161,236,96,170,231,36,10,0,-56,73,95,65,74,224,72,4,74,160,65,141,2,67,32,79,224,62,0,105,-134,193,150,64,36,65,150,96,37,225,150,18,8,44,59,40,41,91,93,123,-125,96,97,136,96,105,231,166,10,122,133,0,75,126,27,225,1,3,0,89,-96,238,72,181,0,64,234,72,1,224,58,6,126,7,231,225,5,65,54,65,-104,231,89,2,0,35,112,186,108,50,0,52,85,46,161,238,234,158,7,224,-91,15,193,23,152,45,225,91,4,224,18,1,0,53,96,46,161,148,146,14,-132,66,129,220,204,72,249,74,0,0,50,67,217,167,247,187,134,225,131,9,-0,53,80,90,195,73,130,54,96,6,0,95,113,193,225,236,0,0,95,138,-83,0,58,107,53,193,163,132,103,64,20,228,85,8,129,117,66,164,225,58,-5,64,194,0,85,96,179,150,231,162,86,97,150,1,53,51,81,106,122,21,-108,41,128,200,224,201,8,137,145,226,200,5,224,109,0,121,25,227,243,5,-226,175,0,64,168,227,248,2,66,251,128,189,175,111,225,225,10,233,61,7,-161,54,224,95,1,0,67,123,237,206,131,224,146,4,235,25,5,226,51,11,-166,133,224,20,6,128,243,224,20,5,0,49,160,108,224,21,6,136,213,224,-21,8,102,75,224,21,8,70,229,224,21,9,224,109,11,96,230,226,224,8,-128,85,225,17,4,129,115,194,235,225,21,0,193,163,224,17,3,175,138,224,-17,1,162,204,224,17,2,104,158,224,35,5,224,34,8,129,204,224,17,3,-132,194,224,17,3,224,88,8,134,252,224,16,2,98,203,225,163,9,77,111,-107,190,224,95,8,229,21,5,108,122,219,211,128,18,226,190,5,168,89,1,-53,56,96,45,1,50,49,79,36,111,245,7,51,49,53,32,95,50,56,54,-64,27,169,191,227,147,9,0,56,78,88,80,90,182,232,224,171,12,100,62,-132,213,226,102,23,117,134,224,20,8,128,167,224,20,6,226,35,11,124,96,-224,20,8,226,55,11,110,32,224,20,7,125,168,224,20,8,65,234,224,20,-8,226,118,11,93,203,224,20,9,224,209,11,94,195,224,20,9,224,209,11,-106,44,224,20,8,224,209,11,112,139,224,20,7,0,56,224,209,11,0,56,-224,209,11,97,255,224,20,8,224,209,11,0,56,224,209,11,0,56,224,209,-11,111,0,224,20,8,224,209,11,98,97,224,20,8,224,209,11,107,195,224,-20,8,224,209,11,228,26,12,98,166,224,20,8,228,47,11,110,126,228,47,-10,227,249,8,156,217,224,17,3,82,219,224,17,6,227,215,8,146,101,224,-17,4,144,46,224,17,3,143,1,224,17,3,228,155,8,166,246,224,17,3,-228,84,8,80,91,224,17,6,228,138,9,228,192,9,224,179,8,135,88,224,-17,4,224,179,8,111,86,224,17,5,224,179,8,229,26,10,229,97,26,229,-62,9,224,178,8,229,61,15,224,16,1,224,175,8,224,174,8,224,173,8,-225,96,9,224,153,8,224,16,7,128,169,103,210,2,48,32,79,179,133,0,-48,160,29,3,95,53,57,49,236,32,2,2,83,79,72,112,168,224,79,7,-224,47,17,224,46,8,128,178,0,79,224,98,16,2,78,85,76,224,51,7,-96,161,224,49,17,2,83,84,88,224,49,7,96,245,224,49,17,0,69,224,-49,9,97,56,224,49,18,1,79,84,224,49,7,96,200,224,49,18,1,78,-81,224,49,7,97,190,224,49,17,2,65,67,75,224,49,7,98,1,224,49,-17,1,66,69,225,43,8,98,68,224,49,18,0,83,224,48,7,98,134,224,-48,17,0,72,224,247,8,98,200,224,48,17,1,76,70,225,242,8,225,191,-22,0,86,224,98,8,131,79,224,49,17,0,70,224,99,9,225,241,22,1,-67,82,224,49,8,225,241,22,1,83,73,224,49,8,225,191,22,2,68,76,-69,224,50,8,225,192,22,2,68,67,49,224,50,8,225,193,22,2,68,67,-50,224,50,8,225,195,22,2,68,67,51,224,50,8,225,197,22,2,68,67,-52,224,50,7,133,134,224,50,17,1,78,65,226,190,8,133,203,225,99,18,-1,89,78,224,50,8,227,186,24,0,66,224,50,8,225,201,22,1,67,65,-224,101,9,227,188,23,0,77,224,49,8,225,252,22,1,83,85,224,151,9,-225,252,22,2,69,83,67,224,50,8,225,252,22,0,70,227,190,8,135,172,-224,49,17,0,71,224,49,9,225,250,22,0,82,224,49,8,136,52,224,49,-17,0,85,224,49,9,225,248,23,0,80,224,49,8,225,247,22,0,68,228,-234,9,0,49,129,45,242,174,5,224,0,17,238,95,11,245,236,0,111,64,-242,13,13,1,83,39,253,46,1,123,196,190,109,224,75,0,144,36,125,212,-0,85,210,143,224,19,0,187,247,112,67,233,177,2,201,172,143,162,242,61,-14,82,59,64,0,80,170,0,58,65,14,64,161,0,80,160,98,147,0,125,-81,0,90,160,4,112,95,0,53,113,117,71,203,192,217,146,60,79,116,109,-110,76,56,0,95,149,221,3,49,49,52,49,101,107,3,95,51,54,48,225,-108,3,30,97,116,97,46,67,104,97,114,46,99,104,114,58,32,105,110,118,-97,108,105,100,32,99,111,100,101,112,111,105,110,116,97,137,77,117,0,49,-79,231,74,250,79,231,3,50,56,55,32,96,19,150,98,96,9,224,98,1,-0,58,109,153,214,55,237,243,2,249,195,13,253,225,26,0,58,110,46,124,-56,90,193,85,42,3,95,53,54,51,64,5,76,242,2,95,53,54,96,5,-76,233,75,47,107,51,0,56,66,94,142,62,0,53,108,48,1,95,53,108,-34,224,13,1,67,231,0,73,96,214,0,54,160,214,1,49,54,64,4,0,-55,125,139,181,142,0,58,96,39,224,29,0,2,51,52,48,224,29,6,188,-183,224,59,1,1,95,49,78,46,0,58,96,102,64,25,0,54,78,199,77,-69,1,95,53,77,54,1,95,53,77,39,1,95,53,77,24,1,95,53,77,-9,1,95,53,76,250,1,95,55,110,211,96,176,0,55,97,16,64,10,0,-58,96,6,83,189,158,48,224,5,2,160,78,145,57,162,224,128,6,0,58,-96,80,224,52,27,224,59,2,0,58,96,139,224,52,20,224,98,2,160,59,-0,58,96,198,224,52,27,224,112,2,0,58,97,1,116,145,0,66,98,221,-191,189,87,126,0,64,96,19,211,136,191,209,2,95,53,53,140,245,84,23,-117,138,99,155,67,4,67,134,66,225,64,20,160,38,98,47,64,123,97,124,-65,84,78,236,1,95,53,78,221,0,58,97,136,223,224,0,51,111,47,128,-31,0,58,96,31,192,148,243,198,2,228,10,0,116,23,98,239,99,220,0,-53,112,20,192,13,1,51,50,85,89,111,1,128,127,130,22,84,24,226,26,-2,96,25,218,107,96,84,99,208,0,66,66,242,226,64,7,196,23,160,4,-1,83,32,68,27,224,48,32,193,90,132,59,246,216,5,224,208,1,1,67,-39,69,28,244,181,4,224,238,3,64,97,65,31,112,233,97,96,97,78,125,-177,64,0,0,75,99,193,160,60,160,108,128,111,164,235,160,114,215,97,64,-88,192,25,160,121,224,115,22,224,113,5,224,111,3,224,49,17,113,25,224,-0,4,0,58,100,37,193,245,1,53,54,87,80,0,53,96,37,160,16,3,-57,32,95,50,86,126,3,95,50,56,53,68,59,0,50,82,194,132,219,5,-53,55,48,32,95,50,79,159,205,62,64,114,68,19,224,155,5,0,58,96,-119,129,242,2,52,32,75,66,146,0,58,64,59,128,118,0,89,193,111,98,-177,225,174,1,230,78,3,192,21,162,217,224,29,0,160,165,248,54,2,0,-58,64,177,128,88,69,43,229,208,4,16,102,111,108,100,108,49,58,32,101,-109,112,116,121,32,108,105,115,197,194,0,53,82,133,0,58,64,252,224,146,-4,0,83,226,1,4,96,91,131,58,118,97,199,3,65,200,240,135,0,98,-229,97,13,248,123,1,192,189,119,80,163,157,133,255,64,182,1,95,50,138,-82,228,31,0,97,59,69,237,162,74,130,32,5,95,57,56,32,95,49,147,-178,66,109,224,13,1,96,151,0,54,228,105,8,227,137,3,133,154,64,83,-128,231,165,181,1,54,54,102,14,68,91,0,80,187,198,214,108,64,15,64,-9,200,28,2,95,51,50,69,170,96,77,0,58,96,6,96,110,98,33,134,-113,0,50,96,89,195,192,0,73,195,49,135,157,227,125,4,128,113,230,51,-2,96,153,228,7,1,128,209,165,218,131,28,64,59,163,69,250,139,2,68,-255,193,157,97,92,229,44,3,226,255,0,192,86,194,215,184,216,129,39,131,-146,128,15,133,35,130,246,0,53,71,196,128,155,99,219,130,223,121,45,162,-149,161,25,224,46,1,224,102,0,160,44,228,59,3,224,184,11,224,134,15,-229,172,0,224,137,8,192,90,224,134,27,224,181,2,225,11,3,224,73,0,-161,11,65,217,1,51,57,227,35,2,6,92,34,47,118,97,114,47,67,42,-31,101,114,115,47,122,50,47,56,52,112,116,102,51,98,120,55,104,53,52,-48,112,107,110,99,121,48,121,50,120,112,99,48,12,48,48,48,103,110,47,-84,47,109,104,115,105,110,64,13,14,48,48,57,57,57,53,46,104,115,92,-34,44,53,52,58,141,212,0,58,98,32,104,159,104,160,68,19,0,58,96,-154,163,72,97,187,129,19,254,105,0,99,34,96,23,202,46,67,88,164,101,-226,19,0,64,41,228,54,4,133,4,128,5,227,253,8,19,105,109,112,111,-115,115,105,98,108,101,58,32,120,115,32,62,61,32,121,115,96,161,2,75,-50,32,225,4,78,3,57,48,58,54,132,98,0,64,97,221,130,159,128,226,-226,164,0,228,12,3,2,85,32,65,129,219,228,11,0,1,53,57,251,66,-0,229,5,0,200,68,90,192,229,100,0,197,18,224,80,12,99,22,224,80,-8,97,254,96,69,65,166,64,24,166,7,98,154,0,80,64,172,2,95,49,-57,91,28,101,227,107,34,132,150,196,180,196,156,224,37,1,64,106,224,14,-3,228,183,1,1,95,50,180,176,0,58,96,114,164,63,65,227,0,85,231,-176,22,166,198,96,172,68,178,229,107,8,64,82,133,153,64,140,0,51,68,-133,167,86,66,84,227,101,3,129,116,200,172,1,52,51,108,132,134,62,160,-120,202,162,1,53,54,196,128,96,53,76,112,0,53,94,140,75,158,137,85,-195,130,105,103,96,179,193,127,169,166,131,213,163,243,69,18,157,109,107,126,-1,52,48,97,118,96,17,201,156,0,58,96,7,3,10,65,32,75,65,181,-0,58,96,84,64,13,2,50,32,58,96,114,96,25,0,75,96,25,133,29,-2,95,53,53,75,201,131,82,67,209,227,82,2,164,102,129,200,230,163,9,-162,55,230,165,8,226,145,15,97,89,64,110,162,60,231,146,1,68,105,102,-42,232,252,0,226,233,46,224,91,0,226,233,9,224,95,4,226,233,32,224,-80,1,130,60,134,218,0,58,96,24,226,233,6,130,215,226,214,0,101,48,-231,113,2,224,11,3,0,58,96,71,1,10,65,77,224,0,58,96,147,143,-49,2,53,52,54,65,104,64,76,109,162,64,40,232,46,2,72,84,96,87,-232,87,0,224,200,1,72,22,98,45,1,95,51,125,181,0,64,66,183,161,-72,198,56,162,208,225,75,0,160,7,0,83,96,167,225,73,1,104,26,128,-240,101,243,0,53,97,127,0,80,193,31,225,15,0,224,8,0,143,13,0,-52,225,215,0,1,51,52,174,186,64,191,0,54,192,220,240,14,7,195,247,-238,193,0,160,127,233,206,1,162,128,238,209,4,233,201,3,200,31,169,74,-195,59,97,231,0,52,73,187,73,199,220,163,224,69,16,129,80,240,57,12,-160,27,112,62,64,92,163,150,2,66,32,95,73,94,234,50,2,93,14,131,-41,241,118,0,253,113,6,205,15,164,48,240,246,5,0,58,111,187,144,91,-225,175,0,235,241,1,167,235,163,125,225,111,4,65,144,129,111,128,73,224,-62,48,129,241,224,62,48,161,48,194,97,129,141,226,121,2,224,60,21,165,-154,2,52,54,50,231,65,2,15,118,97,108,68,105,103,58,32,66,97,100,-32,98,97,115,101,135,5,0,83,98,226,64,49,64,9,99,186,67,139,126,-206,0,49,69,112,0,35,98,254,190,224,96,17,87,56,97,29,68,192,224,-49,11,190,106,224,49,3,126,20,72,216,70,177,67,5,66,178,203,67,156,-78,198,179,134,163,95,56,128,5,128,78,250,185,0,224,61,39,131,189,224,-61,12,224,48,13,238,47,0,66,246,224,231,0,2,95,53,52,71,48,224,-192,9,224,68,23,225,36,15,165,235,225,36,3,133,12,224,99,41,132,38,-0,58,67,164,164,219,224,109,27,102,224,0,58,96,214,179,133,130,7,224,-127,39,0,58,97,37,70,250,227,240,6,254,32,8,128,131,224,20,5,77,-38,224,20,8,147,152,224,21,7,255,155,12,0,49,102,30,254,118,7,127,-9,254,118,9,253,104,10,224,17,8,128,212,224,16,19,132,25,224,16,7,-1,58,53,79,133,207,181,229,156,7,227,189,5,181,184,230,64,1,134,92,-128,11,134,97,144,137,166,109,224,35,5,236,184,3,231,206,2,240,105,6,-0,39,68,19,224,21,2,224,66,0,100,75,227,58,2,189,120,230,194,0,-235,241,0,70,216,64,66,137,34,241,207,2,96,4,66,23,0,48,197,114,-0,89,160,93,102,252,97,135,70,42,134,179,97,15,192,41,198,10,146,182,-226,89,3,192,134,225,87,1,128,119,66,136,1,52,57,110,247,0,49,64,-9,179,51,224,23,1,161,109,128,25,1,95,52,80,49,64,0,70,146,0,-50,224,48,1,96,139,0,58,94,66,200,27,113,65,226,51,1,3,64,58,-53,51,203,110,230,186,8,129,144,0,82,215,68,230,108,3,0,58,96,72,-226,254,6,195,56,225,32,0,230,188,5,234,229,1,224,49,0,0,51,98,-136,1,58,53,64,24,119,76,93,98,117,238,64,25,64,94,1,52,55,82,-8,0,48,118,70,64,133,183,80,0,52,86,220,192,86,0,56,77,206,96,-11,0,58,96,6,132,13,72,255,1,53,51,139,129,1,95,51,87,21,1,-95,52,82,18,151,190,0,51,243,251,1,178,7,64,42,139,184,104,57,236,-120,0,0,53,89,161,233,212,1,96,17,99,211,151,222,0,49,233,219,2,-107,44,89,58,195,16,0,52,99,253,68,154,96,182,64,29,227,46,2,97,-200,96,29,0,52,86,76,0,52,152,36,0,58,96,42,161,174,3,50,52,-32,35,111,41,232,228,1,147,72,91,0,192,138,224,40,0,152,59,97,14,-0,48,162,49,0,58,96,190,225,223,3,118,228,123,12,105,35,146,10,75,-154,236,51,2,2,32,95,52,140,72,96,90,65,106,64,79,1,95,53,156,-65,128,86,129,255,0,85,65,62,110,232,0,58,64,40,97,179,1,53,48,-97,179,118,69,64,104,128,125,97,11,0,90,108,164,158,30,0,58,96,196,-228,59,5,128,156,179,246,242,66,0,228,230,4,96,253,171,0,92,56,224,-113,1,66,31,0,58,96,27,98,57,7,57,57,32,95,56,32,95,52,101,-108,0,58,96,29,224,43,1,66,224,0,58,96,105,173,172,0,52,71,50,-1,95,53,78,26,67,53,1,58,53,69,98,128,224,0,50,97,252,0,58,-96,27,192,203,96,44,0,48,114,197,75,176,235,197,0,164,108,128,8,75,-93,1,58,53,73,212,225,242,0,0,54,67,180,121,9,209,165,70,90,1,-58,53,69,146,243,56,4,66,134,2,66,32,80,98,90,64,77,68,192,137,-72,212,109,233,20,4,1,95,51,68,2,1,95,51,85,38,2,51,55,49,-118,136,204,113,128,36,234,103,2,224,239,0,226,85,7,64,208,196,183,97,-138,129,43,97,143,163,183,207,0,97,195,3,95,53,49,51,233,108,2,19,-80,114,101,108,117,100,101,46,114,101,97,100,58,32,110,111,32,112,97,114,-201,114,150,76,3,95,53,49,52,174,187,224,57,18,8,97,109,98,105,103,-117,111,117,115,224,64,3,65,36,130,47,66,68,64,13,129,252,101,153,128,-16,129,249,109,14,64,158,228,158,10,229,178,1,150,246,166,35,226,243,6,-235,198,11,155,253,229,167,7,0,58,97,28,226,110,0,0,52,143,178,64,-49,224,19,2,97,224,64,125,227,8,2,0,95,111,42,79,123,194,99,136,-205,65,129,96,183,163,115,228,70,2,64,166,251,173,5,141,158,2,95,52,-57,225,153,0,2,95,52,57,69,111,96,11,0,58,96,6,64,76,96,30,-0,49,97,218,163,133,196,37,130,19,2,95,49,51,224,64,0,0,49,99,-187,101,88,0,50,98,7,96,10,1,53,48,224,86,3,229,99,0,249,226,-0,102,167,98,160,224,18,7,1,66,39,180,29,161,47,0,48,219,139,64,-79,0,48,160,147,101,97,224,135,0,134,108,197,247,192,135,128,10,96,251,-133,176,64,6,225,42,0,0,51,225,42,0,142,21,64,12,225,30,5,96,-85,161,30,132,175,64,6,64,64,0,51,229,172,3,173,150,100,243,139,61,-0,95,97,41,64,203,0,58,96,6,224,50,4,64,109,195,158,0,67,96,-58,224,49,0,133,240,64,6,5,10,65,32,73,32,58,96,44,192,10,239,-173,0,5,52,57,54,32,64,58,99,141,160,16,82,53,231,199,5,0,58,-96,36,160,235,0,52,125,65,103,154,224,5,0,101,35,206,231,96,67,109,-38,64,44,0,54,224,69,0,162,217,98,143,224,27,9,165,39,248,81,1,-230,148,4,68,64,232,136,3,120,112,132,241,1,95,52,95,10,161,115,65,-255,175,120,132,186,164,169,120,182,227,108,1,137,169,64,26,80,140,224,21,-1,69,48,103,87,228,173,1,193,17,128,0,224,24,1,129,214,200,255,65,-214,128,11,0,58,96,6,129,74,167,245,73,105,0,58,64,34,163,107,128,-14,231,238,0,226,172,1,99,148,64,87,64,25,0,80,166,58,161,52,107,-91,0,52,73,224,64,34,195,244,72,157,97,144,128,43,247,72,7,234,183,-1,224,19,2,128,115,214,53,224,32,2,224,9,10,65,59,150,129,225,213,-0,232,47,7,133,231,101,239,66,214,97,116,192,17,131,137,1,95,52,90,-46,129,242,224,55,7,224,177,7,129,163,226,90,0,162,84,64,41,192,83,-224,84,5,224,82,5,224,81,11,224,91,4,224,82,9,224,181,1,224,56,-17,226,225,5,224,57,18,225,108,9,224,9,2,101,243,160,63,193,246,160,-230,224,236,16,96,98,227,54,2,194,242,139,111,224,113,1,160,218,97,155,-98,173,185,26,64,125,2,95,52,55,70,6,0,56,102,92,162,66,96,0,-224,96,0,113,176,64,122,200,243,224,147,25,226,150,5,224,96,2,131,154,-177,117,225,1,0,161,4,224,13,22,99,150,130,112,97,96,224,237,0,99,-245,128,13,224,253,1,227,241,0,96,244,173,239,154,11,125,168,225,15,9,-224,244,4,64,97,224,96,22,130,105,224,95,2,162,122,128,94,228,23,3,-194,3,226,190,6,225,67,29,225,216,24,160,105,225,206,21,226,190,21,192,-9,195,208,226,240,25,224,49,11,224,176,2,228,6,9,225,89,8,229,234,-0,128,181,224,43,3,224,45,6,225,52,0,224,137,18,96,135,226,27,5,-193,59,224,138,21,250,211,78,5,49,52,49,58,49,48,250,213,0,64,0,-142,22,128,133,142,22,128,11,0,58,96,6,113,239,144,91,132,182,64,35,-137,88,238,32,4,181,212,0,58,64,64,230,49,0,64,200,0,58,96,46,-192,70,66,82,70,169,0,52,192,55,96,71,76,35,64,21,72,67,128,21,-198,178,2,95,52,56,103,233,0,56,135,233,96,85,108,87,96,23,128,17,-74,61,96,53,102,92,1,56,48,135,57,229,112,0,200,108,163,0,248,114,-2,64,158,206,163,96,106,71,172,98,162,3,95,52,56,51,192,11,0,58,-96,6,198,245,162,223,128,202,119,207,130,243,0,66,115,48,100,71,64,80,-99,111,0,50,96,22,0,50,79,35,248,201,1,96,239,85,134,64,42,130,-116,224,42,14,247,204,2,130,57,128,122,135,254,236,213,5,164,182,128,152,-159,79,96,80,2,52,56,50,224,80,2,162,150,128,195,224,43,5,224,196,-0,118,43,96,138,106,250,224,205,23,224,206,40,207,11,227,44,4,242,187,-0,210,199,136,237,224,232,2,229,154,1,224,184,2,64,5,162,83,224,236,-9,128,72,224,240,3,224,56,13,224,249,104,224,152,5,119,175,132,177,233,-233,1,235,28,1,96,243,101,60,166,12,224,174,1,79,198,160,98,224,138,-39,101,199,167,2,224,7,2,224,132,108,224,95,10,224,94,67,96,80,128,-181,224,222,110,64,16,1,54,48,229,203,2,31,115,116,105,109,101,115,58,-32,112,111,115,105,116,105,118,101,32,109,117,108,116,105,112,108,105,101,114,-32,101,120,112,101,3,99,116,101,100,101,161,0,58,68,133,229,129,4,226,-166,23,128,137,224,195,1,1,95,50,82,200,224,186,16,192,46,224,177,4,-224,45,30,147,118,99,115,108,55,108,218,172,197,0,83,157,34,174,210,140,-183,194,100,96,52,243,207,1,177,241,0,58,69,183,165,207,82,144,96,44,-242,31,0,128,38,64,80,224,11,0,224,59,2,64,81,95,21,240,19,0,-64,200,1,58,52,70,171,174,28,64,205,1,95,52,69,159,0,58,77,191,-128,22,222,228,175,114,0,58,96,31,69,230,1,32,58,96,48,175,111,0,-52,92,58,76,5,75,185,173,239,111,114,173,69,79,114,108,204,143,114,192,-10,206,115,64,87,129,196,1,95,51,164,137,128,5,134,74,213,48,102,169,-70,109,239,73,1,96,120,233,111,7,224,28,7,238,129,11,140,98,224,65,-9,175,168,96,24,112,100,129,179,158,205,143,127,128,49,0,58,96,6,224,-178,0,138,143,153,81,0,66,227,15,2,192,75,66,9,199,70,133,96,128,-46,96,33,1,49,53,224,34,7,0,58,96,125,128,93,1,95,50,104,59,-96,121,136,115,64,6,110,71,0,58,96,67,114,184,128,1,120,162,1,64,-58,96,199,210,193,224,4,3,158,44,128,205,0,58,97,4,1,10,65,194,-14,0,58,97,37,96,76,224,55,6,224,85,0,206,255,224,85,6,224,34,-3,232,6,1,235,43,2,237,99,2,64,240,254,222,0,97,114,131,140,131,-188,160,14,0,85,164,101,160,38,230,238,3,168,244,0,67,129,146,98,115,-128,64,112,216,130,76,64,17,97,59,1,54,48,65,34,207,117,0,58,85,-35,64,10,196,187,128,145,193,227,0,90,179,170,140,33,199,83,96,31,96,-42,64,22,96,10,160,141,251,34,5,87,246,130,71,133,49,225,26,1,96,-214,64,85,2,95,52,53,237,161,0,224,38,10,224,123,2,64,195,193,227,-229,24,6,15,105,110,105,116,58,32,101,109,112,116,121,32,108,105,115,116,-101,4,68,77,225,84,0,224,122,4,193,48,224,123,1,0,58,96,9,97,-198,231,233,0,2,115,101,113,192,221,128,19,224,16,2,228,75,11,64,68,-234,176,0,86,22,0,56,161,6,246,38,5,224,181,1,3,35,108,105,110,-181,109,64,24,101,45,0,56,224,213,2,8,123,45,35,32,76,73,78,69,-32,96,35,65,49,106,136,66,31,93,22,81,113,65,187,1,95,52,125,107,-224,88,2,3,32,35,45,125,128,87,2,58,52,53,196,204,225,12,2,67,-20,180,220,234,207,1,64,86,64,72,195,109,2,95,52,53,68,149,149,164,-128,15,67,145,96,15,0,58,96,41,96,86,242,126,0,225,104,1,207,155,-98,71,242,66,0,0,58,64,63,225,29,0,0,49,64,151,2,95,52,53,-68,53,97,228,1,51,32,224,192,3,9,94,41,94,42,94,43,94,44,94,-45,166,207,64,118,224,111,7,158,202,230,43,1,64,85,110,169,248,189,3,-96,60,130,250,102,159,64,26,1,52,53,153,186,85,253,1,95,50,66,84,-0,58,96,137,67,30,1,54,54,130,132,130,230,233,237,0,2,67,32,60,-93,201,111,56,224,26,12,123,179,224,26,14,97,158,224,26,13,98,219,227,-122,0,224,26,4,160,221,0,85,65,146,64,226,68,44,1,61,61,192,25,-160,254,99,224,195,32,224,44,12,161,17,224,44,8,224,117,14,97,52,224,-72,12,156,77,224,117,30,134,236,224,117,10,225,7,14,98,58,224,145,13,-176,172,224,100,10,135,70,224,145,30,109,157,225,7,33,98,180,224,72,12,-103,166,224,117,31,66,21,225,7,13,226,97,14,194,16,225,35,10,105,56,-224,173,13,187,194,224,128,10,98,233,224,173,31,111,201,225,35,32,79,124,-224,72,13,96,25,224,117,31,96,242,226,43,16,96,118,225,34,5,195,78,-224,145,10,226,189,16,96,25,224,145,32,226,189,16,224,45,12,226,134,15,-225,200,15,96,164,225,253,13,97,199,224,26,13,98,144,224,245,13,165,119,-224,154,10,226,244,15,224,44,12,226,216,15,224,117,14,100,240,224,72,12,-226,244,15,224,44,12,226,160,15,225,7,14,98,115,224,144,13,99,31,224,-99,12,226,215,15,224,44,11,226,186,15,224,116,13,96,29,224,70,11,226,-212,15,224,43,11,226,155,15,225,3,15,194,10,224,25,9,198,159,224,168,-9,99,52,224,124,11,226,235,15,224,43,11,226,233,16,224,114,12,226,150,-16,226,149,35,226,148,16,228,28,14,225,0,16,226,174,16,226,173,36,228,-24,35,229,77,16,111,10,0,50,105,77,142,64,64,6,174,113,64,46,1,-95,54,74,46,141,80,0,53,138,242,239,33,2,0,85,233,108,0,128,5,-64,0,64,119,192,239,114,23,128,136,0,64,233,150,1,128,17,96,32,251,-246,5,173,149,244,206,1,0,58,96,131,105,168,64,182,234,49,0,3,95,-52,52,55,96,224,138,134,96,61,0,35,79,222,192,53,205,94,233,162,1,-235,165,5,86,131,1,114,49,235,167,8,65,60,129,197,64,140,160,14,141,-147,224,10,3,64,121,192,105,202,211,105,209,2,49,32,95,135,220,1,52,-52,216,90,125,205,136,83,236,255,0,1,52,54,193,99,78,56,72,160,0,-58,96,48,207,252,206,45,86,21,192,103,252,195,0,224,29,0,224,31,2,-64,32,0,51,192,83,93,219,0,52,98,29,110,152,2,58,52,52,207,8,-1,54,51,74,151,0,48,97,48,124,240,64,38,206,48,0,85,96,16,129,-226,6,95,49,51,54,32,75,32,130,68,0,66,121,232,175,182,0,51,136,-21,161,13,98,29,0,49,236,40,3,4,32,32,97,116,32,76,76,0,32,-215,159,192,66,128,63,1,49,51,76,127,134,38,129,31,224,66,9,2,99,-111,108,192,61,130,76,224,57,8,66,75,0,55,65,218,224,61,9,13,94,-42,32,32,32,32,117,115,101,100,32,98,121,32,160,71,128,60,1,52,51,-101,177,192,0,2,95,49,52,76,85,96,20,2,95,49,52,81,38,96,11,-0,58,96,6,141,219,98,114,226,104,1,162,168,165,197,0,52,119,139,64,-47,130,110,64,47,65,87,1,75,50,204,17,2,58,52,51,130,31,111,249,-2,58,52,51,129,248,0,80,77,125,1,75,32,249,30,78,3,55,57,58,-49,205,114,0,51,130,85,95,145,163,245,64,8,192,155,130,83,3,75,32,-58,52,83,20,120,121,0,50,81,13,83,149,1,58,52,67,79,152,141,127,-17,64,61,2,95,52,51,96,249,1,51,50,76,186,64,38,89,227,68,61,-192,11,66,124,96,11,0,58,96,6,194,75,131,130,225,168,4,10,69,120,-105,116,83,117,99,99,101,115,115,128,173,161,235,0,52,115,237,6,32,95,-49,56,50,32,95,83,18,231,78,1,225,237,9,64,68,5,70,97,105,108,-117,114,174,189,224,36,1,0,79,132,17,148,207,3,95,49,51,56,162,61,-168,217,226,0,2,165,28,98,0,145,192,64,6,115,69,102,214,193,245,67,-28,178,63,160,16,128,73,0,58,96,178,97,42,0,57,65,104,0,51,78,-157,1,51,50,228,111,3,6,83,121,115,116,101,109,46,64,174,64,167,224,-192,5,2,67,111,100,128,189,96,171,0,58,97,105,180,54,0,83,66,120,-209,108,68,107,0,58,65,161,64,29,224,66,1,6,49,46,50,48,46,57,-34,96,27,130,95,1,95,52,97,159,110,76,76,153,177,82,3,39,32,95,-48,228,139,0,0,52,64,87,78,238,76,23,129,97,0,58,64,54,128,121,-2,95,51,57,228,203,1,64,33,0,58,96,47,110,185,101,32,134,238,132,-245,78,199,179,90,2,95,51,57,64,78,5,50,48,57,53,49,48,64,61,-4,35,53,53,50,57,103,240,99,69,1,52,48,112,37,0,48,101,170,70,-157,1,95,52,75,233,1,95,52,108,28,224,211,1,17,104,80,117,116,67,-104,97,114,58,32,115,117,114,114,111,103,97,116,161,223,1,95,51,74,227,-0,58,96,147,98,216,105,226,0,73,96,18,245,144,1,64,105,132,168,250,-239,1,224,9,5,99,203,0,52,76,28,2,95,50,48,64,187,65,123,1,-95,51,194,198,130,193,64,154,224,81,0,64,1,149,193,164,252,192,14,224,-11,2,192,8,209,132,64,95,97,143,3,49,55,32,58,96,145,96,13,67,-99,75,216,0,58,64,23,227,99,3,0,48,114,9,139,197,131,99,139,255,-131,99,192,11,67,99,96,11,0,58,96,6,227,99,1,115,38,128,1,102,-167,104,125,246,189,1,224,5,0,97,182,161,148,64,11,64,174,144,199,73,-254,128,19,96,31,131,54,0,52,139,142,227,121,5,0,58,229,162,1,230,-25,2,224,36,15,193,27,229,206,0,67,90,130,57,0,51,85,11,65,125,-224,72,28,128,162,192,185,209,108,224,171,3,98,222,224,94,10,230,106,12,-0,40,196,122,224,122,7,0,79,131,221,185,13,224,118,1,228,53,0,205,-106,68,53,96,11,0,58,96,6,231,60,1,67,68,64,78,0,85,254,52,-1,236,54,1,224,18,6,96,180,224,19,7,64,212,242,188,0,160,19,97,-159,236,107,6,66,231,0,85,244,129,4,5,116,101,114,114,117,112,217,129,-224,28,4,14,114,101,115,111,117,114,99,101,32,118,97,110,105,115,104,192,-34,224,35,4,89,218,1,111,117,201,17,224,110,7,64,235,224,45,3,20,-117,110,115,117,112,112,111,114,116,101,100,32,111,112,101,114,97,116,105,111,-110,224,120,9,12,104,97,114,100,119,97,114,101,32,102,97,117,108,192,91,-224,243,8,67,119,224,243,7,147,151,224,132,5,150,132,224,243,3,14,97,-112,112,114,111,112,114,105,97,116,101,32,116,121,112,164,46,224,35,5,12,-118,97,108,105,100,32,97,114,103,117,109,101,110,192,131,224,34,3,3,102,-97,105,108,225,18,0,224,115,7,151,255,224,44,1,4,112,114,111,116,111,-72,171,4,101,114,114,111,114,224,111,9,0,115,101,243,224,29,3,224,240,-9,225,247,10,225,246,10,225,245,10,225,244,7,21,117,110,115,97,116,105,-115,102,105,101,100,32,99,111,110,115,116,114,97,105,110,116,167,89,224,40,-4,0,115,91,161,224,147,2,224,210,4,13,101,114,109,105,115,115,105,111,-110,32,100,101,110,105,225,10,15,226,2,7,6,105,108,108,101,103,97,108,-225,254,19,9,101,110,100,32,111,102,32,102,105,108,161,153,224,247,8,225,-230,10,225,229,7,226,188,0,5,101,120,104,97,117,115,226,224,21,3,98,-117,115,121,225,201,14,224,86,6,10,100,111,101,115,32,110,111,116,32,101,-120,236,8,0,224,31,3,6,97,108,114,101,97,100,121,128,30,161,82,128,-0,196,11,174,69,100,11,64,11,0,58,96,6,196,11,2,95,51,49,96,-37,64,206,74,73,0,55,64,136,1,95,52,71,31,236,31,3,247,116,8,-5,72,97,110,100,108,101,150,118,1,95,49,134,2,204,227,192,109,140,80,-64,6,228,121,4,228,233,8,1,48,120,128,183,103,131,0,55,134,108,105,-208,137,91,1,95,52,169,21,192,209,174,137,96,99,141,253,64,6,7,10,-65,32,116,111,73,110,116,70,204,201,221,110,60,71,66,1,95,50,64,198,-1,95,50,72,113,1,95,50,106,72,139,39,1,50,50,101,152,128,11,0,-51,96,94,160,11,102,201,160,35,106,115,64,12,128,85,0,54,102,143,0,-57,103,16,64,169,120,99,76,201,128,42,1,64,58,96,115,64,43,1,54,-53,70,184,110,6,69,235,1,95,49,72,139,1,95,49,91,132,1,95,49,-91,166,1,95,49,78,192,1,95,55,64,109,96,74,1,95,55,64,156,96,-10,0,58,96,6,169,235,3,95,52,48,53,254,105,18,255,36,1,174,159,-158,68,148,4,64,166,103,210,87,201,184,90,4,67,32,95,54,52,234,196,-4,102,20,64,146,3,57,56,32,95,96,220,0,49,73,104,96,9,72,217,-0,35,125,34,170,240,224,46,11,96,36,78,222,104,95,64,113,137,220,175,-108,200,128,253,152,0,137,247,199,125,187,171,96,202,94,41,253,6,0,224,-241,38,128,12,186,158,75,36,131,95,67,98,224,96,1,77,58,224,96,46,-128,254,111,129,128,192,169,185,192,13,176,53,138,137,224,222,4,96,20,233,-237,4,106,164,64,27,128,33,224,152,5,67,136,159,210,224,162,45,240,86,-6,30,78,117,109,101,114,105,99,46,115,104,111,119,73,110,116,65,116,66,-97,115,101,58,32,110,101,103,97,116,105,118,101,230,122,7,147,57,224,2,-2,137,148,192,206,64,5,234,95,2,160,168,161,219,77,33,139,202,224,46,-31,0,50,153,198,128,48,224,227,22,224,237,3,224,225,27,232,4,3,2,-98,97,115,197,227,128,139,0,89,161,185,226,163,3,194,153,92,157,0,57,-201,91,161,180,225,235,1,224,49,2,194,94,160,83,192,11,226,106,8,224,-70,4,145,167,128,49,74,251,160,124,193,40,128,60,97,70,224,249,1,97,-88,156,39,224,10,2,224,55,2,253,149,0,65,53,73,14,139,65,128,65,-99,165,224,92,2,97,116,224,92,1,99,180,170,38,4,51,57,56,32,58,-102,5,238,58,27,3,73,79,46,69,199,181,224,28,1,6,73,79,69,120,-99,101,112,231,115,0,174,65,76,71,7,10,65,32,94,112,117,116,98,64,-99,210,0,3,57,57,32,79,64,6,2,32,64,79,68,236,0,48,170,224,-0,58,109,150,80,10,0,50,64,2,64,15,204,249,0,83,225,128,0,76,-81,129,73,243,14,2,242,245,5,0,51,160,252,241,242,0,238,114,4,129,-147,3,95,51,57,52,65,22,96,17,75,158,70,170,0,57,118,44,226,106,-6,3,66,97,100,32,135,2,1,32,109,207,33,96,37,0,57,180,189,0,-58,64,207,133,187,100,135,255,208,2,126,80,192,151,175,178,0,51,110,135,-110,134,98,114,243,153,2,128,76,173,158,3,57,55,32,58,96,32,79,101,-2,112,50,112,64,13,0,54,166,106,0,54,130,179,96,98,224,5,0,70,-59,104,92,64,1,210,4,177,101,224,6,12,224,42,2,117,99,145,153,224,-42,29,160,28,224,49,10,224,42,15,224,49,10,224,42,22,224,49,3,182,-30,129,162,0,58,96,6,98,24,0,82,100,83,2,51,56,57,144,157,0,-58,65,214,129,139,0,95,84,171,69,31,0,58,98,15,5,10,65,32,97,-110,100,65,68,130,133,196,17,227,70,2,0,80,164,206,176,232,130,41,173,-219,131,195,0,66,129,207,0,64,85,254,129,172,207,236,0,85,224,135,8,-130,186,68,14,117,31,0,58,96,27,104,84,162,16,0,95,85,43,226,185,-4,224,180,2,132,17,226,209,0,0,56,100,155,2,58,51,56,243,226,0,-226,164,5,3,104,101,97,100,246,70,8,0,75,64,251,64,57,97,15,106,-125,0,89,128,205,165,12,164,193,96,226,96,252,165,164,230,180,2,164,239,-132,233,192,5,151,138,2,95,51,55,131,103,230,55,0,228,151,5,98,252,-117,230,96,40,1,95,51,70,214,229,79,3,128,6,224,38,0,224,87,6,-160,47,192,159,148,249,3,67,39,32,79,96,33,0,53,164,51,128,30,96,-185,3,95,50,48,49,175,104,64,33,0,54,68,93,0,35,86,207,96,40,-64,4,163,250,133,76,132,22,128,85,64,54,1,57,32,228,208,2,1,45,-79,131,231,128,71,207,127,228,106,0,178,180,224,52,7,9,45,115,116,114,-105,112,45,101,111,108,164,37,224,188,131,229,43,4,224,192,20,237,25,0,-225,169,255,225,169,104,193,171,181,242,96,54,3,95,51,55,49,87,176,224,-198,4,4,104,97,115,104,101,238,11,1,227,137,255,227,137,255,225,169,255,-227,137,51,64,18,131,120,224,9,12,234,103,3,65,166,236,39,5,64,14,-227,203,0,215,6,72,100,86,19,0,49,89,73,96,176,128,0,224,39,0,-119,9,225,246,4,160,62,236,71,2,142,223,236,102,5,160,17,192,71,138,-15,192,17,121,49,64,14,238,178,2,192,90,108,148,97,20,0,54,160,150,-224,89,0,168,255,225,67,0,250,133,0,139,43,128,22,96,0,75,178,225,-13,2,64,173,160,146,108,133,224,94,8,171,4,224,65,2,225,58,1,64,-116,179,44,96,181,129,48,97,234,229,12,16,0,111,195,45,138,21,151,227,-96,93,224,179,4,128,10,174,149,96,0,229,53,0,225,173,2,160,124,96,-17,225,192,36,225,179,6,160,7,123,194,193,135,224,68,11,0,49,220,14,-227,45,2,224,182,4,192,12,96,184,4,95,51,55,55,32,116,170,224,196,-6,238,208,0,250,34,6,123,194,2,51,55,56,160,110,225,67,15,3,97,-110,115,105,230,76,0,224,174,0,224,81,2,224,75,34,4,116,114,97,100,-105,78,17,0,97,195,217,160,220,162,11,224,64,24,1,115,116,213,247,96,-0,109,61,96,56,64,45,0,56,100,244,189,51,140,33,224,34,20,140,111,-128,131,226,98,49,180,189,162,98,228,225,2,224,80,47,4,105,110,99,108,-117,238,84,1,226,185,8,100,174,229,45,3,160,48,0,61,225,25,2,131,-250,196,15,226,169,0,64,135,224,130,27,0,80,232,61,6,225,234,6,163,-7,102,112,133,57,224,83,1,224,70,3,0,67,96,70,224,30,17,128,31,-128,228,225,47,49,0,65,225,128,11,225,0,54,3,45,104,101,108,231,105,-0,224,76,56,2,118,101,114,88,184,224,79,63,224,78,7,64,62,143,239,-228,163,4,128,87,177,17,227,99,0,228,164,12,198,0,248,248,2,65,220,-225,181,1,135,108,231,74,3,195,80,106,59,99,80,224,18,0,78,199,160,-18,96,123,98,182,225,15,18,224,33,44,225,160,5,227,228,5,87,229,227,-228,7,224,66,10,4,110,111,108,105,110,227,103,0,128,0,3,95,51,56,-49,64,249,240,251,0,224,243,2,224,254,3,64,41,225,158,13,2,68,85,-73,96,82,3,58,51,56,54,178,219,7,56,48,32,75,32,85,32,90,167,-129,97,143,64,162,0,56,165,223,64,43,211,121,160,43,178,50,128,46,224,-41,1,0,58,97,93,224,40,5,129,227,224,35,0,0,58,97,147,224,34,-3,89,118,224,119,2,65,39,224,121,0,64,46,240,252,1,128,37,224,119,-0,72,114,0,58,96,43,112,181,0,58,64,80,128,10,0,73,80,70,70,-118,96,56,176,65,66,67,0,85,65,102,133,122,192,18,1,66,39,96,21,-225,136,1,232,64,0,232,108,2,170,187,97,177,242,247,1,88,158,153,0,-162,149,120,27,184,181,145,17,82,40,85,99,0,64,65,93,103,3,98,229,-216,186,155,82,64,0,128,178,144,249,0,85,84,75,84,248,0,58,105,218,-192,17,65,217,0,58,98,233,209,165,122,95,107,64,128,17,0,51,96,68,-129,95,243,78,5,0,58,107,115,84,168,64,133,0,48,98,20,0,58,66,-29,193,59,89,244,225,59,1,74,105,179,182,2,95,51,54,102,241,114,203,-99,109,0,58,96,6,10,10,65,32,115,101,113,117,97,108,32,58,96,33,-161,163,2,95,51,54,191,223,0,52,96,72,128,191,187,88,97,9,1,95,-50,66,77,0,58,96,39,98,7,1,54,51,165,169,192,170,64,38,242,239,-2,129,137,65,237,129,145,0,58,64,49,96,58,242,151,43,0,54,97,113,-2,58,51,54,129,15,242,151,8,3,116,97,105,108,242,151,8,0,65,96,-150,211,57,2,95,52,55,86,112,132,121,0,53,128,178,129,62,2,73,32,-58,96,16,118,151,0,56,96,92,1,53,54,65,61,0,53,74,65,2,95,-51,50,68,178,160,56,92,150,224,11,0,65,29,96,11,0,58,96,6,96,-220,253,0,0,160,61,231,88,5,126,137,1,58,32,96,158,156,111,128,38,-0,58,96,6,247,24,20,6,67,111,110,116,114,111,108,247,22,11,96,18,-2,67,97,108,137,0,100,75,0,58,96,194,123,152,163,24,214,208,64,7,-230,41,1,134,54,0,95,99,39,130,9,0,53,172,195,203,49,97,249,2,-95,51,53,163,65,140,140,0,58,64,160,130,122,119,65,96,30,96,109,0,-85,225,154,7,9,109,100,53,67,111,109,98,105,110,101,161,160,133,28,64,-97,66,29,0,90,100,194,2,95,50,54,167,252,0,48,92,222,119,47,0,-89,117,42,64,205,102,106,66,84,236,41,1,194,88,235,214,2,160,190,66,-41,198,155,2,95,51,53,127,103,64,225,188,82,1,64,95,87,69,2,95,-51,52,186,123,160,205,130,155,8,94,109,100,53,65,114,114,97,121,66,17,-196,194,226,176,1,0,57,76,86,64,155,1,95,51,140,92,100,68,247,242,-1,247,134,4,3,95,51,52,57,224,46,5,169,112,192,46,1,95,49,89,-12,226,232,6,132,176,96,146,130,184,98,156,130,167,128,211,172,30,228,184,-10,205,162,224,106,0,225,53,3,192,25,232,26,5,253,178,3,0,95,92,-15,189,118,251,242,1,237,159,6,238,28,5,248,116,2,64,52,101,163,224,-45,2,96,96,172,130,229,60,7,250,108,2,248,154,4,224,43,10,165,140,-224,38,1,160,16,0,58,65,97,226,132,0,0,90,150,255,64,21,195,139,-99,184,71,94,225,253,0,129,247,0,35,96,238,87,39,0,58,97,153,1,-10,65,126,214,0,58,96,28,128,57,66,242,68,159,1,95,49,94,224,1,-95,51,68,151,0,95,127,229,96,80,191,229,192,11,95,229,224,11,0,68,-0,128,11,65,70,64,98,131,42,2,114,101,109,64,98,167,107,191,242,96,-148,97,126,255,240,0,96,53,64,54,130,147,97,40,128,131,190,139,0,58,-96,39,183,108,226,12,1,69,207,97,180,233,112,1,1,32,95,70,102,165,-79,98,104,64,180,1,51,57,227,158,2,31,92,34,47,118,97,114,47,102,-111,108,100,101,114,115,47,122,50,47,56,52,112,116,102,51,98,120,55,104,-53,52,48,112,23,107,110,99,121,48,121,50,120,112,99,48,48,48,48,103,-110,47,84,47,109,104,115,105,110,64,13,15,48,48,57,57,57,53,46,104,-115,92,34,44,51,57,58,49,168,246,103,64,1,51,52,165,197,67,90,1,-95,54,226,79,2,96,30,1,50,49,101,29,100,108,65,53,1,49,54,160,-19,193,236,113,121,139,179,255,218,1,160,199,0,83,65,20,73,9,160,83,-168,17,96,69,128,13,0,79,64,252,0,79,235,185,2,68,98,64,29,224,-21,3,2,95,50,49,98,8,1,50,50,64,70,0,58,97,119,3,10,65,-32,65,65,165,220,16,134,53,0,51,134,8,81,210,0,58,65,62,195,152,-64,16,230,53,2,1,50,49,103,115,68,114,166,53,192,56,66,78,192,11,-66,31,96,11,0,58,96,6,164,99,1,51,53,64,234,189,85,1,51,51,-130,223,0,51,130,143,121,246,132,222,94,182,132,222,0,80,128,47,64,203,-160,47,224,15,8,64,65,229,166,0,104,102,64,23,100,73,177,181,171,143,-105,93,69,37,0,51,157,191,160,68,65,22,224,21,2,160,154,137,82,1,-51,51,133,104,2,95,50,48,101,79,95,87,64,96,167,228,1,53,53,65,-30,200,189,0,58,96,45,193,52,232,180,4,64,90,168,180,252,215,7,224,-14,5,192,170,241,213,0,200,222,96,188,0,58,96,6,200,253,2,50,57,-56,64,93,192,50,69,182,99,99,65,236,160,26,147,211,224,26,3,0,58,-96,91,202,124,130,125,64,77,130,115,220,246,201,161,1,75,50,234,127,2,-234,151,15,197,134,234,155,27,224,8,1,64,214,96,142,129,253,229,213,3,-192,9,128,44,252,229,4,0,58,96,54,105,155,3,50,51,32,58,66,127,-64,13,0,80,64,10,201,121,1,51,54,171,184,2,95,51,49,232,150,3,-11,110,111,32,109,97,116,99,104,32,97,116,32,131,196,96,32,128,149,68,-219,130,211,136,176,96,11,0,58,96,6,232,176,29,223,178,5,46,73,110,-116,101,114,177,167,224,39,1,2,80,97,116,64,22,0,77,64,128,2,70,-97,105,232,196,4,67,81,129,2,0,83,100,4,146,179,65,93,129,67,98,-231,160,10,72,56,0,52,88,196,0,49,129,125,131,244,67,162,96,5,77,-105,0,54,227,251,0,104,199,130,128,130,142,161,28,83,64,238,207,3,67,-236,66,229,116,80,1,56,32,128,15,99,20,106,33,132,177,224,24,1,161,-56,224,220,1,4,39,92,92,39,39,165,23,161,75,96,158,224,82,3,97,-246,136,237,224,17,3,132,240,231,170,3,224,151,1,0,64,160,35,168,82,-224,139,0,142,148,106,130,224,133,3,3,92,92,92,34,238,147,2,0,58,-96,131,64,244,65,24,0,58,97,234,105,188,241,133,4,89,199,0,49,74,-150,249,214,2,67,235,0,67,183,16,160,136,94,231,129,18,64,39,97,111,-162,168,190,246,244,166,2,73,181,96,176,161,144,64,59,129,144,160,200,96,-62,193,205,1,51,49,137,19,0,49,112,83,255,193,3,0,90,64,28,105,-192,64,61,224,231,3,0,38,239,222,1,131,181,104,173,247,236,0,201,10,-136,195,118,58,225,89,7,224,60,1,149,8,160,223,128,77,160,223,96,224,-64,56,128,79,96,177,65,32,225,163,6,96,191,100,49,128,180,64,194,226,-92,3,77,221,208,78,244,93,1,224,210,16,80,45,0,80,103,71,224,30,-1,2,78,85,76,96,30,96,25,0,49,224,25,3,2,83,79,72,224,25,-1,0,50,224,25,4,1,84,88,224,25,1,0,51,224,25,3,0,69,224,-25,3,0,52,224,25,4,1,79,84,224,25,1,0,53,224,25,4,1,78,-81,224,25,1,0,54,224,25,3,2,65,67,75,224,25,1,0,55,112,246,-1,57,55,161,240,96,19,145,10,0,57,69,77,224,19,0,0,57,96,19,-0,49,65,221,224,20,1,1,49,48,160,21,0,48,224,21,4,0,49,160,-21,224,64,4,1,49,50,128,21,0,48,194,91,128,21,0,51,160,43,0,-52,224,108,4,128,43,226,134,0,128,42,224,248,4,0,83,153,176,128,25,-224,248,4,0,83,145,147,128,25,224,248,4,2,68,76,69,224,26,2,0,-55,224,26,4,0,67,137,37,128,26,0,56,224,26,5,0,50,224,26,2,-250,53,4,2,68,67,51,225,203,2,226,0,4,2,68,67,52,224,26,2,-226,1,4,1,78,65,225,127,2,69,174,224,187,2,1,89,78,224,26,2,-226,3,6,0,66,224,26,2,225,11,4,1,67,65,224,53,3,226,5,5,-0,77,224,25,2,225,12,4,1,83,85,224,79,3,225,12,4,1,69,83,-149,173,128,26,225,12,4,1,70,83,224,25,2,225,11,4,0,71,224,25,-2,72,74,224,25,1,0,82,224,25,3,225,9,4,0,85,224,25,2,107,-76,225,63,2,0,69,131,64,198,23,224,0,21,110,253,140,184,0,58,101,-112,69,54,229,30,0,77,142,0,49,79,119,0,35,109,10,173,160,96,17,-1,64,35,175,231,66,41,103,164,0,48,76,112,66,81,240,54,6,196,244,-108,124,103,112,96,17,0,58,96,6,133,165,68,70,237,182,0,209,45,0,-51,66,248,0,95,84,172,109,58,96,19,250,141,2,96,30,64,69,136,11,-64,67,230,88,2,1,56,50,206,4,192,64,99,115,229,151,8,96,69,108,-145,205,90,192,40,235,89,3,224,10,1,96,50,0,49,133,32,205,213,96,-250,129,33,102,75,0,50,84,242,224,74,4,0,58,96,102,5,10,65,32,-99,104,114,65,36,136,4,148,234,165,129,139,48,64,41,135,190,65,21,134,-173,2,95,51,48,64,32,225,149,11,106,163,225,149,5,77,134,96,113,70,-217,141,109,0,51,77,241,237,67,2,2,60,32,64,98,210,224,19,8,129,-227,172,166,160,19,69,202,234,1,1,234,11,2,224,40,7,66,13,224,40,-12,224,102,8,65,253,224,61,7,64,251,224,102,13,107,217,3,67,32,61,-61,64,38,112,239,134,88,224,97,3,0,58,97,34,106,233,72,239,249,116,-3,226,86,5,65,233,1,53,57,240,31,0,0,54,111,237,145,56,65,137,-77,27,1,50,57,139,33,1,95,50,80,238,0,51,112,210,1,95,51,81,-197,192,41,2,64,95,50,109,230,97,247,64,123,131,54,4,111,114,100,32,-58,96,18,9,10,65,32,98,115,105,110,100,101,120,64,16,163,17,2,50,-52,56,96,156,231,49,0,78,222,82,140,107,222,103,168,4,67,32,95,57,-56,77,215,128,230,80,189,96,11,239,41,1,105,143,242,141,4,19,87,111,-114,100,56,46,115,117,99,99,58,32,111,118,101,114,102,108,111,119,99,255,-81,203,224,108,9,0,57,224,108,3,98,193,224,109,42,8,112,114,101,100,-58,32,117,110,100,224,110,3,73,164,0,50,66,217,143,3,64,14,87,20,-1,95,50,107,94,67,23,0,56,74,203,129,79,224,245,3,154,210,128,5,-193,159,0,49,86,62,200,149,2,95,50,56,67,156,192,57,224,194,1,224,-31,13,224,89,1,237,28,2,128,123,96,84,224,20,2,96,54,96,20,0,-58,96,62,225,167,6,79,145,192,80,139,38,129,160,0,49,241,203,3,225,-32,9,225,141,19,160,82,96,195,192,82,97,134,224,83,23,225,115,13,112,-139,65,102,99,230,68,28,224,174,3,225,89,7,105,158,161,51,1,51,48,-97,156,224,137,2,224,25,1,69,119,224,71,3,64,19,0,48,192,72,131,-203,67,186,224,83,1,128,77,160,58,65,75,165,147,106,76,155,102,224,133,-1,87,213,68,20,241,14,1,64,5,109,7,225,244,0,243,231,6,64,66,-171,144,203,121,219,188,96,131,129,53,0,56,106,216,128,28,192,76,203,49,-65,122,134,69,241,71,5,0,32,160,53,160,252,140,162,224,165,0,224,42,-1,243,161,0,64,225,224,218,16,128,136,224,218,67,129,44,224,218,69,96,-165,224,218,11,238,155,0,178,160,71,176,64,44,128,179,224,125,5,160,192,-96,202,160,180,162,222,64,91,149,35,64,150,164,72,211,5,192,9,0,58,-98,81,99,111,1,56,55,108,2,2,95,56,56,147,82,0,58,98,117,154,-36,87,148,0,58,67,175,224,42,0,100,99,96,39,128,9,0,50,64,34,-64,35,184,110,67,190,2,95,50,53,86,147,101,200,2,95,50,53,85,100,-96,11,239,11,1,65,86,166,16,224,18,4,129,25,224,18,4,132,189,224,-18,4,65,0,224,18,6,134,211,224,18,4,64,151,224,18,6,224,132,10,-68,168,224,18,6,135,134,224,18,4,130,140,224,170,5,224,190,11,224,191,-10,105,38,224,19,7,224,193,10,105,148,224,19,7,224,195,10,148,146,224,-19,6,224,197,10,113,110,224,19,7,224,199,10,116,171,224,19,7,225,135,-11,224,199,10,98,138,224,19,7,224,199,10,104,94,224,19,7,224,199,10,-104,196,224,19,7,169,21,224,19,4,64,199,251,177,7,17,111,69,110,117,-109,58,32,111,117,116,32,111,102,32,114,97,110,103,191,54,168,46,64,7,-99,3,0,95,130,179,64,7,99,46,1,95,50,107,74,64,7,106,67,1,-95,50,91,188,64,7,91,207,96,7,132,224,0,50,92,45,96,7,160,79,-184,70,0,50,124,236,64,7,160,79,103,237,64,7,160,79,64,180,64,7,-93,94,96,7,160,79,101,188,64,7,160,79,87,92,96,7,160,79,93,247,-96,7,160,79,148,88,1,95,50,94,212,64,7,94,234,96,7,160,79,100,-112,0,85,241,119,1,137,220,98,69,234,4,7,64,41,234,147,53,128,7,-96,8,96,150,234,145,14,128,7,96,8,169,190,234,143,33,128,7,96,8,-132,189,224,38,7,65,55,64,29,97,63,64,8,133,113,224,99,8,99,12,-224,119,7,130,248,224,80,5,65,72,64,71,97,80,64,8,204,139,224,38,-4,99,71,0,85,143,84,128,8,129,1,66,187,224,39,4,130,227,224,59,-5,161,22,147,93,64,8,129,22,64,9,96,237,224,189,9,64,41,224,208,-7,64,160,224,19,7,131,141,224,109,5,65,55,64,90,97,63,64,8,134,-170,224,38,7,130,56,128,7,96,8,134,54,224,98,7,132,63,224,58,5,-65,33,64,49,97,41,0,85,113,112,224,96,9,140,49,96,6,64,7,138,-30,224,94,8,64,155,224,18,6,132,57,224,75,4,65,47,0,85,114,26,-96,7,129,52,224,35,6,160,246,192,245,231,159,0,225,48,5,226,0,10,-161,255,193,6,193,154,130,6,135,214,106,204,230,221,0,96,179,0,39,233,-232,1,104,116,236,229,3,108,199,128,46,224,12,5,169,239,107,6,192,78,-99,193,224,25,12,196,195,0,57,224,19,2,0,57,77,21,96,11,0,58,-96,6,137,24,84,152,0,39,88,57,77,68,0,56,92,173,77,88,97,110,-244,173,2,96,11,184,71,192,105,160,98,148,63,224,6,4,0,58,64,107,-224,95,5,224,92,6,224,79,6,97,34,224,79,10,0,58,64,192,235,232,-7,69,47,170,241,0,56,98,34,171,232,235,147,17,2,73,110,116,235,230,-19,160,80,65,107,224,80,0,254,5,8,224,81,9,235,228,12,1,73,32,-64,2,65,247,0,57,235,224,1,128,85,225,247,3,189,27,225,187,0,0,-57,235,223,1,128,44,224,25,1,235,223,1,160,25,128,90,224,77,1,130,-145,224,82,0,128,76,160,57,65,65,0,51,235,3,17,235,2,72,166,155,-135,2,235,1,16,135,41,64,10,235,1,4,128,53,235,1,7,235,0,14,-96,222,224,215,16,96,113,224,215,67,130,4,224,215,68,133,128,224,215,9,-235,216,10,64,43,235,215,33,136,80,203,215,64,148,235,215,15,98,73,157,-160,64,13,0,56,217,151,75,186,195,82,78,177,1,95,50,83,113,203,243,-132,240,96,83,224,28,15,0,58,98,172,156,0,64,77,128,100,0,65,96,-100,0,54,96,13,124,230,64,179,88,160,128,150,252,171,0,192,222,64,45,-254,65,0,3,50,32,75,52,126,4,64,21,132,21,192,21,97,64,0,58,-68,70,128,114,64,136,91,93,101,32,128,17,0,49,192,17,129,93,152,148,-128,17,129,2,152,140,96,17,73,48,128,17,0,52,192,17,192,204,70,63,-128,17,128,211,152,116,128,17,128,215,152,108,128,17,128,187,152,106,128,17,-221,21,70,247,128,17,224,179,0,71,18,128,18,224,180,1,192,181,66,126,-160,18,192,182,74,29,160,18,192,183,74,56,160,18,192,184,74,83,160,18,-192,185,66,29,160,18,192,186,74,137,160,18,192,187,74,164,160,18,192,188,-65,164,160,18,192,189,74,218,128,18,72,250,128,18,224,189,0,73,22,128,-18,225,115,1,192,189,66,148,160,18,192,189,75,70,160,18,192,189,75,97,-160,18,192,189,75,124,160,18,192,189,75,151,160,18,192,189,75,178,160,18,-192,189,75,205,160,18,192,189,71,36,183,65,113,232,70,154,156,191,2,50,-53,49,214,135,99,155,198,141,0,53,128,220,123,183,102,34,64,19,128,221,-224,69,9,230,150,10,224,71,0,227,118,0,0,51,66,191,64,18,64,25,-96,90,224,1,3,67,217,96,0,224,20,11,224,17,8,224,14,5,224,11,-2,192,8,93,0,131,86,86,255,195,64,0,90,128,130,64,21,239,150,0,-71,224,87,20,0,58,117,70,15,10,65,32,34,94,95,94,44,94,41,94,-66,94,57,94,59,96,5,18,53,94,54,94,57,94,58,94,57,94,52,94,-57,94,57,94,73,94,38,96,7,0,66,96,19,30,57,94,89,94,32,94,-53,94,57,94,54,94,60,94,51,94,60,94,89,94,33,94,53,94,58,94,-54,94,58,124,32,96,75,22,57,94,67,94,59,94,61,94,57,94,60,94,-61,94,50,94,55,94,58,94,45,94,61,96,13,8,58,94,40,94,40,94,-60,94,33,96,75,31,60,94,40,94,50,94,56,94,66,94,40,94,57,94,-86,94,32,94,58,94,70,94,32,94,87,94,33,94,58,94,71,94,2,33,-94,32,224,3,102,224,33,59,224,3,53,224,9,1,0,66,224,15,6,64,-5,0,66,96,5,2,33,94,67,224,19,6,224,43,3,224,79,13,224,69,-9,224,15,1,2,33,94,50,160,67,0,67,96,9,0,34,96,25,224,5,-3,224,3,21,224,33,25,192,37,192,77,224,129,3,224,3,99,0,70,96,-5,128,11,64,5,128,23,193,77,224,3,2,1,124,68,97,21,28,90,94,-33,94,81,94,49,94,67,94,60,94,75,94,49,94,77,94,60,94,68,94,-49,94,70,94,60,94,49,96,3,6,80,94,60,124,111,94,35,224,57,0,-64,21,64,7,4,48,94,48,94,49,97,83,8,57,94,32,94,67,94,48,-94,60,96,25,67,73,2,32,94,48,160,3,64,41,0,80,96,11,3,72,-94,32,124,193,29,225,211,3,224,3,35,64,179,64,9,0,58,160,15,96,-75,5,124,50,94,32,124,47,224,75,40,224,3,13,8,61,94,68,94,35,-94,37,94,37,224,73,56,224,3,37,224,29,19,224,67,31,224,3,145,1,-48,124,65,79,130,49,4,69,94,57,124,40,98,53,0,52,96,17,18,61,-94,61,94,59,94,48,124,44,94,35,94,52,94,35,94,57,94,35,224,5,-4,6,71,94,48,94,90,94,50,98,97,67,189,69,87,6,74,94,48,94,-69,94,45,229,179,0,0,59,96,5,64,73,0,74,96,53,64,25,14,57,-94,95,94,50,94,49,94,73,94,50,94,84,94,35,101,231,10,67,94,57,-94,50,94,50,94,35,124,98,96,73,4,50,94,70,94,35,101,187,6,69,-94,35,94,49,94,49,96,117,4,61,94,67,94,35,96,39,64,51,2,66,-94,50,96,89,8,50,94,77,94,57,94,48,94,45,64,63,1,94,93,99,-59,0,35,64,193,3,124,88,94,50,96,119,64,33,0,48,64,51,5,124,-32,94,50,94,72,160,81,0,61,96,139,0,49,96,235,6,35,94,59,94,-59,94,85,96,205,64,29,128,35,0,66,96,5,66,119,64,35,0,78,96,-101,64,83,64,23,64,17,64,15,16,74,94,50,94,68,94,48,94,87,94,-50,94,60,94,69,94,50,96,137,0,45,96,19,3,72,94,35,124,70,103,-2,49,94,87,96,205,6,95,94,35,94,36,124,53,96,167,0,36,96,151,-8,66,94,36,94,71,94,35,94,67,96,15,2,36,94,36,160,249,65,27,-129,103,199,7,2,49,94,78,160,55,4,36,94,48,94,71,96,103,0,48,-97,11,64,7,64,185,2,48,94,70,96,5,64,85,129,145,128,217,128,101,-64,215,64,15,128,63,128,7,64,27,65,197,64,29,192,75,65,85,64,121,-64,35,64,121,64,21,65,27,2,69,94,40,98,15,65,157,128,29,64,37,-64,75,64,243,224,63,1,224,139,7,224,5,7,64,55,64,101,64,125,64,-247,128,71,64,23,65,85,64,185,2,35,94,70,224,191,0,65,13,128,135,-64,37,128,155,65,17,224,125,1,0,72,224,181,0,224,121,11,0,68,225,-5,6,129,203,192,59,129,3,129,71,0,78,160,51,224,251,3,66,191,64,-127,0,50,98,133,64,55,225,125,27,224,119,7,129,217,225,127,13,64,93,-128,141,225,129,17,66,225,65,125,128,245,64,33,65,113,65,41,128,245,65,-41,64,13,193,101,128,9,192,17,192,39,64,7,0,75,161,169,128,123,64,-5,128,29,64,145,129,145,128,213,0,69,96,35,163,51,105,35,0,69,97,-251,69,131,64,131,128,43,129,5,128,131,0,86,96,5,0,79,225,109,4,-130,213,129,215,64,165,224,237,1,192,53,128,173,225,119,9,64,39,2,57,-94,70,98,113,194,243,0,57,224,111,10,67,37,225,107,9,0,68,96,117,-193,171,128,235,128,123,64,11,64,219,226,143,1,224,117,3,128,17,2,36,-94,75,225,147,0,0,36,226,93,3,99,201,64,23,227,79,3,225,59,3,-68,141,65,93,64,45,0,36,96,189,225,201,7,0,72,96,209,132,35,192,-159,0,81,161,155,68,63,194,205,128,207,66,79,131,15,128,85,65,173,130,-133,66,129,128,201,128,183,128,217,0,57,64,185,1,124,47,96,115,64,201,-68,71,64,57,67,187,68,131,68,103,235,85,0,0,124,64,123,226,49,1,-129,67,128,131,193,89,128,69,69,9,128,143,128,35,69,47,64,89,224,123,-1,66,127,0,95,96,55,2,66,94,61,101,37,75,129,64,11,64,251,66,-57,64,41,0,73,96,251,69,195,128,3,75,237,64,3,64,185,97,217,0,-124,64,103,64,175,0,77,97,27,67,169,134,107,64,119,69,197,64,33,128,-251,64,63,64,87,134,163,0,68,107,247,64,115,96,213,1,124,42,97,127,-129,161,65,37,133,107,129,111,129,191,64,143,2,69,94,57,97,23,192,21,-131,69,193,221,129,63,65,113,134,17,0,76,226,135,0,128,211,129,239,0,-36,163,31,64,13,2,61,94,61,167,75,73,13,137,101,64,139,71,79,137,-141,1,66,124,129,221,197,153,196,47,224,17,0,98,97,224,13,1,70,171,-224,45,18,102,15,2,48,124,56,224,51,4,195,87,64,201,4,72,94,57,-94,83,98,133,131,153,0,73,98,123,2,48,124,85,167,241,0,69,170,43,-4,52,94,68,124,107,98,189,10,57,94,80,94,50,94,41,94,89,94,50,-97,155,3,66,94,48,124,70,223,71,39,2,66,94,39,97,167,67,71,130,-179,65,15,4,72,94,48,94,82,162,229,66,129,0,57,96,17,64,31,64,-17,67,73,65,57,195,181,160,19,1,124,51,224,49,0,66,73,66,203,129,-91,65,229,135,147,142,21,64,37,195,59,130,237,68,137,64,185,72,163,72,-51,64,133,0,45,168,67,64,219,0,34,66,233,1,124,52,160,167,66,57,-3,35,94,35,124,75,79,65,175,3,68,94,48,124,65,243,69,73,0,94,-160,151,199,123,132,213,229,29,1,65,227,128,29,66,101,65,67,199,139,72,-97,195,15,4,74,94,48,124,43,162,183,65,53,195,147,97,117,0,124,74,-181,68,169,226,125,1,64,55,66,167,64,161,128,245,131,75,130,163,131,11,-128,123,0,73,160,45,224,219,0,224,7,0,0,70,97,33,65,3,64,31,-67,45,5,37,94,79,94,35,124,131,139,72,97,0,46,162,173,67,67,197,-17,192,93,64,187,192,201,64,73,66,21,67,227,0,72,169,15,128,171,64,-227,195,65,195,61,131,29,99,61,96,243,128,91,198,13,128,31,128,99,64,-135,0,57,99,207,65,219,64,209,192,69,65,71,67,175,131,55,130,23,193,-83,2,69,94,49,162,65,138,155,65,173,0,42,162,171,76,149,0,71,102,-3,129,179,2,57,94,76,225,61,0,66,251,65,51,196,177,128,105,129,237,-8,43,94,33,124,62,94,49,94,76,77,31,0,124,76,147,4,36,94,49,-124,63,237,53,2,224,3,255,224,3,17,193,143,224,3,181,64,197,2,71,-94,32,228,245,0,0,69,162,89,81,235,64,23,192,7,224,31,11,207,51,-192,3,192,43,0,77,160,43,128,15,0,34,224,7,8,79,21,0,48,241,-53,0,0,34,114,125,2,66,94,60,102,13,224,23,3,64,19,0,67,160,-75,192,21,66,231,0,60,96,73,0,68,111,145,0,60,163,7,224,81,7,-64,23,8,74,94,41,94,68,94,45,94,69,179,57,6,55,94,56,94,53,-94,55,224,7,0,67,57,2,42,94,43,96,35,0,41,102,23,64,25,69,-63,2,51,94,51,99,245,0,58,101,239,0,74,179,127,4,51,94,73,94,-57,160,83,68,119,2,45,94,40,173,39,74,135,77,219,64,45,77,193,224,-13,1,69,233,69,183,70,183,0,59,107,77,67,161,2,67,94,37,99,245,-4,37,94,75,94,35,96,21,71,177,80,149,64,5,64,11,242,89,1,128,-7,192,23,0,58,96,247,71,229,64,15,192,3,64,245,64,51,145,55,67,-249,64,49,64,17,65,227,71,121,80,129,65,75,64,65,128,25,8,61,94,-79,94,40,124,34,94,39,160,51,0,39,104,137,137,171,64,47,0,68,96,-43,0,58,96,147,128,51,192,5,0,70,96,5,0,94,160,31,192,25,128,-17,2,66,94,75,116,41,0,61,232,201,0,0,83,160,39,64,53,4,53,-94,54,124,80,96,15,8,93,94,61,94,88,94,58,124,39,103,125,1,58,-124,64,49,0,85,97,179,10,61,94,84,94,48,124,59,94,40,124,77,96,-19,4,40,94,65,124,54,96,51,69,139,10,58,124,53,94,61,94,71,94,-58,124,110,96,19,2,65,124,119,224,107,2,224,3,11,4,93,94,40,124,-43,105,15,129,145,0,94,160,7,224,3,7,0,79,64,77,5,92,95,94,-61,94,65,225,189,0,224,3,30,1,124,62,224,47,2,0,95,160,11,6,-66,94,65,94,58,124,47,96,207,129,37,64,231,76,183,66,49,64,103,6,-48,124,104,94,61,124,47,242,13,2,193,243,227,163,3,243,11,1,64,5,-67,135,79,165,243,175,111,224,3,73,0,33,162,205,128,13,70,197,64,7,-74,43,67,137,86,135,2,57,124,37,163,223,64,21,100,15,1,124,55,168,-203,71,27,77,145,0,35,104,81,73,101,138,17,224,5,33,80,125,196,29,-64,3,67,247,64,7,128,5,68,21,132,61,64,5,128,23,196,73,226,7,-5,71,191,67,251,64,41,137,133,64,49,2,53,94,76,177,233,215,203,224,-3,3,1,52,124,64,205,0,89,98,11,2,88,94,61,106,25,6,65,124,-85,94,61,94,89,106,157,0,61,184,9,6,61,94,49,94,50,94,39,226,-123,11,96,91,224,87,8,96,5,64,27,2,72,94,39,232,175,0,0,52,-117,41,128,139,0,39,96,81,128,153,74,251,137,187,72,33,69,59,66,97,-3,50,94,52,124,73,187,74,77,64,13,136,119,75,91,137,233,132,43,79,-127,0,61,82,185,1,124,37,96,109,64,23,2,79,94,50,100,11,138,153,-67,233,0,71,100,91,2,78,94,40,98,247,2,73,94,40,99,7,64,15,-2,66,124,63,78,205,2,124,51,124,64,47,0,50,128,13,5,94,65,124,-35,124,125,176,65,4,49,94,72,124,118,141,243,100,7,4,72,94,48,124,-39,233,23,2,68,113,64,37,65,39,64,121,73,55,72,239,0,83,102,147,-226,155,53,224,3,19,73,87,69,193,73,181,66,65,0,49,224,73,48,179,-199,171,131,0,39,173,75,137,213,4,86,94,60,94,72,118,195,150,197,224,-3,13,246,153,41,224,3,69,79,69,224,17,3,224,35,13,224,195,3,88,-213,64,9,224,185,35,70,249,192,5,224,3,19,248,61,3,64,5,66,217,-128,7,128,3,224,47,5,0,84,104,63,129,189,66,71,2,49,94,33,100,-25,211,87,139,71,68,93,235,243,1,71,19,139,181,147,255,146,5,77,105,-77,195,67,251,148,63,1,36,124,67,57,0,79,160,55,64,19,204,99,76,-177,0,81,171,159,66,185,149,221,64,105,64,29,0,91,108,35,132,151,64,-121,78,1,142,9,64,65,0,92,242,191,0,236,213,3,236,151,5,76,125,-68,121,69,33,64,81,71,213,64,77,141,251,85,201,131,41,112,189,111,97,-144,17,192,225,128,7,67,207,129,5,77,33,64,23,65,75,64,55,141,85,-131,113,77,117,144,229,173,189,96,245,144,51,140,123,64,75,174,117,160,25,-0,87,177,103,131,195,79,77,224,121,1,64,17,129,137,64,19,78,149,146,-27,224,7,5,229,235,6,112,83,74,47,64,219,194,109,6,67,94,48,124,-79,94,33,110,255,128,211,224,5,1,0,57,96,9,192,207,65,143,2,50,-124,87,101,143,0,50,101,135,65,119,64,63,64,15,65,61,2,46,94,70,-100,147,2,46,94,46,192,7,1,94,71,160,9,2,47,124,49,96,9,4,-47,94,66,124,109,128,163,1,124,105,101,19,64,157,0,33,96,79,74,245,-70,191,129,227,2,50,94,58,176,3,146,63,128,3,224,5,0,112,121,4,-80,94,60,94,79,65,129,3,124,106,94,50,101,217,4,79,94,61,124,63,-160,95,87,47,71,1,69,125,148,195,94,47,69,125,83,213,222,55,64,215,-64,17,134,149,74,215,230,67,11,224,3,3,65,125,64,7,144,71,139,7,-129,235,134,85,192,3,139,31,0,52,105,43,66,91,152,211,138,61,64,161,-0,65,161,157,87,247,66,69,254,207,58,160,59,192,165,65,69,2,49,124,-44,162,43,80,185,131,145,226,43,9,140,35,128,31,87,181,0,58,126,251,-64,9,65,63,0,67,169,159,66,105,0,66,121,93,137,163,65,83,144,191,-145,205,193,161,114,97,112,99,0,50,66,47,1,124,122,184,235,64,221,66,-49,0,44,178,93,4,72,94,61,124,52,103,127,1,40,94,74,245,95,105,-65,161,76,3,145,59,2,61,124,46,96,47,68,77,4,65,94,65,94,48,-195,219,98,117,76,23,4,35,94,90,94,40,97,85,90,29,64,73,66,247,-0,83,104,13,67,147,0,39,103,151,0,37,96,129,67,99,0,48,177,135,-144,103,64,55,64,37,67,247,2,39,124,41,103,57,6,32,124,39,94,33,-124,77,160,195,210,33,73,117,64,187,0,35,101,63,135,97,0,71,164,207,-132,117,0,74,109,125,0,78,96,5,0,70,253,45,0,75,177,67,51,0,-78,96,5,66,235,141,135,64,195,64,59,66,249,2,66,124,54,163,175,71,-207,65,101,64,147,68,1,71,195,2,48,124,41,109,69,3,72,94,49,124,-64,191,193,175,67,5,81,79,129,117,65,45,128,23,150,227,69,97,0,40,-96,11,65,173,86,85,65,255,69,97,4,72,94,40,124,47,225,177,4,64,-85,2,68,94,40,96,125,141,169,64,63,65,215,64,25,2,57,124,63,170,-79,65,45,65,163,64,51,2,79,94,40,99,101,77,227,132,199,137,29,138,-151,134,21,211,191,65,179,130,97,147,23,69,55,0,40,99,155,74,61,64,-7,64,33,64,89,197,187,73,7,129,5,0,61,101,235,64,89,131,57,64,-55,116,45,99,223,64,169,64,15,201,159,64,243,64,215,64,133,64,11,84,-81,154,21,118,229,65,7,3,124,79,94,48,85,81,3,124,54,94,48,94,-105,1,94,76,96,7,70,211,102,173,162,23,134,141,243,67,3,64,209,69,-183,85,7,146,143,92,223,2,49,94,85,111,181,0,48,109,195,0,65,64,-93,1,94,94,65,27,1,124,41,96,147,64,185,157,23,129,53,97,19,64,-123,96,99,64,237,74,3,129,153,64,197,70,201,66,197,75,45,77,239,64,-193,129,79,75,229,2,48,94,84,96,209,0,40,105,189,203,209,134,83,84,-27,0,78,164,219,65,43,85,195,64,183,230,97,1,128,45,135,21,68,21,-216,143,198,205,68,51,0,45,97,43,134,85,68,151,156,185,219,77,65,11,-2,66,94,35,97,35,148,37,71,133,193,31,70,149,64,75,131,25,70,83,-128,83,128,119,102,189,120,103,64,119,84,59,135,147,136,15,64,135,134,113,-138,159,64,53,133,89,64,199,67,97,65,9,221,71,244,53,1,64,5,202,-15,160,233,107,41,246,247,7,132,147,69,17,101,243,168,21,64,73,64,193,-66,47,192,223,199,101,251,175,33,129,91,128,141,154,187,251,175,1,153,233,-64,47,64,91,85,91,128,53,192,31,84,137,194,77,64,229,154,155,192,119,-132,185,64,9,64,71,156,77,192,95,64,217,64,5,225,5,1,136,57,65,-113,136,203,66,83,64,155,2,92,94,48,98,29,192,237,64,49,129,63,131,-167,213,89,192,57,137,217,0,93,186,21,192,121,192,221,129,31,128,243,129,-167,195,41,0,65,66,161,97,89,194,89,64,169,224,51,5,0,86,97,235,-98,143,102,27,192,97,245,237,1,128,39,137,243,129,17,129,151,73,173,0,-82,173,99,128,37,64,47,192,153,161,215,224,45,0,0,83,106,37,2,48,-94,90,161,75,224,49,1,130,241,65,111,67,37,64,47,134,119,77,235,65,-219,2,65,124,56,165,89,226,167,1,99,29,1,124,99,102,101,4,32,94,-95,94,33,96,55,68,197,68,85,226,39,1,132,131,226,31,1,91,25,87,-149,226,15,1,193,9,66,1,137,211,64,121,67,31,87,31,64,185,160,77,-0,124,67,5,225,71,3,133,3,192,235,64,59,0,90,96,103,2,73,94,-35,173,239,64,89,196,187,65,197,65,151,234,183,1,67,183,2,45,94,50,-183,1,225,99,1,65,253,69,3,74,241,131,231,4,57,94,65,124,53,186,-73,144,61,193,85,122,137,0,124,128,185,152,129,225,127,1,130,69,128,43,-0,82,230,69,0,0,57,248,247,0,0,85,162,189,64,55,226,17,2,0,-124,234,167,1,137,217,66,241,64,85,64,63,198,85,131,39,139,103,224,141,-1,135,9,129,105,71,253,221,193,128,103,194,75,228,189,1,0,66,64,213,-250,119,2,139,73,222,93,64,211,106,113,121,247,64,29,66,35,64,133,224,-75,1,66,131,101,83,0,124,77,21,136,129,2,84,94,40,115,207,2,67,-94,59,104,197,0,76,167,125,10,89,94,50,124,101,94,48,124,110,94,39,-184,189,66,205,1,65,124,66,253,1,84,124,90,207,0,96,163,173,64,49,-0,72,99,9,0,79,122,149,64,215,69,201,65,77,0,95,98,193,100,53,-5,124,70,94,50,124,53,66,157,97,83,85,25,197,9,64,147,0,77,98,-61,0,68,123,217,64,211,154,169,133,153,154,61,197,3,129,61,250,143,1,-157,223,131,139,65,103,221,25,76,43,67,21,193,213,103,63,166,131,64,145,-65,73,0,67,104,75,2,66,94,49,98,131,147,121,129,35,0,65,96,143,-195,47,0,86,105,165,2,57,124,100,188,27,136,7,71,9,66,17,135,13,-0,76,121,99,77,145,64,119,79,243,65,49,65,125,66,131,4,50,124,47,-124,117,97,117,98,3,81,147,0,124,64,141,65,255,64,65,4,50,124,69,-124,102,96,73,158,107,64,5,64,73,73,95,70,139,65,171,0,50,69,11,-168,149,64,13,64,87,65,143,154,123,74,207,0,82,105,221,76,79,64,225,-66,15,138,169,194,69,128,57,158,163,65,37,3,45,94,94,124,68,103,2,-65,124,111,190,177,64,245,4,67,124,51,94,61,97,227,65,207,64,49,0,-86,142,45,4,124,115,94,61,124,75,85,2,65,124,117,129,89,212,241,0,-124,79,33,197,153,75,5,68,55,2,71,94,45,101,25,137,195,0,35,114,-43,3,67,94,35,124,75,157,86,5,0,65,107,39,4,35,94,61,124,121,-167,41,68,143,160,7,1,124,86,178,113,0,88,86,35,96,191,76,59,76,-47,64,7,138,139,0,81,160,13,64,21,234,179,1,190,135,224,13,0,152,-89,88,187,152,111,234,203,1,74,221,224,63,1,64,37,128,43,128,45,203,-9,224,29,7,80,163,64,93,137,191,192,33,224,157,3,224,7,23,0,91,-176,183,10,88,94,32,94,58,94,88,94,33,94,58,117,251,224,15,55,177,-15,1,124,49,67,55,86,237,1,124,54,101,119,1,61,124,66,143,67,231,-1,35,94,87,119,129,147,67,41,66,87,67,67,72,99,2,35,94,72,106,-1,0,73,113,43,0,83,117,187,68,167,2,33,94,65,100,49,133,51,0,-80,162,19,221,195,64,5,172,157,4,124,61,94,49,124,65,15,2,35,124,-111,108,249,202,227,73,215,153,75,195,209,75,27,84,29,131,201,2,35,94,-80,254,83,0,132,15,66,191,2,59,94,67,96,143,68,67,0,49,224,25,-0,85,65,192,53,68,247,228,35,1,2,67,124,95,229,141,0,137,55,237,-209,3,1,65,124,136,239,108,67,64,147,67,127,3,124,33,94,32,93,33,-96,163,64,99,228,115,4,1,94,70,96,151,0,58,114,5,75,215,0,59,-74,221,99,25,78,5,148,227,1,65,124,77,217,128,111,135,175,128,117,195,-165,195,119,192,145,134,213,64,5,129,7,224,3,1,131,217,224,61,7,224,-3,9,224,31,1,128,83,224,241,3,224,101,1,128,117,0,80,238,189,0,-64,13,129,1,0,80,85,145,171,243,0,66,68,69,121,65,68,57,0,99,-182,165,0,78,175,35,128,7,96,5,1,124,36,165,75,0,76,96,243,4,-32,94,61,124,55,108,251,102,51,192,65,121,197,144,183,0,61,100,159,87,-253,0,65,118,239,2,65,124,122,98,115,4,60,94,69,124,87,160,45,70,-113,66,33,175,49,1,124,118,160,135,86,95,65,35,0,75,160,39,65,105,-224,13,0,1,124,55,118,115,64,225,147,149,90,101,64,15,68,95,64,181,-224,53,1,0,61,107,77,1,66,124,90,165,64,215,66,251,64,33,207,161,-64,65,66,183,64,81,64,181,192,247,90,167,136,49,128,23,2,65,94,82,-97,3,0,91,165,37,0,72,161,193,4,66,124,77,124,93,96,9,66,121,-2,50,124,32,97,19,193,223,0,65,101,91,161,201,2,124,44,92,96,35,-166,13,0,58,80,27,229,215,0,2,68,124,107,96,7,0,83,114,161,0,-68,135,33,1,124,97,96,41,0,38,104,99,129,197,64,97,96,111,5,124,-43,124,56,124,80,108,229,74,233,2,95,94,45,96,93,69,199,4,35,94,-67,124,124,109,171,0,47,68,3,1,124,123,96,9,64,131,224,15,2,31,-34,32,58,50,52,53,32,64,10,65,32,95,54,32,95,49,54,51,32,64,-95,54,32,89,32,66,32,66,32,83,32,85,64,18,5,52,32,64,64,64,-64,64,16,1,90,32,224,7,1,12,83,39,32,83,32,64,66,32,67,39,-32,83,39,64,8,14,83,32,64,95,49,52,52,32,95,54,57,32,64,35,-49,160,52,0,67,64,23,224,38,0,26,66,32,64,64,67,32,67,32,95,-54,52,32,95,49,55,51,32,64,64,95,49,55,52,32,95,50,49,64,120,-7,51,52,49,32,35,49,50,56,96,59,128,53,64,110,10,95,49,50,51,-32,64,67,32,95,57,56,160,41,224,53,19,3,85,32,35,48,224,64,0,-31,66,32,80,32,95,51,51,57,32,102,114,111,109,85,84,70,56,32,34,-92,34,47,118,97,114,47,102,111,108,100,101,114,31,115,47,122,50,47,56,-52,112,116,102,51,98,120,55,104,53,52,48,112,107,110,99,121,48,121,50,-120,112,99,48,48,48,10,48,103,110,47,84,47,109,104,115,105,110,64,13,-17,48,48,57,57,57,53,46,104,115,92,34,44,50,48,50,58,56,34,128,-105,65,12,97,15,96,114,128,13,64,176,224,230,28,128,228,2,64,67,39,-65,36,6,95,49,57,49,32,95,57,64,50,160,24,96,245,96,16,3,67,-32,95,53,192,11,192,63,3,95,50,49,53,64,227,4,50,51,55,32,64,-160,55,224,28,0,129,119,64,70,96,151,2,95,50,51,64,22,64,8,1,-52,49,225,80,0,160,78,128,140,225,60,2,64,71,64,11,2,95,50,52,-64,33,3,58,50,52,52,130,39,2,50,52,50,66,53,0,51,96,13,7,-98,115,117,110,112,97,99,107,64,17,0,50,96,17,64,110,4,95,50,51,-57,32,64,57,1,48,32,64,56,0,49,96,24,2,66,32,89,66,34,65,-203,0,58,96,25,64,44,65,41,0,67,129,44,4,55,53,32,95,55,64,-160,96,118,97,185,130,124,130,7,128,57,96,189,64,92,0,67,225,42,3,-192,190,0,64,128,49,0,58,96,33,96,139,64,115,64,61,0,80,128,6,-160,68,64,33,0,56,128,205,5,49,50,53,32,95,50,64,21,3,95,50,-49,50,64,10,64,114,192,11,0,53,96,11,1,50,55,161,96,64,11,66,-131,160,11,1,51,48,224,11,2,0,54,224,11,0,64,9,1,50,49,64,-80,1,50,50,97,57,64,22,1,10,65,163,0,99,41,129,236,66,48,128,-255,64,2,64,151,162,72,226,78,0,66,4,225,192,1,192,37,64,16,128,-52,64,77,96,5,99,122,129,28,0,49,64,7,2,85,32,65,193,44,0,-50,64,137,0,51,130,25,98,68,1,50,51,99,210,64,136,2,95,55,57,-130,88,160,19,7,64,64,83,32,73,32,64,75,64,183,162,127,224,125,0,-1,83,39,65,69,194,84,99,251,129,131,66,54,0,75,192,172,98,232,96,-128,64,18,224,128,7,162,251,192,139,96,71,130,135,96,16,224,54,15,0,-64,128,206,97,103,0,53,97,223,0,54,97,81,64,45,2,75,52,32,128,-174,0,58,96,27,224,21,2,160,20,130,182,2,85,32,90,96,1,0,75,-128,231,0,58,96,89,160,44,64,13,130,188,224,37,9,130,187,225,148,0,-97,1,1,95,49,66,36,3,95,50,50,57,96,58,130,202,0,85,64,134,-192,57,0,58,96,27,130,129,161,181,6,95,50,50,54,32,64,65,64,49,-67,157,224,27,10,96,136,0,50,130,43,96,77,224,196,1,64,30,8,10,-65,32,117,114,101,109,32,58,98,150,64,13,3,113,117,111,116,64,14,163,-152,2,49,50,54,100,10,100,100,164,118,3,54,32,95,51,67,152,226,148,-7,64,83,129,0,0,73,64,65,128,253,0,83,99,141,65,145,226,93,0,-163,155,2,56,54,32,131,150,98,175,130,196,224,22,4,165,167,0,56,229,-109,79,3,53,52,58,49,165,108,132,202,0,49,64,208,0,49,67,111,98,-167,0,79,64,166,0,79,97,67,160,36,224,34,3,224,26,3,224,23,2,-198,220,2,95,50,49,66,128,2,95,50,50,100,175,65,38,100,155,1,95,-49,67,30,1,95,56,68,10,0,49,198,213,0,58,96,37,65,111,1,56,-52,98,202,1,95,57,96,53,64,32,128,53,0,56,101,138,128,20,129,233,-2,75,32,58,96,112,3,10,65,32,80,64,10,129,205,196,15,131,50,162,-226,96,184,96,14,161,250,0,49,226,212,0,98,16,96,36,0,58,96,34,-64,131,1,53,57,64,47,3,50,32,95,56,97,238,128,10,65,224,128,10,-0,49,64,134,3,64,95,49,57,96,194,64,34,0,73,97,222,96,220,71,-172,1,49,54,100,178,230,157,7,134,4,230,180,9,224,22,13,128,45,96,-185,97,15,129,38,64,31,101,246,192,24,64,19,130,104,96,243,0,53,133,-196,0,55,97,141,64,66,2,35,50,53,69,111,0,58,96,44,98,208,1,-55,55,64,4,0,56,98,206,65,137,2,49,56,48,96,5,64,101,0,56,-96,22,0,56,69,189,96,61,2,95,49,56,104,30,96,73,128,38,0,57,-131,14,96,12,135,26,2,95,49,57,224,110,0,1,95,49,136,79,134,228,-0,48,69,203,192,11,0,51,224,56,8,196,242,98,246,71,214,230,169,1,-224,27,5,0,49,65,145,96,28,1,95,56,69,91,0,64,66,38,192,41,-2,95,50,48,102,93,64,18,224,81,51,65,179,224,81,6,66,115,1,50,-48,224,220,1,1,50,48,70,180,192,11,0,56,66,254,4,95,50,48,57,-32,160,67,0,75,160,8,0,75,66,7,64,8,0,58,96,43,5,10,65,-32,90,32,85,66,185,0,48,130,206,6,112,111,112,99,111,117,110,68,102,-64,68,196,181,0,66,96,109,2,53,32,64,70,64,135,131,0,58,64,113,-97,182,64,24,0,58,64,139,226,183,3,133,87,224,1,9,165,105,224,0,-2,0,58,96,88,64,72,2,51,54,48,228,74,2,18,97,114,105,116,104,-109,101,116,105,99,32,111,118,101,114,102,108,111,119,68,17,0,58,97,1,-131,78,165,78,0,83,228,191,5,192,5,2,95,50,48,103,27,3,95,50,-48,50,227,96,0,230,231,0,71,149,130,142,135,37,1,49,57,66,140,230,-211,2,131,160,226,241,3,128,66,0,58,66,47,128,234,224,228,15,224,1,-3,224,240,9,64,0,0,58,96,147,96,68,102,34,64,169,192,211,65,108,-1,49,57,98,255,64,147,0,58,66,171,161,90,0,51,224,108,42,0,58,-96,75,224,92,4,64,244,132,141,2,95,49,57,101,24,96,252,0,58,67,-33,160,105,225,193,17,224,103,14,0,58,96,73,224,195,5,71,53,128,195,-67,135,224,89,0,224,92,14,224,84,7,0,58,96,58,231,106,1,224,1,-21,225,103,12,0,58,96,131,197,56,69,51,101,45,133,39,133,38,131,240,-229,38,7,227,156,1,101,4,139,25,68,232,0,58,96,47,103,60,137,12,-98,68,64,232,226,40,1,0,58,64,88,160,184,232,34,1,96,45,5,10,-65,32,42,32,58,96,126,129,42,1,95,49,64,149,130,89,226,122,12,101,-131,0,58,68,220,160,49,236,121,3,228,75,10,138,34,98,221,64,154,70,-204,224,29,3,1,95,49,71,196,234,103,1,1,95,49,100,74,227,214,0,-64,106,226,4,0,136,146,224,2,2,193,85,64,51,160,223,224,30,3,225,-133,3,0,58,96,104,224,178,62,229,147,0,160,178,65,111,224,178,4,226,-40,0,0,51,224,141,3,226,23,6,0,58,96,56,224,183,7,226,66,14,-0,58,96,117,226,178,0,100,242,64,154,64,18,4,120,111,114,32,58,102,-150,2,10,65,32,128,11,129,208,4,97,110,100,32,58,102,187,111,97,0,-54,137,50,3,95,49,54,54,66,57,64,212,167,33,224,1,31,107,255,224,-0,10,224,57,25,192,1,224,65,14,224,56,25,128,1,224,62,13,224,55,-25,64,1,224,59,12,224,54,25,224,56,13,224,53,44,224,50,41,224,47,-38,224,44,35,224,41,32,224,38,29,224,35,26,224,32,23,224,29,20,224,-26,17,224,23,14,224,20,11,224,17,8,224,14,5,224,11,2,192,8,109,-113,224,0,9,0,58,74,28,229,83,1,224,1,23,227,202,4,224,68,3,-0,54,96,68,0,73,67,165,238,61,4,139,103,101,125,99,186,0,53,171,-43,1,95,49,128,10,105,143,160,11,73,63,160,11,0,55,102,24,160,11,-69,170,192,11,107,147,74,235,173,152,138,218,132,69,64,6,5,10,65,32,-117,62,61,64,134,132,82,1,117,62,64,11,132,81,1,117,60,96,24,132,-82,3,117,60,32,58,96,114,64,11,2,99,109,112,64,13,132,71,100,95,-96,110,101,210,192,157,64,11,0,58,96,187,3,10,65,32,47,64,73,64,-18,160,244,0,54,128,244,0,75,64,10,206,70,1,54,50,64,13,209,223,-145,221,64,20,160,29,0,48,64,13,128,152,7,98,115,108,101,110,103,116,-104,64,17,232,147,0,101,30,142,99,74,186,64,21,0,82,142,27,64,16,-170,68,145,238,1,49,53,64,156,1,35,49,78,244,2,58,49,53,170,63,-96,182,0,52,97,107,0,53,75,233,1,49,53,103,162,0,53,110,214,0,-53,104,67,76,40,129,77,96,65,129,77,96,10,0,58,96,6,225,77,0,-64,40,193,77,64,58,225,77,0,64,77,193,77,64,95,3,10,65,32,105,-129,77,64,115,96,201,139,25,2,58,49,53,128,218,65,35,64,16,143,106,-0,51,64,13,225,119,3,85,70,2,95,49,52,101,216,64,188,193,108,64,-17,3,10,65,32,61,96,11,226,98,1,64,37,128,143,115,23,111,114,209,-202,80,221,0,90,64,7,110,222,1,95,49,83,44,64,6,114,77,0,49,-179,121,113,243,97,30,82,236,0,58,96,29,96,22,71,52,192,73,3,50,-51,32,35,109,142,160,10,178,5,195,116,224,32,2,143,218,116,135,177,239,-0,89,243,122,0,115,62,224,65,4,224,64,5,64,200,64,0,96,58,163,-88,179,244,139,145,128,163,128,244,211,248,1,95,49,83,130,71,210,0,58,-96,29,200,97,64,14,232,112,0,99,134,0,58,97,8,167,40,164,18,0,-58,97,36,194,112,128,36,129,92,75,223,0,54,137,134,114,66,81,1,130,-70,146,75,1,58,49,178,17,11,94,109,100,53,83,116,114,105,110,103,32,-58,96,27,180,188,2,66,32,95,98,99,81,250,0,64,97,74,64,15,213,-141,116,41,0,49,141,116,108,32,0,58,96,102,128,234,160,56,0,48,73,-177,1,90,32,224,31,0,129,10,4,110,101,119,67,65,128,112,2,76,101,-110,64,115,129,10,224,213,4,178,54,2,65,32,58,99,48,240,37,0,2,-115,101,113,142,16,96,8,101,20,0,58,99,54,144,82,81,250,192,75,224,-1,1,229,137,78,0,58,85,51,193,123,229,92,2,0,58,115,22,3,10,-65,32,79,64,144,129,80,4,95,49,48,54,32,78,100,78,61,110,109,96,-8,3,95,49,49,48,66,60,101,21,0,49,112,169,192,11,67,201,192,11,-0,57,224,11,1,81,116,1,95,49,81,154,0,58,96,18,65,192,6,112,-111,107,101,87,111,114,73,98,177,179,4,94,112,101,101,107,192,18,162,105,-65,183,75,72,145,227,0,49,81,124,0,58,64,90,160,193,241,85,2,96,-34,224,50,4,101,170,192,50,226,132,1,1,95,49,81,127,67,97,68,246,-1,95,49,81,163,64,33,129,132,2,116,111,73,79,48,96,21,96,14,1,-80,116,74,18,177,178,243,217,5,96,98,227,39,0,246,12,0,129,116,67,-197,64,93,66,136,183,4,69,134,1,64,95,76,196,108,163,0,58,65,59,-193,138,229,119,2,177,65,237,122,1,79,206,65,197,128,64,85,114,66,170,-142,226,0,58,65,140,160,68,234,217,0,175,255,1,95,49,80,71,76,108,-0,35,101,191,176,4,148,121,64,27,193,18,226,78,8,226,117,73,176,81,-203,246,64,32,2,95,49,49,88,144,64,34,1,95,49,79,65,163,176,224,-22,1,163,182,81,221,99,179,163,186,119,222,194,182,176,111,64,78,79,202,-0,95,70,65,0,58,96,40,66,82,3,102,114,101,101,64,235,173,230,101,-166,224,96,6,0,95,78,205,0,95,79,86,140,148,96,34,192,114,97,187,-97,131,165,136,192,23,0,58,96,177,246,8,4,64,171,133,119,96,254,0,-39,87,16,224,49,0,0,73,161,9,225,0,3,193,225,225,72,1,224,119,-2,64,115,178,79,96,130,249,241,11,165,129,176,111,205,48,96,156,130,20,-92,11,0,83,118,247,123,248,129,79,64,226,1,32,95,79,224,65,113,130,-80,224,89,7,96,88,176,106,145,26,132,39,0,58,176,84,68,201,0,58,-176,35,96,184,71,255,130,164,250,230,0,226,169,7,176,53,242,25,6,8,-117,110,100,101,102,105,110,101,100,114,15,240,36,0,233,249,4,0,58,239,-248,3,99,181,72,195,99,14,0,95,72,235,0,83,238,137,11,65,113,238,-87,2,144,17,85,225,0,48,224,37,3,224,33,0,128,249,240,37,1,0,-95,79,246,0,58,176,31,2,66,32,95,116,183,112,52,240,15,0,129,153,-93,59,1,56,50,176,45,0,80,96,7,97,114,225,113,0,112,170,64,120,-97,11,143,6,96,212,181,41,85,6,99,164,96,92,193,184,244,70,0,252,-144,0,247,176,1,194,68,0,67,103,243,150,180,128,191,65,5,0,48,253,-194,0,97,2,1,56,56,128,155,97,210,176,121,4,105,110,118,32,58,176,-26,4,115,104,114,32,58,176,3,72,232,175,233,0,97,128,23,129,143,4,-115,104,108,32,58,175,111,2,43,32,58,175,76,2,45,32,58,175,67,2,-73,32,58,175,64,230,86,7,175,75,130,155,100,157,239,80,0,0,53,158,-110,0,95,75,27,0,95,75,45,0,95,75,62,0,95,75,80,0,95,113,-132,74,35,149,59,74,34,96,9,0,58,175,118,131,166,98,189,131,179,96,-37,0,53,131,103,69,91,172,96,224,29,1,224,49,1,224,39,5,128,237,-227,59,2,172,74,74,129,172,64,2,62,32,58,171,229,74,125,171,227,2,-60,32,58,171,225,138,122,171,225,106,79,108,107,75,216,0,58,171,235,74,-76,171,232,65,98,171,207,2,80,32,58,171,205,195,255,164,58,194,34,224,-20,11,224,17,8,224,14,5,224,11,2,192,8,229,132,0,172,47,250,236,-5,172,57,4,110,101,103,32,58,172,55,2,42,32,58,172,49,2,45,32,-58,172,45,2,43,32,58,172,37,224,148,68,0,58,172,100,199,88,64,17,-225,225,0,73,145,68,90,66,26,75,255,96,12,165,226,1,64,58,204,113,-3,53,53,32,58,172,54,2,73,32,58,172,51,64,41,66,76,76,41,0,-58,172,59,64,29,128,224,64,9,168,134,7,109,97,108,108,111,99,32,58,-172,56,224,158,2,0,58,172,58,2,85,32,58,172,57,224,198,14,0,58,-172,74,64,19,0,95,76,37,1,64,95,108,73,172,72,103,221,107,253,172,-77,6,114,97,105,115,101,32,58,172,79,7,65,46,114,101,97,100,32,58,-172,80,13,73,79,46,103,101,116,65,114,103,82,101,102,32,58,172,46,4,-95,51,50,32,95,108,47,75,108,229,59,1,5,115,116,100,101,114,114,101,-56,172,65,2,73,79,46,128,20,1,32,58,171,196,96,59,75,148,224,59,-9,2,111,117,116,128,59,205,35,67,160,0,58,171,207,128,73,4,111,117,-116,32,58,223,110,3,51,54,32,58,171,205,2,73,32,58,171,195,128,95,-154,78,224,95,6,1,105,110,96,94,171,219,3,75,52,32,58,171,189,128,-91,3,105,110,32,58,171,186,129,89,0,95,75,19,102,69,135,247,231,167,-0,0,95,75,109,194,70,231,254,3,97,132,0,95,107,236,64,104,205,69,-225,195,1,171,190,203,222,2,50,56,32,101,26,162,72,75,176,1,64,58,-171,202,93,75,171,192,0,46,162,20,171,197,76,147,0,58,171,175,13,73,-79,46,112,101,114,102,111,114,109,73,79,32,58,171,185,0,75,107,3,231,-232,1,0,58,171,99,0,95,64,192,66,134,96,123,104,157,88,2,225,4,-0,3,62,62,32,58,203,107,64,66,69,8,110,137,0,51,232,241,0,90,-229,156,18,72,26,188,28,160,9,0,58,221,250,156,139,72,217,163,37,75,-33,0,95,74,209,90,26,224,35,2,96,32,118,153,192,32,0,95,101,85,-221,21,0,55,86,206,224,47,12,96,150,116,254,65,163,0,58,171,108,113,-122,96,9,71,177,168,123,129,19,153,11,253,0,4,138,156,128,253,234,221,-1,0,49,171,58,192,12,96,199,171,10,129,27,96,61,142,76,235,48,2,-143,80,194,228,97,243,109,235,129,219,71,192,129,81,73,13,96,36,64,199,-64,193,69,156,69,155,128,232,2,75,32,58,128,203,143,216,200,210,0,58,-164,81,9,79,46,114,101,116,117,114,110,32,58,128,201,97,181,2,61,32,-58,128,197,2,80,32,58,226,192,3,228,30,0,229,0,32,0,58,226,178,-1,228,89,11,231,83,0,0,50,143,39,64,200,1,95,57,67,143,224,0,-255,224,0,255,224,0,255,224,0,137,1,32,125,-};-unsigned char *combexpr = data;-int combexprlen = 43133;+122,76,90,49,146,171,0,0,31,118,56,46,48,10,57,55,51,10,65,32,+95,48,32,95,50,52,32,64,95,50,53,32,95,51,53,32,64,95,51,55,+32,1,64,64,224,22,4,1,52,48,224,22,13,0,50,224,22,0,1,49,+49,160,23,7,51,54,50,32,64,67,39,32,224,17,0,5,64,66,32,95,+49,50,160,11,7,83,32,83,32,95,51,54,54,64,4,0,56,96,45,31,+57,32,95,51,55,49,32,73,32,64,64,102,114,111,109,85,84,70,56,32,+34,45,45,99,112,112,34,32,64,64,64,64,64,24,3,95,51,56,54,64,+12,64,73,224,103,0,1,56,56,64,79,3,39,32,83,39,224,194,0,10,+64,64,67,39,66,32,66,32,95,51,57,64,17,0,50,96,58,224,108,26,+6,118,101,114,115,105,111,110,128,112,96,188,192,80,12,66,32,95,52,49,+54,32,64,67,32,95,50,53,64,237,64,5,7,79,32,35,51,50,32,64,+75,64,94,1,52,49,64,254,64,8,1,50,51,65,16,96,133,224,150,62,+2,104,101,108,161,4,224,147,12,0,66,128,147,224,49,1,6,85,115,97,+103,101,58,32,96,50,224,176,4,224,34,1,21,32,91,102,105,108,101,32,+46,46,46,93,32,91,32,45,68,115,121,109,32,92,124,128,8,3,61,118,+97,108,96,12,12,73,112,97,116,104,32,93,42,32,32,91,45,79,64,47,+2,93,94,42,64,84,224,75,6,15,94,41,94,41,91,45,45,110,111,109,+97,99,114,111,93,32,96,11,3,108,105,110,101,96,10,64,8,5,112,114,+97,103,109,97,96,14,224,10,2,3,116,101,120,116,224,81,20,4,115,116,+114,105,112,96,42,96,9,3,45,101,111,108,96,13,5,104,97,115,104,101,+115,128,93,4,97,121,111,117,116,96,10,3,117,110,108,105,192,79,224,74,+6,0,32,98,71,3,32,115,116,100,64,7,8,45,111,112,116,105,111,110,+115,32,96,54,7,105,110,99,108,117,100,101,61,64,223,4,110,97,109,101,+93,161,105,225,203,8,7,66,32,67,32,67,39,32,83,98,213,128,8,160,+9,160,12,96,13,224,29,0,0,39,97,161,0,66,64,11,224,8,5,0,+39,65,177,0,66,226,20,2,0,66,98,35,226,19,2,2,52,50,53,224,+91,0,224,38,3,193,240,128,10,225,243,6,6,110,107,110,111,119,110,32,+128,219,129,251,64,178,0,39,193,255,1,52,50,128,57,224,55,6,10,44,+32,102,111,114,32,118,97,108,105,100,160,59,4,115,32,116,114,121,226,60,+5,226,55,2,130,141,129,101,225,36,4,3,55,32,35,49,225,57,0,96,+121,96,235,224,232,2,64,139,224,229,1,100,26,4,56,50,32,95,55,67,+191,4,95,57,57,32,64,96,64,228,88,0,64,234,224,120,1,18,65,116,+32,109,111,115,116,32,111,110,101,32,111,117,116,112,117,116,32,98,193,20,+40,45,79,41,32,99,97,110,32,98,101,32,115,112,101,99,105,102,105,101,+100,96,156,224,152,2,64,111,128,0,131,144,0,67,161,67,0,83,64,31,+64,126,129,108,0,66,161,153,1,51,57,196,178,3,64,95,57,52,64,7,+2,95,51,53,68,185,1,48,57,96,72,129,231,128,26,2,95,51,50,128,+20,64,15,65,182,2,95,57,52,65,104,2,95,57,52,101,15,1,57,52,+96,95,2,95,57,55,225,29,2,9,58,57,55,50,32,64,10,65,32,89,+66,23,1,32,66,96,142,130,93,98,29,64,5,226,64,0,4,66,32,95,+53,48,64,89,64,18,128,122,224,9,12,160,65,66,102,10,66,32,95,56,+56,55,32,64,95,55,48,96,132,128,6,1,64,66,96,111,1,80,32,68,+176,192,119,161,16,64,251,128,65,2,32,61,61,65,137,128,173,64,125,0,+85,160,25,3,95,49,50,51,224,194,0,224,82,43,129,133,224,82,68,128,+61,224,82,24,2,95,57,54,160,20,128,72,160,2,224,60,0,98,11,129,+124,128,20,224,21,0,64,1,194,27,64,92,1,52,52,64,4,3,55,32,+64,35,97,236,160,0,224,85,3,64,162,224,85,4,65,155,224,81,4,0,+67,160,121,224,19,4,224,99,12,0,55,162,90,198,57,0,39,64,2,100,+71,226,176,3,164,80,64,103,0,80,96,26,225,4,4,224,97,1,98,239,+1,57,55,71,194,1,53,48,132,211,224,87,9,192,140,128,11,2,67,39,+32,64,82,225,86,6,224,52,2,96,237,224,51,3,160,26,96,53,67,225,+64,54,129,207,2,95,49,54,103,249,97,120,96,48,162,236,1,32,64,225,+87,4,135,71,193,38,225,126,16,128,38,98,30,96,101,192,17,128,130,224,+175,5,96,40,192,129,160,135,160,6,0,58,99,152,3,10,65,32,83,96,+145,96,153,2,32,95,57,128,170,128,131,194,121,225,255,11,0,83,64,233,+128,251,226,66,0,224,37,3,71,216,196,48,130,13,224,32,6,0,56,96,+70,225,254,14,96,194,69,178,68,120,0,66,64,150,73,150,2,56,56,57,+160,33,229,30,1,2,47,92,92,229,145,1,64,46,2,95,57,54,105,42,+128,117,192,67,132,223,1,57,54,65,42,97,169,64,190,0,85,99,106,0,+64,64,235,133,14,2,95,51,54,67,254,4,79,32,35,52,57,136,222,5,+64,64,64,85,32,65,64,8,3,95,52,52,49,99,102,224,166,0,1,64,+35,96,45,128,0,65,50,3,95,51,55,56,160,27,232,211,17,199,118,128,+181,165,69,224,234,4,96,136,0,55,70,86,0,48,192,94,64,68,0,67,+70,49,0,48,169,51,67,217,64,56,0,58,98,214,5,10,65,32,79,32,+80,230,52,2,232,148,0,104,99,0,57,70,202,0,64,224,33,9,72,161,+160,32,65,112,224,32,7,232,192,1,160,36,66,26,224,36,7,224,32,4,+65,210,224,32,7,72,236,160,30,64,183,224,30,7,104,224,160,31,65,83,+224,31,12,73,0,160,35,65,219,224,35,7,137,22,160,32,65,21,224,201,+8,105,44,128,32,0,54,65,84,224,32,7,105,66,160,31,130,1,225,43,+7,2,119,97,114,107,30,1,95,57,75,222,194,27,128,0,0,58,97,139,+1,10,65,98,85,133,155,1,85,32,64,21,0,56,224,21,2,64,86,128,+21,0,55,96,21,64,19,1,52,32,65,217,0,58,98,177,224,40,0,64,+94,128,40,0,53,160,40,1,95,49,130,142,1,95,49,103,179,0,58,99,+164,99,185,224,1,8,3,39,32,95,57,64,44,71,204,71,106,139,102,2,+57,53,49,71,182,98,6,224,26,14,198,80,224,27,11,133,50,224,19,5,+99,189,224,18,5,99,118,64,129,0,49,65,233,224,27,9,224,17,5,196,+237,224,112,11,100,59,224,19,6,102,17,224,18,4,97,201,224,18,6,99,+144,224,84,12,97,182,65,59,0,51,225,126,0,0,48,193,126,136,147,3,+80,32,35,57,192,17,133,26,3,80,32,35,56,192,17,131,102,3,80,32,+35,55,160,17,64,145,128,17,193,198,64,183,128,17,0,53,192,17,225,235,+0,0,54,192,17,129,234,3,80,32,35,51,192,17,193,230,73,173,128,17,+129,222,64,162,192,17,224,180,0,192,179,65,203,78,187,1,54,54,136,41,+198,93,165,138,2,67,32,60,69,71,161,145,224,25,9,136,230,224,26,13,+98,10,135,191,230,173,0,160,26,171,143,0,85,69,59,69,70,232,144,1,+134,89,66,122,1,64,85,194,168,129,224,0,85,64,61,103,176,224,49,5,+64,102,160,49,128,37,133,90,132,222,128,0,224,132,13,162,197,224,87,15,+64,30,224,87,21,224,59,17,65,21,224,59,10,2,57,53,48,67,134,206,+173,224,160,1,225,67,15,96,64,224,189,13,98,180,225,66,12,64,25,225,+66,16,224,44,6,64,36,224,43,11,224,116,13,96,29,224,70,11,102,73,+224,114,30,144,229,224,114,10,225,3,14,194,70,224,25,9,235,211,0,224,+168,8,176,228,224,124,9,100,63,224,168,30,108,140,225,27,32,226,210,16,+226,209,20,224,43,6,226,203,2,225,27,6,192,115,227,98,5,225,0,16,+226,219,1,224,97,6,226,213,2,224,141,24,226,197,2,224,141,5,224,44,+11,226,117,15,136,156,0,51,165,63,68,113,133,19,76,165,209,206,70,183,+64,74,172,157,96,20,128,216,206,82,96,8,205,205,1,49,53,162,252,99,+85,201,126,224,16,3,105,105,224,122,0,96,117,133,119,203,204,224,1,3,+172,95,160,66,224,29,18,224,26,17,224,23,14,224,20,11,224,17,8,224,+14,5,224,11,2,192,8,108,147,128,0,0,58,103,148,101,193,5,75,32,+95,51,51,55,232,93,2,29,92,34,99,112,112,104,115,115,114,99,47,109,+97,108,99,111,108,109,45,119,97,108,108,97,99,101,45,117,110,105,83,153,+1,101,47,96,33,6,45,49,46,50,48,46,57,128,12,9,46,104,115,92,+34,44,56,48,58,49,138,72,102,20,79,114,2,10,65,32,65,88,0,75,+139,227,74,139,96,118,138,104,0,90,203,14,0,58,111,172,96,43,0,90,+224,43,0,134,136,240,17,3,103,205,208,19,193,158,129,231,143,113,224,29,+1,172,126,0,57,65,183,193,217,66,100,98,219,241,206,2,1,95,57,112,+228,0,54,71,154,85,85,141,183,0,57,85,73,64,0,0,80,233,121,4,+3,115,116,100,105,169,118,0,52,66,15,108,117,1,95,55,141,196,0,58,+112,135,71,4,2,55,48,51,149,185,0,58,96,38,96,196,65,131,1,95,+57,117,183,1,57,52,66,193,131,103,2,95,54,57,66,225,64,193,245,74,+1,2,54,57,57,242,81,3,14,84,70,45,56,47,47,82,79,85,78,68,+84,82,73,80,172,95,204,197,242,152,1,86,2,96,189,0,52,135,24,64,+213,69,37,0,58,96,205,1,10,65,65,134,0,50,96,148,131,58,161,50,+1,57,51,101,189,0,54,77,127,128,49,0,58,96,167,226,230,0,2,95,+57,51,99,133,97,104,110,109,0,95,96,95,128,127,160,199,193,115,192,15,+128,215,134,214,239,37,3,0,95,99,72,0,95,143,180,0,58,96,123,96,+104,0,95,70,215,0,51,65,128,132,136,0,83,110,187,96,124,99,138,2,+95,57,51,101,141,96,9,96,108,96,9,104,82,0,58,96,160,65,121,1,+57,51,68,33,83,97,0,58,96,27,128,19,2,53,32,58,96,61,224,33,+2,0,56,96,33,130,97,192,19,96,249,64,91,160,249,96,146,97,83,242,+150,5,64,125,160,200,96,159,105,207,86,128,226,140,0,96,27,128,25,160,+234,0,58,64,99,97,116,169,53,101,21,69,70,0,58,96,58,20,10,65,+32,73,79,46,115,101,116,109,97,115,107,105,110,103,115,116,97,116,101,64,+182,129,170,224,138,0,82,132,64,90,109,166,0,58,97,48,96,84,109,239,+65,187,101,64,66,232,192,15,96,131,97,18,64,6,177,134,128,255,64,68,+66,22,2,50,32,58,96,17,130,34,96,25,129,59,0,75,67,98,0,58,+96,60,128,160,0,103,224,160,8,64,148,96,160,1,49,52,131,64,0,58,+99,80,76,14,98,8,227,148,6,3,95,56,57,48,97,220,1,95,57,84,+125,1,95,56,79,119,2,95,56,56,133,93,65,54,128,57,227,242,13,131,+155,147,253,196,239,248,203,1,194,146,241,141,0,163,117,1,56,56,65,161,+120,23,2,95,57,50,99,227,146,31,101,23,235,157,0,0,56,143,230,144,+127,147,248,172,58,1,57,48,128,5,64,65,65,255,65,55,148,137,0,55,+140,101,130,23,2,55,51,53,64,214,135,77,172,253,0,56,65,131,128,58,+128,70,2,64,95,56,143,48,0,56,111,48,96,0,0,58,97,11,162,28,+0,65,107,81,1,64,75,88,213,73,131,100,186,0,58,96,86,164,72,70,+233,160,133,64,142,88,183,64,139,0,57,137,203,65,112,121,32,65,42,74,+125,135,82,0,57,138,224,1,57,49,135,80,3,95,57,49,57,97,171,194,+64,149,1,229,31,0,0,79,99,115,145,154,133,60,161,206,164,172,241,98,+10,180,4,224,39,25,165,101,132,77,64,40,101,169,0,54,178,63,129,78,+160,231,96,16,224,136,0,3,64,64,82,32,129,199,224,103,0,0,83,160,+103,179,203,96,10,162,3,241,195,5,208,188,224,90,27,224,35,27,72,165,+100,48,65,71,134,210,96,37,226,62,1,98,65,98,101,243,103,20,0,57,+132,56,128,183,224,181,1,139,214,230,5,1,10,98,101,103,105,110,123,99,+111,100,101,125,134,0,160,158,161,216,243,218,4,64,99,224,133,1,166,40,+225,17,8,224,120,9,242,47,25,2,101,110,100,224,131,3,224,133,7,226,+94,0,229,8,0,97,65,1,95,57,166,144,128,0,166,55,226,33,17,143,+27,160,153,224,184,9,69,182,192,30,128,96,212,51,1,95,52,64,32,128,+250,70,119,71,11,69,219,0,51,128,127,160,147,1,57,49,68,115,5,53,+48,55,32,95,54,134,74,1,95,52,103,3,96,192,99,208,224,200,0,224,+100,2,96,57,116,183,84,229,165,239,224,241,1,248,54,0,128,114,0,52,+116,151,225,30,1,132,125,128,44,225,52,14,0,58,96,8,133,144,135,168,+64,53,3,10,65,32,90,160,1,87,91,96,38,0,54,96,22,2,66,32,+90,64,149,224,4,1,96,6,169,231,0,58,96,229,224,37,11,0,90,66,+210,160,34,133,169,3,75,32,75,51,96,110,133,126,107,82,193,152,203,75,+226,188,7,68,189,100,89,64,30,0,82,160,47,214,3,71,156,250,133,0,+128,59,129,244,99,164,168,37,224,2,0,128,20,224,21,14,163,230,224,2,+0,224,43,0,224,15,2,134,8,162,72,64,3,224,19,0,193,19,224,16,+2,247,245,0,130,13,224,154,11,236,44,0,192,83,228,89,2,200,153,0,+75,133,166,128,24,1,95,51,113,252,163,72,96,5,1,95,57,79,189,227,+57,1,6,112,114,111,103,114,97,109,99,55,224,21,1,5,99,111,109,109,+101,110,115,234,128,75,165,21,73,99,229,12,3,165,38,163,167,101,214,192,+49,224,228,3,160,225,247,119,3,105,128,64,51,0,56,72,170,72,115,193,+151,224,47,1,160,251,161,14,161,11,224,255,4,233,147,3,160,249,96,253,+224,176,41,224,177,53,192,60,225,196,46,162,89,128,157,96,30,67,44,227,+61,0,225,198,26,225,176,3,225,220,13,183,30,225,203,103,68,48,103,169,+128,213,198,178,161,29,227,152,1,224,68,19,0,58,96,140,138,79,129,51,+96,60,160,5,230,151,2,238,45,3,1,92,34,160,246,230,115,0,128,46,+97,114,128,196,254,234,6,4,76,105,110,101,32,160,52,193,35,223,29,0,+49,73,67,0,51,252,162,2,224,59,6,0,58,160,56,97,23,96,50,224,+34,8,0,32,88,40,5,32,98,101,102,111,114,160,102,255,62,10,64,35,+0,46,255,61,2,192,170,97,123,224,10,8,224,99,8,1,73,110,158,245,+192,63,225,234,2,96,105,224,249,14,2,32,97,116,128,157,224,253,136,96,+0,225,173,161,0,58,99,150,98,169,64,1,0,80,72,166,66,252,195,0,+167,163,104,40,224,15,2,96,168,132,50,224,193,10,231,216,4,224,14,0,+64,67,0,58,107,91,206,22,5,54,32,95,55,32,95,64,17,1,95,54,+227,106,0,80,139,64,25,0,54,78,118,2,95,56,57,230,253,5,74,221,+103,61,185,19,80,49,2,95,57,48,109,202,0,48,109,154,172,14,108,174,+235,199,3,236,72,31,96,173,3,80,32,95,56,111,198,233,190,4,218,28,+0,58,109,57,241,144,1,177,105,96,24,241,169,0,64,22,224,24,3,136,+129,96,24,64,2,97,28,0,58,96,179,128,22,0,51,168,155,160,49,64,+27,200,119,64,1,0,89,193,129,64,1,239,211,0,237,178,0,140,105,159,+6,250,195,0,133,36,197,183,232,32,7,160,21,96,18,192,88,140,182,224,+35,7,224,41,3,224,43,1,96,136,235,100,3,226,103,1,7,95,95,70,+73,76,69,95,95,227,23,2,224,79,54,2,76,73,78,224,79,20,166,13,+224,79,32,2,68,65,84,224,79,68,2,84,73,77,224,79,5,96,45,192,+77,113,186,192,65,96,10,236,209,2,93,255,93,236,160,34,66,184,172,81,+224,151,1,224,2,7,192,30,225,79,3,224,106,2,224,181,7,224,49,2,+224,151,15,224,85,0,224,14,3,206,199,196,17,224,30,0,229,210,0,224,+173,6,224,118,2,234,45,6,224,18,2,128,56,64,200,240,96,0,64,3,+224,24,3,229,253,0,231,253,1,0,95,67,184,150,199,192,5,153,207,225,+34,1,0,79,128,149,64,48,72,142,192,189,3,95,55,53,55,64,168,2,+50,48,49,172,249,238,197,0,104,96,253,243,2,224,173,3,224,175,1,224,+22,65,225,172,13,160,25,97,15,97,80,200,227,225,95,7,224,89,5,119,+245,160,0,226,190,3,128,85,192,35,96,85,224,59,4,226,219,12,226,246,+0,129,65,161,45,133,17,0,57,177,32,64,7,2,95,55,55,248,73,1,+224,56,1,184,13,104,180,192,115,128,88,242,116,3,96,15,2,55,57,53,+192,16,230,3,7,229,244,8,224,101,0,226,46,6,226,52,3,224,233,2,+226,54,1,234,53,5,226,58,16,227,94,4,98,62,224,56,1,109,254,129,+43,1,95,55,115,87,226,41,7,226,252,7,120,223,248,3,53,22,76,97,+110,103,117,97,103,101,47,80,114,101,112,114,111,99,101,115,115,111,114,47,+67,64,34,8,47,77,97,99,114,111,80,97,115,184,35,5,49,53,50,58,+50,50,196,114,225,108,6,1,95,54,68,166,128,9,230,38,2,3,95,56,+57,52,64,180,0,53,234,122,5,7,37,72,58,37,77,58,37,83,202,130,+1,95,56,97,242,226,131,18,224,104,47,6,100,32,37,98,32,37,89,224,+104,31,65,210,96,18,64,113,232,97,1,2,95,57,48,178,133,224,38,14,+1,49,52,112,172,181,164,0,48,226,78,0,224,101,8,227,146,2,97,239,+96,219,64,30,244,52,3,232,125,0,160,2,96,19,226,57,3,231,90,7,+160,2,224,39,12,226,180,0,224,120,9,224,124,15,224,181,8,224,141,3,+131,221,234,80,0,224,194,17,224,97,36,173,6,66,245,104,144,137,235,160,+231,128,10,224,75,0,64,142,2,95,50,53,151,84,205,13,2,95,49,55,+120,136,73,67,1,51,57,208,196,2,95,57,48,64,87,244,68,2,103,83,+1,57,48,173,81,160,220,1,95,56,89,89,129,26,1,95,55,73,136,144,+34,64,0,0,58,105,243,105,23,114,81,196,93,1,95,52,120,215,96,149,+246,201,1,243,57,0,105,25,96,61,0,51,234,239,4,0,75,71,125,0,+54,227,178,2,75,34,6,98,114,101,97,107,115,44,76,101,227,193,68,6,+72,97,115,104,68,101,102,75,132,99,194,3,50,53,58,54,131,8,224,134,+126,107,125,120,172,98,1,64,7,0,58,97,178,202,163,64,14,140,48,106,+251,65,204,0,58,99,140,88,186,228,19,0,2,56,57,55,234,158,5,98,+41,0,56,148,127,0,50,73,63,123,245,2,35,49,48,163,199,0,58,100,+7,89,26,1,32,58,96,40,64,78,2,56,57,54,64,13,139,56,3,94,+71,69,84,73,100,3,77,73,76,76,96,36,0,54,128,36,80,105,225,53,+1,16,100,101,102,97,117,108,116,84,105,109,101,76,111,99,97,108,101,64,+214,0,58,100,134,148,14,230,35,0,228,78,3,67,12,83,228,99,13,0,+58,68,185,162,33,98,238,131,108,172,69,195,70,221,120,227,224,4,224,30,+1,128,16,93,47,0,50,224,40,1,227,130,1,120,83,234,72,1,2,79,+32,35,89,240,96,126,224,45,2,224,120,6,224,100,1,224,9,8,0,39,+236,30,5,172,45,64,16,228,116,0,232,23,6,164,137,240,150,3,244,147,+13,224,182,3,242,46,2,228,214,10,232,83,12,161,8,0,64,104,171,140,+244,160,61,172,145,224,8,2,234,163,4,224,69,2,225,42,7,0,49,236,+226,2,224,157,5,132,164,247,251,6,64,50,237,21,3,224,188,5,189,85,+167,241,64,244,248,164,0,229,51,3,159,93,225,253,1,160,10,1,95,55,+122,203,96,0,160,96,224,186,3,226,37,2,225,50,9,160,2,224,29,1,+165,193,230,103,6,224,220,0,97,164,224,17,3,138,89,224,31,1,128,13,+64,71,233,198,2,146,172,2,95,56,52,155,95,64,0,225,115,3,224,2,+0,225,124,31,230,52,2,192,45,224,73,13,224,67,1,225,141,8,225,192,+4,192,175,100,26,138,248,161,42,244,120,1,243,108,1,2,49,57,49,243,+109,5,224,54,3,224,53,16,243,162,7,224,52,3,0,75,225,163,3,155,+226,130,0,160,6,134,121,224,37,2,64,16,64,97,160,66,226,4,2,90,+59,80,102,0,73,166,175,226,214,1,227,11,15,226,177,3,248,237,2,128,+113,64,5,0,58,108,12,230,237,42,159,44,103,158,69,38,93,82,102,236,+128,212,0,67,74,236,196,238,133,207,132,43,149,174,96,2,235,184,3,238,+174,3,133,20,161,245,94,114,0,50,254,120,0,2,95,56,56,137,252,94,+140,194,129,139,146,128,233,2,83,32,85,66,7,241,83,8,98,204,160,4,+229,162,1,64,180,178,96,251,71,15,8,35,105,110,99,108,117,100,101,32,+202,81,210,244,224,48,15,1,92,34,242,254,2,243,68,8,0,35,115,68,+0,49,192,77,224,138,2,81,168,224,69,14,64,239,131,93,255,66,3,0,+83,64,125,0,57,82,133,76,112,0,51,76,118,64,111,0,51,64,204,2,+56,56,57,252,31,22,2,92,92,47,160,95,161,83,65,168,243,58,6,130,+117,161,172,226,13,0,0,52,99,233,98,84,2,95,51,54,155,132,128,42,+0,58,64,118,135,52,5,56,48,32,75,32,85,228,69,0,227,169,1,129,+21,224,11,0,2,95,56,56,196,223,0,58,96,200,242,143,0,224,46,1,+224,61,17,192,8,187,72,96,75,243,3,0,128,144,0,54,224,17,1,104,+108,98,57,200,108,136,94,96,255,128,18,0,50,104,130,64,18,227,20,2,+165,68,128,9,132,130,135,48,229,112,2,225,40,1,196,160,194,238,160,164,+2,95,56,55,129,77,244,54,0,99,194,2,95,52,51,80,51,134,16,225,+105,2,98,254,67,204,3,95,56,56,49,168,234,67,119,0,55,65,163,190,+209,78,53,189,12,0,56,81,223,0,58,99,41,244,53,1,161,4,96,206,+181,131,0,39,66,231,157,33,0,54,171,4,98,131,95,210,2,56,55,50,+72,80,67,71,162,147,64,5,0,79,149,103,229,78,0,3,95,56,55,57,+96,106,169,146,0,56,94,137,0,55,64,83,128,197,0,58,96,31,248,153,+3,231,241,2,64,110,129,31,134,133,131,241,2,95,56,51,66,187,97,35,+253,203,3,128,13,229,145,2,128,35,0,48,77,121,137,222,135,238,1,95,+56,79,212,0,58,96,46,226,62,2,136,162,225,162,1,225,171,4,230,63,+4,232,189,1,225,118,0,64,184,228,130,0,102,61,201,170,1,95,51,65,+39,1,95,52,99,111,64,15,0,48,234,130,1,5,52,49,53,32,95,52,+64,149,227,248,8,31,85,110,109,97,116,99,104,101,100,32,35,105,102,58,+32,112,111,115,105,116,105,111,110,115,32,111,102,32,111,112,101,110,12,32,+99,111,110,116,101,120,116,32,97,114,101,58,163,251,64,81,70,19,131,211,+106,79,1,52,51,201,53,228,10,0,232,78,1,133,242,98,193,224,225,6,+96,227,0,66,65,222,224,54,10,224,42,7,242,105,25,231,141,4,238,154,+0,224,40,1,161,55,200,79,224,25,3,242,46,0,224,69,9,224,72,0,+224,184,7,96,75,224,146,13,163,160,167,187,66,104,100,245,184,80,192,0,+226,4,10,160,53,224,31,20,226,42,0,130,181,224,171,2,163,231,224,36,+6,224,71,16,160,43,224,146,2,224,41,15,224,50,1,224,191,26,224,45,+2,224,93,5,192,175,224,31,4,224,2,12,224,52,4,224,191,23,224,56,+17,99,30,224,42,2,224,5,6,225,61,7,224,60,6,225,211,8,224,1,+5,247,19,14,0,100,110,96,247,17,2,224,0,0,224,177,6,224,140,3,+224,14,9,224,140,61,4,117,110,100,101,102,224,139,26,225,79,6,225,45,+7,224,139,60,1,105,102,224,140,132,224,139,14,227,75,3,224,139,12,192,+11,227,165,0,128,0,224,131,19,224,178,7,224,43,19,224,175,16,224,172,+10,225,55,6,226,65,6,224,198,4,224,129,57,2,101,108,115,226,213,11,+224,131,102,225,7,12,225,179,6,224,131,86,1,110,100,225,140,121,5,112,+114,97,103,109,97,224,133,10,199,81,0,66,120,0,192,13,96,98,250,247,+4,141,143,224,22,3,192,134,103,28,224,11,10,239,150,9,128,125,192,16,+250,249,8,128,233,230,255,6,232,4,4,65,8,238,9,2,84,244,184,160,+106,127,224,212,0,160,0,231,152,3,249,219,5,225,108,6,227,156,4,224,+159,1,224,1,1,225,135,11,224,39,11,64,1,227,144,15,141,127,225,130,+8,230,86,6,228,48,12,224,100,9,224,144,10,224,36,9,64,1,224,141,+14,6,119,97,114,110,105,110,103,224,141,7,226,117,4,226,132,6,224,113,+54,4,101,114,114,111,114,224,111,10,224,2,9,224,247,0,224,87,6,224,+149,0,224,68,2,224,128,11,128,34,224,132,12,78,181,224,131,6,224,61,+7,207,193,78,22,112,105,1,51,49,234,95,2,239,225,0,227,43,6,129,+173,96,65,227,41,0,224,8,4,64,189,204,46,138,82,2,95,49,53,83,+68,1,52,51,74,196,0,52,137,232,128,72,112,227,106,218,109,106,64,67,+1,95,52,76,27,98,252,66,245,1,52,52,188,91,224,27,2,142,60,224,+211,6,225,181,6,225,202,2,227,218,1,224,38,8,224,19,10,224,16,7,+224,13,0,108,223,142,250,128,28,128,20,107,243,1,53,49,113,97,0,55,+92,174,225,67,2,227,171,3,226,0,34,235,132,9,64,1,235,79,14,0,+83,64,71,225,97,0,225,197,0,80,87,236,246,2,192,0,225,211,12,253,+62,1,128,251,237,32,0,193,166,64,76,0,57,64,20,76,174,1,95,54,+193,193,237,63,4,128,15,237,66,5,0,87,131,123,20,58,32,117,110,107,+110,111,119,110,32,100,105,114,101,99,116,105,118,101,32,35,130,156,98,2,+146,14,224,61,8,4,94,42,105,110,32,96,38,237,73,7,224,203,7,165,+209,97,234,128,150,226,39,4,226,11,9,129,201,1,95,54,115,49,225,165,+6,226,243,255,128,2,226,243,4,128,31,160,45,226,245,11,116,199,2,95,+51,54,230,161,1,225,92,3,96,206,89,157,96,97,225,247,44,230,208,2,+160,226,130,159,65,117,128,5,194,158,128,166,231,70,26,96,31,226,62,3,+163,8,227,5,1,96,13,226,233,4,226,180,46,224,146,31,64,0,231,178,+7,161,204,232,131,16,245,158,6,226,13,1,226,186,0,129,220,224,131,1,+96,50,0,55,125,119,64,37,1,95,55,83,122,2,95,52,51,182,249,225,+72,0,224,98,0,0,85,161,87,192,86,228,58,3,119,87,224,193,1,128,+145,64,5,147,6,245,86,16,225,42,2,255,161,3,224,67,1,245,110,0,+147,57,224,80,2,115,89,163,195,224,0,0,224,222,1,160,9,161,98,133,+5,224,160,3,130,205,194,80,128,16,229,46,0,224,70,15,129,169,99,149,+66,252,226,233,1,242,87,44,107,48,93,203,226,48,10,241,246,11,224,149,+21,3,95,55,57,49,127,85,192,237,224,49,35,128,16,160,201,230,26,7,+226,69,4,226,101,3,194,9,1,95,56,66,43,226,59,1,193,93,193,195,+83,167,224,119,2,160,34,101,40,130,135,224,41,15,64,21,66,118,84,70,+225,232,1,224,59,37,96,180,103,12,224,70,6,192,55,99,23,161,33,128,+13,194,27,116,80,128,54,90,230,97,149,226,72,8,192,55,128,2,160,92,+227,35,2,224,28,8,224,15,5,224,64,3,64,26,224,33,5,69,129,117,+244,160,161,102,234,149,249,129,102,213,251,128,230,246,0,8,122,139,0,53,+64,19,65,20,64,19,166,119,96,0,224,206,8,76,187,131,3,1,95,51,+119,231,249,154,11,134,229,70,145,96,115,226,68,7,251,5,0,195,38,192,+17,224,94,5,99,58,247,72,0,224,119,27,224,61,17,193,43,162,19,128,+223,202,223,96,20,229,5,2,162,52,192,15,162,58,224,14,1,137,104,192,+53,96,32,134,177,192,101,97,85,135,223,1,56,55,96,216,96,235,1,56,+55,131,252,102,28,69,58,130,141,224,200,10,192,49,231,246,5,1,56,55,+245,2,1,192,139,165,180,224,171,2,224,170,0,226,63,1,160,9,96,8,+167,175,119,154,226,232,3,252,240,0,3,95,49,55,52,160,9,2,51,51,+57,97,184,160,32,86,183,2,55,53,55,253,156,0,110,151,1,64,35,102,+32,96,0,225,127,1,222,254,195,241,221,9,1,95,52,96,51,237,94,8,+161,157,74,70,226,124,1,226,207,1,231,126,12,232,247,6,225,0,5,192,+83,230,220,14,164,234,232,188,0,226,224,1,230,47,1,225,98,2,225,234,+1,64,124,203,126,235,178,4,139,169,224,49,4,225,129,0,224,77,5,160,+31,247,2,4,224,30,6,224,114,1,247,3,41,224,156,5,229,166,7,224,+2,1,247,202,10,226,76,0,224,90,10,138,193,224,90,0,239,165,9,224,+32,3,224,206,8,204,132,0,56,224,209,1,110,143,244,227,13,224,43,26,+96,39,224,30,17,244,161,9,227,236,2,237,93,7,224,166,2,224,195,1,+224,189,5,224,105,15,243,85,6,225,21,6,224,78,42,244,40,4,224,173,+5,224,77,1,224,74,1,0,67,224,74,17,243,107,5,128,46,99,44,101,+143,128,19,226,50,1,96,151,96,13,232,232,6,224,57,3,124,0,128,34,+66,61,192,122,92,8,156,9,230,213,2,128,101,64,34,251,236,0,128,34,+201,19,233,35,115,192,207,113,30,225,93,0,96,103,101,182,224,217,11,224,+251,24,161,87,196,73,230,246,0,160,0,225,26,1,239,79,4,233,64,36,+97,51,124,62,237,65,2,194,9,224,10,2,232,37,4,194,55,226,243,1,+232,202,0,224,240,19,230,195,1,137,26,224,223,7,224,122,1,161,77,235,+248,4,225,254,0,198,86,192,85,231,234,12,231,209,16,228,138,5,99,175,+239,213,4,226,176,2,97,151,231,99,37,224,192,1,231,70,18,230,57,9,+231,68,85,231,34,0,231,35,10,231,32,5,231,31,5,161,16,135,22,224,+245,29,224,228,19,231,30,5,231,23,3,96,13,2,51,51,55,227,142,2,+31,92,34,99,112,112,104,115,115,114,99,47,109,97,108,99,111,108,109,45,+119,97,108,108,97,99,101,45,117,110,105,118,101,3,114,115,101,47,96,33,+30,45,49,46,50,48,46,57,47,76,97,110,103,117,97,103,101,47,80,114,+101,112,114,111,99,101,115,115,111,114,47,67,64,34,64,5,0,73,69,192,+9,46,104,115,92,34,44,54,56,58,53,132,198,0,58,96,141,1,10,65,+139,181,64,170,87,53,132,191,196,202,65,61,66,194,226,120,3,194,122,0,+58,97,171,4,10,65,32,80,32,132,14,99,210,112,18,231,98,2,238,238,+1,98,168,0,95,169,116,160,15,1,35,57,164,142,96,12,96,43,192,33,+64,95,0,53,160,159,239,107,4,1,95,52,97,57,64,176,228,143,0,1,+64,64,171,148,0,58,98,176,5,10,65,32,85,32,90,224,1,2,0,75,+196,173,64,32,0,51,160,85,98,225,65,215,4,55,55,49,32,64,65,211,+160,253,194,28,128,184,99,6,1,54,55,64,108,67,92,139,193,1,95,56,+70,31,1,95,56,99,224,3,67,39,32,79,65,51,0,80,65,225,65,27,+240,165,10,0,35,157,140,0,32,199,104,96,174,0,79,128,243,162,74,96,+6,97,133,132,98,128,157,0,75,172,90,98,130,96,164,226,46,10,5,92,+34,44,48,58,48,225,215,0,0,50,96,225,3,95,56,55,48,224,37,2,+3,112,114,101,68,96,131,0,100,64,39,0,58,96,169,1,10,65,102,242,+114,93,65,232,3,95,55,48,54,65,180,196,95,138,103,0,58,64,72,129,+84,1,75,50,65,75,129,78,0,58,96,253,128,22,0,51,96,22,98,30,+0,58,97,26,161,97,64,1,194,31,64,0,227,42,1,168,44,227,145,6,+129,128,224,25,15,233,18,2,224,29,13,233,51,3,224,33,16,224,36,3,+224,37,20,224,40,4,224,41,23,224,44,5,224,45,26,224,48,6,224,49,+29,224,52,7,231,6,3,224,38,4,232,233,6,237,147,0,224,0,1,193,+138,224,55,5,224,103,14,224,40,19,224,43,6,224,83,30,224,75,16,224,+41,50,192,232,199,152,165,129,244,177,6,224,5,9,235,187,0,225,21,3,+192,1,0,89,224,96,1,224,28,9,224,32,6,224,172,14,230,121,1,224,+42,2,224,74,11,172,71,192,155,233,31,1,192,5,224,105,2,192,67,230,+182,5,192,250,64,25,245,180,1,160,13,224,2,4,224,242,16,165,197,5,+67,32,60,32,64,35,237,33,3,224,67,9,128,218,192,34,224,70,5,160,+203,128,70,230,235,2,224,37,5,148,227,224,22,4,75,207,192,19,224,103,+3,238,18,6,224,13,5,97,94,230,121,9,64,0,65,32,0,85,81,214,+70,32,134,105,81,175,224,27,0,129,66,64,74,65,98,98,10,69,201,0,+52,104,119,234,231,0,225,39,9,224,186,0,224,25,4,0,82,224,187,0,+227,133,7,128,24,224,41,1,225,236,1,224,184,5,150,244,224,44,7,225,+176,0,224,64,4,96,185,238,212,5,200,238,224,221,12,96,5,150,59,230,+161,5,1,32,32,236,220,0,224,252,11,224,134,1,128,13,234,242,1,97,+89,235,92,0,234,142,0,224,0,4,224,178,1,128,1,238,240,9,226,70,+17,128,28,162,70,235,165,1,224,37,4,225,8,1,3,67,32,61,61,224,+39,17,193,177,225,155,8,229,27,0,224,81,1,252,0,0,224,100,4,64,+44,96,42,160,173,160,26,96,17,90,107,172,202,225,4,1,192,106,240,56,+8,192,36,64,61,75,239,2,95,55,48,161,184,226,124,12,224,78,0,224,+1,17,226,143,1,224,43,21,194,161,224,37,9,225,151,10,225,49,0,224,+1,1,226,183,15,235,115,1,224,47,6,253,74,13,226,189,13,241,146,3,+196,217,227,159,9,233,168,2,162,129,65,75,161,48,225,55,8,192,105,238,+42,13,226,134,6,253,246,14,227,172,16,227,109,1,224,50,8,229,99,4,+226,240,9,197,205,224,51,3,225,111,35,228,39,2,236,187,11,195,79,228,+226,19,1,52,32,240,226,2,228,2,2,226,21,9,228,102,19,224,125,8,+227,78,0,224,123,19,0,50,224,123,15,160,57,163,112,232,203,10,224,41,+1,128,91,224,248,6,0,66,192,40,224,38,0,231,127,0,224,73,16,224,+70,27,160,108,224,65,11,224,62,4,224,53,2,161,192,64,12,193,10,226,+175,2,228,42,10,225,46,7,128,5,224,77,11,160,209,64,21,0,85,142,+92,0,52,90,18,1,56,52,103,106,0,67,76,145,246,252,2,224,89,60,+114,192,224,89,5,212,6,224,89,15,225,24,2,194,68,96,4,224,67,2,+228,238,16,226,2,3,130,204,225,127,0,64,14,161,78,65,106,129,110,192,+44,200,254,69,15,0,82,236,123,0,77,71,226,216,2,236,128,8,192,53,+160,252,129,170,241,248,4,224,38,0,143,207,168,74,164,245,160,94,239,200,+83,7,84,111,107,101,110,105,115,101,143,200,5,50,49,53,58,49,51,227,+177,13,192,1,234,153,3,224,31,11,224,35,7,225,115,6,224,2,2,234,+193,12,224,83,14,228,175,1,225,71,0,234,196,20,161,118,227,128,6,64,+43,234,200,67,232,150,3,228,9,10,224,74,35,235,19,255,225,39,10,235,+19,255,235,19,17,226,46,48,229,28,2,224,37,5,226,46,2,224,86,6,+234,212,8,96,78,225,116,8,231,224,13,224,181,3,224,43,2,182,156,225,+115,26,253,93,7,96,228,192,8,64,48,151,88,93,201,82,123,246,220,11,+225,143,5,1,45,123,232,36,4,233,81,53,194,95,82,195,0,35,234,185,+1,224,36,2,224,58,10,233,10,14,254,71,11,225,40,33,1,49,50,224,+63,1,226,157,34,1,125,45,226,157,20,225,246,2,198,182,226,124,9,128,+21,224,160,4,227,126,13,255,41,13,227,126,31,224,225,3,192,59,226,11,+23,250,231,7,224,254,18,224,84,0,195,72,224,88,3,160,147,117,65,121,+248,118,208,233,122,6,224,67,1,192,1,229,131,62,135,55,229,131,13,224,+47,2,228,58,5,90,37,224,161,7,226,24,9,229,148,17,224,0,1,224,+188,1,160,140,96,62,239,126,21,224,52,6,230,251,6,239,89,2,163,128,+231,164,2,224,76,1,228,210,29,236,192,2,224,37,5,225,125,10,226,197,+2,231,116,10,128,24,224,102,8,226,200,8,120,111,224,90,9,194,200,225,+19,7,224,198,1,224,45,1,225,16,2,224,89,2,224,90,12,201,53,129,+34,154,3,224,50,2,224,44,3,227,16,10,64,99,2,95,56,53,152,80,+226,13,0,249,55,2,224,63,22,98,120,192,63,224,54,2,224,65,8,225,+80,10,160,246,224,241,5,64,144,224,194,11,160,129,227,125,28,96,142,226,+219,24,192,14,160,26,224,47,5,228,237,21,64,1,241,231,213,241,233,9,+224,46,18,241,236,5,224,40,6,228,8,10,225,57,0,224,1,1,227,75,+15,241,239,144,224,229,9,224,226,10,224,152,4,230,244,75,224,62,2,226,+224,9,229,188,0,69,235,232,225,2,230,212,3,224,101,6,64,1,224,202,+47,233,203,13,224,203,71,2,52,57,32,105,73,233,177,16,161,200,232,221,+7,224,5,6,224,229,14,225,11,7,225,182,16,243,145,255,224,122,4,196,+248,224,123,19,243,145,21,240,27,7,225,59,6,232,63,1,225,117,7,224,+179,0,102,208,227,251,3,241,239,18,224,95,60,105,233,224,95,30,226,25,+1,128,95,225,191,10,244,88,9,169,2,224,80,23,224,77,30,224,73,25,+224,70,27,160,108,224,65,11,224,62,4,224,53,2,129,65,234,137,10,244,+166,191,224,89,81,245,0,77,226,0,13,128,164,64,1,0,83,226,19,0,+224,41,6,160,188,224,247,1,224,1,3,161,241,227,34,15,224,74,6,233,+41,6,98,20,192,88,224,85,6,236,226,7,235,101,12,128,82,239,20,11,+192,5,232,26,7,224,155,5,225,102,42,3,66,32,79,32,128,70,97,112,+160,12,225,187,0,233,129,13,226,41,9,231,172,1,0,49,160,78,224,73,+6,224,50,18,64,94,229,84,1,1,39,39,197,84,224,50,22,224,170,7,+224,148,23,64,190,64,51,0,52,224,222,3,192,58,194,21,193,191,128,76,+165,83,128,87,98,24,132,14,192,44,205,215,247,70,213,4,57,52,58,49,+49,230,233,1,234,89,5,224,233,3,192,1,247,47,1,224,25,7,192,1,+230,169,3,224,37,15,224,35,4,224,30,10,97,38,247,154,4,224,36,9,+192,1,247,193,5,230,230,7,224,2,0,228,32,3,230,236,3,224,200,18,+193,195,168,236,224,5,8,224,68,3,160,73,227,136,2,163,142,228,86,13,+224,116,4,224,34,6,224,157,4,224,154,13,164,202,240,70,8,64,0,231,+147,3,231,76,10,232,74,5,224,95,27,242,38,4,192,95,237,232,4,128,+5,224,106,20,224,97,20,233,8,3,224,38,8,164,207,3,67,32,61,61,+224,42,20,247,125,15,241,57,3,234,246,9,229,230,8,237,31,33,247,147,+69,1,39,32,244,198,22,240,149,6,96,12,162,112,194,170,243,227,5,65,+169,243,229,7,225,240,13,239,80,3,226,59,2,164,165,128,1,225,52,10,+225,104,7,240,76,1,224,102,9,229,41,0,224,28,11,0,90,224,79,14,+192,107,166,229,224,31,6,167,20,230,243,2,231,132,14,228,21,11,225,247,+8,193,68,199,161,162,43,193,89,160,32,128,73,244,167,2,225,172,0,129,+122,229,204,3,197,205,224,103,5,245,70,1,226,137,64,243,213,22,224,64,+4,225,41,10,240,200,2,228,192,0,207,155,224,222,19,233,51,6,128,191,+224,126,1,224,13,4,129,69,224,117,12,64,113,225,78,2,251,139,3,235,+131,1,128,0,224,201,1,64,1,245,37,255,245,37,221,226,154,0,131,135,+229,44,9,96,207,244,152,8,224,0,1,192,166,160,170,164,58,167,162,227,+139,13,224,52,5,194,212,224,22,9,193,234,248,33,6,224,37,5,226,174,+10,64,1,228,251,0,224,73,1,160,2,225,39,0,160,25,64,220,226,195,+6,128,21,192,176,230,31,9,225,19,14,227,228,2,249,61,32,224,1,9,+245,134,8,236,134,3,225,90,4,224,166,0,225,99,12,194,90,225,145,5,+224,42,11,224,123,1,252,157,34,227,68,7,96,42,229,230,0,224,105,6,+227,204,21,231,254,25,224,130,23,229,94,7,9,51,54,57,32,95,51,55,+49,32,73,244,56,4,242,125,3,225,172,3,0,57,148,97,224,54,5,236,+241,6,226,207,2,231,192,1,198,194,231,199,14,224,193,3,243,243,13,65,+114,231,246,11,234,13,8,231,170,10,225,219,5,225,32,10,231,171,19,230,+86,5,194,242,231,168,6,224,163,1,160,16,192,58,128,148,129,213,247,56,+7,128,56,99,24,0,79,134,213,225,73,1,231,186,2,225,6,6,240,125,+3,193,109,200,134,225,91,10,224,54,0,129,23,224,69,3,224,92,6,231,+221,102,227,248,4,64,62,225,8,13,192,57,233,108,4,224,229,17,227,64,+18,232,0,16,227,132,50,245,66,2,224,130,5,225,7,9,241,78,2,225,+7,29,241,43,5,224,51,30,240,128,8,226,136,5,224,158,3,224,178,0,+98,25,192,188,229,167,0,224,16,0,1,56,53,130,0,229,92,1,2,95,+56,54,116,62,96,30,251,79,0,64,0,229,209,17,225,26,5,64,11,225,+116,6,227,220,0,227,123,1,224,151,1,128,16,176,206,128,5,103,231,224,+89,1,96,37,226,148,2,224,173,1,194,48,230,162,16,192,93,245,35,27,+227,151,0,224,117,1,128,1,251,232,1,224,80,0,224,224,6,227,180,1,+128,209,230,170,5,162,92,224,67,1,224,61,7,224,64,2,224,61,22,163,+42,224,59,11,224,55,4,224,52,2,225,15,4,128,158,246,129,16,224,243,+1,228,237,2,228,234,4,225,78,14,245,190,10,224,76,71,192,223,96,51,+226,140,9,160,217,128,204,224,60,6,128,0,226,124,1,226,133,4,224,169,+6,165,42,105,116,140,61,128,98,237,112,12,128,50,230,187,1,224,98,8,+228,195,12,243,188,7,224,155,13,236,108,2,224,106,1,128,44,243,218,120,+5,49,55,49,58,49,50,250,197,4,108,46,229,67,1,2,51,54,56,129,+129,196,118,196,76,72,85,64,44,165,64,224,39,8,68,149,69,84,228,124,+0,1,95,49,96,7,0,83,65,219,7,53,56,32,64,95,54,48,52,98,+46,2,51,54,54,204,5,224,244,1,1,95,96,160,149,224,47,3,0,54,+224,47,17,0,39,224,48,0,224,33,15,7,40,41,44,91,93,59,123,125,+128,38,224,37,15,2,32,94,41,224,32,21,22,58,33,35,36,37,38,42,+43,46,47,60,61,62,63,64,92,92,92,94,92,124,45,126,192,52,193,15,+230,191,2,82,151,224,20,4,67,165,142,191,128,11,230,231,0,7,58,56,+54,55,32,64,10,65,162,211,130,101,98,195,162,228,130,212,67,30,229,220,+0,0,66,70,109,1,51,50,241,205,0,160,2,224,30,1,225,206,9,234,+81,15,3,108,105,110,101,226,11,0,224,74,53,5,112,114,97,103,109,97,+224,76,0,232,27,0,128,214,224,71,33,2,100,101,102,224,148,1,132,59,+193,76,224,55,20,4,117,110,100,101,102,128,54,193,28,64,192,2,95,50,+48,64,11,1,95,54,97,52,227,101,81,4,72,97,115,104,68,96,186,131,+103,3,56,56,58,53,96,141,0,90,64,190,4,56,53,51,32,64,107,164,+192,0,196,24,160,159,128,234,160,2,3,95,51,55,57,64,51,0,54,64,+237,0,50,101,83,162,17,98,4,194,1,224,204,98,0,57,160,204,233,148,+3,226,36,1,199,225,160,13,165,1,225,181,18,3,79,32,35,52,234,79,+4,238,16,0,130,229,225,9,0,119,197,162,135,199,61,75,225,97,57,1,+51,54,65,80,129,68,1,53,50,225,11,2,16,105,110,99,111,109,112,108,+101,116,101,32,109,97,99,114,111,32,98,83,7,105,116,105,111,110,58,94,+42,128,200,224,54,10,2,32,32,35,130,124,0,32,163,218,0,39,160,34,+68,217,64,7,224,182,3,3,95,56,53,55,96,16,233,219,7,224,202,0,+129,38,232,218,4,160,201,227,9,20,224,83,9,235,100,8,227,159,34,64,+77,0,49,224,77,2,226,99,1,161,104,64,68,232,73,5,228,7,10,228,+132,0,161,20,1,56,53,71,238,197,230,243,94,0,2,95,57,53,224,16,+0,160,96,237,86,0,102,60,192,76,162,224,65,191,226,224,0,128,207,192,+25,0,49,192,25,2,95,56,54,135,34,160,31,5,55,51,53,32,95,55,+67,26,228,30,0,231,232,0,65,167,0,54,170,251,64,8,1,52,52,64,+4,1,51,51,64,9,96,153,235,22,5,128,147,64,40,1,57,57,128,48,+2,55,53,55,229,185,5,197,167,2,95,54,51,224,56,0,195,179,97,7,+128,7,226,71,5,0,35,229,10,2,224,56,2,224,55,4,0,56,224,55,+11,229,141,0,224,53,2,64,163,96,167,64,253,67,14,129,7,0,80,224,+243,0,227,145,13,130,22,238,53,2,226,27,13,1,51,53,226,105,3,160,+59,163,205,195,199,224,79,1,136,214,234,138,1,1,95,49,117,157,199,55,+96,98,224,33,1,130,82,73,238,0,54,226,90,0,235,4,3,247,62,1,+224,170,25,225,36,2,0,35,230,98,1,195,93,128,111,228,150,22,242,7,+7,224,101,31,192,62,176,89,229,166,1,140,185,225,12,8,160,251,113,199,+226,123,4,224,12,3,128,0,164,36,224,53,0,163,204,225,80,8,225,79,+8,244,219,2,224,23,4,224,91,2,2,64,64,89,96,181,227,28,1,192,+180,0,67,227,19,5,136,132,0,54,104,132,3,75,50,32,58,96,69,64,+11,2,32,75,32,64,25,0,52,160,13,0,65,96,13,0,51,96,13,4,+95,56,53,52,32,99,237,224,4,1,0,58,99,168,64,28,4,51,56,48,+32,75,75,143,10,32,67,32,80,32,75,32,95,55,55,54,226,230,2,2,+114,101,112,70,150,8,109,101,110,116,44,32,97,116,32,230,185,84,3,50,+53,58,54,129,202,224,135,127,75,242,224,137,126,0,90,140,152,97,205,96,+153,0,52,224,153,127,66,77,0,49,226,77,14,101,60,65,206,101,125,64,+9,201,96,96,12,96,210,96,17,163,37,64,18,141,128,224,26,1,227,40,+0,0,58,102,132,2,10,65,32,65,11,0,90,68,134,192,4,150,199,0,+58,96,100,1,10,65,224,29,7,224,34,5,0,56,160,34,70,127,101,185,+3,95,54,51,56,67,18,0,53,139,220,227,18,23,69,248,5,98,114,101,+97,107,115,227,17,116,224,134,109,1,64,90,225,190,0,97,85,193,185,65,+78,89,6,225,174,0,0,58,107,17,161,104,185,34,224,10,30,232,201,1,+0,32,83,14,193,251,64,88,160,79,64,44,224,7,11,224,70,2,224,59,+2,0,58,96,163,226,22,6,224,60,5,128,41,0,58,96,217,98,95,0,+90,121,26,0,58,115,184,96,57,2,80,32,35,72,218,0,85,98,40,130,+237,4,80,32,35,51,32,71,239,0,58,120,8,192,38,65,15,96,38,95,+194,101,141,143,105,1,58,56,81,113,226,189,1,128,96,64,25,224,213,10,+64,144,0,58,115,62,160,28,1,80,32,154,150,0,80,96,72,129,10,3,+80,32,35,53,160,128,74,133,128,17,0,48,192,17,128,202,3,80,32,35,+54,192,17,128,203,113,72,234,51,1,112,80,145,43,1,95,56,85,48,7,+95,55,54,48,32,95,55,54,73,186,0,54,204,238,244,213,0,129,41,144,+44,1,58,56,74,174,239,15,0,80,10,224,65,14,74,11,67,94,170,106,+0,67,73,93,0,49,231,51,0,1,95,55,100,37,160,86,1,58,56,75,+183,160,246,137,68,238,157,4,157,48,96,8,152,179,1,95,56,233,128,0,+233,6,3,200,95,247,220,8,128,207,96,8,1,95,54,69,69,233,9,0,+224,60,4,245,223,2,162,145,64,189,96,224,7,64,95,49,57,49,32,95,+57,169,42,103,218,128,48,1,95,56,68,75,224,20,2,136,122,224,33,2,+165,197,192,38,1,64,58,96,81,226,2,6,194,189,0,58,96,39,194,186,+98,85,64,235,228,191,0,73,14,0,50,72,187,139,151,193,39,225,108,7,+233,67,1,225,108,1,96,37,225,238,13,64,101,0,54,160,101,129,218,64,+44,0,49,64,104,1,55,57,97,106,201,159,116,82,96,138,237,223,16,31,+67,97,110,110,111,116,32,101,120,112,97,110,100,32,35,105,102,32,100,105,+114,101,99,116,105,118,101,32,105,110,32,102,1,105,108,237,194,3,205,196,+1,95,49,76,58,1,52,51,139,208,224,81,5,4,58,94,42,32,32,251,+94,2,224,140,1,6,66,32,95,48,32,95,50,164,145,66,143,1,51,57,+64,16,67,185,1,95,51,64,226,225,49,1,169,80,96,52,1,52,49,64,+108,108,186,224,193,10,31,87,97,114,110,105,110,103,58,32,116,114,97,105,+108,105,110,103,32,99,104,97,114,97,99,116,101,114,115,32,97,102,116,1,+101,114,64,214,128,142,224,62,10,174,214,97,0,3,115,105,111,110,224,245,+47,224,240,1,130,68,97,145,2,95,56,51,98,132,225,144,41,4,112,97,+114,115,101,225,143,76,227,71,3,225,143,17,148,56,157,64,225,152,10,1,+95,56,154,24,225,159,90,224,255,56,225,153,3,0,95,65,148,128,241,64,+0,1,58,56,77,181,72,85,224,224,0,96,8,0,56,174,179,236,211,15,+1,47,47,128,83,175,22,129,19,0,58,97,19,64,76,1,49,49,65,254,+67,189,0,56,84,168,69,157,224,17,0,5,52,55,55,32,95,55,118,11,+67,216,96,19,1,55,50,111,48,224,181,3,3,92,124,92,124,160,99,2,+55,52,56,79,171,82,193,96,40,162,83,229,248,1,160,70,99,68,0,51,+181,239,128,143,172,98,224,143,3,0,49,224,143,45,1,38,38,224,141,16,+250,48,3,224,141,11,213,157,64,40,64,141,1,52,54,64,65,96,113,224,+10,13,224,135,9,79,94,0,51,207,94,224,188,2,224,140,2,96,217,96,+218,224,129,0,129,209,224,49,5,0,56,84,206,225,0,4,0,56,98,53,+128,188,224,38,5,128,21,224,212,5,170,168,224,83,9,246,167,1,0,53,+143,13,1,51,57,103,237,162,115,128,41,0,49,134,8,224,17,3,72,134,+129,88,2,53,51,32,224,208,5,97,230,0,58,96,216,225,55,28,225,77,+31,225,213,1,1,62,61,161,213,224,144,2,5,53,57,32,95,53,55,131,+34,225,138,13,78,156,193,138,224,55,1,1,56,50,224,55,1,224,117,21,+0,60,224,117,9,1,55,53,224,60,21,64,117,244,229,0,224,55,2,72,+32,224,116,29,0,61,224,234,10,225,173,0,224,61,24,0,33,224,61,9,+105,34,192,61,0,58,98,69,225,165,6,226,33,3,0,55,137,128,224,29,+1,226,132,6,98,24,226,132,38,224,18,4,130,63,128,50,0,58,96,6,+224,141,6,225,84,12,74,134,225,84,8,1,57,56,65,84,169,243,224,54,+13,242,235,0,225,78,3,73,116,192,55,0,58,96,209,225,16,17,1,48,+50,225,16,23,215,158,225,70,7,225,16,39,139,10,64,6,227,68,17,224,+228,13,226,230,11,0,53,225,27,25,0,55,224,54,10,1,56,48,96,139,+175,43,228,225,14,224,56,11,1,50,52,224,56,2,0,58,97,21,101,209,+1,50,53,84,183,0,56,92,4,1,95,56,117,88,1,95,56,65,40,128,+42,1,95,56,64,65,160,11,1,50,52,224,23,1,1,50,52,224,23,1,+0,56,71,7,3,95,50,53,48,192,17,108,134,64,9,106,90,0,83,102,+243,237,143,0,0,80,136,179,227,18,1,12,73,110,116,101,103,101,114,58,+32,100,105,118,105,105,57,3,98,121,32,48,167,107,237,203,1,108,6,64,+64,83,63,5,80,32,95,50,49,54,64,4,71,92,147,76,224,17,9,128,+64,237,113,5,135,237,245,160,1,247,183,3,2,32,95,56,156,9,244,66,+0,0,66,97,21,96,93,0,56,130,14,128,42,98,38,192,36,171,252,160,+12,0,83,139,145,0,56,72,253,0,85,83,161,128,79,233,43,0,109,130,+64,5,160,88,183,48,153,65,136,133,1,85,32,245,255,0,81,25,98,212,+224,0,3,0,58,97,113,1,10,65,160,194,64,58,1,95,50,78,211,2,+95,51,55,109,89,64,49,252,191,3,64,9,0,89,161,61,224,19,0,237,+94,0,64,63,255,226,4,233,217,3,224,219,1,173,31,235,134,3,128,238,+128,69,152,137,73,20,98,104,110,197,128,220,206,83,120,209,0,52,224,28,+2,96,241,68,36,0,49,109,98,1,67,32,99,21,128,12,1,95,50,163,+126,2,64,95,53,109,139,216,40,129,219,0,58,97,95,226,193,3,0,50,+74,99,0,50,70,241,64,6,71,57,0,50,110,164,162,181,64,114,194,181,+160,11,224,138,0,194,187,128,11,64,6,0,58,96,12,128,94,124,165,96,+148,1,95,53,79,169,64,180,0,51,78,187,128,42,64,43,206,200,143,100,+97,94,207,42,174,97,206,167,224,7,2,71,231,1,53,55,64,71,1,53,+55,99,150,130,79,0,80,98,25,163,124,204,188,224,26,0,79,6,64,21,+64,59,121,240,0,53,65,241,128,36,192,27,128,28,194,52,96,58,0,39,+160,46,96,26,163,27,250,183,1,144,25,0,83,251,218,0,239,74,5,243,+165,1,64,69,0,55,97,7,246,213,0,227,1,0,183,50,224,253,1,0,+39,96,254,162,76,143,83,0,49,191,46,128,95,160,163,128,220,160,12,66,+238,128,37,64,253,96,217,154,164,224,197,16,64,39,64,48,192,243,225,16,+3,228,17,2,102,35,99,92,64,137,0,50,64,69,98,152,239,223,0,122,+111,113,123,105,108,1,67,39,67,16,3,95,56,49,56,227,22,0,224,77,+3,224,13,5,0,58,100,27,113,133,228,219,6,15,108,97,115,116,58,32,+101,109,112,116,121,32,108,105,115,116,100,213,129,44,2,85,32,64,82,127,+128,98,99,212,64,8,66,114,224,89,1,0,79,114,141,64,127,0,58,97,+13,227,211,0,133,115,0,75,66,168,64,253,2,10,65,32,100,106,0,58,+97,255,176,54,68,163,220,248,227,195,1,113,216,98,43,0,53,106,49,1,+95,53,80,67,64,7,96,14,0,58,100,148,2,10,65,32,88,169,133,172,+200,60,249,203,1,192,93,96,70,159,43,132,69,229,31,0,243,241,11,64,+133,234,220,1,0,49,102,251,2,95,49,55,64,11,99,92,234,232,1,92,+102,131,252,146,196,132,36,129,166,96,48,224,47,1,228,73,0,0,64,129,+184,0,58,101,193,161,39,130,187,1,95,50,64,217,129,29,179,26,224,27,+6,129,71,163,240,2,50,50,52,64,164,232,187,1,224,104,2,64,188,232,+156,1,224,24,2,96,10,2,64,95,57,77,248,1,56,48,106,131,96,33,+2,56,48,54,224,11,2,0,56,65,79,96,13,202,107,3,95,56,48,57,+224,20,8,0,58,103,135,133,222,224,170,1,198,178,129,213,224,2,0,225,+103,0,192,11,145,198,75,69,230,126,3,178,151,229,185,0,1,95,56,101,+76,224,46,0,82,34,224,46,0,160,23,67,140,0,48,190,49,224,65,24,+68,194,224,64,19,134,211,0,58,64,239,160,218,96,71,100,23,224,72,17,+96,102,96,16,99,132,0,58,65,67,130,223,166,206,253,115,1,133,34,165,+110,0,82,224,22,4,255,72,0,0,58,96,106,130,1,129,92,164,241,161,+66,224,41,1,230,241,0,157,95,255,238,3,138,216,192,227,98,16,96,49,+104,245,64,238,224,159,3,224,82,1,192,76,133,81,96,66,66,78,65,242,+226,202,5,0,58,96,241,230,123,2,226,28,3,134,121,0,58,105,175,99,+245,3,75,51,32,75,64,24,0,58,74,25,160,218,0,95,79,137,100,86,+198,108,157,118,133,206,65,192,255,80,4,0,35,86,176,131,226,99,197,162,+118,163,224,162,102,224,47,3,0,49,70,240,128,210,224,79,12,0,49,67,+75,97,243,2,95,55,57,110,5,173,26,0,85,65,206,0,48,224,16,2,+160,18,235,239,2,170,201,103,242,128,133,1,82,32,228,26,2,87,176,133,+143,0,58,107,250,118,232,64,221,1,95,55,225,81,10,196,77,137,193,0,+55,75,136,0,58,64,109,224,54,22,166,128,0,55,65,106,224,54,1,131,+147,224,54,17,160,191,0,53,114,208,160,53,64,254,130,15,194,97,253,251,+1,226,120,2,165,37,225,112,0,226,107,2,226,201,1,201,123,160,2,98,+185,231,93,1,128,2,164,32,224,91,5,193,254,224,22,0,195,204,131,207,+195,51,0,64,100,101,226,250,1,139,40,233,241,8,162,195,128,162,131,9,+131,8,178,45,96,85,1,95,50,70,136,70,61,78,24,160,0,128,162,1,+79,32,118,243,97,196,225,64,5,129,173,0,64,65,53,227,229,4,237,222,+9,237,113,12,101,124,236,240,0,130,36,237,245,4,1,55,51,64,28,77,+29,2,95,55,50,87,7,183,216,64,215,241,48,2,96,168,2,95,55,51,+64,55,120,113,73,239,1,56,57,64,112,98,15,104,69,192,209,96,59,224,+98,0,64,133,238,110,0,224,81,43,0,58,119,120,197,31,224,187,4,103,+16,225,226,1,98,41,231,77,0,0,51,112,62,232,119,1,0,100,123,213,+0,100,173,68,160,53,225,70,5,193,231,224,100,3,242,57,6,1,55,53,+65,37,129,48,225,59,5,86,150,0,57,195,239,244,221,16,1,44,41,213,+49,238,216,5,136,186,224,0,0,194,135,225,71,2,98,82,2,95,52,54,+97,165,64,4,172,12,132,17,248,166,6,0,90,69,36,1,54,50,96,217,+107,194,239,189,3,96,0,227,68,2,225,8,10,224,18,10,225,24,7,228,+147,1,66,180,164,242,237,49,0,224,45,12,65,75,224,65,12,64,189,79,+126,224,166,8,224,88,9,224,184,7,167,49,69,143,65,253,165,148,97,252,+225,131,15,226,9,5,230,10,0,130,185,0,67,142,60,129,85,229,203,0,+96,104,65,225,76,156,0,64,98,100,3,52,51,51,32,197,70,224,182,0,+65,202,235,30,0,224,205,4,224,80,1,192,5,142,166,0,75,128,45,1,+75,50,241,116,2,224,69,4,1,64,75,65,53,224,26,3,227,202,0,1,+64,75,66,111,224,26,13,68,64,0,55,235,118,2,255,37,68,7,67,112,+112,73,102,100,101,102,191,35,4,51,56,58,49,50,161,78,0,75,131,183,+165,126,129,73,130,77,133,80,224,10,0,225,77,0,65,127,65,79,82,212,+225,3,15,225,74,7,173,158,160,81,165,232,64,13,161,194,225,94,7,64,+24,255,1,1,224,111,38,67,78,64,1,67,143,197,91,98,178,83,170,1,+95,55,109,92,229,101,7,224,113,6,241,177,0,96,169,224,69,1,197,22,+109,193,130,27,93,149,139,214,150,190,224,89,10,225,220,100,1,52,53,225,+220,1,0,58,101,203,254,160,2,231,152,2,0,80,135,252,102,113,227,159,+1,231,37,6,71,31,137,9,237,134,4,192,21,167,133,96,69,64,248,167,+40,0,58,68,240,232,51,1,216,123,3,95,51,54,54,104,80,137,248,192,+24,155,94,65,220,0,54,74,122,0,67,68,13,0,54,197,151,225,51,1,+2,39,96,95,128,213,0,58,102,244,74,92,2,55,49,51,136,142,1,55,+49,67,88,64,197,111,106,97,252,64,21,1,53,32,224,64,2,25,69,120,+112,101,99,116,101,100,32,101,110,100,32,111,102,32,105,110,112,117,116,32,+40,69,79,70,229,227,0,0,58,103,129,254,225,15,0,55,75,38,106,177,+226,37,3,251,165,8,3,35,108,105,110,219,152,134,20,251,151,2,0,51,+97,42,111,216,180,233,213,89,128,31,0,49,82,122,0,51,175,160,160,146,+137,181,204,38,194,118,170,212,141,53,234,188,4,1,64,35,91,201,192,188,+0,80,66,160,244,80,3,193,167,160,26,0,56,99,75,64,49,162,175,143,+54,162,45,162,15,229,177,1,81,19,224,92,1,224,10,0,235,149,13,65,+77,129,6,203,152,227,240,0,235,114,10,169,60,64,26,65,211,64,153,128,+172,224,26,0,224,108,1,66,189,211,149,147,85,224,223,0,192,173,235,253,+19,128,79,170,31,99,6,162,186,238,161,1,224,224,6,224,179,13,129,104,+128,115,98,10,224,144,2,66,53,225,95,11,224,44,19,245,248,5,64,0,+2,58,55,56,139,127,2,65,32,58,96,76,3,10,65,32,75,64,10,137,+100,237,165,2,96,172,130,29,224,244,12,158,165,224,199,13,127,129,2,64,+95,52,156,160,192,7,193,75,135,80,230,30,1,224,61,1,137,180,178,225,+2,95,55,56,97,14,3,58,55,56,54,140,104,167,239,200,234,0,56,64,+129,197,87,133,236,96,56,0,58,96,56,224,205,1,117,137,232,207,36,207,+218,233,127,2,111,135,0,51,128,126,234,198,1,68,22,234,18,0,233,211,+20,161,161,230,86,3,224,128,16,224,43,7,236,241,4,230,222,0,134,76,+96,45,67,178,232,163,5,97,8,240,82,2,130,130,225,125,1,231,32,6,+115,119,1,55,55,175,112,230,181,8,64,244,65,83,166,237,224,208,0,248,+70,3,224,7,7,197,204,129,197,230,221,14,128,0,230,206,97,2,51,55,+55,230,206,3,66,65,242,253,4,131,172,225,92,5,225,101,6,182,196,214,+202,134,107,236,247,0,66,233,100,73,66,206,0,54,162,56,78,242,1,95,+55,111,206,179,53,65,23,66,54,100,147,245,103,0,224,69,0,224,60,14,+128,42,162,31,85,86,160,10,230,48,5,5,109,97,99,114,111,32,128,227,+194,1,166,51,129,225,224,51,10,1,32,101,198,205,128,55,160,136,96,53,+64,144,230,107,1,224,145,6,192,91,224,74,2,23,97,114,103,117,109,101,+110,116,115,44,32,98,117,116,32,119,97,115,32,103,105,118,101,110,128,90,+224,77,5,160,208,162,6,166,167,165,29,64,2,1,95,55,230,123,1,250,+99,4,234,1,2,201,241,101,95,193,179,1,95,55,84,115,236,1,4,66,+231,160,98,98,135,0,48,228,111,1,108,105,132,225,2,55,53,55,71,236,+126,130,166,254,165,222,247,118,4,65,249,64,98,81,173,224,101,8,128,42,+224,100,9,68,179,97,231,99,79,129,144,96,27,165,188,133,83,64,125,65,+119,69,230,228,67,0,0,58,99,55,72,165,2,53,54,49,67,184,0,58,+96,64,177,126,71,123,0,75,67,192,0,54,225,136,2,4,101,120,112,97,+110,92,61,4,44,32,97,116,32,227,84,68,4,72,97,115,104,68,109,70,+170,37,2,53,58,54,130,56,224,133,125,109,79,224,135,124,80,62,225,15,+125,66,71,0,58,98,127,228,241,4,224,9,1,131,54,0,55,67,144,163,+124,124,57,68,140,67,22,132,128,152,134,84,113,184,230,64,83,219,236,246,+129,1,184,173,128,71,219,7,67,155,224,53,1,64,104,226,190,19,228,70,+2,226,190,114,224,133,108,226,190,10,224,135,110,226,190,8,224,135,110,0,+32,112,87,0,58,101,46,226,52,19,2,114,101,112,64,125,64,161,226,54,+116,224,135,110,226,56,10,224,137,112,152,148,82,162,224,144,124,0,58,106,+186,144,39,0,52,90,13,87,101,71,128,0,53,71,75,1,55,54,96,27,+2,73,32,58,96,16,71,103,0,52,124,155,0,55,80,82,1,95,55,95,+227,68,252,97,94,96,56,0,51,83,255,224,11,0,96,229,64,11,0,58,+96,6,64,63,4,49,51,54,32,75,176,176,0,49,225,0,3,6,110,111,+32,102,105,101,108,201,106,96,29,104,253,0,52,82,23,128,105,1,49,52,+96,105,64,11,0,58,96,6,96,145,0,57,66,240,1,51,53,77,40,1,+49,56,224,81,2,25,67,111,110,116,114,111,108,46,69,120,99,101,112,116,+105,111,110,46,73,110,116,101,114,110,97,108,64,98,224,39,1,10,82,101,+99,83,101,108,69,114,114,111,114,96,123,97,161,0,58,96,226,227,84,2,+0,73,141,70,64,28,99,117,1,75,51,97,33,134,56,107,15,1,32,83,+211,63,95,150,69,208,64,8,1,55,53,85,194,0,51,78,73,230,41,1,+234,129,1,73,88,106,248,145,148,237,239,3,198,93,96,37,106,92,0,54,+65,10,0,54,75,33,107,6,128,166,134,102,126,142,2,95,50,54,65,126,+96,28,1,95,50,224,40,1,1,95,51,73,172,1,95,51,81,249,3,95,+55,54,55,97,194,64,25,1,95,53,70,165,64,106,0,54,129,215,224,20,+4,1,51,48,65,110,160,65,0,48,224,89,0,0,58,96,6,222,118,0,+66,203,242,204,40,128,2,128,184,143,34,79,33,0,53,88,197,137,241,243,+30,1,110,76,0,51,171,77,2,50,54,49,253,191,0,160,60,237,30,0,+1,50,51,74,49,91,144,224,64,2,64,50,126,188,96,50,65,37,82,249,+64,22,65,132,254,99,2,224,113,91,254,213,5,224,42,7,224,15,7,0,+58,65,111,97,66,171,178,187,13,224,153,13,208,104,2,95,50,50,75,82,+128,148,64,163,64,81,160,183,224,13,2,224,149,16,191,90,66,0,98,50,+2,56,32,58,96,42,200,165,172,222,0,55,64,124,136,153,82,159,140,100,+178,88,161,36,64,5,96,12,169,18,0,50,115,80,187,194,128,30,64,22,+3,57,56,32,95,155,59,96,88,0,53,160,14,123,203,128,9,157,71,131,+27,66,178,148,194,192,40,0,35,240,20,0,155,243,1,95,55,111,239,0,+58,67,3,131,155,1,95,55,64,50,2,95,55,54,99,141,64,29,1,10,+65,82,201,0,49,64,218,132,32,96,245,0,58,96,39,0,10,83,224,0,+58,96,223,96,24,0,65,96,24,233,167,8,108,167,128,230,194,219,105,164,+0,54,68,207,66,195,129,38,67,147,159,214,160,228,97,216,64,21,224,117,+1,67,193,234,4,6,176,179,145,124,170,4,109,160,112,80,211,35,0,58,+100,24,224,165,1,68,69,226,47,4,160,5,113,189,0,64,78,4,1,75,+52,130,47,2,95,55,50,164,107,1,55,53,109,56,182,58,96,35,64,37,+224,35,1,160,139,0,58,81,172,129,79,224,93,7,0,55,67,74,160,93,+98,71,224,93,0,129,24,118,168,150,167,224,95,10,240,50,1,126,50,227,+134,0,170,246,148,232,124,239,97,111,246,226,7,210,112,99,26,0,52,70,+168,224,231,12,176,126,0,67,88,65,96,15,224,137,11,189,61,229,245,1,+31,87,104,101,110,32,108,111,111,107,105,110,103,32,102,111,114,32,97,32,+110,111,110,45,101,109,112,116,121,32,115,101,113,24,117,101,110,99,101,32,+119,105,116,104,32,115,101,112,97,114,97,116,111,114,115,58,94,42,94,150,+199,0,58,97,92,135,56,216,184,242,227,0,0,48,206,159,64,210,243,43,+3,224,41,8,0,49,192,41,243,4,4,0,58,115,83,128,92,253,117,3,+65,39,133,105,130,58,230,48,6,98,150,0,54,252,223,1,240,210,11,240,+209,10,177,5,240,175,6,2,103,111,116,160,35,224,157,6,0,58,64,187,+64,156,120,25,0,89,161,221,68,33,224,140,2,239,253,10,0,64,141,2,+242,211,40,14,112,111,108,121,112,97,114,115,101,45,49,46,49,50,47,64,+43,5,84,101,120,116,47,80,64,19,136,207,4,49,48,57,58,55,128,172,+176,238,98,88,0,52,90,65,224,14,1,245,165,3,109,206,224,25,12,66,+53,0,83,64,212,64,25,253,60,2,128,30,91,13,96,57,246,4,20,0,+49,127,174,224,33,19,119,118,224,66,20,154,16,99,41,246,72,8,110,141,+128,55,121,149,165,228,209,47,96,164,192,12,96,43,230,74,0,1,95,52,+73,78,0,53,150,165,224,66,31,128,139,224,67,53,96,240,224,66,6,0,+55,67,40,224,134,34,97,85,224,67,15,196,5,228,110,0,101,42,129,196,+228,210,1,250,247,5,255,11,15,8,44,59,40,41,91,93,123,125,96,195,+0,230,5,0,104,215,228,199,0,71,18,224,102,6,251,103,3,90,71,225,+183,3,1,64,35,91,177,229,59,4,128,6,159,49,128,97,155,80,165,4,+227,190,8,13,66,97,100,32,99,104,97,114,97,99,116,101,114,58,131,160,+212,57,229,13,0,136,16,226,93,0,162,203,128,116,249,116,10,250,85,13,+0,52,107,126,160,33,135,252,161,91,160,46,160,71,224,202,0,65,90,127,+248,64,10,229,225,0,161,19,229,204,0,132,108,132,153,129,226,96,103,230,+251,1,233,143,1,200,185,129,232,192,91,212,70,224,48,8,224,46,14,129,+14,226,95,6,224,62,10,96,54,253,37,30,1,95,39,229,25,0,230,164,+0,224,98,26,64,79,64,101,96,11,102,239,96,47,3,64,67,32,79,230,+48,2,226,159,26,22,33,64,35,36,37,38,42,43,46,47,60,61,62,63,+92,92,92,94,92,124,58,45,126,160,148,129,229,193,226,169,163,97,223,224,+207,15,1,101,69,224,58,12,202,245,128,18,229,17,15,135,171,224,110,4,+226,17,8,192,130,225,138,11,226,25,11,230,179,6,0,43,230,172,2,226,+36,6,226,28,7,224,180,30,131,135,224,180,84,0,45,224,180,34,224,128,+65,0,79,138,253,194,78,224,124,30,196,117,224,197,8,3,109,105,115,115,+73,32,7,43,47,45,47,100,105,103,105,168,19,224,39,8,14,97,102,116,+101,114,32,101,32,105,110,32,102,108,111,97,224,38,15,6,108,105,116,101,+114,97,108,164,184,64,155,255,142,7,215,230,224,204,8,224,68,1,2,46,+46,46,227,126,1,96,229,195,72,64,0,95,88,194,198,0,85,101,65,64,+218,170,233,225,165,9,10,110,100,32,111,102,32,105,110,112,117,116,64,188,+133,80,224,35,5,2,115,116,114,65,2,160,187,128,34,96,118,198,20,97,+164,129,131,138,197,232,78,6,193,202,246,89,10,64,186,99,140,97,170,166,+161,97,176,106,187,97,148,80,221,233,53,76,3,49,56,58,52,210,152,228,+143,3,122,39,127,36,249,125,0,64,0,249,121,4,96,36,64,48,96,39,+230,128,2,109,25,80,109,128,60,205,192,1,64,67,102,232,2,52,52,54,+69,3,191,208,128,225,234,43,9,225,159,13,160,169,0,58,107,7,114,75,+254,38,2,222,123,2,95,55,50,135,118,98,69,224,72,2,202,247,0,97,+225,200,0,71,71,163,163,225,181,7,109,217,235,73,1,224,70,1,3,98,+105,110,100,128,51,224,125,3,64,52,66,204,224,17,2,80,238,94,253,224,+143,15,224,132,3,4,32,104,97,115,32,114,255,3,110,97,108,32,198,91,+65,144,224,150,41,236,72,5,97,45,206,223,130,121,0,83,159,169,160,96,+99,59,77,227,96,15,237,230,8,0,58,64,200,174,206,0,50,78,134,64,+57,236,151,8,64,225,162,215,236,238,2,165,93,224,192,3,0,57,68,170,+224,20,7,128,213,224,181,2,224,225,12,225,191,14,0,44,108,167,0,39,+231,143,0,224,152,14,134,2,224,138,4,163,116,224,27,12,235,156,5,224,+27,4,1,49,48,112,162,224,28,14,157,19,224,28,15,229,212,0,224,28,+11,169,6,224,28,13,224,144,18,97,83,224,27,14,131,186,224,27,14,97,+107,224,83,14,192,55,101,69,0,83,198,45,224,157,15,236,169,0,224,28,+10,141,9,64,22,4,83,32,95,54,48,138,211,238,163,2,229,145,8,18,+117,110,114,101,99,111,103,110,105,115,101,100,32,101,115,99,97,112,101,239,+142,1,1,105,110,225,253,4,3,58,32,92,92,97,249,233,65,2,207,33,+224,137,7,82,50,224,27,16,97,124,224,27,14,98,40,224,27,14,97,151,+224,27,14,97,95,224,27,13,85,179,224,27,16,97,77,224,27,14,97,235,+224,27,14,224,195,18,149,120,224,27,13,0,56,224,83,18,95,92,224,27,+16,97,79,228,164,9,0,56,125,30,230,176,76,5,51,48,56,58,49,52,+163,234,83,73,227,233,5,224,137,8,66,179,229,197,24,196,119,0,35,130,+198,235,115,16,4,39,92,92,86,84,228,103,0,224,125,26,120,177,224,125,+32,115,3,224,125,20,1,85,83,228,229,3,0,55,121,116,224,4,15,224,+155,22,112,19,230,223,34,224,67,12,115,170,225,93,33,160,186,224,154,61,+224,86,1,168,156,226,11,61,224,67,22,67,69,224,154,33,99,87,224,242,+28,226,41,37,106,19,224,174,27,225,228,59,224,242,38,224,243,32,100,61,+224,156,54,101,181,224,156,34,176,208,227,189,29,69,161,227,189,34,128,248,+227,189,18,4,83,79,72,39,32,96,7,128,6,1,84,88,128,7,0,73,+128,6,1,89,78,128,7,5,85,66,39,32,111,114,96,10,0,80,240,100,+1,228,109,73,144,132,224,175,18,0,82,228,109,9,225,210,90,102,196,224,+198,33,211,250,225,32,26,103,254,224,157,55,224,67,28,226,112,1,228,243,+0,225,102,17,2,78,85,76,193,240,2,78,65,75,225,241,35,104,67,228,+53,34,225,241,24,1,76,70,230,221,35,231,91,37,140,141,224,124,18,0,+72,231,90,82,159,113,224,125,19,0,71,226,236,40,225,125,39,165,24,224,+219,73,141,186,224,219,18,1,70,70,194,96,0,70,224,229,1,232,65,20,+225,250,60,224,67,22,230,87,37,221,93,225,149,24,230,242,58,226,217,38,+209,28,231,74,62,224,155,22,68,81,224,155,33,209,101,233,29,92,231,141,+39,193,211,225,56,25,119,9,224,88,33,192,245,227,107,63,224,246,22,224,+157,38,185,164,227,177,16,2,111,110,101,82,240,3,39,92,92,69,168,34,+2,69,79,84,128,7,1,78,81,128,7,1,84,66,128,7,0,77,195,216,+2,69,83,67,227,217,14,224,188,23,234,34,59,225,247,37,0,49,225,1,+1,224,88,60,224,224,59,224,156,1,234,34,35,225,249,28,229,90,37,83,+108,224,174,35,129,74,224,85,23,84,0,224,85,35,134,82,224,86,25,228,+140,37,64,4,224,86,28,238,87,37,146,95,96,20,231,3,17,1,68,69,+233,101,0,2,68,76,69,224,10,0,6,67,91,49,46,46,52,93,227,59,+9,228,55,23,238,250,38,164,234,234,164,94,237,178,38,198,192,225,62,18,+1,67,82,193,50,2,67,65,78,225,45,40,228,100,106,196,98,233,111,73,+233,110,24,0,66,226,106,1,0,66,233,111,2,228,78,62,225,38,23,236,+160,37,196,237,224,206,18,1,65,67,236,148,2,153,240,95,29,0,53,72,+137,1,95,55,123,183,190,0,224,29,10,0,52,224,29,2,218,46,224,31,+0,86,48,1,95,48,160,138,96,30,90,21,245,200,1,1,95,55,90,42,+224,63,0,224,251,8,86,80,159,174,0,48,64,54,3,95,49,53,57,64,+4,64,211,0,35,123,235,88,217,91,248,128,18,0,57,104,22,246,123,22,+249,148,4,5,99,116,114,108,45,101,150,128,8,109,97,108,102,111,114,109,+101,100,86,113,1,92,94,97,17,246,115,3,125,101,224,203,2,96,225,64,+224,5,49,57,49,32,95,57,98,99,0,51,68,7,96,5,128,159,193,84,+225,143,1,187,44,224,17,3,128,40,224,17,2,151,238,228,94,4,180,57,+224,35,2,224,34,8,188,79,224,17,2,174,14,224,17,2,224,88,8,162,+235,227,86,8,224,234,2,158,96,68,5,225,90,6,253,102,7,217,189,225,+97,4,162,88,0,58,123,63,1,10,65,118,74,0,83,66,210,1,55,52,+226,188,4,6,100,101,99,105,109,97,108,129,117,65,84,1,55,52,64,111,+158,210,65,196,1,52,54,224,15,1,1,95,50,64,77,98,213,1,51,57,+94,63,160,12,116,41,2,95,55,52,154,198,0,54,218,198,0,55,65,27,+186,187,156,253,155,169,67,9,0,58,98,146,224,152,18,2,111,99,116,224,+150,46,161,91,0,53,97,224,224,149,0,0,52,224,109,20,2,104,101,120,+225,2,45,131,231,2,95,55,52,104,8,192,108,0,51,96,108,227,70,4,+5,95,49,53,51,32,35,124,29,99,81,0,51,71,143,152,255,224,38,9,+123,65,224,38,0,187,23,64,183,224,39,6,102,212,224,39,0,152,250,3,+95,51,54,48,226,30,2,8,100,105,103,105,116,84,111,73,110,189,227,227,+57,12,224,16,0,163,67,64,86,193,222,224,49,28,96,176,224,49,21,96,+39,157,29,0,58,97,39,65,142,0,39,127,168,191,233,66,224,66,229,94,+107,64,0,128,27,64,5,228,160,1,100,205,0,51,67,36,94,1,68,175,+172,147,64,38,128,42,227,65,1,153,95,1,39,66,65,190,1,66,39,96,+5,3,32,95,53,54,64,165,224,117,0,96,11,125,174,96,7,2,83,32,+95,252,162,3,0,67,68,111,128,74,226,18,25,160,133,1,95,51,105,103,+67,180,99,186,0,50,86,85,2,66,32,80,197,113,224,71,27,160,76,222,+219,229,78,9,1,94,42,227,247,0,108,214,6,114,32,109,111,114,101,32,+165,61,255,17,7,0,32,98,5,0,115,228,20,1,159,229,130,77,70,54,+99,194,224,14,0,226,101,1,229,229,0,226,146,0,229,247,2,194,151,224,+45,10,194,152,224,45,2,130,157,64,124,159,52,171,186,225,203,0,97,202,+224,145,1,2,54,48,54,97,126,2,51,54,54,167,130,231,61,3,1,96,+95,199,57,230,187,3,1,51,56,229,43,7,225,55,8,0,69,254,235,0,+10,110,32,105,100,101,110,116,105,102,105,101,190,234,1,92,34,225,62,4,+1,79,32,102,35,220,250,1,58,55,70,67,96,184,1,49,51,132,208,1,+95,49,102,109,0,58,96,120,96,25,1,51,51,100,98,64,1,0,80,64,+35,64,201,130,140,197,188,0,55,107,85,1,95,55,111,164,162,235,0,58,+97,0,128,64,0,52,229,57,0,98,64,1,95,55,100,98,3,95,54,32,+89,100,186,0,83,72,71,0,75,65,119,96,4,162,39,192,50,99,121,98,+82,0,89,69,121,162,216,64,4,224,55,1,166,87,184,234,96,10,200,172,+0,89,67,0,2,39,32,80,225,69,24,9,102,97,105,108,101,100,32,116,+111,32,124,86,3,32,97,110,121,79,89,22,116,104,101,32,112,111,115,115,+105,98,108,101,32,99,104,111,105,99,101,115,58,94,42,97,85,99,183,1,+48,32,121,186,96,11,2,53,32,85,99,155,129,108,224,98,8,192,55,224,+53,1,97,237,1,55,48,195,35,128,220,0,66,128,91,227,253,0,129,6,+224,19,2,0,83,96,14,228,98,0,128,2,128,20,224,55,2,225,32,4,+224,26,3,0,90,161,37,192,38,128,76,96,11,0,39,102,220,192,91,1,+95,49,97,209,0,80,160,64,194,53,226,34,1,0,54,167,22,0,89,132,+135,74,181,136,171,132,228,193,1,64,52,0,58,65,29,128,45,128,115,0,+80,70,85,66,140,5,10,65,32,85,32,58,66,102,166,96,0,39,64,2,+64,59,72,170,132,73,0,75,96,85,1,95,55,144,13,132,199,104,73,99,+29,0,85,64,31,0,65,224,33,3,66,101,225,123,5,12,73,110,32,97,+32,115,101,113,117,101,110,99,101,225,136,12,1,83,39,65,121,101,93,99,+120,105,146,64,173,69,126,224,135,12,161,31,64,137,0,52,82,118,160,137,+170,143,176,185,0,58,68,14,168,61,68,145,64,44,83,64,224,80,11,0,+58,96,117,128,43,3,54,32,95,52,118,138,226,255,0,133,132,193,83,99,+210,0,53,250,76,2,0,55,96,45,0,58,64,210,129,72,0,85,193,142,+2,90,32,90,69,118,2,52,52,49,236,0,5,198,221,131,31,234,160,0,+0,90,130,195,96,220,160,85,96,0,0,58,96,11,97,174,0,75,96,228,+0,58,97,127,96,16,0,73,65,205,64,196,67,241,203,166,97,21,132,22,+101,9,1,95,52,73,32,96,55,0,54,225,18,0,235,166,5,64,237,3,+83,32,64,82,227,171,3,225,196,1,159,220,8,115,97,116,105,115,102,121,+58,32,131,178,236,167,7,96,95,130,107,99,58,100,180,69,179,65,11,224,+75,1,6,82,97,110,32,111,117,116,67,227,10,105,110,112,117,116,32,40,+69,79,70,41,197,45,137,219,64,73,130,161,1,95,52,76,243,100,232,224,+153,12,0,110,164,54,162,86,74,225,2,95,52,55,96,39,101,20,1,52,+56,65,20,96,11,0,58,96,6,163,9,228,227,1,0,83,202,87,67,200,+227,191,9,99,182,99,185,98,94,0,58,96,98,64,152,1,54,50,64,152,+64,248,234,158,0,229,10,0,0,58,96,165,64,37,97,28,134,74,224,35,+1,96,226,129,235,232,139,0,224,14,6,232,124,7,1,95,49,96,211,101,+239,0,50,96,210,128,10,64,48,96,10,0,58,96,6,64,114,192,18,224,+230,5,229,202,9,0,67,162,125,70,85,205,117,229,191,1,2,95,52,56,+102,153,102,111,1,51,56,193,132,1,64,58,96,18,64,103,0,51,225,72,+3,136,161,142,59,170,212,97,30,72,240,0,58,96,6,128,50,67,230,224,+122,0,134,60,139,90,96,130,160,80,102,165,224,74,8,64,11,0,58,96,+6,2,10,65,32,67,90,0,85,128,16,194,210,0,90,128,242,65,171,69,+57,0,58,96,82,161,238,64,20,224,28,6,130,95,2,73,32,58,96,192,+97,209,64,101,0,49,67,80,68,120,107,225,0,80,66,24,0,80,79,11,+0,48,104,133,192,12,164,61,160,45,129,235,66,66,234,7,0,230,37,5,+96,197,129,120,132,237,138,31,166,60,0,83,160,58,0,64,96,18,224,5,+4,230,113,6,160,60,230,145,2,230,127,14,129,195,224,19,2,170,187,243,+195,6,202,142,192,42,134,2,227,8,3,132,165,224,215,2,224,40,3,0,+64,224,76,3,174,241,128,57,224,110,12,202,146,225,20,1,64,36,134,81,+2,50,48,57,128,46,100,180,64,5,96,157,198,215,2,64,64,79,68,249,+167,9,224,64,56,224,199,0,224,73,44,135,103,66,9,128,30,2,79,32,+35,75,123,224,91,1,204,17,225,1,15,128,114,3,82,32,95,51,101,228,+224,153,4,98,37,0,39,96,2,99,41,98,112,128,39,224,119,24,225,239,+1,64,1,0,89,192,23,226,135,1,226,68,5,224,48,4,72,125,224,66,+6,200,127,224,63,9,70,105,244,145,0,161,241,192,182,2,95,51,57,64,+29,200,253,224,78,1,1,95,52,70,13,77,173,224,24,7,232,49,5,23,+87,97,114,110,105,110,103,58,32,67,97,110,39,116,32,102,105,110,100,32,+102,105,108,101,203,83,224,60,3,236,212,0,224,19,2,224,78,6,19,92,+34,32,105,110,32,100,105,114,101,99,116,111,114,105,101,115,94,42,94,134,+110,225,168,1,64,2,192,72,160,68,0,54,110,19,224,13,1,0,56,237,+48,4,224,65,0,225,144,20,224,139,8,17,94,42,32,32,65,115,107,101,+100,32,102,111,114,32,98,121,58,32,134,183,1,49,51,65,25,72,64,192,+0,165,255,199,154,66,4,64,74,244,2,15,6,109,105,115,115,105,110,103,+97,39,160,84,244,46,6,224,148,2,207,9,161,203,70,116,96,103,2,95,+54,54,100,16,129,20,67,11,77,51,0,55,65,21,224,39,5,0,55,68,+255,97,23,224,163,0,234,172,0,160,63,69,199,0,48,71,252,77,141,225,+89,0,225,102,0,1,95,55,77,146,128,229,79,202,65,107,160,19,128,0,+112,158,100,98,0,52,72,235,169,241,64,200,64,39,0,57,101,118,134,239,+0,85,102,11,0,90,64,111,132,206,0,58,96,31,197,208,75,227,1,95,+54,235,34,0,74,173,105,226,84,181,84,184,64,222,238,26,15,2,92,92,+47,161,230,204,43,0,58,96,100,2,10,65,32,108,222,97,249,129,75,228,+48,0,97,206,64,105,0,58,96,50,1,10,65,224,122,0,224,210,1,229,+53,7,135,251,137,174,129,3,225,24,12,0,58,96,7,96,81,0,58,65,+92,166,116,225,152,1,4,67,32,95,54,55,85,211,0,54,81,195,97,180,+0,54,80,129,168,89,64,35,3,95,54,57,57,226,144,2,15,85,84,70,+45,56,47,47,82,79,85,78,68,84,82,73,80,128,238,133,238,227,228,1,+0,95,73,214,2,95,55,48,96,222,1,95,54,119,2,0,58,98,4,204,+133,132,83,2,95,55,48,168,119,224,150,4,2,95,55,48,116,251,230,69,+1,64,34,115,58,97,9,152,121,1,55,57,145,227,0,35,149,39,226,133,+2,103,31,224,42,2,65,174,65,55,5,35,50,48,57,53,49,103,139,4,+35,53,53,50,57,97,36,129,142,224,124,2,0,52,111,22,226,173,6,225,+111,0,150,227,130,113,0,67,68,162,65,62,0,52,117,100,225,37,1,21,+104,71,101,116,67,111,110,116,101,110,116,115,58,32,115,117,114,114,111,103,+97,116,138,115,129,102,193,42,129,28,225,60,3,65,147,0,54,130,241,64,+84,224,131,0,227,143,0,0,58,97,87,4,10,65,32,75,51,70,7,0,+58,96,39,7,10,65,32,94,103,101,116,98,65,232,170,73,4,51,57,57,+32,79,81,247,80,77,1,95,52,65,105,170,145,64,10,180,143,129,37,0,+51,67,199,225,228,22,243,218,6,20,117,110,107,110,111,119,110,32,116,101,+120,116,32,101,110,99,111,100,105,110,103,235,225,2,98,59,144,96,66,65,+130,122,69,24,1,57,51,64,4,66,17,96,15,97,84,0,52,74,172,128,+20,64,46,169,252,1,52,56,67,10,1,54,57,130,133,73,78,0,73,68,+27,67,172,0,85,64,23,160,92,131,52,3,85,32,75,50,110,90,0,58,+96,24,106,215,2,51,54,32,77,188,97,94,0,49,145,159,0,85,96,35,+1,95,51,205,139,2,49,52,48,64,74,121,95,2,49,52,50,192,11,0,+58,96,6,96,132,2,57,32,75,77,208,65,37,0,49,229,211,3,65,223,+19,114,111,108,46,69,120,99,101,112,116,105,111,110,46,73,110,116,101,114,+110,150,56,224,39,1,3,83,111,109,101,224,35,0,97,32,129,133,96,215,+99,14,129,23,101,54,167,194,169,222,2,95,54,55,65,29,0,54,99,243,+0,95,173,146,65,64,64,55,98,228,194,238,64,63,2,32,64,35,102,15,+224,22,9,98,177,224,22,9,97,2,224,22,9,99,180,128,22,98,33,96,+20,131,214,0,51,76,62,0,54,91,180,1,95,54,79,71,224,19,1,0,+56,96,19,0,56,224,19,11,219,90,224,19,3,136,157,224,19,4,0,57,+150,64,1,54,57,75,34,96,242,9,10,65,32,105,115,105,110,116,32,58,+96,20,130,241,0,58,96,40,64,11,65,240,1,64,58,96,75,64,14,0,+50,99,12,96,110,128,14,0,65,96,14,174,233,162,75,93,68,2,95,54,+55,100,63,1,54,56,68,31,64,124,64,11,0,53,224,11,0,1,51,51,+224,23,0,0,58,96,6,129,164,129,10,66,188,0,56,97,142,169,98,98,+96,100,44,0,51,80,18,132,133,114,196,181,88,162,106,224,15,7,96,92,+236,111,1,0,95,102,94,96,89,64,141,0,51,96,187,130,32,2,80,32,+58,96,16,224,198,2,0,56,110,221,100,137,1,95,51,84,201,192,147,0,+51,224,159,2,128,198,64,11,0,58,96,6,227,18,37,128,92,131,18,96,+11,0,58,96,6,227,18,64,4,65,115,121,110,99,227,23,12,64,220,192,+171,0,75,212,205,2,51,49,54,224,104,2,13,115,116,97,99,107,32,111,+118,101,114,102,108,111,119,164,158,224,33,4,3,104,101,97,112,224,32,5,+224,33,7,9,116,104,114,101,97,100,32,107,105,108,240,154,1,224,33,5,+5,117,115,101,114,32,105,64,193,2,114,117,112,184,193,193,30,130,66,129,+30,96,11,0,58,96,6,225,30,60,225,26,17,66,190,98,17,67,164,81,+201,99,133,226,223,3,101,43,158,46,130,24,159,97,130,24,192,11,66,24,+96,11,0,58,96,6,225,108,1,0,85,243,213,1,2,67,32,60,164,11,+232,134,0,128,18,134,163,164,161,128,18,64,110,0,85,225,163,7,19,82,+97,116,105,111,90,101,114,111,68,101,110,111,109,105,110,97,116,111,114,161,+67,224,43,8,64,34,0,114,220,9,224,32,12,6,105,118,105,100,101,66,+121,64,79,192,36,224,151,6,66,163,224,151,6,66,208,224,74,8,11,76,+111,115,115,79,102,80,114,101,99,105,115,193,94,224,38,10,2,85,110,100,+226,60,3,224,33,10,0,79,226,93,4,64,0,194,27,230,77,2,96,11,+0,58,96,6,226,27,61,3,114,105,116,104,226,27,13,213,161,133,9,64,+17,132,52,7,99,97,116,99,104,32,58,54,70,96,153,119,233,108,4,73,+252,74,210,140,51,0,54,76,2,0,54,89,46,224,115,1,6,111,112,101,+110,70,105,108,179,50,233,19,1,0,58,106,59,130,143,0,49,194,143,131,+188,68,210,68,212,71,171,238,162,0,152,154,3,95,52,49,48,206,200,64,+167,133,20,197,76,207,78,250,127,3,247,156,7,0,32,193,113,0,58,64,+173,64,110,234,212,8,108,50,138,212,75,77,200,143,1,49,52,106,14,233,+127,8,224,33,2,76,60,128,90,131,107,189,178,138,76,85,198,1,64,95,+87,31,253,56,2,0,56,139,203,224,32,2,125,143,224,19,7,165,218,112,+19,2,95,54,54,106,123,224,119,0,126,149,96,138,96,114,1,95,52,73,+196,1,95,54,90,201,0,58,96,43,73,223,7,102,108,117,115,104,98,32,+58,96,22,219,65,237,139,1,90,233,235,136,7,102,183,135,202,192,5,84,+190,64,4,64,114,64,3,224,131,4,224,13,6,234,170,6,160,234,1,54,+53,100,101,0,53,135,196,234,175,0,1,54,54,104,57,0,58,96,226,135,+172,103,130,64,22,96,213,0,66,85,23,115,82,96,51,139,71,0,58,96,+60,128,245,0,54,93,29,72,196,0,58,96,29,9,10,65,32,65,46,119,+114,105,116,101,64,243,130,88,5,94,99,108,111,115,101,65,4,64,126,237,+205,0,2,95,54,52,74,65,2,53,55,32,137,3,64,87,64,173,10,10,+65,32,116,111,70,117,110,80,116,114,64,50,234,42,0,64,50,0,51,126,+32,64,40,129,95,1,95,54,71,27,66,128,234,156,0,96,233,224,9,1,+135,230,84,218,144,173,161,224,92,208,131,255,1,51,50,69,102,97,240,0,+58,96,6,139,135,0,56,64,123,225,20,0,0,58,98,151,129,191,225,194,+4,2,64,95,54,93,163,64,101,226,180,3,209,203,64,23,226,232,4,64,+150,64,128,96,37,0,54,106,30,1,95,54,80,79,160,44,76,179,2,57,+32,95,78,246,163,84,204,237,85,195,0,54,93,53,64,6,160,189,0,58,+99,52,172,22,71,113,96,123,102,230,128,5,108,65,0,58,96,47,234,182,+0,237,56,4,0,54,146,173,64,21,226,55,5,97,155,99,122,137,31,224,+55,6,144,198,192,177,228,94,0,162,178,0,95,105,86,128,160,130,3,14,+73,79,46,112,101,114,102,111,114,109,73,79,32,94,38,162,17,1,64,58,+96,98,9,10,65,32,102,112,102,105,110,32,58,64,118,128,14,2,110,101,+119,64,14,129,253,8,94,97,100,100,95,70,73,76,69,64,18,129,249,96,+18,2,117,116,102,65,167,65,70,152,240,0,52,67,102,64,166,64,89,129,+189,177,248,225,177,1,143,136,73,57,192,213,96,11,161,65,241,78,3,3,+79,32,35,49,86,66,101,173,224,26,10,0,57,205,225,224,27,8,76,224,+224,26,11,229,17,1,1,119,43,200,156,0,54,97,170,99,224,228,127,0,+98,158,1,95,54,100,128,225,96,3,194,19,226,105,8,0,58,98,134,104,+21,1,49,52,99,80,0,58,96,61,163,35,192,233,112,147,72,145,64,92,+130,75,128,6,131,5,96,118,0,58,96,6,99,133,0,73,107,200,191,127,+1,94,102,70,84,1,32,58,96,175,97,110,252,146,0,173,15,145,27,252,+177,10,166,76,84,56,177,63,224,47,2,130,39,223,17,2,51,54,51,210,+62,145,97,115,163,100,1,132,134,242,213,0,67,165,162,188,229,43,0,1,+95,52,66,79,176,93,4,67,32,95,57,56,144,111,192,18,1,58,54,189,+86,188,30,220,218,64,24,163,250,2,53,48,56,64,4,71,82,67,78,2,+64,95,53,66,58,160,11,0,54,89,150,64,80,1,95,54,73,169,132,141,+1,95,54,105,169,96,33,0,58,96,6,188,100,66,87,1,95,52,79,26,+0,58,64,34,128,22,3,66,32,95,53,64,247,0,66,99,109,0,52,64,+194,8,95,54,50,55,32,95,53,57,48,84,92,77,54,130,58,101,201,0,+53,68,182,0,80,64,165,167,9,140,146,96,246,121,232,67,183,242,162,1,+98,231,96,84,64,184,68,87,224,23,8,160,76,135,52,227,191,0,128,27,+211,131,192,24,192,52,1,95,54,154,163,64,21,89,145,129,131,141,97,1,+61,61,169,182,155,187,0,54,67,251,226,231,1,2,98,105,110,171,169,224,+61,1,181,142,242,35,0,240,208,2,65,0,0,51,225,0,0,96,102,227,+21,0,192,32,67,216,131,146,0,53,155,101,0,64,98,107,128,12,225,30,+0,224,213,1,247,212,4,65,138,251,220,3,96,33,126,54,0,57,70,234,+192,195,134,145,0,58,96,204,224,43,2,96,154,1,95,52,86,252,3,56,+32,95,52,70,156,128,38,131,34,77,246,253,198,0,103,72,189,195,64,96,+81,81,1,95,54,93,156,0,58,65,239,160,22,98,3,114,164,114,58,225,+116,0,98,99,123,14,164,192,2,51,57,52,64,23,131,79,196,39,83,179,+97,7,167,22,189,250,99,242,191,112,0,83,112,41,236,32,7,224,25,13,+96,77,155,189,214,57,160,25,180,176,0,85,81,198,225,248,4,108,158,194,+153,233,138,0,160,43,96,131,226,41,6,171,104,162,78,0,85,213,41,0,+54,166,64,64,0,224,129,12,96,30,224,85,16,99,157,224,85,9,98,50,+224,144,22,65,14,224,58,21,224,145,1,236,189,8,224,171,13,104,105,224,+112,16,99,43,224,171,45,175,224,224,171,19,224,59,16,101,231,224,59,9,+151,15,160,0,166,7,98,86,0,58,96,6,226,77,0,109,186,141,173,0,+67,64,8,96,3,196,7,164,46,136,158,129,207,136,58,160,159,0,50,224,+17,1,2,64,75,51,64,116,128,12,230,24,1,109,3,224,23,0,224,24,+0,224,93,0,125,45,224,99,6,224,86,4,233,39,0,224,142,13,64,215,+224,47,5,224,24,2,0,53,225,63,1,193,1,133,204,64,6,214,254,165,+72,75,217,129,85,65,15,105,244,0,56,100,21,224,187,0,128,131,67,13,+128,17,96,104,224,91,0,96,86,198,12,114,135,227,30,9,164,215,192,31,+107,103,0,50,76,93,224,24,0,229,181,7,78,73,64,0,0,58,70,151,+132,138,96,36,205,152,2,95,53,51,70,214,135,250,2,50,49,53,138,45,+100,119,96,19,233,186,0,172,125,96,14,115,18,128,66,224,63,2,5,95,+51,51,57,32,35,74,161,110,200,234,235,0,224,10,1,0,58,96,172,230,+237,4,230,79,14,131,53,254,139,1,124,179,102,20,66,101,121,113,227,224,+2,160,27,97,22,160,49,180,242,230,32,6,0,53,247,122,1,224,119,13,+160,229,231,21,2,225,84,10,114,35,128,0,109,89,0,58,71,253,99,16,+69,203,2,95,54,49,103,216,64,80,64,19,229,200,5,133,187,0,58,96,+35,104,85,85,53,0,53,122,229,128,10,117,64,160,10,224,21,1,71,252,+192,10,224,32,0,0,54,90,142,1,95,54,103,205,64,0,0,58,96,91,+96,85,0,51,64,30,120,206,1,54,49,110,119,64,36,138,5,224,142,0,+1,51,54,161,173,230,91,4,160,58,105,103,96,243,64,20,236,182,3,224,+43,9,159,41,224,43,7,161,146,224,25,1,224,18,1,0,54,170,172,0,+54,167,166,64,159,245,62,1,0,90,225,245,0,156,88,0,58,96,38,224,+188,6,97,10,1,51,48,64,193,100,251,96,11,131,194,67,114,224,40,5,+224,55,11,141,98,128,10,96,156,224,217,5,0,55,226,202,0,224,196,7,+207,118,229,37,3,160,77,90,197,227,54,0,224,68,6,224,66,2,237,192,+0,0,58,97,59,225,150,7,64,145,65,210,224,199,5,225,173,4,224,74,+12,214,22,224,74,6,64,142,224,74,6,0,50,104,0,224,18,1,128,94,+224,233,8,225,171,2,1,95,54,163,215,96,105,227,196,1,65,171,0,80,+98,95,210,43,1,80,32,180,66,1,64,58,96,58,225,183,7,0,57,110,+79,113,105,1,95,54,91,190,225,73,6,121,178,225,141,7,1,57,50,224,+53,4,0,54,96,53,253,181,12,1,95,39,234,84,3,224,205,10,107,1,+202,204,0,58,99,66,192,183,64,19,128,183,131,70,82,22,1,95,49,73,+203,1,95,54,93,113,129,52,224,185,1,1,95,51,98,191,0,58,96,144,+144,245,0,51,64,58,245,119,6,64,35,224,18,6,65,82,244,242,7,65,+95,231,211,5,231,152,2,233,66,2,224,10,2,122,54,224,66,1,64,20,+224,29,1,224,75,4,233,6,2,233,141,4,224,151,6,72,129,245,119,6,+129,20,192,50,224,60,2,224,39,6,67,133,224,39,12,65,31,178,227,225,+79,1,0,53,101,74,225,79,3,121,5,126,100,0,58,97,92,225,127,7,+142,248,69,66,0,58,96,38,211,51,71,203,2,95,55,53,64,9,0,54,+74,118,65,167,1,67,32,224,17,1,1,64,35,122,140,0,58,96,58,225,+164,17,96,249,233,140,14,224,244,3,233,56,14,224,34,2,0,58,96,171,+160,190,66,220,82,33,1,35,49,123,98,1,95,53,77,244,64,6,0,57,+96,199,131,52,224,199,11,97,31,224,199,5,0,49,114,168,0,58,96,59,+224,200,2,226,51,5,224,146,11,0,58,96,117,224,251,22,224,18,5,65,+135,248,43,11,226,83,25,224,10,13,226,44,31,0,58,98,24,228,51,6,+94,101,0,53,108,224,161,82,99,249,138,219,0,79,246,76,2,1,46,46,+67,251,224,17,3,1,58,58,128,17,2,79,32,35,84,132,71,251,96,12,+92,145,224,12,0,0,49,73,204,128,13,224,57,1,1,60,45,224,75,7,+1,45,62,224,75,1,224,48,0,96,62,0,54,224,62,9,0,61,96,44,+200,107,128,0,229,184,5,0,53,132,232,224,20,7,101,101,0,58,103,228,+196,150,64,248,68,150,96,49,161,197,228,250,11,22,33,64,35,36,37,38,+63,43,46,47,60,61,62,63,92,92,92,94,92,124,58,45,126,64,136,0,+58,97,62,142,88,225,88,2,99,84,137,103,0,82,79,39,97,245,240,22,+3,160,148,142,128,229,78,5,229,67,1,65,159,224,91,10,134,171,144,138,+239,213,2,118,175,235,147,1,66,20,105,220,192,31,224,161,10,128,24,70,+106,98,127,230,185,4,224,151,17,239,234,1,240,55,0,0,58,96,202,230,+145,9,1,95,53,126,196,224,72,4,74,160,65,141,2,67,32,79,224,62,+2,198,249,1,80,32,186,144,64,20,131,197,225,150,15,8,44,59,40,41,+91,93,123,125,96,129,136,190,226,231,166,7,114,36,2,75,32,89,225,1,+6,0,89,96,238,72,181,0,64,234,72,1,224,58,6,97,158,231,225,5,+65,54,65,104,231,89,2,0,35,83,72,107,54,1,95,52,72,173,161,238,+234,158,7,224,91,15,193,23,152,74,225,91,4,224,18,1,0,53,94,229,+193,175,146,14,132,66,129,220,204,72,249,103,0,1,50,48,73,156,135,247,+97,0,225,131,10,95,244,241,187,0,162,54,96,6,0,95,75,7,225,236,+1,0,95,113,19,65,96,231,209,2,132,103,64,20,228,85,9,97,117,65,+246,225,58,5,64,194,0,85,96,179,150,246,128,137,130,102,2,53,50,53,+64,4,176,243,101,219,129,84,224,201,5,203,43,224,109,12,121,54,227,243,+4,0,56,136,241,64,0,0,58,107,254,192,189,67,65,128,189,175,111,225,+225,10,233,61,7,131,170,224,95,2,0,67,124,10,206,131,226,248,4,235,+25,5,226,51,11,166,133,224,20,6,128,243,224,20,5,0,49,114,165,224,+21,8,136,213,224,21,8,102,75,224,21,8,116,149,224,21,8,224,109,11,+96,230,226,224,8,128,85,225,17,4,129,115,194,235,225,21,0,193,163,224,+17,3,130,127,224,17,2,96,100,224,17,4,74,248,224,35,6,224,34,8,+130,143,224,17,3,139,56,224,17,3,224,88,8,134,252,224,16,2,142,121,+225,163,8,77,111,107,190,224,95,8,229,21,5,108,122,219,240,128,18,226,+190,5,168,89,0,53,112,30,2,95,50,49,79,36,111,245,1,51,49,87,+102,96,40,0,56,203,241,227,147,9,68,142,80,90,182,232,224,171,13,68,+62,132,213,226,102,23,117,134,224,20,8,137,201,224,20,6,226,35,11,93,+106,224,20,9,226,55,11,110,32,224,20,7,94,230,224,20,9,65,234,224,+20,8,226,118,11,95,153,224,20,9,224,209,11,0,55,224,209,11,0,55,+224,209,11,106,44,224,20,8,224,209,11,112,139,224,20,7,97,185,224,20,+8,224,209,11,0,56,224,209,11,0,56,224,209,11,101,218,224,20,8,224,+209,11,68,194,224,20,9,224,209,11,69,170,224,20,9,224,209,11,105,23,+224,20,8,224,209,11,228,26,12,98,166,224,20,8,228,47,11,105,149,228,+47,10,227,249,8,184,9,224,17,2,176,247,224,17,3,227,215,8,126,142,+224,17,5,145,189,224,17,3,134,15,224,17,3,228,155,8,166,246,224,17,+3,228,84,8,72,52,224,17,6,228,138,9,228,192,9,224,179,8,135,88,+224,17,4,224,179,8,81,190,224,17,6,224,179,8,229,26,10,229,97,26,+229,62,9,224,178,8,229,61,15,224,16,1,224,175,8,224,174,8,224,173,+8,225,96,9,224,16,7,224,170,8,197,47,5,95,53,56,50,32,79,179,+133,233,95,1,1,56,51,236,32,2,2,83,79,72,112,168,224,79,7,224,+47,17,224,46,8,128,178,0,79,224,98,16,2,78,85,76,224,51,7,96,+161,224,49,17,2,83,84,88,224,49,7,96,245,224,49,17,0,69,224,49,+9,97,56,224,49,18,1,79,84,224,49,7,96,200,224,49,18,1,78,81,+224,49,7,97,190,224,49,17,2,65,67,75,224,49,7,98,1,224,49,17,+1,66,69,225,43,8,98,68,224,49,18,0,83,224,48,7,98,134,224,48,+17,0,72,224,247,8,98,200,224,48,17,1,76,70,225,242,8,225,191,22,+0,86,224,98,8,131,79,224,49,17,0,70,224,99,9,225,241,22,1,67,+82,224,49,8,225,241,22,1,83,73,224,49,8,225,191,22,2,68,76,69,+224,50,8,225,192,22,2,68,67,49,224,50,8,225,193,22,2,68,67,50,+224,50,8,225,195,22,2,68,67,51,224,50,8,225,197,22,2,68,67,52,+224,50,7,133,134,224,50,17,1,78,65,226,190,8,133,203,225,99,18,1,+89,78,224,50,8,227,186,24,0,66,224,50,8,225,201,22,1,67,65,224,+101,9,227,188,23,0,77,224,49,8,225,252,22,1,83,85,224,151,9,225,+252,22,2,69,83,67,224,50,8,225,252,22,0,70,227,190,8,135,172,224,+49,17,0,71,224,49,9,225,250,22,0,82,224,49,8,136,52,224,49,17,+0,85,224,49,9,225,248,23,0,80,224,49,8,225,247,22,0,68,228,234,+9,0,49,129,45,242,174,5,224,0,17,238,95,11,245,236,0,111,64,242,+13,13,1,83,39,253,46,1,123,196,190,109,224,75,0,144,36,125,212,0,+85,210,143,224,19,0,187,247,112,67,233,177,2,201,172,143,162,242,61,14,+82,59,64,0,80,170,0,58,65,14,64,161,0,80,160,98,147,0,125,81,+0,90,160,4,112,95,145,117,71,203,192,217,146,60,79,116,109,110,76,56,+0,95,149,221,3,49,49,52,49,101,107,3,95,51,54,48,225,108,3,30,+97,116,97,46,67,104,97,114,46,99,104,114,58,32,105,110,118,97,108,105,+100,32,99,111,100,101,112,111,105,110,116,97,137,77,117,0,48,111,231,146,+94,2,95,50,50,84,223,1,49,48,144,2,128,9,224,98,1,0,58,109,+153,214,55,237,243,2,249,195,13,253,225,26,0,58,110,46,124,56,83,12,+64,210,3,95,53,53,53,64,5,77,154,2,95,53,53,96,5,77,145,75,+47,107,51,1,56,48,238,62,0,0,53,108,216,1,95,53,108,202,224,13,+1,65,156,0,73,64,214,64,102,96,214,1,49,54,64,4,0,55,125,139,+181,142,0,58,96,39,224,29,0,0,51,82,165,224,29,4,0,54,224,59,+7,1,95,49,64,147,0,58,96,102,64,25,0,54,78,171,77,237,1,95,+53,77,222,1,95,53,129,150,77,192,1,95,53,77,177,1,95,53,77,162,+2,95,55,54,224,176,0,1,55,55,192,10,0,58,96,6,83,189,158,48,+224,5,2,160,78,145,57,162,224,128,6,0,58,96,80,224,52,27,224,59,+2,0,58,96,139,224,52,20,224,98,2,160,59,0,58,96,198,224,52,27,+224,112,2,0,58,97,1,116,145,0,66,98,221,191,189,87,126,0,64,96,+19,211,136,191,209,1,95,53,163,72,124,197,160,35,131,111,67,134,0,52,+101,226,0,67,64,9,139,88,1,64,58,96,123,97,124,65,84,79,148,1,+95,53,79,133,0,58,97,136,223,224,0,51,111,47,128,31,0,58,96,31,+192,148,243,198,2,228,10,0,116,23,98,239,99,220,0,53,120,244,192,13,+1,51,50,67,239,226,175,1,64,82,2,10,65,32,84,24,226,26,2,96,+25,218,107,96,84,99,208,0,66,66,242,226,64,7,196,23,160,4,1,83,+32,68,27,224,48,32,193,90,132,59,246,216,5,224,208,1,1,67,39,69,+28,244,181,4,224,238,3,64,97,65,31,90,225,129,96,0,53,67,169,178,+155,2,64,64,75,100,121,160,60,160,108,128,111,164,235,160,114,215,97,64,+88,192,25,160,121,224,115,22,224,113,5,224,111,3,224,49,17,0,54,133,+109,224,0,2,0,58,100,37,193,245,1,53,54,68,25,0,52,96,75,160,+16,4,49,32,95,50,53,67,137,2,51,53,50,68,59,0,50,68,91,132,+219,5,53,54,50,32,95,51,69,168,205,62,66,56,96,44,224,155,4,0,+58,96,119,129,242,2,52,32,75,64,131,0,58,64,59,128,118,0,89,193,+111,98,177,225,174,1,230,78,3,192,21,162,217,224,29,0,160,165,248,54,+2,0,58,64,177,128,88,69,43,229,208,4,16,102,111,108,100,108,49,58,+32,101,109,112,116,121,32,108,105,115,197,194,1,53,53,99,122,0,54,223,+7,160,146,0,83,226,1,4,64,91,64,39,133,188,160,134,0,85,245,201,+6,98,229,97,13,248,123,1,192,189,119,80,163,157,133,255,64,182,1,95,+50,138,82,228,31,0,97,59,69,237,163,48,130,32,5,95,57,56,32,95,+49,134,23,66,109,224,13,1,96,151,188,35,228,99,3,227,137,2,133,154,+64,83,99,231,66,13,164,0,70,14,68,91,0,80,187,198,214,108,64,15,+64,9,200,28,2,95,51,50,91,200,96,77,0,58,96,6,96,110,66,33,+166,113,101,215,66,27,99,192,0,73,195,49,135,157,227,125,4,128,113,230,+51,2,96,153,228,7,1,128,209,165,218,131,28,64,59,163,69,250,139,2,+68,255,193,157,97,92,229,44,3,226,255,0,192,86,194,215,184,216,129,39,+131,146,128,15,133,35,130,246,1,52,57,224,155,0,99,219,128,57,121,45,+162,149,161,25,224,46,1,224,102,0,160,44,228,59,3,224,184,11,224,134,+15,229,172,0,224,137,8,192,90,224,134,27,224,181,2,225,11,3,224,73,+0,161,11,98,27,0,55,227,35,2,7,92,34,46,47,108,105,98,47,72,+252,7,47,73,110,116,101,103,101,114,96,7,12,114,110,97,108,46,104,115,+92,34,44,53,52,58,141,175,0,58,97,251,104,122,0,53,118,220,99,69,+64,117,163,35,97,150,128,238,254,68,0,98,253,96,23,202,9,67,51,164,+64,225,238,0,64,41,228,17,4,132,223,128,5,227,216,8,19,105,109,112,+111,115,115,105,98,108,101,58,32,120,115,32,62,61,32,121,115,96,161,0,+75,68,160,224,223,39,3,57,48,58,54,132,24,0,64,97,147,130,85,128,+189,226,90,0,227,194,3,2,85,32,65,129,145,227,193,1,0,49,250,248,+0,228,187,0,199,250,71,39,229,26,0,196,200,224,80,12,98,204,224,80,+8,97,180,96,69,97,129,196,237,99,108,102,57,69,16,0,57,87,207,140,+31,131,248,131,255,180,68,164,82,224,37,1,64,106,224,14,3,228,109,1,+1,95,50,180,102,0,58,96,114,163,245,65,190,0,85,231,102,22,166,124,+98,108,0,56,229,33,11,1,64,58,66,176,164,183,1,95,51,70,35,167,+12,66,47,227,27,3,129,116,200,98,0,52,201,107,96,169,128,120,202,88,+0,52,165,8,228,214,1,0,53,75,46,66,7,169,11,195,56,105,29,105,+51,193,127,169,92,131,139,163,169,68,200,157,35,139,52,0,52,96,210,96,+17,201,82,0,58,96,7,202,205,96,223,1,95,49,106,211,0,49,137,229,+106,211,0,49,106,211,0,49,106,211,106,205,96,73,138,205,96,10,0,58,+96,6,3,10,65,32,75,65,252,0,58,96,155,64,13,2,50,32,58,96,+185,96,25,0,75,96,25,195,116,0,52,227,116,1,67,206,227,116,2,164,+99,130,15,230,160,9,162,126,230,162,8,226,216,15,97,160,64,110,162,131,+231,143,1,100,172,226,208,3,227,48,46,224,91,1,227,48,9,224,95,4,+227,48,31,224,80,2,162,131,194,114,227,48,9,131,30,227,29,0,101,45,+231,110,2,224,11,3,0,58,96,71,1,10,65,77,221,0,58,96,147,143,+46,2,53,51,55,65,104,64,76,109,159,1,64,58,77,185,193,146,111,59,+96,87,232,84,0,224,200,1,72,19,98,116,1,95,51,125,178,0,64,66,+254,161,72,198,53,163,23,225,75,0,160,7,0,83,96,167,225,73,1,104,+23,128,240,101,240,0,53,97,127,0,80,193,31,225,15,0,224,8,0,143,+10,127,53,97,215,2,51,51,57,142,183,64,191,130,213,240,11,10,196,62,+238,190,0,160,127,233,203,1,162,128,238,206,4,233,198,3,200,28,169,71,+195,130,97,231,110,228,99,57,240,87,0,224,69,14,129,80,240,54,12,160,+27,112,59,64,92,163,221,2,66,32,95,76,239,234,47,2,67,147,131,41,+241,115,0,253,110,6,205,12,164,119,240,243,5,0,58,111,184,144,88,225,+175,0,235,238,1,167,232,163,125,225,111,4,65,144,129,111,135,137,224,62,+48,129,241,224,62,48,185,163,194,97,129,141,226,121,2,224,60,21,165,225,+1,52,53,242,165,3,15,118,97,108,68,105,103,58,32,66,97,100,32,98,+97,115,101,135,76,0,83,98,226,88,249,64,9,99,186,103,10,94,203,0,+49,74,81,0,35,98,254,190,221,96,17,87,53,97,29,68,192,224,49,11,+190,103,224,49,3,126,17,74,175,68,47,67,5,1,48,57,132,18,67,197,+97,181,230,250,0,134,234,95,53,128,5,128,78,250,182,0,224,61,39,131,+189,224,61,12,224,48,13,70,172,162,132,1,53,51,98,79,101,168,1,53,+51,81,177,224,192,9,224,68,23,225,36,15,96,33,225,36,5,139,228,224,+99,41,132,38,0,58,67,164,164,219,224,109,27,76,21,64,52,134,197,96,+227,98,7,224,127,39,0,58,97,37,70,250,227,240,6,254,29,8,128,131,+224,20,5,80,118,224,20,8,147,149,224,21,7,255,152,12,0,49,102,30,+254,115,7,127,6,254,115,9,253,101,10,224,17,8,128,212,224,16,19,132,+25,224,16,7,1,58,53,86,38,207,178,229,156,7,227,189,5,181,181,230,+64,1,134,92,128,11,134,97,144,134,166,109,224,35,5,236,181,3,231,206,+2,240,102,6,0,39,68,19,224,21,2,224,66,0,100,75,227,58,2,189,+117,230,194,0,236,19,0,70,216,64,66,137,105,241,204,2,96,4,66,23,+229,155,0,0,89,160,93,102,252,97,135,70,42,134,179,97,15,247,57,1,+134,10,146,179,226,89,3,192,134,225,87,1,128,119,66,136,1,52,57,105,+172,65,83,0,56,129,176,224,23,2,193,109,96,25,1,95,52,80,12,64,+0,70,146,64,73,160,48,96,139,0,58,94,63,200,27,66,229,226,51,2,+64,28,208,105,230,186,8,129,144,0,82,215,65,230,108,3,0,58,96,72,+226,254,7,0,48,131,56,230,188,14,235,44,1,224,49,0,152,47,1,58,+53,64,24,119,73,93,95,117,235,64,25,64,94,2,52,54,57,64,45,118,+55,99,132,151,77,1,52,55,81,211,160,86,107,13,96,11,0,58,96,6,+132,13,72,255,0,53,90,86,64,146,1,51,56,64,247,0,52,86,5,151,+187,90,61,179,248,178,4,64,42,139,255,104,57,236,191,0,0,53,67,107,+233,212,1,64,17,108,134,103,193,0,53,91,29,232,194,0,107,44,71,207,+195,16,0,52,64,118,103,208,96,182,64,29,227,46,2,97,200,96,29,2,+52,54,56,64,44,98,12,0,58,96,42,161,174,3,49,53,32,35,106,45,+232,228,1,65,50,1,95,53,67,194,192,138,224,40,0,152,56,0,56,97,+49,162,49,0,58,96,190,225,223,3,77,33,0,53,104,104,105,35,146,7,+75,154,236,122,2,2,32,95,52,140,143,96,90,64,155,64,79,1,95,53,+157,212,96,86,64,120,129,64,0,51,76,24,96,18,129,197,2,95,52,57,+87,253,66,13,0,58,96,104,128,125,97,11,0,90,108,235,0,48,162,67,+64,196,228,59,5,128,156,179,243,246,169,1,228,230,3,96,253,105,117,0,+58,64,245,224,113,2,66,31,0,58,96,27,128,19,2,48,32,95,64,186,+82,98,64,23,165,175,160,157,0,49,96,43,247,74,0,1,95,52,69,61,+1,95,53,71,49,67,53,1,58,53,69,141,128,224,0,50,97,252,0,58,+96,27,192,203,64,44,0,52,69,219,1,58,53,70,47,235,197,0,164,108,+128,8,75,93,2,58,53,48,129,22,129,242,0,53,66,252,114,166,209,162,+0,48,118,213,0,48,182,213,128,239,100,183,0,89,116,55,66,90,64,77,+68,192,137,72,212,106,233,20,4,1,95,51,109,230,0,51,67,46,2,51,+55,49,118,133,204,113,128,36,234,103,2,224,239,0,226,85,6,96,208,196,+183,65,138,161,43,97,143,163,183,96,181,64,182,100,18,2,53,48,52,233,+108,2,19,80,114,101,108,117,100,101,46,114,101,97,100,58,32,110,111,32,+112,97,114,201,114,150,73,3,95,53,48,53,175,2,224,57,18,8,97,109,+98,105,103,117,111,117,115,224,64,3,65,36,130,47,66,68,64,13,129,252,+101,153,128,16,129,249,109,14,64,158,228,158,10,229,178,1,150,243,166,35,+226,243,6,235,198,11,155,250,229,167,7,0,58,97,28,226,110,0,0,52,+72,94,0,58,96,49,224,19,2,129,224,226,60,2,68,139,66,58,65,94,+226,99,0,104,205,97,129,96,183,163,115,228,70,2,64,166,251,170,5,141,+158,3,95,52,56,51,225,194,1,1,56,53,192,11,0,58,96,6,64,76,+96,179,0,50,97,218,163,133,196,37,140,189,1,95,49,224,64,1,227,237,+0,2,64,95,50,98,7,133,99,0,57,224,86,3,129,134,246,65,1,0,+66,134,167,98,160,224,18,7,1,66,39,180,26,129,47,64,72,224,147,1,+0,49,128,147,69,7,71,115,160,135,134,108,96,135,113,79,128,135,128,10,+96,251,64,10,0,58,96,6,225,42,0,0,52,193,42,101,83,132,203,225,+30,5,96,85,161,30,101,241,96,6,64,64,0,51,229,172,3,173,150,0,+55,160,158,64,64,97,41,100,226,96,6,224,50,3,96,109,195,158,0,67,+96,58,224,49,0,101,240,96,6,5,10,65,32,73,32,58,96,44,160,10,+64,106,194,13,87,7,99,141,160,16,86,110,231,199,5,0,58,96,36,192,+235,78,114,135,154,224,5,0,101,35,206,231,96,67,172,140,1,52,54,64,+200,200,62,160,27,138,124,224,27,6,165,39,248,78,1,230,148,4,68,64,+232,136,3,120,109,132,241,2,95,52,56,97,219,97,115,65,255,175,120,132,+186,164,169,120,179,227,108,1,137,169,64,26,80,140,224,21,1,69,48,103,+87,228,173,1,193,17,128,0,224,24,1,161,214,168,255,97,214,96,11,0,+58,96,6,129,74,167,245,0,56,83,142,64,34,64,22,102,176,64,14,253,+175,1,226,172,0,131,148,255,214,1,97,18,161,52,66,27,1,95,52,89,+150,64,34,195,244,104,157,65,144,128,43,247,69,7,234,183,1,224,19,2,+128,115,214,87,224,32,2,224,9,10,65,59,150,163,225,213,0,232,47,7,+133,231,101,239,65,135,97,116,192,17,131,137,1,95,52,113,138,97,242,224,+55,7,224,177,7,129,163,226,90,0,162,84,64,41,192,83,224,84,5,224,+82,5,224,81,11,224,91,4,224,82,9,224,181,1,224,56,17,226,225,5,+224,57,18,225,108,9,224,9,2,101,243,160,63,193,246,160,230,224,236,16,+96,98,227,54,2,194,242,139,111,224,113,1,160,218,97,155,98,173,185,23,+64,125,2,95,52,55,68,192,0,55,102,92,162,66,96,0,224,96,0,113,+176,64,122,200,243,224,147,25,226,150,5,224,96,2,131,154,177,117,225,1,+0,161,4,224,13,22,99,150,130,112,97,96,224,237,0,99,245,128,13,224,+253,1,227,241,0,98,144,173,239,96,17,157,165,225,15,9,224,244,4,64,+97,224,96,22,130,105,224,95,2,162,122,128,94,228,23,3,194,3,226,190,+6,225,67,29,225,216,24,160,105,225,206,21,226,190,21,192,9,195,208,226,+240,25,224,49,11,224,176,2,228,6,9,225,89,8,229,234,0,96,181,224,+43,4,224,45,6,225,52,0,224,137,18,96,135,226,27,5,193,59,224,138,+21,250,245,14,27,84,101,120,116,47,80,97,114,115,101,114,67,111,109,98,+105,110,97,116,111,114,115,47,82,101,97,100,80,154,252,5,49,52,49,58,+49,48,250,254,0,64,0,141,248,128,103,141,248,128,11,0,58,96,6,113,+209,144,61,132,152,64,47,137,58,238,2,4,181,182,0,58,64,64,230,19,+0,64,170,0,58,96,46,192,70,66,52,70,139,101,222,64,55,96,71,173,+113,76,187,160,21,198,148,2,95,52,55,103,203,88,215,192,85,108,57,96,+23,128,17,102,138,64,53,102,62,1,55,49,135,27,197,82,98,76,107,174,+130,226,248,84,2,64,158,206,133,96,106,72,30,98,132,3,95,52,55,52,+192,11,0,58,96,6,198,215,162,193,128,202,119,177,130,213,0,66,115,18,+100,41,64,80,67,81,89,240,64,15,130,59,1,95,50,77,105,248,179,2,+96,248,85,113,224,35,4,224,51,20,247,192,2,130,45,209,190,71,242,236,+201,5,164,170,128,170,159,64,96,164,1,52,55,224,250,0,228,173,0,163,+151,224,43,5,224,214,0,118,31,96,139,224,223,37,224,224,49,195,80,227,+50,4,242,193,0,210,205,136,243,224,250,2,229,160,1,224,202,2,64,5,+162,119,224,254,9,128,72,225,2,3,224,56,13,225,11,122,224,170,5,119,+199,132,201,234,1,1,235,52,1,97,5,101,84,166,36,224,192,1,81,146,+160,99,224,147,48,101,232,167,35,224,7,2,224,141,117,224,104,10,224,103,+76,96,89,128,199,224,240,119,64,16,1,54,48,230,7,2,31,115,116,105,+109,101,115,58,32,112,111,115,105,116,105,118,101,32,109,117,108,116,105,112,+108,105,101,114,32,101,120,112,101,3,99,116,101,100,101,251,0,58,68,223,+229,219,4,226,220,31,128,146,96,0,128,213,1,95,50,93,16,224,204,24,+224,55,0,224,195,4,224,54,39,98,103,0,58,99,196,108,142,109,49,173,+28,0,83,157,121,175,41,141,14,194,154,96,52,244,38,1,178,72,0,58,+70,44,166,68,0,50,96,14,208,80,128,1,196,17,224,11,0,224,59,2,+64,81,86,154,240,106,0,64,209,0,58,103,32,174,115,1,54,53,103,49,+80,169,78,22,128,22,223,59,175,201,0,58,96,31,70,91,1,32,58,96,+48,207,198,0,54,65,83,172,16,174,70,143,201,141,156,111,201,103,112,143,+201,160,10,206,202,64,87,175,201,0,51,164,218,128,5,134,191,213,135,104,+109,70,226,239,160,2,64,120,233,198,7,224,28,7,238,216,11,140,185,224,+65,9,175,255,96,24,65,34,161,179,159,36,175,214,96,49,0,58,96,6,+224,178,0,137,139,112,120,67,84,227,51,0,192,75,65,61,199,187,133,177,+128,46,96,33,0,49,78,186,224,34,4,0,58,96,125,128,93,1,95,51,+72,8,128,121,161,132,130,6,0,80,65,132,130,2,0,90,160,1,120,249,+1,64,58,96,199,211,24,224,4,3,158,131,128,205,0,58,97,4,1,10,+65,194,14,0,58,97,37,96,76,224,55,6,224,85,0,129,252,224,85,8,+224,34,3,232,123,1,235,130,2,237,186,2,64,240,255,53,0,97,114,139,+193,131,215,160,14,0,85,164,137,160,38,231,63,3,169,105,0,67,129,146,+98,115,128,64,113,47,129,153,64,17,97,59,3,54,48,32,58,117,106,161,+45,65,72,146,182,212,0,135,103,97,227,0,90,180,1,185,71,231,158,1,+131,70,168,158,244,46,4,251,121,2,92,78,130,71,133,85,225,26,1,96,+214,64,85,1,95,52,92,156,128,0,224,38,10,224,123,2,64,195,193,227,+229,51,6,15,105,110,105,116,58,32,101,109,112,116,121,32,108,105,115,116,+101,31,68,77,225,84,0,224,122,4,193,48,224,123,1,0,58,96,9,97,+198,232,58,0,2,115,101,113,192,221,128,19,224,16,2,228,75,11,1,64,+58,96,170,133,144,86,109,0,56,161,6,246,125,5,224,181,1,3,35,108,+105,110,181,196,64,24,69,54,1,53,50,224,213,2,8,123,45,35,32,76,+73,78,69,32,96,35,65,49,106,253,66,31,0,51,139,108,0,51,66,244,+1,95,52,133,94,224,56,1,3,32,35,45,125,128,87,1,58,52,93,151,+128,215,225,12,1,67,20,181,51,235,68,1,64,86,134,169,131,109,2,95,+52,52,68,138,149,251,128,15,0,54,192,15,0,58,96,41,96,86,242,213,+0,225,104,1,207,242,98,71,242,153,0,0,58,64,63,225,29,0,0,49,+67,86,1,95,52,70,118,129,228,1,52,32,224,192,3,9,94,41,94,42,+94,43,94,44,94,45,166,234,64,118,224,111,7,130,24,230,43,1,64,85,+155,73,249,20,2,96,60,242,211,0,128,26,1,52,52,111,39,0,51,88,+92,1,95,50,70,136,0,58,96,137,67,30,1,54,54,130,132,130,230,234,+62,0,2,67,32,60,94,32,97,12,224,26,12,90,192,224,26,15,111,197,+224,26,13,126,79,227,122,0,224,26,4,160,221,0,85,65,146,64,226,68,+44,1,61,61,192,25,160,254,99,224,223,250,224,44,12,161,17,224,44,8,+224,117,14,97,52,224,72,12,134,191,224,117,30,134,225,224,117,10,225,7,+14,98,58,224,145,13,184,124,224,100,10,109,229,224,145,31,103,93,225,7,+33,98,180,224,72,12,151,134,224,117,30,98,104,225,7,12,226,97,14,194,+16,225,35,10,100,171,224,173,13,108,97,224,128,12,112,17,224,173,31,64,+97,225,35,33,125,238,224,72,12,96,25,224,117,31,96,242,226,43,16,96,+118,225,34,5,195,78,224,145,10,226,189,16,96,25,224,145,32,226,189,16,+224,45,12,226,134,15,225,200,15,96,164,225,253,13,97,199,224,26,13,98,+144,224,245,13,165,119,224,154,10,226,244,15,224,44,12,226,216,15,224,117,+14,100,240,224,72,12,226,244,15,224,44,12,226,160,15,225,7,14,98,115,+224,144,13,181,10,224,99,10,226,215,15,224,44,11,226,186,15,224,116,13,+96,29,224,70,11,226,212,15,224,43,11,226,155,15,225,3,15,194,10,224,+25,9,198,159,224,168,9,182,73,224,124,9,226,235,15,224,43,11,226,233,+16,224,114,12,226,150,16,226,149,35,226,148,16,228,28,14,225,0,16,226,+174,16,226,173,36,228,24,35,229,77,16,111,10,0,50,78,9,104,136,0,+58,96,6,174,113,5,52,48,32,64,95,54,74,46,160,26,138,242,239,33,+2,0,85,233,108,0,128,5,64,0,64,119,192,239,114,86,128,136,0,64,+233,150,1,128,17,96,32,252,77,5,173,149,245,67,1,0,58,96,131,105,+168,64,182,234,49,0,3,95,52,51,56,96,224,138,134,96,61,1,35,51,+208,200,0,58,106,147,233,162,6,235,165,5,5,102,111,108,100,114,49,235,+167,8,65,60,129,197,64,140,160,14,141,147,224,10,3,64,121,192,105,202,+211,105,209,0,49,80,110,65,106,1,52,51,216,177,126,36,136,83,236,255,+0,0,51,202,177,0,95,79,211,72,160,0,58,96,48,207,252,206,45,86,+138,192,103,253,26,0,224,29,0,224,31,2,64,32,138,88,111,93,1,95,+52,97,11,142,152,3,58,52,51,51,138,79,2,51,54,51,74,151,65,213,+98,1,0,58,96,38,206,48,0,85,96,16,129,226,6,95,49,51,54,32,+75,32,130,68,0,66,122,63,175,182,0,51,134,242,161,13,98,29,1,49,+54,225,88,2,4,32,32,97,116,32,76,76,0,32,216,20,192,66,128,63,+1,49,51,76,127,133,176,129,31,224,66,9,2,99,111,108,192,61,130,76,+224,57,8,66,75,125,247,224,61,9,13,94,42,32,32,32,32,117,115,101,+100,32,98,121,32,160,71,128,60,1,52,51,237,222,0,128,20,0,52,80,+235,96,20,2,95,49,52,81,38,96,11,0,58,96,6,141,219,98,114,226,+104,1,162,168,165,197,0,52,139,23,0,58,96,7,160,47,65,87,1,75,+50,204,17,1,58,52,64,15,111,178,97,94,74,184,96,40,0,73,89,162,+0,95,249,117,7,31,99,112,112,104,115,115,114,99,47,109,97,108,99,111,+108,109,45,119,97,108,108,97,99,101,45,117,110,105,118,101,114,115,1,101,+47,96,33,6,45,49,46,50,48,46,57,128,12,153,135,3,55,57,58,49,+205,102,66,79,96,100,0,75,195,233,64,8,192,143,130,71,3,75,32,58,+52,66,148,120,226,113,253,74,30,1,58,52,66,160,96,19,0,56,127,92,+73,60,1,95,52,137,184,1,51,50,65,33,138,69,1,51,51,68,49,192,+11,76,198,96,11,0,58,96,6,194,63,131,118,225,156,4,10,69,120,105,+116,83,117,99,99,101,115,115,128,173,161,223,0,52,73,238,79,175,3,56,+50,32,95,89,155,231,66,1,225,225,9,64,68,5,70,97,105,108,117,114,+174,177,224,36,1,0,79,132,5,148,223,3,95,49,51,56,162,49,168,205,+225,244,1,202,139,96,210,64,11,0,58,96,6,115,57,102,202,193,233,68,+127,178,51,160,16,128,73,0,58,96,178,97,42,0,57,65,104,2,51,53,+52,64,107,0,56,224,167,2,6,83,121,115,116,101,109,46,64,174,64,167,+224,192,5,2,67,111,100,128,189,96,171,0,58,97,105,180,42,2,83,32,+95,65,134,145,96,78,57,0,58,65,161,64,29,224,66,1,130,1,0,34,+96,27,130,83,1,95,52,114,165,0,48,96,18,130,1,70,123,3,39,32,+95,48,228,127,0,0,52,73,132,78,226,73,95,129,97,0,58,64,54,128,+121,2,95,51,57,228,191,1,64,33,0,58,96,47,110,173,101,20,134,226,+132,233,78,187,84,175,64,78,1,51,57,65,98,5,50,48,57,53,49,48,+64,61,4,35,53,53,50,57,100,38,99,57,1,52,48,112,25,0,48,99,+185,70,145,1,95,52,65,142,1,95,52,99,203,224,211,1,17,104,80,117,+116,67,104,97,114,58,32,115,117,114,114,111,103,97,116,161,223,1,95,51,+160,141,130,156,1,80,32,105,214,0,73,96,18,245,132,1,96,105,99,144,+251,88,1,224,9,5,99,191,0,52,64,246,1,95,50,96,41,118,17,0,+51,142,195,128,6,0,58,96,154,224,81,0,64,1,149,181,164,240,192,14,+224,11,2,192,8,209,120,64,95,97,143,3,48,56,32,58,96,145,96,13,+84,101,79,228,0,58,64,23,227,99,3,0,48,113,253,0,48,104,251,131,+99,64,38,195,99,192,11,67,99,96,11,0,58,96,6,227,99,1,115,26,+128,1,102,155,104,113,246,177,1,224,5,0,97,182,161,148,64,11,64,174,+99,161,108,142,128,19,96,31,131,54,0,52,97,201,227,121,6,0,58,229,+150,1,230,13,2,224,36,15,193,27,229,194,0,67,90,130,57,0,51,86,+215,65,125,224,72,28,128,162,192,185,209,96,224,171,3,106,107,224,94,10,+230,94,12,0,40,196,122,224,122,7,0,79,131,221,249,29,0,192,118,228,+53,0,129,164,132,53,96,11,0,58,96,6,231,48,1,67,68,64,78,0,+85,254,157,1,236,42,1,224,18,6,109,16,224,19,7,64,84,242,176,0,+160,19,97,159,236,95,6,69,34,0,85,244,117,4,5,116,101,114,114,117,+112,217,144,224,28,4,14,114,101,115,111,117,114,99,101,32,118,97,110,105,+115,104,192,34,224,35,4,89,233,1,111,117,201,5,224,110,7,65,95,224,+45,3,20,117,110,115,117,112,112,111,114,116,101,100,32,111,112,101,114,97,+116,105,111,110,224,120,9,12,104,97,114,100,119,97,114,101,32,102,97,117,+108,192,91,224,243,8,69,80,224,243,7,68,25,224,132,7,73,59,224,243,+5,14,97,112,112,114,111,112,114,105,97,116,101,32,116,121,112,164,46,224,+35,5,12,118,97,108,105,100,32,97,114,103,117,109,101,110,192,131,224,34,+3,3,102,97,105,108,225,18,0,224,115,7,69,34,224,44,3,4,112,114,+111,116,111,72,159,4,101,114,114,111,114,224,111,9,0,115,101,243,224,29,+3,224,240,9,225,247,10,225,246,10,225,245,10,225,244,7,21,117,110,115,+97,116,105,115,102,105,101,100,32,99,111,110,115,116,114,97,105,110,116,167,+89,224,40,4,0,115,91,176,224,147,2,224,210,4,13,101,114,109,105,115,+115,105,111,110,32,100,101,110,105,225,10,15,226,2,7,6,105,108,108,101,+103,97,108,225,254,19,9,101,110,100,32,111,102,32,102,105,108,161,153,224,+247,8,225,230,10,225,229,7,226,188,0,5,101,120,104,97,117,115,226,224,+21,3,98,117,115,121,225,201,14,224,86,6,10,100,111,101,115,32,110,111,+116,32,101,120,235,252,0,224,31,3,6,97,108,114,101,97,100,121,128,30,+161,82,128,0,196,11,174,128,100,11,150,136,64,6,196,11,2,95,51,53,+75,135,101,69,107,211,247,82,8,5,72,97,110,100,108,101,132,140,0,67,+170,95,228,129,8,128,94,64,68,0,58,96,6,232,112,27,3,73,79,46,+69,193,235,224,28,1,6,73,79,69,120,99,101,112,225,169,0,168,119,70,+125,7,10,65,32,94,112,117,116,98,70,174,218,213,3,57,57,32,79,64,+6,64,147,3,95,52,48,48,160,148,0,58,103,204,250,147,3,64,26,183,+212,153,47,134,135,230,145,2,167,43,237,31,4,1,51,57,151,137,236,28,+0,232,168,4,166,141,4,51,57,52,32,95,150,204,72,101,0,54,65,85,+0,57,101,234,237,205,6,3,66,97,100,32,129,78,1,32,109,201,87,96,+37,0,57,174,231,0,58,64,207,104,201,121,80,249,250,3,120,122,192,151,+169,232,0,51,104,189,104,188,1,51,57,87,152,237,195,1,128,76,167,193,+3,57,55,32,58,96,32,73,155,2,112,50,112,64,13,0,54,128,26,87,+187,0,39,74,74,224,5,4,219,99,111,152,204,46,171,155,224,6,12,224,+42,2,64,15,171,207,224,42,29,160,28,224,49,10,224,42,15,224,49,10,+224,42,22,224,49,3,176,72,129,162,0,58,96,6,98,24,0,82,64,240,+3,95,51,56,57,138,211,0,58,65,214,129,139,0,95,89,13,80,155,0,+58,98,15,5,10,65,32,97,110,100,65,68,233,213,1,0,89,156,94,155,+6,72,175,108,38,137,254,194,41,168,17,143,149,0,66,129,207,0,64,80,+40,129,172,201,208,0,85,224,135,8,130,186,79,83,111,73,0,58,96,27,+99,193,162,16,0,95,89,138,226,185,4,224,180,2,142,13,226,209,0,0,+56,104,45,2,58,51,56,130,28,240,114,8,3,104,101,97,100,240,112,8,+0,75,64,251,64,57,97,15,100,179,0,89,201,208,64,250,96,10,160,255,+128,252,253,185,0,170,216,229,81,0,96,39,224,5,0,145,180,1,95,51,+90,81,179,161,96,2,112,184,225,80,0,98,252,112,16,96,40,2,95,51,+55,98,228,224,42,1,128,6,224,38,0,224,87,6,160,47,192,159,132,195,+3,67,39,32,79,96,33,0,53,164,51,128,30,96,185,3,95,50,48,49,+169,158,64,33,0,54,132,241,192,40,170,16,97,111,113,41,132,22,128,85,+64,54,0,57,251,152,3,1,45,79,131,231,128,71,197,51,228,106,0,64,+64,224,52,10,9,45,115,116,114,105,112,45,101,111,108,164,37,224,188,131,+229,43,4,224,192,20,231,79,0,225,169,255,225,169,104,193,171,176,40,255,+88,15,6,45,45,104,97,115,104,101,232,65,1,227,137,255,227,137,255,225,+169,255,227,137,51,64,18,131,120,224,9,12,234,103,3,65,166,170,158,167,+55,64,14,227,203,0,209,60,72,100,80,73,0,49,83,127,96,176,128,0,+224,39,0,113,63,225,246,4,160,62,99,214,224,76,1,96,37,167,173,128,+2,96,17,192,71,138,15,192,17,115,103,64,14,145,51,192,140,128,45,64,+39,97,20,0,54,160,150,224,89,0,209,17,193,67,244,187,0,139,43,128,+22,96,0,75,178,225,13,2,64,173,160,146,114,195,224,94,8,171,4,224,+65,2,225,58,1,64,116,173,98,96,181,129,48,97,234,229,12,16,0,111,+195,45,138,21,146,25,96,93,224,179,4,128,10,0,55,106,127,128,0,229,+53,0,225,173,2,160,124,96,17,225,192,36,225,179,6,160,7,117,248,193,+135,224,68,11,0,49,214,68,227,45,2,224,182,4,192,12,96,184,4,95,+51,55,55,32,155,233,224,196,5,128,182,226,9,0,224,185,0,117,248,2,+51,55,56,160,110,225,67,15,3,97,110,115,105,230,76,0,224,174,0,224,+81,2,224,75,34,4,116,114,97,100,105,78,17,0,97,195,217,160,220,162,+11,224,64,24,1,115,116,208,45,96,0,109,61,96,56,64,45,0,56,100,+244,172,76,220,113,224,34,18,140,111,128,131,226,98,49,0,120,226,98,4,+228,225,2,224,80,47,4,105,110,99,108,117,238,84,1,226,185,8,100,174,+229,45,3,160,48,0,61,225,25,2,131,250,196,15,226,169,0,64,135,224,+130,27,0,80,232,61,6,225,234,6,163,7,102,112,0,56,226,181,1,133,+117,224,70,2,0,67,96,70,224,30,17,128,31,128,228,225,47,49,0,65,+225,128,11,225,0,54,3,45,104,101,108,231,105,0,224,76,56,91,74,242,+176,0,224,79,57,224,78,7,64,62,143,239,228,163,4,128,87,177,17,227,+99,0,228,164,12,198,0,243,46,2,65,220,225,181,1,135,108,231,74,3,+195,80,106,59,207,142,128,18,78,199,160,18,96,123,98,182,225,15,18,224,+33,44,225,160,5,227,228,5,94,228,227,228,7,224,66,10,1,110,111,94,+55,228,79,3,64,195,1,56,49,64,249,240,251,0,224,243,2,224,254,3,+64,41,225,158,13,2,68,85,73,96,82,3,58,51,56,54,178,219,1,56,+48,126,219,0,90,167,129,97,143,64,162,0,56,220,36,0,58,96,179,224,+43,3,178,50,128,46,224,41,1,0,58,97,93,224,40,5,129,227,224,35,+0,0,58,97,147,224,34,3,88,38,224,119,2,65,39,224,121,0,64,46,+250,210,3,226,145,0,64,8,72,114,0,58,96,43,112,181,0,58,64,80,+128,10,91,11,65,108,128,56,176,65,66,67,0,85,65,102,129,250,192,18,+1,66,39,96,21,225,136,1,232,64,0,232,108,2,170,187,97,177,242,247,+1,93,153,157,34,162,149,3,32,95,55,53,221,176,145,17,223,51,0,64,+65,93,103,3,98,229,92,89,115,242,117,136,64,0,128,178,144,249,117,32,+0,65,96,221,73,218,192,17,65,217,0,58,98,233,209,165,126,100,107,64,+128,17,92,22,107,86,255,125,2,128,218,0,58,107,115,126,233,3,95,51,+55,48,98,20,0,58,66,29,193,59,0,55,225,59,4,74,105,179,182,2,+95,51,54,102,241,141,212,64,218,0,58,96,6,10,10,65,32,115,101,113,+117,97,108,32,58,96,33,161,163,2,95,51,54,182,9,0,52,96,72,128,+191,186,120,97,9,1,95,51,74,207,0,58,96,39,98,7,1,54,51,165,+169,192,170,64,38,242,239,2,129,137,65,237,129,145,0,58,64,49,96,58,+242,151,43,0,54,97,113,2,58,51,54,129,15,242,151,8,3,116,97,105,+108,242,151,8,0,65,96,150,211,57,124,189,0,51,64,177,64,204,128,178,+129,62,2,73,32,58,96,16,252,207,1,1,51,53,99,238,0,53,156,183,+92,207,192,56,92,207,224,11,0,68,202,96,11,0,58,96,6,247,54,5,+160,61,231,88,5,120,191,188,19,151,24,128,38,0,58,96,6,1,10,65,+163,207,140,61,92,25,148,134,0,53,163,245,247,53,16,6,67,111,110,116,+114,111,108,247,51,11,96,18,2,67,97,108,137,29,100,104,0,58,96,223,+95,92,141,2,246,237,1,64,7,230,70,1,134,83,0,95,99,68,130,38,+0,53,65,135,67,200,171,78,98,22,2,95,51,53,171,90,140,169,0,58,+64,160,130,151,119,94,96,30,227,212,3,227,95,0,227,184,1,235,158,0,+0,58,98,104,96,155,0,85,225,229,7,9,109,100,53,67,111,109,98,105,+110,101,161,235,133,103,64,143,66,104,0,90,97,61,2,95,50,54,168,71,+1,48,53,64,86,65,72,0,89,96,116,64,251,102,181,66,159,236,116,1,+194,163,236,33,2,128,236,100,93,198,230,1,95,51,97,6,97,15,0,56,+164,7,0,95,87,144,1,95,51,228,92,0,128,190,130,112,8,94,109,100,+53,65,114,114,97,121,66,92,216,94,226,251,1,0,57,76,161,64,155,1,+95,51,135,50,100,143,248,61,1,247,209,4,1,95,51,66,187,224,46,3,+169,187,192,46,1,95,49,121,94,227,51,5,0,52,167,45,0,58,96,200,+162,231,64,20,68,253,96,211,172,105,229,3,10,205,237,224,106,0,225,53,+3,192,25,232,101,5,4,67,32,95,54,52,160,67,3,95,49,55,52,129,+35,4,95,51,51,57,32,128,82,64,0,225,117,1,96,55,238,103,2,248,+191,2,64,187,255,228,1,128,45,96,96,172,205,229,135,7,226,141,0,142,+40,224,70,0,224,43,10,194,119,224,38,0,160,16,0,58,65,97,226,178,+0,0,90,151,74,64,21,0,54,163,214,0,50,67,114,68,176,225,253,0,+129,247,124,207,0,95,87,114,0,58,97,153,2,10,65,32,95,0,0,58,+96,28,128,57,0,53,100,81,91,18,1,95,51,90,120,65,173,101,156,0,+52,65,207,1,50,52,80,91,64,89,64,11,67,76,192,11,192,113,68,67,+0,48,224,11,0,65,79,64,107,131,82,2,114,101,109,64,107,186,240,2,+49,50,54,64,107,96,157,97,135,98,197,115,143,64,53,64,54,130,156,97,+49,96,131,65,157,64,147,0,58,96,39,183,192,226,21,1,70,35,97,189,+252,243,2,0,95,70,186,165,163,98,113,5,56,32,95,51,51,55,227,167,+2,31,92,34,46,47,108,105,98,47,68,97,116,97,47,73,110,116,101,103,+101,114,95,84,121,112,101,46,104,115,92,34,44,51,2,57,58,49,169,33,+100,11,1,51,51,160,171,68,39,2,95,54,49,226,47,1,96,30,1,50,+49,101,72,164,99,3,95,50,49,54,160,19,193,204,253,37,0,104,97,172,+93,160,158,0,83,64,235,73,52,160,83,168,60,96,69,128,13,0,79,64,+211,0,79,235,228,2,68,66,64,29,224,21,3,2,95,50,49,97,232,1,+50,50,64,70,0,58,97,78,5,10,65,32,65,32,58,96,188,230,96,2,+101,177,3,95,51,51,54,65,165,0,51,130,84,67,120,64,16,230,96,2,+0,49,100,57,96,77,166,96,192,56,70,96,192,11,66,2,166,2,64,6,+164,67,64,10,73,21,72,108,2,95,51,51,136,79,0,51,199,126,0,85,+131,93,2,95,51,51,165,171,0,39,68,225,64,23,64,203,160,47,224,15,+8,64,65,130,82,200,145,64,23,100,41,177,224,171,186,69,93,101,5,0,+51,66,64,192,68,105,158,224,21,2,128,154,251,81,0,133,72,2,95,50,+48,96,245,0,51,161,67,130,139,2,95,53,53,65,30,130,125,2,75,32,+58,96,45,161,52,64,64,232,223,1,64,90,168,223,253,2,7,224,14,5,+192,170,236,139,1,169,9,96,188,0,58,96,6,201,40,1,50,51,107,108,+192,50,76,200,99,58,65,236,160,26,147,254,224,26,3,0,58,96,91,198,+210,130,125,64,77,130,115,221,33,201,204,1,75,50,234,170,2,234,194,15,+197,102,234,198,27,224,8,1,64,214,96,142,188,141,229,181,2,192,9,128,+44,253,16,4,0,58,96,54,105,198,1,50,49,65,102,201,85,0,58,64,+15,96,24,72,199,139,227,3,95,51,49,54,227,219,2,11,110,111,32,109,+97,116,99,104,32,97,116,32,131,196,96,32,128,149,68,166,130,211,136,219,+163,45,64,6,232,190,29,223,221,0,46,68,53,0,114,177,210,224,39,1,+2,80,97,116,64,22,0,77,64,128,2,70,97,105,232,210,4,67,81,129,+2,0,83,100,4,146,222,130,121,99,53,135,33,163,64,2,95,49,52,66,+16,100,90,195,244,72,120,96,5,77,148,0,54,227,251,0,104,213,98,128,+68,3,225,28,1,83,107,238,250,3,101,98,139,51,3,49,52,56,32,128,+15,99,20,0,54,66,245,0,49,74,82,224,24,2,161,56,224,220,1,4,+39,92,92,39,39,165,23,161,75,96,158,224,82,3,97,246,136,205,224,17,+3,132,240,231,138,3,224,151,1,0,64,160,35,168,50,224,139,0,142,191,+74,168,224,133,4,3,92,92,92,34,238,190,2,0,58,96,131,64,244,65,+24,0,58,97,234,105,156,241,176,4,70,98,0,49,74,193,250,1,2,67,+235,0,67,183,59,160,136,95,18,129,18,64,39,138,227,130,168,191,33,244,+209,2,73,149,96,176,161,144,64,59,129,144,160,200,96,62,193,205,0,51,+95,77,64,216,102,36,255,236,3,0,90,64,28,97,0,64,61,224,231,3,+0,38,240,9,1,131,181,104,141,248,23,0,200,234,136,163,118,101,225,89,+7,224,60,1,149,51,160,223,128,77,160,223,96,224,64,56,128,79,96,177,+65,32,225,163,6,128,162,224,180,1,64,194,226,92,3,78,8,208,121,244,+136,1,224,210,16,80,88,0,80,103,71,224,30,1,2,78,85,76,96,30,+96,25,0,49,224,25,3,2,83,79,72,224,25,1,0,50,224,25,4,1,+84,88,224,25,1,0,51,224,25,3,0,69,224,25,3,0,52,224,25,4,+1,79,84,224,25,1,0,53,224,25,4,1,78,81,224,25,1,0,54,224,+25,3,2,65,67,75,224,25,1,0,55,113,33,1,57,55,161,240,96,19,+145,53,0,57,69,77,224,19,0,0,57,96,19,0,49,66,146,224,20,1,+1,49,48,160,21,0,48,224,21,4,0,49,160,21,224,64,4,66,52,64,+21,0,48,194,91,128,21,0,51,160,43,0,52,224,108,4,128,43,226,134,+0,128,42,224,248,4,0,83,153,219,128,25,224,248,4,0,83,145,190,128,+25,224,248,4,2,68,76,69,224,26,2,0,55,224,26,4,0,67,137,37,+128,26,0,56,224,26,5,0,50,224,26,2,250,96,4,2,68,67,51,225,+203,2,226,0,4,2,68,67,52,224,26,2,226,1,4,1,78,65,225,127,+2,70,14,224,187,2,1,89,78,224,26,2,226,3,6,0,66,224,26,2,+225,11,4,1,67,65,224,53,3,226,5,5,0,77,224,25,2,225,12,4,+1,83,85,224,79,3,225,12,4,1,69,83,149,216,128,26,225,12,4,1,+70,83,224,25,2,225,11,4,0,71,224,25,2,72,96,224,25,1,0,82,+224,25,3,225,9,4,0,85,224,25,2,107,35,225,63,2,0,69,131,64,+198,23,224,0,21,111,11,140,152,0,58,101,112,69,54,229,30,0,77,110,+0,49,79,214,0,35,109,166,173,128,96,17,1,64,35,176,18,66,93,103,+164,0,48,76,80,66,150,198,124,74,215,237,118,10,209,56,0,51,66,238,+0,95,84,183,108,250,235,34,5,198,32,1,56,50,192,53,103,189,228,197,+1,187,113,96,68,224,23,4,104,132,224,39,7,103,58,128,112,128,21,244,+5,0,198,195,164,185,72,15,96,11,0,58,96,6,129,13,101,25,160,201,+224,154,10,224,195,0,99,214,235,190,1,192,114,108,199,237,39,0,224,36,+0,128,160,224,10,5,96,50,158,201,238,20,0,97,89,129,128,102,170,104,+18,224,74,4,0,58,96,102,5,10,65,32,99,104,114,65,131,136,200,0,+83,103,249,65,165,2,95,51,48,64,61,225,215,11,107,87,225,215,5,77,+159,96,84,71,27,141,134,0,51,78,10,225,204,2,2,60,32,64,99,20,+224,19,8,130,37,161,197,160,19,70,12,234,67,1,234,77,2,224,40,7,+66,79,224,40,12,224,102,8,70,134,224,61,7,65,231,224,102,13,108,27,+3,67,32,61,61,64,38,110,158,134,154,224,97,3,0,58,97,34,107,43,+73,49,249,225,3,226,184,5,65,171,1,53,57,240,65,0,0,54,80,15,+83,161,129,188,0,50,64,15,0,51,208,230,1,50,54,79,191,77,94,65,+130,0,53,224,41,1,2,64,95,50,107,135,97,218,64,123,136,189,4,111,+114,100,32,58,96,18,9,10,65,32,98,115,105,110,100,101,120,64,16,180,+205,0,50,66,68,0,50,84,210,128,97,2,95,50,54,72,84,96,11,233,+230,1,85,95,160,169,224,18,4,66,241,224,18,6,129,251,224,18,4,65,+30,224,18,6,224,94,10,113,220,224,18,5,109,112,224,18,5,64,247,224,+18,6,130,31,224,18,4,65,128,224,170,7,224,190,11,224,191,10,99,168,+224,19,7,224,193,10,104,182,224,19,7,224,195,10,143,109,224,19,6,224,+197,10,111,101,224,19,7,224,199,10,108,88,224,19,7,225,135,11,224,199,+10,98,168,224,19,7,224,199,10,98,247,224,19,7,224,199,10,99,93,224,+19,7,163,174,224,19,4,105,187,246,183,6,17,111,69,110,117,109,58,32,+111,117,116,32,111,102,32,114,97,110,103,186,60,162,199,64,7,106,106,1,+95,50,119,198,64,7,99,88,1,95,50,87,252,96,7,146,217,0,50,106,+34,64,7,100,239,1,95,50,81,166,96,7,133,207,0,50,88,149,96,7,+160,79,142,203,1,95,50,127,233,2,64,95,50,89,136,96,7,160,79,0,+56,160,79,89,250,96,7,160,79,90,86,96,7,160,79,0,56,160,79,0,+56,160,79,83,12,64,7,0,57,160,79,0,57,160,79,139,29,1,95,50,+134,147,2,95,50,57,160,79,0,57,132,95,228,137,6,98,69,228,157,7,+64,65,229,44,53,128,7,96,8,96,174,229,42,14,128,7,96,8,96,229,+229,40,35,128,7,96,8,96,225,224,38,8,64,255,64,29,97,7,64,8,+140,54,224,99,8,99,12,224,119,7,130,248,224,80,5,65,96,64,71,97,+104,64,8,199,7,224,38,4,99,71,0,85,138,47,128,8,129,1,66,187,+224,39,4,130,227,224,59,5,161,22,143,47,64,8,129,22,64,9,209,101,+224,169,6,64,41,224,208,7,64,160,224,19,7,131,141,224,109,5,65,55,+64,90,97,63,64,8,199,205,224,38,5,65,55,64,29,97,63,64,8,168,+123,224,98,6,132,63,224,58,5,65,33,64,49,97,41,0,85,108,75,224,+96,9,134,202,96,6,64,7,205,242,224,94,6,64,155,224,18,6,132,57,+224,75,4,65,47,0,85,108,245,96,7,129,52,224,35,6,160,246,192,245,+128,244,225,158,8,226,0,10,161,255,193,6,193,154,167,18,64,47,2,95,+50,50,94,89,198,221,99,52,0,39,177,41,223,228,231,126,3,103,96,128,+46,224,12,5,142,206,2,95,50,51,73,219,160,78,99,193,224,25,12,164,+195,1,51,48,224,64,0,2,95,51,48,231,102,0,0,58,96,6,138,9,+79,115,0,39,137,219,250,37,0,107,104,243,20,2,218,116,72,11,160,217,+145,232,143,165,96,11,192,42,160,134,164,123,92,55,224,6,6,0,58,64,+136,224,124,5,224,121,35,224,108,5,129,92,224,108,10,0,58,64,250,232,+99,0,70,37,72,247,74,57,1,50,57,131,103,0,95,72,185,184,157,230,+28,5,17,73,110,116,46,115,117,99,99,58,32,111,118,101,114,102,108,111,+119,134,26,224,69,5,134,125,87,54,224,69,17,8,112,114,101,100,58,32,+117,110,100,224,70,3,1,73,32,64,2,66,26,79,86,160,143,226,20,3,+183,234,225,216,0,122,237,128,112,192,19,1,51,48,74,244,128,58,64,7,+0,56,192,59,130,178,66,162,224,70,0,128,64,160,51,65,24,139,89,129,+193,0,83,105,215,224,119,1,96,201,0,83,194,230,98,158,65,162,203,205,+242,53,1,209,166,96,65,178,90,210,67,128,84,113,140,167,20,129,190,128,+27,236,25,1,145,250,161,138,129,97,248,16,2,129,91,224,243,0,204,181,+128,163,224,41,1,250,73,0,64,222,224,215,16,96,113,224,215,67,129,242,+224,215,68,133,145,224,215,7,97,189,252,58,0,128,209,96,43,128,176,224,+123,5,160,189,96,199,160,177,162,177,64,90,155,199,226,247,1,249,201,0,+192,9,0,58,98,73,67,53,5,56,49,32,95,56,51,67,206,4,56,32,+95,56,56,132,211,100,233,154,182,98,142,192,40,224,36,9,0,58,98,154,+118,219,64,20,85,197,100,173,128,17,0,49,192,17,132,133,146,252,128,17,+132,26,146,244,128,17,215,35,69,158,128,17,130,191,146,228,128,17,129,249,+146,220,96,17,73,11,128,17,0,55,192,17,128,216,146,210,128,17,128,193,+146,208,128,17,224,179,0,70,159,128,18,224,180,1,192,181,73,143,160,18,+192,182,73,170,160,18,192,183,0,56,224,183,0,71,77,128,18,224,184,0,+71,187,128,18,224,185,0,71,216,96,18,74,22,160,18,192,187,70,26,160,+18,192,188,74,76,160,18,192,189,74,103,128,18,72,135,128,18,224,189,0,+72,163,128,18,225,115,1,192,189,66,76,160,18,192,189,74,211,160,18,192,+189,66,241,160,18,192,189,75,9,160,18,192,189,75,36,160,18,192,189,75,+63,160,18,192,189,66,144,160,18,192,189,70,177,177,169,87,42,101,240,151,+39,2,50,54,52,167,91,197,219,78,37,64,44,9,115,117,98,116,114,97,+99,116,32,58,64,35,224,62,14,1,54,48,224,61,8,128,239,123,112,126,+112,0,58,96,25,254,133,8,96,68,151,130,0,56,64,4,89,193,110,239,+15,10,65,32,34,94,95,94,44,94,41,94,66,94,57,94,59,96,5,18,+53,94,54,94,57,94,58,94,57,94,52,94,57,94,57,94,73,94,38,96,+7,0,66,96,19,30,57,94,89,94,32,94,53,94,57,94,54,94,60,94,+51,94,60,94,89,94,33,94,53,94,58,94,54,94,58,124,32,96,75,22,+57,94,67,94,59,94,61,94,57,94,60,94,61,94,50,94,55,94,58,94,+45,94,61,96,13,8,58,94,40,94,40,94,60,94,33,96,75,31,60,94,+40,94,50,94,56,94,66,94,40,94,57,94,86,94,32,94,58,94,70,94,+32,94,87,94,33,94,58,94,71,94,2,33,94,32,224,3,102,224,33,59,+224,3,53,224,9,1,0,66,224,15,6,64,5,0,66,96,5,2,33,94,+67,224,19,6,224,43,3,224,79,13,224,69,9,224,15,1,2,33,94,50,+160,67,0,67,96,9,0,34,96,25,224,5,3,224,3,21,224,33,25,192,+37,192,77,224,129,3,224,3,99,0,70,96,5,128,11,64,5,128,23,193,+77,224,3,2,1,124,68,97,21,28,90,94,33,94,81,94,49,94,67,94,+60,94,75,94,49,94,77,94,60,94,68,94,49,94,70,94,60,94,49,96,+3,6,80,94,60,124,111,94,35,224,57,0,64,21,64,7,4,48,94,48,+94,49,97,83,8,57,94,32,94,67,94,48,94,60,96,25,67,73,2,32,+94,48,160,3,64,41,0,80,96,11,3,72,94,32,124,193,29,225,211,3,+224,3,35,64,179,64,9,0,58,160,15,96,75,5,124,50,94,32,124,47,+224,75,40,224,3,13,8,61,94,68,94,35,94,37,94,37,224,73,56,224,+3,37,224,29,19,224,67,31,224,3,145,1,48,124,65,79,130,49,4,69,+94,57,124,40,98,53,0,52,96,17,18,61,94,61,94,59,94,48,124,44,+94,35,94,52,94,35,94,57,94,35,224,5,4,6,71,94,48,94,90,94,+50,98,97,67,189,69,87,6,74,94,48,94,69,94,45,229,179,0,0,59,+96,5,64,73,0,74,96,53,64,25,14,57,94,95,94,50,94,49,94,73,+94,50,94,84,94,35,101,231,10,67,94,57,94,50,94,50,94,35,124,98,+96,73,4,50,94,70,94,35,101,187,6,69,94,35,94,49,94,49,96,117,+4,61,94,67,94,35,96,39,64,51,2,66,94,50,96,89,8,50,94,77,+94,57,94,48,94,45,64,63,1,94,93,99,59,0,35,64,193,3,124,88,+94,50,96,119,64,33,0,48,64,51,5,124,32,94,50,94,72,160,81,0,+61,96,139,0,49,96,235,6,35,94,59,94,59,94,85,96,205,64,29,128,+35,0,66,96,5,66,119,64,35,0,78,96,101,64,83,64,23,64,17,64,+15,16,74,94,50,94,68,94,48,94,87,94,50,94,60,94,69,94,50,96,+137,0,45,96,19,3,72,94,35,124,70,103,2,49,94,87,96,205,6,95,+94,35,94,36,124,53,96,167,0,36,96,151,8,66,94,36,94,71,94,35,+94,67,96,15,2,36,94,36,160,249,65,27,129,103,199,7,2,49,94,78,+160,55,4,36,94,48,94,71,96,103,0,48,97,11,64,7,64,185,2,48,+94,70,96,5,64,85,129,145,128,217,128,101,64,215,64,15,128,63,128,7,+64,27,65,197,64,29,192,75,65,85,64,121,64,35,64,121,64,21,65,27,+2,69,94,40,98,15,65,157,128,29,64,37,64,75,64,243,224,63,1,224,+139,7,224,5,7,64,55,64,101,64,125,64,247,128,71,64,23,65,85,64,+185,2,35,94,70,224,191,0,65,13,128,135,64,37,128,155,65,17,224,125,+1,0,72,224,181,0,224,121,11,0,68,225,5,6,129,203,192,59,129,3,+129,71,0,78,160,51,224,251,3,66,191,64,127,0,50,98,133,64,55,225,+125,27,224,119,7,129,217,225,127,13,64,93,128,141,225,129,17,66,225,65,+125,128,245,64,33,65,113,65,41,128,245,65,41,64,13,193,101,128,9,192,+17,192,39,64,7,0,75,161,169,128,123,64,5,128,29,64,145,129,145,128,+213,0,69,96,35,163,51,105,35,0,69,97,251,69,131,64,131,128,43,129,+5,128,131,0,86,96,5,0,79,225,109,4,130,213,129,215,64,165,224,237,+1,192,53,128,173,225,119,9,64,39,2,57,94,70,98,113,194,243,0,57,+224,111,10,67,37,225,107,9,0,68,96,117,193,171,128,235,128,123,64,11,+64,219,226,143,1,224,117,3,128,17,2,36,94,75,225,147,0,0,36,226,+93,3,99,201,64,23,227,79,3,225,59,3,68,141,65,93,64,45,0,36,+96,189,225,201,7,0,72,96,209,132,35,192,159,0,81,161,155,68,63,194,+205,128,207,66,79,131,15,128,85,65,173,130,133,66,129,128,201,128,183,128,+217,0,57,64,185,1,124,47,96,115,64,201,68,71,64,57,67,187,68,131,+68,103,235,85,0,0,124,64,123,226,49,1,129,67,128,131,193,89,128,69,+69,9,128,143,128,35,69,47,64,89,224,123,1,66,127,0,95,96,55,2,+66,94,61,101,37,75,129,64,11,64,251,66,57,64,41,0,73,96,251,69,+195,128,3,75,237,64,3,64,185,97,217,0,124,64,103,64,175,0,77,97,+27,67,169,134,107,64,119,69,197,64,33,128,251,64,63,64,87,134,163,0,+68,107,247,64,115,96,213,1,124,42,97,127,129,161,65,37,133,107,129,111,+129,191,64,143,2,69,94,57,97,23,192,21,131,69,193,221,129,63,65,113,+134,17,0,76,226,135,0,128,211,129,239,0,36,163,31,64,13,2,61,94,+61,167,75,73,13,137,101,64,139,71,79,137,141,1,66,124,129,221,197,153,+196,47,224,17,0,98,97,224,13,1,70,171,224,45,18,102,15,2,48,124,+56,224,51,4,195,87,64,201,4,72,94,57,94,83,98,133,131,153,0,73,+98,123,2,48,124,85,167,241,0,69,170,43,4,52,94,68,124,107,98,189,+10,57,94,80,94,50,94,41,94,89,94,50,97,155,3,66,94,48,124,70,+223,71,39,2,66,94,39,97,167,67,71,130,179,65,15,4,72,94,48,94,+82,162,229,66,129,0,57,96,17,64,31,64,17,67,73,65,57,195,181,160,+19,1,124,51,224,49,0,66,73,66,203,129,91,65,229,135,147,142,21,64,+37,195,59,130,237,68,137,64,185,72,163,72,51,64,133,0,45,168,67,64,+219,0,34,66,233,1,124,52,160,167,66,57,3,35,94,35,124,75,79,65,+175,3,68,94,48,124,65,243,69,73,0,94,160,151,199,123,132,213,229,29,+1,65,227,128,29,66,101,65,67,199,139,72,97,195,15,4,74,94,48,124,+43,162,183,65,53,195,147,97,117,0,124,74,181,68,169,226,125,1,64,55,+66,167,64,161,128,245,131,75,130,163,131,11,128,123,0,73,160,45,224,219,+0,224,7,0,0,70,97,33,65,3,64,31,67,45,5,37,94,79,94,35,+124,131,139,72,97,0,46,162,173,67,67,197,17,192,93,64,187,192,201,64,+73,66,21,67,227,0,72,169,15,128,171,64,227,195,65,195,61,131,29,99,+61,96,243,128,91,198,13,128,31,128,99,64,135,0,57,99,207,65,219,64,+209,192,69,65,71,67,175,131,55,130,23,193,83,2,69,94,49,162,65,138,+155,65,173,0,42,162,171,76,149,0,71,102,3,129,179,2,57,94,76,225,+61,0,66,251,65,51,196,177,128,105,129,237,8,43,94,33,124,62,94,49,+94,76,77,31,0,124,76,147,4,36,94,49,124,63,237,53,2,224,3,255,+224,3,17,193,143,224,3,181,64,197,2,71,94,32,228,245,0,0,69,162,+89,81,235,64,23,192,7,224,31,11,207,51,192,3,192,43,0,77,160,43,+128,15,0,34,224,7,8,79,21,0,48,241,53,0,0,34,114,125,2,66,+94,60,102,13,224,23,3,64,19,0,67,160,75,192,21,66,231,0,60,96,+73,0,68,111,145,0,60,163,7,224,81,7,64,23,8,74,94,41,94,68,+94,45,94,69,179,57,6,55,94,56,94,53,94,55,224,7,0,67,57,2,+42,94,43,96,35,0,41,102,23,64,25,69,63,2,51,94,51,99,245,0,+58,101,239,0,74,179,127,4,51,94,73,94,57,160,83,68,119,2,45,94,+40,173,39,74,135,77,219,64,45,77,193,224,13,1,69,233,69,183,70,183,+0,59,107,77,67,161,2,67,94,37,99,245,4,37,94,75,94,35,96,21,+71,177,80,149,64,5,64,11,242,89,1,128,7,192,23,0,58,96,247,71,+229,64,15,192,3,64,245,64,51,145,55,67,249,64,49,64,17,65,227,71,+121,80,129,65,75,64,65,128,25,8,61,94,79,94,40,124,34,94,39,160,+51,0,39,104,137,137,171,64,47,0,68,96,43,0,58,96,147,128,51,192,+5,0,70,96,5,0,94,160,31,192,25,128,17,2,66,94,75,116,41,0,+61,232,201,0,0,83,160,39,64,53,4,53,94,54,124,80,96,15,8,93,+94,61,94,88,94,58,124,39,103,125,1,58,124,64,49,0,85,97,179,10,+61,94,84,94,48,124,59,94,40,124,77,96,19,4,40,94,65,124,54,96,+51,69,139,10,58,124,53,94,61,94,71,94,58,124,110,96,19,2,65,124,+119,224,107,2,224,3,11,4,93,94,40,124,43,105,15,129,145,0,94,160,+7,224,3,7,0,79,64,77,5,92,95,94,61,94,65,225,189,0,224,3,+30,1,124,62,224,47,2,0,95,160,11,6,66,94,65,94,58,124,47,96,+207,129,37,64,231,76,183,66,49,64,103,6,48,124,104,94,61,124,47,242,+13,2,193,243,227,163,3,243,11,1,64,5,67,135,79,165,243,175,111,224,+3,73,0,33,162,205,128,13,70,197,64,7,74,43,67,137,86,135,2,57,+124,37,163,223,64,21,100,15,1,124,55,168,203,71,27,77,145,0,35,104,+81,73,101,138,17,224,5,33,80,125,196,29,64,3,67,247,64,7,128,5,+68,21,132,61,64,5,128,23,196,73,226,7,5,71,191,67,251,64,41,137,+133,64,49,2,53,94,76,177,233,215,203,224,3,3,1,52,124,64,205,0,+89,98,11,2,88,94,61,106,25,6,65,124,85,94,61,94,89,106,157,0,+61,184,9,6,61,94,49,94,50,94,39,226,123,11,96,91,224,87,8,96,+5,64,27,2,72,94,39,232,175,0,0,52,117,41,128,139,0,39,96,81,+128,153,74,251,137,187,72,33,69,59,66,97,3,50,94,52,124,73,187,74,+77,64,13,136,119,75,91,137,233,132,43,79,127,0,61,82,185,1,124,37,+96,109,64,23,2,79,94,50,100,11,138,153,67,233,0,71,100,91,2,78,+94,40,98,247,2,73,94,40,99,7,64,15,2,66,124,63,78,205,2,124,+51,124,64,47,0,50,128,13,5,94,65,124,35,124,125,176,65,4,49,94,+72,124,118,141,243,100,7,4,72,94,48,124,39,233,23,2,68,113,64,37,+65,39,64,121,73,55,72,239,0,83,102,147,226,155,53,224,3,19,73,87,+69,193,73,181,66,65,0,49,224,73,48,179,199,171,131,0,39,173,75,137,+213,4,86,94,60,94,72,118,195,150,197,224,3,13,246,153,41,224,3,69,+79,69,224,17,3,224,35,13,224,195,3,88,213,64,9,224,185,35,70,249,+192,5,224,3,19,248,61,3,64,5,66,217,128,7,128,3,224,47,5,0,+84,104,63,129,189,66,71,2,49,94,33,100,25,211,87,139,71,68,93,235,+243,1,71,19,139,181,147,255,146,5,77,105,77,195,67,251,148,63,1,36,+124,67,57,0,79,160,55,64,19,204,99,76,177,0,81,171,159,66,185,149,+221,64,105,64,29,0,91,108,35,132,151,64,121,78,1,142,9,64,65,0,+92,242,191,0,236,213,3,236,151,5,76,125,68,121,69,33,64,81,71,213,+64,77,141,251,85,201,131,41,112,189,111,97,144,17,192,225,128,7,67,207,+129,5,77,33,64,23,65,75,64,55,141,85,131,113,77,117,144,229,173,189,+96,245,144,51,140,123,64,75,174,117,160,25,0,87,177,103,131,195,79,77,+224,121,1,64,17,129,137,64,19,78,149,146,27,224,7,5,229,235,6,112,+83,74,47,64,219,194,109,6,67,94,48,124,79,94,33,110,255,128,211,224,+5,1,0,57,96,9,192,207,65,143,2,50,124,87,101,143,0,50,101,135,+65,119,64,63,64,15,65,61,2,46,94,70,100,147,2,46,94,46,192,7,+1,94,71,160,9,2,47,124,49,96,9,4,47,94,66,124,109,128,163,1,+124,105,101,19,64,157,0,33,96,79,74,245,70,191,129,227,2,50,94,58,+176,3,146,63,128,3,224,5,0,112,121,4,80,94,60,94,79,65,129,3,+124,106,94,50,101,217,4,79,94,61,124,63,160,95,87,47,71,1,69,125,+148,195,94,47,69,125,83,213,222,55,64,215,64,17,134,149,74,215,230,67,+11,224,3,3,65,125,64,7,144,71,139,7,129,235,134,85,192,3,139,31,+0,52,105,43,66,91,152,211,138,61,64,161,0,65,161,157,87,247,66,69,+254,207,58,160,59,192,165,65,69,2,49,124,44,162,43,80,185,131,145,226,+43,9,140,35,128,31,87,181,0,58,126,251,64,9,65,63,0,67,169,159,+66,105,0,66,121,93,137,163,65,83,144,191,145,205,193,161,114,97,112,99,+0,50,66,47,1,124,122,184,235,64,221,66,49,0,44,178,93,4,72,94,+61,124,52,103,127,1,40,94,74,245,95,105,65,161,76,3,145,59,2,61,+124,46,96,47,68,77,4,65,94,65,94,48,195,219,98,117,76,23,4,35,+94,90,94,40,97,85,90,29,64,73,66,247,0,83,104,13,67,147,0,39,+103,151,0,37,96,129,67,99,0,48,177,135,144,103,64,55,64,37,67,247,+2,39,124,41,103,57,6,32,124,39,94,33,124,77,160,195,210,33,73,117,+64,187,0,35,101,63,135,97,0,71,164,207,132,117,0,74,109,125,0,78,+96,5,0,70,253,45,0,75,177,67,51,0,78,96,5,66,235,141,135,64,+195,64,59,66,249,2,66,124,54,163,175,71,207,65,101,64,147,68,1,71,+195,2,48,124,41,109,69,3,72,94,49,124,64,191,193,175,67,5,81,79,+129,117,65,45,128,23,150,227,69,97,0,40,96,11,65,173,86,85,65,255,+69,97,4,72,94,40,124,47,225,177,4,64,85,2,68,94,40,96,125,141,+169,64,63,65,215,64,25,2,57,124,63,170,79,65,45,65,163,64,51,2,+79,94,40,99,101,77,227,132,199,137,29,138,151,134,21,211,191,65,179,130,+97,147,23,69,55,0,40,99,155,74,61,64,7,64,33,64,89,197,187,73,+7,129,5,0,61,101,235,64,89,131,57,64,55,116,45,99,223,64,169,64,+15,201,159,64,243,64,215,64,133,64,11,84,81,154,21,118,229,65,7,3,+124,79,94,48,85,81,3,124,54,94,48,94,105,1,94,76,96,7,70,211,+102,173,162,23,134,141,243,67,3,64,209,69,183,85,7,146,143,92,223,2,+49,94,85,111,181,0,48,109,195,0,65,64,93,1,94,94,65,27,1,124,+41,96,147,64,185,157,23,129,53,97,19,64,123,96,99,64,237,74,3,129,+153,64,197,70,201,66,197,75,45,77,239,64,193,129,79,75,229,2,48,94,+84,96,209,0,40,105,189,203,209,134,83,84,27,0,78,164,219,65,43,85,+195,64,183,230,97,1,128,45,135,21,68,21,216,143,198,205,68,51,0,45,+97,43,134,85,68,151,156,185,219,77,65,11,2,66,94,35,97,35,148,37,+71,133,193,31,70,149,64,75,131,25,70,83,128,83,128,119,102,189,120,103,+64,119,84,59,135,147,136,15,64,135,134,113,138,159,64,53,133,89,64,199,+67,97,65,9,221,71,244,53,1,64,5,202,15,160,233,107,41,246,247,7,+132,147,69,17,101,243,168,21,64,73,64,193,66,47,192,223,199,101,251,175,+33,129,91,128,141,154,187,251,175,1,153,233,64,47,64,91,85,91,128,53,+192,31,84,137,194,77,64,229,154,155,192,119,132,185,64,9,64,71,156,77,+192,95,64,217,64,5,225,5,1,136,57,65,113,136,203,66,83,64,155,2,+92,94,48,98,29,192,237,64,49,129,63,131,167,213,89,192,57,137,217,0,+93,186,21,192,121,192,221,129,31,128,243,129,167,195,41,0,65,66,161,97,+89,194,89,64,169,224,51,5,0,86,97,235,98,143,102,27,192,97,245,237,+1,128,39,137,243,129,17,129,151,73,173,0,82,173,99,128,37,64,47,192,+153,161,215,224,45,0,0,83,106,37,2,48,94,90,161,75,224,49,1,130,+241,65,111,67,37,64,47,134,119,77,235,65,219,2,65,124,56,165,89,226,+167,1,99,29,1,124,99,102,101,4,32,94,95,94,33,96,55,68,197,68,+85,226,39,1,132,131,226,31,1,91,25,87,149,226,15,1,193,9,66,1,+137,211,64,121,67,31,87,31,64,185,160,77,0,124,67,5,225,71,3,133,+3,192,235,64,59,0,90,96,103,2,73,94,35,173,239,64,89,196,187,65,+197,65,151,234,183,1,67,183,2,45,94,50,183,1,225,99,1,65,253,69,+3,74,241,131,231,4,57,94,65,124,53,186,73,144,61,193,85,122,137,0,+124,128,185,152,129,225,127,1,130,69,128,43,0,82,230,69,0,0,57,248,+247,0,0,85,162,189,64,55,226,17,2,0,124,234,167,1,137,217,66,241,+64,85,64,63,198,85,131,39,139,103,224,141,1,135,9,129,105,71,253,221,+193,128,103,194,75,228,189,1,0,66,64,213,250,119,2,139,73,222,93,64,+211,106,113,121,247,64,29,66,35,64,133,224,75,1,66,131,101,83,0,124,+77,21,136,129,2,84,94,40,115,207,2,67,94,59,104,197,0,76,167,125,+10,89,94,50,124,101,94,48,124,110,94,39,184,189,66,205,1,65,124,66,+253,1,84,124,90,207,0,96,163,173,64,49,0,72,99,9,0,79,122,149,+64,215,69,201,65,77,0,95,98,193,100,53,5,124,70,94,50,124,53,66,+157,97,83,85,25,197,9,64,147,0,77,98,61,0,68,123,217,64,211,154,+169,133,153,154,61,197,3,129,61,250,143,1,157,223,131,139,65,103,221,25,+76,43,67,21,193,213,103,63,166,131,64,145,65,73,0,67,104,75,2,66,+94,49,98,131,147,121,129,35,0,65,96,143,195,47,0,86,105,165,2,57,+124,100,188,27,136,7,71,9,66,17,135,13,0,76,121,99,77,145,64,119,+79,243,65,49,65,125,66,131,4,50,124,47,124,117,97,117,98,3,81,147,+0,124,64,141,65,255,64,65,4,50,124,69,124,102,96,73,158,107,64,5,+64,73,73,95,70,139,65,171,0,50,69,11,168,149,64,13,64,87,65,143,+154,123,74,207,0,82,105,221,76,79,64,225,66,15,138,169,194,69,128,57,+158,163,65,37,3,45,94,94,124,68,103,2,65,124,111,190,177,64,245,4,+67,124,51,94,61,97,227,65,207,64,49,0,86,142,45,4,124,115,94,61,+124,75,85,2,65,124,117,129,89,212,241,0,124,79,33,197,153,75,5,68,+55,2,71,94,45,101,25,137,195,0,35,114,43,3,67,94,35,124,75,157,+86,5,0,65,107,39,4,35,94,61,124,121,167,41,68,143,160,7,1,124,+86,178,113,0,88,86,35,96,191,76,59,76,47,64,7,138,139,0,81,160,+13,64,21,234,179,1,190,135,224,13,0,152,89,88,187,152,111,234,203,1,+74,221,224,63,1,64,37,128,43,128,45,203,9,224,29,7,80,163,64,93,+137,191,192,33,224,157,3,224,7,23,0,91,176,183,10,88,94,32,94,58,+94,88,94,33,94,58,117,251,224,15,55,177,15,1,124,49,67,55,86,237,+1,124,54,101,119,1,61,124,66,143,67,231,1,35,94,87,119,129,147,67,+41,66,87,67,67,72,99,2,35,94,72,106,1,0,73,113,43,0,83,117,+187,68,167,2,33,94,65,100,49,133,51,0,80,162,19,221,195,64,5,172,+157,4,124,61,94,49,124,65,15,2,35,124,111,108,249,202,227,73,215,153,+75,195,209,75,27,84,29,131,201,2,35,94,80,254,83,0,132,15,66,191,+2,59,94,67,96,143,68,67,0,49,224,25,0,85,65,192,53,68,247,228,+35,1,2,67,124,95,229,141,0,137,55,237,209,3,1,65,124,136,239,108,+67,64,147,67,127,3,124,33,94,32,93,33,96,163,64,99,228,115,4,1,+94,70,96,151,0,58,114,5,75,215,0,59,74,221,99,25,78,5,148,227,+1,65,124,77,217,128,111,135,175,128,117,195,165,195,119,192,145,134,213,64,+5,129,7,224,3,1,131,217,224,61,7,224,3,9,224,31,1,128,83,224,+241,3,224,101,1,128,117,0,80,238,189,0,64,13,129,1,0,80,85,145,+171,243,0,66,68,69,121,65,68,57,0,99,182,165,0,78,175,35,128,7,+96,5,1,124,36,165,75,0,76,96,243,4,32,94,61,124,55,108,251,102,+51,192,65,121,197,144,183,0,61,100,159,87,253,0,65,118,239,2,65,124,+122,98,115,4,60,94,69,124,87,160,45,70,113,66,33,175,49,1,124,118,+160,135,86,95,65,35,0,75,160,39,65,105,224,13,0,1,124,55,118,115,+64,225,147,149,90,101,64,15,68,95,64,181,224,53,1,0,61,107,77,1,+66,124,90,165,64,215,66,251,64,33,207,161,64,65,66,183,64,81,64,181,+192,247,90,167,136,49,128,23,2,65,94,82,97,3,0,91,165,37,0,72,+161,193,4,66,124,77,124,93,96,9,66,121,2,50,124,32,97,19,193,223,+0,65,101,91,161,201,2,124,44,92,96,35,166,13,0,58,80,27,229,215,+0,2,68,124,107,96,7,0,83,114,161,0,68,135,33,1,124,97,96,41,+0,38,104,99,129,197,64,97,96,111,5,124,43,124,56,124,80,108,229,74,+233,2,95,94,45,96,93,69,199,4,35,94,67,124,124,109,171,0,47,68,+3,1,124,123,96,9,64,131,224,15,2,31,34,32,58,50,53,57,32,64,+10,65,32,95,54,32,95,49,54,51,32,64,95,54,32,89,32,66,32,66,+32,83,32,85,64,18,5,52,32,64,64,64,64,64,16,1,90,32,224,7,+1,12,83,39,32,83,32,64,66,32,67,39,32,83,39,64,8,14,83,32,+64,95,49,52,52,32,95,54,57,32,64,35,49,160,52,0,67,64,23,224,+38,0,26,66,32,64,64,67,32,67,32,95,54,52,32,95,49,55,51,32,+64,64,95,49,55,52,32,95,50,49,64,120,7,51,51,57,32,35,49,50,+56,96,59,128,53,64,110,10,95,49,50,51,32,64,67,32,95,57,56,160,+41,224,53,19,3,85,32,35,48,224,64,0,31,66,32,80,32,95,51,51,+55,32,102,114,111,109,85,84,70,56,32,34,92,34,46,47,108,105,98,47,+68,97,116,97,47,23,67,104,97,114,47,85,110,105,99,111,100,101,46,104,+115,92,34,44,50,48,50,58,56,34,128,64,64,227,96,230,96,73,128,13,+64,135,224,189,28,128,187,2,64,67,39,64,251,6,95,49,57,49,32,95,+57,64,50,160,24,96,204,96,16,3,67,32,95,53,192,11,192,63,3,95,+50,49,53,64,186,4,50,53,49,32,64,160,55,224,28,0,129,78,64,70,+96,151,3,95,50,53,50,96,162,3,95,50,53,53,225,39,0,160,78,128,+140,225,19,2,64,71,64,11,10,95,50,53,55,32,64,64,58,50,53,56,+129,254,2,50,53,54,66,12,0,55,96,13,7,98,115,117,110,112,97,99,+107,64,17,0,54,96,17,64,110,2,95,50,53,64,232,3,50,53,52,32,+64,56,0,53,96,24,2,66,32,89,65,249,65,162,0,58,96,25,64,44,+65,41,0,67,129,44,4,55,53,32,95,55,64,183,96,118,97,144,130,83,+129,222,128,57,128,189,129,229,225,42,1,192,190,0,64,128,49,0,58,96,+33,96,139,64,115,64,61,0,80,128,6,160,68,64,33,0,50,128,205,1,+49,50,129,63,64,23,2,95,50,51,64,234,7,95,50,49,50,32,95,50,+51,64,139,192,11,0,57,96,11,1,52,49,161,105,64,11,64,23,192,11,+65,219,160,11,1,53,48,224,11,0,0,54,64,87,65,151,1,50,50,65,+120,0,58,96,22,1,10,65,162,224,99,9,129,245,66,57,129,8,64,2,+64,160,162,81,226,87,0,66,13,225,201,1,192,37,64,16,128,52,64,77,+96,5,99,90,97,37,1,52,53,64,7,2,85,32,65,161,53,1,52,54,+128,15,0,75,128,178,64,233,96,0,0,67,64,27,98,47,64,145,1,95,+55,64,234,224,19,1,7,64,64,83,32,73,32,64,75,64,192,162,145,224,+134,0,1,83,39,65,87,194,102,99,228,129,149,66,72,64,102,96,181,98,+250,224,121,0,224,137,16,163,22,160,149,128,80,130,162,96,16,224,63,24,+0,64,128,233,96,17,0,57,98,3,0,48,97,108,64,38,2,75,52,32,+128,192,0,58,96,27,224,21,2,160,20,130,218,2,85,32,90,96,1,0,+75,132,201,0,58,96,90,160,44,64,13,0,54,224,37,14,130,223,225,175,+0,97,19,3,95,49,50,52,65,249,0,52,98,238,65,147,128,72,0,50,+224,57,0,0,58,96,27,130,165,161,208,6,95,50,52,48,32,64,65,96,+49,130,159,224,27,7,128,136,130,70,96,77,224,196,2,128,239,5,117,114,+101,109,32,58,98,177,64,13,3,113,117,111,116,64,14,195,188,1,50,52,+101,106,65,168,66,181,1,49,54,130,241,1,50,53,64,27,97,73,229,63,+22,129,108,3,95,51,54,48,229,43,2,19,87,111,114,100,56,46,115,117,+99,99,58,32,111,118,101,114,102,108,111,119,133,27,224,108,12,64,94,224,+108,0,99,198,224,109,42,8,112,114,101,100,58,32,117,110,100,224,110,3,+99,115,0,49,67,115,68,2,96,14,0,56,227,129,1,66,214,1,50,57,+67,207,224,245,8,131,103,128,5,64,148,1,53,57,197,186,162,139,2,95,+50,51,67,217,192,57,224,194,1,224,31,13,224,89,1,64,25,0,49,67,+67,192,123,0,54,98,31,224,20,0,128,54,96,20,0,58,96,62,225,167,+6,1,56,54,96,58,64,80,0,51,131,133,129,160,0,49,228,250,2,225,+32,10,225,141,19,160,82,64,195,224,82,0,97,134,224,83,23,225,115,13,+101,236,65,102,65,95,0,51,101,72,224,174,2,225,89,7,0,55,97,137,+193,51,99,36,224,137,2,224,25,1,0,53,224,71,6,64,19,0,51,192,+72,227,108,0,128,187,96,83,128,77,160,58,65,75,0,54,195,151,165,98,+135,154,128,133,72,124,68,219,232,150,0,101,68,68,173,134,33,131,120,0,+89,160,170,224,66,0,64,13,168,159,136,249,128,7,96,131,129,53,0,56,+96,172,128,28,192,76,64,32,136,210,1,95,56,135,162,3,64,67,32,79,+99,205,128,11,160,53,160,252,64,177,224,165,2,224,42,1,167,16,0,58,+96,225,224,218,16,128,136,224,218,67,129,44,224,218,69,96,165,224,218,11,+168,25,192,46,106,46,64,44,128,179,224,125,5,160,192,96,202,160,180,162,+222,64,91,73,85,128,150,164,72,234,164,0,232,40,0,66,81,131,111,0,+54,104,250,2,95,56,56,137,2,0,58,98,117,5,10,65,32,75,32,95,+72,192,0,58,67,175,229,117,3,102,108,0,58,67,189,229,139,10,0,50,+230,101,1,64,13,229,124,0,164,157,169,88,64,9,105,29,64,35,131,248,+2,80,32,58,64,37,128,60,102,8,0,50,201,61,224,1,3,103,253,64,+0,224,20,11,224,17,8,224,14,5,224,11,2,192,8,102,177,128,184,129,+125,3,95,49,50,54,105,22,101,138,170,194,3,54,32,95,51,70,100,232,+215,7,64,54,129,70,0,73,64,189,129,54,0,83,98,156,65,128,129,163,+162,134,161,157,138,101,128,33,65,181,224,22,4,64,149,0,95,74,194,235,+144,19,10,73,110,116,101,103,101,114,95,84,121,112,171,144,3,53,52,58,+49,171,143,96,65,1,50,49,97,109,134,102,1,39,66,66,105,226,153,3,+104,73,224,34,1,224,26,3,224,23,2,194,49,2,95,50,49,138,14,1,+50,48,97,148,130,11,98,199,0,57,66,53,74,12,0,49,204,207,0,58,+96,37,65,70,1,56,52,102,195,1,95,57,96,53,64,32,128,53,0,56,+64,90,160,20,130,28,2,75,32,58,96,112,162,3,0,49,130,3,202,41,+137,67,168,225,96,184,96,14,162,109,0,49,130,34,226,153,6,64,34,64,+131,70,201,106,197,99,159,160,10,133,47,64,10,0,49,64,134,3,64,95,+49,57,96,194,64,34,0,73,97,181,231,181,7,231,154,7,140,39,231,177,+14,224,45,14,96,185,97,15,129,38,64,31,162,219,128,24,64,19,130,63,+96,243,140,165,1,49,55,97,141,64,66,227,46,0,64,44,98,167,1,55,+55,64,4,0,56,98,165,65,137,1,49,56,66,161,0,49,103,244,0,56,+96,22,0,56,70,66,96,61,2,95,49,56,104,216,96,73,128,38,0,57,+130,229,96,12,141,61,2,95,49,57,224,110,0,1,95,49,137,9,131,174,+0,48,71,168,192,11,0,51,224,56,8,132,136,162,205,77,249,236,204,1,+224,27,5,104,91,96,28,1,95,56,165,88,66,99,128,41,2,95,50,48,+102,196,64,18,224,81,51,65,179,224,81,6,66,115,1,50,48,224,220,1,+2,50,48,55,224,11,2,0,56,66,254,4,95,50,48,57,32,160,67,0,+75,160,8,0,75,66,7,64,8,0,58,96,43,5,10,65,32,90,32,85,+66,185,0,48,130,206,6,112,111,112,99,111,117,110,74,101,64,68,202,180,+0,66,96,109,71,196,1,55,57,173,166,0,58,64,113,97,182,64,24,0,+58,64,139,226,183,3,139,86,224,1,9,171,104,224,0,2,0,58,96,88,+64,72,232,163,5,9,97,114,105,116,104,109,101,116,105,99,232,247,4,0,+58,97,1,231,47,0,68,241,103,29,228,150,1,192,5,3,95,50,48,49,+160,7,0,50,227,96,0,164,63,198,93,66,142,134,217,1,49,57,66,140,+97,139,227,160,3,226,241,3,128,66,0,58,66,47,128,234,224,228,15,224,+1,3,224,240,9,64,0,0,58,96,147,230,24,1,64,169,192,211,65,108,+1,49,57,98,255,64,147,0,58,66,171,161,90,0,51,224,108,42,0,58,+96,75,224,92,4,64,244,132,141,2,95,49,57,101,24,96,252,0,58,67,+33,160,105,225,193,17,224,103,14,0,58,96,73,224,195,5,74,15,128,195,+67,135,224,89,0,224,92,14,224,84,7,0,58,96,58,237,105,1,224,1,+21,225,103,12,0,58,96,131,197,56,69,51,101,45,133,39,133,38,131,240,+229,38,7,227,156,1,101,4,135,227,68,232,0,58,96,47,103,19,143,29,+98,68,64,232,226,40,1,0,58,64,88,160,184,238,33,1,96,45,5,10,+65,32,42,32,58,96,126,129,42,1,95,49,64,149,130,89,226,122,12,101,+131,0,58,68,220,160,49,176,68,130,195,228,75,9,234,61,2,64,154,70,+204,224,29,3,1,95,49,169,80,225,165,0,100,74,227,214,0,64,106,226,+4,0,137,5,224,2,2,193,85,64,51,160,223,224,30,3,225,133,3,0,+58,96,104,224,178,62,234,31,1,128,178,65,111,224,178,4,226,40,0,0,+51,224,141,3,226,23,6,0,58,96,56,224,183,7,226,66,14,0,58,96,+117,226,178,0,100,242,64,154,64,18,4,120,111,114,32,58,102,150,2,10,+65,32,128,11,129,208,4,97,110,100,32,58,102,187,117,91,78,176,77,157,+2,49,54,54,66,57,64,212,233,253,8,224,1,21,234,27,0,224,0,6,+224,57,25,192,1,224,65,14,224,56,25,128,1,224,62,13,224,55,25,64,+1,224,59,12,224,54,25,224,56,13,224,53,44,224,50,41,224,47,38,224,+44,35,224,41,32,224,38,29,224,35,26,224,32,23,224,29,20,224,26,17,+224,23,14,224,20,11,224,17,8,224,14,5,224,11,2,192,8,204,190,224,+0,6,0,58,74,28,229,83,1,224,1,23,227,202,4,224,68,3,0,54,+96,68,0,73,67,165,228,51,0,64,45,139,103,101,125,99,186,0,53,171,+43,1,95,49,128,10,105,143,160,11,118,63,128,11,0,55,102,24,160,11,+69,170,192,11,107,147,74,235,173,111,138,218,132,69,64,6,5,10,65,32,+117,62,61,64,134,132,82,1,117,62,64,11,132,81,1,117,60,96,24,132,+82,3,117,60,32,58,96,114,64,11,2,99,109,112,64,13,132,71,100,95,+96,110,101,210,192,157,64,11,0,58,96,187,3,10,65,32,47,64,73,64,+18,160,244,0,54,128,244,0,75,64,10,206,29,1,54,50,64,13,128,147,+1,98,115,152,0,64,20,160,29,0,48,64,13,128,152,7,98,115,108,101,+110,103,116,104,64,17,232,147,0,101,30,142,58,74,186,64,21,0,82,141,+242,64,16,170,68,152,17,0,49,88,86,88,209,0,55,96,27,170,63,96,+182,85,157,1,95,49,120,248,0,49,87,206,1,95,49,114,136,0,49,88,+91,1,95,49,76,40,129,77,96,65,129,77,96,10,0,58,96,6,225,77,+0,184,158,97,77,184,150,129,77,184,68,97,77,184,46,0,105,129,77,183,+199,90,245,118,107,0,49,182,107,65,35,182,96,112,161,1,58,49,182,89,+129,119,86,40,1,95,49,86,70,0,58,96,188,193,108,182,88,0,61,96,+11,226,98,1,64,37,128,143,121,58,111,73,145,208,1,95,49,82,219,0,+90,64,7,110,222,1,95,49,79,151,64,6,65,84,1,58,49,182,88,120,+13,97,30,86,13,0,58,96,29,96,22,71,52,192,73,3,50,51,32,35,+109,142,160,10,177,196,195,116,224,32,2,143,177,122,170,184,0,82,67,219,+124,0,80,64,103,224,65,2,224,64,5,64,200,64,0,96,58,163,88,182,+198,139,145,128,163,128,244,129,76,71,215,86,182,71,210,0,58,96,29,200,+97,64,14,232,112,0,99,134,0,58,97,8,167,40,164,18,0,58,97,36,+194,112,128,36,209,75,0,95,81,99,96,96,66,55,112,216,107,60,82,14,+96,40,129,119,11,94,109,100,53,83,116,114,105,110,103,32,58,96,27,186,+223,2,66,32,95,98,99,82,18,85,83,0,39,96,15,219,176,122,74,0,+49,141,116,108,32,0,58,96,102,128,234,160,56,0,48,73,177,1,90,32,+224,31,0,129,10,4,110,101,119,67,65,128,112,2,76,101,110,64,115,129,+10,224,213,4,178,91,2,65,32,58,99,48,240,37,0,2,115,101,113,142,+16,96,8,101,20,0,58,99,54,144,82,81,209,192,75,224,1,1,229,137,+78,0,58,91,86,193,123,229,92,2,0,58,121,21,3,10,65,32,79,64,+144,129,80,3,95,49,48,54,83,101,0,49,78,61,110,109,96,8,3,95,+49,49,48,66,60,101,21,0,49,112,169,192,11,67,201,192,11,87,166,160,+11,81,116,1,95,49,81,154,0,58,96,18,65,192,3,112,111,107,101,86,+185,64,110,129,99,4,94,112,101,101,107,192,18,162,105,65,183,75,72,145,+227,0,49,81,124,0,58,64,90,160,193,241,85,2,96,34,224,50,4,101,+170,192,50,226,132,1,1,95,49,81,127,67,97,68,246,1,95,49,81,163,+64,33,129,132,2,116,111,73,79,48,96,21,96,14,1,80,116,74,18,177,+178,244,76,5,96,98,245,17,3,174,185,97,116,67,197,64,93,66,136,189,+39,69,134,1,64,95,76,196,108,163,0,58,65,59,193,138,229,119,2,177,+65,237,122,1,79,206,65,197,128,64,88,100,66,170,142,226,0,58,65,140,+160,68,234,217,0,175,255,1,95,49,80,71,76,108,0,35,101,191,176,4,+154,120,64,27,193,18,226,78,8,226,117,73,176,81,203,246,64,32,1,95,+49,90,94,97,13,1,95,49,79,65,163,176,224,22,1,163,182,81,221,99,+179,163,186,125,248,194,182,176,111,64,78,79,202,0,95,70,65,0,58,96,+40,66,82,3,102,114,101,101,64,235,173,230,101,166,224,96,6,0,95,78,+205,0,95,79,86,140,148,96,34,192,114,97,187,97,131,165,136,192,23,0,+58,96,177,252,7,4,64,171,133,119,96,254,0,39,93,8,224,49,0,0,+73,161,9,225,0,3,193,225,225,72,1,224,119,2,64,115,178,79,96,130,+186,91,255,85,5,133,129,176,111,205,48,96,156,130,20,0,89,109,164,65,+133,2,66,32,90,134,30,113,80,2,83,32,95,79,224,65,113,130,80,224,+89,7,96,88,176,106,145,26,132,39,0,58,176,84,68,201,0,58,176,35,+96,184,71,255,130,164,0,53,192,75,226,169,7,176,53,242,25,6,90,178,+4,102,105,110,101,100,114,15,240,36,0,233,249,4,0,58,239,248,3,99,+181,72,195,99,14,0,95,72,235,0,83,238,137,11,65,113,238,87,2,144,+17,85,225,0,48,224,37,3,224,33,0,128,249,240,37,1,0,95,79,246,+0,58,176,31,0,66,188,172,112,52,240,15,0,129,153,89,6,1,56,50,+176,45,0,80,96,7,97,114,225,113,0,112,170,64,120,97,11,143,6,96,+212,181,41,85,6,99,164,96,92,193,184,244,70,0,136,90,247,135,4,194,+68,249,72,0,0,55,192,191,65,5,0,48,249,85,0,97,2,217,55,97,+210,176,121,4,105,110,118,32,58,176,26,4,115,104,114,32,58,176,3,72,+232,175,233,0,97,128,23,129,143,4,115,104,108,32,58,175,111,2,43,32,+58,175,76,2,45,32,58,175,67,2,73,32,58,175,64,230,86,7,175,75,+130,155,100,157,239,80,0,2,53,32,95,75,10,0,95,75,27,0,95,75,+45,0,95,75,62,0,95,75,80,0,95,113,132,74,35,149,59,74,34,96,+9,0,58,175,118,131,166,98,189,131,179,96,37,0,53,131,103,69,91,172,+96,224,29,1,224,49,1,224,39,5,128,237,227,59,2,172,74,74,129,172,+64,2,62,32,58,171,229,74,125,171,227,2,60,32,58,171,225,138,122,171,+225,106,79,108,107,75,216,0,58,171,235,74,76,171,232,65,98,171,207,2,+80,32,58,171,205,195,255,164,58,194,34,224,20,11,224,17,8,224,14,5,+224,11,2,192,8,229,132,0,172,47,179,129,163,208,172,57,4,110,101,103,+32,58,172,55,2,42,32,58,172,49,2,45,32,58,172,45,2,43,32,58,+172,37,224,148,68,0,58,172,100,199,88,64,17,225,225,0,73,145,68,90,+66,26,75,255,96,12,165,226,1,64,58,204,113,3,53,53,32,58,172,54,+2,73,32,58,172,51,64,41,66,76,76,41,0,58,172,59,64,29,128,224,+64,9,168,134,7,109,97,108,108,111,99,32,58,172,56,224,158,2,0,58,+172,58,2,85,32,58,172,57,224,198,14,0,58,172,74,64,19,0,95,76,+37,1,64,95,108,73,172,72,103,221,107,253,172,77,6,114,97,105,115,101,+32,58,172,79,7,65,46,114,101,97,100,32,58,172,80,13,73,79,46,103,+101,116,65,114,103,82,101,102,32,58,172,46,4,95,51,50,32,95,108,47,+75,108,229,59,1,5,115,116,100,101,114,114,101,56,172,65,2,73,79,46,+128,20,1,32,58,171,196,96,59,75,148,224,59,9,2,111,117,116,128,59,+205,35,67,160,0,58,171,207,128,73,4,111,117,116,32,58,171,210,4,95,+51,54,32,58,171,205,2,73,32,58,171,195,128,95,122,78,0,52,224,95,+6,1,105,110,96,94,171,219,3,75,52,32,58,171,189,128,91,3,105,110,+32,58,171,186,129,89,0,95,75,19,102,69,135,247,231,167,0,0,95,75,+109,194,70,231,254,3,97,132,0,95,107,236,64,104,205,69,225,195,1,171,+190,203,222,2,50,56,32,101,26,162,72,75,176,1,64,58,171,202,93,34,+171,192,0,46,162,20,254,30,0,2,54,32,58,171,175,13,73,79,46,112,+101,114,102,111,114,109,73,79,32,58,171,185,0,75,107,3,231,232,1,0,+58,171,99,0,95,64,192,66,134,96,123,104,157,88,2,225,4,0,3,62,+62,32,58,203,107,64,66,69,8,110,137,0,51,232,241,0,90,229,156,18,+72,26,188,28,160,9,0,58,221,209,156,139,72,217,163,37,75,33,0,95,+74,209,90,26,224,35,2,96,32,118,153,192,32,0,95,101,85,221,21,0,+55,86,206,224,47,12,96,150,116,254,65,163,0,58,171,108,113,122,96,9,+71,177,168,123,129,19,153,11,253,0,4,138,156,128,253,234,221,1,0,49,+171,58,192,12,96,199,171,10,129,27,96,61,142,76,235,48,2,143,80,194,+228,97,243,109,235,129,219,71,192,129,81,73,13,96,36,64,199,64,193,69,+156,69,155,128,232,2,75,32,58,128,203,143,216,200,210,0,58,164,81,9,+79,46,114,101,116,117,114,110,32,58,128,201,97,181,2,61,32,58,128,197,+2,80,32,58,226,192,3,228,30,0,229,0,32,0,58,226,178,1,228,89,+11,231,83,0,0,50,143,39,64,200,1,95,57,114,143,224,0,255,224,0,+255,224,0,255,224,0,170,1,32,125,+};+unsigned char *combexpr = data;+int combexprlen = 43930; #include "mhsffi.h" static struct ffi_entry table[] = { { 0,0 }
generated/mhs.c view
@@ -1,6318 +1,6397 @@ static unsigned char data[] = {-122,76,90,49,3,237,1,0,26,118,55,46,50,10,50,51,50,53,10,65,-32,95,48,32,95,50,51,32,64,95,51,52,53,32,64,66,224,15,2,6,-53,55,32,64,64,66,32,224,18,3,17,52,57,32,64,64,64,83,39,32,-66,32,64,66,39,32,67,32,83,64,50,6,83,32,67,39,32,83,39,128,-10,24,64,95,49,50,55,32,95,51,53,57,32,64,102,114,111,109,85,84,-70,56,32,34,45,104,34,64,57,10,64,67,39,66,32,85,32,95,52,48,-55,64,4,0,56,64,19,1,75,50,96,25,224,70,29,0,63,224,70,61,-4,45,104,101,108,112,224,74,10,0,49,96,68,224,74,37,6,118,101,114,-115,105,111,110,224,77,9,3,50,50,49,32,224,40,1,8,77,105,99,114,-111,72,115,44,32,160,47,0,32,64,48,96,35,4,95,52,50,48,32,128,-10,224,46,1,16,44,32,99,111,109,98,105,110,97,116,111,114,32,102,105,-108,101,224,55,5,2,52,50,49,96,111,224,172,0,2,83,39,32,64,123,-2,64,67,32,224,166,14,6,110,117,109,101,114,105,99,224,174,5,2,66,-32,80,192,250,64,131,224,77,0,96,0,65,250,64,248,96,90,64,5,2,-95,56,50,130,8,64,109,2,95,52,50,64,13,64,134,0,67,64,12,3,-52,32,64,35,64,12,0,66,128,80,64,7,224,209,5,6,102,108,97,103,-115,32,61,96,191,4,64,95,49,49,56,64,53,98,79,129,56,96,100,162,-113,4,83,32,95,52,51,96,144,128,121,224,23,4,96,249,224,23,10,96,-186,65,4,0,66,66,159,10,95,52,51,53,32,64,85,32,75,32,65,128,-99,0,67,66,174,2,39,32,64,96,208,9,95,52,51,54,32,64,95,52,-51,55,65,50,5,67,32,95,55,52,50,65,225,0,52,66,243,0,75,96,-161,1,50,50,64,198,192,153,0,80,64,231,0,39,96,212,0,55,64,41,-7,56,52,52,32,95,53,50,57,224,224,2,11,99,111,109,109,97,110,100,-45,108,105,110,101,64,228,2,35,48,32,96,3,129,86,3,95,51,52,51,-226,172,0,128,143,3,95,50,50,56,128,14,64,99,98,2,1,57,52,96,-15,3,95,50,51,48,64,230,1,85,32,129,144,64,198,96,149,224,43,0,-128,149,3,95,50,51,50,64,32,163,145,4,32,95,56,48,57,64,20,64,-101,2,95,51,49,65,170,64,34,64,7,129,93,128,60,129,209,2,95,49,-51,96,32,226,47,1,98,61,1,56,52,192,13,5,79,32,35,52,54,32,-129,14,193,27,3,67,39,32,79,161,220,1,56,54,224,8,2,160,6,161,-60,192,45,96,0,2,58,50,51,66,29,2,10,65,32,65,105,224,1,19,-0,83,64,77,2,48,53,32,65,53,1,95,49,97,208,162,70,1,79,32,-224,140,2,96,98,65,196,64,25,97,190,224,205,0,226,254,4,224,192,4,-2,95,55,52,65,91,160,152,0,79,65,138,0,57,67,241,4,49,32,73,-32,64,227,41,2,5,108,105,98,47,103,109,132,28,96,56,128,241,97,173,-0,49,227,82,3,3,47,108,105,98,224,37,1,224,66,3,3,111,117,116,-46,67,189,162,233,96,199,224,6,28,96,154,224,6,0,128,20,1,51,49,-96,182,160,6,224,27,4,224,113,1,6,100,101,102,97,117,108,116,160,112,-64,35,65,116,0,51,97,116,2,66,32,89,97,241,98,32,0,83,194,201,-65,50,4,67,32,64,64,80,226,245,0,162,21,64,5,64,13,163,253,132,-255,228,83,14,132,68,224,57,42,0,118,224,57,48,0,113,224,57,48,0,-114,224,57,48,0,108,224,57,48,0,115,224,57,48,1,67,82,224,58,49,-0,87,224,58,49,224,57,48,0,84,224,57,48,3,88,67,80,80,224,60,-48,0,122,224,57,48,0,81,224,57,2,195,26,198,78,128,73,231,245,19,-0,111,192,61,64,46,0,82,96,54,229,142,2,229,134,0,0,50,229,134,-0,224,105,49,2,112,116,99,224,108,20,128,85,224,114,0,105,167,96,114,-103,10,164,182,134,233,1,64,67,68,202,198,72,224,144,12,161,51,64,14,-161,69,96,108,232,91,4,0,49,71,154,0,35,74,46,128,0,167,187,96,-5,97,126,224,57,1,96,87,128,105,225,161,1,192,37,224,38,0,225,170,-6,128,95,1,49,48,224,96,0,224,61,43,0,49,201,32,224,61,45,102,-203,224,61,1,224,67,0,224,61,11,0,67,224,61,6,0,54,231,227,0,-128,54,0,66,225,91,1,225,33,8,224,62,10,0,55,226,47,2,224,119,-6,224,178,18,0,56,136,105,224,53,38,0,57,199,165,224,53,36,0,55,-193,29,224,195,2,226,31,8,1,49,48,192,145,160,37,102,121,224,51,74,-0,49,192,195,224,103,35,202,120,224,103,35,203,27,224,51,33,227,35,0,-128,36,169,186,74,111,2,54,55,54,200,165,4,89,32,66,32,80,105,222,-163,177,2,49,48,54,103,177,0,80,105,95,3,52,53,48,32,107,89,203,-51,97,124,72,180,106,40,1,54,54,99,246,0,52,73,130,0,55,107,159,-99,55,2,95,50,54,132,15,227,68,0,128,132,65,219,228,62,19,73,202,-132,62,64,43,128,138,2,64,95,57,75,45,224,0,8,224,79,12,107,36,-192,77,0,55,234,134,1,1,49,57,193,62,227,81,1,64,16,129,25,0,-85,128,10,160,68,0,67,234,200,12,202,82,128,49,0,90,224,60,1,224,-10,0,224,220,23,224,76,1,229,27,4,1,56,56,138,251,229,27,4,224,-223,28,0,57,224,223,11,224,130,19,0,49,74,217,224,130,10,1,55,52,-66,248,224,130,5,224,70,64,224,197,10,224,72,0,64,53,230,161,1,224,-43,20,230,205,9,225,198,32,67,58,225,198,64,224,76,2,224,252,5,0,-57,96,18,225,198,10,109,123,238,145,9,7,85,110,107,110,111,119,110,32,-78,153,1,58,32,103,100,203,230,172,116,0,35,65,104,64,76,237,184,3,-160,156,160,249,64,128,165,34,76,146,1,49,52,108,146,64,63,0,56,231,-199,3,0,46,135,196,224,34,20,136,84,224,25,11,0,97,200,1,160,241,-206,138,96,72,224,239,2,232,24,63,225,196,13,224,65,1,0,95,231,94,-0,224,39,11,68,139,224,39,27,0,53,224,39,30,228,147,1,224,39,11,-80,151,160,40,228,110,1,224,61,2,228,65,3,96,61,224,108,21,224,46,-8,224,39,14,228,218,3,224,39,19,228,34,3,224,39,17,0,50,229,120,-2,224,79,20,114,42,224,39,27,227,216,1,5,95,54,49,32,95,55,65,-108,2,49,53,55,160,9,79,145,102,84,128,0,224,64,0,0,83,224,64,-11,129,98,128,57,82,122,0,51,177,234,128,57,131,175,135,11,78,117,0,-50,110,117,6,95,56,49,48,32,75,32,80,184,131,221,224,1,21,136,114,-224,0,5,224,53,44,224,50,41,224,47,38,224,44,35,224,41,32,224,38,-29,224,35,26,224,32,23,224,29,20,224,26,17,224,23,14,224,20,11,224,-17,8,224,14,5,224,11,2,192,8,96,5,100,245,232,172,3,224,0,5,-66,88,0,49,226,88,5,0,90,224,147,4,224,1,15,226,34,10,226,88,-255,224,37,23,224,35,4,224,32,23,224,29,20,224,26,17,224,23,14,224,-20,11,224,17,8,224,14,5,224,11,2,192,8,96,5,226,86,19,66,85,-0,48,226,85,5,224,101,1,104,142,225,247,25,64,1,226,46,10,224,55,-26,224,53,10,224,50,41,224,47,38,224,44,35,224,41,32,224,38,29,224,-35,26,224,32,23,224,29,20,224,26,17,224,23,14,224,20,11,226,45,14,-0,58,135,200,226,40,13,64,1,162,44,226,46,255,224,41,20,224,38,29,-224,35,26,224,32,23,224,29,20,224,26,17,226,3,12,66,1,0,56,226,-1,17,193,255,224,85,7,224,1,11,225,254,255,224,38,20,224,35,26,224,-32,23,224,29,20,224,26,17,224,23,14,228,25,13,66,22,0,55,228,24,-19,228,26,2,226,28,255,224,41,19,224,38,29,224,35,26,224,32,23,224,-29,20,225,235,11,65,233,0,54,225,233,21,225,235,3,225,236,255,224,41,-19,224,38,29,224,35,26,224,32,23,225,207,10,65,206,0,53,225,206,23,-128,1,225,212,2,225,215,255,224,41,21,225,110,7,65,107,0,52,225,107,-29,192,1,225,115,5,64,0,224,49,23,64,1,225,119,64,224,193,3,64,-189,0,51,224,189,9,64,161,224,89,23,64,1,226,11,246,224,38,29,224,-35,26,224,32,23,224,29,20,224,26,17,224,23,14,224,20,11,224,17,8,-224,14,5,224,11,2,238,115,17,66,76,243,32,6,224,106,3,224,1,13,-227,12,9,226,121,48,224,153,2,64,138,241,82,6,224,69,11,224,124,3,-224,31,11,224,1,7,224,117,11,224,53,44,224,50,41,224,47,38,224,44,-35,224,41,32,224,38,29,224,35,26,226,67,9,65,176,240,173,16,224,1,-7,226,51,6,224,40,17,224,1,1,225,185,205,225,71,6,0,58,155,181,-227,128,33,227,124,8,224,46,21,128,1,225,74,114,224,239,4,64,237,238,-181,18,224,1,7,224,235,7,224,43,19,192,1,226,53,161,226,9,5,65,-26,237,185,22,224,1,11,229,139,10,224,88,2,64,84,0,54,128,84,6,-50,55,48,32,95,57,51,90,78,3,57,51,53,32,96,26,170,112,2,50,-51,49,64,4,0,51,64,4,95,184,4,64,95,50,51,53,224,12,0,14,-67,32,83,32,95,49,50,55,32,95,53,49,32,64,35,157,208,224,18,4,-89,123,224,18,6,126,153,224,18,5,155,6,224,18,4,224,94,10,64,183,-0,67,127,233,224,18,0,127,241,93,49,252,128,1,19,116,111,69,110,117,-109,58,32,111,117,116,32,111,102,32,114,97,110,103,101,156,146,128,220,64,-194,64,64,161,12,125,42,3,95,49,48,57,95,87,64,8,0,53,64,121,-4,64,95,49,56,54,128,26,97,23,3,64,85,32,83,221,58,2,67,32,-60,160,178,224,18,6,160,159,224,18,3,64,159,1,85,32,96,6,64,7,-129,121,224,35,6,64,111,1,85,32,96,6,64,7,64,88,96,36,224,91,-4,129,71,224,55,4,65,71,1,85,32,96,6,64,7,154,229,1,85,32,-97,133,189,155,1,54,54,225,183,1,128,252,158,9,128,5,157,129,5,49,-52,50,32,95,54,64,52,91,73,224,47,0,224,13,6,1,67,39,66,164,-3,95,50,54,55,224,81,3,97,33,224,26,13,161,105,0,55,224,20,2,-2,50,55,56,224,12,0,66,98,235,103,28,226,196,4,224,34,13,224,1,-5,230,26,205,224,41,32,224,38,29,231,177,8,65,143,236,57,10,161,127,-224,84,15,224,1,3,225,119,255,224,38,20,224,35,26,224,32,23,224,29,-20,224,26,17,224,23,14,224,20,11,224,17,8,224,14,5,236,49,16,66,-67,140,48,0,83,100,18,0,66,229,190,0,5,51,53,57,32,64,75,64,-51,0,66,64,27,1,95,48,68,7,127,160,0,56,196,148,1,39,32,95,-150,128,9,224,31,0,2,64,67,39,64,119,8,95,55,57,50,32,64,95,-56,56,69,163,9,66,32,95,52,52,56,32,95,57,50,133,111,3,95,55,-57,53,68,126,0,49,91,30,96,97,0,67,96,75,1,66,32,102,24,64,-174,0,49,230,30,2,11,67,97,110,110,111,116,32,102,105,110,100,32,134,-22,3,64,66,32,85,64,46,133,14,0,56,100,244,128,155,165,7,0,50,-64,96,64,0,224,10,1,68,198,0,48,135,40,140,151,64,109,0,54,160,-182,224,227,7,1,52,52,101,107,3,32,95,52,50,64,92,101,168,224,33,-4,4,50,50,57,56,32,192,235,224,128,0,64,232,71,246,126,110,7,49,-32,64,79,32,35,53,56,161,70,96,29,224,112,2,128,41,224,234,6,0,-32,192,224,5,89,32,66,32,80,32,64,56,128,99,3,67,39,32,89,96,-12,0,32,64,15,0,64,64,28,96,145,126,219,70,96,128,174,0,49,72,-31,96,0,3,67,39,32,79,96,94,6,57,57,32,95,49,51,48,225,111,-1,160,141,128,37,129,153,0,64,161,154,0,64,161,177,65,36,140,11,96,-112,98,69,128,6,160,15,64,112,64,136,1,95,54,66,38,2,95,52,52,-65,230,192,6,113,142,64,225,0,49,98,3,128,21,0,58,96,137,98,105,-2,32,95,49,83,28,129,188,225,115,2,104,101,130,77,225,81,0,160,37,-225,134,1,200,75,1,51,53,64,46,2,95,51,53,160,37,226,57,12,22,-103,101,116,68,105,114,101,99,116,111,114,121,67,111,110,116,101,110,116,115,-58,32,99,130,79,3,111,112,101,110,193,110,129,94,2,83,39,32,65,91,-64,5,225,233,4,97,83,96,136,129,113,98,121,0,83,232,214,0,224,138,-5,226,150,0,224,65,3,104,187,224,24,8,1,51,53,97,116,129,225,96,-217,225,190,0,226,90,8,1,95,52,64,223,97,85,105,222,225,111,1,104,-250,0,52,96,97,97,101,139,145,9,94,99,95,100,95,110,97,109,101,32,-64,19,138,138,7,94,114,101,97,100,100,105,114,96,18,0,54,96,18,0,-75,224,145,5,0,55,64,145,225,128,4,194,168,0,66,130,210,225,91,1,-64,91,0,58,129,63,64,167,64,185,66,97,104,219,224,66,30,6,118,101,-114,115,105,111,110,224,69,1,0,52,87,3,3,95,50,50,56,128,205,224,-69,29,13,99,111,109,112,105,108,101,114,58,32,109,104,115,45,96,74,2,-95,56,57,100,89,224,64,29,6,100,101,112,101,110,100,115,224,134,1,0,-55,64,134,64,38,3,54,56,32,85,99,112,160,51,0,64,128,231,192,66,-4,79,32,35,52,53,163,222,128,187,97,140,1,50,49,130,186,98,86,225,-195,2,96,126,224,118,1,15,101,120,112,111,115,101,100,45,109,111,100,117,-108,101,115,58,162,138,165,79,227,1,3,0,85,99,160,64,209,226,19,4,-224,79,6,4,111,116,104,101,114,224,77,7,192,60,138,106,228,127,1,1,-95,54,196,128,74,111,228,131,11,64,24,129,213,1,56,50,162,102,128,0,-66,60,140,106,128,170,0,66,224,151,7,226,188,0,227,181,2,74,181,1,-54,53,202,181,0,52,64,38,138,245,229,8,14,15,66,117,105,108,100,105,-110,103,32,112,97,99,107,97,103,101,128,147,170,186,69,1,163,171,230,123,-7,67,158,66,64,68,149,1,55,54,224,20,0,133,51,67,180,196,98,132,-197,227,232,1,2,95,52,51,192,229,96,29,128,48,0,39,224,5,8,224,-230,3,192,131,224,232,30,192,234,128,10,224,239,5,3,87,114,105,116,224,-238,9,101,211,98,120,226,181,9,2,32,116,111,161,168,0,55,139,212,160,-0,224,219,0,96,195,128,108,224,183,6,161,160,0,39,96,2,64,184,64,-250,224,70,0,160,46,1,50,50,227,67,0,166,1,100,189,0,67,97,122,-104,42,77,216,65,126,3,50,50,57,49,97,6,0,56,67,13,0,85,102,-181,3,64,85,32,65,96,156,0,52,135,227,224,21,5,109,180,68,41,163,-100,136,74,164,62,227,255,0,3,95,50,49,49,193,147,96,146,225,170,6,-192,196,225,127,29,225,128,22,6,67,111,109,112,114,101,115,68,143,3,32,-116,105,109,193,129,129,74,225,131,0,101,126,77,18,133,209,69,178,4,55,-52,32,95,55,135,60,225,156,2,1,109,115,194,176,168,132,101,23,163,23,-1,49,50,69,102,64,87,0,54,101,246,6,51,54,56,32,95,55,55,142,-188,163,109,64,51,129,172,97,33,129,91,131,124,141,132,1,66,32,232,35,-1,225,145,1,168,10,248,64,1,128,7,230,91,4,141,159,65,175,0,51,-65,110,0,55,105,163,64,88,140,77,0,83,196,241,1,54,52,97,153,2,-95,49,52,68,249,103,190,198,242,104,80,2,64,35,52,128,82,166,136,131,-14,0,80,227,155,1,98,129,224,50,4,101,47,161,8,168,71,99,148,103,-227,66,17,2,95,52,51,96,83,128,130,66,20,200,91,0,49,97,30,64,-150,130,51,1,95,54,99,222,64,14,1,54,54,106,78,1,54,56,65,0,-231,150,0,224,163,3,0,73,64,9,64,237,224,174,2,161,4,104,55,226,-14,8,195,135,103,65,104,45,9,102,32,116,104,101,32,102,111,114,109,96,-20,0,45,198,188,131,131,98,21,4,49,50,54,32,95,107,80,64,0,65,-81,139,91,195,130,64,1,235,177,30,224,11,2,192,8,73,241,160,86,183,-88,0,50,65,153,3,95,50,49,53,106,215,99,175,224,109,0,0,95,96,-144,73,246,0,56,97,7,162,189,0,55,65,42,96,246,70,9,1,55,55,-64,26,68,99,1,49,49,69,131,2,49,57,51,107,64,64,77,66,21,162,-102,163,5,200,249,65,100,229,38,5,204,11,195,146,1,67,32,138,71,241,-231,6,15,112,107,103,80,97,116,104,32,105,115,32,101,109,112,116,121,230,-163,0,130,166,129,243,96,6,0,79,66,55,0,79,235,57,0,192,27,128,-135,96,105,134,123,231,41,5,228,17,13,64,12,0,52,70,232,0,49,131,-168,177,118,228,15,22,6,73,110,115,116,97,108,108,229,147,9,64,99,168,-12,229,144,6,0,105,234,78,0,64,81,230,28,0,233,92,5,196,82,70,-133,224,13,1,229,180,0,224,208,4,4,95,50,50,55,54,68,113,160,177,-64,86,224,226,0,128,50,224,253,10,64,53,64,212,203,219,96,0,231,4,-3,64,54,232,8,0,225,91,2,161,123,135,83,231,204,19,161,81,146,199,-231,192,14,4,99,114,101,97,116,231,182,1,224,84,6,97,66,224,219,1,-69,242,131,246,2,32,95,56,66,205,192,150,128,193,64,176,110,50,110,87,-76,174,133,36,1,95,57,200,153,169,30,236,207,8,134,158,134,157,0,55,-69,179,202,162,233,193,10,224,101,3,234,136,4,238,168,1,64,0,0,75,-131,222,98,218,1,95,52,148,140,67,46,139,118,70,231,2,90,32,75,99,-69,64,21,182,3,105,100,0,55,67,17,1,50,50,79,63,64,26,0,54,-224,26,0,0,54,66,150,64,25,0,52,128,25,137,93,193,226,0,80,109,-226,0,32,133,25,68,200,225,100,1,1,46,47,129,95,135,86,167,99,64,-72,0,51,128,72,179,174,1,50,50,97,120,83,204,96,22,133,231,97,2,-0,56,66,199,74,11,103,142,64,28,240,14,0,163,211,2,95,53,53,129,-221,0,56,132,101,64,49,128,61,64,54,101,73,166,201,1,95,54,135,157,-205,239,64,48,64,126,64,64,224,125,1,65,5,64,21,229,163,1,1,95,-52,65,131,64,26,129,67,162,112,194,160,80,47,69,196,1,95,52,149,222,-224,30,15,0,56,133,213,224,30,6,1,95,52,71,47,168,197,226,213,2,-1,95,51,98,72,176,49,96,125,129,171,168,213,96,212,224,99,2,110,178,-105,141,0,55,72,82,0,53,89,230,79,75,237,142,0,65,153,166,81,235,-100,0,162,227,134,120,162,4,0,53,96,223,228,65,2,3,95,52,48,57,-66,113,1,49,32,64,66,66,145,0,55,228,248,1,71,227,129,136,229,15,-1,129,155,238,135,0,150,96,231,100,4,141,62,129,9,228,176,2,229,82,-3,131,240,168,21,0,85,71,228,128,52,238,75,4,0,55,130,163,71,136,-160,22,64,193,130,165,66,179,198,31,160,135,0,66,64,134,136,102,64,17,-224,54,2,224,140,0,160,87,130,152,2,94,109,107,174,141,65,83,166,186,-233,229,7,230,102,3,235,233,1,229,93,9,0,56,215,44,169,178,228,223,-1,67,191,0,56,64,44,114,51,0,90,228,229,13,71,70,144,182,239,98,-3,1,64,67,134,109,128,0,64,27,0,85,160,35,128,9,160,10,224,183,-11,229,233,2,205,33,131,209,161,14,160,167,230,10,2,224,21,8,224,24,-1,192,239,165,248,160,80,172,145,224,96,3,231,13,31,235,19,28,16,116,-111,112,32,108,101,118,101,108,32,100,101,102,110,115,58,32,96,0,236,154,-0,229,91,3,1,51,54,153,50,235,32,5,164,145,96,22,231,44,6,7,-40,117,110,112,114,117,110,101,179,210,224,76,3,224,64,2,0,95,68,109,-99,19,0,49,232,12,2,225,18,24,237,170,9,65,11,0,67,91,49,120,-220,130,200,101,187,227,173,1,151,62,161,13,164,69,131,165,239,244,4,224,-195,2,0,61,160,187,96,24,0,50,224,160,8,225,202,5,130,252,224,180,-1,173,125,75,2,64,62,129,178,226,79,2,226,158,4,103,178,0,55,96,-139,64,4,228,115,6,224,55,4,226,137,12,224,119,5,233,183,4,226,49,-68,9,102,105,110,97,108,32,112,97,115,115,130,43,226,49,3,163,151,97,-82,128,59,226,53,0,128,14,237,89,18,230,243,2,237,89,4,163,239,161,-255,129,5,205,1,130,161,238,245,16,224,225,1,64,146,134,5,169,94,228,-60,1,235,71,3,104,173,1,48,55,160,147,172,131,89,123,64,27,71,254,-128,65,78,218,161,158,1,95,52,118,123,64,233,6,48,51,32,95,56,54,-53,230,241,0,229,242,3,231,207,2,0,104,192,220,175,24,177,157,72,30,-0,56,69,35,128,172,244,36,0,161,239,129,142,226,111,1,161,99,192,30,-225,87,3,96,19,160,34,84,186,69,24,97,226,76,13,64,172,2,35,49,-48,85,250,225,130,20,6,32,108,105,110,101,115,47,225,136,2,236,11,4,-229,134,3,100,237,194,255,160,123,100,211,128,155,109,173,1,50,50,77,219,-225,5,2,3,99,111,109,98,192,91,165,6,224,53,4,126,81,224,53,9,-234,107,1,225,195,3,3,95,56,56,48,226,161,2,3,109,104,115,99,224,-42,7,229,201,0,230,24,11,79,159,72,42,224,46,1,226,86,4,232,65,-0,224,168,0,227,80,7,1,95,55,86,217,225,208,0,162,61,0,50,144,-218,1,95,56,138,248,96,44,234,252,3,224,11,0,209,151,239,84,1,193,-223,2,95,50,50,69,22,64,7,0,54,167,188,130,57,192,128,3,95,51,-54,52,130,227,70,221,66,68,237,143,5,31,84,104,101,32,45,114,32,102,-108,97,103,32,99,117,114,114,101,110,116,108,121,32,111,110,108,121,32,119,-111,114,107,115,4,32,119,105,116,104,85,85,161,46,64,104,161,9,209,222,-1,50,50,68,149,64,117,104,162,2,95,49,49,72,241,0,56,110,87,112,-179,225,121,2,2,97,105,110,227,186,3,71,246,138,108,85,99,144,192,128,-228,255,53,0,78,74,97,249,64,121,0,57,167,189,0,83,96,106,0,39,-96,113,128,16,161,25,1,95,56,113,40,160,123,1,55,49,64,11,97,155,-98,14,228,168,5,10,68,117,112,108,105,99,97,116,101,32,105,77,232,1,-110,99,237,222,3,197,248,140,165,111,67,200,213,230,2,7,1,97,116,128,-55,118,53,78,101,224,119,3,224,0,1,66,233,72,72,224,91,0,1,95,-52,195,162,225,207,0,227,167,4,160,38,2,79,32,35,68,123,102,88,81,-234,71,80,147,65,224,131,2,0,125,225,85,1,64,31,1,85,32,172,162,-228,17,2,90,59,224,13,1,238,120,2,174,123,160,250,224,17,2,192,20,-227,202,2,224,48,8,224,51,10,224,57,3,227,188,3,224,29,17,224,65,-3,135,35,195,103,195,236,224,45,11,128,41,224,37,8,230,192,0,236,191,-1,161,209,65,102,2,49,50,50,138,237,97,119,106,157,76,154,109,125,3,-51,50,52,32,134,226,1,95,55,116,59,161,130,0,50,148,209,1,75,52,-161,119,224,159,6,68,101,2,49,50,51,97,190,0,50,210,96,224,31,2,-100,90,224,234,8,225,5,2,192,40,194,196,129,41,64,133,198,82,224,34,-3,224,62,0,99,227,128,120,224,34,3,64,18,132,121,128,15,96,101,132,-215,124,48,2,32,95,56,77,14,1,95,49,147,28,160,0,96,41,212,66,-163,121,228,201,0,192,100,100,202,105,44,160,17,77,18,132,187,160,123,225,-10,10,225,4,2,192,162,224,166,5,192,157,160,221,234,200,1,160,185,193,-22,132,93,0,56,230,165,1,96,61,96,147,96,209,102,230,64,211,214,134,-227,64,1,71,131,143,24,231,8,4,128,0,226,48,0,0,67,97,231,0,-50,175,186,235,248,6,3,64,66,32,82,64,214,0,54,222,86,173,247,128,-238,233,133,5,236,32,1,180,171,228,48,4,1,65,32,227,172,0,224,122,-1,143,62,226,112,1,161,21,96,21,228,139,4,0,49,64,207,254,81,0,-228,57,12,228,23,2,2,64,94,42,231,69,0,143,160,160,65,1,54,52,-234,171,5,163,127,138,103,160,9,131,32,231,217,3,1,95,49,145,58,96,-238,100,98,160,133,193,60,65,59,192,86,2,80,32,90,241,7,0,132,182,-192,25,65,31,0,85,96,42,128,233,3,85,32,75,51,64,2,160,11,224,-53,0,86,167,224,11,1,229,227,0,0,55,81,216,98,155,229,236,13,229,-162,8,1,78,111,76,189,3,105,110,105,116,87,218,4,102,111,117,110,100,-85,197,187,237,197,217,227,111,0,70,149,181,94,182,104,246,83,10,65,64,-246,83,3,5,95,52,53,48,32,35,66,27,64,62,176,246,0,54,169,246,-0,54,96,61,0,54,248,147,0,228,115,6,130,201,140,232,170,100,4,55,-50,32,95,55,146,122,192,68,0,49,98,229,202,117,169,146,0,58,135,21,-145,141,0,51,106,37,1,50,49,178,94,71,168,125,223,137,100,129,216,97,-56,119,206,74,53,81,242,64,7,82,87,248,75,10,196,8,130,206,197,117,-133,85,65,150,130,246,109,86,248,91,0,195,10,224,94,36,162,116,165,19,-224,108,0,96,176,143,181,162,5,224,107,4,96,106,227,122,0,103,127,0,-51,128,224,227,47,0,1,54,56,231,248,9,10,35,105,110,99,108,117,100,-101,32,92,34,98,0,219,96,2,79,32,35,86,251,238,175,1,64,103,235,-167,15,7,109,104,115,102,102,105,46,104,131,94,96,123,4,56,32,95,51,-53,73,210,225,73,24,150,236,224,245,6,224,13,0,100,117,192,36,224,46,-2,224,10,6,164,158,225,125,5,129,15,129,19,225,25,0,225,17,0,130,-59,0,50,122,123,228,78,1,224,212,1,31,115,116,97,116,105,99,32,115,-116,114,117,99,116,32,102,102,105,95,101,110,116,114,121,32,116,97,98,108,-101,91,93,32,2,61,32,123,64,239,228,122,6,236,165,1,70,12,194,154,-224,87,3,4,123,32,48,44,48,136,164,224,22,3,1,125,59,224,17,7,-224,121,8,1,42,120,64,11,96,127,1,32,61,128,135,96,52,228,187,3,-234,210,6,24,85,110,105,109,112,108,101,109,101,110,116,101,100,32,70,70,-73,32,102,101,97,116,117,114,101,225,170,0,1,50,50,69,64,227,154,3,-99,144,129,188,64,29,192,7,166,38,225,207,1,65,108,65,196,232,207,1,-225,152,1,133,53,160,5,193,241,0,83,99,122,0,83,66,60,64,63,72,-64,229,55,0,96,3,96,12,168,52,198,51,136,49,224,85,0,99,116,76,-240,4,61,61,32,64,35,250,183,1,224,42,0,227,45,2,243,124,3,117,-186,2,50,50,54,226,26,0,226,17,0,68,28,148,234,141,85,192,100,199,-136,116,254,0,83,96,15,166,9,100,66,232,23,0,212,107,97,49,225,121,-1,5,100,121,110,97,109,105,173,89,64,73,0,85,65,107,100,242,224,226,-3,224,73,26,6,119,114,97,112,112,101,114,224,73,7,69,32,192,73,225,-24,1,224,65,2,227,173,15,130,216,235,36,1,129,9,0,95,124,53,193,-205,192,232,186,219,193,210,138,146,72,121,69,191,239,187,22,224,97,0,194,-40,104,158,3,50,50,54,50,123,90,225,4,0,0,85,182,72,96,23,0,-51,176,122,224,135,13,226,106,11,245,240,4,224,248,10,68,201,200,34,224,-88,1,196,125,224,96,0,194,162,224,87,3,225,83,4,150,75,142,124,228,-161,0,233,162,1,98,229,225,138,4,0,66,72,5,64,215,175,55,246,108,-0,225,255,3,225,185,36,3,118,97,108,117,163,185,224,105,13,97,59,1,-67,39,64,106,1,95,55,81,23,192,245,224,141,7,224,17,4,169,196,192,-142,226,234,1,104,203,133,131,226,105,1,64,38,232,109,15,232,110,9,1,-98,97,104,94,9,101,105,103,110,32,105,109,112,111,114,174,32,254,33,11,-99,138,0,54,167,167,0,65,135,182,151,85,105,46,64,14,151,40,1,75,-50,87,36,64,201,254,77,2,223,198,224,13,9,231,71,1,254,54,0,64,-62,143,108,224,105,0,136,229,224,105,0,136,181,229,143,3,5,71,69,84,-82,65,87,229,165,7,11,71,69,84,84,73,77,69,77,73,76,76,73,224,-27,7,2,97,99,111,112,43,224,19,4,6,100,100,95,70,73,76,69,224,-23,11,3,117,116,102,56,224,23,8,0,115,144,38,224,19,4,1,116,97,-224,19,12,0,50,224,20,7,4,99,97,108,108,111,99,234,224,21,4,3,-108,111,115,101,114,81,224,21,4,224,171,9,2,101,120,112,224,18,7,4,-102,108,117,115,104,224,59,8,3,102,111,112,101,224,145,8,2,102,114,101,-98,172,224,19,3,2,103,101,116,224,60,8,5,103,101,116,101,110,118,224,-21,7,7,105,115,119,105,110,100,111,119,224,148,8,2,108,111,103,224,18,-7,0,109,224,230,12,6,109,100,53,65,114,114,97,127,86,224,23,6,0,-66,225,129,11,7,109,100,53,83,116,114,105,110,224,94,9,3,101,109,99,-112,224,70,9,4,101,109,109,111,118,224,225,8,1,112,117,224,225,9,225,-194,10,3,115,113,114,116,224,19,8,4,121,115,116,101,109,224,21,7,225,-235,10,5,116,109,112,110,97,109,224,122,8,1,117,110,225,94,11,5,117,-110,108,105,110,107,224,21,7,3,114,101,97,100,224,42,8,3,119,114,105,-116,226,24,9,5,112,101,101,107,80,116,102,127,224,22,4,2,111,107,101,-224,22,14,3,87,111,114,100,224,69,11,224,23,11,66,247,13,108,122,55,-55,95,99,111,109,112,114,101,115,115,111,224,82,8,224,34,0,1,100,101,-224,36,21,2,114,108,101,224,70,22,64,33,224,69,23,2,98,119,116,224,-69,22,64,33,224,69,19,64,235,4,95,117,105,110,116,227,205,8,65,29,-224,25,14,192,51,1,49,54,224,52,16,224,26,10,192,53,0,51,227,251,-8,224,53,0,224,26,10,192,53,1,54,52,224,53,16,224,26,10,64,53,-224,212,16,224,211,16,224,210,17,224,209,17,224,208,17,224,207,17,224,206,-17,224,205,17,3,117,115,104,111,227,135,9,129,3,224,26,13,64,53,224,-52,17,224,51,17,65,82,225,107,16,224,207,15,224,205,15,224,97,13,1,-108,111,228,186,9,128,98,224,25,12,64,51,224,50,16,224,49,16,1,117,-108,224,102,18,224,103,17,224,104,17,224,51,16,1,102,108,224,255,13,224,-23,10,5,115,105,122,101,111,102,225,25,11,160,25,224,100,11,192,26,224,-27,11,70,206,1,100,105,227,215,8,103,56,224,23,10,69,76,224,46,11,-2,95,100,95,229,167,11,1,99,104,224,44,10,127,251,224,20,7,4,103,-101,116,99,119,229,50,8,6,103,101,116,95,98,117,102,224,180,11,3,98,-95,114,100,224,27,17,1,119,114,224,27,11,6,110,101,119,95,109,112,122,-224,144,8,4,112,122,95,97,98,231,126,8,96,22,0,100,224,147,8,96,-22,0,110,224,22,12,1,99,109,232,69,8,64,22,64,197,224,47,12,64,-24,1,115,105,224,25,15,0,117,224,25,12,82,207,1,95,115,224,56,16,-224,30,0,224,61,14,229,194,9,64,22,2,109,117,108,224,22,14,1,95,-50,233,26,10,64,27,1,110,101,232,61,9,8,112,122,95,112,111,112,99,-111,117,226,158,9,64,27,1,115,117,231,113,8,64,22,5,102,100,105,118,-95,113,224,104,16,0,116,96,30,224,182,12,4,116,115,116,98,105,224,106,-12,0,120,224,231,9,5,119,97,110,116,95,103,129,161,240,71,3,224,0,-94,0,58,144,96,244,94,2,1,95,52,82,119,179,249,1,54,57,76,35,-80,143,237,28,1,240,140,1,76,62,84,11,96,32,0,54,87,155,1,57,-55,77,158,240,173,1,64,94,147,248,2,85,32,90,114,36,0,90,176,27,-141,247,86,197,2,50,50,53,79,74,143,4,0,55,116,101,96,5,96,60,-144,24,224,56,9,80,129,77,239,236,239,8,4,123,32,92,34,38,65,76,-88,92,246,169,3,224,34,1,2,92,34,44,92,68,67,69,1,114,95,96,-42,211,116,224,35,1,1,125,44,96,24,96,0,109,112,224,101,9,224,100,-29,224,95,24,192,255,224,202,13,224,100,62,225,89,4,65,87,0,54,252,-232,4,225,77,1,156,190,225,105,1,246,232,0,206,149,149,3,96,8,151,-0,1,50,50,94,78,224,152,6,225,90,1,113,87,96,154,3,52,55,32,-64,154,209,152,76,96,172,64,121,96,222,0,52,116,11,0,52,79,28,224,-17,5,66,140,122,96,238,241,7,2,49,50,53,64,45,224,116,1,206,230,-16,38,32,109,117,115,116,32,98,101,32,80,116,114,47,70,117,110,171,37,-78,123,239,217,15,2,40,72,115,128,40,0,41,193,50,224,43,7,176,58,-64,5,96,186,240,214,7,65,199,154,195,210,184,225,26,1,129,224,128,244,-65,6,160,43,129,13,226,205,1,146,134,65,143,97,149,129,136,97,113,179,-9,158,130,160,87,97,40,242,187,0,81,129,0,50,129,17,160,100,96,74,-129,101,226,57,9,0,59,98,55,64,15,7,95,85,110,105,116,40,115,44,-144,22,249,195,12,2,79,32,35,87,163,224,234,0,178,71,250,5,4,0,-52,222,22,224,65,0,87,107,0,49,255,112,3,192,98,2,32,95,53,68,-87,2,50,50,53,100,104,7,53,55,48,32,95,50,55,54,225,15,0,224,-110,6,184,138,89,139,195,37,65,60,191,241,68,133,0,54,88,92,96,10,-228,62,2,66,229,144,188,227,191,10,64,252,1,116,111,162,161,225,173,0,-118,63,1,50,52,250,251,1,224,49,2,225,33,35,64,122,145,40,67,96,-129,222,117,46,153,111,121,163,0,85,249,195,0,0,55,229,51,0,145,134,-64,61,145,89,4,95,49,51,55,54,224,131,3,98,156,64,31,145,58,121,-141,64,127,1,95,57,90,44,64,24,145,68,227,65,5,69,179,183,136,64,-34,186,14,224,91,6,12,80,114,105,109,105,116,105,118,101,115,46,73,79,-160,102,64,57,97,63,0,85,98,151,224,201,3,125,112,180,43,192,31,243,-211,0,224,243,9,212,85,64,29,0,85,226,207,1,194,233,225,8,4,160,-43,244,161,1,128,139,134,70,146,80,225,205,10,98,202,163,187,96,93,68,-159,225,211,5,229,200,11,225,214,0,226,5,5,253,153,3,224,51,8,226,-199,1,96,44,227,29,7,64,172,182,207,129,19,217,119,163,172,2,67,32,-60,161,64,131,225,247,79,3,166,8,97,79,0,90,64,4,0,85,164,6,-224,36,3,165,67,85,182,192,89,226,76,9,101,73,160,32,64,57,224,30,-7,97,99,224,211,1,229,37,3,226,20,2,192,18,128,0,224,115,2,100,-175,2,95,54,55,84,62,136,20,130,136,1,50,50,94,236,247,220,0,253,-24,12,165,184,225,87,8,17,78,111,116,32,97,32,118,97,108,105,100,32,-67,32,116,121,112,101,221,20,1,49,53,100,42,97,90,0,54,130,190,132,-118,229,208,17,226,207,2,4,70,108,111,97,116,116,55,245,216,16,224,34,-2,0,64,224,85,30,0,73,138,77,224,82,16,192,31,224,79,31,209,155,-224,80,16,224,32,0,224,81,20,3,68,97,116,97,96,75,96,4,112,17,-224,81,20,128,33,224,82,20,132,118,224,69,16,70,63,224,68,25,0,83,-115,91,8,46,73,79,46,72,97,110,100,108,151,69,225,22,16,194,119,231,-93,2,1,54,56,67,61,0,80,168,106,225,200,16,136,3,8,46,67,46,-84,121,112,101,115,46,128,70,64,35,235,116,3,3,67,67,104,97,235,137,-8,1,67,83,224,21,12,0,85,224,43,13,240,104,11,1,67,85,224,22,-13,162,10,224,42,5,224,20,11,0,76,239,10,10,1,67,85,224,21,12,-5,80,116,114,100,105,102,238,75,8,3,67,83,105,122,238,239,8,1,67,-83,224,21,12,0,76,224,110,14,224,22,12,1,84,105,143,71,236,163,10,-67,149,135,105,230,84,18,228,96,1,64,46,135,29,224,46,18,224,43,2,-248,101,1,228,47,6,3,118,111,105,100,234,254,1,232,149,9,224,41,1,-8,40,105,110,116,32,115,41,32,123,229,185,5,224,32,1,0,59,158,15,-160,204,135,93,233,146,0,3,95,50,50,50,91,104,2,50,50,50,228,183,-0,64,9,191,148,2,35,49,50,70,168,68,250,101,153,64,65,135,134,3,-95,50,50,51,103,130,1,51,57,103,122,64,31,3,10,65,32,94,245,114,-10,89,79,64,37,192,233,1,51,55,69,84,96,10,73,29,0,51,128,126,-186,94,102,74,192,23,198,185,101,106,0,50,224,19,1,3,32,95,51,54,-192,34,101,171,91,220,0,52,127,25,0,50,69,162,2,95,50,57,137,53,-224,58,6,64,31,137,1,128,232,105,169,72,178,1,95,51,101,182,185,211,-224,26,1,64,155,126,178,95,106,4,95,51,50,52,32,169,199,224,153,2,-224,156,5,64,99,110,100,235,41,0,192,168,1,95,57,96,160,105,33,224,-30,18,128,69,188,34,225,9,2,160,152,0,51,64,191,122,103,224,65,0,-224,222,1,0,56,103,212,224,22,8,2,50,50,51,106,59,1,49,49,224,-165,0,224,0,1,65,156,136,127,0,94,153,187,97,174,135,228,141,67,2,-39,32,95,106,204,3,50,50,51,53,98,25,97,11,0,55,64,141,158,241,-64,48,0,54,96,48,4,112,97,99,107,67,152,232,2,76,101,110,96,73,-131,61,0,94,178,87,96,18,163,33,6,56,57,32,75,32,95,57,126,107,-160,7,2,95,57,51,225,4,0,2,95,57,53,224,11,1,1,49,48,65,-8,224,12,0,64,218,128,12,160,157,98,175,65,173,125,67,160,163,189,28,-129,14,2,49,48,52,192,30,0,95,64,148,96,181,170,139,224,137,18,98,-254,160,137,96,11,192,137,160,12,128,137,64,12,224,137,1,1,50,50,126,-188,224,138,3,157,218,233,135,0,0,51,73,136,160,139,64,5,64,139,131,-153,0,94,84,135,1,80,116,131,52,131,106,0,94,84,178,192,18,131,102,-174,161,107,174,0,50,128,102,227,37,7,141,109,2,95,49,48,105,119,0,-58,98,210,131,130,64,51,0,55,126,21,76,152,236,81,0,64,71,68,26,-128,163,97,44,67,167,109,136,98,0,224,189,0,0,32,162,105,64,217,128,-58,130,46,0,94,155,192,64,167,66,25,96,186,1,117,116,128,15,162,6,-244,43,3,96,23,130,11,4,66,32,95,55,49,132,118,136,252,228,190,1,-30,115,116,97,116,105,99,32,117,110,115,105,103,110,101,100,32,99,104,97,-114,32,100,97,116,97,91,93,32,61,32,123,229,183,0,64,165,229,33,0,-73,150,0,50,96,13,99,243,2,50,32,35,68,229,65,19,224,90,3,1,-125,59,101,24,224,20,5,224,104,5,10,42,99,111,109,98,101,120,112,114,-32,61,96,116,128,49,159,5,229,138,8,69,137,192,47,5,108,101,110,32,-61,32,192,45,224,153,0,235,124,2,141,251,2,79,32,35,74,99,239,129,-2,161,82,198,26,0,89,64,55,75,6,3,85,32,95,49,110,251,129,237,-94,132,224,7,1,229,39,1,69,182,206,80,191,135,206,76,1,53,56,65,-208,160,95,173,102,2,55,51,57,240,177,1,224,160,6,133,69,76,3,0,-52,160,161,64,56,130,148,64,97,1,75,52,160,2,2,90,32,90,64,6,-228,81,1,65,109,64,93,1,57,50,127,77,0,49,130,122,0,67,75,48,-0,53,71,26,65,140,64,23,211,63,1,75,51,128,63,64,19,130,75,64,-248,2,66,32,80,96,199,205,127,133,108,0,67,105,41,225,4,11,225,12,-0,161,5,96,0,159,172,64,218,0,56,99,117,0,55,97,4,64,104,0,-54,192,124,0,50,102,193,0,49,130,162,96,15,160,211,224,1,5,224,225,-1,192,230,77,205,161,11,224,46,9,224,56,16,192,60,129,225,76,192,0,-80,140,113,226,82,0,2,64,95,56,96,191,135,131,134,49,163,125,67,177,-2,50,50,49,196,112,224,14,1,163,56,1,35,54,193,171,66,79,0,50,-77,22,64,12,237,174,1,0,83,109,84,237,174,3,99,197,237,110,0,224,-25,3,174,89,0,83,200,45,173,222,65,189,0,85,128,140,160,161,165,104,-224,195,5,2,50,50,48,109,61,224,196,2,64,0,102,82,237,243,3,96,-101,102,106,224,62,27,2,85,32,83,128,144,1,95,49,66,75,0,54,141,-123,0,49,174,96,128,61,97,14,1,49,56,167,55,160,17,98,220,0,50,-85,201,1,49,50,85,217,2,49,50,52,227,187,2,192,9,169,42,128,44,-169,8,0,55,69,26,64,69,101,74,128,0,225,73,12,193,6,224,223,5,-96,21,66,35,161,139,224,34,10,242,5,0,224,34,0,225,78,9,1,49,-48,135,205,225,15,3,66,70,227,200,2,64,41,0,48,130,204,131,165,97,-42,1,32,95,118,228,101,205,3,95,52,57,50,73,213,175,253,160,31,73,-58,97,72,2,35,50,48,80,140,0,64,224,23,8,2,54,53,53,104,121,-64,22,224,24,4,4,49,49,49,52,49,98,142,3,95,51,52,51,229,71,-3,2,116,102,56,76,94,5,58,32,98,97,100,32,204,104,226,78,3,0,-83,197,69,64,147,96,238,1,56,48,137,105,164,191,0,35,170,117,131,219,-229,116,0,224,46,11,68,226,1,35,49,103,10,169,26,224,44,31,224,41,-32,131,84,101,43,69,35,0,51,96,21,160,168,67,116,224,27,22,224,26,-4,160,20,97,13,225,8,28,139,30,224,216,82,224,187,47,224,184,22,178,-232,224,139,38,224,111,12,203,212,0,67,64,74,64,39,66,230,134,103,204,-173,107,120,96,201,99,49,67,18,119,207,135,24,76,185,162,187,131,12,107,-203,70,44,0,54,102,148,96,18,117,88,227,0,4,160,24,99,113,64,22,-224,75,3,114,120,134,206,128,124,224,28,15,0,57,224,28,19,68,137,128,-136,224,49,3,164,241,224,137,9,131,189,64,214,224,71,8,64,24,224,48,-10,99,170,227,186,2,224,235,4,227,178,1,1,92,92,142,110,73,16,192,-148,225,184,8,2,49,55,52,161,185,129,144,227,30,5,128,59,96,237,225,-243,18,224,71,18,161,237,160,77,224,155,3,0,63,175,10,193,254,192,107,-103,10,224,20,1,224,129,29,160,115,133,70,160,56,228,192,6,4,113,117,-111,116,101,140,203,196,185,224,72,1,69,118,162,159,160,74,122,119,64,0,-89,60,233,47,2,70,196,7,10,65,32,80,32,35,52,32,182,166,0,48,-136,246,237,163,2,2,95,52,48,109,79,234,77,3,17,87,101,108,99,111,-109,101,32,116,111,32,105,110,116,101,114,97,99,80,62,17,32,77,105,99,-114,111,72,115,44,32,118,101,114,115,105,111,110,32,64,156,3,95,52,49,-54,82,50,169,223,224,89,4,70,242,131,14,73,198,96,105,224,100,1,8,-85,115,105,110,103,32,71,77,80,230,247,0,239,126,3,1,95,56,77,41,-174,3,238,137,5,0,55,67,51,1,50,50,77,84,134,207,72,180,110,20,-0,49,87,175,103,127,96,141,0,75,71,73,128,58,181,56,74,6,82,225,-1,50,50,72,228,1,95,51,73,8,78,156,135,93,65,31,138,2,6,95,-56,49,48,32,75,32,72,105,128,1,137,202,192,13,224,1,19,0,67,128,-105,224,0,4,224,53,44,224,50,41,224,47,38,224,44,35,224,41,32,224,-38,29,224,35,26,224,32,23,224,29,20,224,26,17,224,23,14,224,20,11,-224,17,8,66,54,101,162,224,0,6,66,55,0,54,163,87,224,1,27,226,-34,11,226,91,255,224,41,19,224,38,29,224,35,26,224,32,23,224,29,20,-224,26,17,224,23,14,224,20,11,224,17,8,224,14,5,224,11,2,192,8,-110,120,224,0,6,66,120,182,34,69,116,0,55,90,13,2,95,50,49,70,-3,69,51,128,15,1,55,55,71,246,177,160,96,18,69,164,0,55,82,106,-112,184,0,49,90,4,1,95,56,75,124,1,95,56,103,157,0,64,224,77,-2,64,39,229,184,6,88,2,7,32,39,58,113,117,105,116,39,70,34,64,-8,13,44,32,39,58,104,101,108,112,39,32,102,111,114,32,64,9,133,213,-224,73,2,1,51,54,71,117,1,54,57,96,162,71,254,230,244,6,2,84,-104,101,230,109,4,0,115,120,218,25,32,99,117,114,114,101,110,116,108,121,-32,111,110,108,121,32,119,111,114,107,115,32,119,105,116,104,86,163,160,100,-1,50,50,83,128,193,17,179,227,225,0,0,0,56,83,41,84,225,85,78,-224,227,0,148,255,224,33,2,2,50,49,53,137,228,230,115,0,129,44,97,-129,129,47,166,109,160,33,2,50,49,54,72,244,96,30,72,217,244,226,1,-2,95,50,49,65,116,232,67,2,4,46,109,104,115,105,96,173,224,19,1,-1,62,32,128,190,0,80,102,143,2,51,32,64,113,104,160,203,205,167,65,-252,233,105,2,0,35,224,163,0,225,206,2,70,240,156,37,129,6,224,190,-4,64,21,1,50,32,64,100,225,202,10,1,66,121,154,49,225,66,3,161,-69,240,34,1,2,95,54,54,65,173,64,223,129,46,167,47,108,17,96,179,-226,46,20,11,85,110,114,101,99,111,103,110,105,122,101,100,82,163,2,109,-97,110,187,112,224,82,9,194,238,81,114,96,10,71,119,144,126,112,34,120,-60,64,25,0,85,64,107,81,70,113,102,0,90,97,143,226,223,9,73,54,-71,209,243,46,8,8,65,109,98,105,103,117,111,117,115,192,144,189,18,116,-12,112,216,83,198,0,54,105,175,224,169,15,64,0,64,118,0,55,65,42,-64,8,64,55,0,56,66,228,139,19,160,62,65,89,213,7,65,136,1,10,-65,125,96,233,236,3,155,232,1,95,56,130,67,160,102,175,102,224,43,5,-2,99,108,101,142,204,64,44,227,242,3,2,55,53,32,64,18,169,1,227,-118,3,2,56,48,56,129,29,72,247,0,56,85,242,168,246,233,11,0,0,-49,85,158,201,11,169,59,1,95,55,150,193,224,248,12,224,147,5,4,114,-101,108,111,97,97,209,64,129,227,83,5,100,85,227,106,9,163,130,227,105,-19,1,95,56,237,81,0,225,215,4,64,206,224,186,0,224,206,3,224,244,-4,165,3,225,181,14,224,191,5,4,100,101,108,101,116,99,6,224,108,8,-97,87,64,8,0,54,182,36,193,231,64,166,65,246,128,26,1,52,53,112,-132,225,251,2,65,253,129,137,224,132,11,224,127,5,2,116,121,112,224,125,-10,3,95,50,49,57,122,2,224,61,22,1,107,105,131,77,224,61,9,65,-26,224,61,23,3,109,97,105,110,224,61,13,66,18,224,61,23,197,230,0,-75,228,1,12,66,248,97,11,225,134,11,172,247,163,22,146,49,224,88,1,-0,67,131,148,3,115,58,94,42,102,102,0,32,96,0,96,9,172,131,2,-94,42,58,130,119,64,24,160,9,5,109,111,100,117,108,101,64,26,99,38,-96,51,128,9,13,97,108,108,32,100,101,102,105,110,105,116,105,111,110,64,-33,129,244,3,32,100,32,32,192,9,224,30,0,7,40,115,41,32,100,94,-42,58,65,151,1,32,101,64,68,4,115,104,111,119,32,96,14,6,111,102,-32,101,94,42,58,65,116,0,32,96,149,96,26,96,14,6,111,102,32,116,-94,42,58,65,81,9,32,97,114,103,115,32,114,117,110,32,96,13,102,172,-7,97,114,103,117,109,101,110,116,64,124,65,55,128,210,10,116,104,105,115,-32,116,101,120,116,94,42,119,233,128,0,8,101,118,97,108,117,97,116,101,-32,64,19,1,101,115,77,106,5,94,42,100,101,102,110,160,31,11,97,100,-100,32,116,111,112,32,108,101,118,101,224,216,3,2,94,42,34,141,228,240,-154,0,134,24,228,254,8,0,95,64,146,0,65,64,164,100,245,102,204,247,-132,3,1,49,50,70,207,64,4,0,51,68,178,98,206,70,3,230,188,2,-96,218,133,198,0,58,130,46,128,113,227,232,7,101,162,227,232,13,1,50,-49,87,21,134,225,153,48,160,168,80,2,0,48,174,198,66,139,133,133,0,-80,228,28,0,64,57,67,140,0,75,228,87,13,229,253,10,1,49,53,72,-228,113,220,88,95,2,95,56,52,78,66,0,49,111,170,226,136,1,99,51,-222,42,0,52,253,74,0,217,7,2,80,32,79,64,109,240,2,1,230,169,-4,198,173,224,13,1,0,85,224,13,2,96,25,244,123,0,103,217,0,64,-91,68,102,215,135,223,1,55,55,132,48,135,241,248,68,0,128,18,64,172,-102,151,0,49,101,29,96,172,221,40,88,52,65,14,64,19,0,54,225,249,-0,225,240,4,98,188,198,225,64,26,192,252,224,41,8,250,57,0,161,147,-225,139,3,128,98,138,112,224,49,1,74,14,0,95,102,194,64,29,251,84,-0,226,8,74,161,32,226,8,63,124,76,130,8,246,250,1,160,228,219,2,-226,8,46,225,250,64,129,249,64,215,225,249,3,136,70,105,155,1,56,48,-71,249,123,156,151,192,113,231,96,43,250,222,0,67,194,64,19,132,22,0,-80,91,27,67,4,96,5,0,58,135,240,75,48,226,8,5,133,77,98,12,-130,49,1,56,52,185,241,224,36,2,0,40,224,37,13,224,32,1,16,41,-32,119,104,101,114,101,94,42,105,109,112,111,114,116,32,83,107,212,12,46,-73,79,46,80,114,105,110,116,79,114,82,117,132,219,25,97,117,108,116,32,-78,117,109,32,40,73,110,116,101,103,101,114,44,32,68,111,117,98,108,101,-41,224,30,1,1,73,115,147,19,1,32,40,128,7,224,26,2,0,83,69,-135,3,40,40,41,41,101,3,161,197,71,129,226,140,18,161,144,1,32,83,-98,1,89,157,120,129,64,12,66,84,178,141,231,18,0,66,163,65,251,226,-124,7,1,64,90,130,195,72,42,0,95,129,199,129,185,0,90,66,104,156,-53,96,84,64,97,0,50,115,8,1,50,49,94,254,227,13,54,0,56,136,-104,224,144,9,64,27,130,66,104,183,192,26,133,200,224,86,2,227,226,16,-70,51,97,55,224,157,4,227,77,2,2,56,53,52,64,4,64,236,3,83,-32,95,51,76,235,236,254,3,224,42,0,0,80,96,205,171,30,243,217,1,-224,61,1,224,32,0,243,170,9,128,70,0,51,93,26,134,200,0,53,96,-79,131,176,226,143,5,2,79,32,35,64,11,64,192,65,90,180,137,128,202,-0,54,163,7,108,57,99,191,0,83,125,196,148,109,1,55,50,128,94,78,-137,229,11,9,19,116,114,97,110,115,108,97,116,101,58,32,110,111,116,32,-102,111,117,110,100,98,234,221,36,161,78,0,55,105,234,254,236,0,97,197,-1,49,54,102,182,228,52,3,97,96,228,44,3,100,3,130,3,163,244,159,-77,79,234,128,243,0,52,255,79,0,192,0,181,219,97,14,223,164,128,67,-0,83,128,110,98,210,194,91,189,60,64,14,96,86,196,128,193,89,129,108,-100,32,196,182,131,21,64,76,64,17,252,99,4,135,135,130,209,224,32,12,-133,69,164,235,224,32,11,129,154,160,245,252,133,3,192,24,0,85,64,155,-99,56,128,165,253,54,18,5,100,121,110,115,121,109,163,237,253,52,0,69,-80,229,204,1,224,103,8,96,26,0,85,225,251,31,65,247,6,32,112,114,-105,109,111,112,161,247,233,30,1,201,25,67,70,1,54,55,64,16,0,53,-109,56,1,50,49,94,17,128,0,174,176,254,213,5,126,190,97,125,1,95,-52,141,127,0,56,160,73,128,255,96,250,64,21,207,143,161,202,225,79,11,-128,105,129,79,162,211,224,28,1,96,85,225,1,8,96,21,0,85,193,255,-224,116,5,1,49,51,141,152,224,32,5,225,36,24,69,219,5,115,115,105,-98,108,101,175,70,161,38,0,49,142,248,130,175,177,149,106,88,65,121,175,-98,225,183,0,138,113,100,171,155,108,96,53,135,135,3,95,52,49,48,128,-43,131,243,160,57,1,50,51,68,83,68,173,3,64,95,50,51,66,39,1,-52,52,160,179,64,59,239,108,1,3,79,32,35,54,164,32,67,121,160,18,-68,40,64,18,0,79,224,18,2,0,53,128,18,128,22,236,235,3,1,67,-39,64,217,112,125,192,81,168,0,65,152,192,18,160,62,68,8,224,62,5,-0,83,96,62,99,139,160,43,69,190,64,43,67,236,192,125,101,8,131,148,-192,37,160,18,67,77,192,18,160,100,67,172,192,18,160,201,0,89,224,119,-8,0,66,96,119,0,66,224,119,2,72,5,64,43,72,150,192,62,0,50,-128,18,0,82,224,62,8,1,75,50,64,62,100,31,224,24,6,0,51,96,-24,66,162,224,24,6,0,52,96,24,73,50,225,64,7,0,66,129,65,225,-129,2,66,84,64,120,0,43,224,18,2,160,221,0,45,224,18,2,160,158,-0,42,224,83,8,91,39,64,84,64,7,224,28,8,1,114,101,100,28,2,-114,101,109,224,26,8,0,117,192,56,96,8,224,30,9,160,58,64,7,224,-28,8,1,110,101,123,147,2,110,101,103,224,26,8,178,216,2,97,110,100,-224,26,8,0,111,113,181,1,111,114,224,24,8,0,120,128,25,0,120,224,-26,10,2,105,110,118,64,26,2,105,110,118,224,26,8,2,115,104,108,64,-26,2,115,104,108,224,26,10,96,80,1,115,104,224,80,9,0,97,160,27,-64,7,224,55,9,2,117,98,116,85,122,96,60,160,11,224,36,8,6,112,-111,112,99,111,117,110,96,36,192,11,224,36,8,2,99,108,122,64,31,2,-99,108,122,224,26,9,0,116,128,26,0,116,224,26,9,1,61,61,64,25,-68,162,224,24,6,0,47,96,24,0,47,192,24,67,102,162,194,0,60,224,-43,8,0,60,96,43,0,60,224,43,3,162,60,0,62,224,43,8,0,62,-96,43,0,62,224,112,9,1,117,60,64,24,0,117,224,93,9,0,117,128,-94,0,117,224,95,0,224,26,2,0,62,96,25,224,101,9,0,117,128,102,-0,117,224,103,10,1,111,114,98,46,1,111,114,226,46,9,0,99,129,168,-0,99,225,167,10,1,102,43,64,25,0,102,195,50,224,24,2,0,45,96,-24,195,56,224,24,2,107,18,0,102,227,62,9,1,102,47,96,24,0,47,-224,24,9,129,140,0,102,225,141,10,0,102,129,142,0,102,225,143,0,224,-26,2,97,55,0,102,225,55,9,0,102,129,55,0,102,225,55,10,0,102,-97,55,0,102,225,55,9,0,102,129,55,0,102,225,55,10,0,102,163,130,-64,7,224,28,9,81,145,96,29,113,154,224,30,8,1,114,101,148,171,96,-8,224,30,8,3,105,116,111,102,64,29,64,7,224,28,8,2,115,101,113,-64,27,2,115,101,113,224,26,11,1,117,97,131,146,96,9,224,32,8,224,-31,0,224,30,13,2,115,99,109,115,73,64,7,224,148,9,160,28,64,7,-224,28,8,0,117,160,28,64,7,224,28,8,1,114,110,96,205,1,114,110,-224,204,9,3,73,79,46,62,129,98,128,9,224,32,13,224,31,0,224,30,-11,4,114,101,116,117,114,114,3,224,12,0,224,38,11,0,112,77,232,160,-37,96,11,224,36,11,7,115,101,114,105,97,108,105,122,117,9,224,15,3,-224,44,11,1,100,101,224,46,7,224,17,2,224,93,12,1,116,100,146,172,-192,11,224,36,14,1,111,117,192,168,128,12,224,38,14,1,101,114,99,157,-224,12,0,224,38,11,7,103,101,116,65,114,103,82,101,97,128,224,15,3,-225,34,12,7,101,114,102,111,114,109,73,79,193,38,192,15,224,89,12,0,-99,192,82,0,99,225,240,9,2,97,105,115,97,19,96,8,224,30,8,4,-99,97,116,99,104,64,30,96,8,224,30,8,235,81,1,128,9,224,32,8,-4,110,101,119,67,65,143,123,1,76,101,97,80,224,17,5,224,48,8,4,-112,97,99,107,67,128,30,64,45,224,14,2,224,42,19,160,91,224,17,5,-224,48,8,2,116,111,73,130,87,96,8,224,30,10,1,80,116,97,166,96,-8,224,30,10,1,68,98,99,144,96,8,224,30,10,2,70,117,110,224,64,-0,128,11,224,36,8,5,65,46,97,108,108,111,97,142,160,10,224,34,10,-3,99,111,112,121,128,33,64,9,224,32,10,0,115,162,198,128,9,224,32,-10,196,178,128,9,224,32,10,2,119,114,105,152,192,160,10,224,34,10,133,-208,64,7,224,28,8,2,98,115,43,102,82,64,7,224,28,12,0,46,192,-29,0,46,224,30,10,128,88,64,7,224,28,10,134,43,64,7,224,28,10,-102,45,1,98,115,230,46,9,1,98,115,134,47,64,7,224,28,10,100,148,-1,98,115,228,146,9,1,98,115,132,208,64,7,224,28,10,165,40,96,8,-224,30,10,66,109,128,31,64,9,224,32,10,1,117,110,224,34,1,128,11,-224,36,10,6,114,101,112,108,105,99,97,129,142,224,14,2,224,42,10,4,-108,101,110,103,116,99,141,192,11,224,36,10,3,115,117,98,115,130,133,192,-11,224,36,10,4,105,110,100,101,120,128,35,96,10,224,34,8,192,9,64,-35,224,21,0,224,36,7,1,116,111,192,34,128,9,224,32,8,3,104,101,-97,100,192,34,192,11,224,69,9,2,97,105,108,224,71,0,160,11,224,143,-9,0,112,136,196,0,112,232,197,10,1,112,50,97,166,64,7,224,28,10,-1,110,101,135,220,64,8,224,30,10,0,102,133,230,96,8,224,90,11,1,-98,115,160,91,1,98,115,225,71,10,1,50,102,162,33,1,50,102,64,123,-74,54,224,0,113,78,193,149,196,249,158,0,183,2,146,254,146,232,239,144,-6,1,32,61,80,174,0,110,149,87,111,139,224,44,0,0,55,243,232,11,-150,17,224,63,1,2,95,105,116,102,132,0,58,128,93,248,74,1,215,35,-248,47,37,64,70,149,131,224,98,4,160,96,148,101,3,95,49,57,52,80,-44,1,57,57,79,204,1,48,53,81,34,1,95,50,124,40,64,36,0,54,-192,133,125,248,0,66,85,172,190,181,0,55,85,73,189,251,144,190,181,215,-64,54,147,29,6,95,56,49,48,32,75,32,83,66,147,119,145,146,126,63,-0,51,242,37,0,64,47,176,157,128,139,2,50,49,48,97,90,224,132,0,-144,133,211,82,78,192,151,218,64,80,113,97,81,59,0,57,206,186,64,4,-64,53,144,127,211,238,147,218,224,59,1,120,22,128,10,64,213,0,85,80,-189,129,97,0,67,116,160,3,67,39,32,79,152,169,161,86,85,192,192,94,-79,190,2,90,32,83,179,136,1,85,32,96,14,0,67,64,48,161,220,2,-95,50,49,81,36,222,141,128,0,192,109,126,187,4,95,49,49,53,55,160,-33,0,35,129,56,224,34,0,116,145,2,51,50,50,65,112,3,95,54,53,-57,192,72,4,66,32,95,52,52,65,26,2,54,50,51,115,67,1,49,52,-66,150,0,55,89,92,88,185,88,203,128,41,117,144,192,0,244,139,0,182,-120,160,101,145,199,0,55,90,199,244,250,0,162,95,96,191,114,138,226,252,-3,128,17,99,6,224,214,0,65,104,131,38,0,79,226,100,3,83,180,3,-105,116,105,118,101,135,224,25,3,1,99,97,137,32,224,19,4,2,108,97,-115,100,24,224,20,3,3,100,97,116,97,224,19,8,152,109,224,22,9,2,-114,105,118,168,226,224,23,4,0,111,224,17,7,1,101,108,224,125,9,4,-102,111,114,97,108,104,138,224,21,6,2,101,105,103,100,205,224,22,3,0,-105,106,79,224,17,4,121,88,224,21,8,224,57,9,2,110,102,105,102,36,-224,20,8,224,123,8,96,21,102,116,224,21,5,4,115,116,97,110,99,224,-191,8,1,108,101,224,125,8,154,21,224,21,7,5,110,101,119,116,121,112,-224,22,8,141,113,224,17,3,4,112,97,116,116,101,140,89,224,22,3,1,-116,104,138,23,224,19,4,224,80,10,122,113,64,20,229,192,18,66,54,132,-252,68,28,0,90,67,243,100,121,64,24,66,102,215,90,66,145,0,80,195,-154,151,188,0,39,85,48,192,17,114,207,99,48,0,83,87,205,245,173,6,-151,217,1,53,49,92,119,153,174,160,79,1,51,49,126,121,228,81,3,224,-55,1,99,71,68,218,64,35,0,95,123,237,117,83,192,131,96,114,248,51,-1,164,86,252,55,2,64,195,218,250,128,150,155,2,121,126,3,67,32,95,-52,84,186,1,95,52,64,35,227,242,4,192,34,64,240,185,140,160,117,249,-191,4,0,52,93,228,153,63,153,250,70,167,249,255,2,1,95,54,121,15,-96,0,193,49,69,192,0,50,250,0,0,81,148,225,59,3,224,91,0,165,-76,119,53,187,54,85,83,64,6,64,220,65,208,97,212,150,179,161,58,224,-93,5,96,85,2,95,56,53,91,237,0,55,134,29,250,155,4,129,30,134,-123,96,103,64,92,0,50,65,15,100,217,128,239,129,124,64,40,0,54,161,-71,164,178,192,102,3,95,52,56,51,94,85,229,55,5,225,102,1,64,84,-164,163,64,10,65,201,64,77,217,180,98,91,185,40,229,29,0,102,77,252,-150,0,254,48,1,192,24,224,25,11,153,103,96,0,224,71,0,224,29,3,-224,61,2,224,33,2,224,42,3,224,69,6,224,37,11,224,2,4,224,40,-1,224,113,17,224,23,0,224,44,2,186,55,224,2,21,224,48,4,225,31,-8,128,34,224,5,2,64,2,224,49,31,224,17,6,224,53,3,225,189,0,-224,1,9,224,94,5,225,27,23,224,2,3,224,56,5,224,57,4,225,9,-24,225,6,5,225,249,16,224,61,15,224,125,9,224,65,42,224,68,11,225,-40,2,224,55,12,224,2,7,224,64,9,224,134,6,101,49,224,86,3,224,-145,22,224,86,15,225,184,9,224,1,7,0,83,232,158,3,0,35,101,125,-224,0,7,224,195,13,224,2,17,225,103,12,224,138,40,219,251,224,0,4,-224,108,13,224,2,21,224,138,57,233,178,2,224,0,1,225,177,3,192,108,-161,182,224,96,6,224,177,19,224,89,8,224,143,13,224,1,1,224,153,5,-253,81,0,224,0,2,226,209,12,224,2,19,224,131,54,221,13,224,0,3,-224,116,25,192,2,227,82,15,224,131,37,231,87,0,224,65,30,224,114,11,-224,47,19,225,119,8,72,137,224,0,7,224,223,19,224,2,9,224,126,52,-231,179,0,224,63,15,224,115,28,224,106,13,128,1,224,112,6,237,46,3,-128,0,224,97,13,192,2,226,228,19,224,118,34,228,143,9,224,115,31,224,-118,52,227,240,9,227,75,14,195,240,224,92,8,224,41,7,224,80,5,224,-130,11,128,1,229,3,6,227,223,8,227,220,11,228,117,28,224,129,5,224,-124,13,225,7,8,224,126,7,230,156,1,96,44,225,19,7,225,13,16,227,-228,9,224,122,9,224,124,7,142,211,192,0,224,202,3,231,31,10,136,183,-224,14,15,224,154,1,224,110,3,192,142,224,19,3,225,126,6,227,228,1,-224,73,3,64,38,1,64,67,64,134,3,95,49,51,51,143,225,1,52,50,-64,12,64,179,112,143,140,77,224,18,0,228,46,4,224,127,1,64,65,235,-159,1,64,0,193,70,128,106,145,241,75,28,96,99,235,84,0,224,69,3,-235,90,12,234,83,8,224,253,7,1,67,32,64,80,1,56,52,160,233,2,-64,35,57,225,234,0,224,88,21,160,152,224,83,0,192,43,231,48,6,198,-19,192,46,64,14,224,40,12,160,210,224,37,0,224,34,10,241,6,0,241,-75,6,0,35,173,167,192,0,0,73,192,13,173,218,64,5,233,77,2,96,-126,65,82,224,220,5,97,116,64,16,1,64,80,225,59,1,226,228,8,130,-62,160,236,98,93,224,248,1,224,25,2,77,125,172,217,161,1,225,208,3,-224,74,10,226,203,11,65,10,192,139,224,18,2,226,44,5,2,95,51,54,-224,192,1,226,55,19,242,38,0,109,198,224,85,5,179,108,224,16,20,77,-143,224,16,4,143,167,1,50,50,240,88,2,31,92,34,109,104,115,47,83,-121,115,116,101,109,47,67,111,110,115,111,108,101,47,83,105,109,112,108,101,-82,101,97,100,108,13,105,110,101,46,104,115,92,34,44,49,55,57,58,53,-80,129,224,136,6,163,85,225,117,1,224,233,17,224,138,5,238,121,18,224,-41,9,226,206,10,225,227,0,228,89,0,64,5,225,144,8,227,45,8,192,-62,130,181,192,65,128,8,130,204,66,70,227,220,5,226,150,1,224,2,0,-239,252,11,224,120,3,224,67,4,64,45,64,35,116,250,0,52,84,156,235,-34,1,225,255,2,96,128,160,5,64,136,224,132,3,245,115,2,5,32,95,-56,48,32,95,86,15,64,123,195,253,163,10,96,31,148,147,245,60,3,224,-42,3,64,41,64,230,226,96,12,224,0,1,224,199,0,145,108,224,238,10,-161,98,97,64,224,171,2,97,177,128,36,99,86,224,163,3,196,44,209,5,-210,115,160,54,64,219,224,243,1,128,43,128,5,224,48,5,224,55,1,100,-58,164,63,224,6,3,225,133,10,241,164,2,192,87,129,251,193,111,227,123,-18,224,168,2,128,44,225,162,9,224,235,5,224,181,11,224,174,5,224,127,-0,166,226,160,175,162,143,224,147,1,128,107,134,175,1,95,52,118,214,160,-6,225,130,1,231,38,0,128,15,247,136,5,225,3,12,226,170,2,227,135,-1,3,50,49,54,49,151,149,224,234,1,228,193,10,98,137,96,252,194,135,-96,246,236,210,0,229,68,2,2,64,64,85,244,26,0,225,58,1,224,241,-2,161,75,227,81,5,1,85,32,237,30,1,227,31,8,226,63,3,231,93,-6,224,95,12,225,12,2,226,204,9,224,105,2,224,32,2,227,223,15,225,-51,31,97,195,243,198,9,211,226,225,55,15,224,220,8,224,22,2,225,196,-4,96,115,228,151,1,224,171,9,226,139,5,228,126,8,167,125,164,50,130,-116,64,179,225,148,2,101,14,192,35,134,213,129,246,100,95,148,94,244,88,-3,128,43,160,72,128,2,167,9,225,223,0,97,18,103,102,160,120,227,135,-3,160,83,225,207,1,224,93,7,245,64,0,131,22,192,5,64,166,99,38,-64,185,227,213,14,97,134,224,95,7,64,97,160,8,200,126,224,169,0,224,-180,7,130,123,136,33,224,228,6,166,113,160,118,224,117,1,224,169,7,211,-159,227,245,2,227,180,4,161,18,196,56,195,117,128,219,128,81,197,220,192,-200,229,221,0,215,80,96,199,155,79,128,33,224,135,6,225,43,1,192,80,-162,114,192,83,227,77,4,193,21,160,155,230,142,7,228,88,14,225,211,3,-229,82,3,165,72,166,142,230,87,19,130,128,224,13,3,65,120,129,31,227,-57,6,230,90,2,91,199,79,91,194,227,1,95,52,93,82,3,52,49,49,-32,64,199,232,240,1,4,94,40,32,94,40,200,199,157,99,161,61,251,167,-0,165,242,128,135,0,82,224,10,1,224,178,10,195,136,228,166,7,230,71,-0,228,157,3,192,20,128,200,228,63,5,175,165,224,26,5,233,22,4,97,-178,70,7,247,248,0,134,41,67,101,107,120,167,244,249,203,3,64,23,249,-216,1,101,10,96,4,161,164,162,194,64,210,102,93,65,67,0,53,67,216,-166,94,98,26,107,181,1,51,53,135,5,1,53,56,96,24,226,123,1,231,-192,3,98,48,64,207,130,34,120,29,158,132,0,85,133,134,225,97,7,64,-32,0,51,248,62,0,66,142,0,80,152,161,158,102,3,95,51,57,55,160,-255,64,20,157,18,234,10,2,64,147,226,131,4,68,70,1,52,50,64,13,-136,254,109,199,106,48,0,35,64,4,3,95,51,52,51,234,250,2,12,103,-101,116,82,97,119,32,102,97,105,108,101,100,130,17,225,94,3,1,95,52,-130,22,64,122,155,86,8,94,71,69,84,82,65,87,32,58,128,122,155,104,-2,50,32,65,153,8,0,53,154,158,1,95,54,219,120,3,95,55,56,57,-96,185,0,53,153,153,96,25,94,30,0,54,162,192,0,51,159,138,64,43,-127,168,1,49,49,96,90,153,80,226,108,0,224,208,1,3,95,50,49,51,-136,156,226,38,4,224,246,10,101,228,96,242,2,52,48,55,129,116,224,247,-1,1,83,97,93,216,6,32,99,97,99,104,101,32,64,247,2,95,49,49,-95,87,5,50,54,32,95,51,48,64,243,1,95,55,64,178,194,179,1,53,-51,67,114,96,16,64,158,129,209,64,131,64,143,90,95,1,50,49,66,52,-64,27,129,204,1,95,50,95,67,64,22,160,224,161,206,5,49,48,53,56,-32,85,228,254,2,98,74,229,15,4,161,133,128,1,64,215,123,141,64,0,-192,33,204,102,224,30,5,227,125,2,224,23,3,129,41,251,213,0,131,142,-128,202,224,10,2,70,8,0,53,78,154,1,48,57,97,188,0,52,166,206,-224,22,0,1,53,57,99,198,0,54,125,54,192,13,161,145,91,148,161,42,-128,46,1,50,49,202,49,192,41,135,202,65,8,162,194,225,8,8,225,14,-1,225,16,8,225,22,1,225,24,1,225,28,8,230,86,17,224,44,11,224,-40,7,192,37,225,39,1,225,111,11,199,72,0,66,225,93,2,225,116,1,-193,96,130,154,157,67,193,62,129,0,225,30,1,129,15,225,93,7,224,157,-0,225,152,2,225,164,10,193,94,225,157,15,102,107,224,100,0,225,134,2,-68,75,224,44,12,2,49,48,57,240,141,1,65,165,131,237,225,165,7,226,-120,1,224,255,39,66,85,1,49,48,254,243,0,224,21,4,198,191,224,22,-4,2,50,49,52,166,51,224,22,7,160,168,0,58,129,5,224,165,7,224,-139,48,225,21,5,64,29,64,108,229,216,0,224,39,14,160,13,65,142,224,-13,5,128,0,64,164,165,19,96,164,0,67,160,139,70,38,64,27,165,21,-227,12,9,226,148,4,227,226,5,225,135,52,128,161,0,55,131,176,224,21,-6,161,17,225,40,2,225,34,20,194,56,160,53,225,34,51,0,54,225,6,-4,224,71,7,128,96,64,39,134,22,128,39,0,80,225,239,33,226,245,27,-224,116,7,163,59,160,22,2,50,49,52,103,208,224,83,37,64,178,134,42,-128,178,224,99,4,0,50,85,116,160,36,166,51,192,36,114,49,128,30,64,-29,134,58,145,217,64,23,0,48,98,63,64,25,133,75,224,255,2,128,97,-96,27,131,193,161,16,210,130,3,67,32,95,55,65,109,1,95,56,201,223,-232,60,5,136,111,85,241,170,14,69,53,192,60,2,95,55,53,102,210,137,-24,239,17,10,64,27,64,252,2,95,52,56,134,62,0,58,135,29,199,43,-2,51,55,54,138,156,1,49,51,67,87,64,29,131,28,11,73,79,46,115,-101,114,105,97,108,105,122,101,71,255,64,30,72,108,18,97,100,100,95,108,-122,55,55,95,99,111,109,112,114,101,115,115,111,114,96,30,130,47,3,85,-32,75,52,64,2,0,90,224,1,4,0,75,249,116,3,64,44,162,52,75,-52,66,247,6,95,56,48,50,32,95,56,96,196,160,221,96,23,104,90,0,-49,85,71,3,66,32,95,55,86,80,64,16,64,217,0,75,137,17,96,37,-172,16,64,87,129,217,136,2,68,45,0,56,65,219,0,56,73,2,96,30,-201,212,104,126,0,64,232,127,6,13,42,42,42,32,69,120,99,101,112,116,-105,111,110,58,104,129,96,52,129,234,168,216,160,174,1,52,48,64,14,3,-54,32,95,56,164,141,129,207,224,204,3,133,19,193,233,224,230,4,131,104,-98,6,239,209,0,128,239,224,230,0,1,56,53,65,225,1,50,49,64,72,-1,54,32,236,39,2,2,46,104,115,244,237,0,132,122,225,45,1,128,109,-96,64,128,10,2,56,53,52,192,254,129,227,1,50,56,96,189,128,179,97,-85,225,69,0,74,88,64,23,68,242,64,60,203,150,162,173,224,163,4,64,-255,1,64,95,131,83,224,31,8,65,123,160,39,224,92,4,245,69,2,161,-89,195,42,3,95,56,48,56,98,132,0,56,77,27,2,50,49,50,73,189,-0,51,156,145,64,39,166,248,4,56,49,48,32,75,107,179,145,60,1,95,-56,98,178,96,35,64,50,138,157,225,20,1,174,18,64,80,0,54,64,201,-1,83,32,66,41,192,61,224,7,3,77,200,172,128,64,14,243,63,5,64,-19,4,67,32,95,57,51,68,115,173,93,121,124,194,71,172,62,225,163,1,-13,99,111,109,98,105,110,97,116,111,114,115,58,94,42,97,174,3,95,49,-49,48,172,126,237,41,2,193,9,65,150,4,10,65,32,80,32,94,249,132,-71,64,97,224,208,14,129,229,101,13,128,30,226,1,2,97,229,0,49,66,-220,1,49,57,67,13,241,138,5,193,192,0,89,165,160,226,152,5,0,50,-75,111,192,96,69,61,227,96,5,193,48,192,81,196,105,192,121,130,7,107,-240,0,55,102,75,235,241,4,226,218,0,225,53,19,2,112,105,108,76,2,-14,117,115,101,100,32,98,111,111,116,32,109,111,100,117,108,140,13,64,164,-194,66,225,166,1,224,249,18,246,98,2,226,163,11,64,153,129,139,160,64,-96,163,0,85,98,242,241,106,4,145,109,226,17,7,237,1,4,224,233,8,-224,225,13,17,116,111,116,97,108,32,105,109,112,111,114,116,32,116,105,109,-101,32,64,0,96,220,64,96,110,131,65,38,3,51,54,32,35,146,106,77,-0,0,50,99,150,228,2,2,0,109,228,1,1,129,149,239,125,4,251,168,-2,128,140,65,203,64,7,143,147,1,95,56,67,42,128,102,103,41,77,215,-97,15,135,93,209,93,66,130,0,54,131,119,206,31,1,56,48,97,50,68,-245,101,92,110,71,96,40,133,206,226,87,18,196,241,136,28,224,158,1,64,-45,1,83,32,239,215,2,226,83,5,70,159,71,120,225,180,1,137,115,226,-154,6,1,83,39,192,121,1,80,32,97,244,98,29,146,182,129,31,117,107,-243,33,1,96,24,97,215,129,238,1,95,49,79,12,2,95,55,55,98,255,-128,237,0,50,167,111,96,150,104,1,161,25,0,64,129,57,1,50,49,195,-195,65,1,208,79,0,75,70,235,79,121,96,21,134,111,0,85,231,3,2,-64,21,134,80,128,138,229,188,13,162,96,0,55,106,241,0,56,97,102,66,-84,4,52,56,32,95,57,97,167,65,39,1,55,57,72,219,0,55,66,29,-64,140,162,195,193,231,65,58,72,195,226,132,8,17,67,97,110,110,111,116,-32,102,105,110,100,32,112,97,99,107,97,103,227,95,7,163,5,225,141,7,-230,155,0,200,73,1,95,57,99,67,128,212,133,203,230,167,2,3,112,107,-103,34,132,201,165,190,226,70,0,102,29,1,95,57,65,7,0,58,130,27,-143,156,1,49,52,72,72,68,131,169,64,226,73,3,0,55,171,110,187,79,-226,221,2,128,11,2,95,56,48,98,192,128,13,246,40,0,161,101,228,167,-29,96,97,231,175,9,155,218,225,14,10,0,56,78,28,225,96,8,0,91,-64,10,129,82,227,213,3,0,52,68,148,224,16,0,195,81,65,113,4,79,-32,79,32,35,75,71,66,187,132,180,4,79,32,35,57,51,251,36,1,96,-107,225,204,11,132,75,69,51,229,34,7,226,94,20,4,32,95,56,56,56,-232,85,3,200,84,247,32,1,230,89,8,1,95,57,65,183,216,42,99,199,-96,82,227,174,4,224,98,0,242,38,10,225,102,5,166,213,229,84,27,213,-5,229,84,13,0,32,149,53,225,89,1,242,53,7,65,76,75,149,193,76,-96,71,224,12,0,230,0,4,64,129,72,11,230,226,2,205,214,224,231,182,-246,217,1,234,113,9,105,125,1,95,57,218,42,135,72,84,202,199,72,160,-79,2,50,49,49,204,101,225,254,12,227,89,26,227,49,13,226,197,1,115,-252,0,100,226,204,7,234,73,4,134,57,0,67,102,203,0,57,73,56,1,-64,95,133,188,69,13,3,51,50,52,32,135,132,64,0,68,77,233,70,0,-232,174,41,224,172,23,104,161,224,170,5,227,117,37,3,46,104,115,45,64,-68,131,123,97,161,229,185,19,233,17,3,101,194,3,111,117,110,100,172,168,-229,188,2,202,206,225,239,22,2,50,49,49,175,79,225,240,2,0,48,171,-81,129,59,0,54,165,137,0,83,171,153,1,49,49,72,1,203,153,65,65,-135,22,133,187,128,51,136,10,103,8,64,37,64,18,205,148,192,1,229,212,-2,1,57,49,69,24,240,120,0,128,31,224,184,3,225,73,0,230,125,0,-0,57,109,255,96,0,224,40,2,227,169,1,157,140,189,146,225,241,30,98,-229,234,160,7,225,125,6,6,112,97,114,115,105,110,103,161,111,192,0,168,-202,97,246,148,221,224,148,1,104,96,250,230,5,224,143,7,204,87,128,18,-1,95,57,111,170,235,41,24,64,138,1,101,100,236,90,2,112,161,211,132,-224,152,6,192,2,128,157,233,123,7,96,13,224,161,0,251,142,1,233,138,-8,162,217,225,61,2,228,251,1,217,164,1,49,48,80,193,2,95,56,54,-98,138,3,95,49,56,52,64,62,239,7,1,98,214,128,10,224,208,5,194,-212,7,97,109,101,32,100,111,101,115,98,222,12,97,103,114,101,101,32,119,-105,116,104,32,102,105,160,29,193,125,161,203,133,8,130,250,160,14,0,79,-158,243,154,4,231,14,1,225,20,14,221,38,224,25,10,193,211,226,173,17,-64,0,225,237,4,224,2,3,230,59,4,228,15,6,65,175,1,55,54,67,-132,1,49,48,151,167,97,60,81,201,227,164,1,71,255,172,209,224,0,2,-227,69,1,224,1,1,157,255,224,31,17,106,252,224,31,18,64,1,224,229,-21,224,56,18,233,46,8,1,49,48,89,87,224,0,5,130,60,226,140,9,-224,70,2,184,75,224,88,3,224,41,3,224,128,9,224,29,5,225,193,14,-225,202,1,225,3,22,226,203,0,229,41,9,129,155,0,51,95,103,0,75,-231,79,1,224,0,0,226,1,16,226,10,4,227,248,22,1,49,48,90,191,-227,249,25,9,116,121,112,101,32,99,104,101,99,107,227,255,1,232,17,2,-1,48,53,119,70,113,223,224,52,1,0,45,64,0,160,44,224,187,8,225,-54,20,225,94,2,226,57,49,224,97,20,64,2,235,210,0,229,237,4,242,-59,2,245,224,36,224,0,4,224,180,15,64,1,227,54,3,224,43,23,224,-228,24,224,230,19,225,69,1,224,88,9,225,1,3,187,104,224,80,10,248,-121,4,224,83,3,224,74,9,224,2,4,224,80,4,224,31,10,224,94,3,-224,79,8,192,85,226,4,2,224,30,9,128,118,224,103,3,224,102,16,224,-36,0,229,51,17,128,41,128,103,109,190,224,8,12,231,219,14,227,82,8,-0,57,208,232,227,82,20,6,100,101,115,117,103,97,114,231,79,3,131,70,-243,176,0,224,0,4,196,40,232,112,13,224,5,9,225,0,1,228,5,6,-64,0,102,198,225,1,4,234,144,17,64,0,225,117,1,138,156,224,19,6,-234,168,15,2,100,111,110,175,227,224,116,9,231,68,5,224,79,2,224,77,-6,0,44,224,64,0,128,30,236,135,6,178,164,192,29,231,223,7,0,115,-172,189,64,31,231,187,4,224,60,4,224,57,10,1,32,43,160,119,224,53,-16,224,50,16,224,161,12,237,35,6,224,0,6,128,100,227,19,0,96,203,-254,95,0,224,8,27,225,225,5,234,22,1,96,26,233,59,17,2,95,55,-54,133,254,64,179,96,17,82,113,233,62,1,3,95,56,52,53,224,225,2,-10,73,110,116,101,114,97,99,116,105,118,101,225,85,0,1,95,52,71,118,-226,50,8,96,120,140,127,128,131,67,3,225,104,11,3,108,111,97,100,205,-121,233,94,18,225,102,2,174,143,160,38,225,88,16,228,100,3,225,44,6,-235,51,0,128,14,225,61,6,1,64,67,196,15,138,152,228,25,0,199,152,-224,13,0,0,49,179,156,227,108,0,129,75,112,199,242,115,3,83,186,1,-50,53,64,97,160,165,250,67,8,224,137,1,240,23,6,192,194,64,27,224,-94,3,72,19,115,238,128,37,64,153,142,138,151,242,174,151,192,0,160,187,-192,20,224,46,4,64,0,65,245,0,55,65,245,192,17,224,16,7,224,32,-8,0,83,96,253,0,57,64,152,0,89,244,255,0,212,252,193,15,180,188,-64,192,79,53,1,49,49,138,116,64,0,214,0,96,10,0,51,169,185,2,-85,32,75,201,194,224,247,4,229,199,2,224,23,2,196,231,160,120,112,54,-161,109,1,49,51,144,243,121,121,110,15,160,0,224,171,11,249,142,1,170,-178,224,10,4,224,201,4,65,121,192,0,224,248,11,202,111,161,4,7,32,-67,32,61,61,32,64,35,228,101,1,143,33,245,214,5,225,203,4,193,2,-64,204,172,205,1,57,52,137,92,175,60,161,33,78,224,222,42,0,57,85,-160,0,53,67,229,0,53,66,102,1,49,57,97,103,1,95,50,97,160,64,-51,160,14,1,49,49,148,249,150,8,72,91,0,53,79,36,2,95,54,48,-64,97,128,53,155,134,224,186,0,128,58,1,53,49,64,91,0,49,73,0,-128,37,227,142,1,2,101,111,102,131,187,64,197,6,95,51,54,51,32,95,-53,64,118,247,207,2,64,118,224,111,4,2,49,57,57,114,132,99,76,119,-107,192,53,96,247,124,124,228,119,3,3,77,97,105,110,96,100,0,79,64,-128,0,55,124,254,224,31,3,0,109,192,31,164,6,64,115,219,187,96,184,-128,116,0,53,237,250,9,135,120,224,152,2,75,111,170,17,96,18,64,158,-225,89,9,129,113,1,49,57,92,230,5,49,57,53,53,32,35,92,152,96,-63,74,42,96,37,3,95,49,57,56,80,163,160,31,182,186,160,13,135,67,-224,250,5,3,67,39,32,79,128,47,0,56,196,207,131,183,224,194,15,3,-119,104,101,114,229,136,1,138,44,225,96,10,194,208,224,107,3,193,104,225,-163,0,64,21,82,175,81,115,64,239,1,64,67,224,9,30,224,49,21,224,-79,33,0,67,160,9,2,95,50,48,78,161,67,195,160,172,110,182,0,53,-114,1,78,156,3,95,49,54,54,67,3,225,126,1,233,85,4,2,97,116,-97,129,212,2,50,48,56,99,119,3,95,50,48,57,193,124,224,82,1,224,-92,10,1,49,55,193,175,224,86,9,5,110,101,119,116,121,112,162,46,2,-50,48,55,195,163,226,0,1,105,22,224,87,13,0,54,65,119,0,49,77,-28,128,5,96,65,96,7,4,49,57,54,53,32,64,169,66,47,0,54,100,-23,1,50,55,65,196,96,28,244,93,5,129,172,69,44,0,48,94,146,65,-13,193,191,224,227,14,224,217,3,162,62,224,217,9,224,214,28,1,50,48,-99,11,96,28,224,85,1,0,57,123,141,224,85,12,138,3,160,87,1,49,-48,199,88,104,101,226,239,2,224,13,2,176,158,224,176,0,69,180,67,136,-96,94,224,9,2,64,39,192,113,224,119,9,5,102,111,114,101,105,103,132,-12,224,147,18,103,227,194,112,224,38,6,4,99,99,97,108,108,128,37,224,-26,8,2,97,112,105,224,63,0,67,100,105,228,224,35,5,4,117,110,115,-97,102,195,149,224,37,1,1,50,48,133,206,99,155,64,219,224,191,0,78,-65,225,96,4,226,164,11,225,212,13,132,101,225,6,10,3,99,108,97,115,-153,89,65,213,102,255,193,222,228,205,12,225,239,1,190,158,1,53,50,230,-17,0,97,122,225,166,12,71,13,97,69,151,179,96,214,225,159,1,1,50,-48,108,199,224,32,8,224,123,4,96,124,229,30,2,228,162,1,163,42,96,-184,1,52,51,100,204,162,238,225,13,14,67,81,225,13,13,6,105,110,115,-116,97,110,99,226,230,0,129,106,224,87,1,216,127,226,143,19,104,248,226,-123,3,228,116,4,4,101,102,97,117,108,162,90,225,243,1,229,142,0,131,-238,205,135,230,87,0,3,49,57,54,52,225,138,5,128,131,75,127,1,51,-53,103,13,125,101,224,104,1,1,40,41,194,152,0,49,192,71,161,18,0,-57,65,56,2,54,48,49,192,74,160,230,225,94,5,225,60,15,0,50,110,-114,224,219,13,228,31,4,97,129,224,39,0,98,185,1,49,57,110,238,96,-23,192,80,0,85,97,86,98,72,224,83,12,5,112,97,116,116,101,114,163,-165,0,50,74,173,225,216,18,0,54,93,168,231,113,7,224,77,16,226,184,-2,161,118,226,97,6,128,182,228,211,3,227,103,23,0,56,141,203,225,248,-13,4,114,105,118,105,110,94,112,227,89,13,227,173,3,129,45,224,69,10,-1,118,105,230,178,0,105,110,101,206,130,148,227,16,2,141,90,224,65,13,-226,225,13,130,100,66,98,129,229,82,179,82,187,0,54,89,108,96,78,195,-100,98,140,129,96,224,5,3,226,8,14,224,24,6,1,114,111,169,71,226,-34,1,231,216,12,224,54,6,5,110,111,109,105,110,97,229,105,14,6,112,-104,97,110,116,111,109,165,70,224,113,8,11,101,112,114,101,115,101,110,116,-97,116,105,111,224,67,0,228,90,6,72,212,159,210,227,136,4,104,148,0,-73,99,141,108,70,67,113,225,184,8,233,121,11,199,12,233,107,7,2,50,-48,50,108,200,64,21,227,226,27,66,240,140,249,233,150,11,143,1,76,68,-0,32,140,110,96,34,0,49,98,14,140,138,0,79,160,89,0,50,91,38,-142,101,108,31,0,50,104,188,0,52,165,53,239,15,2,224,202,8,1,55,-50,225,75,2,1,60,45,161,61,224,213,15,175,147,235,16,3,100,223,224,-213,5,229,26,15,234,163,2,128,56,99,152,236,253,1,225,3,13,238,243,-5,111,78,73,11,0,50,67,206,207,82,96,0,65,228,157,105,80,39,0,-48,64,69,163,245,1,50,48,68,55,0,64,109,199,137,85,186,17,64,50,-0,54,188,44,0,83,65,105,83,222,2,67,32,60,187,142,224,18,6,65,-77,224,18,6,136,187,237,35,2,140,183,126,198,1,85,32,237,63,6,131,-101,160,27,2,95,54,56,73,238,193,255,128,235,238,39,6,224,44,17,224,-42,4,133,92,160,42,0,75,88,254,77,101,128,39,224,174,5,126,2,237,-210,4,224,58,3,161,221,146,13,160,108,224,116,2,109,212,224,90,0,65,-58,157,103,129,182,2,80,32,35,157,146,225,170,4,64,37,253,122,1,2,-80,32,35,97,235,0,80,110,122,70,103,67,145,229,42,19,139,228,0,48,-125,110,65,211,160,234,230,26,22,229,248,3,2,49,57,57,119,157,229,248,-2,229,247,8,64,140,175,7,224,140,9,0,50,87,230,233,118,16,132,204,-230,143,16,232,13,3,160,138,224,126,13,143,22,97,174,232,123,5,164,150,-232,140,5,224,139,9,112,78,75,134,97,41,225,82,10,229,250,0,159,95,-70,86,239,54,3,5,83,79,85,82,67,69,165,128,233,121,3,1,57,51,-166,63,130,74,101,38,165,197,233,37,6,234,12,5,64,121,170,4,224,177,-13,179,26,192,38,99,233,64,21,160,91,224,132,4,98,160,229,212,7,235,-121,7,225,125,9,0,97,170,247,1,49,57,165,173,82,169,96,47,233,223,-17,138,200,230,168,1,225,55,1,66,249,224,97,7,2,104,105,100,199,242,-224,178,13,169,141,240,12,4,0,50,120,21,226,146,4,128,42,224,107,21,-8,113,117,97,108,105,102,105,101,100,161,165,230,224,7,144,229,239,91,32,-225,146,10,225,224,1,92,170,250,19,0,114,233,217,100,96,65,229,67,2,-70,143,169,59,2,50,48,57,67,222,178,180,0,50,91,42,96,31,104,7,-225,8,0,180,54,234,124,13,96,51,224,50,0,225,79,3,166,203,224,45,-6,137,71,78,209,224,26,14,226,21,10,234,35,4,160,106,224,144,24,224,-71,10,233,4,3,128,129,224,176,10,225,165,6,97,249,5,10,65,32,90,-32,90,115,255,64,17,136,152,67,38,212,123,64,7,133,61,96,126,96,47,-96,21,192,50,0,54,198,230,2,49,56,56,80,35,64,171,66,220,1,53,-51,128,166,64,108,100,17,135,178,230,157,11,128,31,0,90,161,203,140,98,-96,0,64,95,133,216,2,95,53,49,71,233,229,12,5,77,184,64,34,197,-213,225,27,13,235,12,4,108,237,233,87,9,228,61,15,1,95,51,116,228,-1,55,56,96,146,235,55,47,229,177,16,64,16,235,83,1,225,234,2,1,-54,56,107,17,241,105,5,164,104,239,41,12,237,102,27,228,239,3,149,232,-241,247,1,160,168,65,77,135,10,227,177,23,235,190,2,193,9,225,3,3,-4,115,116,111,99,107,235,38,0,224,44,3,164,110,235,114,4,242,197,2,-224,47,7,105,152,229,75,7,1,110,121,240,73,1,226,235,6,1,50,48,-121,220,226,235,8,135,83,2,75,52,32,64,12,134,225,1,75,51,87,36,-64,15,132,174,1,75,50,118,228,0,58,128,164,64,16,64,34,96,15,235,-176,13,135,34,66,217,193,33,66,94,96,16,230,151,5,193,119,67,73,226,-51,1,242,198,0,238,28,5,115,67,240,245,3,96,226,1,50,48,84,5,-102,31,224,237,1,134,184,240,146,1,226,211,4,64,183,131,177,0,85,250,-78,3,236,56,0,235,14,17,245,175,7,0,48,72,90,167,61,224,124,2,-172,171,0,80,114,252,66,178,96,165,249,188,1,0,39,73,101,130,204,64,-129,4,95,49,52,50,48,130,123,2,49,54,55,123,33,82,123,236,17,1,-64,176,0,54,162,124,0,66,71,23,64,112,248,187,0,224,2,1,70,16,-128,169,224,1,1,134,46,7,95,49,53,52,55,32,95,56,254,81,1,224,-36,4,64,1,68,182,128,0,224,82,3,224,2,7,224,36,0,166,121,254,-218,22,192,152,219,191,234,119,0,128,195,128,29,232,126,0,147,102,235,250,-2,220,95,245,100,2,117,67,245,73,2,217,195,224,2,0,224,104,2,161,-1,128,16,96,74,254,205,1,128,149,128,39,64,33,3,95,49,55,49,71,-253,0,53,83,164,97,102,101,204,160,9,236,34,9,0,51,143,178,165,192,-0,83,64,79,157,89,94,68,68,65,224,32,0,238,14,0,64,66,137,78,-109,251,224,0,5,224,175,1,129,200,224,79,0,98,31,124,31,119,30,174,-64,252,44,3,225,255,1,226,5,3,225,182,9,251,152,0,67,121,86,227,-128,38,193,22,3,83,32,95,52,66,119,154,8,64,172,65,74,193,129,1,-52,52,92,128,97,150,128,14,98,213,253,50,4,224,153,7,96,56,0,52,-104,96,64,114,99,8,96,59,65,201,64,6,170,48,224,172,6,226,212,1,-224,72,1,224,204,4,224,25,1,206,236,96,21,254,55,0,224,224,31,219,-221,224,207,0,251,233,3,224,219,5,224,134,1,158,196,4,64,95,53,54,-57,129,33,130,38,66,82,65,215,0,53,181,127,96,9,128,18,0,54,129,-204,0,56,70,108,2,95,56,55,70,138,0,50,107,78,0,79,68,199,227,-232,0,96,149,226,26,5,161,60,160,140,64,154,100,40,128,36,93,157,234,-150,0,98,197,64,100,96,180,99,229,224,106,4,193,25,255,154,6,15,66,-97,100,32,71,65,68,84,32,114,101,115,117,108,116,32,230,108,2,160,47,-0,49,69,162,3,50,48,56,51,98,187,2,95,49,50,128,197,116,1,0,-95,64,189,64,28,224,134,2,161,156,130,232,128,0,68,189,168,171,0,49,-92,145,0,50,78,46,160,53,133,128,96,149,0,79,155,147,129,12,162,117,-97,107,128,131,128,114,101,80,224,194,4,1,58,58,96,176,225,153,0,128,-45,128,167,65,97,91,185,229,73,0,65,14,224,123,0,64,151,201,32,0,-89,103,195,132,18,96,245,0,57,73,118,163,220,161,10,0,52,68,132,239,-90,0,222,54,228,234,1,0,95,65,184,100,172,0,50,74,4,223,25,160,-61,4,54,32,95,51,48,128,229,0,52,224,145,1,224,69,2,224,63,8,-126,168,195,70,224,62,12,224,44,3,222,143,128,0,1,95,49,127,79,96,-239,128,233,175,199,246,226,6,230,250,6,110,242,242,85,5,119,196,96,130,-224,58,3,238,52,0,224,23,3,234,137,9,143,116,1,50,48,105,170,242,-199,6,1,45,62,200,165,192,73,224,99,5,133,62,224,27,1,242,116,7,-224,25,1,196,221,224,11,0,192,8,255,253,3,65,3,240,62,16,246,80,-12,224,9,11,234,39,0,225,183,2,132,121,196,112,96,168,0,52,164,244,-0,66,83,252,0,67,64,4,161,177,193,80,193,67,161,27,96,7,132,117,-160,15,224,135,30,160,117,224,86,11,170,191,70,206,96,252,137,218,0,83,-234,169,2,224,68,0,0,52,76,171,233,126,4,194,62,145,52,224,40,0,-2,55,51,57,115,47,67,47,64,232,0,80,130,163,161,3,96,250,133,61,-227,255,3,235,126,4,224,195,10,137,250,242,18,38,206,214,235,197,4,160,-186,198,128,64,141,224,227,2,97,146,141,47,96,65,140,185,235,14,6,65,-46,100,169,224,167,13,2,50,48,55,64,108,172,23,0,58,128,69,224,47,-29,0,52,128,47,171,48,226,131,9,1,50,48,69,182,172,177,162,14,64,-48,138,169,190,121,1,49,57,64,79,64,12,0,57,128,78,0,54,227,214,-9,189,125,192,18,1,64,80,64,78,112,171,172,205,227,75,8,97,171,64,-77,206,82,242,153,19,208,245,2,53,32,35,105,176,241,81,10,64,74,133,-89,237,146,12,226,83,4,237,113,10,101,162,83,235,64,12,208,167,108,37,-224,106,4,96,47,64,106,237,151,7,65,247,225,142,16,101,190,226,6,2,-190,234,227,102,21,130,224,114,117,227,211,8,192,67,161,155,224,15,1,226,-89,6,77,23,225,249,26,160,69,64,48,131,177,224,48,12,65,254,64,48,-162,132,162,180,1,53,57,227,63,0,229,103,1,4,85,73,100,101,110,116,-220,246,233,11,138,165,99,211,173,158,171,144,138,209,1,54,50,64,104,0,-52,84,94,234,208,10,136,211,88,188,1,50,32,192,30,130,73,64,159,245,-169,41,0,50,65,35,64,33,136,93,239,245,1,1,48,52,64,41,2,50,-48,52,238,31,5,160,107,163,82,131,33,153,7,64,6,0,49,97,27,64,-75,239,181,6,229,1,10,246,194,11,229,112,15,246,195,50,224,83,14,123,-232,229,27,15,240,101,22,156,28,64,118,233,21,3,4,105,110,102,105,120,-219,102,224,45,3,0,57,131,107,224,45,10,0,114,240,101,10,1,49,54,-73,62,224,46,12,128,45,225,219,4,241,129,12,226,147,12,3,100,105,103,-105,226,146,11,97,126,194,146,0,75,109,153,112,74,184,238,81,245,66,242,-241,255,13,65,28,160,32,224,33,8,168,50,160,91,194,190,224,36,0,160,-0,228,94,4,224,64,12,240,147,8,89,94,225,243,4,227,247,8,66,238,-249,90,1,197,111,64,24,165,109,155,5,226,62,0,130,196,100,254,0,54,-238,82,5,131,103,138,129,64,63,133,98,240,6,0,229,241,1,130,195,101,-9,236,227,1,65,76,236,249,1,239,46,0,233,48,1,168,210,102,12,237,-137,1,192,30,228,26,0,192,14,112,47,160,74,96,56,224,16,0,149,27,-224,67,2,182,157,233,53,4,253,42,0,230,136,3,165,101,233,49,3,107,-70,203,75,224,8,0,224,91,0,111,237,160,159,225,2,5,160,21,0,66,-133,234,226,168,6,224,29,2,232,246,3,245,96,0,224,169,2,0,39,131,-160,64,120,140,149,232,235,2,100,47,247,106,5,137,14,240,178,3,240,173,-3,160,115,224,243,3,206,160,198,93,167,14,238,126,9,65,242,166,234,225,-71,2,224,242,2,64,166,139,173,236,182,0,232,24,3,229,60,9,64,230,-241,52,2,160,50,255,15,1,224,18,0,255,21,10,121,128,64,132,192,221,-224,218,22,94,255,195,105,64,201,135,13,99,253,152,178,128,138,241,145,0,-180,37,142,82,81,15,224,17,0,129,133,229,45,1,229,46,5,231,220,4,-100,11,224,50,11,234,26,3,241,226,2,154,87,175,226,133,192,144,69,224,-83,9,225,13,5,247,38,7,232,66,40,128,218,192,8,65,32,252,108,0,-229,253,0,224,9,49,235,245,2,226,16,0,132,112,247,245,18,192,185,103,-152,128,49,245,159,2,96,24,193,13,225,247,5,240,196,2,233,138,13,0,-83,98,18,160,38,64,34,0,54,67,120,224,54,0,73,3,201,166,188,57,-1,50,48,195,154,69,27,135,83,231,63,3,128,95,253,226,5,69,146,102,-11,247,254,5,104,30,236,56,11,70,234,161,245,224,89,0,3,54,32,95,-57,79,58,0,95,154,60,224,98,10,215,84,230,20,3,224,98,16,88,66,-160,98,232,255,13,64,106,224,192,9,2,50,48,53,193,24,224,126,1,1,-50,48,95,155,160,109,224,195,19,3,49,50,56,48,198,54,224,92,4,114,-124,227,38,3,224,52,9,107,206,224,52,4,233,34,0,224,51,10,1,54,-53,152,240,225,134,13,225,35,16,161,218,224,194,5,231,70,8,205,152,224,-93,8,174,171,225,229,2,227,2,2,230,19,3,226,140,13,204,126,159,247,-227,233,1,1,49,57,125,40,227,33,30,0,53,97,140,248,193,9,193,186,-227,33,6,2,50,48,53,253,42,0,249,211,2,161,63,241,39,4,1,46,-46,233,106,11,193,44,226,94,4,241,237,0,65,81,121,166,0,65,104,105,-64,86,252,159,8,64,128,136,126,1,53,53,89,251,64,167,128,15,237,128,-4,84,99,64,29,238,26,17,160,243,1,55,50,114,157,0,53,164,212,227,-158,4,0,49,102,209,0,48,148,138,160,8,64,84,136,193,228,207,33,228,-197,0,2,50,48,51,161,71,0,52,131,25,1,50,48,189,202,1,50,48,-117,201,96,101,129,41,1,50,48,105,67,226,79,6,64,130,239,57,4,224,-217,10,226,34,1,74,47,64,72,131,67,225,177,0,106,78,64,47,253,86,-4,0,111,245,66,0,250,48,9,0,50,180,197,117,172,231,104,0,231,98,-13,82,72,96,186,118,181,167,98,231,96,4,67,114,130,1,64,209,206,96,-235,113,11,4,81,117,97,108,68,96,152,238,5,19,96,151,105,202,237,237,-3,254,241,3,64,7,97,135,254,145,1,224,249,8,238,10,0,168,59,201,-58,183,2,2,52,49,53,98,41,250,226,4,192,195,230,245,7,139,252,192,-240,227,193,15,181,249,254,115,11,1,105,102,128,147,195,136,131,185,64,41,-224,9,3,64,8,102,104,228,145,3,224,74,7,3,116,104,101,110,163,139,-192,77,224,76,49,2,101,108,115,183,106,224,154,1,227,51,4,110,242,224,-237,13,81,20,224,237,21,194,110,0,52,101,19,245,119,15,226,75,2,253,-42,13,65,145,133,119,108,188,162,37,64,22,64,157,101,142,224,160,13,163,-22,224,160,9,1,108,101,109,247,224,161,1,79,189,161,30,224,206,10,129,-111,193,33,64,119,207,236,224,119,13,226,6,16,1,99,97,161,110,231,76,-3,224,39,10,0,111,225,64,7,102,20,64,120,165,46,227,209,2,65,216,-185,248,229,247,2,98,238,254,239,1,234,201,0,140,178,226,204,2,234,149,-0,230,70,2,117,137,138,235,135,220,135,102,160,96,231,242,0,226,202,3,-224,61,1,1,50,48,71,104,224,255,23,224,217,5,255,27,10,67,152,225,-98,14,147,67,136,112,140,80,128,146,96,54,134,33,231,113,4,64,36,147,-144,236,135,3,116,223,129,247,228,209,10,98,221,128,81,166,30,231,128,12,-225,117,3,255,176,14,128,234,244,53,14,0,52,244,53,0,225,168,7,109,-190,97,127,96,173,104,142,236,47,4,0,39,75,185,91,12,96,75,100,195,-99,243,67,252,227,204,2,227,72,6,65,8,99,72,225,88,15,226,68,3,-1,49,50,97,62,233,50,6,177,232,231,247,1,224,120,10,64,105,165,68,-110,76,5,52,57,52,32,64,89,247,171,0,221,214,221,82,183,175,64,41,-0,50,77,159,239,122,3,161,133,169,120,225,193,2,0,51,157,200,231,58,-1,249,248,8,128,35,225,223,11,1,53,54,91,69,130,67,96,95,71,200,-224,95,7,154,153,224,95,20,133,85,96,95,224,39,18,201,196,238,157,12,-198,203,0,83,155,247,135,102,65,9,212,66,0,51,96,164,145,52,160,184,-108,169,193,26,64,227,232,191,14,0,83,237,163,40,232,231,12,234,165,3,-75,173,1,95,49,140,136,224,25,12,141,52,64,184,237,33,53,66,71,226,-103,5,192,13,236,93,10,141,30,237,23,15,1,50,48,112,193,192,19,236,-254,20,2,50,48,51,229,190,4,236,254,3,97,136,252,78,0,76,149,224,-146,9,224,82,13,237,81,15,86,210,224,82,2,64,97,224,82,7,227,244,-3,194,13,135,230,70,133,229,246,6,96,87,229,185,1,194,120,225,57,18,-67,218,1,50,56,64,181,161,35,163,244,228,214,12,8,95,112,114,105,109,-105,116,105,118,230,197,0,170,19,226,9,4,0,56,73,63,224,150,4,207,-167,121,248,228,147,8,67,104,234,50,16,5,115,116,114,105,110,103,234,50,-10,97,217,245,165,1,169,225,163,18,0,54,232,46,2,66,133,136,46,65,-59,247,163,3,65,193,68,186,1,56,52,211,55,2,95,56,52,138,22,204,-64,96,54,223,159,128,79,96,102,149,60,65,215,236,143,13,172,185,226,14,-11,138,127,135,184,235,198,2,255,84,2,193,174,235,84,0,64,168,224,129,-2,97,198,160,129,185,158,228,183,2,67,56,230,80,10,224,16,33,242,228,-0,226,92,7,171,139,224,108,7,104,84,107,36,181,170,64,167,224,85,0,-224,23,40,244,87,4,232,88,1,197,60,164,122,179,212,166,57,160,6,226,-250,4,224,184,6,231,19,1,233,4,0,224,91,1,66,155,166,215,96,53,-238,251,11,224,64,10,193,187,128,64,239,54,18,230,131,10,224,204,2,243,-139,9,233,16,7,239,235,10,1,50,50,233,102,4,231,174,35,233,178,9,-0,50,128,187,224,252,31,224,249,2,64,60,133,212,224,248,16,224,246,3,-192,243,224,235,3,233,251,8,68,137,195,190,66,18,131,189,64,102,227,4,-1,101,196,131,3,64,188,237,174,5,230,186,2,235,161,11,0,54,173,23,-133,116,219,169,133,41,241,42,2,244,51,18,0,55,74,111,130,160,0,54,-185,197,108,110,229,56,15,236,112,15,237,166,5,224,55,9,236,122,6,97,-45,224,200,4,176,17,99,3,229,86,6,65,249,241,44,15,225,171,4,1,-60,45,192,155,145,61,1,56,53,64,86,97,156,64,70,0,54,128,70,3,-50,48,50,52,81,161,65,46,241,161,3,124,136,1,50,48,67,116,64,29,-255,113,18,226,93,0,241,161,23,66,217,130,89,0,50,128,84,241,37,7,-140,145,233,156,23,140,181,132,102,248,79,3,129,183,248,76,10,153,189,0,-49,124,109,144,237,64,131,171,122,234,66,21,96,166,133,165,0,85,233,204,-1,2,67,32,60,166,169,0,83,224,18,5,96,225,230,206,4,96,17,181,-31,102,207,192,121,224,39,6,145,251,160,38,0,90,224,38,3,81,47,219,-162,64,141,166,25,251,203,0,0,56,81,81,224,75,4,132,72,117,93,64,-114,1,85,32,224,165,6,122,87,253,25,8,224,48,1,160,135,224,162,13,-224,37,10,225,40,0,171,204,226,153,12,132,213,233,200,8,133,229,0,57,-148,207,224,19,2,64,79,66,130,228,25,1,97,227,132,25,69,146,160,24,-96,26,129,171,64,12,70,118,89,6,64,36,131,39,96,32,66,128,164,110,-64,10,218,229,238,76,2,99,194,236,25,6,99,193,226,237,13,95,121,255,-119,1,226,69,8,3,83,32,95,51,73,198,2,95,49,52,161,198,64,121,-163,97,226,238,2,1,48,49,224,113,5,2,50,48,49,65,139,224,79,8,-236,70,6,66,203,0,57,225,128,0,140,66,64,96,163,164,245,100,0,133,-1,72,217,64,29,163,109,3,50,48,49,49,67,240,64,22,224,142,6,73,-199,227,125,23,137,235,227,55,23,64,95,250,99,29,236,141,117,161,231,231,-70,2,192,13,194,219,235,83,5,140,144,96,8,179,140,151,223,210,223,236,-170,17,98,42,192,19,140,170,229,217,7,65,90,95,115,97,51,132,181,102,-149,0,52,83,15,190,157,3,95,57,56,53,97,206,64,228,235,93,16,6,-108,105,116,101,114,97,108,139,94,227,253,11,224,18,5,200,172,228,65,5,-245,183,1,101,87,64,126,143,245,76,87,97,103,198,187,224,35,19,184,137,-71,188,229,41,4,224,90,19,1,49,50,129,249,228,128,11,224,149,22,2,-49,50,55,192,113,97,83,66,30,228,5,0,228,4,0,64,149,192,21,65,-15,160,21,0,54,226,177,8,248,19,2,75,248,247,158,3,76,82,225,113,-1,180,248,210,178,224,41,18,0,61,224,41,1,97,102,226,4,6,67,180,-231,222,28,192,71,231,222,0,123,32,199,222,64,91,224,70,28,192,184,232,-37,2,172,174,96,70,237,9,16,1,49,57,72,235,229,210,18,92,110,226,-240,0,197,210,65,68,225,98,5,238,242,9,232,99,12,233,61,3,4,102,-111,114,97,108,98,220,224,182,2,0,55,64,241,170,121,244,226,2,0,48,-100,174,232,159,1,248,23,1,228,190,2,163,191,225,138,8,167,106,224,144,-10,196,19,68,1,0,52,139,177,68,154,2,95,49,49,153,50,70,34,189,-57,64,101,234,174,12,160,55,224,40,0,230,89,2,2,49,57,57,146,9,-64,133,167,85,100,66,0,58,128,25,225,217,28,1,58,58,225,34,7,78,-154,129,217,128,103,99,2,249,4,5,235,19,4,0,83,97,159,174,60,67,-187,174,75,239,178,7,129,241,232,227,1,136,36,198,154,100,184,2,95,49,-52,233,141,0,0,66,70,95,230,89,6,235,153,5,224,134,2,71,205,128,-176,170,247,229,210,4,162,107,69,80,64,34,0,54,225,26,17,64,34,193,-141,0,57,66,226,96,48,240,57,4,2,49,57,55,165,230,155,25,2,49,-57,54,64,139,64,39,195,77,229,108,11,4,76,73,100,101,110,108,7,250,-253,19,225,72,1,0,67,65,72,79,25,97,83,1,95,49,80,109,3,66,-32,95,54,121,147,0,52,114,58,251,156,0,2,49,57,55,135,94,251,49,-2,164,245,144,112,129,95,251,20,0,128,173,131,180,96,41,0,57,126,177,-133,122,163,104,133,47,231,7,2,239,93,4,255,50,1,250,106,13,237,214,-7,151,6,102,182,66,28,72,163,227,216,1,163,214,72,135,0,53,171,9,-145,206,64,29,67,127,160,23,160,191,64,76,131,115,255,23,13,91,229,203,-239,160,148,159,159,64,171,233,202,0,224,37,12,147,227,232,177,3,224,40,-12,140,91,224,77,6,233,15,0,1,54,48,225,254,0,204,85,236,127,1,-65,246,0,66,99,54,65,95,96,14,98,5,96,121,5,66,32,85,32,64,-90,162,4,220,224,0,49,79,16,1,35,54,135,215,160,127,163,56,96,16,-0,56,64,35,1,57,56,161,118,224,187,5,97,43,207,79,1,95,56,64,-73,76,39,1,57,56,65,224,0,58,128,53,255,164,0,128,22,128,42,0,-53,68,79,98,17,4,95,53,48,50,32,99,161,1,95,53,103,166,64,39,-131,100,246,86,63,0,57,70,146,227,177,1,229,196,3,4,109,111,100,117,-108,250,53,0,107,255,64,9,229,40,11,0,57,65,21,201,244,227,195,0,-0,55,218,98,224,51,26,229,234,8,96,55,224,45,2,0,55,234,112,3,-224,26,12,224,194,10,5,112,97,116,116,101,114,175,202,234,147,0,224,144,-22,224,71,10,2,116,121,112,225,8,0,170,242,224,176,24,74,5,224,77,-13,5,100,101,102,97,117,108,240,151,0,128,149,230,218,5,1,49,57,78,-78,3,10,65,32,90,96,1,0,85,64,33,64,20,232,122,18,0,56,134,-171,129,122,73,105,96,48,232,100,18,0,56,132,56,0,56,76,124,128,49,-229,64,16,136,130,229,60,19,138,173,0,83,244,83,1,99,63,0,51,68,-145,232,201,8,192,35,195,101,96,37,232,216,5,229,46,0,142,65,196,148,-64,152,131,127,224,23,15,128,245,173,56,198,52,105,7,230,52,10,65,1,-230,52,17,0,81,230,53,28,192,202,230,40,40,224,194,22,236,105,3,4,-67,32,95,54,50,99,81,68,59,224,162,1,178,164,224,36,21,4,100,101,-114,105,118,183,201,224,42,22,4,99,108,97,115,115,128,39,209,142,225,163,-4,224,42,2,248,144,6,224,38,15,254,119,0,64,224,104,126,224,89,24,-3,100,97,116,97,224,83,20,227,62,3,224,87,2,224,217,20,234,144,2,-224,128,25,0,111,224,126,20,1,101,108,224,210,40,5,102,111,114,101,105,-103,161,172,224,44,23,1,105,102,224,126,20,4,105,109,112,111,114,224,252,-0,224,254,30,3,110,101,119,116,196,194,226,82,23,3,102,105,120,114,224,-169,30,64,43,224,172,21,224,77,1,225,45,33,6,105,110,115,116,97,110,-99,160,173,224,45,23,213,224,224,31,15,230,197,2,225,46,32,2,116,104,-101,225,172,30,0,111,225,172,21,230,127,3,225,0,33,225,170,0,224,32,-15,3,119,104,101,114,224,210,0,0,58,132,88,68,199,0,52,192,43,64,-210,0,55,204,26,224,5,3,160,24,160,137,172,6,160,6,224,45,25,224,-52,3,224,45,18,224,84,3,160,52,224,45,25,224,98,4,0,53,110,177,-156,24,0,53,83,71,128,11,64,234,137,38,3,115,99,109,112,77,106,64,-66,167,37,2,66,32,90,73,97,161,17,0,54,137,37,0,39,235,70,7,-233,23,21,240,16,0,1,49,57,87,79,64,119,249,91,12,64,24,106,213,-70,76,106,107,232,244,1,136,30,242,177,2,231,217,7,73,22,230,117,16,-5,83,121,109,79,112,101,99,50,242,23,8,158,128,230,136,2,110,150,231,-129,2,220,85,98,52,138,187,70,145,107,9,231,109,0,128,23,0,49,121,-117,236,180,1,134,134,1,67,32,140,179,0,79,75,144,239,136,1,224,31,-11,64,88,192,30,224,150,6,237,85,37,103,29,96,96,0,54,73,199,135,-53,98,250,1,49,53,226,251,0,64,29,105,100,237,102,33,97,106,238,21,-19,231,223,36,109,155,224,160,1,231,196,29,66,35,173,230,0,56,76,42,-98,91,86,122,1,53,51,138,21,64,105,108,120,76,170,224,129,7,175,163,-236,152,4,225,71,0,228,26,5,128,251,239,212,0,160,125,169,5,233,251,-11,0,54,137,251,162,178,194,152,248,184,4,242,62,0,73,45,64,29,176,-229,0,54,226,73,5,1,64,35,76,65,67,185,116,246,128,46,225,115,17,-226,223,200,233,255,11,226,210,45,226,75,18,97,87,132,249,0,79,242,63,-8,224,17,3,0,60,124,81,224,17,3,132,179,224,17,3,139,133,224,17,-3,148,168,0,79,242,130,5,128,14,235,146,0,128,14,244,193,0,225,26,-1,64,154,133,133,230,216,0,171,0,0,54,94,56,64,30,0,54,165,140,-239,169,2,70,5,64,47,252,29,4,65,18,252,27,8,239,86,4,64,77,-133,62,222,16,0,53,75,236,240,172,6,79,50,64,41,131,253,244,192,1,-64,84,248,108,5,229,168,0,70,118,64,50,195,177,0,90,65,192,96,6,-224,7,0,114,231,64,35,227,87,18,0,53,178,195,0,48,128,248,163,80,-240,158,0,1,49,57,65,93,99,202,250,48,1,102,123,189,1,206,63,66,-44,125,146,4,54,56,32,95,56,248,250,0,96,232,245,140,6,224,205,3,-242,38,6,249,48,13,157,106,192,104,0,85,226,7,2,1,91,93,102,223,-224,88,4,153,29,160,11,151,56,197,114,242,103,8,64,246,224,239,4,241,-142,3,250,142,5,77,37,68,81,2,67,32,79,195,103,0,58,129,29,225,-126,1,192,4,199,212,66,123,144,250,146,198,97,51,64,73,135,189,64,141,-160,189,131,251,239,161,7,64,66,216,86,1,83,39,82,10,65,68,244,209,-10,154,51,97,79,224,106,20,131,251,226,195,3,96,125,163,213,240,32,8,-64,127,0,54,160,127,230,17,5,81,234,230,18,4,1,95,53,117,13,67,-125,5,95,53,50,57,32,75,132,118,100,122,230,50,13,150,162,230,50,4,-229,165,3,96,0,64,128,168,124,224,179,0,64,19,231,37,19,0,85,231,-38,39,99,245,231,37,35,67,51,164,30,0,66,68,17,98,181,96,47,2,-52,49,53,248,18,5,100,66,0,50,93,176,226,55,6,131,146,231,104,75,-231,102,4,231,101,10,0,53,248,130,0,1,55,32,115,223,0,51,64,41,-0,80,99,166,0,57,64,79,225,53,6,138,224,123,2,0,85,147,219,160,-71,131,59,0,75,65,234,0,58,128,59,135,139,1,52,55,74,232,67,242,-191,80,148,32,100,69,96,170,97,21,64,97,84,37,203,108,224,25,4,132,-104,192,30,99,83,192,25,0,66,96,53,105,70,0,53,157,168,183,254,123,-36,224,19,0,160,15,64,136,180,127,128,99,128,102,192,113,160,13,64,180,-82,252,1,51,52,64,51,0,73,128,207,0,54,160,222,224,156,2,160,11,-163,92,1,95,52,88,240,96,60,159,97,1,95,52,88,80,64,15,98,68,-1,95,52,122,163,64,75,130,195,88,200,227,198,0,98,20,3,66,32,95,-55,132,119,104,210,128,201,64,25,231,50,2,1,94,42,139,195,224,27,10,-11,32,32,102,111,117,110,100,58,32,32,32,32,128,36,129,37,224,92,0,-98,212,66,227,96,16,133,156,99,168,231,77,4,2,69,79,70,64,61,167,-33,160,62,72,113,0,48,162,177,224,120,10,8,101,120,112,101,99,116,101,-100,58,128,120,96,200,69,255,0,55,68,147,201,227,226,43,0,65,16,194,-12,2,49,57,51,66,75,129,74,65,44,129,226,96,25,0,52,65,215,96,-75,104,219,102,29,0,57,189,166,96,4,65,110,197,26,65,117,216,36,158,-220,243,206,0,199,5,69,136,243,232,6,233,191,7,64,22,247,96,13,224,-65,0,162,127,110,10,233,179,6,198,95,224,69,12,196,251,224,69,5,138,-22,96,22,163,177,224,91,6,97,61,225,107,1,240,15,5,159,178,192,114,-133,247,70,154,148,49,130,69,3,64,83,32,83,67,169,67,172,64,100,0,-66,227,88,2,224,159,3,195,61,0,85,234,56,0,65,85,196,153,0,89,-155,175,224,176,0,224,13,1,104,87,164,253,1,85,32,99,53,224,174,1,-7,108,97,121,111,117,116,76,83,160,176,128,240,225,125,6,64,144,192,25,-224,2,0,128,47,64,37,128,1,225,169,4,128,170,224,132,0,96,199,160,-43,224,59,0,224,56,12,66,195,224,88,2,98,117,225,3,3,224,31,6,-103,185,135,66,192,99,129,63,64,7,64,247,226,192,0,69,58,215,70,167,-249,129,99,0,80,97,201,106,134,217,123,226,245,1,160,0,224,140,14,192,-229,224,139,2,65,37,64,91,225,57,0,66,49,96,239,196,194,225,9,1,-228,209,2,193,240,192,202,224,24,2,225,36,0,100,135,93,143,162,119,70,-24,224,127,1,192,91,96,11,241,16,1,3,32,95,52,54,80,162,224,42,-1,224,245,1,72,20,64,246,130,135,224,252,13,96,121,224,44,10,132,49,-64,73,228,32,0,228,28,0,64,0,64,21,97,30,227,43,1,128,28,198,-192,96,0,224,213,0,96,7,130,114,195,107,226,21,3,128,141,193,100,226,-128,1,104,16,129,103,64,5,102,132,163,57,161,123,97,47,64,125,1,54,-53,161,6,163,230,192,122,225,8,11,229,219,1,228,252,0,132,238,232,23,-5,224,230,3,129,165,132,201,161,235,193,140,161,201,225,164,0,96,185,225,-22,1,224,152,0,128,226,224,151,24,160,106,225,164,0,129,209,193,94,64,-81,170,91,224,158,3,224,88,43,128,172,192,88,234,207,1,64,94,226,59,-13,96,46,64,30,1,95,55,227,167,0,160,214,97,218,227,63,7,187,190,-225,60,0,99,65,228,197,2,99,43,224,29,0,131,15,192,13,239,165,5,-189,221,224,31,0,225,94,1,229,253,11,129,50,132,30,224,240,1,64,97,-226,165,1,2,48,54,32,162,41,64,0,227,188,3,98,96,229,35,1,192,-23,227,150,3,0,95,111,134,83,135,3,95,51,50,52,224,72,2,160,59,-224,122,7,227,57,2,0,67,131,110,4,32,95,54,51,53,230,86,3,133,-167,7,32,101,114,114,111,114,32,125,205,70,0,51,126,31,0,52,84,128,-68,220,228,226,1,128,0,224,232,13,227,169,5,160,146,96,38,64,23,162,-252,228,4,1,164,147,226,3,2,160,239,102,87,225,216,3,97,191,224,16,-3,96,89,128,22,225,184,0,131,33,224,13,9,225,71,1,64,159,0,56,-76,151,104,70,161,59,224,166,3,109,38,231,64,3,229,176,8,161,69,76,-45,65,70,128,40,225,76,1,5,115,121,110,116,97,120,129,76,225,74,25,-71,101,139,132,64,125,139,96,0,85,138,116,171,83,0,50,75,65,68,214,-170,53,0,65,136,241,67,123,3,10,65,32,73,96,29,138,214,148,175,203,-60,224,12,2,228,51,4,199,194,162,198,192,39,225,40,0,225,101,0,96,-8,74,219,2,49,57,51,129,208,224,70,3,234,73,0,96,22,165,51,226,-202,3,64,36,65,157,97,92,68,216,129,72,201,204,2,49,57,51,115,191,-109,106,183,71,141,113,237,120,0,229,14,2,199,122,226,37,6,163,235,229,-194,5,224,7,3,162,4,226,102,1,226,13,0,165,195,64,178,64,60,224,-88,4,226,90,2,224,57,6,129,32,160,45,98,45,230,54,0,224,38,13,-130,44,101,26,161,245,105,181,137,186,173,65,128,226,205,78,164,32,0,64,-66,7,65,235,64,7,206,64,68,6,79,4,238,13,11,131,235,238,13,2,-174,18,184,92,138,114,164,71,0,55,120,145,224,0,2,129,153,225,148,6,-66,140,64,12,66,228,78,253,1,95,49,172,229,193,160,3,95,56,52,53,-233,238,2,5,80,114,101,108,117,100,170,158,66,150,0,54,142,6,224,37,-5,8,77,104,115,46,66,117,105,108,116,158,0,64,39,141,18,0,75,98,-202,236,29,1,129,73,64,75,224,11,2,192,8,210,207,84,180,195,60,65,-1,131,59,65,5,160,69,160,44,64,20,195,103,128,1,132,57,226,177,7,-194,29,233,57,0,64,12,134,50,102,48,160,36,192,153,130,220,227,20,3,-99,56,160,37,2,95,49,51,80,31,97,94,4,48,53,32,95,56,164,82,-133,37,131,60,236,44,2,64,50,202,193,172,28,235,14,2,227,169,0,233,-199,1,128,76,224,25,10,97,29,228,251,3,224,174,3,64,201,160,17,128,-6,224,60,0,128,32,64,154,150,2,1,55,49,68,183,0,50,70,111,226,-54,2,1,95,54,70,124,64,92,2,95,52,49,150,51,110,76,1,49,57,-111,111,1,95,56,208,99,192,32,194,191,224,15,1,130,215,128,159,3,95,-49,54,57,151,60,64,130,1,95,55,111,171,128,146,0,95,67,6,129,108,-1,95,51,64,98,194,183,1,67,39,76,146,64,25,0,80,128,91,160,252,-227,224,1,171,32,141,101,132,42,64,18,64,44,131,128,160,162,161,12,163,-114,128,143,129,166,135,178,0,56,88,87,67,87,85,143,96,0,163,167,161,-5,3,66,32,95,56,66,88,64,197,202,122,77,114,96,202,152,168,81,198,-64,31,112,248,2,95,49,53,80,1,64,7,120,122,68,35,103,28,96,96,-64,6,184,19,128,138,1,50,56,233,46,3,65,102,132,85,106,143,177,233,-65,175,116,51,160,164,192,68,65,144,235,198,4,192,84,129,111,224,20,4,-0,89,225,74,0,197,105,194,56,161,25,194,81,64,0,96,24,234,129,2,-224,36,0,128,53,232,133,0,100,53,0,55,226,246,1,224,100,11,192,9,-96,10,246,176,3,192,153,199,196,226,228,0,192,107,226,233,1,1,95,55,-233,161,0,224,0,2,194,148,80,52,132,42,135,80,111,14,73,227,192,128,-224,117,7,224,7,3,224,205,2,64,18,134,86,131,244,227,119,2,224,2,-7,224,140,0,128,15,227,176,1,224,36,12,224,37,20,224,40,4,224,41,-34,235,147,0,0,39,131,240,228,194,2,97,87,199,231,195,44,132,182,225,-118,1,141,44,100,170,128,92,167,46,224,5,3,231,58,1,192,148,235,83,-4,99,189,161,227,164,86,236,206,0,66,181,2,52,52,48,227,209,1,131,-133,242,154,1,196,51,3,95,55,51,57,64,12,0,50,130,253,192,22,192,-228,224,88,3,224,85,9,192,50,164,143,66,144,236,190,0,229,12,1,224,-2,17,226,244,3,225,25,2,161,53,225,113,5,224,28,19,225,176,3,230,-72,0,161,24,229,250,4,224,20,0,224,8,2,2,95,49,49,180,199,196,-230,236,193,4,224,198,3,64,15,226,31,3,0,89,160,32,224,102,0,225,-251,7,171,101,160,42,192,19,197,173,96,130,160,173,226,106,7,192,92,160,-62,192,196,98,27,224,5,3,193,66,224,57,3,162,48,224,25,10,160,2,-224,25,17,226,168,1,225,113,3,192,164,64,19,226,246,1,225,39,5,133,-233,69,98,233,0,6,160,68,231,182,2,130,139,238,234,0,224,224,7,66,-111,165,164,64,39,134,176,64,53,202,116,228,56,0,64,126,156,84,71,241,-230,193,7,224,28,16,2,95,49,57,226,167,3,134,172,64,3,234,34,1,-130,30,225,241,3,232,163,10,128,210,160,247,224,128,7,224,215,0,224,236,-3,224,218,0,198,231,224,249,2,200,48,226,93,11,226,193,1,228,1,2,-226,92,255,226,92,45,226,90,1,96,0,226,2,14,225,67,3,64,13,226,-8,29,159,201,224,166,3,96,27,193,5,231,205,4,128,156,192,150,74,20,-64,148,244,241,3,64,0,96,150,64,107,227,3,14,75,166,224,121,9,224,-138,11,237,138,3,96,59,174,100,227,108,19,128,215,160,187,79,221,125,109,-124,198,226,241,4,230,205,2,160,3,234,69,5,225,79,2,224,90,1,232,-142,3,98,150,225,178,3,240,166,1,226,249,3,200,181,229,238,1,161,8,-98,124,227,145,17,64,84,243,98,3,128,0,225,105,4,128,179,64,40,0,-80,138,3,239,120,4,232,148,3,204,136,233,105,1,193,42,224,98,1,226,-85,6,233,160,1,224,89,8,163,82,64,251,64,66,65,62,135,86,224,80,-4,224,75,16,225,207,1,161,172,203,143,235,139,1,224,72,4,203,100,2,-52,48,57,76,52,0,49,124,108,238,67,1,2,110,111,116,90,117,4,111,-114,116,101,100,217,13,128,0,0,58,137,240,109,231,0,82,64,108,110,250,-66,71,0,56,65,107,138,138,0,95,75,213,2,95,56,55,107,210,97,116,-219,36,251,111,6,0,32,145,192,0,56,193,47,64,93,191,199,225,22,4,-225,116,3,132,96,229,37,0,228,143,4,226,218,5,164,66,224,26,0,224,-69,0,225,205,1,64,0,224,71,3,224,25,5,227,234,1,229,23,0,193,-179,224,46,0,226,148,0,224,11,1,84,222,168,83,229,158,28,162,188,228,-238,0,98,0,144,116,204,242,194,247,243,142,5,163,48,128,16,96,142,229,-200,2,165,188,192,156,227,62,4,228,129,2,96,56,172,77,1,49,55,227,-26,6,230,139,5,225,85,0,230,132,7,224,38,50,225,92,5,64,38,228,-53,21,225,39,14,99,42,192,108,244,202,0,164,39,224,21,14,165,147,161,-11,129,246,65,186,133,137,245,142,7,225,74,1,225,181,25,250,232,6,225,-182,5,224,146,2,237,125,1,224,13,11,245,122,14,161,42,230,71,2,98,-148,224,185,1,224,0,3,230,55,0,224,183,29,224,182,18,224,171,88,224,-170,37,225,97,19,224,170,93,96,142,226,209,4,224,84,0,227,232,1,224,-19,3,232,232,3,128,1,224,219,14,239,108,1,224,60,1,192,183,224,19,-5,233,201,2,224,23,0,228,7,14,224,137,4,132,13,224,75,5,231,24,-2,224,20,1,96,254,233,37,0,229,94,2,224,180,0,179,160,198,119,129,-16,232,156,1,187,39,1,50,56,228,249,0,159,153,4,95,49,51,57,48,-72,247,0,48,113,91,230,145,1,196,132,102,54,1,49,53,149,28,113,226,-224,0,4,210,15,3,95,49,49,56,101,36,128,118,193,146,128,8,160,5,-239,71,4,192,184,169,182,160,191,137,129,146,56,177,213,224,137,0,196,9,-225,236,0,102,30,230,47,1,192,173,192,123,224,238,3,192,68,210,59,0,-90,70,26,128,176,96,240,84,193,128,117,114,83,70,255,152,107,224,108,1,-198,142,128,11,160,118,160,17,96,196,100,200,153,49,243,143,2,2,95,55,-56,70,129,231,153,18,231,142,8,15,117,110,100,101,102,105,110,101,100,32,-109,111,100,117,108,101,231,158,7,111,233,97,192,0,79,225,141,0,192,244,-199,104,226,34,4,231,188,6,128,2,162,143,224,21,6,160,81,226,80,1,-96,69,163,123,1,95,57,96,203,160,109,112,178,231,132,0,201,252,104,221,-245,68,2,2,49,57,50,184,229,225,49,0,96,61,65,28,202,232,99,84,-96,208,236,88,7,224,148,1,171,96,99,4,160,135,244,183,1,137,90,1,-90,32,254,88,3,130,200,64,12,226,56,4,171,228,246,165,0,213,6,224,-78,4,96,202,248,201,0,224,133,37,1,64,75,224,57,0,192,63,66,78,-0,54,218,229,99,227,83,201,224,93,0,194,35,96,39,152,35,248,75,6,-1,46,46,184,66,65,75,247,240,8,65,154,160,20,237,23,5,132,59,1,-95,51,128,157,224,11,2,129,220,128,12,138,192,65,45,197,26,170,76,133,-148,64,20,192,65,128,0,224,48,16,224,40,7,131,119,73,128,64,164,152,-170,226,143,1,226,15,1,226,65,1,224,9,4,224,29,1,224,9,4,233,-248,1,234,2,2,228,65,3,107,181,75,116,65,153,2,51,53,55,167,80,-98,197,1,48,55,130,206,118,26,98,192,1,95,54,215,209,1,95,56,85,-57,96,0,66,153,1,51,54,66,35,0,57,122,39,1,49,48,245,221,1,-141,231,0,55,66,0,147,179,97,3,250,125,3,133,91,128,21,224,23,10,-140,85,246,36,13,167,8,228,194,1,169,19,132,88,226,221,2,161,93,233,-27,8,224,148,6,224,128,0,96,15,225,216,6,224,7,9,235,33,27,224,-166,2,96,16,231,176,1,239,82,3,161,181,229,228,1,238,66,1,133,139,-193,79,66,253,182,214,224,223,8,224,0,3,65,133,128,38,2,95,56,57,-101,202,1,56,57,64,252,160,119,225,173,15,195,177,225,176,36,225,24,5,-239,75,4,97,35,130,106,0,80,225,196,13,224,84,1,129,79,193,6,129,-1,192,39,227,168,7,64,195,2,52,53,50,100,156,147,20,226,3,30,160,-228,224,85,24,1,56,57,101,134,226,89,50,68,182,69,241,165,173,224,239,-9,228,53,6,193,250,193,75,226,54,1,224,13,5,199,62,96,153,160,43,-236,156,2,236,159,1,226,72,5,160,34,224,61,0,126,165,227,85,15,236,-116,0,226,241,7,160,132,224,10,2,225,175,1,133,99,225,49,6,70,226,-173,30,166,19,233,69,9,193,73,66,233,225,70,3,251,68,0,0,56,126,-95,160,119,163,92,224,157,13,241,137,17,192,54,193,57,227,124,1,225,52,-0,193,41,133,19,64,52,224,93,2,0,83,160,53,124,174,226,121,3,0,-85,96,43,235,225,4,0,95,96,198,0,85,101,244,192,216,227,194,1,64,-0,226,151,12,224,166,26,160,146,64,169,228,23,7,224,80,6,228,40,2,-224,0,2,64,180,97,98,229,213,5,89,63,105,38,133,2,227,167,16,225,-218,6,124,161,224,213,2,224,104,4,1,51,48,138,33,81,166,100,126,103,-253,201,236,128,5,64,64,100,167,163,64,224,6,5,224,14,0,100,173,102,-120,3,49,57,32,64,128,9,0,50,66,64,166,130,2,95,55,54,64,7,-71,54,159,204,3,85,32,75,52,96,191,64,18,155,223,64,183,1,54,32,-160,75,100,249,2,56,50,55,167,12,132,4,129,214,65,25,1,51,54,102,-247,193,233,103,25,1,57,49,92,54,0,52,169,157,64,188,137,146,228,51,-0,98,216,224,57,26,160,212,98,27,204,61,98,230,0,58,128,222,104,154,-128,72,64,17,146,87,122,178,98,130,77,220,96,117,96,11,138,149,128,13,-227,98,1,227,230,2,133,205,67,109,128,150,1,49,50,97,150,225,129,0,-96,31,0,50,240,74,0,163,162,96,87,65,63,64,160,228,220,1,160,85,-65,211,0,57,70,151,233,39,1,224,17,2,192,46,128,165,129,111,1,49,-51,190,176,77,27,97,8,160,249,64,99,94,206,0,49,102,115,98,174,189,-160,0,56,64,249,64,93,226,140,1,131,147,130,125,98,134,0,52,65,219,-68,37,95,59,172,23,2,79,32,35,70,232,99,10,76,180,2,32,95,50,-102,248,64,13,0,53,118,111,96,11,5,50,54,54,32,95,50,76,228,0,-95,150,106,66,132,3,51,50,52,32,240,77,0,96,103,67,206,224,43,2,-81,176,65,208,97,202,65,157,140,245,64,130,128,230,100,213,0,56,159,210,-0,55,64,119,64,36,0,54,158,96,65,114,137,134,161,172,230,129,0,161,-135,182,210,164,202,0,83,97,139,64,251,65,26,0,54,234,222,2,1,45,-62,148,220,129,173,96,31,0,56,71,174,1,49,57,97,145,196,5,160,68,-128,71,164,54,224,74,7,0,61,160,74,225,252,2,64,36,1,57,49,66,-188,160,72,228,120,3,160,76,160,162,192,79,3,79,32,35,49,69,201,192,-121,226,140,5,192,41,1,53,53,247,177,2,226,66,3,228,187,1,79,183,-108,205,66,40,96,8,64,6,137,34,160,93,225,24,5,0,55,97,138,225,-8,1,96,15,64,191,65,232,224,48,11,160,174,1,56,53,71,223,128,32,-225,70,20,224,199,1,224,240,6,1,56,54,88,76,225,34,3,225,61,11,-193,17,225,18,1,98,222,224,16,3,98,18,238,93,22,65,51,135,94,97,-62,227,114,7,229,253,3,135,252,163,118,142,25,0,67,66,90,164,125,64,-36,227,112,7,226,232,23,101,19,240,248,6,225,197,19,64,45,64,121,193,-187,225,213,0,199,15,65,221,99,187,64,131,142,246,96,86,99,200,66,76,-76,119,96,74,67,62,141,226,3,35,49,53,32,64,13,141,209,192,96,99,-209,160,6,64,29,141,218,129,164,4,95,49,54,54,53,128,22,141,76,224,-52,6,224,65,9,96,43,134,65,0,75,233,7,0,0,83,163,68,130,72,-224,5,4,77,9,150,234,193,162,0,95,110,185,69,209,79,152,3,49,51,-55,48,96,5,66,15,224,37,0,175,85,224,41,20,96,137,134,184,197,195,-111,248,2,95,57,56,65,39,0,52,114,88,154,39,100,116,1,35,52,128,-76,196,115,64,150,135,7,71,9,96,78,77,179,65,4,72,51,1,57,52,-239,50,7,10,80,114,105,109,105,116,105,118,101,115,46,164,94,98,201,69,-106,2,95,54,49,165,31,229,41,15,224,79,21,164,99,224,79,25,224,251,-2,66,0,97,133,0,75,128,206,0,54,161,10,164,131,2,95,56,50,70,-182,71,53,65,5,65,58,96,12,82,143,160,149,253,147,2,66,169,224,34,-0,66,108,0,55,72,248,229,103,2,224,78,17,0,55,115,173,229,76,1,-224,74,8,0,56,71,167,227,149,1,224,76,6,102,178,4,67,32,95,57,-51,65,227,160,96,0,49,82,216,131,37,1,56,54,108,32,242,208,6,10,-101,120,112,97,110,100,101,100,58,94,42,146,201,1,49,48,236,94,0,134,-55,64,84,66,128,218,195,224,190,2,1,49,56,115,37,224,171,12,73,130,-166,107,224,164,3,104,110,224,41,1,65,166,98,94,0,49,68,36,160,35,-135,77,224,15,4,97,152,131,156,100,144,225,133,3,1,53,52,66,152,116,-35,224,179,2,96,147,235,97,1,192,13,96,5,237,141,2,164,231,161,79,-144,154,0,60,247,231,1,192,21,80,207,224,35,9,138,140,227,103,1,248,-221,7,99,212,238,205,0,237,118,5,165,100,234,254,9,199,166,128,44,246,-241,6,196,40,192,69,64,7,238,201,9,130,31,237,133,0,224,26,7,240,-9,0,0,83,69,70,133,251,72,73,0,49,239,226,16,228,76,3,249,10,-7,224,146,3,237,178,2,237,58,2,237,189,0,166,86,224,83,1,250,114,-4,238,130,5,240,215,7,224,27,1,162,253,137,151,239,66,0,227,59,0,-192,102,64,36,1,95,55,73,148,180,179,181,20,192,0,226,98,2,248,172,-0,128,1,226,93,10,86,121,96,0,203,15,238,191,0,131,25,96,54,2,-49,57,48,100,86,247,22,0,132,14,135,132,167,128,129,212,137,153,247,245,-9,107,52,1,52,50,236,181,0,108,180,0,56,68,160,86,150,235,212,0,-248,110,1,109,72,142,78,245,98,3,225,229,1,138,225,0,54,135,125,64,-0,67,72,134,215,0,80,70,227,64,73,195,84,2,49,51,53,141,107,120,-212,0,56,94,247,1,49,57,74,95,1,95,51,104,227,226,75,1,101,133,-248,7,1,64,71,134,246,3,85,32,75,51,70,5,77,217,102,12,160,29,-134,232,3,95,56,49,48,109,253,193,105,225,216,1,225,125,1,224,1,7,-226,50,2,224,37,16,224,35,4,224,32,23,224,29,20,224,26,17,224,23,-14,180,199,224,0,0,64,237,135,76,102,253,105,26,107,170,0,52,65,79,-78,160,66,109,229,128,1,1,37,84,139,21,199,78,98,201,231,138,0,230,-44,16,1,56,55,217,210,141,164,164,163,248,91,5,229,146,3,233,204,2,-1,48,53,229,92,1,130,59,65,240,64,150,133,176,226,221,1,227,235,1,-193,255,102,73,72,23,234,6,2,164,230,64,1,64,28,216,32,64,165,64,-41,131,53,204,138,171,220,98,110,1,50,54,87,95,129,61,227,43,3,64,-30,128,144,160,145,160,221,160,57,229,132,4,234,53,0,229,168,19,128,189,-96,209,241,63,3,96,23,145,64,128,29,196,199,129,41,225,244,2,196,125,-96,24,243,16,2,207,19,96,46,129,29,0,49,106,187,1,51,52,111,136,-120,105,0,56,154,205,192,0,128,81,224,136,4,103,2,210,143,128,31,101,-24,128,88,228,112,5,198,178,64,18,148,182,80,1,137,164,1,49,54,192,-106,101,62,64,140,224,122,0,224,116,8,224,252,13,225,164,3,224,225,0,-160,77,224,200,4,142,96,74,153,2,52,51,54,136,89,65,188,100,59,146,-13,0,67,68,120,65,226,250,51,0,97,210,102,177,64,94,182,200,128,105,-161,110,230,253,14,225,229,0,225,26,0,128,10,166,110,224,180,3,230,243,-9,135,230,232,197,0,192,36,226,143,3,254,6,1,129,36,129,85,181,136,-205,49,128,246,99,89,77,45,161,109,231,50,5,227,101,0,227,122,1,99,-50,64,13,0,50,78,99,0,52,130,116,227,132,3,70,190,235,181,2,79,-225,227,246,0,64,27,227,123,1,131,36,227,213,2,227,206,7,224,61,9,-0,56,146,181,0,49,151,146,160,33,70,207,64,34,96,27,170,19,192,154,-96,0,225,26,1,64,112,124,9,226,35,0,206,71,128,17,227,140,10,128,-20,98,10,227,133,9,227,130,12,1,49,51,96,255,252,108,1,160,4,100,-87,225,90,1,227,53,11,160,58,226,193,2,201,25,64,43,146,219,227,24,-3,224,129,8,224,128,8,230,144,3,75,14,125,73,252,8,0,129,115,116,-206,233,187,82,178,120,64,17,206,200,192,0,70,34,141,94,133,236,110,224,-78,117,221,221,0,49,194,98,149,13,166,35,224,162,5,225,189,12,128,223,-229,71,27,192,178,230,31,7,230,9,4,191,196,224,49,14,128,108,161,241,-128,1,235,213,17,161,22,133,120,195,157,236,111,4,0,53,68,131,161,100,-129,64,236,64,4,160,62,2,95,49,55,81,118,158,24,141,152,224,161,0,-226,179,12,98,208,224,187,8,96,21,0,85,98,6,79,250,0,50,239,73,-0,224,231,10,225,24,2,128,89,197,200,224,191,3,106,10,69,194,232,23,-1,13,116,121,112,101,32,115,105,103,110,97,116,117,114,101,136,35,128,218,-249,48,4,231,240,21,130,20,0,55,79,161,213,66,225,73,1,237,202,6,-123,185,224,153,6,225,135,7,225,91,11,132,34,1,49,48,112,212,225,88,-9,96,0,224,49,4,66,192,244,203,0,224,106,8,0,52,95,50,64,85,-79,195,235,161,5,228,20,1,64,133,224,238,5,64,56,97,133,225,128,0,-103,140,0,52,158,61,1,55,49,88,188,97,182,239,1,8,26,67,97,110,-110,111,116,32,115,97,116,105,115,102,121,32,99,111,110,115,116,114,97,105,-110,116,58,32,97,117,245,45,0,149,225,2,49,50,52,64,71,224,70,8,-2,94,42,32,64,0,14,102,117,108,108,121,32,113,117,97,108,105,102,105,-101,100,160,67,79,125,166,194,64,0,65,1,0,54,97,1,195,155,82,182,-156,6,249,106,5,0,73,138,18,206,249,0,95,64,70,170,79,64,126,64,-87,0,50,64,153,0,52,70,91,234,68,3,210,186,225,65,3,64,23,139,-238,105,92,229,227,2,227,198,5,230,32,6,233,233,2,154,127,245,159,1,-96,9,225,133,4,66,197,128,188,226,202,21,194,75,162,206,160,13,238,61,-0,192,91,65,124,227,231,4,0,56,120,94,224,61,1,192,63,167,151,192,-211,224,32,1,160,14,224,31,3,97,117,99,1,226,125,2,104,196,160,0,-224,92,1,96,129,66,105,240,195,5,130,90,66,230,64,9,1,55,55,89,-225,97,176,251,160,11,101,8,193,208,0,85,101,28,83,43,192,108,224,115,-10,231,161,7,160,32,225,176,1,191,217,224,5,3,215,210,128,156,1,56,-57,64,11,103,187,73,141,135,3,131,162,128,0,225,46,15,150,6,64,9,-131,64,160,51,225,52,0,96,31,228,66,1,1,49,50,88,113,236,11,4,-100,13,0,53,81,1,116,17,96,21,174,133,64,79,117,123,1,49,52,249,-230,1,151,47,128,73,0,79,117,36,0,48,160,76,64,63,0,65,96,38,-161,45,252,120,4,110,250,128,21,2,95,49,54,131,225,252,29,5,66,239,-142,150,68,75,64,113,224,64,0,64,26,142,147,97,47,228,240,18,242,60,-2,140,194,133,197,226,16,4,97,30,165,133,107,17,3,49,55,55,50,253,-46,2,77,174,96,239,214,210,129,164,229,19,2,138,97,253,187,6,64,214,-64,226,64,172,188,88,103,86,68,133,0,49,97,224,128,213,0,58,139,152,-111,126,226,126,4,168,7,226,127,5,227,193,2,224,251,7,227,3,0,225,-224,0,128,208,230,86,6,0,89,133,93,102,95,64,4,107,87,97,246,0,-54,118,49,2,49,52,56,225,61,0,230,242,17,119,210,225,182,1,133,164,-1,49,50,194,24,128,157,237,5,4,132,109,1,49,52,224,206,1,226,72,-2,224,52,7,192,223,137,205,226,238,7,128,82,224,154,1,195,67,245,79,-7,0,85,227,137,4,166,133,99,96,0,56,117,101,165,118,103,98,128,147,-234,144,0,224,131,2,225,99,3,0,56,104,128,161,28,224,132,5,235,217,-6,97,33,236,56,0,64,58,121,88,230,233,0,225,24,1,109,168,228,218,-3,228,46,1,128,13,160,38,225,199,6,133,94,1,49,56,65,173,97,88,-81,254,227,99,3,160,234,96,118,106,102,0,51,82,18,0,52,217,223,160,-115,103,108,96,106,171,118,226,53,13,160,76,211,25,64,12,1,53,50,64,-79,129,47,128,203,132,196,165,30,229,37,1,232,229,2,225,162,5,96,81,-189,188,227,82,6,128,135,155,77,2,95,49,54,94,238,224,219,1,160,88,-0,85,132,95,2,95,49,56,131,239,130,148,84,82,160,25,96,27,0,56,-160,239,132,197,0,56,229,147,2,99,155,76,23,131,155,79,237,0,56,112,-183,64,22,200,227,237,145,13,225,35,9,161,32,193,240,205,142,101,133,237,-226,2,228,107,0,98,54,164,144,235,173,11,237,140,26,225,191,0,232,0,-5,198,164,86,186,228,31,9,96,167,230,159,4,225,106,1,0,80,239,15,-11,224,99,6,192,151,237,235,1,224,247,12,162,16,224,251,10,130,106,237,-146,0,224,163,49,0,75,224,35,4,133,76,64,0,142,46,230,79,5,224,-198,8,225,41,0,225,35,53,229,158,5,226,23,0,232,111,5,74,30,0,-54,90,192,160,38,66,69,224,32,0,230,161,2,236,198,20,226,7,51,131,-24,0,48,66,254,229,173,2,139,82,235,74,8,31,105,110,102,101,114,32,-114,101,99,117,114,115,105,118,101,32,112,97,116,116,101,114,110,32,115,121,-110,111,110,121,109,32,74,15,0,115,202,6,225,91,12,173,96,128,215,225,-11,4,237,115,5,247,195,9,226,114,13,237,132,2,87,38,0,66,96,6,-224,92,9,205,44,229,201,5,224,100,12,225,184,9,229,230,11,141,25,241,-159,4,236,189,21,198,20,224,30,5,229,166,20,96,147,232,148,10,234,151,-4,229,29,8,229,19,10,64,0,162,125,197,243,209,251,96,62,101,23,160,-10,98,228,195,161,5,52,51,56,32,95,53,128,222,230,69,9,230,89,12,-160,182,128,0,69,44,0,54,172,151,136,77,224,170,6,242,16,1,235,182,-8,174,52,95,184,196,236,136,38,225,10,2,252,115,5,0,95,77,4,64,-50,102,54,229,231,0,96,204,224,93,5,225,150,9,239,50,5,0,52,134,-52,225,91,12,1,52,49,230,218,0,235,236,3,230,77,1,64,244,141,214,-236,235,2,89,238,70,100,103,108,0,50,98,131,107,14,64,57,2,53,54,-57,96,133,64,35,170,70,225,130,0,0,50,64,166,1,95,56,225,130,0,-1,52,48,181,117,64,11,64,41,246,9,0,64,118,174,27,225,69,2,0,-54,82,63,0,75,225,88,9,0,54,149,212,166,243,239,156,0,226,188,7,-244,203,4,129,50,230,244,6,0,53,64,69,165,95,225,45,5,2,95,55,-49,114,179,232,84,1,64,162,0,51,175,29,129,147,130,254,130,213,65,6,-96,34,139,217,0,67,129,219,64,195,128,22,186,105,0,49,90,203,0,67,-218,197,1,52,49,71,154,154,197,79,62,65,183,64,44,139,85,236,0,18,-166,112,229,97,1,222,64,199,109,229,80,8,96,54,224,25,12,98,111,229,-132,13,230,33,1,229,132,4,96,22,91,45,129,230,128,117,128,146,130,147,-96,9,2,95,49,56,67,200,128,0,224,68,8,162,229,0,75,238,167,5,-224,43,13,96,187,2,85,32,83,192,157,96,169,64,1,253,213,1,161,15,-68,252,211,112,226,13,7,137,226,64,21,255,233,5,169,168,162,63,224,27,-3,101,119,224,156,6,64,0,128,134,224,240,1,193,116,225,56,1,128,45,-192,153,225,61,5,224,27,1,254,158,21,195,127,224,98,0,249,238,1,224,-13,3,228,32,0,222,2,230,62,8,254,30,2,105,145,160,64,238,20,12,-224,122,3,196,45,179,160,192,118,224,22,3,232,155,1,224,83,0,2,95,-49,51,74,98,67,104,67,157,218,4,66,186,65,89,253,251,0,234,175,3,-193,36,128,94,0,53,172,79,238,116,3,128,51,1,49,56,133,29,224,112,-1,2,95,49,50,99,53,224,66,6,0,54,164,24,224,66,4,128,129,227,-240,0,254,130,8,0,64,253,141,7,225,159,17,130,248,226,7,0,225,110,-6,129,89,161,137,226,80,3,225,69,2,146,30,245,38,5,225,162,2,224,-40,1,225,168,16,226,37,4,164,141,225,176,4,225,148,1,182,100,224,29,-16,199,88,161,70,129,73,193,97,2,51,54,53,145,35,97,215,225,183,1,-225,180,40,226,2,20,226,94,2,161,209,224,139,4,216,190,192,33,138,204,-251,176,18,184,203,176,44,161,139,155,56,193,190,224,80,0,80,229,240,227,-6,130,202,0,56,70,175,64,140,194,59,103,167,97,63,67,207,136,111,99,-209,115,82,224,0,0,226,120,38,222,81,226,43,7,192,75,192,19,175,231,-248,203,0,128,249,234,7,8,232,87,5,236,209,2,237,219,15,245,28,11,-2,63,63,63,139,10,65,191,64,198,160,70,0,67,226,136,11,160,0,0,-58,159,254,242,189,24,128,135,174,38,0,67,120,128,162,227,64,144,101,69,-224,99,6,226,26,6,226,13,1,152,161,128,230,97,153,0,66,161,89,96,-215,93,248,96,33,71,156,1,75,51,201,83,64,44,168,213,168,177,243,11,-2,139,204,107,198,102,79,226,21,3,64,224,175,85,82,207,96,179,77,3,-0,55,71,234,160,85,178,13,0,54,91,224,116,105,241,87,6,163,71,98,-142,96,160,0,85,64,34,96,153,128,158,192,38,99,81,64,138,100,202,244,-169,16,64,63,99,187,160,230,64,163,143,226,66,162,129,90,70,69,225,116,-1,226,251,0,163,49,166,152,164,1,96,124,238,34,5,96,35,212,171,65,-40,131,18,130,204,160,14,192,58,68,215,165,23,232,24,1,103,180,113,254,-197,26,129,252,192,30,242,38,4,128,38,160,26,192,181,246,120,8,228,125,-3,130,69,192,206,192,75,128,85,181,41,203,80,241,194,7,203,103,97,142,-0,50,66,159,64,9,0,54,162,90,0,51,65,116,106,176,98,95,2,49,-52,52,98,80,236,47,0,225,134,1,192,80,100,127,192,84,195,215,224,241,-2,224,228,42,224,222,0,224,13,1,163,44,224,18,1,96,92,128,7,224,-225,5,224,6,0,160,230,224,158,3,101,247,64,242,224,175,4,186,90,4,-55,50,53,32,64,65,243,225,237,0,0,49,98,31,96,180,102,109,230,82,-10,224,28,1,66,140,101,107,160,18,224,41,5,224,29,0,98,173,0,54,-171,26,66,217,6,95,49,50,56,49,32,95,108,93,101,83,64,32,250,102,-0,228,81,9,154,190,129,6,228,216,9,1,53,56,64,36,160,18,1,67,-39,230,47,6,161,153,226,166,5,233,111,2,193,182,233,186,1,213,65,128,-31,250,35,5,193,135,160,19,230,120,1,198,117,228,0,0,234,124,3,236,-162,4,94,44,233,136,5,64,196,237,193,2,160,189,192,222,128,42,132,187,-230,50,3,225,201,0,225,50,11,0,54,141,112,192,65,112,14,167,228,110,-129,155,238,96,0,65,123,141,148,100,182,143,44,172,186,0,56,69,33,172,-186,96,40,0,51,129,197,70,44,1,75,32,76,28,224,1,13,138,180,192,-0,64,85,131,64,64,66,141,58,132,165,138,73,0,53,138,65,0,56,104,-45,133,8,253,52,3,104,75,64,5,1,50,56,252,242,2,5,101,120,112,-111,114,116,102,189,64,85,141,121,82,45,251,5,11,2,51,52,51,224,58,-2,6,116,121,81,73,100,101,110,128,60,1,64,85,117,51,160,70,237,147,-11,0,50,111,72,64,214,3,83,32,95,51,64,105,64,19,181,30,67,207,-71,14,197,208,74,35,110,167,2,95,52,48,133,57,0,49,160,16,128,97,-69,188,122,19,72,80,157,22,70,30,157,141,226,222,12,155,234,224,29,15,-245,177,24,3,95,49,56,48,176,70,224,45,9,226,154,6,0,56,128,66,-132,27,240,109,3,240,193,3,1,49,56,80,27,97,186,232,126,3,224,92,-25,0,54,160,182,224,41,26,132,54,97,28,134,229,126,51,232,16,3,195,-172,224,83,0,224,241,1,241,254,4,104,206,231,176,0,224,176,15,2,49,-53,51,129,172,227,156,11,186,6,229,150,1,197,218,229,220,5,160,2,192,-24,224,43,2,192,5,227,168,11,1,53,52,236,153,1,192,112,98,106,231,-200,6,225,250,4,192,94,135,133,161,17,0,64,246,145,0,113,192,245,46,-1,64,235,88,217,227,0,1,85,39,7,97,32,99,108,97,115,115,32,99,-4,1,95,56,171,51,228,136,5,224,147,6,225,14,2,224,25,10,227,243,-0,224,48,7,228,12,1,236,200,5,224,2,4,224,237,3,251,8,6,64,-219,224,5,0,212,18,73,37,212,19,0,85,98,26,241,13,14,133,144,240,-101,4,213,91,235,51,1,64,79,148,225,64,125,64,97,69,3,0,54,74,-21,168,24,192,192,224,76,4,177,209,224,76,8,224,68,21,225,101,4,100,-123,246,226,15,2,49,50,52,68,90,225,184,1,26,115,117,112,101,114,102,-108,111,117,115,32,105,110,115,116,97,110,99,101,32,98,105,110,100,105,110,-103,246,210,3,64,0,64,133,129,13,161,89,129,151,219,144,225,112,0,225,-175,0,187,184,128,1,109,23,240,93,5,225,208,1,83,81,163,33,227,22,-6,159,192,224,69,1,224,95,0,195,25,224,9,0,0,67,235,153,4,0,-64,251,20,0,224,105,5,224,115,3,226,152,8,232,166,6,224,2,6,160,-138,128,79,192,160,238,240,0,225,6,30,128,68,128,11,139,203,246,181,7,-232,249,0,140,29,239,99,1,128,28,225,29,4,225,32,1,224,82,0,160,-60,0,48,134,78,225,100,5,2,52,57,53,244,182,0,96,26,227,60,4,-65,133,77,178,101,239,140,45,0,49,236,219,0,160,216,165,45,220,217,100,-8,70,109,66,159,224,57,2,71,238,0,52,108,134,1,55,54,160,135,224,-138,0,128,48,192,13,254,220,2,177,44,132,217,234,75,0,224,166,1,64,-191,65,9,192,205,0,54,151,37,192,14,161,247,129,3,71,219,66,232,128,-26,1,56,48,197,160,237,150,2,74,196,225,88,1,64,40,227,91,7,133,-102,0,89,224,114,0,169,255,193,106,225,229,2,209,209,130,13,249,167,6,-192,48,233,247,2,191,159,129,193,240,94,0,160,73,0,66,75,64,230,10,-2,204,173,104,44,76,73,86,94,130,181,224,179,8,0,89,224,166,0,192,-160,224,154,14,134,35,192,148,160,140,64,234,130,98,128,115,96,166,96,139,-224,135,2,160,174,0,67,128,24,224,0,2,193,159,160,0,250,92,3,253,-69,5,106,121,0,54,128,129,196,150,0,53,97,43,79,148,252,169,5,71,-176,0,54,239,58,0,130,85,162,125,64,68,183,155,128,14,0,52,71,121,-194,146,97,46,80,161,96,136,0,35,139,240,64,50,248,175,0,64,129,74,-122,3,54,32,95,57,73,68,64,28,0,51,137,63,184,82,1,49,48,127,-209,72,18,64,21,138,170,229,59,1,69,48,0,34,128,26,170,130,1,32,-83,65,115,179,196,161,87,245,225,10,128,20,64,200,224,28,5,236,148,1,-236,62,4,96,22,188,182,233,208,18,68,41,65,15,104,217,230,87,6,96,-67,2,95,53,49,69,128,0,54,75,4,224,197,1,69,237,165,234,98,12,-229,2,2,232,209,3,69,89,199,209,1,56,53,247,160,0,128,54,224,179,-9,160,231,224,79,18,175,48,128,86,202,107,192,209,234,111,3,96,65,65,-156,64,247,105,158,251,122,5,224,103,64,192,99,135,126,128,36,234,6,13,-65,242,140,31,227,216,2,195,229,224,126,4,224,112,1,224,31,0,224,117,-6,129,80,3,56,32,95,51,129,232,96,92,204,53,98,33,225,240,2,0,-83,101,30,133,105,1,53,52,255,65,0,67,81,106,112,0,75,239,163,0,-136,194,99,179,0,83,142,93,64,77,116,220,160,7,132,95,0,83,173,51,-224,77,2,1,95,53,153,12,192,217,224,56,3,225,17,5,128,19,135,125,-100,41,1,95,54,199,199,160,0,232,134,15,99,239,226,132,1,9,109,97,-108,102,111,114,109,101,100,32,72,131,11,100,97,108,111,110,101,32,100,101,-114,105,118,232,136,2,128,127,225,107,6,238,171,12,0,48,224,132,1,161,-67,166,230,227,66,10,131,133,170,17,139,135,138,247,162,85,64,26,227,197,-11,226,243,13,78,193,201,177,225,40,3,165,204,64,46,104,165,140,102,226,-200,6,224,60,15,224,56,3,226,156,1,224,85,0,225,96,17,235,168,13,-12,100,97,116,97,47,110,101,119,116,121,112,101,32,235,173,5,64,0,225,-89,1,171,152,160,187,230,20,3,233,0,0,96,33,232,143,1,224,173,0,-99,4,0,53,102,172,0,57,224,177,0,163,162,151,55,151,249,96,0,0,-58,132,81,227,78,0,224,123,4,97,148,224,96,0,237,40,0,166,216,198,-222,192,11,192,82,224,20,0,224,64,0,224,55,20,83,234,224,56,6,130,-20,225,15,2,128,22,180,144,224,40,5,224,94,1,233,130,0,0,66,192,-30,65,179,0,51,163,100,5,49,53,55,32,95,51,101,61,4,66,32,95,-55,57,117,23,230,242,3,0,79,225,170,2,4,68,97,116,97,46,224,4,-0,65,167,224,29,8,7,84,121,112,101,97,98,108,101,224,8,0,224,37,-7,11,71,72,67,46,71,101,110,101,114,105,99,115,192,8,224,35,7,29,-76,97,110,103,117,97,103,101,46,72,97,115,107,101,108,108,46,84,72,46,-83,121,110,116,97,120,46,76,105,102,112,211,224,46,3,17,84,101,120,116,-46,82,101,97,100,46,73,110,116,101,114,110,97,108,96,13,224,38,12,3,-83,104,111,119,96,4,64,29,232,3,4,228,56,0,96,5,2,95,49,56,-72,216,234,224,7,224,17,1,233,3,0,224,48,1,82,86,141,15,69,138,-153,72,229,67,0,224,93,14,225,157,3,65,160,226,99,3,224,115,58,160,-36,107,51,224,106,7,105,128,224,108,7,160,20,224,110,36,195,79,71,238,-64,213,67,60,145,239,200,32,239,219,11,96,79,0,50,98,111,107,255,230,-217,6,108,71,153,62,224,35,1,129,176,64,95,145,50,196,5,101,72,224,-183,8,225,65,5,224,27,25,224,2,4,195,156,224,25,7,128,22,197,126,-205,108,227,179,4,195,158,163,151,224,14,2,225,4,4,193,6,192,141,128,-8,64,20,224,118,2,240,47,0,1,49,54,108,50,66,57,131,172,120,204,-99,204,230,253,3,91,77,241,27,6,227,1,1,2,66,97,100,230,194,8,-239,169,4,224,150,1,225,15,9,192,2,224,195,6,128,49,224,194,5,224,-5,27,228,223,1,234,157,6,164,163,224,67,23,224,137,6,129,35,0,56,-116,133,236,6,3,198,41,225,74,2,239,24,30,239,36,4,224,244,5,225,-156,98,96,0,192,133,224,141,0,249,94,7,227,221,7,226,232,0,167,26,-0,95,175,186,207,37,250,53,0,64,0,230,149,6,102,22,239,225,1,224,-119,4,82,152,242,149,0,96,8,94,55,123,205,186,81,170,212,239,210,1,-160,68,193,135,224,150,6,103,228,92,72,160,110,227,73,2,248,109,2,102,-147,0,48,101,48,160,228,0,85,240,53,0,226,160,0,112,118,224,44,4,-192,227,224,95,2,100,195,165,36,225,67,3,162,34,64,2,244,193,21,233,-184,2,160,166,228,215,7,194,201,135,173,180,176,64,182,225,247,4,244,175,-49,193,140,239,186,0,240,168,1,224,10,17,212,161,225,229,3,230,88,10,-193,3,227,227,6,192,67,236,71,21,129,179,236,72,5,192,55,128,172,224,-95,0,225,39,1,224,21,9,232,229,0,228,136,12,224,25,17,132,54,224,-144,3,192,1,129,212,243,92,10,128,30,229,201,11,0,83,243,231,2,227,-87,3,243,29,10,225,244,2,236,222,0,96,17,162,85,68,20,2,32,95,-53,100,31,0,56,224,5,1,224,88,2,151,249,197,6,164,85,254,205,9,-1,85,32,117,68,129,134,252,132,2,112,92,111,140,112,113,0,48,66,182,-156,129,0,49,242,78,2,128,0,160,60,118,84,64,46,0,51,217,182,250,-62,6,14,109,107,77,101,116,104,111,100,58,32,97,114,105,116,121,228,143,-2,225,121,12,128,2,244,142,4,225,91,0,163,46,96,2,244,5,2,224,-74,40,224,1,1,3,95,49,50,49,100,114,228,99,3,96,55,226,199,0,-229,235,4,225,103,0,230,69,9,2,95,49,52,81,41,97,57,92,78,225,-1,1,4,99,111,101,114,99,106,189,224,134,7,68,66,226,222,2,129,145,-224,33,2,64,31,137,16,224,17,3,128,246,192,15,129,129,128,63,225,134,-1,130,47,101,161,174,182,240,87,7,225,194,0,105,127,160,11,148,103,98,-226,244,76,13,96,64,128,69,191,33,166,0,0,83,147,146,98,121,238,56,-3,130,115,162,114,64,100,67,191,194,221,224,42,5,129,9,192,35,128,208,-97,14,225,117,2,224,47,9,224,48,2,110,94,96,4,78,77,66,203,70,-76,230,62,4,64,0,88,40,1,50,32,78,114,128,224,64,15,114,66,206,-88,130,208,97,23,80,122,226,102,0,129,35,238,248,4,194,97,170,92,129,-25,176,115,229,161,3,129,200,193,189,144,199,192,141,0,54,244,22,4,238,-227,5,161,100,96,57,102,56,64,253,162,155,69,135,132,226,197,111,64,121,-224,19,2,96,18,64,14,3,80,32,64,83,64,4,193,81,233,38,6,128,-39,6,64,66,32,82,32,64,75,98,77,148,223,224,51,4,239,189,0,225,-107,2,224,47,0,128,0,128,11,160,17,228,6,6,175,146,2,68,101,114,-163,8,75,122,0,54,252,173,1,227,116,1,226,58,6,0,80,227,158,0,-66,105,137,144,64,59,148,224,190,190,149,62,0,49,99,135,2,56,52,51,-98,135,167,159,65,140,4,56,48,32,95,55,65,62,64,30,65,213,1,57,-56,242,16,0,130,71,128,240,2,95,55,57,66,255,64,94,149,37,224,154,-4,224,152,6,2,85,32,75,84,113,195,143,64,52,0,51,149,204,85,157,-1,49,52,77,57,64,86,64,182,227,200,0,64,37,149,79,66,164,0,35,-70,1,82,191,64,22,211,115,105,12,105,252,211,221,0,52,64,199,160,19,-64,41,255,118,0,224,41,8,0,50,85,36,224,41,1,64,7,243,106,1,-134,80,128,4,70,74,157,195,141,104,228,98,2,135,24,224,11,2,192,8,-225,123,0,73,159,159,130,1,95,54,68,38,239,244,19,64,104,0,54,96,-224,64,111,5,10,65,32,79,32,80,239,233,7,6,66,111,117,110,100,101,-100,192,7,66,32,64,151,64,84,224,45,10,3,69,110,117,109,96,4,160,-39,114,52,224,39,10,240,93,4,64,39,65,218,224,79,11,3,113,46,69,-113,192,35,65,11,224,35,10,6,70,117,110,99,116,111,114,192,7,192,45,-224,161,14,4,73,120,46,73,120,224,35,22,2,79,114,100,64,3,160,37,-0,52,65,43,224,37,10,241,3,12,64,47,66,179,224,47,5,241,13,15,-224,131,13,241,23,26,64,102,225,90,9,0,84,241,33,17,64,48,67,11,-224,48,10,241,43,4,64,39,67,140,230,140,5,66,33,132,15,132,154,100,-211,237,190,3,128,11,0,83,101,175,0,55,137,6,144,53,162,162,130,225,-226,177,0,234,191,9,133,35,238,122,11,176,62,168,51,246,62,0,224,12,-0,165,94,111,200,224,13,1,234,247,4,224,20,7,224,21,7,234,139,14,-236,163,0,192,28,224,29,4,224,83,1,170,88,253,215,14,224,49,7,224,-2,3,232,255,2,234,40,2,224,2,8,166,192,224,83,26,233,80,6,224,-81,11,201,157,221,42,226,13,1,7,115,104,111,119,115,80,114,101,98,154,-224,109,21,221,75,192,104,224,1,1,138,228,224,25,11,140,154,224,22,17,-224,104,11,178,187,237,143,2,224,202,4,240,41,7,106,49,130,33,82,86,-97,15,137,3,226,207,4,224,210,12,128,2,192,34,224,208,2,235,237,1,-208,71,64,22,71,105,103,124,67,49,235,127,2,224,220,5,224,224,4,224,-28,22,224,243,3,128,28,245,227,1,96,2,240,240,1,224,67,14,224,65,-8,241,2,0,224,8,13,64,44,160,218,97,67,130,29,2,56,48,52,65,-53,226,23,5,4,80,97,114,101,110,194,23,192,100,128,70,140,252,128,52,-2,79,32,35,75,104,161,109,161,31,0,50,106,196,71,204,228,18,3,162,-155,96,51,70,38,193,161,169,47,169,71,253,244,0,225,105,4,223,204,2,-85,32,35,152,207,224,150,1,224,2,0,241,241,4,128,239,64,71,192,235,-64,8,236,37,4,161,252,225,238,2,193,70,128,75,132,118,128,137,235,191,-1,128,146,3,79,32,35,49,75,219,226,101,0,128,116,64,50,96,223,64,-35,224,223,1,96,215,163,64,128,13,111,55,228,215,1,224,111,27,65,83,-192,82,1,85,32,229,108,0,64,12,96,141,0,53,225,133,1,65,159,108,-122,139,118,0,54,105,109,192,44,138,194,127,25,91,199,96,59,0,48,236,-140,4,96,10,64,4,161,177,104,219,3,64,95,55,49,96,70,2,66,32,-95,105,77,192,192,164,97,64,127,226,67,7,2,83,116,114,242,244,1,194,-27,164,216,224,59,2,226,127,12,228,151,3,226,86,6,224,51,2,65,106,-0,54,224,188,0,3,95,49,50,56,70,243,137,140,173,63,174,1,235,204,-8,175,76,70,253,65,3,0,49,226,145,2,128,75,105,139,71,8,138,220,-68,233,68,114,0,54,82,89,1,95,52,95,239,177,236,64,132,193,65,0,-67,161,183,64,19,225,176,1,69,33,137,143,64,79,138,205,199,82,225,250,-1,66,160,231,78,7,234,18,0,130,55,64,128,0,56,74,232,134,117,65,-195,129,219,227,7,0,231,78,15,96,110,237,49,16,64,128,166,116,128,17,-101,92,230,54,14,3,114,101,97,100,225,157,0,128,46,64,61,239,188,2,-128,61,66,18,238,199,0,239,138,10,2,101,114,114,137,189,130,142,97,187,-130,32,224,107,9,0,32,124,78,3,101,102,105,110,138,146,64,0,226,167,-0,128,4,225,222,5,136,195,140,3,2,75,32,75,83,237,224,249,0,204,-195,64,33,139,255,0,75,133,85,109,124,168,218,225,140,18,173,244,221,64,-244,86,8,0,51,142,29,65,27,132,125,232,43,8,228,185,3,135,194,232,-126,0,240,115,2,232,6,0,163,44,161,83,197,39,98,222,65,57,240,30,-2,224,92,4,181,58,167,42,225,205,14,6,116,121,112,101,82,101,112,161,-84,192,120,1,52,57,67,22,79,112,228,27,1,160,87,160,128,96,83,241,-101,15,8,109,107,84,121,67,111,110,65,112,224,87,1,137,178,224,55,29,-128,52,145,67,227,210,0,132,58,131,70,224,30,26,6,95,57,56,51,32,-95,57,83,164,242,81,1,226,45,0,130,44,1,56,55,231,200,1,66,12,-141,245,128,228,195,159,234,242,100,64,43,226,47,10,225,209,7,227,174,2,-227,196,2,225,231,21,5,99,111,109,112,97,114,178,249,70,34,0,55,76,-137,129,149,160,153,235,107,14,235,117,4,249,62,2,96,234,235,15,0,128,-5,245,93,0,167,239,64,22,201,165,64,49,100,108,242,252,3,240,253,5,-0,83,184,122,247,144,4,134,121,229,212,0,176,58,228,95,25,1,60,62,-234,215,1,160,140,96,48,2,53,54,57,224,78,43,225,64,4,64,0,199,-75,224,53,20,1,69,81,192,48,200,104,225,173,0,225,26,1,97,17,227,-110,6,224,84,19,1,76,84,233,153,4,224,79,8,75,13,160,76,225,109,-3,224,82,19,0,71,192,82,161,152,180,73,232,47,22,160,37,224,29,5,-232,168,2,227,111,0,229,157,8,231,98,5,145,68,1,75,52,96,195,230,-224,9,229,187,13,66,191,227,174,208,1,61,61,227,169,0,64,38,104,84,-99,182,106,71,230,168,2,0,67,227,190,3,171,218,235,75,0,227,120,0,-237,25,2,64,46,237,38,7,227,133,82,1,38,38,227,133,68,193,23,64,-0,227,128,28,2,84,114,117,227,179,0,226,205,22,226,198,15,232,227,5,-227,90,0,227,176,34,3,70,97,108,115,192,133,128,45,227,25,30,83,3,-116,197,0,66,87,178,87,180,162,183,97,254,78,32,2,95,49,53,85,2,-111,132,98,8,193,252,140,112,96,10,235,13,1,164,38,100,35,130,114,231,-9,5,244,187,1,99,107,92,22,0,50,199,81,64,50,6,50,54,54,32,-95,50,55,126,11,1,53,55,149,200,4,95,51,50,52,32,184,0,72,252,-0,48,181,215,64,4,128,0,64,200,148,112,152,118,234,200,27,64,137,227,-117,11,227,108,5,129,154,65,113,99,94,164,29,161,183,64,118,0,54,213,-158,2,49,56,51,72,10,128,54,253,166,8,11,87,97,114,110,105,110,103,-58,32,99,97,110,138,106,4,114,105,118,101,32,97,178,227,127,0,129,15,-184,160,224,66,8,4,32,121,101,116,44,128,49,99,45,225,91,0,225,218,-2,64,145,204,78,130,109,64,25,64,9,0,49,129,194,64,32,204,31,12,-66,32,73,79,46,112,101,114,102,111,114,109,73,203,165,65,182,2,50,32,-95,122,88,7,95,51,57,57,32,95,52,55,172,207,0,49,160,22,96,68,-0,51,229,27,57,115,97,129,174,229,20,0,224,31,3,132,216,4,64,95,-54,56,53,96,202,160,65,229,55,3,239,147,5,225,207,12,232,114,12,132,-205,224,13,2,211,147,164,168,224,2,2,229,124,7,224,130,1,224,2,6,-243,42,0,128,110,243,40,2,243,110,3,192,218,235,140,7,241,71,0,197,-212,129,192,188,247,128,189,66,178,164,214,249,166,4,172,40,65,64,160,234,-199,247,96,149,163,155,164,131,102,43,205,11,0,54,224,211,1,3,95,53,-55,48,163,122,239,252,1,129,59,160,168,128,165,224,5,0,230,100,26,1,-116,111,215,186,96,194,230,104,4,224,207,29,97,90,230,110,6,225,110,1,-224,204,10,132,242,196,141,224,216,12,229,110,14,96,57,238,89,65,128,251,-12,58,32,111,117,116,32,111,102,32,114,97,110,103,230,39,0,164,63,97,-231,231,2,2,170,223,194,34,225,86,16,6,101,110,117,109,70,114,111,225,-88,1,161,14,235,37,0,233,246,3,198,60,135,21,237,25,16,192,83,1,-84,111,160,164,224,255,3,242,147,1,237,173,1,192,195,227,5,13,224,215,-3,131,67,224,203,22,1,84,104,244,14,1,224,83,14,236,7,0,130,61,-224,17,7,247,86,0,196,14,195,100,236,31,20,96,22,193,55,164,87,224,-110,0,194,122,162,240,224,78,0,98,195,224,126,1,241,98,0,128,233,225,-98,15,0,62,200,90,129,90,106,119,231,53,0,224,17,7,192,151,160,183,-102,193,163,172,192,176,224,27,9,124,165,0,90,80,33,0,56,243,146,0,-225,199,8,224,144,1,1,120,49,225,235,15,224,35,2,0,50,232,86,3,-193,53,64,7,4,67,32,95,53,56,68,87,224,114,6,226,92,19,2,104,-101,110,194,96,224,106,9,64,9,228,47,1,232,183,22,221,87,132,24,137,-224,71,158,65,123,64,31,143,106,3,85,32,75,51,113,48,0,48,170,114,-202,120,64,34,140,20,129,72,235,222,57,198,192,226,76,0,230,158,32,226,-189,3,230,172,1,224,16,0,224,13,13,128,173,224,93,2,230,170,13,224,-48,3,128,2,198,166,128,51,198,165,230,162,2,193,10,130,215,128,92,230,-147,0,94,76,230,147,2,224,81,1,0,82,241,198,7,160,23,224,52,20,-4,66,32,82,32,64,130,69,226,95,3,96,5,226,31,9,2,109,97,120,-126,52,226,63,15,2,109,105,110,224,31,2,226,63,6,119,19,138,225,97,-139,244,78,3,128,243,64,20,106,234,129,1,1,95,50,64,11,234,111,9,-230,91,4,128,104,226,149,0,0,50,174,49,133,191,0,90,116,230,165,202,-2,52,48,56,211,67,224,152,7,233,233,8,0,67,234,35,9,167,0,1,-53,53,64,159,128,171,228,47,7,96,128,203,206,129,100,162,205,120,137,192,-138,231,90,2,232,162,0,226,154,3,64,205,131,113,194,89,2,95,51,54,-67,68,0,50,201,128,194,57,3,95,49,55,54,199,80,197,26,0,56,97,-64,161,79,204,36,68,28,160,22,106,185,0,55,65,15,128,40,3,67,39,-32,89,128,146,0,80,142,60,96,92,233,23,2,239,54,14,96,2,224,37,-2,0,66,64,70,194,188,229,182,4,154,228,224,50,3,128,47,128,121,224,-206,0,192,52,128,46,195,3,142,243,195,108,96,190,1,52,53,95,39,128,-10,100,75,130,45,7,49,52,52,48,32,95,55,55,141,19,64,14,111,70,-230,105,0,153,42,1,49,52,244,42,0,193,53,224,97,15,225,34,2,97,-237,193,229,65,99,133,105,64,9,226,137,2,225,101,0,160,13,228,9,1,-66,24,141,30,0,80,129,145,0,95,139,76,185,190,160,14,160,20,96,45,-0,54,96,45,0,83,96,151,109,138,1,52,55,194,189,99,72,193,47,108,-89,99,190,115,238,224,155,1,224,250,1,64,78,140,146,0,83,149,160,233,-226,1,3,95,49,54,54,141,233,0,57,64,241,128,43,140,157,0,85,229,-49,6,246,250,7,129,195,241,22,7,161,202,195,199,96,157,246,187,3,161,-132,1,56,49,190,107,64,111,0,51,166,72,241,133,5,74,19,0,50,160,-56,1,95,49,77,61,69,33,238,225,1,241,179,6,64,122,128,21,224,180,-11,0,53,89,226,128,181,165,90,193,244,129,95,3,64,95,55,56,207,75,-91,185,194,235,224,7,17,128,55,128,43,225,79,1,199,145,0,64,132,229,-225,29,4,98,217,104,31,194,33,192,0,163,169,228,161,19,228,159,6,68,-156,7,97,32,99,108,97,115,115,32,100,157,1,95,56,162,158,80,11,79,-178,100,171,0,52,224,79,0,82,11,177,74,97,89,99,3,192,237,225,182,-0,243,7,7,98,126,228,197,1,210,138,150,79,64,5,64,4,78,212,192,-3,226,22,1,111,70,69,12,1,95,49,129,90,228,238,1,66,117,80,89,-160,233,66,17,0,85,223,9,66,56,224,26,0,227,68,6,224,92,0,229,-13,5,64,162,161,123,1,49,56,106,23,79,65,0,49,97,2,97,10,66,-228,162,110,64,0,66,114,232,187,3,2,80,32,35,188,237,97,5,2,32,-64,64,64,139,64,37,200,193,98,91,5,32,67,32,61,61,32,190,241,224,-150,2,96,246,67,44,129,69,160,69,168,45,224,9,0,66,242,156,163,128,-90,136,249,128,128,96,211,227,103,16,228,167,0,229,118,0,235,29,3,128,-2,229,134,4,192,123,239,74,9,224,55,3,224,27,0,134,55,128,104,224,-143,1,129,8,224,46,16,192,28,233,45,5,224,107,9,192,82,240,78,4,-160,16,246,8,6,230,7,1,98,88,67,236,195,254,224,71,1,3,95,49,-50,48,97,22,224,101,1,237,114,3,131,3,224,132,0,104,225,224,161,0,-147,74,228,141,3,136,79,69,34,224,23,6,250,78,1,224,121,0,128,70,-239,135,1,224,187,5,98,148,227,57,1,99,86,128,228,132,182,224,201,1,-128,197,136,50,251,215,8,96,0,192,190,231,40,4,243,43,8,162,20,226,-112,3,65,2,232,38,4,192,70,160,32,224,29,5,224,28,3,224,25,4,-160,43,227,192,0,98,187,67,32,3,95,49,48,53,247,165,2,1,53,51,-224,187,3,224,15,6,224,43,4,131,65,228,21,4,99,99,224,67,7,193,-29,229,52,4,64,125,67,196,231,189,7,64,23,220,8,1,49,49,107,58,-238,240,0,3,95,49,52,49,71,11,70,53,160,84,1,51,54,82,194,1,-51,56,164,248,66,96,134,162,230,145,7,160,47,245,91,1,198,15,64,195,-100,165,224,102,19,135,79,224,96,10,245,160,0,232,129,4,162,159,180,124,-232,24,2,3,64,64,64,89,233,146,0,201,143,163,123,162,25,228,145,0,-231,143,1,224,170,1,137,89,225,227,2,233,137,1,227,133,2,168,212,0,-67,197,125,192,146,231,181,7,0,58,132,189,101,12,78,105,130,190,64,21,-138,237,162,67,0,53,128,250,108,110,1,56,48,104,140,79,246,2,95,51,-49,138,206,192,142,2,95,56,57,107,216,167,149,64,71,137,28,5,95,56,-49,48,32,75,168,122,224,1,5,180,155,64,0,224,28,9,128,1,228,115,-0,224,37,18,224,35,4,224,32,23,64,210,225,170,0,64,165,0,54,160,-237,130,29,97,111,193,144,64,59,65,69,249,192,2,1,95,51,65,207,138,-144,128,253,224,25,14,96,91,214,52,224,134,3,224,11,2,192,8,97,169,-64,47,137,165,2,83,32,73,128,131,164,111,69,202,2,67,32,60,70,167,-64,40,224,157,1,230,191,1,128,77,247,98,4,242,165,3,100,185,236,159,-5,227,184,4,98,218,180,67,241,198,2,98,198,2,49,56,49,113,120,241,-221,6,224,82,46,160,78,193,32,0,51,226,106,2,232,93,1,0,52,130,-91,198,2,228,117,2,128,64,136,7,140,241,0,50,72,117,112,76,129,122,-136,30,227,105,11,233,211,3,142,68,185,139,181,24,67,93,227,92,1,64,-24,224,57,1,64,1,67,136,224,243,0,229,157,1,99,109,227,107,5,224,-222,0,136,146,133,40,163,163,224,79,1,96,245,232,34,22,128,2,231,156,-0,232,52,6,110,129,226,243,4,232,14,1,232,39,13,224,83,1,224,89,-1,232,124,0,161,201,224,23,1,224,61,8,160,62,224,29,7,96,2,238,-209,9,128,0,129,103,241,185,11,224,16,0,224,192,2,224,42,0,162,59,-128,0,193,58,96,105,225,65,1,224,81,8,145,133,161,10,65,156,0,54,-68,226,226,127,3,229,231,2,143,102,199,69,102,68,64,55,3,95,49,56,-48,153,222,225,212,3,224,236,6,245,143,0,128,105,101,117,145,138,224,41,-1,166,110,226,61,13,192,7,201,68,162,138,160,57,247,146,12,64,100,0,-53,74,169,232,106,0,134,91,215,105,241,232,0,224,172,3,234,69,2,233,-81,0,224,91,33,209,6,160,87,96,69,163,23,0,64,228,239,6,167,17,-131,124,128,0,224,141,8,224,139,1,130,65,129,124,224,5,18,143,180,235,-172,6,135,128,135,160,212,137,237,127,7,225,88,4,226,126,6,227,46,3,-129,31,224,18,3,194,68,225,242,5,224,60,11,243,220,2,226,85,0,128,-2,194,91,162,93,224,250,1,162,197,160,151,66,105,249,18,6,157,219,0,-49,237,248,1,249,8,0,185,9,160,131,143,142,225,176,9,232,145,14,225,-236,9,248,55,4,64,112,96,44,249,195,19,192,104,96,12,230,9,0,225,-36,3,224,2,6,193,71,224,249,3,225,79,18,245,119,5,225,94,86,130,-180,225,94,63,228,31,20,96,148,135,29,225,116,8,206,61,224,55,0,228,-51,57,64,38,225,184,0,228,66,49,228,67,8,224,12,3,128,157,212,156,-96,119,224,116,3,232,43,5,192,53,193,11,129,118,228,62,6,64,152,2,-52,57,55,229,171,5,228,152,26,228,118,16,128,66,205,244,224,47,0,72,-61,96,162,98,51,107,207,73,164,246,238,2,6,114,101,99,83,101,108,69,-252,138,1,145,181,1,56,55,144,78,242,252,9,0,55,64,182,167,239,144,-92,128,181,224,37,1,3,95,56,52,53,241,231,2,2,103,101,116,215,75,-224,74,3,64,63,144,65,224,42,1,6,115,101,116,70,105,101,108,87,123,-0,58,130,46,224,30,4,13,68,97,116,97,46,82,101,99,111,114,100,115,-46,83,224,43,5,139,196,224,117,4,224,30,3,139,155,224,74,14,2,72,-97,115,224,43,3,0,54,234,197,2,65,73,186,20,2,56,48,52,128,31,-234,229,1,192,29,160,7,64,28,212,120,225,204,18,227,85,10,64,57,202,-27,107,14,175,121,234,247,7,97,131,97,109,234,248,11,98,115,243,206,2,-227,72,1,247,11,4,96,152,233,136,19,224,38,1,224,106,5,160,28,195,-225,164,156,214,83,248,46,6,128,5,137,178,233,64,3,117,226,224,101,3,-99,245,224,13,0,230,250,4,129,91,2,49,56,57,239,96,8,224,56,11,-224,90,1,224,112,3,224,248,4,137,249,227,235,2,97,101,193,60,227,243,-15,232,253,4,165,45,233,105,8,254,172,3,239,84,5,160,56,207,87,234,-117,1,246,97,22,229,125,15,224,190,3,202,1,160,240,229,30,0,165,43,-161,252,233,173,0,97,91,224,56,0,194,163,0,50,68,19,101,141,64,142,-244,121,6,128,184,174,42,181,128,245,125,0,196,106,2,95,49,49,122,83,-64,15,0,54,113,104,97,21,0,67,133,49,100,115,228,87,3,164,68,246,-11,3,5,77,101,116,104,111,100,228,135,2,64,89,224,180,1,1,95,54,-65,31,165,62,240,85,32,250,129,1,131,21,162,129,236,195,9,96,173,67,-226,174,89,64,73,1,95,55,99,219,224,125,49,101,105,224,126,28,96,0,-224,87,3,0,83,192,87,198,248,224,92,8,163,172,130,90,231,56,12,96,-195,249,241,1,96,0,244,21,5,100,118,173,179,65,194,1,54,55,135,166,-0,48,132,202,133,221,108,152,90,70,0,56,253,37,3,2,100,102,108,101,-213,64,39,214,7,228,83,16,96,205,161,36,160,160,239,230,9,244,107,0,-224,28,6,106,234,228,23,6,64,19,246,190,7,207,163,206,194,163,14,163,-121,69,151,244,171,12,225,157,1,232,118,7,224,23,5,193,187,1,55,57,-148,78,244,245,10,224,74,66,3,58,49,55,57,134,253,96,191,225,88,8,-0,54,65,116,228,89,2,167,148,146,148,96,61,210,212,178,210,73,133,114,-205,1,55,57,242,205,2,64,40,242,181,14,64,168,192,95,224,1,9,239,-32,0,96,0,224,35,26,224,32,23,224,29,20,224,26,17,224,23,14,224,-20,11,224,17,8,243,25,4,96,0,65,14,0,54,231,220,2,0,52,119,-167,169,247,225,131,0,64,57,2,55,54,57,227,152,0,247,69,5,64,15,-247,70,3,75,214,101,25,160,43,224,70,2,99,158,241,235,2,65,156,64,-7,96,124,227,75,9,0,54,196,205,130,217,96,7,252,64,8,97,225,144,-149,128,74,125,102,128,206,247,13,3,1,51,57,194,110,97,17,224,196,5,-64,108,166,169,224,162,6,232,157,1,199,40,228,239,3,96,82,241,21,6,-163,149,131,192,171,89,232,62,2,128,123,225,20,18,224,193,16,0,52,90,-127,192,0,225,220,1,241,148,8,160,223,97,244,131,121,128,189,123,212,64,-36,229,136,6,224,105,6,65,79,0,52,128,245,192,242,228,134,1,100,221,-71,21,71,16,129,158,128,66,224,212,5,64,172,132,178,88,43,192,37,66,-109,202,74,0,89,220,141,230,82,5,159,214,229,45,7,133,250,224,33,18,-159,241,225,164,2,240,75,5,225,84,0,128,28,136,172,224,184,1,224,49,-5,230,196,0,97,198,64,201,133,173,224,44,13,224,43,1,234,189,1,203,-36,133,165,160,248,139,38,64,185,69,25,231,64,5,175,28,233,77,1,65,-165,128,13,130,27,96,35,160,55,194,132,65,208,64,39,162,93,70,29,225,-218,2,224,96,34,2,55,57,50,224,103,0,234,73,2,224,57,41,226,231,-1,128,140,2,64,95,57,173,196,97,1,203,238,149,136,128,160,192,100,66,-172,199,252,0,80,141,183,68,9,1,55,53,97,167,224,245,23,0,95,119,-136,160,188,232,64,7,160,193,224,8,10,160,205,224,244,0,142,195,99,46,-160,5,224,68,8,224,50,19,224,44,18,225,25,1,225,31,4,98,82,134,-170,185,108,64,0,65,43,214,87,96,30,195,39,97,152,0,64,227,44,2,-181,216,96,113,227,16,5,179,179,225,14,2,227,89,13,225,242,4,224,33,-12,147,120,226,250,11,192,25,228,174,0,212,127,248,35,3,70,13,127,205,-64,210,228,41,0,247,241,5,128,216,229,22,6,193,51,155,146,105,167,1,-55,55,98,77,227,96,0,239,244,0,255,236,7,66,18,1,53,49,69,222,-0,54,70,138,233,196,1,2,98,105,110,78,243,228,195,0,237,233,6,75,-167,0,50,92,113,4,52,57,57,32,95,112,235,224,59,1,2,78,117,109,-171,167,228,79,7,64,251,253,140,6,229,81,7,146,121,64,161,69,18,99,-53,130,185,192,212,233,221,3,128,0,226,95,2,225,188,0,129,97,193,154,-233,17,1,164,26,131,162,162,136,130,133,64,96,206,125,226,133,5,225,168,-4,0,85,97,168,229,170,0,228,3,8,129,181,230,103,4,224,159,3,224,-29,8,225,26,34,102,146,96,8,132,51,225,7,4,231,28,12,97,234,195,-12,98,113,224,96,17,101,16,110,15,226,113,3,224,18,13,232,93,9,66,-65,0,51,226,65,4,5,102,117,110,100,101,112,98,8,93,83,226,64,8,-224,176,9,136,63,227,137,0,163,201,230,221,7,192,216,231,247,10,1,55,-56,99,58,233,78,9,226,78,4,119,33,199,149,231,119,3,227,186,1,227,-34,2,177,225,225,106,5,224,129,16,111,250,224,129,49,225,27,1,228,68,-8,212,28,160,122,226,52,3,224,128,1,97,3,156,48,224,111,16,128,0,-193,101,133,50,228,205,9,132,131,232,72,18,199,251,224,168,8,232,20,4,-225,35,18,224,161,21,224,88,10,229,69,2,195,81,163,179,227,88,0,229,-79,5,0,51,68,210,65,17,208,126,1,55,56,242,199,0,160,218,197,201,-226,103,5,160,104,228,45,4,228,42,12,228,41,4,228,38,8,224,205,1,-225,175,3,227,134,7,224,189,11,64,170,181,164,0,55,123,141,235,110,9,-72,83,199,96,224,171,118,1,54,54,175,136,224,161,8,128,187,224,188,22,-227,95,7,3,95,51,52,54,114,161,71,222,144,104,106,248,130,75,167,3,-227,97,9,128,156,224,132,7,192,21,241,6,8,96,42,224,62,0,2,95,-49,52,195,132,128,26,130,30,237,64,8,66,174,182,201,134,150,66,195,113,-252,230,21,3,192,95,162,253,224,68,1,229,209,6,115,59,236,2,0,224,-58,4,160,177,224,16,3,143,118,232,3,1,230,119,0,197,144,64,16,192,-230,206,128,133,247,165,253,238,140,3,129,199,64,121,193,221,6,67,32,95,-52,54,32,95,122,79,0,35,97,157,96,242,1,52,48,89,22,112,130,147,-167,2,49,50,53,66,43,229,233,1,11,66,97,100,32,100,101,114,105,118,-105,110,103,231,248,1,224,168,0,231,26,4,192,163,226,103,4,234,72,6,-224,171,8,225,196,4,162,197,213,32,97,97,245,19,15,0,67,82,162,225,-91,0,234,92,0,96,250,239,153,6,143,54,202,67,160,5,64,4,70,147,-192,3,242,89,9,128,127,226,190,3,0,67,255,44,0,128,238,238,193,5,-64,44,226,68,7,226,58,0,95,123,149,32,224,103,9,138,33,2,52,32,-95,121,223,117,134,224,6,0,224,222,3,224,111,3,0,83,161,110,224,211,-20,226,147,5,65,68,1,55,56,96,9,154,72,133,53,246,126,1,231,9,-6,224,252,8,64,47,219,203,67,192,148,1,2,80,32,58,128,23,3,10,-65,32,90,160,1,130,224,64,23,210,144,133,217,169,155,96,2,64,79,0,-52,75,63,64,8,1,50,55,96,13,135,52,0,51,115,33,64,0,236,145,-11,74,152,100,208,233,159,27,228,241,3,224,29,8,224,20,0,228,241,5,-96,92,233,138,1,240,89,5,151,97,129,28,225,90,1,0,52,147,136,228,-161,7,231,41,16,233,144,0,0,53,162,212,65,135,231,196,3,224,96,9,-235,245,1,224,96,9,131,62,163,132,232,59,11,160,129,0,54,138,10,130,-196,224,126,19,96,0,65,190,148,38,129,93,1,80,32,231,62,2,67,233,-165,200,70,206,3,10,65,32,83,64,66,86,119,160,86,64,25,251,51,1,-1,80,32,135,228,0,80,128,24,240,8,1,96,26,201,1,224,87,5,239,-43,1,64,122,98,178,160,62,142,25,225,13,7,237,37,8,64,42,252,172,-1,192,72,162,26,128,16,229,85,0,192,120,96,52,214,219,241,149,0,138,-182,239,170,1,244,23,5,0,54,134,96,192,100,130,253,128,11,101,217,236,-149,7,226,194,0,197,18,192,86,230,151,6,199,23,129,176,224,94,5,230,-40,7,192,29,231,58,8,229,172,9,79,151,236,60,0,88,27,65,50,253,-255,3,64,19,97,110,0,67,83,88,0,53,133,127,103,10,0,85,154,9,-64,0,235,249,12,65,61,72,147,86,91,3,49,51,56,55,68,27,64,55,-225,199,2,96,45,129,199,64,120,96,41,122,76,0,56,254,63,4,19,80,-114,105,109,105,116,105,118,101,115,46,67,111,110,115,116,114,97,105,110,158,-81,64,56,0,54,224,82,4,226,89,2,64,183,161,186,237,31,2,164,43,-235,14,45,238,98,0,193,69,239,99,1,192,25,3,85,32,64,90,129,236,-167,201,234,228,22,160,37,138,165,194,4,234,162,3,163,216,224,80,0,224,-15,7,230,174,10,224,34,1,237,195,9,64,211,2,95,51,52,68,17,105,-12,225,185,5,2,67,32,95,101,168,100,245,1,55,51,248,149,2,65,80,-227,170,3,233,85,3,254,63,6,171,116,98,101,64,70,0,50,132,134,99,-163,144,160,99,99,152,247,192,91,227,225,1,224,93,22,226,222,0,247,35,-19,236,251,4,232,126,10,227,180,5,237,154,0,224,90,1,64,172,183,3,-226,18,1,131,157,227,57,2,229,100,2,65,181,96,237,105,100,98,99,93,-97,183,104,158,34,230,130,6,255,26,0,132,17,64,60,133,201,225,28,4,-224,75,14,161,54,132,254,0,75,96,177,218,98,192,102,212,110,186,20,96,-47,133,3,224,47,7,1,66,32,224,43,11,132,250,132,120,233,172,6,65,-30,3,52,48,57,32,222,168,132,35,233,11,12,231,7,39,0,55,75,46,-198,136,0,51,157,113,160,72,236,90,3,0,54,87,58,253,140,35,129,77,-224,247,1,160,171,253,139,7,0,58,153,218,70,197,162,64,71,43,232,161,-25,96,207,69,28,154,51,66,10,93,77,96,79,132,245,225,232,0,224,76,-19,137,84,64,60,135,55,64,67,101,23,2,55,54,53,69,65,64,22,181,-9,132,163,224,9,1,161,166,213,19,161,7,230,79,2,160,39,226,230,1,-228,219,11,226,236,2,224,47,22,195,143,224,47,0,165,53,224,47,15,202,-47,160,89,224,47,23,184,169,225,207,1,224,47,23,237,151,5,229,115,9,-224,31,5,174,42,129,62,103,250,70,234,162,109,224,64,13,160,144,192,61,-231,202,16,227,230,5,234,147,1,231,140,4,161,226,224,27,0,206,30,249,-140,2,224,136,15,249,172,1,194,203,133,233,100,54,77,200,237,181,6,15,-116,121,112,101,32,97,112,112,108,105,99,97,116,105,111,110,103,58,96,0,-225,183,0,232,55,2,247,66,15,0,49,189,42,225,142,0,238,133,2,230,-181,5,225,68,2,161,103,224,194,0,128,56,184,118,144,183,97,5,132,96,-1,49,52,75,60,0,67,68,236,100,228,5,67,32,95,53,54,55,64,47,-246,225,0,1,53,48,232,203,0,106,100,0,50,224,236,3,1,36,120,192,-218,225,26,1,194,249,237,160,9,235,82,2,152,109,228,171,7,64,95,225,-106,2,128,248,230,57,6,119,85,1,53,49,130,91,225,26,1,108,26,226,-10,5,224,237,2,137,73,1,49,53,129,200,226,9,0,225,53,2,225,243,-9,230,253,5,97,85,237,69,4,224,155,7,128,227,254,192,0,225,1,6,-243,150,17,244,168,3,227,121,3,98,33,160,125,171,43,224,13,0,128,30,-64,57,162,35,192,24,128,1,200,167,234,168,3,160,85,255,155,9,182,204,-224,49,12,224,131,5,69,247,96,36,225,115,0,128,83,234,243,6,227,227,-12,84,159,98,166,0,75,99,116,128,5,225,230,0,133,246,224,70,1,145,-33,0,50,70,238,241,27,3,0,79,74,194,0,53,231,144,1,225,236,5,-225,242,5,197,167,64,73,1,50,49,100,73,195,54,71,218,96,97,117,50,-226,253,1,231,249,2,65,20,2,95,49,48,161,160,1,52,57,121,147,97,-107,96,41,233,87,0,192,0,227,215,0,227,204,16,160,240,227,204,11,224,-40,5,169,79,228,38,1,129,162,160,7,224,42,4,222,90,229,30,0,160,-128,128,49,228,98,0,199,156,165,129,128,1,160,31,225,39,2,225,181,2,-225,243,3,226,29,2,224,42,4,224,123,0,224,36,5,225,147,2,224,181,-1,160,29,225,155,0,226,4,3,194,10,192,56,160,36,67,76,0,50,72,-128,2,57,56,51,64,4,74,108,210,126,97,163,0,80,100,163,172,187,2,-79,32,35,72,158,162,24,233,176,0,160,159,227,188,6,226,52,6,227,167,-7,129,98,162,176,64,134,0,54,95,128,226,136,4,0,64,242,62,0,131,-82,194,242,244,22,3,64,26,160,33,235,22,32,0,48,227,206,8,142,112,-224,68,20,224,74,21,224,75,2,224,77,0,226,92,5,244,32,4,227,241,-5,227,220,9,65,132,130,118,224,67,11,194,69,228,55,7,228,33,8,129,-48,128,170,192,80,226,58,5,224,70,0,160,67,97,76,224,79,0,244,198,-5,2,95,49,52,117,242,192,32,237,98,5,70,116,192,121,64,0,195,14,-224,182,4,232,42,6,0,54,70,252,232,88,32,160,45,224,124,26,64,32,-236,53,4,225,182,6,1,54,53,106,20,230,161,2,228,7,27,128,96,224,-91,25,160,8,224,91,0,128,176,230,218,10,0,80,109,15,180,112,228,219,-0,232,179,3,234,25,7,130,89,225,90,2,96,170,164,82,229,22,2,176,-26,195,245,192,140,136,125,233,81,13,19,98,97,100,32,102,105,110,97,108,-32,100,111,32,115,116,97,116,101,109,101,176,142,226,100,4,166,245,224,16,-8,231,84,3,192,138,229,177,3,228,203,9,163,185,224,74,2,230,163,10,-65,80,238,251,0,229,25,4,224,2,0,224,29,3,241,7,0,169,139,97,-5,224,8,40,230,224,3,160,90,224,158,1,160,32,128,47,226,172,0,192,-66,96,68,169,214,227,131,1,224,16,0,128,34,240,48,5,74,155,112,186,-160,15,239,35,1,160,0,128,52,160,129,234,77,8,224,33,5,109,123,162,-170,96,79,161,38,227,85,2,163,42,225,64,0,71,137,128,168,136,121,128,-161,0,54,102,247,65,126,100,55,231,186,0,0,80,106,238,0,79,64,182,-70,27,0,53,118,53,224,48,0,97,213,129,195,128,242,224,236,0,110,29,-78,7,255,100,2,2,97,105,108,162,96,64,160,2,95,49,50,85,16,78,-59,101,85,226,155,2,2,105,110,100,160,40,64,135,230,162,0,102,73,224,-86,8,2,62,62,61,128,44,235,74,11,0,98,194,209,193,21,226,77,0,-226,2,5,226,11,13,229,189,1,160,34,225,236,69,225,109,0,224,213,12,-225,42,0,230,159,9,224,161,0,226,2,1,180,230,160,80,224,0,2,228,-234,5,196,98,128,171,233,35,4,242,246,6,224,39,16,237,64,4,195,231,-224,39,10,173,63,224,79,0,237,104,15,236,155,2,238,207,0,224,10,0,-228,80,1,224,101,14,233,216,4,224,141,18,161,22,224,39,11,224,141,4,-161,5,224,130,2,225,128,11,226,40,9,96,17,177,21,0,54,83,228,225,-202,1,9,70,114,111,109,84,104,101,110,84,111,226,253,2,0,66,203,49,-0,66,64,7,227,222,5,224,125,23,224,119,0,160,72,224,115,18,163,25,-224,101,83,160,213,224,99,13,225,151,24,164,186,225,151,24,236,218,2,224,-179,12,192,173,64,18,224,169,14,96,167,224,159,4,224,77,2,196,199,228,-31,0,233,93,5,229,61,0,0,89,224,44,3,192,127,64,53,147,249,224,-147,1,234,58,12,96,23,232,202,3,136,21,1,52,52,242,85,11,231,86,-4,224,21,1,96,18,128,185,231,86,13,224,124,5,183,32,160,0,226,204,-17,96,77,96,97,224,249,7,160,25,107,188,128,196,189,251,90,156,231,172,-0,160,143,160,95,97,130,85,230,224,66,5,101,101,229,71,0,97,175,96,-40,233,204,1,162,108,172,81,236,69,17,0,55,64,177,236,69,20,98,9,-128,115,128,107,64,104,237,22,0,224,101,2,98,60,174,33,224,52,10,1,-55,48,192,227,198,136,128,234,237,248,4,137,169,194,37,232,38,14,235,95,-5,128,44,234,1,1,96,135,0,54,90,107,225,97,12,97,213,226,58,5,-86,239,71,66,149,129,0,50,212,249,224,46,0,226,218,1,134,137,96,112,-173,71,64,242,230,181,2,226,49,14,195,13,232,78,1,247,65,6,224,199,-40,227,72,0,226,101,4,199,72,242,182,2,240,220,0,224,246,5,192,243,-110,188,160,235,224,83,75,128,65,129,65,229,231,1,225,85,5,231,87,0,-162,151,116,117,65,88,167,155,227,195,1,168,11,96,144,87,42,108,52,1,-95,56,224,5,1,224,196,18,130,232,1,55,49,87,97,128,22,241,246,0,-224,198,5,1,95,57,94,158,64,0,236,119,1,227,207,7,99,51,111,246,-192,74,206,211,194,7,226,201,5,161,251,224,29,0,226,198,9,225,255,8,-226,246,0,226,8,2,162,189,0,53,118,124,64,82,73,252,99,185,160,69,-224,201,15,160,205,164,247,160,129,230,21,1,225,149,1,64,182,229,150,4,-195,211,227,147,8,238,103,7,129,219,128,160,226,42,4,169,84,224,96,2,-196,200,229,225,18,224,43,5,164,98,236,224,5,95,140,229,21,3,225,243,-7,160,18,226,185,5,67,226,0,55,182,147,224,171,12,193,142,225,50,2,-160,2,224,51,0,64,1,231,124,4,165,13,193,97,128,2,224,46,17,197,-7,230,158,1,230,142,8,224,46,3,225,61,3,193,21,192,13,110,69,192,-24,253,2,13,192,156,228,132,0,224,160,4,226,161,3,160,2,167,44,224,-158,4,199,152,224,47,6,96,18,224,39,4,224,245,7,133,41,224,79,2,-224,2,7,192,157,224,196,1,160,57,225,47,9,224,67,6,224,153,0,224,-67,27,227,7,2,224,35,3,96,199,247,89,3,224,39,14,129,115,64,19,-240,139,5,226,195,12,192,44,128,128,236,50,2,225,120,4,224,132,2,224,-193,0,224,114,11,224,239,2,228,66,4,226,52,0,224,53,2,224,242,4,-226,201,0,224,49,3,224,236,4,224,33,8,224,117,0,224,16,1,245,138,-0,224,70,3,228,30,1,224,75,0,231,53,1,224,59,1,225,55,3,224,-79,77,225,81,1,104,213,130,109,1,95,49,87,26,103,204,3,55,32,95,-55,183,226,0,55,132,134,224,22,8,231,239,2,64,13,240,66,4,225,24,-17,128,117,153,56,224,78,5,239,99,1,161,240,64,239,160,89,64,6,173,-207,230,94,20,133,218,101,9,64,8,240,9,16,8,114,111,109,83,116,114,-105,110,103,251,196,0,224,174,5,224,97,5,239,128,2,229,187,6,1,52,-55,128,9,224,238,16,146,173,225,111,0,194,122,229,200,2,217,75,64,166,-207,217,224,0,1,224,88,1,227,113,8,227,221,1,224,125,10,224,192,2,-227,106,19,227,105,12,224,209,4,227,99,0,224,100,10,128,1,227,29,8,-226,23,0,224,50,16,226,4,14,1,56,52,89,145,0,55,235,211,1,226,-10,11,104,140,0,50,90,68,2,49,55,51,64,209,0,55,243,176,1,226,-27,63,0,82,125,224,0,97,210,45,226,29,144,224,89,2,226,32,10,231,-145,2,224,39,3,229,146,114,224,17,1,226,52,17,224,56,12,230,187,6,-224,121,1,224,45,4,0,83,228,85,9,242,142,2,230,246,0,224,67,40,-228,218,1,230,83,15,225,10,11,224,73,11,228,227,0,224,56,5,229,14,-10,0,53,228,238,0,229,92,1,227,13,21,0,53,75,160,1,55,52,192,-172,136,144,226,89,0,128,49,0,49,128,49,1,50,54,104,233,64,49,0,-55,130,83,64,127,1,51,56,133,105,80,185,224,110,18,224,60,9,128,0,-227,121,60,6,73,110,116,101,103,101,114,227,120,152,193,148,7,80,32,75,-32,95,51,54,51,96,126,4,48,32,64,95,51,222,149,2,95,49,56,64,-20,70,182,1,95,49,111,247,3,95,49,52,50,138,84,227,63,5,128,146,-0,83,167,223,226,98,0,160,2,224,184,5,232,170,6,224,151,0,192,29,-193,176,233,151,9,225,9,5,225,6,2,226,189,0,226,49,0,170,126,193,-3,183,40,226,35,3,0,51,172,67,224,122,20,233,37,8,224,122,62,228,-215,2,250,207,0,81,115,250,220,1,192,100,96,112,192,109,66,217,245,235,-2,64,27,233,65,1,226,68,10,0,54,115,20,205,159,225,153,0,131,15,-160,242,192,95,96,66,234,65,8,224,132,10,192,7,225,254,1,64,96,112,-161,248,100,1,224,55,2,228,177,1,224,106,1,0,83,77,124,1,55,57,-67,237,0,54,246,126,1,161,60,224,38,4,0,57,178,111,232,13,4,238,-54,6,0,54,145,107,224,171,6,160,210,224,42,2,2,83,32,73,184,189,-129,50,193,229,131,27,242,25,6,0,85,65,204,64,67,0,95,112,53,105,-187,1,95,55,96,42,2,95,49,52,144,159,192,235,227,9,2,195,116,64,-0,128,19,252,55,8,29,95,32,99,97,110,110,111,116,32,98,101,32,117,-115,101,100,32,97,115,32,97,32,118,97,114,105,97,98,108,101,164,55,224,-189,9,110,208,0,52,101,40,115,172,0,56,126,158,225,65,1,128,132,242,-92,8,194,211,96,209,0,90,65,119,130,97,82,162,64,56,240,54,6,217,-122,224,220,1,3,95,51,52,51,100,245,91,5,224,197,1,6,116,99,69,-120,112,114,58,192,203,7,104,97,110,100,108,101,58,32,96,190,64,132,123,-51,96,92,100,68,0,52,96,93,244,101,4,160,82,4,79,32,35,51,50,-182,80,224,45,0,230,243,0,224,50,4,8,58,49,55,54,53,32,64,10,-65,97,220,86,71,226,92,12,130,199,228,139,6,230,236,2,224,49,2,226,-42,1,228,150,6,239,58,6,228,204,30,230,241,0,225,117,1,192,33,240,-67,19,193,113,128,27,228,133,8,224,31,6,226,225,0,226,115,1,0,55,-239,234,0,224,64,12,160,150,192,60,231,231,4,224,109,9,224,108,9,99,-8,163,122,228,101,15,192,85,128,56,196,150,163,207,160,104,228,94,7,224,-144,0,118,50,182,243,118,211,224,130,3,224,134,0,230,117,2,232,253,4,-224,38,1,228,87,10,224,52,1,228,244,2,192,58,224,55,2,196,104,228,-105,2,228,108,19,224,58,0,230,17,3,160,91,228,114,89,225,80,2,226,-218,3,175,96,96,209,225,214,7,166,237,224,180,2,192,38,233,188,10,76,-198,227,234,1,8,68,97,116,97,46,70,117,110,99,76,82,1,46,36,232,-217,0,0,82,192,8,160,141,226,140,8,64,25,67,205,0,50,137,197,64,-104,89,171,163,223,248,110,1,224,38,31,225,157,1,227,93,1,225,157,5,-244,65,2,227,40,21,68,74,0,52,100,74,100,132,69,13,72,251,1,49,-52,65,117,64,28,0,51,228,103,0,132,105,230,129,6,150,146,226,213,0,-228,93,7,227,80,4,243,197,30,192,56,226,81,8,169,86,224,112,3,162,-203,250,122,1,250,194,12,224,57,1,192,59,245,80,0,237,49,3,232,238,-1,200,123,224,74,9,163,128,228,11,1,237,114,7,245,130,13,195,252,140,-73,0,52,65,10,134,98,2,95,49,49,204,216,227,212,0,224,63,6,66,-20,0,54,73,42,2,95,49,52,118,204,2,95,49,53,131,124,251,144,4,-224,144,1,105,118,225,240,0,103,46,0,53,65,238,128,13,94,43,0,80,-220,184,64,141,1,55,54,249,238,4,192,77,161,97,98,48,225,243,5,96,-95,251,234,1,226,121,5,0,55,76,83,64,0,225,51,8,128,12,228,115,-0,161,24,192,2,98,91,225,109,7,162,114,96,0,228,243,5,129,208,224,-39,1,224,20,2,224,68,5,252,214,1,224,114,8,224,138,0,199,30,197,-25,231,38,4,251,120,1,128,36,225,157,4,64,26,224,73,2,224,87,0,-97,155,138,246,1,52,51,203,184,229,81,4,226,52,3,253,57,4,237,110,-7,109,103,247,191,2,4,66,32,95,56,57,90,98,1,49,54,165,61,253,-243,1,227,67,8,224,92,6,224,98,10,224,94,7,64,176,250,186,2,96,-206,226,218,1,192,2,161,105,225,104,2,227,120,6,225,170,0,233,133,5,-205,28,225,201,7,160,52,230,22,5,192,22,230,30,4,129,112,3,95,49,-53,56,68,225,128,71,226,210,4,233,225,2,225,168,4,224,59,0,193,172,-128,113,225,169,0,96,0,163,68,2,95,53,54,70,122,174,45,0,67,169,-197,128,0,2,95,54,49,143,46,236,27,5,64,1,197,148,192,75,225,46,-5,225,26,5,225,70,3,225,72,4,225,7,4,225,137,13,255,99,0,194,-176,226,164,2,239,63,14,224,97,0,131,140,160,231,255,68,9,184,226,225,-69,0,160,28,227,226,4,0,52,230,135,2,236,236,1,255,58,6,70,59,-0,50,102,59,2,75,32,89,96,121,67,202,128,131,104,13,226,92,11,226,-11,12,161,3,199,164,136,221,0,52,111,156,96,240,232,60,5,71,49,227,-16,0,192,240,131,71,233,86,6,224,225,29,160,224,64,206,0,49,135,39,-2,49,53,50,73,89,91,38,64,21,0,48,167,32,161,82,251,162,14,224,-31,3,240,78,1,64,93,0,57,128,223,98,139,101,142,0,48,114,3,76,-11,129,70,78,234,96,119,1,51,55,70,47,0,55,65,16,64,22,0,56,-224,22,6,0,51,128,22,0,55,224,22,5,82,2,64,22,0,54,96,22,-232,204,1,15,80,114,105,109,105,116,105,118,101,115,46,87,111,114,100,34,-128,37,140,85,224,83,1,160,60,168,33,1,54,57,106,82,82,152,85,178,-67,216,1,55,52,114,171,102,95,64,20,0,52,96,33,97,62,0,95,96,-66,65,7,245,223,1,96,38,64,81,136,86,224,81,0,103,15,1,55,52,-101,48,192,67,102,178,243,123,2,5,57,48,52,32,95,53,73,29,96,105,-0,53,65,88,224,31,19,65,128,224,31,16,67,196,8,54,57,51,32,80,-32,95,53,57,64,162,0,53,224,194,0,96,56,109,187,224,221,4,114,248,-147,152,137,142,0,48,80,197,224,22,11,131,16,224,61,4,96,111,128,34,-2,38,49,46,64,185,1,38,48,96,6,224,39,6,128,28,224,27,14,96,-21,192,27,65,68,131,95,9,95,49,49,48,32,95,51,50,52,32,100,145,-128,9,64,35,64,34,194,179,224,34,0,64,24,224,34,5,130,192,67,84,-64,108,67,148,96,209,3,64,95,54,57,64,5,224,88,0,64,44,67,88,-66,70,1,47,32,64,12,130,129,4,85,32,75,32,75,65,33,64,18,162,-125,0,52,96,238,66,33,0,56,97,248,142,200,226,52,1,224,19,8,0,-52,224,38,5,88,62,225,50,1,224,18,1,0,57,224,38,9,1,50,49,-225,125,1,226,115,4,225,149,2,96,154,0,54,163,168,65,177,96,34,0,-64,106,23,2,95,57,48,69,229,64,33,162,253,160,188,103,99,0,55,71,-12,64,6,0,53,128,6,3,54,32,64,83,130,83,0,52,96,106,111,207,-161,147,114,185,224,181,3,68,195,108,83,0,54,128,245,224,43,2,226,16,-9,192,25,160,14,64,28,131,209,64,35,97,102,200,13,96,140,1,80,32,-128,40,128,162,162,27,160,73,0,64,69,112,0,80,160,20,196,122,192,211,-96,8,67,5,0,95,174,26,192,82,128,22,64,21,2,95,50,48,236,186,-1,96,130,131,174,3,105,116,111,102,97,248,162,120,66,155,0,57,100,174,-0,55,142,108,144,221,2,49,55,51,66,56,2,49,55,51,131,207,0,51,-153,226,0,52,64,173,0,53,68,251,160,39,0,53,224,51,1,64,84,130,-170,2,102,62,61,96,98,130,149,1,102,62,64,12,64,64,64,12,0,60,-96,26,64,85,96,13,96,12,130,112,3,102,110,101,103,96,14,129,228,1,-102,42,96,12,129,207,1,102,45,96,12,129,69,1,102,43,96,12,236,213,-3,194,13,230,142,0,226,22,3,226,29,1,69,144,3,10,65,32,73,96,-63,128,171,0,85,66,247,0,65,160,30,198,7,1,80,32,112,58,0,85,-97,187,0,50,128,185,96,21,68,45,160,21,229,186,7,0,50,128,22,128,-203,241,41,3,135,45,103,22,241,122,1,241,68,20,200,201,167,69,224,210,-0,241,2,5,160,30,238,25,0,212,208,230,189,3,236,93,1,184,111,224,-87,19,212,241,224,87,48,130,167,192,220,192,25,204,47,205,195,225,25,6,-224,248,3,135,70,241,16,1,224,32,8,138,83,224,32,18,208,208,224,220,-8,192,24,136,47,249,95,2,184,4,224,27,0,102,52,1,51,56,100,50,-0,53,71,144,224,44,3,238,85,1,224,73,10,224,28,0,224,159,18,129,-42,224,32,18,128,141,224,192,10,192,24,224,192,9,200,231,224,27,11,202,-124,224,27,11,249,70,1,245,73,0,66,193,0,54,131,100,232,101,11,2,-73,110,116,136,100,64,59,224,36,4,113,87,186,46,4,95,84,121,112,101,-192,12,160,47,163,185,224,84,11,5,70,108,111,97,116,87,160,39,131,212,-224,87,6,9,66,121,116,101,83,116,114,105,110,103,96,85,3,114,110,97,-108,224,19,2,160,57,131,218,138,9,65,89,139,200,140,24,2,95,56,55,-133,143,152,191,64,46,199,84,163,190,65,187,64,22,164,178,224,167,11,2,-67,104,97,160,205,64,44,164,122,67,37,225,172,1,1,95,49,70,221,235,-20,5,239,90,6,1,48,55,192,141,128,29,234,249,3,139,184,64,96,132,-92,202,110,141,43,135,28,1,53,54,128,169,0,49,132,104,154,241,107,72,-139,161,139,42,66,80,226,127,18,131,254,235,160,2,101,203,187,44,96,29,-244,202,1,235,114,6,96,26,128,57,3,95,49,50,48,68,11,160,55,179,-127,163,235,137,175,105,135,1,95,56,224,94,2,187,125,130,117,203,150,84,-15,224,204,5,135,41,224,159,11,0,85,132,70,224,192,6,137,18,219,237,-224,162,0,244,11,6,1,49,55,128,131,160,40,224,139,2,128,134,235,58,-5,0,53,66,36,64,22,130,188,238,27,1,65,230,1,51,32,167,161,78,-177,228,218,5,97,250,160,128,96,156,132,23,226,46,1,64,1,113,20,226,-39,2,110,15,98,0,174,20,130,29,97,119,116,67,224,0,3,207,119,100,-172,239,156,2,89,159,128,108,128,137,206,91,242,144,7,160,91,240,50,2,-210,163,76,201,128,8,0,53,224,224,34,132,73,224,224,3,210,13,224,225,-47,238,222,0,109,83,3,95,49,54,53,181,12,237,153,4,224,193,2,65,-219,137,56,96,10,170,203,0,49,172,163,72,126,64,22,161,208,132,43,2,-85,32,83,227,28,5,66,20,226,85,4,130,176,98,165,1,85,32,80,142,-2,54,56,57,227,190,0,160,163,224,44,0,109,47,224,44,1,0,67,80,-210,176,206,96,116,132,113,74,119,0,66,119,71,0,83,65,1,230,254,9,-229,248,8,96,21,0,85,97,147,66,149,1,50,55,162,179,224,40,8,102,-7,0,85,226,165,1,238,195,4,1,51,54,228,119,4,129,167,0,90,131,-71,226,31,7,206,194,128,48,238,199,0,228,175,8,2,95,49,48,123,119,-192,0,224,28,3,64,241,201,78,240,55,5,145,48,128,117,226,197,0,130,-82,160,100,128,1,230,249,1,198,196,135,55,208,108,228,222,5,208,78,192,-102,252,111,20,1,49,50,107,249,109,28,0,64,252,206,2,4,102,99,110,-83,34,225,219,0,198,76,128,154,192,150,244,59,5,171,152,110,104,69,12,-227,91,12,64,27,137,180,164,154,193,253,0,85,64,183,242,226,3,64,60,-254,152,3,160,114,224,35,4,224,152,0,83,50,224,33,0,1,50,49,75,-253,177,200,245,235,2,64,25,152,140,0,79,131,127,160,36,221,29,130,161,-97,80,220,233,2,95,49,54,153,160,224,102,1,161,233,162,206,194,213,161,-1,64,1,106,45,225,211,3,164,156,226,131,3,0,53,76,3,224,51,2,-128,116,225,83,6,66,123,97,169,225,149,4,0,68,193,149,228,24,4,194,-10,245,235,1,100,43,1,53,54,170,201,225,191,3,96,110,243,98,14,244,-74,0,225,106,21,195,88,97,186,80,149,161,55,128,124,224,249,1,224,77,-1,0,67,64,15,224,179,0,203,4,183,123,129,179,161,153,161,142,193,96,-99,112,128,5,224,240,2,224,49,17,230,153,1,225,237,26,225,214,23,227,-35,11,64,0,193,231,230,4,5,97,10,96,229,195,145,64,25,83,20,96,-190,215,157,0,58,147,20,233,54,2,194,39,64,70,67,33,187,50,225,176,-4,230,182,7,97,223,73,67,227,104,0,227,102,4,97,30,160,108,137,66,-224,108,2,195,17,128,67,70,25,226,33,10,231,39,24,64,126,99,28,224,-126,8,104,107,102,120,160,129,206,10,231,21,3,64,51,0,55,110,142,224,-123,23,67,133,64,231,224,103,8,234,37,0,64,135,74,37,161,128,70,34,-131,255,224,104,1,69,17,224,118,5,130,137,65,249,137,209,64,71,136,246,-66,192,134,77,64,77,128,174,227,192,6,234,188,2,226,13,0,195,195,180,-250,139,0,224,103,0,128,18,128,209,160,153,224,83,3,109,108,64,231,160,-86,64,167,0,54,100,131,246,137,4,118,106,143,210,1,49,54,169,179,64,-113,129,199,192,146,160,32,1,55,48,96,51,64,216,137,184,2,90,32,90,-96,169,64,17,208,52,0,89,228,57,0,163,148,98,194,104,134,247,14,1,-160,216,228,102,9,225,172,8,129,203,96,58,224,188,8,228,239,2,101,37,-226,9,0,160,90,225,53,3,224,114,0,162,23,67,61,64,9,96,13,246,-248,3,64,203,172,241,160,188,65,71,64,111,0,67,224,153,3,239,179,5,-0,54,98,157,224,188,5,3,95,49,51,53,83,202,0,52,174,70,225,247,-9,99,204,0,53,82,13,1,50,54,77,74,81,37,224,41,17,247,23,0,-1,95,52,96,142,233,164,7,0,48,224,61,2,229,110,9,100,232,66,224,-249,173,3,96,236,137,61,224,185,5,0,50,104,152,132,142,230,108,7,1,-54,57,103,113,229,193,0,165,149,224,15,0,113,126,160,132,77,76,65,1,-236,254,1,106,48,229,86,1,236,215,2,4,67,32,95,55,56,140,76,86,-248,64,7,195,116,96,56,2,50,50,50,181,106,160,72,98,141,129,41,0,-54,125,250,96,11,3,66,32,95,54,90,128,224,244,0,1,95,51,101,110,-0,51,130,51,128,163,251,119,4,129,46,1,53,54,64,123,128,30,69,193,-64,21,69,229,190,129,100,174,79,156,197,240,133,212,226,4,8,0,75,226,-1,16,225,147,5,0,95,254,156,2,192,0,226,162,0,65,167,224,168,10,-73,137,116,52,130,110,166,198,224,85,2,225,49,3,0,95,78,235,0,95,-141,158,160,89,163,154,140,120,199,86,229,64,0,164,156,225,112,0,73,37,-227,95,10,131,218,235,30,4,194,79,224,44,11,231,197,0,224,61,2,238,-100,0,224,66,1,203,247,224,53,0,192,69,224,70,15,227,230,4,202,206,-241,119,0,224,67,5,128,219,228,100,5,130,181,230,181,0,239,82,0,96,-32,239,151,4,224,0,0,155,150,227,208,1,67,60,139,136,3,85,32,75,-52,160,2,84,240,64,26,98,194,227,87,8,130,15,0,53,87,75,161,165,-230,231,5,98,191,139,210,128,174,226,9,1,161,171,230,21,0,171,157,68,-149,0,51,68,61,161,233,128,86,209,162,128,196,225,43,3,166,138,163,106,-0,66,67,29,150,246,68,22,234,25,1,16,103,101,116,83,117,112,101,114,-67,108,97,115,115,101,115,58,32,106,38,82,205,88,180,200,184,193,98,172,-239,235,97,9,64,7,128,125,64,121,171,4,68,1,79,0,65,101,1,53,-52,242,67,0,160,217,89,106,112,253,237,230,2,96,72,164,57,224,0,5,-97,147,230,87,0,65,118,182,61,2,56,55,50,88,20,170,20,230,55,0,-97,103,0,90,64,30,230,71,4,64,56,246,95,2,237,229,10,100,96,162,-59,98,85,194,70,130,149,161,149,98,79,232,122,6,255,226,6,163,215,1,-52,50,128,22,135,95,97,34,67,222,96,120,0,52,123,20,164,32,224,15,-7,97,72,2,49,52,48,243,123,1,224,203,3,225,193,1,30,101,120,105,-115,116,101,110,116,105,97,108,115,32,110,111,116,32,97,108,108,111,119,101,-100,32,105,110,32,112,97,116,83,236,4,32,98,105,110,100,147,231,160,0,-224,189,1,96,144,231,136,2,103,75,232,78,1,226,190,11,225,73,0,0,-54,129,130,2,49,51,54,78,233,80,24,112,244,190,8,98,128,226,134,8,-227,36,2,128,232,224,94,8,176,199,229,36,0,224,157,3,161,62,105,135,-138,253,224,187,5,98,106,70,211,175,114,64,13,135,67,0,53,161,85,224,-110,13,64,185,136,234,90,215,194,231,162,236,227,216,9,0,51,94,141,224,-163,0,242,66,6,160,98,0,51,94,108,96,11,0,67,67,74,81,61,0,-51,94,173,1,95,51,139,56,131,208,4,53,32,95,56,57,73,128,191,0,-160,84,224,213,2,162,51,224,96,2,224,93,0,224,88,14,239,17,6,193,-173,137,184,0,90,131,173,137,205,0,54,74,9,171,97,227,202,3,65,19,-64,29,177,112,241,105,5,226,242,1,230,32,8,197,221,128,30,230,32,5,-226,16,0,162,230,1,49,49,126,57,231,191,1,129,236,114,167,234,143,0,-231,165,0,106,87,164,37,166,48,229,33,0,227,192,5,0,54,224,57,2,-168,213,243,223,12,224,149,0,224,62,4,233,106,2,96,141,233,140,0,65,-19,249,179,1,224,62,0,224,176,6,226,182,14,68,87,140,137,152,67,148,-41,0,56,229,18,1,96,0,243,28,6,65,128,209,255,0,89,237,217,0,-230,39,1,231,208,1,68,249,239,65,2,160,2,224,229,2,225,187,0,182,-194,199,63,229,4,1,160,48,224,42,8,170,67,178,101,224,33,12,234,245,-1,0,83,161,115,192,25,147,200,0,75,241,85,1,129,179,231,205,7,192,-64,81,203,229,251,0,236,87,0,224,81,4,105,8,96,41,98,10,224,9,-1,64,0,167,60,224,170,0,224,253,15,224,139,1,243,13,3,225,79,2,-224,112,2,129,138,64,23,66,117,70,100,168,157,225,123,1,233,33,4,160,-91,192,48,228,67,1,128,216,128,50,97,204,0,80,96,185,176,137,0,53,-67,11,128,200,250,73,0,160,72,102,216,224,189,2,66,128,225,84,5,162,-85,128,48,225,208,23,132,102,226,34,1,224,32,8,136,93,241,136,1,224,-32,8,195,62,227,253,8,247,164,9,206,221,228,38,12,225,240,6,163,215,-165,82,225,250,8,170,239,224,50,3,224,87,8,181,231,0,75,67,238,226,-113,0,226,23,3,128,67,226,17,9,128,42,226,60,0,224,39,15,176,153,-225,249,12,224,27,2,64,199,234,253,4,169,117,160,30,226,10,0,226,83,-9,160,225,226,150,1,160,55,138,145,128,28,0,82,224,220,4,233,216,16,-7,112,97,116,86,97,114,115,32,169,207,0,50,64,36,102,116,160,209,112,-55,72,135,165,136,1,95,57,112,21,170,74,96,112,0,58,100,143,198,31,-234,224,13,228,245,0,227,72,0,176,249,231,17,6,2,95,51,54,229,102,-3,1,53,54,132,130,101,9,230,235,19,64,42,64,144,230,210,6,64,154,-170,0,2,49,53,50,64,64,0,54,64,196,64,22,201,222,229,50,0,66,-229,229,24,1,64,63,229,64,5,129,246,130,111,133,70,239,16,1,204,75,-162,13,227,86,0,224,17,2,229,91,15,160,68,224,121,5,224,54,16,239,-171,1,224,54,3,228,200,0,224,54,16,167,241,230,119,1,241,105,1,239,-159,2,224,51,5,166,194,128,47,226,198,7,224,28,2,228,192,2,0,90,-64,34,2,95,49,54,91,213,170,141,227,97,3,224,75,14,160,156,192,75,-228,201,0,225,106,1,161,137,66,139,1,50,55,96,46,128,176,84,252,3,-52,32,95,53,177,41,96,48,77,46,96,229,65,147,0,80,245,162,1,84,-51,2,54,32,79,105,249,0,48,165,69,64,170,64,158,204,86,225,23,0,-219,45,96,113,69,75,250,100,4,236,103,0,0,54,205,100,232,100,0,230,-140,20,64,34,234,169,8,120,167,192,206,226,189,4,225,43,1,160,89,138,-132,95,92,232,13,1,225,54,1,164,150,244,229,14,99,209,65,79,129,89,-233,200,1,232,218,7,244,123,14,228,169,1,232,178,6,83,136,224,47,4,-128,49,227,235,3,224,149,5,237,0,4,130,46,251,235,3,225,8,8,252,-176,2,224,213,5,233,103,0,226,30,1,224,241,4,96,21,76,166,233,64,-1,2,95,49,51,169,97,239,107,8,224,102,0,225,170,0,224,236,8,128,-78,101,6,1,49,52,206,1,225,191,43,130,195,192,0,227,254,9,192,80,-228,50,5,195,72,195,244,235,97,2,128,138,160,178,226,123,2,225,83,2,-161,150,224,88,0,238,212,10,252,186,2,224,132,2,160,56,224,16,1,136,-67,162,241,139,144,224,76,7,224,46,3,128,61,192,44,224,2,3,224,126,-6,226,213,1,193,125,230,42,3,247,42,2,239,66,7,101,124,192,49,241,-254,5,137,38,226,93,5,168,110,97,197,117,104,235,92,2,224,182,1,225,-204,33,237,146,0,192,64,228,226,8,161,186,199,181,161,231,224,139,1,251,-192,8,227,131,2,224,37,1,227,179,1,192,15,224,239,5,64,100,224,239,-15,129,81,135,72,1,49,53,94,48,65,72,0,50,85,137,64,118,116,70,-197,70,224,199,0,241,192,7,163,81,227,254,4,2,53,49,50,79,212,224,-61,1,117,36,255,189,5,224,78,0,225,24,9,167,6,224,212,3,227,118,-7,228,160,7,1,54,56,196,112,131,133,207,188,175,189,224,119,2,225,177,-3,239,125,7,96,28,64,66,0,54,64,21,192,51,100,142,100,33,192,0,-231,221,1,160,69,231,166,27,255,71,5,192,64,160,45,227,229,21,198,80,-228,128,0,128,167,224,60,3,235,98,6,192,152,225,89,5,224,27,2,227,-249,4,224,10,0,225,139,8,227,33,8,64,1,229,109,10,225,86,24,160,-238,229,218,7,112,143,0,56,98,112,0,53,167,243,226,80,9,101,98,252,-7,3,193,143,117,131,1,53,48,197,108,248,207,7,227,154,5,129,60,79,-138,185,27,128,6,64,130,2,57,56,51,74,197,64,135,224,0,5,196,166,-228,118,6,237,240,13,195,207,225,42,1,249,22,8,0,56,74,249,161,57,-180,46,225,130,3,161,217,229,196,2,97,229,192,22,160,25,160,26,231,53,-7,225,101,2,128,168,231,70,8,129,35,0,53,121,105,131,244,1,50,56,-64,138,64,4,128,31,225,65,3,66,61,100,153,0,80,101,199,97,45,109,-32,128,41,192,15,152,40,161,70,0,53,128,18,150,224,64,0,161,159,160,-0,226,96,10,217,245,1,85,32,255,113,0,230,252,5,226,237,2,224,250,-2,161,93,231,8,2,224,100,4,230,86,0,192,59,224,47,8,128,107,224,-144,10,192,24,103,239,226,137,7,3,95,49,54,52,228,197,8,192,143,130,-44,192,13,199,16,64,1,227,171,0,143,187,229,163,6,64,75,180,115,200,-58,126,205,0,55,249,154,1,106,212,1,57,32,245,186,2,5,110,101,103,-97,116,101,245,149,1,235,98,19,224,158,2,225,83,1,192,146,119,77,141,-192,161,120,195,197,226,227,1,243,118,6,224,107,15,193,119,231,194,12,161,-150,232,93,18,192,164,227,184,4,231,217,11,103,163,234,144,4,226,183,3,-73,181,128,146,236,103,5,206,33,224,155,9,84,215,224,65,28,96,106,239,-51,13,5,116,99,80,97,116,58,119,68,7,104,97,110,100,108,101,100,32,-97,156,68,2,111,136,96,98,116,18,79,57,254,165,6,160,78,2,79,32,-35,66,6,172,134,160,45,245,220,4,103,174,100,87,170,48,133,27,72,214,-108,160,77,131,226,45,10,1,61,61,162,41,236,158,1,224,128,5,78,253,-0,54,207,20,0,48,193,148,239,26,2,151,155,170,34,131,23,92,103,100,-80,128,40,101,83,1,49,50,135,40,133,175,96,57,151,27,3,85,32,75,-51,128,15,0,51,246,24,0,96,2,105,49,195,36,137,124,228,241,4,234,-65,6,192,41,130,194,65,159,70,60,109,176,93,87,225,197,1,144,247,64,-112,150,167,234,221,0,193,33,93,31,195,103,0,49,223,46,1,52,49,194,-102,96,41,216,47,102,158,66,251,64,79,150,217,66,34,1,53,48,87,131,-163,4,226,63,1,64,36,149,125,163,110,195,73,100,127,224,237,9,224,16,-4,64,201,0,58,101,183,64,64,225,212,19,2,84,114,117,132,0,64,46,-144,209,224,46,19,3,70,97,108,115,224,47,1,208,234,156,74,229,103,1,-232,135,7,253,82,2,232,231,1,232,172,34,224,46,2,224,43,10,240,79,-36,66,187,234,26,2,224,47,8,252,219,0,133,136,224,37,0,225,132,1,-224,130,11,226,87,3,224,81,7,224,27,2,203,47,79,45,104,118,215,204,-225,5,1,229,255,3,129,71,64,40,248,170,13,230,83,5,219,197,224,231,-8,101,108,168,100,155,208,228,56,13,225,229,1,2,66,97,100,251,186,0,-253,143,2,228,71,1,65,252,0,54,97,252,206,50,129,26,161,252,224,13,-4,224,2,0,64,56,225,254,4,128,18,128,233,161,82,178,255,193,13,234,-124,8,108,138,96,0,192,34,225,169,0,192,14,128,139,132,20,68,46,232,-17,0,224,49,1,225,221,5,192,126,198,47,96,133,233,22,6,225,122,2,-192,2,164,215,224,69,3,97,149,165,83,90,9,128,60,192,23,109,28,164,-115,96,16,0,54,240,224,1,64,12,64,167,233,9,0,160,0,64,87,129,-42,233,146,1,64,19,244,221,6,65,31,0,66,245,183,1,225,46,1,97,-175,96,238,0,90,123,121,200,144,224,36,9,101,91,228,250,8,192,0,65,-251,1,50,32,102,211,165,212,130,11,254,218,2,225,77,5,231,193,9,240,-154,0,225,133,8,224,16,1,99,28,224,151,4,0,95,110,6,1,49,54,-69,161,226,160,1,94,79,232,182,1,224,81,17,233,63,3,128,95,65,74,-227,56,5,0,52,233,135,0,224,39,1,227,254,11,240,10,3,225,242,2,-230,89,5,242,204,2,229,176,1,70,17,161,136,236,95,6,101,177,200,39,-224,111,0,139,249,225,70,13,0,53,184,123,192,167,240,76,8,224,123,0,-128,133,167,28,130,131,252,200,6,64,97,167,247,165,241,224,0,2,225,10,-8,192,241,160,149,225,17,2,226,140,4,98,136,0,89,105,250,66,66,64,-31,251,150,13,64,49,229,109,0,194,148,225,254,2,161,158,226,119,24,96,-160,182,33,99,86,3,55,52,32,95,132,251,235,208,2,160,0,193,19,228,-151,3,225,193,5,234,58,4,242,32,5,129,71,0,89,192,13,160,212,132,-181,225,137,6,179,243,225,51,2,96,16,228,104,10,224,5,10,226,160,8,-245,7,2,224,85,1,128,1,226,167,1,228,159,5,224,100,0,239,4,5,-240,133,6,224,73,11,224,254,16,226,247,1,69,184,160,6,224,49,6,225,-200,0,224,91,1,141,117,224,249,5,130,147,250,149,0,224,10,3,98,138,-230,185,1,96,0,192,70,129,85,192,172,224,182,2,193,203,224,161,7,227,-162,11,248,5,2,193,190,224,193,7,236,45,14,243,209,2,227,118,5,227,-115,0,138,74,225,172,2,128,131,224,45,7,224,205,3,224,0,6,231,62,-1,253,72,0,80,108,3,54,32,95,54,96,83,161,71,133,198,107,51,0,-53,160,26,229,187,8,100,120,0,48,224,180,0,236,102,2,16,111,111,32,-109,97,110,121,32,97,114,103,117,109,101,110,116,115,165,75,224,49,20,2,-102,101,119,224,48,8,232,71,5,112,3,72,26,139,231,2,95,53,49,70,-81,96,145,140,240,64,27,139,201,100,28,227,244,10,134,139,225,47,4,190,-107,163,238,64,66,139,252,105,23,74,233,76,240,0,55,140,240,64,29,139,-169,0,75,161,70,232,156,1,162,155,224,11,8,194,59,138,95,224,13,1,-165,69,234,214,4,192,37,224,39,6,224,75,0,224,25,3,230,37,4,224,-34,8,170,79,224,69,2,160,88,226,2,0,224,23,0,224,105,3,226,50,-1,224,31,3,252,37,0,227,116,0,232,53,3,224,24,6,64,1,226,122,-0,224,154,1,192,92,228,70,2,160,23,162,177,192,8,72,216,72,170,147,-6,0,57,93,6,192,98,224,77,3,70,107,227,88,6,129,120,192,85,64,-71,0,51,69,180,0,83,96,82,0,52,64,10,219,10,231,16,0,192,95,-82,43,0,57,79,75,2,50,54,56,109,53,144,233,128,97,0,79,201,79,-0,54,66,111,239,114,2,128,61,96,57,192,81,137,94,240,109,8,229,55,-3,96,73,66,122,128,237,0,50,109,188,129,31,109,234,107,181,241,27,6,-224,71,1,71,236,0,57,66,154,196,110,224,25,15,129,18,64,107,142,236,-0,51,67,201,186,69,224,57,4,224,146,41,64,57,224,109,4,224,12,3,-224,38,1,225,176,2,97,173,160,112,136,47,96,105,1,56,48,167,74,147,-222,67,166,161,171,103,90,213,217,161,131,98,16,1,49,53,82,114,72,82,-3,51,50,52,32,160,33,170,212,106,99,128,11,160,211,0,56,115,235,0,-51,147,236,232,148,2,116,95,97,236,111,64,104,156,2,95,49,52,192,185,-2,85,32,75,202,180,0,50,180,77,64,228,1,54,54,105,28,228,25,3,-78,163,160,113,224,21,3,0,56,192,21,74,90,64,163,68,57,143,147,224,-39,3,80,119,196,87,175,140,235,105,27,234,5,0,129,158,233,253,2,230,-183,6,241,10,0,167,26,224,78,6,224,43,4,64,8,74,207,227,160,4,-224,96,4,224,46,8,195,117,192,13,96,11,192,8,230,126,9,233,108,24,-0,58,129,97,97,36,67,181,0,49,80,161,234,190,1,0,85,131,6,66,-197,113,80,142,223,161,230,128,61,144,97,234,16,0,134,224,225,75,7,211,-144,128,201,194,230,98,232,244,206,0,150,118,159,160,194,134,162,3,146,108,-65,193,176,204,184,27,64,6,64,5,66,80,0,51,98,161,2,49,54,54,-104,105,64,46,0,54,96,46,230,242,1,13,80,114,105,109,105,116,105,118,-101,115,46,61,62,34,128,82,134,215,128,230,245,121,11,0,85,224,164,26,-64,71,135,3,225,147,14,64,32,134,225,128,32,0,80,195,68,224,36,7,-134,232,160,34,139,189,0,80,128,167,130,200,2,83,32,83,162,170,166,93,-64,42,240,182,5,137,103,224,33,18,201,159,134,108,224,33,12,135,151,129,-249,0,83,98,245,224,30,4,98,25,163,23,236,172,6,230,29,0,226,246,-1,96,76,0,85,97,181,112,112,0,50,124,63,1,54,53,129,77,249,190,-2,65,187,225,246,0,233,210,0,160,115,161,139,162,140,224,72,0,97,143,-129,174,192,60,224,37,14,239,193,0,233,199,1,128,255,225,64,7,160,221,-236,225,7,64,54,224,90,15,131,81,224,90,0,225,3,8,128,83,0,85,-228,68,0,224,63,3,69,53,101,9,2,54,53,57,250,131,0,96,35,250,-217,5,1,53,48,187,165,160,96,225,150,8,0,49,178,44,225,150,11,227,-198,2,96,22,64,168,225,144,6,0,52,98,23,224,197,0,1,95,51,103,-121,128,42,128,0,226,83,18,132,171,128,20,225,81,8,100,41,192,178,224,-25,4,96,209,228,43,8,96,21,174,2,240,220,11,96,145,226,80,7,0,-54,251,173,6,226,89,17,142,168,224,16,0,130,227,225,73,4,142,204,224,-95,5,0,57,123,149,224,85,17,167,120,224,167,3,193,20,177,169,227,41,-7,224,52,0,226,130,9,225,48,16,103,22,227,98,9,129,16,225,226,25,-123,114,225,226,1,224,204,3,226,218,11,68,149,225,58,5,224,100,26,141,-233,224,100,2,227,113,3,228,50,12,96,66,249,61,13,9,100,115,69,70,-105,101,108,100,115,32,244,179,11,69,23,135,194,165,49,131,103,133,49,67,-77,96,25,69,73,67,83,0,85,128,22,215,16,96,198,238,69,0,3,95,-49,51,53,102,74,69,167,64,0,193,100,239,193,2,238,65,3,67,174,154,-243,72,219,238,140,1,161,30,224,42,2,64,83,135,51,224,245,4,64,138,-230,206,0,1,51,54,224,65,1,64,61,0,57,66,200,1,49,52,107,39,-64,40,0,54,224,179,0,212,114,128,11,145,224,96,130,151,213,225,62,6,-3,101,110,117,109,173,214,64,70,134,235,193,43,97,149,161,43,134,189,72,-1,199,190,229,24,10,102,89,224,26,12,134,82,226,177,13,226,178,14,194,-179,140,60,97,79,133,160,227,94,2,203,111,174,47,128,33,229,156,18,224,-36,4,229,132,9,96,191,0,85,99,137,224,37,0,228,181,17,98,74,224,-210,12,228,207,0,224,94,4,96,21,100,89,160,91,228,161,8,100,152,228,-65,7,224,136,1,238,214,3,228,16,11,228,98,11,192,24,228,98,0,1,-54,53,66,121,236,199,1,227,114,0,224,24,7,225,105,5,104,234,66,8,-200,165,0,89,222,229,192,143,185,239,239,26,5,131,69,224,170,10,230,155,-0,232,163,19,224,207,11,192,25,96,181,224,73,1,224,245,16,96,154,242,-14,4,225,83,0,205,100,94,162,249,154,9,166,88,161,220,254,200,5,224,-82,10,254,143,2,160,119,0,90,164,21,245,251,5,159,165,246,242,4,65,-114,255,198,4,128,119,149,197,160,71,96,4,239,3,0,0,90,64,127,77,-120,98,50,0,75,65,184,239,27,0,129,231,130,75,0,64,89,12,224,27,-3,64,0,227,65,13,225,237,9,97,238,189,2,65,219,208,162,247,19,0,-230,93,4,224,235,9,97,92,246,104,6,96,222,226,199,1,226,41,1,160,-9,130,4,226,55,2,253,195,7,101,62,97,181,1,52,57,255,199,3,100,-226,148,78,128,71,78,220,90,12,224,56,1,169,17,182,193,232,84,8,194,-51,236,128,1,165,221,162,225,141,118,0,57,88,153,243,234,0,230,168,8,-243,76,16,91,93,13,115,101,99,116,105,111,110,32,102,105,120,105,116,121,-243,126,2,2,53,48,50,248,232,3,1,36,120,128,27,147,104,0,56,106,-60,161,142,139,228,215,103,195,107,225,145,14,128,30,225,149,6,195,108,70,-15,0,55,64,210,209,126,195,14,135,158,134,60,225,187,4,96,29,96,170,-224,152,3,224,182,9,225,228,57,128,203,225,227,6,162,96,99,163,214,19,-227,160,0,161,212,225,214,16,160,84,239,36,2,100,60,224,21,6,224,60,-30,64,58,249,243,8,85,151,226,28,4,128,174,227,251,4,225,115,9,224,-0,1,226,57,87,233,6,1,232,213,12,73,12,64,0,224,215,3,225,152,-6,194,31,236,116,2,96,228,65,23,246,183,0,148,125,224,100,5,197,31,-225,73,0,161,75,224,13,0,251,177,7,227,86,7,128,21,132,242,160,14,-100,7,146,123,228,91,1,100,4,1,49,54,122,97,64,7,237,15,1,199,-143,193,172,96,8,66,96,64,42,96,142,191,36,227,211,7,0,58,98,132,-104,251,96,51,226,204,10,102,232,224,13,5,160,174,128,2,160,14,227,9,-13,0,89,225,21,3,103,85,225,10,3,129,78,241,55,0,64,5,71,47,-128,58,131,97,129,18,245,96,0,128,36,96,117,166,100,73,59,1,52,57,-65,34,147,51,96,5,255,31,0,224,184,2,224,2,3,192,29,192,130,199,-159,224,2,0,214,99,225,154,0,238,110,3,99,222,129,142,0,85,81,22,-129,32,161,5,169,155,128,58,65,249,224,7,7,101,161,227,35,6,224,9,-0,224,165,2,250,112,2,160,252,96,86,224,210,6,96,17,194,47,64,92,-65,225,182,22,161,4,225,107,0,226,189,2,224,229,3,160,99,183,172,224,-113,2,97,24,1,85,32,71,100,224,72,2,162,15,96,35,232,86,7,225,-235,3,193,91,248,3,0,224,26,3,224,143,4,219,115,225,173,15,129,10,-224,66,9,226,132,0,224,127,14,224,106,0,96,170,224,35,21,128,1,169,-114,192,0,233,236,1,96,2,128,178,226,154,0,160,14,224,50,4,224,88,-15,0,67,98,56,224,0,3,224,234,14,224,2,3,224,246,0,64,0,228,-130,9,253,106,16,193,217,128,122,225,231,0,130,35,128,181,2,95,49,51,-97,212,227,129,0,147,226,71,128,0,64,155,106,224,227,0,85,138,224,42,-6,116,116,1,54,52,102,8,64,44,190,164,64,65,192,22,64,8,232,54,-0,224,125,1,162,84,253,127,1,226,232,5,224,173,2,225,74,2,161,98,-192,44,224,62,4,128,166,225,32,6,224,181,12,252,111,1,96,223,225,13,-0,96,186,225,13,23,224,225,13,91,162,224,220,2,227,13,8,160,190,227,-166,13,96,16,154,1,170,237,252,120,3,8,95,52,48,57,32,95,52,49,-49,105,9,231,2,1,28,97,109,98,105,103,117,111,117,115,32,111,112,101,-114,97,116,111,114,32,101,120,112,114,101,115,115,105,111,110,167,57,226,92,-10,161,83,96,127,64,228,129,57,96,21,224,244,1,88,229,225,33,2,224,-213,10,224,176,42,9,98,97,100,32,112,114,101,102,105,120,224,168,11,228,-251,2,3,95,51,50,50,239,186,2,14,92,34,115,114,99,47,77,105,99,-114,111,72,115,47,70,104,25,9,46,104,115,92,34,44,54,53,58,55,192,-64,219,20,250,38,4,97,214,171,45,170,236,1,95,55,71,45,204,158,163,-65,129,28,247,210,1,0,52,76,104,0,54,81,135,192,0,0,80,89,136,-79,87,96,167,165,234,1,64,89,100,83,64,230,229,40,3,233,85,1,177,-23,69,226,64,79,185,111,64,45,138,56,128,113,96,122,192,115,202,147,1,-54,52,85,10,254,129,5,1,49,54,238,181,2,208,47,64,229,169,168,171,-247,100,96,64,139,198,147,64,34,0,80,192,180,130,138,193,200,96,183,242,-170,1,128,7,193,62,224,63,3,225,28,0,224,34,1,225,7,1,161,29,-186,231,160,21,72,81,146,98,77,206,99,34,0,35,152,189,64,197,184,189,-104,211,106,18,81,180,225,244,1,5,110,101,103,97,116,101,97,220,64,48,-0,54,96,48,1,65,32,64,11,145,187,0,90,65,66,64,14,145,176,0,-75,96,26,207,179,193,19,132,27,171,71,64,32,223,62,0,65,128,59,140,-101,2,95,52,56,99,6,139,15,143,156,64,178,156,79,110,34,206,41,128,-24,64,11,252,123,0,224,24,9,160,49,142,113,1,95,51,74,235,164,42,-64,115,202,159,0,89,165,162,98,62,227,167,2,225,163,1,240,77,11,227,-183,0,248,140,20,79,190,162,41,226,152,13,128,41,244,106,14,10,103,101,-116,65,112,112,67,111,110,58,32,244,107,11,160,99,167,33,0,85,128,191,-64,218,67,88,211,156,2,55,50,53,225,246,1,253,54,7,202,174,3,67,-32,95,55,211,217,74,203,65,154,0,50,65,200,64,52,192,73,235,194,9,-127,160,193,50,101,125,123,1,1,54,51,66,152,64,61,0,54,138,199,123,-236,224,214,1,3,118,97,108,117,98,81,224,18,1,2,116,121,112,130,99,-224,18,1,3,107,105,110,100,224,18,6,3,115,111,114,116,64,18,64,90,-244,56,1,245,51,25,102,83,129,105,224,12,1,2,95,49,54,184,236,109,-38,75,138,236,196,5,164,154,131,115,238,207,7,66,199,139,250,85,23,236,-252,5,128,160,180,191,228,12,0,68,224,170,204,233,241,4,162,52,128,59,-231,49,0,226,84,19,128,145,159,157,64,129,234,84,0,194,96,226,94,0,-247,238,4,90,150,197,72,224,43,10,206,67,224,96,0,140,229,65,38,194,-38,98,166,225,142,2,9,101,116,83,76,111,99,69,120,112,114,196,31,65,-13,81,189,96,245,210,78,129,97,0,50,197,211,96,78,128,98,0,54,119,-173,224,98,0,192,20,131,207,128,20,64,84,252,130,1,235,189,7,196,82,-96,38,208,170,179,6,64,35,164,110,64,102,96,26,129,8,0,56,104,136,-0,58,128,97,160,89,241,130,0,96,83,200,134,237,76,1,64,8,3,95,-54,55,54,221,116,193,204,228,41,1,224,12,1,224,25,0,3,95,53,50,-50,67,130,129,64,96,19,177,225,224,25,4,163,124,160,6,67,180,64,8,-65,1,199,227,199,229,128,10,228,37,5,9,117,110,100,101,102,105,110,101,-100,32,135,130,97,110,103,106,224,42,8,196,71,0,56,233,18,0,98,135,-140,105,96,228,72,67,237,187,3,128,33,224,126,0,192,13,224,86,5,233,-1,1,168,4,165,28,167,240,224,49,10,160,136,168,27,128,39,160,149,160,-14,2,79,32,35,65,247,103,166,98,21,73,232,128,33,71,236,0,80,104,-1,232,56,1,194,18,232,61,0,95,124,234,237,4,128,0,160,220,65,251,-217,117,228,154,3,1,91,93,96,151,224,229,2,4,79,32,35,57,49,238,-24,0,225,194,1,224,219,0,166,62,1,80,32,233,110,5,64,55,0,51,-244,13,2,224,82,2,224,40,8,232,143,1,163,154,224,97,3,128,0,64,-176,133,139,0,83,66,91,3,95,54,53,57,68,230,5,48,32,64,95,55,-57,75,2,1,52,57,144,75,64,13,106,44,0,83,65,203,192,175,71,216,-107,41,64,49,0,35,71,197,97,85,0,56,64,121,1,95,56,126,135,128,-99,0,54,195,191,203,184,241,84,5,1,52,55,66,21,128,203,113,81,238,-195,4,236,3,1,241,198,7,98,205,0,49,131,55,231,97,18,1,95,52,-145,180,225,47,0,229,219,5,1,54,50,230,248,1,129,38,103,129,224,111,-6,96,53,1,49,52,191,92,226,233,0,231,125,1,161,97,224,17,6,251,-76,5,96,20,64,254,1,51,54,70,79,156,86,192,158,229,59,0,134,58,-127,36,234,32,4,226,239,8,21,110,111,116,32,112,111,108,121,109,111,114,-112,104,105,99,32,101,110,111,117,103,104,163,5,67,240,74,161,2,95,50,-54,83,141,236,174,1,230,118,5,107,51,1,48,51,97,204,0,51,64,41,-196,136,224,42,9,97,202,135,33,167,17,1,54,32,128,93,1,49,54,122,-230,64,15,1,49,54,92,131,231,43,0,64,50,134,179,90,143,0,90,160,-47,0,56,191,108,64,29,133,219,106,93,64,14,133,149,66,89,0,51,88,-162,130,218,1,49,54,90,248,224,248,1,3,66,111,111,108,198,28,66,206,-1,10,65,225,21,2,4,68,97,116,97,46,64,33,6,95,84,121,112,101,-46,34,128,87,253,62,4,106,226,156,17,0,49,133,172,135,64,226,50,1,-2,49,52,49,66,21,65,137,0,53,64,59,2,95,49,55,124,220,226,165,-22,221,65,226,222,4,0,53,226,126,0,194,92,194,95,226,27,3,130,189,-226,25,4,64,134,65,61,203,135,64,66,163,68,64,5,224,101,2,96,167,-73,160,226,49,5,227,23,4,143,46,227,66,3,232,25,1,226,177,1,164,-255,64,182,0,54,128,117,227,104,0,229,170,0,246,14,14,173,8,103,225,-228,120,0,97,163,67,163,168,182,128,229,227,200,5,128,83,1,54,49,205,-6,99,210,0,85,102,237,97,147,0,32,163,34,224,123,8,143,171,65,169,-64,53,129,101,244,247,8,64,183,2,10,65,32,229,223,11,160,141,131,206,-131,119,0,48,105,122,1,49,54,187,160,128,65,0,54,192,190,0,79,101,-66,3,49,50,49,53,220,99,64,42,66,41,0,75,130,77,131,30,160,151,-0,50,193,20,75,42,96,45,64,126,128,10,64,44,131,24,234,105,11,0,-52,127,200,128,240,226,36,1,65,147,67,109,174,38,96,176,226,3,3,228,-215,6,64,127,225,94,0,224,98,15,231,86,0,226,145,9,129,110,64,114,-107,203,230,56,0,225,134,8,149,187,161,43,131,207,224,111,15,72,19,129,-205,224,217,8,137,192,224,56,9,0,53,124,215,195,31,226,57,2,129,186,-247,198,2,234,102,0,224,40,5,64,123,225,10,3,235,118,6,64,255,64,-193,76,198,132,150,128,90,224,64,1,111,139,98,161,96,150,240,137,3,160,-6,0,85,230,55,1,225,66,3,193,61,239,189,0,226,202,2,225,109,6,-2,95,51,54,224,112,0,95,92,1,52,54,72,153,192,144,96,234,255,97,-0,225,141,1,225,229,0,251,194,9,224,19,5,194,52,65,161,197,98,172,-9,100,83,64,161,225,32,15,235,16,2,160,33,154,167,228,92,5,164,98,-225,64,1,224,28,10,228,181,5,225,224,0,0,54,224,180,3,204,206,192,-49,235,50,0,64,2,224,39,1,128,136,128,1,226,193,1,64,205,233,58,-0,169,229,195,238,64,147,229,178,1,160,64,136,45,160,59,165,110,164,243,-246,240,6,224,117,6,224,150,0,228,203,4,96,137,64,74,129,10,129,229,-0,52,77,181,153,35,224,152,22,136,65,64,143,142,9,224,132,4,65,235,-134,21,238,24,3,111,158,177,155,96,0,225,62,6,245,100,8,163,172,129,-55,201,45,160,9,128,147,162,232,155,153,235,211,4,128,1,154,244,129,226,-232,232,1,192,2,244,129,3,224,32,0,201,195,237,14,0,192,99,228,87,-3,224,26,0,96,115,218,16,234,176,3,224,131,1,176,158,224,84,1,224,-133,1,224,219,0,128,192,160,203,224,92,5,163,243,251,116,1,97,68,97,-151,3,95,49,53,52,252,190,0,131,48,136,97,0,79,75,141,0,54,73,-74,102,33,1,50,48,163,225,108,16,64,28,203,14,137,65,2,95,56,52,-102,36,137,7,64,39,65,175,224,39,16,0,53,81,63,96,39,108,74,224,-39,17,141,49,64,8,64,21,224,39,18,142,4,1,49,54,76,22,160,205,-96,194,68,70,178,220,1,53,57,64,116,199,171,64,234,137,38,227,115,1,-64,26,129,113,250,55,5,130,89,161,163,225,249,2,160,43,96,17,226,105,-2,128,1,227,250,10,67,26,128,0,224,38,1,230,25,6,0,54,112,146,-96,0,232,252,2,236,31,8,233,115,13,230,221,0,224,51,35,224,139,0,-229,212,14,0,54,66,1,224,145,0,227,112,3,164,160,224,63,1,169,59,-195,69,64,10,65,191,228,212,3,225,86,3,225,102,1,225,15,2,164,37,-229,85,6,134,82,224,41,6,131,0,251,5,0,64,19,229,66,4,224,106,-0,227,52,13,185,31,117,176,165,9,224,11,3,224,191,1,207,199,128,60,-225,70,3,105,67,231,147,7,234,180,13,2,95,49,52,192,51,128,1,230,-195,6,192,253,130,71,64,122,204,153,224,42,5,64,13,0,57,137,107,0,-67,105,107,1,57,56,233,158,0,248,49,2,192,0,160,186,84,246,0,57,-105,135,0,48,209,175,67,173,64,71,206,194,163,68,64,34,138,192,225,237,-3,229,247,4,229,12,3,108,62,131,89,64,18,0,79,64,80,254,4,0,-225,193,4,225,141,0,64,1,133,85,224,71,13,65,5,0,79,97,152,254,-77,1,0,90,76,43,0,51,96,131,228,169,0,65,155,244,30,0,64,166,-230,211,0,111,223,135,237,226,179,2,225,124,1,160,29,180,21,163,112,226,-30,0,243,209,3,224,28,3,64,179,243,25,0,129,132,160,225,64,173,0,-80,240,127,4,224,74,10,168,220,224,73,37,160,215,200,132,224,204,182,99,-219,132,104,247,190,4,1,95,51,108,85,131,62,131,168,160,118,224,40,14,-224,120,0,195,213,160,48,2,95,49,51,84,17,99,57,128,15,79,227,81,-245,199,88,228,158,1,228,168,2,128,0,96,187,163,65,66,94,0,54,235,-219,14,1,54,48,64,253,88,113,234,196,3,171,142,224,178,9,227,187,1,-152,92,235,183,0,179,109,165,165,97,64,224,12,4,192,4,193,124,64,121,-99,168,2,51,53,48,135,155,114,187,105,112,112,141,128,15,224,24,6,224,-0,6,1,95,56,99,196,64,223,215,254,131,64,64,93,132,95,97,56,230,-188,17,128,32,65,91,198,25,166,56,2,95,56,57,96,137,2,49,52,49,-83,88,168,137,96,106,237,251,0,2,49,51,53,155,35,0,56,71,168,3,-49,54,48,50,89,71,143,11,64,40,173,79,5,56,49,48,32,75,32,65,-84,193,40,224,118,0,224,1,7,235,37,2,224,37,16,224,35,4,224,32,-23,224,29,20,224,26,17,224,23,14,224,20,11,224,17,8,224,14,5,65,-36,229,197,6,65,26,215,193,0,89,165,77,97,184,108,204,232,137,1,167,-59,192,79,138,55,231,217,2,96,13,230,159,2,227,212,5,161,176,224,62,-0,133,164,224,173,1,171,10,224,65,3,224,68,9,206,84,224,55,9,195,-171,64,62,96,233,166,27,132,215,164,25,199,149,233,228,3,176,172,155,120,-96,17,102,189,93,144,230,35,3,224,0,3,138,240,1,52,52,152,53,128,-8,65,68,138,220,74,252,1,75,52,115,162,64,1,0,75,227,39,0,64,-34,138,20,243,97,6,5,67,111,101,114,99,101,128,6,2,105,98,108,91,-104,0,58,135,48,231,40,1,161,134,168,211,128,250,206,59,96,11,225,119,-15,234,21,10,225,106,0,128,1,193,200,224,30,10,224,85,16,234,71,0,-224,85,22,231,132,2,65,127,104,127,75,161,69,27,216,192,128,0,167,160,-64,248,136,33,225,36,6,84,129,13,76,105,116,115,46,75,110,111,119,110,-83,121,109,98,116,184,64,47,183,119,225,40,140,194,246,225,40,76,0,54,-163,181,64,1,241,237,11,169,228,192,105,224,34,2,224,44,2,0,50,89,-198,0,83,163,58,242,181,10,0,50,138,200,67,37,133,87,0,52,71,234,-165,87,101,108,158,177,2,64,35,49,102,187,230,149,4,101,177,238,24,1,-225,40,0,161,37,134,28,187,77,241,97,1,199,136,224,185,0,129,50,225,-225,5,233,133,0,224,5,7,209,56,192,60,192,1,235,252,1,224,28,8,-224,149,5,228,109,8,224,77,11,225,199,0,64,0,164,108,224,2,4,192,-108,224,52,5,229,187,12,64,22,236,105,0,224,77,13,224,56,9,226,114,-3,102,245,156,157,224,36,1,224,58,7,224,17,8,224,14,5,192,157,133,-15,0,53,91,28,64,6,227,22,2,236,41,17,108,89,243,199,5,96,0,-226,185,0,224,143,74,101,81,99,10,115,130,86,24,72,21,0,75,66,192,-159,114,101,135,192,12,64,43,255,242,1,192,2,241,214,11,162,63,224,38,-3,128,2,67,143,237,55,1,192,159,224,168,0,64,157,162,242,226,202,9,-192,47,128,109,225,187,5,193,8,128,8,64,120,128,126,166,202,161,236,66,-218,0,95,250,224,0,239,138,1,238,6,11,224,205,0,238,7,12,235,73,-0,225,151,1,224,84,0,64,102,68,124,129,117,0,48,99,234,209,218,128,-165,75,120,64,182,181,232,96,72,231,36,1,224,116,8,224,110,2,162,168,-226,42,1,224,51,2,138,175,128,7,160,221,3,95,49,52,48,242,62,1,-96,71,251,180,5,31,77,117,108,116,105,112,108,101,32,99,111,110,115,116,-114,97,105,110,116,32,115,111,108,117,116,105,111,110,115,32,102,111,0,114,-222,197,128,131,1,53,53,138,65,0,53,239,131,0,130,21,138,22,255,100,-1,96,217,130,185,69,17,128,47,101,9,4,56,49,32,95,53,156,105,0,-56,64,220,75,115,64,65,201,61,225,150,3,0,83,100,72,129,215,141,66,-160,93,173,106,228,111,10,173,66,64,173,236,247,2,248,241,1,230,6,1,-139,236,226,85,0,117,16,226,195,4,181,25,224,19,4,228,255,1,227,121,-3,160,2,160,26,227,24,3,227,27,18,96,12,246,230,1,163,6,162,72,-160,244,66,27,0,48,76,188,245,80,0,192,68,201,250,227,91,5,173,47,-96,101,161,30,66,41,97,104,224,104,4,161,101,181,215,0,39,157,8,64,-110,0,56,152,63,233,177,4,165,164,65,165,137,158,195,75,198,70,141,232,-96,71,67,72,1,53,56,98,109,139,7,227,127,1,193,200,128,232,160,15,-131,194,224,202,1,231,190,0,141,103,64,1,224,83,3,96,162,224,205,1,-97,42,128,157,144,126,174,90,161,237,110,2,224,21,0,227,53,7,128,93,-236,187,2,236,198,4,64,104,96,58,138,161,192,139,97,39,128,134,160,24,-65,22,253,206,1,161,153,193,33,192,197,209,161,192,198,224,99,1,104,101,-224,21,0,134,133,3,49,53,56,53,98,179,64,235,226,185,1,238,255,3,-192,0,192,174,224,98,7,64,7,244,63,5,132,154,225,97,0,224,142,3,-192,139,64,48,64,11,252,156,9,128,205,193,149,131,89,248,147,6,70,36,-244,136,0,224,151,2,225,132,5,224,28,4,64,79,181,150,227,246,3,163,-139,128,35,195,133,160,49,163,78,64,11,224,147,5,227,76,0,234,26,1,-215,230,227,28,9,227,5,9,194,250,224,0,0,225,139,2,232,18,1,65,-236,65,247,79,2,97,164,192,74,64,66,64,27,139,118,121,245,129,253,100,-176,229,154,7,195,229,96,197,128,209,228,46,0,163,86,225,36,1,166,182,-146,62,197,117,228,96,3,224,46,18,229,165,0,193,252,192,121,160,46,224,-44,5,242,154,37,64,31,1,95,55,96,23,8,67,32,95,54,55,54,32,-95,53,235,169,0,210,41,128,69,144,113,160,23,224,90,8,199,220,0,85,-104,120,224,174,6,227,63,1,224,168,1,195,255,224,73,8,192,24,149,227,-162,234,167,129,229,239,2,64,104,128,12,149,117,252,216,1,97,195,255,160,-1,135,199,231,121,1,228,160,2,228,232,5,224,42,8,226,169,0,227,119,-1,98,132,228,3,3,128,222,229,35,1,197,177,85,38,225,78,2,129,169,-200,109,128,11,250,146,5,228,38,3,129,62,224,8,4,128,25,64,217,0,-54,226,157,1,128,147,98,254,125,223,160,59,224,22,2,224,25,6,224,26,-6,224,29,7,199,136,192,37,192,183,128,11,224,196,0,243,208,4,64,146,-202,122,151,166,82,228,128,170,210,144,227,72,0,134,201,2,49,53,56,193,-139,66,87,0,53,159,73,64,48,136,129,112,56,68,133,64,18,136,82,65,-157,96,71,192,145,228,66,0,227,112,5,128,29,227,109,11,252,189,0,245,-212,27,128,154,227,55,5,237,140,7,100,162,130,23,225,251,9,227,76,6,-161,57,229,66,4,228,209,4,216,145,225,246,0,224,131,8,105,178,245,152,-7,169,25,212,208,224,50,35,194,183,116,148,82,5,0,57,155,192,160,47,-229,238,8,160,157,242,93,7,225,72,10,235,98,4,224,144,4,224,96,3,-225,70,4,192,41,226,102,2,224,58,20,224,35,0,233,65,4,226,185,8,-227,169,4,160,101,232,108,1,224,19,0,199,9,225,68,12,103,135,225,68,-9,225,63,9,189,42,225,63,19,66,207,137,124,1,95,49,160,28,1,85,-32,160,49,77,83,80,84,167,249,224,62,2,64,53,136,155,229,138,0,86,-120,0,56,99,99,0,55,179,28,227,200,1,83,107,96,151,0,67,193,150,-96,245,2,83,32,95,205,51,64,232,202,141,202,37,4,95,49,50,53,53,-99,121,0,85,115,173,0,85,225,5,10,150,108,86,47,2,95,56,54,110,-80,64,135,76,138,86,184,106,122,0,52,169,186,0,55,158,82,192,0,0,-83,104,12,65,61,168,9,129,138,231,52,5,196,101,238,12,1,76,106,0,-55,229,66,1,65,34,3,55,32,95,54,96,140,73,195,1,95,54,158,225,-130,2,228,153,3,166,39,65,32,199,205,5,80,32,95,51,52,51,237,53,-2,18,109,105,110,105,109,117,109,58,32,101,109,112,116,121,32,108,105,115,-116,205,37,2,95,51,54,77,239,0,54,104,77,64,68,134,78,130,115,238,-74,5,192,19,133,217,131,212,166,243,224,13,1,99,220,194,226,166,203,128,-8,0,54,65,53,0,49,64,95,160,226,96,27,96,249,69,13,8,95,49,-49,50,52,32,79,32,35,64,232,203,207,240,95,6,64,159,0,54,96,159,-244,41,20,1,78,97,64,222,64,44,133,174,162,37,97,57,140,3,132,191,-206,244,163,84,128,187,229,98,1,68,222,183,18,64,174,0,52,101,239,1,-53,55,64,253,192,7,193,19,67,125,243,136,6,168,26,192,91,99,141,224,-9,0,97,246,103,10,0,55,106,131,240,62,11,128,45,253,40,3,97,52,-254,29,77,1,52,54,228,111,1,254,29,45,226,49,25,224,115,1,224,69,-3,224,68,1,226,67,0,80,110,228,194,0,111,153,192,101,254,125,4,201,-7,65,232,241,230,4,129,106,0,83,169,85,97,192,133,36,191,139,65,118,-172,116,96,7,192,220,252,79,74,225,126,1,177,125,194,111,160,65,188,210,-192,252,252,225,8,128,237,252,71,3,98,49,104,58,224,125,4,135,184,146,-248,68,219,251,47,0,64,49,136,89,131,6,226,82,21,163,183,226,72,9,-225,220,8,231,199,0,226,48,19,138,102,0,66,129,240,196,201,228,13,0,-196,211,68,194,226,6,1,64,176,198,58,3,52,53,50,32,64,15,134,20,-227,102,10,67,148,64,95,246,195,1,64,20,95,216,162,162,253,83,2,4,-95,49,53,54,53,235,61,1,3,58,49,53,54,134,82,64,179,252,71,5,-0,52,65,71,252,71,1,0,53,79,69,229,21,0,227,239,12,0,52,199,-122,194,197,237,230,6,96,54,247,105,3,242,242,1,64,149,235,30,0,76,-165,225,125,1,161,142,224,55,2,64,46,69,250,227,207,6,64,163,197,185,-224,204,7,1,53,52,224,204,6,0,54,160,40,190,55,226,18,5,67,36,-98,170,229,8,3,143,174,103,85,99,70,128,95,251,42,1,64,100,163,89,-132,72,64,102,133,124,234,181,0,226,118,3,180,107,1,53,53,71,86,180,-107,129,35,224,140,5,143,217,229,29,3,161,215,128,153,201,159,0,64,193,-108,238,183,3,224,7,3,241,44,4,233,135,0,199,137,237,144,6,224,38,-7,231,191,0,192,52,243,199,10,160,57,160,47,233,173,1,224,63,5,224,-64,3,144,57,252,233,29,96,67,172,203,134,57,200,48,169,138,1,49,53,-238,203,1,198,113,226,109,4,102,107,65,181,224,0,9,162,99,1,49,56,-64,45,104,212,236,247,5,160,194,224,80,5,65,232,128,175,64,9,226,89,-0,133,134,0,75,227,36,15,0,54,128,164,128,81,64,15,238,35,13,64,-73,132,228,227,106,18,226,190,0,243,8,8,98,253,225,125,4,227,8,11,-232,194,8,128,42,192,131,160,134,133,57,97,61,64,118,1,75,50,106,76,-64,25,132,162,227,59,7,229,75,2,74,61,233,238,3,196,21,224,103,3,-64,86,246,239,1,231,203,3,134,186,134,198,224,170,1,162,206,128,13,129,-233,64,52,224,33,16,128,27,128,113,236,113,0,232,252,1,226,160,64,224,-219,4,237,47,4,250,229,0,192,49,232,136,10,64,58,202,55,177,133,2,-32,95,57,124,89,130,183,232,39,5,247,22,4,128,10,160,16,224,149,5,-224,165,1,224,117,8,224,249,2,243,211,1,192,16,128,123,1,95,55,162,-224,226,38,2,168,154,243,253,2,234,238,0,161,42,207,36,138,90,246,167,-0,70,199,128,73,224,17,6,135,39,0,95,70,137,128,59,149,243,201,25,-0,51,135,32,0,95,71,1,1,95,50,126,25,64,237,224,253,0,64,123,-234,124,11,108,154,128,247,1,53,53,82,202,0,67,139,232,3,95,56,57,-51,67,199,111,4,201,241,98,206,214,18,227,111,21,0,90,225,80,2,227,-102,32,192,30,193,237,227,99,6,64,159,227,99,4,0,51,107,187,64,195,-71,243,2,56,49,53,72,2,66,3,167,129,235,109,17,192,154,1,53,53,-171,85,1,53,53,65,64,64,62,0,54,195,174,162,158,128,9,207,219,160,-10,160,13,227,123,0,202,60,224,228,3,192,13,241,101,9,131,236,99,234,-162,82,195,254,192,23,224,71,1,245,4,5,230,197,2,226,183,4,230,160,-8,227,129,0,226,220,4,163,132,199,177,160,186,224,112,5,224,98,62,230,-135,2,160,217,225,48,4,64,32,2,95,49,51,65,125,174,151,192,95,192,-131,225,44,3,92,220,0,54,94,196,131,216,242,84,0,225,161,1,65,226,-66,182,192,34,164,27,242,73,8,224,22,13,224,174,0,192,121,193,235,224,-44,13,224,198,0,233,186,10,243,74,2,232,12,3,225,63,18,225,57,5,-224,136,37,224,102,2,232,112,22,224,99,2,128,94,64,5,225,167,5,224,-55,12,224,56,5,192,155,118,251,131,51,225,126,0,160,14,224,0,2,160,-199,163,208,128,59,148,8,173,95,229,32,1,2,32,95,56,75,242,134,223,-2,95,56,55,101,132,131,156,96,70,253,221,6,1,105,110,93,214,19,105,-115,116,101,110,32,116,121,112,101,32,101,113,117,97,108,105,116,121,32,208,-174,101,65,0,50,139,204,125,219,224,67,8,1,32,126,128,44,192,32,160,-0,64,233,141,144,1,83,32,66,154,194,129,195,182,211,209,224,251,0,225,-53,5,96,22,252,103,0,225,246,16,193,83,164,62,96,103,143,233,0,54,-85,35,137,173,227,27,0,1,64,64,77,12,102,9,78,209,66,6,68,170,-139,55,64,26,0,57,76,160,2,95,49,48,68,235,64,25,214,101,233,20,-25,234,248,1,229,170,47,224,194,1,229,172,4,137,151,233,16,3,65,19,-64,25,137,42,2,95,49,51,64,233,1,49,52,73,193,64,22,169,39,160,-50,96,207,239,247,2,64,33,198,122,0,89,199,251,224,2,0,133,37,224,-21,7,224,24,1,229,169,4,224,28,8,224,55,10,64,2,224,29,21,229,-241,0,64,0,193,47,225,55,1,192,25,96,42,232,240,2,192,57,224,99,-6,224,39,9,233,133,0,224,57,4,224,148,3,229,194,2,192,23,224,129,-1,162,172,96,8,160,5,3,95,49,50,48,232,214,0,224,178,8,226,44,-13,227,210,4,229,119,3,192,126,230,39,11,165,151,224,24,4,234,43,3,-3,32,64,95,55,252,124,1,228,83,2,224,8,0,128,54,239,16,15,160,-79,0,95,78,127,64,21,100,51,163,23,228,81,2,1,49,50,66,180,129,-28,101,53,3,95,55,50,54,110,37,0,50,78,131,2,95,56,48,134,43,-64,15,108,211,164,111,226,199,1,225,25,0,234,20,5,226,4,3,201,231,-225,162,7,225,179,0,193,198,227,32,0,162,214,233,155,0,192,100,192,1,-199,65,225,162,11,108,192,224,28,26,128,123,193,158,128,30,224,19,0,231,-247,5,224,75,13,239,131,4,224,36,16,238,10,1,1,95,52,228,26,0,-64,0,225,15,2,226,199,9,226,50,8,97,232,224,97,6,242,109,5,224,-30,8,232,102,8,224,89,2,192,234,221,32,194,67,176,62,118,92,248,131,-1,192,28,95,228,235,62,2,231,55,3,139,138,128,10,171,143,96,94,64,-50,178,171,171,137,224,84,5,192,90,224,199,16,239,63,1,192,17,226,60,-23,224,0,1,192,49,129,245,224,83,3,225,148,11,225,252,0,225,26,0,-225,93,6,224,64,1,237,169,0,225,87,6,225,84,5,102,27,2,49,53,-52,64,191,1,95,56,160,69,225,69,9,234,36,1,145,201,103,146,124,204,-224,152,0,224,21,2,173,173,185,136,167,69,142,250,128,14,153,160,89,90,-180,227,70,39,242,59,0,191,181,227,250,12,131,243,121,211,203,242,166,86,-64,92,112,139,253,80,7,97,8,225,53,1,193,139,232,8,7,128,179,64,-23,134,82,224,31,6,173,97,64,231,232,3,0,251,21,3,241,185,6,233,-127,4,246,37,8,96,33,96,90,241,122,3,231,204,0,182,60,234,34,2,-246,13,1,64,7,172,216,199,62,65,50,1,49,52,154,150,227,177,0,247,-83,0,213,140,229,161,1,225,27,2,186,179,224,182,0,224,50,0,160,150,-224,13,0,131,114,136,220,161,142,250,193,3,2,95,49,49,233,124,2,99,-106,0,54,162,59,87,116,1,32,95,85,249,4,95,51,50,52,32,162,74,-64,62,1,55,52,128,23,225,124,0,64,139,192,107,3,95,56,52,53,233,-229,2,1,36,120,105,228,65,0,0,54,97,0,98,102,1,75,52,96,2,-131,29,64,27,137,74,242,143,16,118,61,224,213,1,1,53,52,96,57,224,-240,2,129,112,64,73,233,122,31,126,114,192,80,239,34,51,236,16,3,64,-128,137,120,3,95,56,49,48,124,185,192,82,224,1,3,230,41,2,224,114,-0,224,1,7,232,154,1,224,37,17,224,35,4,64,197,197,3,64,135,243,-17,7,131,222,64,25,137,233,0,85,65,127,161,136,131,248,64,27,189,213,-108,34,106,3,125,69,3,58,49,53,51,131,233,225,217,1,3,97,100,105,-99,187,190,64,34,125,241,0,73,162,218,141,7,195,74,140,107,91,210,91,-156,0,52,132,18,131,25,242,44,0,65,40,96,171,100,89,224,222,2,130,-223,65,98,227,114,3,68,140,224,48,16,160,46,100,213,225,15,0,64,38,-240,151,17,0,51,131,4,233,97,0,227,162,3,232,251,8,67,134,233,249,-5,192,126,238,112,1,175,226,160,154,228,145,4,205,121,224,32,16,173,155,-134,133,228,208,8,135,83,193,102,225,100,1,236,249,0,230,240,2,236,191,-0,98,244,161,230,224,58,8,165,7,0,75,64,231,224,58,9,162,233,224,-236,0,224,174,8,193,24,224,87,8,192,24,156,252,162,21,225,78,4,224,-159,2,133,96,197,196,228,171,0,138,168,224,151,8,99,67,116,178,69,142,-3,95,49,52,48,71,111,110,183,0,56,92,99,1,64,64,226,168,1,14,-98,97,100,32,115,121,110,111,110,121,109,32,117,115,101,142,161,96,0,156,-158,128,8,225,227,4,143,80,147,212,66,59,0,54,229,187,0,133,132,160,-158,194,34,225,34,0,148,80,0,85,250,213,0,236,248,8,172,242,130,47,-97,73,203,193,226,53,3,224,2,0,224,45,8,225,119,4,236,28,0,134,-32,236,22,1,160,197,224,51,10,162,90,64,29,224,46,0,231,89,15,130,-81,225,254,2,226,110,9,225,184,3,97,144,3,95,49,53,49,246,125,6,-240,186,0,194,1,74,110,128,5,0,95,122,168,226,146,2,68,31,97,144,-224,119,16,192,244,224,119,4,224,48,5,225,62,0,162,176,225,65,18,224,-169,5,227,146,18,195,145,240,78,8,232,31,5,230,86,0,64,12,225,195,-1,224,78,8,128,196,224,222,10,192,24,0,85,219,177,227,86,21,254,127,-5,224,197,0,224,47,11,192,30,242,73,2,116,7,242,217,1,224,69,4,-224,42,0,192,44,192,193,97,81,96,16,174,75,227,164,0,184,4,193,255,-224,69,5,192,49,242,232,0,230,31,8,227,140,0,224,169,6,129,225,195,-65,232,234,1,160,136,227,91,7,129,196,192,38,160,28,161,49,249,182,3,-128,129,148,181,152,64,235,70,0,224,66,4,65,179,233,245,1,0,52,81,-4,193,150,236,140,0,204,139,128,61,225,4,1,160,81,236,162,12,64,67,-235,39,26,235,141,7,0,75,135,112,137,47,0,85,71,188,0,90,224,1,-0,0,75,233,201,0,64,34,137,8,137,150,233,148,6,13,80,114,105,109,-105,116,105,118,101,115,46,84,121,112,133,17,64,50,136,186,129,237,195,172,-4,32,95,51,52,55,229,28,1,3,95,49,53,50,96,198,69,31,146,237,-95,130,103,89,147,176,164,84,225,169,0,225,230,6,128,83,231,129,2,237,-46,1,1,49,53,128,6,135,147,0,51,156,173,193,238,229,162,5,101,250,-67,79,129,153,64,58,66,59,96,40,65,109,136,192,126,180,0,53,112,159,-129,110,1,52,52,90,47,110,125,128,14,0,56,65,119,255,30,1,198,144,-98,124,129,84,238,62,8,64,241,137,65,161,91,139,66,64,22,211,32,0,-83,227,245,0,254,223,3,228,220,0,0,58,128,173,97,192,96,98,98,31,-0,54,107,82,128,29,137,79,106,234,160,196,75,91,64,25,136,197,226,200,-0,96,231,0,49,66,67,171,214,0,49,142,115,3,95,49,51,57,163,147,-229,90,0,1,55,54,139,213,101,186,64,75,0,54,169,181,102,131,228,173,-18,128,72,224,32,18,165,148,232,210,25,224,33,19,203,129,228,191,8,224,-25,0,0,85,232,194,17,128,95,0,85,224,60,0,161,107,192,237,224,51,-12,214,43,98,9,182,170,224,45,5,232,239,13,132,164,230,11,10,192,24,-198,11,192,7,224,40,8,246,131,5,66,47,74,176,195,119,224,12,2,4,-95,49,51,56,52,105,53,1,49,53,112,236,247,153,5,224,176,0,253,103,-2,104,125,224,199,0,167,228,225,112,12,225,145,23,235,18,8,199,33,160,-31,100,6,96,194,128,22,64,118,64,51,192,186,0,50,68,253,224,177,5,-133,16,165,15,225,108,1,231,87,148,226,107,9,64,28,66,106,128,230,102,-18,192,205,80,195,143,155,204,14,198,131,218,62,140,204,224,253,3,128,0,-101,40,227,84,4,113,115,192,101,113,245,192,53,224,61,2,224,174,4,134,-79,109,93,121,201,230,77,8,67,245,134,58,98,82,70,165,66,98,0,53,-132,91,166,49,68,210,96,19,64,102,0,50,128,26,166,25,70,72,85,186,-1,49,53,67,47,64,24,184,76,77,107,86,223,1,55,32,235,120,2,1,-91,93,70,89,64,37,216,91,131,153,192,111,174,107,235,75,0,235,81,4,-96,44,224,251,2,64,27,160,10,0,83,98,109,95,38,67,25,64,174,211,-19,160,9,128,8,0,54,96,79,81,97,68,9,162,135,92,199,236,33,8,-8,99,111,109,112,111,115,101,83,101,78,207,161,86,65,30,78,160,0,53,-150,214,166,87,64,21,108,144,0,54,136,51,176,252,70,54,136,191,187,66,-2,58,49,53,68,127,133,170,224,149,23,128,143,224,142,1,7,104,97,115,-70,105,101,108,100,128,140,4,95,49,53,48,48,97,48,64,121,224,81,45,-2,115,101,116,224,81,13,178,148,163,190,69,17,224,64,3,1,95,55,114,-156,224,71,1,10,114,101,99,67,111,110,69,114,114,111,114,161,218,1,49,-54,230,144,3,162,232,161,175,132,4,0,51,164,191,70,151,252,2,6,26,-67,111,110,116,114,111,108,46,69,120,99,101,112,116,105,111,110,46,73,110,-116,101,114,110,97,108,46,193,136,128,88,64,62,101,7,0,67,180,172,252,-78,9,4,44,32,97,116,32,188,80,136,83,178,52,96,165,130,244,133,13,-165,237,224,160,3,71,59,144,70,1,95,57,160,176,0,57,69,120,147,143,-225,102,1,193,101,224,194,2,1,104,97,97,10,216,80,64,108,210,130,1,-80,32,103,58,0,85,129,106,131,66,234,132,0,247,226,3,65,144,0,55,-194,58,132,214,234,254,2,172,226,224,21,8,64,191,228,148,1,64,190,232,-171,2,0,95,212,186,224,56,4,196,203,96,62,235,85,2,139,59,224,29,-7,128,100,64,2,139,51,239,186,3,132,172,89,211,1,48,51,67,131,235,-74,4,244,58,7,129,136,67,169,102,18,200,233,165,213,211,142,107,0,0,-90,161,161,0,48,254,141,6,226,209,7,7,78,101,115,116,101,100,32,102,-66,213,11,115,32,110,111,116,32,97,108,108,111,119,101,162,226,96,0,241,-8,13,198,50,240,136,4,96,22,0,32,71,58,224,50,5,160,162,224,147,-19,226,138,9,4,101,120,116,114,97,128,154,2,40,115,41,130,148,3,66,-32,95,55,67,43,132,69,131,87,192,145,234,151,4,234,12,5,193,189,64,-36,234,135,4,224,22,1,118,114,64,16,102,42,131,199,180,232,249,58,0,-64,26,247,160,1,254,229,7,160,0,66,133,224,129,1,1,49,51,85,230,-0,52,179,24,231,179,0,0,49,235,7,0,98,212,212,100,230,187,0,0,-85,104,189,229,19,16,171,56,1,53,54,74,170,100,39,64,21,203,55,64,-71,108,68,75,21,224,242,5,235,165,4,224,26,6,99,164,84,92,1,53,-48,164,108,99,173,197,186,160,53,64,255,227,114,14,226,131,1,200,206,163,-7,227,94,5,165,102,226,6,7,167,92,229,37,4,11,111,114,100,32,119,-105,108,100,99,97,114,100,226,157,9,138,115,224,193,1,84,82,200,55,231,-240,0,0,54,107,147,160,212,224,254,0,160,219,225,176,4,225,143,1,0,-48,134,115,67,73,153,172,64,3,1,75,51,64,181,184,134,64,48,107,244,-64,60,108,15,108,22,64,25,245,32,1,237,160,5,0,52,128,252,232,201,-0,225,72,5,164,10,96,140,98,43,228,69,3,224,39,3,64,32,135,165,-226,204,6,247,187,0,64,143,184,5,245,162,9,0,52,139,174,136,39,144,-135,3,95,49,50,57,161,240,224,78,1,2,95,49,52,147,183,227,48,5,-64,94,200,249,0,90,66,166,96,17,197,169,237,168,5,64,144,64,29,197,-177,168,98,184,221,141,235,0,48,130,249,231,139,42,0,103,231,139,14,0,-48,131,27,0,83,161,98,119,44,150,193,64,151,69,95,253,78,0,109,236,-70,167,96,117,102,186,228,82,0,230,172,19,4,80,114,111,120,121,165,32,-224,156,3,64,125,195,131,97,77,68,29,98,226,64,66,98,98,192,248,96,-81,120,223,240,81,4,1,66,64,136,15,96,45,111,26,4,52,57,54,32,-95,111,18,64,21,218,252,164,161,1,52,57,138,150,1,52,57,100,1,64,-43,128,31,64,2,91,1,2,95,49,50,69,45,112,237,96,36,160,155,2,-80,32,35,106,200,0,80,128,24,129,191,239,13,13,0,52,69,222,0,52,-97,37,239,13,1,226,221,9,208,108,173,65,130,228,231,26,3,85,239,229,-93,1,101,71,109,160,104,151,0,52,93,0,224,88,1,203,244,237,121,1,-224,2,3,128,24,242,135,4,96,2,165,58,65,121,81,130,239,202,15,64,-205,199,211,247,79,1,245,77,1,224,5,0,102,174,227,161,3,64,19,0,-83,128,154,238,139,13,228,246,0,128,24,128,127,166,143,220,33,67,88,252,-242,2,130,41,0,52,99,210,169,74,100,73,96,21,75,225,64,72,0,80,-64,69,97,101,160,75,0,51,67,176,0,64,96,20,224,0,0,193,89,161,-92,65,38,64,66,129,88,133,14,115,125,180,173,237,75,1,177,226,224,68,-7,148,98,225,1,4,224,172,3,224,11,3,64,234,177,22,64,179,192,159,-224,152,0,130,2,244,115,0,215,233,135,76,1,49,52,71,122,230,152,3,-64,42,254,30,7,224,164,3,248,22,0,66,187,196,93,226,142,13,129,232,-226,116,0,232,172,3,96,190,0,57,64,45,71,147,135,112,192,44,224,244,-2,166,72,224,56,2,64,87,161,210,226,28,2,96,140,173,198,1,51,54,-224,138,1,1,56,57,102,55,0,57,135,186,96,112,224,175,24,194,22,128,-103,235,188,0,1,52,56,196,79,130,228,64,83,230,200,1,64,92,228,125,-1,224,96,15,193,151,225,148,18,251,169,5,64,118,96,133,225,23,28,130,-79,225,23,7,66,132,132,151,182,249,64,84,98,208,96,188,64,33,211,170,-224,185,25,192,35,129,32,162,30,231,45,2,154,200,104,179,118,81,97,121,-128,134,133,62,159,30,210,91,76,163,129,65,128,82,255,7,4,96,70,3,-10,65,32,90,64,46,64,14,173,0,253,161,14,96,105,131,249,1,49,56,-144,20,69,15,240,228,2,136,9,100,127,228,135,2,0,85,228,44,7,0,-56,230,21,4,2,75,105,110,235,143,0,64,132,176,96,118,79,100,220,131,-238,168,86,227,222,0,96,9,66,57,164,66,0,53,95,83,0,95,127,218,-224,6,6,106,100,64,3,100,223,192,76,0,83,123,130,1,53,52,67,225,-192,32,224,106,19,109,71,224,108,1,80,224,96,114,224,108,31,0,82,224,-108,26,65,70,96,100,0,83,172,89,224,110,6,160,103,224,117,2,224,106,-9,224,63,3,224,113,2,173,139,151,12,192,147,224,40,0,224,108,18,224,-115,2,128,67,224,61,13,160,106,3,95,51,50,50,225,219,2,31,92,34,-115,114,99,47,77,105,99,114,111,72,115,47,84,67,77,111,110,97,100,46,-104,115,92,34,44,50,51,55,58,50,0,51,237,136,2,132,249,0,57,231,-143,2,1,52,56,67,40,224,13,1,67,120,224,13,1,231,185,2,0,53,-121,57,160,11,224,65,1,66,77,197,64,74,9,1,53,55,130,230,172,143,-132,35,231,197,1,96,61,99,183,108,191,130,222,64,47,178,152,224,47,10,-224,57,2,72,27,224,57,0,224,64,6,242,195,1,224,54,7,224,152,1,-224,53,8,0,55,242,26,0,224,2,0,131,184,241,70,2,228,225,2,231,-204,5,84,113,98,31,128,27,239,215,1,224,50,4,71,0,229,14,4,64,-55,229,253,11,65,153,129,60,67,193,164,202,72,243,196,172,254,161,0,232,-203,4,133,17,96,112,64,0,192,44,130,230,249,240,5,160,59,196,230,233,-10,0,160,94,130,186,68,16,128,46,224,96,4,96,17,224,137,1,164,158,-224,38,4,96,35,224,75,6,192,37,193,20,96,150,97,35,225,20,10,241,-57,6,224,112,2,156,186,128,85,252,81,1,230,121,11,225,160,6,0,55,-224,71,5,192,73,96,26,201,67,224,100,80,192,14,162,135,224,17,0,224,-15,0,224,133,3,224,47,2,159,72,164,170,226,128,31,64,115,224,104,1,-224,141,3,224,143,0,224,19,2,191,171,226,13,6,98,68,128,32,226,24,-2,129,175,131,12,0,64,162,103,224,73,1,234,199,8,226,108,2,224,37,-1,224,131,18,224,70,0,195,112,192,136,224,119,0,134,216,0,53,99,185,-68,40,254,32,1,226,87,10,226,93,12,231,222,7,231,228,0,98,115,242,-87,0,126,68,64,74,248,61,11,236,82,0,224,189,2,224,21,15,160,132,-248,105,6,240,48,1,128,0,254,172,2,252,220,8,226,0,57,101,155,68,-81,228,224,0,226,212,10,196,57,128,12,224,94,6,160,222,192,86,66,173,-120,115,0,52,243,19,8,129,202,164,193,96,119,0,54,136,97,254,244,11,-12,99,97,110,110,111,116,45,104,97,112,112,101,110,102,156,64,48,246,24,-0,237,144,1,64,13,224,144,3,64,95,211,99,192,1,162,86,197,6,226,-60,0,192,34,67,181,224,46,0,237,142,7,224,178,1,161,23,226,35,6,-236,186,11,0,55,65,177,64,38,0,79,236,114,5,229,252,30,224,103,0,-75,227,74,150,0,50,159,21,96,93,141,215,64,27,85,204,74,124,75,191,-0,95,244,30,2,225,137,0,0,53,240,79,4,5,83,117,98,115,117,109,-119,185,11,32,99,104,101,99,107,32,102,97,105,108,101,201,243,226,93,7,-65,111,138,2,225,17,5,3,95,49,48,53,224,41,0,77,47,131,15,241,-213,6,95,171,96,66,135,247,2,75,32,89,97,120,65,49,134,162,252,169,-0,134,95,64,218,166,16,254,131,4,225,112,1,228,59,7,97,214,84,120,-161,41,226,3,6,244,41,0,64,60,238,96,8,116,65,129,172,230,74,7,-71,219,184,182,224,0,1,225,249,3,224,136,0,225,173,2,188,233,0,67,-232,14,0,197,10,230,221,0,229,69,1,226,47,7,195,147,226,85,3,226,-129,4,192,36,128,177,224,179,7,228,2,0,164,225,224,191,3,242,133,0,-160,168,225,14,40,164,150,68,133,76,214,224,0,1,224,42,5,0,80,98,-244,128,31,65,244,137,216,64,80,232,155,1,108,205,229,141,11,228,91,2,-230,31,8,163,45,194,32,232,82,1,160,174,224,197,0,240,239,1,225,37,-0,224,27,10,227,125,0,162,107,230,1,7,227,156,8,68,25,232,117,1,-129,3,225,39,8,207,210,225,151,6,226,160,31,228,27,0,65,57,180,86,-163,28,227,118,16,84,227,1,52,54,84,181,1,49,52,161,120,225,192,13,-65,52,96,159,129,245,166,190,130,50,166,90,184,44,160,71,160,13,230,134,-1,64,149,207,240,225,83,4,118,104,224,115,8,224,186,0,158,123,249,122,-3,160,117,98,155,181,1,160,14,2,79,32,35,86,6,97,9,156,16,0,-50,249,115,0,0,58,128,232,239,182,20,182,110,227,168,1,170,105,228,100,-0,64,42,118,126,225,38,0,1,52,53,182,119,0,51,69,69,224,58,0,-225,239,2,96,121,245,32,0,2,54,54,32,64,15,247,118,1,66,217,230,-81,1,129,98,97,111,132,197,134,96,226,111,0,226,114,0,199,122,192,204,-224,50,2,132,248,228,120,1,227,41,6,171,67,224,172,1,224,60,10,227,-237,1,192,30,228,181,8,224,34,9,135,30,160,77,167,25,232,12,5,192,-231,231,53,4,227,173,2,225,125,4,161,66,226,129,1,224,101,3,235,58,-8,225,61,0,225,62,2,85,170,0,54,188,157,224,24,3,142,241,102,219,-0,54,252,189,1,226,124,0,132,95,224,133,11,224,18,11,224,23,0,234,-156,8,224,51,2,160,182,133,8,104,110,224,13,5,224,56,12,224,57,3,-235,60,3,228,87,1,228,119,6,192,184,160,58,134,16,64,9,226,192,0,-224,103,5,129,23,224,42,1,197,35,193,28,241,226,1,225,30,11,225,235,-2,128,18,162,88,228,251,2,225,183,1,225,227,13,96,195,227,133,8,247,-150,0,167,214,226,239,1,227,6,4,96,35,224,17,9,225,52,2,65,165,-241,161,4,227,9,2,139,146,72,217,129,73,253,204,5,138,54,6,32,117,-110,105,102,121,32,136,216,228,117,4,1,49,50,113,64,224,55,8,3,32,-97,110,100,128,47,192,34,224,236,3,162,3,226,66,9,68,17,0,54,234,-147,6,229,180,5,0,52,129,227,193,76,64,16,128,93,64,70,69,21,64,-66,217,49,64,19,153,15,133,60,1,49,52,116,142,64,34,137,137,250,28,-3,10,105,109,105,116,105,118,101,115,46,126,34,112,16,64,42,250,19,0,-135,246,224,9,0,197,207,64,38,231,155,1,230,101,12,0,52,89,201,235,-44,6,134,224,64,142,0,48,162,201,229,38,7,246,110,1,226,86,10,228,-58,32,235,204,7,133,167,0,55,235,67,6,160,39,229,226,6,66,248,107,-8,110,2,96,200,139,16,226,59,33,4,121,99,108,105,99,226,53,10,110,-92,116,213,220,173,226,63,9,0,61,226,61,17,229,96,5,233,125,7,225,-113,1,192,216,0,67,129,112,224,193,0,192,192,161,112,224,132,0,161,122,-247,140,3,227,147,18,225,6,8,126,140,128,141,163,27,1,52,53,114,113,-224,217,6,5,101,114,114,111,114,58,161,22,64,113,65,63,126,182,2,67,-32,80,224,40,2,3,116,121,112,101,64,36,224,17,1,0,107,214,80,224,-18,1,3,115,111,114,116,224,18,6,4,114,101,97,108,109,188,143,64,128,-236,112,46,0,53,162,223,66,46,153,28,0,53,140,115,235,147,5,226,150,-3,129,201,226,78,1,167,67,234,122,1,224,39,21,202,163,193,180,234,165,-0,224,36,4,129,170,231,135,17,98,29,130,203,128,107,205,208,130,199,250,-156,1,230,221,3,140,13,0,90,64,208,0,90,64,49,192,25,224,100,8,-237,42,2,0,75,226,8,1,224,175,1,224,215,11,231,50,3,224,79,7,-224,27,2,172,242,64,29,128,34,160,25,64,106,128,11,73,201,0,57,218,-74,97,164,148,186,65,170,164,239,0,51,64,11,68,239,0,48,118,45,0,-49,66,223,0,51,125,72,96,40,133,24,0,75,113,106,228,88,0,228,153,-0,164,84,163,85,236,58,7,200,49,140,54,148,175,99,35,235,186,9,225,-82,1,231,174,3,237,34,5,67,118,234,208,0,2,49,50,53,163,229,64,-45,141,231,237,105,1,225,161,6,130,123,235,254,6,192,63,160,232,175,104,-193,136,0,95,108,176,236,5,24,107,182,236,246,4,237,191,9,242,178,2,-235,239,12,64,0,224,53,3,64,141,134,73,4,83,32,85,32,95,100,155,-1,90,32,76,198,0,89,249,35,3,129,143,97,127,229,231,3,231,202,3,-226,86,6,192,109,226,127,0,224,46,21,235,209,0,133,137,224,47,2,224,-44,10,225,243,1,168,84,227,138,49,162,187,96,11,160,238,227,42,0,160,-92,160,135,224,13,0,232,194,0,225,6,0,224,53,2,224,175,2,140,138,-0,39,241,194,0,97,189,241,186,9,96,59,226,217,3,226,230,4,127,187,-129,209,193,75,64,30,129,37,98,59,2,49,52,49,70,225,3,95,53,54,-57,148,119,0,90,64,49,222,214,226,19,4,224,35,1,194,171,166,122,244,-133,4,128,121,66,49,0,48,160,172,64,11,194,118,96,145,144,111,104,225,-192,10,178,4,242,254,11,230,134,3,96,171,97,10,160,211,224,57,0,130,-167,0,56,146,250,96,57,0,89,131,152,149,116,226,130,3,128,161,247,20,-1,193,21,161,19,129,190,107,175,100,109,2,49,49,53,235,33,1,162,98,-197,102,96,0,227,34,9,229,11,11,226,53,2,96,180,242,51,0,230,15,-18,128,114,224,77,10,192,24,192,76,0,52,65,23,224,17,1,94,63,94,-22,128,154,192,147,226,109,1,225,5,1,226,243,5,192,68,227,63,1,224,-35,8,243,104,16,230,60,10,227,60,11,224,37,1,229,61,1,65,206,144,-224,128,175,64,15,193,29,128,69,98,204,165,30,227,245,2,128,199,224,75,-6,133,90,231,0,9,97,183,0,55,96,28,5,67,32,95,54,55,54,227,-75,4,96,125,0,51,73,142,233,174,8,3,115,117,98,115,108,37,8,109,-112,108,101,109,101,110,116,101,235,253,0,80,124,1,49,50,157,211,96,0,-69,16,203,51,179,63,67,35,64,22,234,245,1,1,80,32,129,7,0,80,-134,224,201,147,1,80,32,97,215,159,213,65,209,232,153,1,98,150,129,188,-64,78,228,73,5,129,201,128,16,176,73,245,47,3,225,203,0,192,41,225,-209,6,162,58,228,143,1,227,36,2,226,41,16,165,111,228,243,7,224,40,-9,234,173,6,225,195,8,114,23,229,76,6,193,179,160,10,217,1,160,167,-224,43,3,224,223,1,224,226,20,230,30,0,224,227,22,224,153,5,230,38,-0,224,143,4,64,141,160,43,174,173,64,13,65,9,171,25,228,13,8,224,-93,2,228,19,12,224,242,25,225,89,1,224,64,5,193,186,128,30,160,65,-224,13,12,224,58,8,165,39,224,44,13,173,195,194,102,197,28,96,194,201,-4,96,155,195,233,160,0,225,142,4,193,145,224,98,0,228,73,12,231,26,-3,193,151,224,49,0,232,32,28,224,26,1,226,132,2,225,201,4,163,228,-128,25,161,101,231,110,4,224,19,5,228,221,30,224,179,0,229,192,1,224,-236,17,228,206,0,231,239,0,224,53,27,225,93,0,192,29,229,79,14,225,-199,8,225,21,0,129,186,129,194,64,53,132,36,231,45,7,225,7,4,227,-32,1,192,56,225,25,3,128,36,227,244,1,160,105,64,146,250,90,5,128,-31,130,5,224,27,6,196,8,151,161,200,221,236,184,2,224,4,1,128,116,-229,152,14,9,102,114,101,101,84,121,86,97,114,115,174,113,229,144,7,97,-50,134,88,69,71,96,19,2,85,32,65,101,100,100,65,0,75,102,108,151,-175,172,111,72,76,2,10,65,32,96,32,64,14,142,33,157,190,253,196,1,-128,246,128,180,118,190,0,53,166,124,2,54,32,35,118,140,246,152,7,7,-64,95,53,55,48,32,95,50,92,198,162,13,224,67,11,233,0,4,2,95,-50,54,119,186,64,24,96,85,1,35,49,110,206,64,150,0,54,134,30,75,-134,3,95,50,51,51,192,38,4,64,95,50,51,53,224,12,2,0,57,76,-133,1,50,56,183,251,1,50,32,121,123,64,27,64,6,108,85,64,8,0,-52,224,23,11,2,50,55,55,224,72,2,0,55,132,212,64,12,64,126,253,-91,0,98,33,227,126,1,227,251,5,194,208,143,137,245,163,0,242,254,1,-64,8,135,243,64,7,66,142,161,152,193,188,96,85,74,39,1,54,55,161,-60,224,64,2,64,50,0,50,224,50,0,137,8,145,129,0,50,90,84,129,-233,128,0,224,114,90,88,119,224,114,3,224,43,6,224,15,7,65,69,141,-200,1,95,50,98,25,2,57,52,32,101,149,128,9,5,49,49,49,52,49,-49,173,99,65,145,109,99,132,52,180,57,224,196,13,196,66,130,60,160,191,-64,206,64,123,195,18,224,13,1,224,192,17,128,81,64,125,136,208,1,95,-56,88,211,64,44,212,126,0,51,98,86,71,193,64,24,249,246,0,0,53,-82,120,99,180,5,54,32,64,95,57,48,160,196,64,45,224,57,0,114,154,-160,57,0,51,131,113,196,175,78,71,135,60,64,171,199,110,192,7,142,103,-250,197,2,224,32,5,254,233,0,103,144,0,51,148,115,96,0,64,104,177,-237,132,36,0,50,138,105,83,30,186,159,64,34,0,54,233,140,1,104,228,-137,141,64,36,96,22,243,142,8,178,95,250,103,12,79,63,230,223,1,96,-39,196,250,1,95,54,90,229,101,76,0,90,149,233,200,110,196,22,224,101,-4,96,7,133,116,248,13,4,246,35,1,65,86,242,226,3,237,147,0,0,-85,111,142,224,28,14,96,219,130,133,132,139,113,98,161,104,209,103,66,42,-209,103,237,146,3,197,179,180,127,128,237,64,80,130,173,7,95,56,49,48,-32,75,32,85,230,218,0,224,1,5,141,125,160,0,224,34,13,233,0,2,-96,0,64,158,161,208,64,102,130,150,129,60,132,224,67,8,64,25,130,163,-230,40,1,2,100,105,99,84,72,64,26,245,0,1,252,158,9,160,134,241,-22,5,97,142,65,118,102,84,64,13,245,231,0,64,7,64,59,117,8,252,-136,9,64,148,1,10,65,124,174,0,54,101,212,64,19,188,34,224,123,2,-99,138,0,83,82,146,135,250,130,100,225,229,3,128,148,69,229,98,66,2,-32,95,51,93,249,0,64,193,159,119,179,193,159,254,87,5,115,44,2,32,-95,55,101,195,142,199,96,44,0,50,68,97,192,47,0,52,215,237,65,4,-166,250,81,196,224,1,3,0,75,236,226,1,128,42,0,54,225,227,5,66,-99,225,194,27,224,35,26,224,32,23,224,29,20,224,26,17,224,23,14,224,-20,11,224,17,8,224,14,5,224,11,2,192,8,96,5,226,158,2,224,0,-2,65,44,132,61,3,95,57,49,50,180,224,64,20,131,118,0,85,65,90,-160,2,96,59,64,26,131,64,0,67,144,176,231,79,1,64,109,234,85,5,-136,211,239,174,18,164,85,228,130,3,224,33,7,208,152,234,91,9,240,178,-4,249,108,5,216,136,132,172,0,80,64,252,226,118,2,229,39,15,228,193,-10,184,184,227,115,5,96,0,0,85,224,145,0,64,98,1,95,49,72,227,-102,234,233,57,1,229,199,0,96,70,114,199,244,242,3,64,65,224,40,10,-114,220,192,146,64,0,224,11,2,225,4,8,129,98,68,196,115,9,224,72,-2,70,222,64,57,192,198,224,78,0,235,217,1,225,176,9,225,175,23,204,-103,237,175,8,192,24,139,127,179,128,128,12,226,32,18,225,219,16,225,218,-2,83,240,225,124,5,238,170,11,224,47,19,96,0,224,50,13,225,130,0,-226,12,11,224,24,14,129,178,224,98,2,247,46,3,224,132,17,248,64,4,-67,69,252,187,1,1,80,32,161,199,145,113,65,178,3,10,65,32,80,72,-207,66,12,251,17,0,71,244,225,104,1,65,193,177,188,66,91,231,35,20,-248,139,3,225,10,0,2,95,49,51,72,138,64,30,96,125,64,72,165,255,-231,27,13,231,19,0,224,22,5,224,1,1,229,76,127,228,234,6,64,216,-134,59,129,31,0,52,145,15,73,254,2,49,50,57,225,2,2,64,40,0,-54,228,247,4,230,90,0,64,26,133,39,130,51,226,71,4,1,95,51,121,-145,0,85,214,126,224,32,15,196,172,96,38,129,196,224,41,3,99,248,160,-41,227,75,2,128,33,68,153,0,49,74,222,4,95,49,49,55,57,232,61,-2,1,61,62,206,92,224,22,4,255,84,2,160,33,224,91,5,2,95,49,-57,98,230,177,49,225,43,3,171,247,1,52,56,103,243,97,44,111,37,96,-132,96,7,77,143,75,253,89,133,99,26,224,6,3,224,33,0,105,153,140,-37,224,33,20,160,26,224,40,3,224,33,13,224,40,3,3,64,95,51,48,-109,244,98,213,64,182,134,150,0,75,98,11,254,60,17,98,39,0,83,64,-208,96,39,111,186,128,10,239,189,5,22,97,115,115,101,114,116,84,67,77,-111,100,101,58,32,101,120,112,101,99,116,101,100,61,255,81,13,133,120,101,-112,0,49,134,2,171,231,0,79,96,18,0,49,128,8,2,51,57,56,192,-8,0,57,248,71,2,224,122,8,4,44,32,103,111,116,128,105,160,90,160,-85,225,162,1,132,60,1,75,51,68,35,64,94,108,55,3,49,57,32,75,-190,202,2,95,51,48,224,81,3,5,84,67,69,120,112,114,128,81,224,25,-7,0,84,190,235,224,26,10,0,75,222,244,224,26,9,0,83,222,252,64,-163,0,50,111,224,96,163,92,78,224,12,0,64,156,132,192,122,41,0,50,-135,88,166,223,0,48,73,238,0,56,67,166,135,189,127,197,165,31,0,95,-124,153,0,56,76,132,225,30,9,15,77,117,108,116,105,112,108,121,32,100,-101,102,105,110,101,100,209,93,0,56,145,162,0,95,108,50,64,123,0,48,-182,164,1,56,54,110,27,0,48,205,200,64,106,67,252,68,35,64,23,132,-27,64,131,112,234,249,153,0,194,139,132,94,141,218,128,17,228,124,1,249,-165,0,224,2,1,194,102,200,27,64,16,96,20,194,185,163,173,0,49,128,-125,0,54,192,149,226,178,15,226,207,15,133,205,128,134,224,31,11,242,101,-2,235,180,8,64,31,141,100,179,43,232,250,8,101,42,79,194,162,80,0,-55,111,19,1,51,57,160,61,81,185,0,64,96,20,224,100,20,0,57,192,-100,140,165,231,77,1,224,183,18,172,41,129,65,0,66,112,75,224,185,12,-224,214,14,115,195,163,160,224,140,10,232,29,9,64,25,114,75,0,48,204,-69,65,150,171,20,64,40,228,139,0,67,191,163,189,98,193,133,176,1,52,-51,249,141,4,2,99,99,32,227,30,3,210,241,96,92,129,69,129,74,1,-52,48,109,158,128,23,2,49,52,48,99,67,128,13,178,219,192,12,100,1,-96,12,64,152,133,157,242,49,1,218,149,170,124,201,154,96,255,3,49,52,-48,50,241,101,0,177,85,160,6,64,74,133,49,77,80,70,237,98,108,64,-22,132,92,242,82,1,224,94,2,96,85,244,42,1,224,77,4,132,134,1,-75,50,81,163,64,15,131,249,1,75,50,148,170,97,53,101,159,64,104,64,-15,212,201,237,194,4,64,24,231,171,3,0,54,114,236,136,198,1,51,57,-238,74,2,64,40,0,54,163,223,239,201,14,239,195,1,224,25,7,192,1,-232,176,101,232,150,5,64,192,244,167,0,3,95,49,51,55,72,136,153,157,-2,51,55,52,93,34,98,201,0,73,70,50,98,125,92,18,1,49,51,103,-181,0,79,129,29,1,57,48,134,126,113,48,128,33,130,206,135,52,72,218,-134,102,147,42,99,180,102,41,64,48,117,209,232,47,12,226,188,0,64,50,-130,35,224,39,12,166,30,64,37,202,204,224,202,23,66,158,0,79,64,180,-224,209,2,132,68,0,67,96,24,128,22,132,106,119,141,96,190,224,52,11,-122,92,224,52,3,113,99,224,52,21,0,56,173,158,224,52,0,64,16,224,-52,24,100,41,224,52,3,132,173,224,52,1,128,27,160,52,0,56,65,116,-224,45,3,129,139,86,227,225,139,1,130,42,225,193,15,97,81,236,4,1,-96,36,97,182,1,51,56,129,82,132,134,224,12,4,96,141,0,58,128,103,-160,43,0,55,64,59,65,121,195,76,0,56,87,109,96,6,64,5,129,70,-116,94,96,164,128,62,227,123,0,128,251,113,153,114,91,64,28,0,54,226,-62,2,64,15,165,35,108,255,64,15,194,94,193,57,131,232,65,17,226,66,-15,0,45,74,154,64,35,130,64,224,35,12,1,78,97,147,29,97,120,224,-36,15,5,83,121,109,98,111,108,160,39,129,47,224,39,12,8,67,111,110,-115,116,114,97,105,110,160,83,66,54,227,18,26,233,9,0,64,50,129,82,-224,39,12,169,76,64,37,181,205,65,60,161,104,64,21,161,66,1,53,50,-235,171,3,6,98,117,105,108,116,105,110,64,96,76,4,64,3,64,43,213,-213,108,51,141,234,67,78,64,20,166,223,0,57,64,180,218,33,1,51,54,-101,36,69,156,1,49,51,88,97,132,114,224,21,9,64,70,181,4,75,227,-133,230,0,90,69,104,224,9,0,176,152,0,50,73,163,98,90,64,60,167,-70,96,7,96,92,139,129,128,85,64,84,129,196,77,6,240,86,8,0,83,-168,98,255,87,3,73,79,2,49,56,55,201,244,135,181,237,55,6,231,92,-4,5,103,101,116,73,100,101,97,186,182,58,224,142,3,1,85,32,123,147,-64,136,248,5,0,0,57,70,204,215,202,65,4,129,60,187,112,72,33,109,-255,0,56,96,143,1,95,55,90,1,0,58,97,50,160,63,230,129,7,87,-177,230,129,2,71,25,230,129,7,215,241,224,1,11,239,32,127,224,23,14,-224,20,11,224,17,8,224,14,5,224,11,2,244,96,11,65,35,231,206,16,-65,130,225,76,3,0,54,225,76,9,128,1,167,200,224,16,1,224,1,5,-225,85,170,225,43,8,64,255,208,95,1,75,51,246,220,15,64,37,245,152,-0,0,50,144,160,224,34,4,64,32,233,213,5,96,2,192,26,227,160,0,-227,104,3,138,205,235,21,0,99,68,129,125,235,157,10,0,53,243,179,2,-2,95,51,54,235,208,2,140,253,65,214,141,224,0,49,70,4,195,217,160,-127,195,151,242,167,14,1,51,53,70,204,242,167,8,0,56,126,38,2,49,-51,53,103,243,64,71,131,199,97,3,248,8,17,0,58,128,49,226,82,5,-180,152,224,1,11,226,70,170,224,17,8,224,14,5,224,11,2,192,8,227,-164,11,97,41,200,39,224,1,15,225,29,5,225,68,245,243,50,7,97,82,-164,227,0,50,91,87,71,174,198,140,66,230,236,231,2,226,173,15,96,42,-199,241,160,70,103,71,64,108,64,75,64,31,201,96,0,50,137,128,0,53,-131,234,99,65,1,49,49,80,238,96,162,171,122,0,49,143,10,96,17,1,-49,49,113,75,175,230,0,55,94,236,156,44,2,49,51,53,67,222,0,56,-64,110,0,64,88,158,131,223,64,92,246,160,1,148,135,151,197,248,17,11,-148,32,224,25,6,175,135,224,25,10,146,204,245,38,7,178,22,188,233,104,-243,231,76,1,149,49,161,139,102,14,238,231,3,65,147,240,199,1,160,119,-241,144,6,206,206,128,7,96,54,128,148,190,38,228,111,1,112,116,96,32,-65,122,129,37,228,204,2,64,12,131,65,128,74,2,95,49,49,65,42,161,-132,65,77,165,29,1,49,49,69,138,2,95,49,49,146,241,161,148,143,165,-96,0,224,164,3,159,121,64,0,226,125,0,133,79,0,53,72,140,128,229,-0,39,128,145,224,196,0,224,110,3,161,229,88,85,224,100,0,160,186,64,-157,224,120,5,160,99,148,191,128,39,96,111,0,89,232,186,0,0,80,187,-238,192,119,224,50,0,161,44,96,50,96,227,229,229,2,64,13,243,194,0,-160,103,3,95,50,54,54,176,44,253,225,13,0,95,141,95,130,227,76,107,-235,129,3,1,36,102,137,234,64,122,0,89,224,150,0,192,237,64,138,73,-194,0,52,137,202,244,37,5,1,36,120,245,64,2,254,248,1,195,16,224,-150,23,242,65,0,254,159,0,96,167,224,173,0,244,39,3,97,42,97,41,-194,165,130,89,193,56,226,227,0,186,37,129,74,67,84,226,208,3,128,10,-65,130,250,225,2,225,241,0,226,235,0,161,129,231,95,9,224,0,3,227,-89,4,188,87,139,113,195,198,226,120,0,0,79,64,63,161,206,98,239,162,-141,0,64,65,111,93,227,65,65,0,48,220,173,235,157,5,149,13,68,217,-224,29,6,131,39,160,29,0,67,236,72,5,225,225,5,237,59,2,1,73,-79,182,80,192,0,97,35,130,135,130,218,64,5,83,38,2,49,50,52,224,-66,2,9,73,79,46,112,101,114,102,111,114,109,224,65,1,98,76,225,151,-0,131,26,104,85,227,228,2,96,217,64,199,67,102,0,55,91,194,3,66,-32,95,55,66,41,208,176,98,61,141,72,64,0,224,226,4,179,182,129,85,-131,143,96,232,82,246,160,23,193,218,100,160,137,27,1,52,50,128,38,0,-49,75,21,226,172,2,0,103,224,250,5,228,16,1,64,67,237,76,8,194,-157,101,90,237,87,4,96,227,97,55,225,224,5,196,50,132,209,229,4,1,-64,146,137,92,67,68,128,16,121,114,247,128,2,240,179,1,229,178,7,229,-177,7,0,90,201,96,96,11,160,13,224,133,1,128,9,64,130,229,80,7,-225,213,0,2,79,32,35,78,154,160,111,209,42,128,0,224,98,3,133,231,-229,34,8,227,85,2,65,120,162,214,64,2,225,245,1,224,127,8,64,0,-229,251,7,65,163,1,51,52,103,19,209,255,98,49,101,49,65,0,3,95,-52,51,54,185,204,0,50,160,175,225,10,1,133,235,0,54,132,55,2,49,-51,53,75,37,68,105,96,22,0,56,229,136,3,245,75,2,99,52,130,184,-64,0,71,129,242,3,2,0,53,238,186,0,0,67,166,197,1,67,39,90,-199,1,95,49,81,206,102,6,96,58,231,164,8,88,229,0,95,171,146,0,-50,96,7,97,237,176,50,0,52,98,231,118,145,0,58,128,240,160,100,135,-71,230,161,1,193,86,230,123,3,131,25,64,19,226,82,1,100,53,0,39,-98,154,223,249,224,61,4,156,67,130,75,192,51,225,175,2,231,4,1,224,-29,5,230,226,2,0,51,76,135,228,7,11,2,115,101,113,250,145,0,230,-237,0,224,82,1,192,13,194,7,103,250,160,196,128,92,66,75,118,236,227,-177,0,64,5,164,189,97,98,96,246,131,19,230,67,4,97,187,64,41,84,-237,97,246,198,70,232,10,28,230,245,16,230,243,1,198,92,193,42,160,87,-231,2,46,101,156,0,51,247,201,3,130,125,98,4,140,9,0,90,161,212,-136,213,97,37,129,231,166,25,225,227,143,128,65,1,51,52,71,36,128,79,-117,155,166,0,67,3,163,207,192,23,96,42,225,146,5,228,238,0,225,127,-104,97,128,140,76,97,107,201,226,226,68,10,226,51,6,247,177,0,64,206,-239,255,4,236,113,19,64,183,180,78,100,54,104,211,229,92,3,65,227,136,-142,132,247,65,217,65,15,154,45,64,55,192,162,199,110,170,133,225,114,0,-129,99,64,185,103,91,224,121,0,140,203,65,95,139,251,0,85,132,130,0,-51,96,22,203,173,225,100,0,96,106,0,80,134,169,193,192,0,83,234,177,-35,64,11,0,83,201,77,194,36,229,218,1,64,111,2,95,49,50,93,160,-183,141,196,253,134,185,96,124,128,34,97,132,160,34,230,161,1,167,250,96,-195,187,64,1,32,83,128,196,229,147,8,71,169,96,62,224,25,12,112,229,-224,25,12,145,24,64,199,231,244,4,181,76,97,156,64,134,96,195,245,88,-2,131,82,104,151,245,110,4,133,3,82,119,236,73,1,64,63,71,255,227,-15,4,70,89,235,128,30,5,79,32,35,49,50,48,231,17,0,226,249,7,-235,119,25,96,0,197,167,232,106,1,96,249,74,101,160,24,214,160,93,14,-193,201,224,7,7,64,0,203,134,242,237,4,206,95,169,38,225,103,9,225,-253,0,224,131,4,128,130,226,59,3,128,61,79,143,65,51,2,57,56,51,-90,235,68,187,136,9,96,0,64,49,64,33,64,232,187,19,224,157,0,192,-235,224,129,8,96,62,224,129,8,96,21,128,79,65,175,230,54,16,2,95,-53,54,94,64,238,13,2,224,42,14,224,145,10,139,201,74,6,225,89,2,-160,168,131,67,224,171,7,235,87,0,224,25,8,208,28,96,25,226,178,4,-109,9,161,133,64,107,0,53,234,12,0,106,120,1,49,50,80,218,192,142,-170,231,101,127,198,148,163,208,224,109,8,224,32,19,139,211,132,205,225,87,-4,192,24,176,116,229,98,2,165,46,224,49,8,96,23,161,137,196,228,102,-89,1,95,50,94,215,128,0,227,168,8,64,211,88,244,1,51,52,131,128,-226,98,15,65,17,98,167,131,67,140,185,192,24,172,143,226,184,41,224,140,-0,196,148,224,37,10,96,255,145,238,193,113,236,59,0,165,87,237,228,4,-229,77,0,235,119,0,224,52,22,160,214,224,52,6,224,10,0,224,52,13,-162,130,224,41,4,192,229,139,177,107,146,238,101,17,9,68,97,116,97,46,-76,105,115,116,95,91,160,2,46,43,43,237,110,0,128,83,230,85,3,227,-208,1,224,0,6,196,115,163,86,228,107,9,122,207,233,212,1,5,49,50,-52,50,32,67,94,21,98,218,64,15,142,52,162,220,70,41,139,225,138,138,-231,53,1,110,233,227,181,9,96,197,4,82,97,116,105,111,128,198,2,95,-109,107,96,13,1,110,97,92,248,64,0,131,76,127,9,0,48,93,173,224,-17,6,68,63,64,117,140,75,70,159,159,175,70,209,69,140,0,53,114,42,-1,54,49,72,152,127,131,96,20,191,142,1,51,55,69,220,0,48,76,244,-160,5,204,248,129,29,140,105,96,66,165,209,7,50,49,52,55,52,56,51,-54,165,12,224,219,25,11,73,110,116,101,103,101,114,46,95,105,110,116,65,-173,1,84,111,160,17,224,222,2,101,72,237,98,0,195,127,233,215,0,64,-168,163,128,224,111,32,161,77,1,105,110,224,112,12,227,223,6,230,181,0,-64,0,0,58,129,91,73,65,129,76,131,138,2,95,52,54,225,9,5,98,-19,195,86,103,55,97,101,64,70,227,119,0,0,85,225,122,3,64,0,0,-89,169,118,148,89,108,131,72,89,225,149,3,224,92,1,229,158,0,234,149,-2,224,170,1,2,85,32,65,96,36,99,156,74,25,161,177,0,50,71,159,-1,53,57,162,200,78,209,97,66,129,176,64,220,140,11,3,83,32,85,32,-224,107,2,128,150,99,128,64,2,163,141,160,250,237,44,1,224,226,7,224,-255,0,224,229,2,99,204,104,130,137,235,83,110,128,26,65,69,224,12,0,-224,156,0,3,95,49,57,55,64,138,142,182,224,254,2,64,172,191,113,96,-21,2,51,50,55,77,201,64,22,0,54,195,99,128,174,246,31,0,234,226,-0,128,194,96,128,99,158,0,55,247,72,0,2,49,49,57,151,23,106,24,-96,54,0,79,227,251,0,202,239,110,50,241,115,1,240,102,2,128,95,74,-64,4,95,49,50,56,53,233,21,0,0,51,164,36,64,157,139,128,134,178,-98,66,234,186,1,165,74,96,13,229,24,13,203,205,128,47,165,27,224,13,-0,192,63,224,64,3,241,10,0,224,67,0,228,233,1,192,55,192,71,193,-20,129,44,224,88,4,97,42,231,109,0,192,178,225,93,3,193,7,210,196,-107,201,65,90,231,232,13,128,32,113,94,72,220,143,132,161,127,98,85,0,-49,72,142,1,57,56,74,171,233,92,1,225,143,9,226,150,1,178,247,96,-88,0,80,97,155,96,42,65,135,160,130,236,48,1,0,95,64,111,113,243,-72,245,235,215,4,64,0,142,222,160,247,135,65,181,252,181,176,99,123,114,-104,236,96,0,224,51,1,226,95,0,131,0,198,98,0,49,132,176,192,130,-232,183,5,68,78,225,112,0,193,199,225,86,14,65,139,129,143,224,16,1,-217,253,96,142,132,151,160,93,128,156,192,200,1,95,51,69,70,167,51,1,-49,49,125,146,224,164,11,224,17,3,226,47,0,142,3,96,29,226,158,0,-165,42,85,63,0,80,67,138,0,50,229,115,2,7,92,34,92,34,44,48,-58,48,101,92,161,97,96,219,224,41,21,132,186,96,0,66,7,0,57,234,-199,3,0,109,229,168,0,102,232,4,50,54,32,95,55,102,230,128,17,67,-154,0,83,91,137,225,58,7,180,4,160,239,160,62,155,35,96,11,0,52,-108,112,212,92,66,23,64,15,224,126,8,0,112,232,71,0,83,68,0,51,-128,41,97,49,67,218,206,225,132,25,251,59,14,131,142,227,209,4,245,83,-4,66,220,129,103,224,39,4,128,142,182,126,226,240,1,129,135,174,170,245,-201,10,161,117,64,157,0,51,228,120,2,160,105,0,50,98,7,65,0,219,-119,197,179,177,185,248,56,3,194,73,227,114,2,238,78,7,230,149,0,164,-65,99,63,64,58,97,8,165,106,206,142,186,141,243,28,6,96,14,140,147,-143,255,128,30,227,197,2,229,80,3,149,3,169,168,141,148,117,190,225,184,-8,210,69,129,38,143,244,1,51,51,136,36,227,251,1,65,38,143,203,119,-179,0,57,64,79,97,115,64,24,137,186,76,3,66,38,110,208,132,61,66,-135,70,53,64,36,181,181,236,193,3,194,4,193,57,133,213,97,22,100,41,-194,170,96,45,202,94,131,106,128,5,225,80,1,161,117,229,125,4,152,93,-129,14,64,21,96,225,138,162,98,250,152,135,80,50,240,196,0,161,6,71,-84,197,123,136,30,160,200,129,9,64,10,71,94,0,54,86,251,110,27,225,-83,6,0,118,210,129,64,72,98,248,165,36,164,204,164,225,224,179,0,253,-147,4,228,207,0,133,46,160,186,64,15,231,124,0,131,43,160,2,229,221,-1,133,114,128,21,64,43,65,35,224,35,1,128,30,65,210,230,55,0,211,-250,0,80,73,41,68,49,213,211,177,220,229,252,0,225,169,0,229,57,2,-229,141,1,128,13,237,70,8,203,254,192,192,231,146,3,161,181,100,106,225,-58,3,0,68,74,140,13,66,111,111,108,46,111,116,104,101,114,119,105,115,-101,228,88,0,212,217,224,249,0,245,104,4,75,15,129,28,245,84,0,225,-53,1,175,16,96,5,65,150,137,31,64,31,99,69,1,80,32,91,185,0,-90,99,77,129,230,101,186,1,57,48,149,225,244,247,15,250,211,1,255,57,-0,192,0,130,70,80,232,0,53,172,106,66,96,96,115,106,66,228,215,0,-122,36,96,4,161,252,164,60,215,125,64,47,216,206,229,183,1,167,93,226,-65,1,194,243,107,33,102,201,215,165,1,50,57,165,92,224,220,0,96,246,-128,221,132,135,66,29,161,233,224,144,5,224,37,0,163,156,226,197,0,97,-247,199,234,192,151,225,4,0,100,249,96,8,232,160,2,65,15,96,146,139,-116,203,135,64,22,129,157,65,35,234,2,3,163,210,232,72,2,97,84,90,-62,194,3,180,246,226,97,0,212,249,224,16,0,233,247,4,192,1,169,210,-224,19,2,126,117,224,16,15,197,223,232,80,1,193,235,192,21,138,226,224,-163,2,138,72,229,240,5,194,180,224,176,4,169,52,226,211,3,226,220,4,-224,42,2,228,33,0,68,111,70,89,164,217,224,60,5,248,66,2,194,18,-128,33,224,191,1,161,58,128,24,196,134,235,106,2,227,229,1,229,129,1,-220,12,220,18,96,27,64,42,67,194,76,169,249,233,4,224,100,1,192,198,-224,71,8,167,4,96,70,100,51,250,48,9,0,95,102,101,194,186,66,197,-225,255,0,227,148,13,241,69,2,195,159,161,201,225,186,6,129,173,224,0,-0,129,89,224,198,1,224,43,0,237,95,1,224,159,4,245,175,8,234,6,-0,1,95,51,132,105,238,28,0,224,53,2,103,126,245,218,4,167,163,224,-222,0,226,220,0,64,183,249,22,8,224,116,7,229,93,1,69,67,0,49,-129,151,129,10,163,189,196,156,224,20,2,162,215,64,0,67,110,137,150,105,-216,0,80,103,202,79,224,230,175,3,70,24,131,194,225,205,1,128,9,128,-90,227,11,1,64,60,215,236,4,95,49,51,48,55,97,174,0,52,93,71,-129,182,64,184,1,49,51,87,16,128,44,241,239,2,1,51,49,145,87,152,-79,2,51,49,57,128,139,136,49,250,122,13,225,207,4,166,248,64,0,64,-62,142,236,64,69,128,96,224,203,0,100,28,194,225,195,138,195,26,98,157,-164,106,229,104,0,226,48,5,229,76,0,160,171,64,101,199,224,100,243,246,-49,0,1,48,50,173,193,1,64,67,69,93,228,149,0,161,226,101,221,96,-181,229,33,0,64,75,207,181,67,221,1,56,57,91,242,1,51,48,138,221,-2,51,48,53,128,110,0,54,137,69,97,53,0,48,114,203,98,114,233,139,-0,65,102,225,131,3,224,169,2,161,236,3,49,51,49,50,95,70,64,22,-168,196,146,64,223,163,72,98,64,31,201,238,132,223,128,97,129,118,70,47,-0,80,160,213,240,76,0,228,123,6,64,72,130,162,192,33,227,166,1,224,-27,0,230,211,3,192,20,129,143,134,255,0,85,162,230,160,149,224,28,8,-166,226,160,28,224,29,7,99,150,224,29,16,111,108,224,29,1,100,60,130,-38,131,185,228,14,1,145,126,161,30,227,132,5,208,117,97,48,130,209,99,-59,132,82,103,143,232,44,5,229,197,2,236,80,3,192,7,236,22,2,107,-5,225,50,0,123,63,230,56,4,230,162,0,225,68,2,64,56,234,51,4,-224,56,1,224,19,3,224,62,2,161,22,111,176,230,32,3,160,108,192,28,-64,16,115,202,198,116,130,231,232,244,0,128,41,227,142,0,225,252,1,128,-0,238,211,8,27,115,114,99,47,77,105,99,114,111,72,115,47,73,110,116,-77,97,112,46,104,115,92,34,44,55,51,58,49,238,72,2,97,86,132,6,-131,21,64,129,98,212,0,48,143,166,0,54,98,170,67,8,236,128,8,64,-20,75,216,64,145,64,35,195,168,80,226,109,35,132,0,129,13,231,148,0,-193,159,81,38,227,159,4,160,40,234,114,0,235,15,0,128,239,1,50,57,-136,241,231,167,4,193,80,235,62,0,0,80,244,114,2,226,250,4,253,215,-0,64,73,0,54,64,37,137,29,192,7,167,108,192,60,97,112,192,92,64,-131,97,114,92,0,228,165,3,128,12,0,51,225,1,0,164,94,0,49,92,-133,228,82,1,64,30,132,23,1,48,48,68,23,64,22,193,40,96,42,161,-208,68,137,70,175,64,34,228,74,0,68,231,133,110,64,30,96,54,165,87,-194,103,136,223,224,237,3,164,15,225,46,1,243,54,2,99,124,96,119,218,-136,224,47,3,131,193,193,118,245,95,2,160,25,96,237,237,32,2,128,193,-218,132,229,246,0,226,226,3,233,25,10,160,24,236,240,1,232,199,2,227,-88,3,128,134,224,133,1,231,160,15,224,75,59,232,54,2,224,75,23,167,-158,224,75,17,232,173,0,129,36,128,2,229,156,0,161,89,117,236,137,160,-160,36,236,122,1,224,32,7,224,124,0,228,53,4,96,41,224,40,6,224,-41,8,224,11,0,160,48,224,47,7,96,64,64,252,64,7,128,184,66,107,-168,104,161,174,111,40,225,139,27,224,40,26,206,65,225,69,30,128,175,131,-59,98,125,224,6,1,194,200,224,30,7,224,31,1,219,170,224,34,1,224,-35,14,192,37,224,30,8,224,38,1,170,69,112,183,225,49,4,65,46,134,-152,0,75,103,246,64,47,163,222,235,28,0,224,10,6,225,144,1,0,32,-200,250,0,58,128,127,96,56,234,93,2,64,28,64,26,133,91,1,73,32,-64,11,132,101,0,80,96,11,0,54,96,11,131,83,128,5,64,149,137,229,-65,64,0,75,74,187,64,172,64,44,132,119,224,44,3,128,247,105,1,2,-51,52,51,250,178,10,70,55,0,33,134,47,0,73,64,234,100,248,162,25,-133,197,171,145,194,193,224,132,0,249,153,0,128,31,204,107,228,32,9,228,-27,11,231,40,7,129,54,228,16,33,224,63,0,163,116,227,254,32,128,56,-166,88,227,229,28,225,66,1,224,11,5,224,12,17,227,113,7,65,85,133,-219,123,37,0,50,205,19,72,251,64,27,244,21,1,237,47,1,192,27,130,-120,0,90,73,90,64,14,194,122,0,90,104,252,0,58,144,143,97,243,162,-109,129,22,72,245,234,52,3,64,5,128,25,245,45,0,151,122,169,179,2,-95,49,50,68,17,231,43,0,251,93,0,168,50,136,39,134,0,192,99,108,-243,226,240,1,247,222,9,128,21,0,50,126,58,149,57,64,118,149,92,237,-149,2,129,212,109,199,231,157,0,64,54,107,141,119,251,130,142,245,175,0,-171,102,96,11,136,135,64,39,131,52,225,7,0,198,188,127,8,166,184,246,-78,5,96,223,160,143,3,67,32,95,54,128,189,128,135,237,49,3,128,82,-253,7,0,1,56,52,190,50,1,50,49,94,194,0,49,77,99,96,180,1,-95,49,92,255,135,238,128,0,2,95,50,54,76,26,238,122,11,162,142,64,-184,0,54,161,210,105,73,193,57,138,115,230,165,1,192,176,226,233,0,151,-244,129,149,224,40,26,179,215,227,157,2,224,40,15,162,245,198,130,201,131,-224,33,2,248,78,1,237,148,0,194,104,252,7,7,184,174,98,96,0,56,-195,188,224,20,3,0,55,195,62,203,37,224,111,10,96,55,224,52,4,201,-155,224,120,10,161,17,224,158,3,225,29,25,160,79,224,39,24,161,218,246,-105,2,204,94,224,38,4,212,255,204,86,224,156,0,192,24,249,10,1,251,-197,1,224,40,4,129,42,128,243,105,149,203,186,1,49,48,117,17,96,6,-85,149,131,76,1,49,50,78,248,224,0,0,64,88,224,82,8,235,131,2,-64,116,129,221,195,24,1,53,54,74,207,96,91,226,240,1,2,50,56,50,-217,241,221,89,131,198,131,35,224,104,15,161,76,224,229,3,242,86,0,254,-120,13,139,247,224,41,5,226,125,0,104,72,237,56,1,146,3,197,154,128,-196,96,174,1,57,56,64,161,160,10,64,131,206,168,236,207,0,0,50,64,-33,64,6,235,218,0,160,0,128,70,230,77,9,163,99,161,139,226,106,9,-225,164,1,238,64,1,193,69,193,35,226,136,4,100,35,153,205,127,193,99,-247,0,80,143,3,165,206,219,230,224,23,0,72,33,64,24,204,28,97,66,-69,175,211,103,225,196,0,1,49,50,173,3,64,170,248,174,5,64,141,205,-135,65,1,112,159,97,223,231,234,2,80,241,199,11,130,129,228,141,1,224,-25,2,96,246,99,137,2,56,52,52,129,94,0,50,83,6,69,236,244,128,-5,0,35,64,31,110,187,232,122,4,10,116,117,112,108,101,67,111,110,115,-116,114,174,168,85,1,64,43,224,35,1,1,40,41,185,255,96,171,225,17,-1,132,87,161,18,187,15,225,123,0,198,227,88,199,130,238,96,19,225,19,-0,242,175,1,224,52,0,227,229,1,137,165,224,40,0,160,226,0,49,165,-189,156,204,147,140,194,247,98,107,2,49,50,51,99,144,99,36,157,173,128,-58,181,217,239,224,0,239,6,0,250,234,8,0,120,192,234,0,55,243,111,-0,166,183,230,160,0,225,32,9,16,67,111,110,116,114,111,108,46,69,120,-99,101,112,116,105,111,110,73,204,8,101,114,110,97,108,46,112,97,116,64,-9,8,77,97,116,99,104,70,97,105,108,129,100,135,12,0,51,128,84,1,-50,55,114,216,70,176,1,49,50,155,207,96,128,207,225,1,80,32,99,148,-130,147,64,43,193,103,161,53,2,95,49,50,71,252,221,63,97,242,64,41,-0,54,96,41,176,69,207,173,100,193,0,75,133,232,228,2,1,188,224,212,-225,90,61,71,253,227,42,0,193,68,167,180,0,50,157,158,224,46,7,255,-206,5,1,55,49,103,183,143,50,224,106,1,225,214,2,230,246,5,242,38,-1,192,5,128,74,230,8,1,224,55,0,230,23,1,96,0,128,66,224,1,-1,231,67,5,202,108,64,0,226,158,9,224,140,5,224,77,9,224,75,5,-164,234,128,38,224,76,2,248,76,2,216,16,253,187,3,231,174,6,96,23,-69,90,124,234,224,116,4,192,83,231,187,7,224,34,2,153,238,161,3,129,-21,224,84,0,96,66,96,111,128,17,231,68,12,243,122,6,231,24,8,235,-215,2,224,115,5,224,165,3,138,121,7,95,52,53,50,32,64,95,57,174,-203,192,33,219,207,225,111,3,249,39,2,221,214,131,143,234,134,0,128,0,-99,202,241,65,1,237,179,1,233,46,6,225,187,3,228,49,0,193,113,225,-207,0,192,77,64,80,115,3,249,221,15,242,179,5,0,55,64,213,255,68,-1,192,10,234,113,11,0,54,234,113,16,96,142,169,40,196,213,171,83,192,-102,0,51,235,230,2,192,173,226,161,5,64,27,129,84,231,7,10,243,158,-10,233,170,16,224,129,14,0,52,224,129,5,225,64,1,231,92,9,226,182,-0,97,77,226,128,0,224,83,5,231,116,0,160,85,243,241,16,224,81,4,-163,8,135,145,1,95,56,132,94,96,52,87,169,235,173,10,165,192,248,110,-2,100,247,230,155,2,96,66,134,155,64,228,224,25,2,96,64,160,25,199,-200,231,225,7,66,0,236,8,1,193,59,245,66,5,226,169,0,225,10,19,-244,252,1,225,9,17,64,111,199,88,166,108,128,6,134,36,64,5,0,52,-230,163,2,2,115,101,113,167,170,64,56,250,85,1,192,168,226,15,1,0,-85,231,12,8,227,194,0,151,47,224,13,9,132,43,228,69,0,128,197,224,-66,2,185,205,227,177,0,192,65,160,119,2,39,32,85,79,52,247,29,17,-6,68,101,115,117,103,97,114,151,30,5,52,49,49,58,49,48,247,32,2,-227,212,3,129,85,227,204,3,64,0,240,209,4,224,2,6,224,71,1,230,-51,3,229,38,1,192,83,230,57,1,224,191,1,224,197,6,192,10,111,124,-224,85,11,229,67,8,224,96,4,224,102,8,224,103,6,224,55,5,230,169,-11,224,50,14,96,98,230,31,4,224,52,26,224,195,3,224,31,11,253,69,-2,225,95,12,249,113,13,224,23,1,205,93,233,197,3,194,60,224,8,10,-96,242,224,11,2,169,182,195,25,128,68,228,148,8,225,154,1,131,114,230,-85,4,192,66,128,11,226,174,2,101,217,163,81,0,51,169,91,192,83,229,-109,5,231,188,4,138,166,198,74,146,80,250,28,0,230,214,4,224,243,3,-172,227,228,25,2,76,235,120,218,64,187,199,104,187,152,157,250,228,69,3,-225,215,11,64,41,141,185,0,90,209,235,216,84,224,144,2,236,204,1,194,-177,64,77,196,126,229,114,1,192,209,2,95,54,52,96,168,96,15,64,164,-224,103,2,128,137,224,136,5,180,223,224,38,5,66,54,1,95,57,93,87,-224,0,3,129,9,224,1,3,226,179,8,231,237,2,224,48,12,226,175,2,-224,26,7,226,170,1,226,159,7,192,33,226,180,9,226,155,26,226,134,27,-226,48,13,130,42,128,35,224,122,3,128,86,226,16,1,196,51,96,21,129,-112,64,43,130,30,128,24,226,31,2,160,62,162,34,192,122,226,37,9,229,-133,5,175,173,128,36,255,250,0,128,110,115,253,0,51,226,49,12,96,54,-226,37,1,226,30,0,3,95,54,32,85,226,11,5,111,243,130,10,64,47,-182,236,224,0,2,225,148,9,228,79,3,224,168,0,224,11,15,228,24,39,-128,86,228,178,6,64,56,0,48,230,243,4,196,214,227,177,10,226,60,9,-3,95,49,48,53,231,50,5,226,63,8,160,101,224,104,5,132,132,109,201,-1,50,51,219,163,230,208,6,193,205,192,1,224,170,10,226,192,5,97,125,-161,59,143,219,87,26,141,232,235,53,0,194,102,169,234,192,232,135,252,97,-226,128,66,66,17,170,185,96,164,132,46,224,145,1,232,42,5,64,17,64,-49,78,147,160,104,162,132,82,128,120,132,66,157,1,95,52,78,56,128,0,-194,164,100,249,2,49,50,53,149,163,1,49,50,73,191,112,178,2,49,50,-53,164,118,101,3,0,90,101,19,105,82,96,167,96,17,192,93,224,83,0,-225,184,1,163,77,66,175,226,174,0,224,186,13,153,20,131,123,226,209,7,-0,83,161,187,231,117,3,226,229,4,164,241,98,219,0,85,90,102,228,253,-0,224,39,5,131,13,192,38,224,37,2,160,152,192,227,129,122,160,227,0,-90,111,20,1,83,32,82,4,161,219,229,246,4,129,106,96,60,235,41,3,-233,223,0,192,59,192,249,228,52,3,226,90,3,196,58,192,19,193,155,224,-111,13,224,59,5,165,127,225,122,2,238,223,9,106,193,224,55,0,96,93,-194,99,230,155,3,228,128,19,160,0,0,58,144,190,145,107,169,54,97,101,-227,112,0,160,203,224,216,5,234,30,9,233,190,4,195,53,129,73,182,216,-192,224,234,252,13,224,61,0,206,159,228,88,3,174,95,160,232,101,182,128,-97,160,101,187,222,0,49,117,23,3,64,64,64,75,66,11,96,4,96,13,-160,128,66,148,153,74,66,155,160,242,64,76,194,146,85,254,0,55,213,93,-2,49,50,53,125,36,0,50,128,84,64,8,121,108,0,49,88,202,96,68,-146,12,192,186,2,85,32,95,82,30,192,217,253,2,2,230,25,0,224,21,-20,224,236,0,239,96,5,166,73,224,60,6,160,49,195,241,64,250,96,228,-64,27,163,168,192,99,128,48,82,45,164,43,224,90,0,180,1,64,28,227,-229,0,98,66,96,29,117,54,96,90,80,101,91,174,84,218,64,14,96,70,-131,31,161,167,194,42,129,71,229,212,5,195,10,224,118,0,226,56,6,224,-25,1,229,226,4,241,86,7,134,169,224,17,1,226,69,5,232,155,0,230,-28,0,224,132,1,232,103,1,143,207,98,160,97,217,78,217,116,205,128,74,-128,135,208,139,192,249,192,0,130,83,130,74,247,246,0,128,23,161,248,1,-75,51,192,9,96,0,66,34,0,54,244,47,3,96,85,128,11,128,109,192,-5,235,38,0,224,209,0,86,102,187,156,96,17,128,208,251,176,2,160,79,-161,75,228,206,0,134,130,160,88,66,170,0,50,96,53,102,172,192,7,136,-183,162,223,134,35,1,54,51,129,167,97,70,133,54,224,14,5,2,95,54,-50,163,23,160,0,252,20,1,233,66,1,228,43,2,225,236,0,196,140,225,-2,1,98,99,64,115,248,123,7,0,64,113,222,246,13,2,0,110,142,155,-224,22,7,1,116,116,214,37,67,144,126,46,0,80,130,0,64,130,153,151,-100,247,85,226,165,0,65,205,0,56,87,145,129,238,189,56,225,189,13,64,-88,255,249,0,64,60,239,222,1,79,95,208,128,194,82,132,155,194,130,224,-7,1,193,21,160,59,81,74,128,57,161,207,112,209,0,79,198,104,161,50,-227,2,1,193,56,230,123,2,99,175,226,13,1,244,85,2,229,84,15,229,-86,0,68,231,230,164,5,224,48,11,225,164,3,229,98,0,130,163,143,78,-128,44,233,206,0,131,146,228,65,6,227,123,4,196,204,160,79,130,174,224,-28,6,160,104,96,97,131,88,64,47,237,97,2,192,94,226,75,0,128,23,-240,233,8,12,108,105,98,47,68,97,116,97,47,76,105,115,116,144,227,4,-53,51,54,58,53,240,226,2,224,0,5,225,156,21,101,2,225,162,0,228,-239,3,208,94,128,215,240,114,0,224,215,26,233,78,2,128,204,64,44,154,-160,226,10,0,224,39,12,64,15,224,142,3,160,0,66,171,0,51,243,69,-0,66,32,227,121,0,224,2,1,225,70,2,128,1,105,132,200,161,224,23,-2,192,189,224,26,0,235,186,5,229,88,2,224,52,0,228,128,1,224,74,-7,226,62,4,197,189,230,50,1,160,52,224,41,1,167,202,96,82,224,23,-0,224,17,6,96,8,128,43,251,134,1,133,171,251,111,0,245,48,0,224,-93,2,96,36,233,131,1,224,89,1,224,8,0,92,50,107,86,98,103,2,-49,51,52,243,254,14,1,61,61,162,77,96,38,68,97,68,202,224,113,0,-131,99,233,155,2,128,1,166,156,224,16,16,64,117,126,124,74,164,133,53,-0,55,83,201,123,105,68,208,125,230,253,72,1,224,1,1,132,146,245,184,-6,225,212,8,160,110,224,22,7,239,234,0,224,45,28,224,22,0,193,193,-228,172,1,224,14,0,224,51,3,179,129,193,119,172,154,189,158,225,107,17,-2,79,32,35,70,104,162,228,225,102,13,64,94,226,65,1,226,125,3,226,-87,4,99,87,160,50,192,0,160,142,199,112,231,228,0,67,73,214,118,1,-80,32,103,35,155,243,64,117,1,10,65,92,5,64,12,149,240,0,80,134,-42,91,120,128,3,70,6,2,90,32,90,166,125,232,19,20,71,117,5,10,-65,32,95,52,56,64,172,159,214,98,216,0,90,129,99,128,193,64,20,66,-156,160,20,232,172,6,237,22,2,64,96,236,251,1,128,65,194,226,1,85,-32,224,29,2,224,71,10,224,59,4,96,31,160,129,103,219,224,28,0,224,-109,2,224,36,1,233,62,7,69,143,0,48,125,2,110,101,64,232,139,100,-226,45,5,66,196,64,27,203,59,229,128,8,229,83,0,134,134,64,79,99,-213,96,210,229,19,5,230,34,1,64,81,0,54,192,109,119,36,96,39,66,-223,161,99,229,163,1,228,78,0,128,230,224,70,1,128,135,224,86,2,192,-148,160,154,64,100,216,229,96,182,128,90,197,48,237,63,3,197,43,250,12,-4,128,23,161,15,252,146,3,0,85,174,83,232,4,2,238,146,19,224,37,-10,202,40,0,85,66,48,129,141,97,58,0,52,75,185,162,79,137,117,95,-58,105,251,138,200,64,211,136,235,3,95,56,55,50,239,159,9,0,49,64,-46,239,179,11,224,19,7,224,39,11,139,70,224,239,11,2,95,56,55,112,-50,91,206,101,47,67,57,128,18,160,152,224,57,9,159,133,3,75,32,95,-53,177,122,64,12,0,83,163,38,224,61,5,131,137,160,98,0,54,96,5,-227,130,1,96,90,224,168,5,66,218,224,110,7,64,72,224,168,2,96,69,-192,155,96,134,224,175,7,224,196,12,225,19,7,0,49,64,135,224,19,7,-114,36,224,126,6,132,127,192,81,0,56,91,68,128,100,224,98,7,224,56,-6,0,49,145,163,224,183,3,224,60,2,224,161,11,225,12,6,0,49,65,-103,224,84,7,65,201,224,122,8,224,78,12,224,37,2,229,173,0,224,239,-6,225,2,11,64,238,224,19,7,225,149,10,0,49,129,149,225,223,3,225,-127,10,224,240,0,224,62,8,146,45,224,60,9,0,85,114,87,226,72,3,-161,240,130,105,224,86,7,225,51,7,65,115,224,106,6,65,211,225,11,2,-133,99,225,189,9,226,97,15,225,13,8,64,23,224,18,6,225,168,10,129,-167,226,252,8,212,107,227,103,27,64,227,179,223,243,230,0,226,34,7,226,-175,10,225,88,16,226,35,18,225,80,2,100,136,0,51,228,136,18,64,59,-224,134,6,104,66,224,134,5,132,35,226,30,22,224,20,23,224,237,31,224,-56,6,227,14,22,225,223,7,64,240,136,111,160,240,225,181,8,103,76,226,-135,4,160,54,136,144,96,54,0,67,104,119,224,118,5,224,13,13,226,10,-4,64,69,136,201,160,69,219,34,243,14,4,225,82,0,224,25,13,96,74,-230,209,8,100,63,227,139,12,230,180,7,184,254,229,74,1,228,172,4,224,-49,11,96,139,225,41,7,224,49,3,224,141,8,130,205,225,228,11,224,91,-7,96,24,224,183,11,72,216,1,52,51,236,2,2,25,72,97,115,76,111,-99,32,69,68,101,102,58,32,117,110,105,109,112,108,101,109,101,110,116,101,-100,140,26,0,58,129,102,104,39,97,94,246,141,2,96,92,160,35,137,30,-225,253,6,192,119,64,32,201,35,192,68,0,80,198,251,224,74,8,0,54,-226,17,5,0,75,224,78,8,224,15,9,224,232,8,64,71,136,222,7,95,-49,49,57,32,95,50,57,74,0,232,48,0,0,52,139,131,0,53,224,19,-0,64,47,168,58,3,54,32,95,57,86,69,2,95,49,48,64,159,64,25,-131,203,105,172,65,61,136,252,120,253,225,72,1,11,105,109,112,111,115,115,-105,98,108,101,58,32,129,58,130,95,153,36,169,233,0,49,131,6,96,234,-97,10,0,49,157,84,186,135,224,86,0,2,79,32,35,74,162,209,77,96,-56,96,40,239,45,0,64,150,163,113,224,224,4,134,20,204,166,249,162,0,-128,120,4,54,32,95,51,48,235,33,0,224,107,1,64,250,208,18,224,23,-0,160,53,1,50,57,176,74,192,44,75,9,96,44,224,31,4,64,0,225,-81,0,64,132,64,160,131,219,0,80,76,107,89,248,114,221,227,156,17,97,-186,234,84,15,89,20,200,247,226,238,8,96,57,185,95,233,28,0,234,87,-13,161,27,250,187,6,240,137,5,238,130,4,0,58,128,34,243,153,8,0,-55,64,235,227,75,5,7,99,111,110,65,114,105,116,121,175,84,5,67,32,-95,54,55,54,236,232,5,128,132,129,199,64,89,131,54,0,66,251,187,2,-64,6,65,162,162,61,0,56,64,211,186,141,130,67,1,50,51,66,129,1,-95,52,101,70,162,86,224,35,1,1,95,50,149,122,64,92,131,114,102,1,-144,188,129,85,236,236,3,247,1,0,64,8,65,9,140,209,89,92,108,127,-224,153,3,225,181,1,117,207,227,7,0,224,186,4,96,76,236,246,0,252,-146,3,155,227,220,107,64,32,224,186,6,248,245,5,112,32,64,138,163,198,-225,32,7,225,28,6,225,25,0,1,95,51,99,208,224,91,5,216,46,64,-79,131,230,96,47,0,50,124,41,4,95,56,32,64,80,140,181,64,31,167,-184,96,29,0,83,76,104,192,136,195,110,96,85,0,48,162,6,128,68,212,-20,96,157,108,42,128,26,141,122,224,40,20,0,90,224,40,2,2,95,51,-54,99,197,97,34,64,114,167,28,96,230,81,63,224,71,0,189,78,224,224,-1,0,49,125,19,183,26,0,57,224,11,1,0,50,129,55,192,80,131,133,-0,73,67,145,64,70,64,92,0,51,96,143,225,169,3,69,2,225,152,4,-0,95,96,80,113,192,64,56,226,180,0,0,54,66,225,186,71,64,194,64,-28,130,116,128,97,130,69,110,194,209,26,0,50,108,139,64,7,0,52,128,-47,229,165,0,241,51,3,64,84,99,142,64,33,165,151,224,33,6,0,57,-224,33,2,197,159,0,89,98,22,214,34,64,214,66,241,97,53,0,48,64,-104,128,6,2,95,49,50,107,162,132,35,131,28,160,5,224,21,10,225,193,-0,129,183,96,80,132,167,192,105,96,39,131,27,224,42,4,180,120,192,16,-208,55,232,50,5,224,33,3,242,195,0,224,16,16,224,67,8,233,74,0,-224,50,17,252,111,1,64,210,197,21,224,168,2,252,145,0,224,17,0,97,-34,129,250,225,12,1,187,69,192,38,69,13,224,13,1,64,48,104,116,97,-47,128,42,145,8,0,48,70,117,228,101,1,128,38,165,106,252,212,0,160,-126,228,55,0,160,168,96,29,224,183,2,224,17,11,134,43,224,137,1,128,-155,96,16,224,39,6,225,224,1,225,11,19,128,80,64,168,233,51,0,224,-71,9,225,11,0,224,118,5,151,214,101,159,128,25,199,135,180,46,0,79,-99,246,3,49,54,32,79,96,96,0,55,246,253,3,224,163,1,96,2,160,-94,160,148,182,169,193,105,151,67,192,133,226,222,15,204,239,160,229,88,224,-127,79,112,124,224,64,3,194,201,160,90,128,21,192,76,224,82,2,225,204,-6,128,96,224,82,2,193,213,224,22,6,128,54,96,204,133,135,64,78,0,-57,251,4,3,0,104,167,49,128,201,122,164,224,41,14,1,118,115,160,42,-226,121,2,1,49,57,171,188,96,14,1,57,56,97,126,97,54,68,102,231,-37,0,1,57,56,110,99,248,122,13,226,230,2,224,75,1,99,7,105,189,-130,215,102,34,224,26,2,162,33,130,109,68,135,213,114,64,1,1,80,32,-143,224,161,195,0,32,83,129,128,37,133,212,192,35,64,34,0,80,133,10,-133,156,129,135,105,175,244,147,1,158,224,128,51,96,182,130,91,162,17,185,-124,70,202,114,132,98,136,233,195,9,64,0,8,95,53,55,48,32,95,50,-55,54,201,16,0,58,97,98,160,120,2,53,54,55,97,124,0,51,75,132,-65,232,64,77,64,33,171,222,2,49,50,48,98,13,0,48,66,194,67,221,-2,50,48,56,164,133,192,15,0,57,174,82,96,165,160,32,244,115,1,66,-243,200,88,1,49,50,77,94,129,166,81,31,130,119,245,60,0,64,64,224,-56,2,0,54,96,56,106,75,64,54,225,65,1,98,90,129,65,65,144,181,-54,224,82,22,64,44,134,53,128,81,225,185,1,0,80,87,28,224,81,1,-167,129,224,248,43,108,67,224,191,0,206,161,1,52,53,129,154,64,33,2,-55,32,64,235,80,3,0,58,128,52,224,38,11,227,2,1,1,91,93,99,-1,64,43,129,148,224,26,1,4,68,97,116,97,46,92,46,6,95,84,121,-112,101,46,34,96,193,64,61,226,148,0,117,79,224,10,6,194,154,96,44,-129,101,97,5,171,120,96,22,199,164,2,50,48,51,65,46,88,240,96,38,-104,199,71,216,96,37,169,57,132,34,77,141,254,234,5,0,102,131,186,98,-100,184,177,138,14,224,40,14,96,83,193,152,0,67,106,117,67,17,0,51,-74,167,224,45,1,1,40,41,96,45,3,80,32,95,51,65,254,66,89,202,-226,106,106,108,220,0,64,128,28,100,96,0,57,130,23,2,95,56,48,187,-99,250,147,1,96,158,64,32,135,87,1,95,55,67,55,64,133,162,5,75,-204,1,48,51,134,31,69,229,68,166,80,247,1,95,57,64,84,224,14,0,-100,148,0,56,67,65,1,57,56,171,250,164,165,64,75,205,8,64,18,227,-27,0,0,58,128,31,1,10,65,246,181,96,196,55,64,170,0,55,204,236,-208,53,128,154,64,0,246,184,16,102,132,128,11,135,182,0,95,133,183,132,-118,3,50,54,56,32,243,113,0,224,78,2,242,144,8,246,174,19,2,49,-49,56,69,6,192,60,128,118,224,74,0,237,201,0,128,196,96,22,224,105,-3,246,172,53,224,91,3,185,159,224,135,5,128,254,224,61,7,182,177,225,-31,3,224,165,12,1,56,56,176,219,192,19,225,142,0,0,53,66,56,128,-35,253,6,7,246,220,34,192,172,225,205,6,128,25,135,255,246,202,74,200,-238,224,237,4,208,83,225,166,13,225,105,20,224,102,8,66,246,66,186,67,-191,225,154,13,224,77,2,0,51,116,116,224,38,1,161,119,64,45,201,161,-246,251,32,0,83,78,31,233,73,0,112,198,235,127,1,64,81,225,119,0,-226,178,4,225,114,0,192,158,224,32,9,247,26,50,225,88,4,160,86,100,-198,225,16,14,226,126,4,64,13,241,42,0,224,93,5,68,72,177,77,227,-228,1,224,53,1,172,24,226,143,9,246,91,15,224,130,15,225,251,21,224,-57,16,226,204,3,221,51,101,64,135,15,224,53,7,143,18,130,245,64,37,-135,15,247,147,52,226,231,56,224,30,39,247,197,32,192,50,225,247,21,194,-254,226,143,10,65,33,0,54,225,71,11,160,38,210,44,226,110,3,64,51,-136,33,224,51,13,96,110,192,99,64,44,169,166,1,32,80,225,170,14,224,-253,3,224,107,5,64,61,0,51,160,61,247,230,75,226,80,0,195,235,247,-224,8,227,21,1,224,36,10,96,120,96,72,204,55,224,109,10,131,94,224,-249,17,224,88,11,97,66,227,47,13,227,149,7,96,19,244,190,2,97,56,-225,155,16,228,192,0,195,30,202,240,64,139,64,15,136,174,0,75,244,235,-7,246,238,1,170,142,64,115,137,170,236,168,0,161,40,236,170,0,64,121,-160,43,131,170,0,75,167,4,72,39,96,3,161,226,0,56,131,163,101,116,-0,90,239,1,0,1,95,49,86,80,1,95,57,103,32,148,94,96,17,233,-238,4,0,64,107,78,237,255,0,224,31,10,106,15,116,62,224,29,4,1,-55,55,69,13,1,95,56,224,229,4,171,108,224,45,30,170,138,224,36,21,-1,45,62,238,193,1,97,135,98,51,64,244,0,54,161,166,133,107,64,165,-64,21,131,88,138,254,0,49,78,219,3,104,101,97,100,96,74,249,203,8,-0,68,75,255,4,84,101,120,116,46,64,35,4,58,32,101,109,112,182,140,-64,72,237,27,3,2,55,32,95,126,209,1,95,49,65,13,70,197,64,33,-131,88,83,186,1,49,56,237,16,4,98,251,109,16,0,49,75,43,226,76,-0,247,90,4,171,98,94,125,135,35,224,32,14,218,64,147,32,64,97,224,-41,4,99,9,160,41,96,29,82,207,96,37,147,125,162,5,2,49,49,55,-240,24,3,161,85,224,22,7,10,80,114,105,109,105,116,105,118,101,115,46,-193,119,224,91,4,140,13,0,64,66,133,225,147,0,161,46,207,140,0,85,-130,130,225,209,8,128,38,84,134,130,200,110,209,0,49,175,63,250,26,5,-5,36,115,117,112,101,114,192,160,239,143,2,64,64,131,9,150,250,237,232,-4,1,36,67,64,49,64,34,131,13,67,44,0,66,64,140,225,95,2,1,-95,56,121,107,64,246,169,212,64,47,130,72,4,98,115,43,43,46,65,203,-64,26,133,48,0,39,163,53,5,49,55,51,32,95,55,67,101,64,172,76,-210,64,127,1,56,52,248,21,9,75,199,181,227,112,254,110,55,116,82,64,-76,0,80,64,142,0,90,96,83,0,56,64,40,132,114,251,138,3,225,11,-8,20,100,117,112,108,105,99,97,116,101,32,100,101,102,105,110,105,116,105,-111,110,32,129,26,0,56,231,204,0,97,166,249,90,5,6,104,101,99,107,-68,117,112,194,205,64,92,246,131,0,64,192,1,95,54,96,195,3,54,53,-32,95,120,65,2,95,49,53,65,175,83,21,2,51,50,52,177,103,141,234,-162,39,0,50,98,207,0,55,130,244,64,194,140,191,1,49,49,64,196,0,-95,145,220,128,15,66,111,0,53,143,199,96,54,224,47,3,164,236,1,83,-32,71,75,186,123,64,16,66,175,245,32,1,79,108,224,7,1,194,249,229,-40,2,128,57,96,73,117,142,242,159,2,180,149,195,44,241,239,0,224,64,-1,96,8,224,61,0,71,20,192,14,192,115,224,13,11,247,41,2,150,50,-224,48,19,180,157,227,176,0,64,2,128,153,128,108,160,46,214,159,84,107,-233,17,0,165,253,192,113,192,43,182,41,197,221,64,74,178,185,233,213,1,-192,62,192,18,181,216,3,95,51,50,50,226,28,2,13,92,34,115,114,99,-47,77,105,99,114,111,72,115,47,81,0,9,46,104,115,92,34,44,51,51,-58,53,229,108,2,224,0,5,225,126,21,114,55,225,132,0,129,136,128,167,-136,86,128,169,160,14,160,185,224,232,1,243,145,0,96,65,244,108,5,224,-39,10,64,15,244,147,10,66,109,212,43,68,29,114,79,79,189,64,24,196,-158,224,196,10,128,167,130,47,199,57,224,103,0,128,10,207,154,98,137,0,-85,254,126,1,1,95,54,95,200,128,123,64,111,199,132,245,26,1,226,53,-2,129,42,1,75,32,183,198,194,44,192,7,161,214,128,9,128,2,161,56,-160,13,160,81,225,18,5,224,23,8,224,17,17,193,121,226,171,1,162,84,-224,123,0,224,119,4,224,61,8,224,64,2,224,65,2,96,218,224,46,14,-160,93,130,215,247,214,0,65,17,194,6,96,23,105,182,228,139,2,249,165,-1,225,63,0,224,60,3,96,2,230,128,0,224,137,3,221,106,97,95,160,-121,64,132,193,215,163,129,224,5,15,66,52,224,58,0,225,35,2,138,6,-128,87,225,252,0,227,151,1,225,108,14,100,99,227,36,0,160,196,160,136,-225,216,8,129,67,227,31,0,224,83,0,160,98,102,140,226,236,0,227,72,-2,224,72,14,225,129,5,224,31,4,129,193,128,87,100,199,164,82,152,129,-132,72,98,160,128,4,192,33,196,150,64,62,228,181,0,129,22,114,146,229,-206,1,229,216,2,224,58,9,196,158,84,239,224,42,5,195,200,225,119,1,-128,222,96,249,101,55,64,163,224,18,1,64,14,109,143,106,165,224,177,6,-251,40,1,224,245,0,224,8,0,226,174,18,224,28,1,224,29,41,224,190,-8,117,131,195,47,227,2,0,160,138,225,227,3,224,51,0,194,70,227,44,-0,64,35,149,57,235,35,2,172,242,130,179,181,226,1,48,57,224,25,1,-0,95,121,87,128,116,160,156,64,175,3,64,95,52,53,163,87,225,44,5,-121,165,215,121,168,182,176,195,128,67,1,95,53,76,170,96,112,177,211,98,-219,129,216,193,81,225,35,5,252,146,5,128,219,226,194,3,225,4,0,226,-191,91,226,174,3,240,24,0,235,212,1,100,109,133,121,132,63,224,24,4,-2,64,95,54,85,238,100,151,129,26,96,4,226,238,13,0,90,232,213,3,-128,233,226,200,31,0,75,183,67,226,200,13,225,15,15,224,13,4,101,18,-226,103,0,161,171,237,130,3,98,31,165,92,64,151,137,221,96,9,2,54,-50,51,206,126,65,240,1,54,57,226,110,8,64,138,224,162,0,160,8,160,-7,226,61,3,165,31,194,61,0,89,161,211,161,188,199,99,96,150,131,30,-64,39,128,229,132,43,135,37,160,63,132,44,135,129,197,119,64,24,106,43,-224,116,1,64,237,69,188,67,40,139,130,164,22,106,185,96,9,236,48,0,-4,79,32,35,54,52,232,55,2,64,8,71,189,204,87,236,43,7,192,91,-112,61,236,200,1,64,74,173,240,2,95,56,52,64,191,64,36,0,53,104,-108,64,43,144,19,1,54,52,76,80,64,22,172,96,96,14,139,139,249,215,-3,64,21,0,51,203,40,0,66,134,137,0,49,229,96,3,64,5,65,161,-6,49,50,52,32,79,32,35,67,144,192,193,197,76,64,67,139,108,64,61,-0,48,96,105,137,14,130,127,231,116,0,64,48,243,189,0,134,253,98,146,-225,242,4,236,210,0,230,103,1,227,131,1,129,154,224,13,10,196,22,163,-166,231,28,0,98,142,226,81,6,227,164,8,201,39,227,21,0,173,107,228,-251,8,64,155,65,142,254,95,0,73,62,231,18,0,99,6,64,34,0,57,-129,64,236,75,6,109,207,101,33,193,56,160,0,96,77,160,55,65,59,202,-49,140,45,224,238,5,231,127,10,228,96,0,163,243,74,6,225,1,7,229,-196,9,228,156,2,192,150,255,53,4,233,1,4,193,175,225,73,6,232,14,-0,170,178,233,93,3,3,67,32,95,51,67,15,160,43,193,57,163,88,192,-255,96,107,128,221,64,70,224,24,1,228,77,0,193,0,193,32,227,96,1,-160,170,1,95,52,92,213,225,39,2,237,98,0,64,1,191,132,228,186,3,-109,160,224,32,0,200,237,224,191,3,97,91,196,203,163,134,110,164,224,203,-1,231,11,4,224,53,39,224,50,13,239,217,5,228,92,0,239,107,1,99,-240,0,53,97,177,79,170,2,79,32,35,80,157,96,223,240,173,5,93,186,-4,55,48,32,95,50,80,96,234,211,3,164,114,65,71,181,152,0,80,140,-249,100,218,138,109,156,22,160,172,224,180,0,229,15,1,224,18,0,82,253,-191,52,96,17,254,187,0,157,91,77,252,68,219,64,29,132,178,224,111,22,-100,231,226,38,7,127,203,225,68,5,96,31,224,124,4,0,54,227,48,4,-193,248,229,165,0,226,96,0,230,181,1,131,241,162,172,224,220,2,163,4,-64,84,191,73,65,113,65,105,0,53,128,180,64,25,215,20,149,18,1,95,-49,122,236,118,110,0,51,96,247,224,10,3,192,30,64,55,133,103,99,24,-64,214,229,60,0,65,45,96,191,0,90,64,149,96,4,132,52,191,236,96,-40,255,175,0,78,87,3,95,49,49,52,132,44,73,89,109,251,102,213,67,-250,225,90,2,255,186,0,64,44,224,7,0,96,8,65,77,0,75,96,65,-64,19,206,160,228,104,1,225,48,1,128,75,143,106,135,218,0,83,229,81,-5,128,104,227,154,3,64,8,99,198,228,99,4,97,141,97,94,128,82,224,-135,0,0,64,124,249,64,65,96,237,64,19,149,72,227,248,0,81,226,247,-155,0,101,170,64,20,65,97,164,62,119,129,160,40,251,150,2,160,37,233,-123,2,0,49,88,65,96,42,0,51,98,28,160,143,128,107,244,230,0,224,-74,1,224,42,2,193,82,161,75,234,235,0,64,198,98,58,160,246,64,194,-183,22,97,43,174,27,96,174,64,43,65,25,202,166,224,113,10,192,34,64,-7,183,234,64,94,129,228,225,1,12,192,187,128,68,96,150,235,235,1,192,-185,231,132,3,185,22,196,244,166,40,234,38,0,64,230,75,250,64,41,64,-249,161,53,99,74,97,14,0,52,96,5,186,155,162,22,97,225,225,18,3,-0,52,129,9,163,70,192,53,72,198,64,22,168,137,232,92,5,72,218,100,-206,64,33,131,45,64,56,105,85,224,39,0,242,77,1,1,67,39,146,51,-64,45,179,236,225,33,33,224,252,1,224,23,0,129,21,224,207,2,0,51,-98,146,161,217,128,190,66,223,64,111,249,124,0,233,28,4,0,51,224,191,-2,131,152,224,191,19,0,83,224,191,1,64,105,229,63,1,194,92,128,118,-96,31,131,19,224,223,13,230,218,1,160,216,102,126,225,203,9,96,223,168,-136,192,19,66,114,64,102,129,185,224,207,6,87,51,167,62,96,36,0,54,-128,139,226,220,5,196,16,128,139,130,100,232,139,0,227,134,4,224,169,7,-224,162,0,226,116,11,228,195,0,226,137,12,226,127,0,226,191,2,224,79,-16,0,50,230,81,0,225,13,7,193,1,192,224,139,69,64,231,196,128,228,-53,2,226,4,0,226,178,4,0,54,225,34,1,0,73,128,61,130,241,225,-200,3,160,7,64,28,226,247,12,88,194,194,55,64,158,128,33,1,49,51,-224,27,3,64,26,235,100,0,225,164,4,226,116,2,68,126,230,73,6,0,-90,182,52,64,29,226,146,0,171,215,135,157,68,208,224,86,10,166,240,96,-33,229,145,0,96,151,1,50,32,184,97,97,120,129,125,226,153,2,226,92,-8,97,178,224,38,18,225,137,3,224,38,18,226,0,3,224,77,26,64,7,-224,77,26,64,7,224,38,18,169,4,224,77,23,166,19,224,194,23,198,58,-110,23,224,38,25,166,41,230,67,9,0,50,65,3,139,158,226,244,0,226,-238,5,192,140,192,44,128,9,228,131,9,1,75,52,215,119,224,31,14,0,-51,224,31,22,0,50,224,31,21,2,67,39,66,224,32,11,66,216,0,50,-228,92,4,224,59,10,0,66,165,31,224,58,9,194,155,224,26,9,95,5,-224,26,14,79,12,224,26,3,162,1,96,7,66,228,132,214,65,56,131,120,-164,252,64,26,132,16,229,125,5,132,247,240,76,8,144,81,67,253,157,14,-230,122,1,189,54,138,147,224,32,5,237,160,1,0,51,75,155,227,126,3,-98,40,224,110,12,192,89,128,64,247,227,5,96,4,192,99,206,225,224,135,-19,128,35,0,80,96,71,224,44,3,128,149,100,58,96,147,233,45,1,238,-110,0,224,186,4,160,180,224,35,21,2,79,32,35,74,183,224,223,0,101,-196,128,154,224,38,7,0,49,224,38,0,65,170,240,142,5,226,197,11,224,-38,21,226,204,0,224,38,21,226,211,0,160,0,243,21,1,224,58,1,98,-23,197,234,1,80,32,97,78,0,85,128,21,133,227,93,111,83,150,165,66,-133,214,235,222,4,192,7,203,230,64,85,226,129,0,224,181,7,64,31,232,-116,0,224,31,5,96,174,64,31,229,223,0,130,193,195,11,0,58,132,82,-224,58,10,137,65,64,31,133,225,224,58,0,201,137,64,26,227,23,6,198,-241,64,26,131,23,224,26,0,198,138,64,26,233,247,0,160,26,237,63,1,-68,151,97,10,237,65,1,104,126,237,65,13,0,64,98,159,130,143,226,187,-4,192,32,96,31,226,54,3,129,76,0,49,129,112,237,165,3,69,117,64,-7,237,174,0,128,18,173,164,169,217,69,98,3,10,65,32,79,82,197,64,-41,127,207,64,11,129,92,179,166,192,1,157,115,165,132,160,2,96,18,3,-95,49,49,48,108,219,3,58,49,49,48,233,220,3,162,235,128,217,224,14,-3,224,11,2,192,8,154,106,64,65,169,254,94,203,0,56,79,131,72,21,-67,44,79,89,159,54,96,201,64,42,207,107,132,25,209,192,224,109,1,224,-182,2,224,19,20,99,150,0,39,86,87,0,55,132,42,224,47,6,80,141,-87,253,0,57,72,116,1,95,51,65,111,160,0,225,13,2,241,106,5,100,-20,128,53,3,49,49,48,52,224,54,5,160,111,224,2,0,128,39,0,56,-65,131,224,38,2,160,73,224,86,1,4,67,32,95,56,57,137,195,64,84,-204,167,0,39,243,193,2,241,84,4,96,0,65,39,0,54,225,148,2,96,-251,192,88,65,117,64,32,208,0,7,49,48,32,75,32,85,32,90,192,197,-224,43,3,96,5,1,95,55,242,14,0,96,56,169,227,3,54,32,95,55,-64,183,214,23,0,48,66,174,64,31,130,153,0,85,172,128,177,0,0,56,-190,136,96,14,227,161,1,2,32,61,32,100,140,145,224,2,49,49,48,147,-30,64,70,228,45,0,0,57,81,249,100,198,96,29,64,120,0,57,158,131,-1,49,48,130,243,0,50,112,111,96,29,64,57,130,214,131,26,1,95,57,-66,75,96,136,0,57,71,146,203,39,0,57,65,48,224,65,1,128,7,128,-248,224,40,10,65,111,0,57,87,212,96,29,0,49,64,21,0,57,100,130,-231,228,0,128,103,0,64,192,24,78,210,229,216,1,224,92,0,96,30,3,-64,95,49,48,69,47,96,171,131,118,3,80,32,35,51,106,117,3,58,49,-48,57,196,203,2,48,53,56,192,196,1,49,48,83,105,1,49,48,71,227,-192,152,1,51,55,114,88,160,25,0,57,178,63,224,14,4,224,42,13,96,-68,224,42,8,224,15,1,97,130,64,136,210,244,128,138,228,169,1,224,2,-3,99,1,227,56,2,128,107,128,123,227,38,13,224,33,0,224,29,3,224,-26,5,192,22,224,19,2,224,201,27,0,53,67,120,2,48,54,54,129,49,-64,28,224,14,3,114,87,0,48,254,135,1,224,56,8,83,3,224,22,11,-173,65,225,32,1,82,167,192,28,224,78,0,128,30,161,57,216,195,0,89,-160,195,129,64,232,124,1,64,4,0,80,118,200,164,136,224,217,13,224,84,-1,225,119,4,225,61,4,224,2,1,96,134,225,137,1,68,139,225,140,0,-224,63,2,225,110,1,66,213,225,140,4,215,106,224,23,1,128,156,224,16,-1,68,111,160,146,224,171,1,129,3,224,187,7,224,188,1,224,52,2,161,-31,0,54,226,226,2,68,40,225,238,44,0,57,133,52,225,174,14,64,102,-199,164,192,102,224,83,32,64,60,206,202,224,60,18,129,253,224,14,6,96,-60,133,3,192,60,243,176,0,5,67,32,60,32,64,35,108,185,224,19,6,-141,12,224,19,6,224,39,11,109,169,65,50,224,19,2,137,156,224,211,1,-131,209,224,180,36,224,84,9,65,24,224,84,3,128,39,225,173,34,181,140,-225,157,4,0,55,183,173,224,126,9,244,197,1,160,127,101,131,224,147,6,-65,157,224,147,2,227,131,5,225,225,15,224,135,5,224,112,0,225,30,38,-225,136,7,111,89,224,19,7,64,106,224,179,7,64,241,226,124,30,224,200,-0,224,18,8,224,84,6,111,183,225,8,8,195,120,224,217,29,161,144,196,-32,225,128,8,144,136,224,119,6,66,125,224,158,9,225,74,38,224,64,2,-84,82,128,0,225,74,6,225,93,11,65,73,224,19,7,226,37,10,105,76,-226,167,33,224,165,13,225,148,10,225,194,35,224,147,8,64,126,225,38,29,-225,197,22,0,55,73,9,230,31,5,225,204,0,0,56,226,172,0,225,204,-7,66,47,224,146,6,66,171,225,137,3,133,55,226,123,10,227,112,16,225,-141,8,65,120,224,18,6,226,68,10,130,67,224,220,12,160,198,130,147,225,-130,31,226,215,12,199,246,64,28,226,103,4,224,142,8,64,247,225,220,15,-96,53,224,104,1,163,43,224,45,29,163,95,213,127,227,95,9,228,43,10,-226,36,32,232,234,12,225,151,1,227,145,50,194,126,166,200,203,133,230,200,-12,64,42,224,18,6,130,104,224,18,4,229,20,10,99,202,228,191,9,225,-95,21,224,36,4,224,21,0,83,44,224,195,7,224,78,5,224,143,7,231,-65,10,231,64,6,224,142,7,224,88,15,224,25,17,231,182,8,225,22,9,-66,45,226,138,12,225,138,1,128,77,227,164,3,77,36,0,48,83,186,224,-127,7,81,12,128,235,225,104,5,227,228,6,128,57,224,99,3,226,51,0,-65,237,209,129,65,237,64,28,0,48,224,90,0,64,29,209,127,108,152,202,-18,210,211,0,53,123,29,239,172,2,74,221,0,58,128,114,236,69,3,161,-218,96,127,117,214,66,197,1,64,83,83,221,124,172,179,233,64,172,127,141,-1,48,56,203,85,0,56,140,143,2,85,32,65,109,39,64,23,96,14,125,-231,96,45,224,187,3,226,225,2,64,29,234,10,5,228,183,10,225,157,6,-118,233,225,75,5,137,16,230,86,93,227,168,17,224,46,36,228,114,31,224,-57,7,228,132,35,230,116,1,230,40,18,65,130,235,80,26,228,214,5,224,-95,2,224,76,3,224,127,7,163,115,64,98,0,51,239,58,4,0,80,225,-44,34,224,227,22,128,99,64,98,229,16,20,109,228,225,115,6,64,79,224,-19,7,226,93,10,105,110,232,100,37,226,140,33,0,55,224,212,5,237,177,-7,226,47,2,233,73,51,230,142,6,167,0,164,152,224,109,8,224,156,1,-104,209,231,46,7,232,254,42,226,110,1,234,58,12,233,146,49,226,104,5,-193,17,129,20,240,186,46,224,177,4,225,65,30,224,61,7,227,39,5,97,-19,224,13,5,224,53,12,224,198,0,234,16,13,225,217,21,241,68,5,224,-143,7,231,138,1,226,152,32,225,251,2,199,60,224,117,1,225,229,6,225,-223,17,239,40,10,231,229,25,181,247,227,115,37,230,20,15,225,226,16,224,-196,15,229,201,38,232,80,13,224,138,4,195,172,224,204,25,227,107,6,225,-244,23,227,206,28,232,122,14,228,59,70,85,62,226,210,10,192,39,224,111,-72,160,23,169,112,224,118,15,64,0,70,27,233,62,3,228,191,15,228,89,-11,224,140,0,140,172,225,244,1,64,84,233,117,3,228,121,65,160,234,224,-21,6,192,121,225,38,1,226,189,6,1,55,56,228,114,4,192,183,150,212,-228,205,2,224,30,5,245,137,6,224,45,4,224,233,1,65,101,234,41,3,-138,8,234,43,0,105,232,119,68,192,15,0,65,96,64,64,57,219,222,225,-35,5,161,38,245,19,0,193,41,246,121,58,158,43,225,38,1,226,150,6,-225,54,8,230,181,3,224,22,8,225,23,5,161,159,68,191,225,26,1,220,-164,232,216,20,227,229,12,224,138,7,224,36,6,128,14,64,98,0,54,224,-98,4,128,90,171,195,64,237,233,186,29,230,208,7,175,119,64,67,221,22,-128,69,247,0,0,128,42,128,34,233,190,5,65,139,121,122,0,83,224,5,-0,64,4,64,52,192,3,224,103,0,128,119,192,174,233,163,3,225,45,16,-229,158,19,224,36,13,192,94,227,230,26,230,61,13,64,60,227,206,3,64,-40,0,48,96,5,66,63,0,58,128,7,224,185,6,227,212,35,227,112,7,-195,97,224,150,6,224,222,14,226,83,40,249,167,47,248,48,8,241,171,5,-228,24,0,65,16,227,217,3,226,149,6,72,140,250,159,8,0,83,224,146,-9,228,65,7,228,66,9,96,77,0,54,225,213,26,241,225,5,0,54,135,-64,64,60,227,32,3,224,166,7,236,247,7,225,209,36,132,176,225,58,17,-226,88,0,64,155,226,88,10,64,31,64,29,227,18,3,224,29,1,64,93,-64,29,130,209,0,75,224,186,8,130,172,250,199,8,64,11,131,189,160,187,-224,209,7,161,95,224,8,2,64,78,0,53,130,221,1,85,32,64,11,207,-204,156,244,64,36,190,174,254,33,6,7,84,109,111,100,117,108,101,32,126,-38,0,64,154,214,126,82,127,160,80,34,1,56,50,101,125,224,59,0,1,-79,32,107,239,129,235,133,234,128,49,1,64,67,91,126,64,146,66,143,224,-38,4,96,131,130,1,3,85,32,75,52,98,23,64,18,129,215,1,80,32,-73,111,160,169,129,206,95,151,127,192,98,180,159,192,64,29,161,133,2,57,-49,56,96,229,129,118,64,154,0,89,251,255,1,64,5,0,80,68,205,0,-95,127,253,1,49,52,129,33,226,186,3,96,8,64,41,0,95,103,167,96,-26,224,20,6,97,121,0,39,128,67,64,212,166,48,64,117,129,206,0,80,-190,59,64,94,160,100,160,6,97,7,160,63,96,66,1,48,53,96,102,226,-155,3,231,62,9,220,119,225,240,4,0,80,224,124,2,224,132,0,224,8,-0,64,140,222,225,1,95,49,64,169,4,75,32,95,49,51,162,148,0,52,-196,237,255,226,1,1,48,52,152,217,0,90,226,10,11,226,9,4,163,52,-97,216,130,8,66,17,224,48,5,12,40,46,46,46,41,32,119,104,101,114,-101,94,42,96,54,64,97,220,136,3,95,49,50,53,224,114,0,64,142,164,-107,3,54,32,95,57,167,139,95,198,64,25,228,105,0,0,57,71,10,3,-95,50,54,56,79,249,65,69,139,148,0,83,163,20,235,162,4,128,103,225,-73,1,95,203,1,61,61,224,24,2,3,85,32,64,90,96,128,165,78,224,-42,10,128,25,160,42,224,44,4,97,173,4,95,49,48,48,48,128,169,64,-151,2,57,55,57,164,226,96,181,0,54,162,207,240,164,79,0,57,73,119,-64,133,96,8,160,16,96,132,225,130,1,6,100,101,102,97,117,108,116,129,-179,1,95,57,107,50,224,34,6,1,58,58,128,29,64,198,0,51,132,239,-3,85,32,75,50,192,97,224,80,8,14,114,105,118,105,110,103,32,105,110,-115,116,97,110,99,101,160,90,224,59,0,240,197,15,223,124,162,207,0,90,-64,44,226,240,2,0,39,164,192,96,203,194,93,224,225,27,6,112,97,116,-116,101,114,110,224,134,1,65,75,96,35,2,79,32,35,69,89,161,145,64,-26,139,116,117,59,0,52,96,72,65,99,0,66,98,114,3,49,48,48,51,-128,90,2,79,32,35,69,41,160,54,96,29,127,65,117,14,130,189,64,75,-248,209,2,225,145,5,225,136,27,224,126,1,161,147,96,104,2,57,56,50,-128,62,86,8,96,7,67,11,224,70,4,0,44,163,126,99,3,225,116,3,-64,0,241,117,33,102,75,1,48,51,224,172,15,225,219,16,64,57,96,233,-128,61,232,130,6,225,187,9,224,94,13,4,99,108,97,115,115,224,91,1,-103,198,193,185,96,8,195,99,241,33,13,130,71,166,89,224,115,14,0,57,-96,7,228,142,5,4,105,110,102,105,120,96,118,101,152,0,52,70,63,2,-52,49,49,103,72,102,141,0,56,161,245,224,26,9,67,140,130,16,224,27,-5,162,36,224,115,0,3,95,49,49,56,69,75,164,227,225,203,35,194,7,-129,102,225,87,12,224,240,19,225,100,8,19,102,111,114,101,105,103,110,32,-105,109,112,111,114,116,32,99,99,97,108,108,226,125,9,160,148,160,184,6,-49,50,54,32,95,51,48,202,0,228,48,33,242,18,53,238,50,18,0,57,-179,46,224,29,3,224,26,5,226,129,44,129,20,166,201,76,235,185,69,2,-49,48,51,64,165,64,7,103,175,132,33,224,60,6,13,123,45,35,32,83,-79,85,82,67,69,32,35,45,125,161,11,1,64,80,193,82,224,44,5,8,-113,117,97,108,105,102,105,101,100,192,39,193,232,226,50,0,65,141,0,75,-129,138,226,175,5,2,32,97,115,130,33,1,95,55,194,80,224,101,0,228,-114,1,65,5,192,75,0,80,64,72,224,64,2,5,104,105,100,105,110,103,-160,121,96,44,228,96,14,3,79,32,35,52,226,226,1,196,91,218,231,128,-0,230,119,36,2,116,121,112,196,61,226,67,22,1,57,57,165,73,243,217,-19,224,114,9,224,193,26,195,81,226,190,25,224,103,14,68,229,193,209,230,-76,15,244,25,35,65,84,0,50,229,243,0,224,86,10,225,99,48,230,246,-21,163,163,244,32,25,227,62,9,224,130,22,2,110,101,119,224,133,31,124,-159,96,8,141,182,104,17,0,83,64,88,123,37,227,181,27,3,100,97,116,-97,224,106,5,224,79,1,64,59,72,83,192,7,224,215,53,224,105,9,224,-212,10,226,134,11,227,124,2,1,92,124,160,65,163,78,129,0,225,3,4,-128,0,74,43,174,192,104,136,73,229,224,52,0,172,216,64,48,138,76,230,-5,37,201,174,228,234,3,0,80,64,36,228,169,9,4,115,116,111,99,107,-195,179,225,229,18,224,27,5,2,97,110,121,231,206,2,0,75,160,90,64,-0,64,144,228,111,34,96,250,67,84,1,95,56,227,90,0,224,176,9,165,-142,224,6,2,224,247,13,1,118,105,225,191,2,130,255,65,69,142,30,230,-111,1,230,78,3,97,81,226,55,23,2,95,57,57,68,152,232,182,1,164,-100,0,80,96,33,64,230,225,185,0,197,229,2,49,48,52,192,253,192,30,-192,128,166,195,228,124,13,228,36,1,228,187,13,96,96,225,77,9,128,0,-64,236,142,252,224,102,0,96,5,192,47,2,49,50,51,225,126,0,224,18,-0,0,53,160,18,64,60,142,195,73,109,131,158,193,71,97,213,224,71,1,-75,6,160,70,193,104,64,61,142,116,65,185,195,228,0,85,234,234,0,99,-159,96,4,230,194,3,224,28,0,226,52,0,2,49,48,51,65,6,233,28,-8,224,208,3,225,33,9,3,40,46,46,41,230,90,0,64,31,0,58,134,-200,206,89,97,131,226,135,13,64,41,142,131,0,65,80,60,72,1,64,53,-0,52,117,12,97,4,0,80,175,69,175,67,96,15,64,9,128,21,73,89,-0,48,97,251,104,68,64,66,0,54,96,66,2,83,32,85,195,23,78,69,-226,177,3,97,119,224,129,0,227,42,29,231,21,22,225,49,4,224,66,0,-193,219,224,100,1,225,89,9,161,3,132,139,224,180,6,224,102,3,129,233,-2,95,57,56,99,10,225,127,5,1,61,62,161,125,96,74,214,116,80,168,-103,6,1,64,80,129,145,195,136,128,199,64,142,194,13,141,104,168,52,128,-162,0,57,243,232,0,65,108,147,71,1,51,48,97,163,246,11,0,0,50,-83,175,64,30,64,21,162,126,0,39,81,245,246,192,1,118,207,241,64,0,-160,12,167,19,160,15,113,234,128,2,0,67,120,254,234,139,2,2,66,32,-83,147,115,98,131,192,68,224,61,0,138,184,224,46,3,240,69,0,235,35,-0,151,84,110,234,66,78,128,5,102,252,160,81,240,203,2,108,230,128,10,-210,153,224,80,0,161,178,128,102,0,85,128,62,224,132,1,192,11,96,74,-160,208,196,232,160,96,160,58,128,35,1,95,54,80,170,96,20,64,64,241,-76,2,0,66,66,242,229,20,6,128,90,225,26,5,131,179,235,166,14,197,-87,96,58,160,14,98,52,164,52,128,204,0,75,199,29,224,175,44,224,160,-6,96,157,224,154,5,224,127,13,224,118,0,225,243,0,226,8,0,193,0,-129,126,193,148,73,195,66,188,236,48,0,96,190,99,161,160,144,160,24,84,-4,99,155,3,56,48,32,95,122,174,0,95,68,179,130,11,96,10,193,64,-128,94,236,131,1,0,51,80,125,235,197,2,1,91,93,195,81,224,43,0,-224,100,4,224,87,2,175,26,1,95,57,89,247,2,95,57,56,200,101,149,-120,131,175,64,126,0,52,102,188,1,66,32,140,88,2,95,57,56,97,162,-128,41,192,4,96,155,66,91,161,57,96,242,212,229,161,92,195,16,160,198,-129,45,161,50,234,104,2,96,134,198,8,235,44,5,96,182,224,26,13,96,-53,129,241,224,26,7,96,133,99,96,224,22,4,142,77,2,95,57,56,129,-219,96,190,226,5,5,248,158,4,167,124,130,22,96,11,231,109,8,199,110,-227,247,0,224,113,6,140,164,98,229,240,113,11,0,95,136,132,240,21,6,-121,8,224,149,2,164,248,232,95,7,228,53,0,96,181,225,4,9,224,208,-0,64,26,224,150,5,101,105,224,254,0,160,102,128,10,101,106,160,10,230,-97,1,242,240,2,101,115,128,119,249,209,0,96,97,96,96,231,255,17,224,-26,8,80,76,232,147,3,225,142,24,137,108,227,165,7,225,77,1,0,45,-198,90,193,141,226,56,13,0,49,97,102,224,26,13,98,24,225,51,13,169,-174,0,85,232,150,5,232,108,11,76,5,233,110,4,160,217,224,253,4,224,-33,7,237,124,7,64,223,130,57,65,10,97,142,67,138,65,124,224,73,6,-68,236,201,169,231,172,2,160,170,100,176,225,49,0,229,8,4,225,81,5,-226,224,1,233,254,5,232,116,30,2,95,57,57,162,22,224,67,1,232,83,-1,160,121,225,112,9,100,113,225,112,12,0,49,163,196,161,58,233,16,2,-232,171,2,226,53,12,224,227,17,226,53,11,242,173,12,163,179,242,23,9,-0,102,236,53,0,83,230,226,127,14,192,0,64,128,228,246,17,226,134,18,-97,197,224,26,13,227,213,17,119,71,225,15,3,225,17,1,224,16,1,142,-61,227,90,5,183,90,0,79,237,44,16,192,245,227,145,6,224,48,17,2,-116,104,101,183,112,199,242,224,43,17,2,101,108,115,174,57,227,49,9,225,-213,5,225,207,1,226,232,3,194,87,225,11,5,97,200,226,27,20,226,13,-0,192,74,235,54,0,2,49,48,48,79,97,83,119,224,171,6,1,100,111,-96,169,236,97,21,0,46,160,37,131,58,3,49,48,48,49,124,158,128,114,-239,186,2,231,43,0,229,193,15,99,79,228,25,8,150,228,65,200,131,111,-228,92,1,168,170,229,215,35,238,22,2,229,215,2,160,70,226,188,19,215,-220,224,25,9,227,209,17,227,208,3,225,106,4,192,8,225,72,6,1,108,-101,181,129,225,70,21,160,246,226,95,15,0,105,226,137,0,160,124,228,30,-4,128,128,162,164,162,18,224,71,13,1,99,97,226,167,0,224,25,6,0,-111,195,30,224,167,20,134,91,96,0,225,209,6,72,200,135,242,96,88,68,-92,135,161,224,22,1,65,200,96,7,229,246,1,94,216,165,127,116,53,0,-95,241,179,11,228,146,8,249,24,0,202,199,131,30,228,99,5,192,205,129,-164,231,11,10,225,200,0,128,33,4,64,95,53,54,55,138,13,161,84,104,-248,106,134,96,10,64,6,226,237,2,96,37,74,58,239,234,1,66,209,253,-249,0,192,92,192,117,96,131,225,52,1,128,3,194,121,139,237,234,178,0,-193,68,162,130,64,121,65,126,114,56,249,154,4,226,33,3,2,115,116,36,-129,39,202,174,129,113,160,73,236,14,1,235,17,7,247,120,2,225,74,0,-195,136,192,13,99,120,129,40,1,39,32,163,100,235,40,2,65,225,0,65,-96,11,64,9,129,208,125,94,101,15,64,15,0,58,110,188,174,176,226,185,-1,1,51,54,120,129,0,56,72,72,96,230,0,55,110,219,0,50,144,161,-79,157,0,79,161,83,96,84,79,161,239,61,0,128,45,128,90,223,59,1,-80,32,110,54,0,85,128,69,0,54,239,152,3,96,193,143,152,65,205,160,-24,154,27,99,238,96,14,128,218,225,218,1,161,0,230,113,0,162,77,230,-61,3,96,146,99,116,193,41,227,213,0,236,154,0,230,62,0,135,115,230,-36,0,64,140,244,244,0,228,130,9,255,84,10,106,161,229,72,5,233,117,-7,129,1,97,37,106,186,97,140,113,145,96,18,112,104,4,66,32,95,53,-56,65,69,1,54,54,220,135,1,64,85,172,232,224,98,6,250,209,16,96,-45,64,104,251,85,10,224,22,14,248,71,13,229,148,8,228,91,12,128,80,-192,75,189,222,64,226,98,66,96,28,5,53,51,53,32,95,53,68,84,192,-133,224,36,0,130,177,96,146,0,48,140,85,228,195,9,66,34,224,50,2,-65,24,224,12,4,160,100,224,95,0,224,43,6,237,1,7,97,221,0,51,-177,187,1,49,57,64,107,0,95,98,184,1,50,49,96,133,138,171,101,186,-0,95,74,171,192,153,0,95,74,116,192,12,64,67,210,15,1,49,57,64,-94,128,40,96,60,1,49,48,75,209,224,47,0,64,19,64,47,146,47,4,-102,115,104,111,119,82,63,64,35,182,16,163,219,115,221,130,158,234,4,21,-0,58,133,242,226,159,11,129,167,224,18,4,64,79,225,82,6,206,59,195,-69,100,49,234,219,5,142,160,166,187,160,12,224,25,1,232,166,1,183,56,-231,244,10,177,95,224,196,6,1,46,46,235,19,2,233,30,0,224,136,3,-224,116,83,224,108,10,224,95,22,224,185,21,225,107,7,96,178,230,209,9,-162,146,64,113,224,100,31,224,168,15,68,209,232,79,0,225,8,6,245,206,-2,228,245,0,96,7,253,106,19,234,43,3,137,252,158,140,160,225,66,107,-133,247,224,141,3,128,139,233,248,32,64,68,134,12,234,223,3,232,112,2,-250,217,0,224,17,0,206,36,64,58,0,54,213,105,1,49,52,183,5,64,-21,198,46,0,80,168,159,129,120,71,194,64,41,114,133,0,54,65,124,102,-123,64,48,214,17,149,153,232,168,11,178,107,1,51,55,247,104,2,128,30,-168,141,64,12,129,240,64,2,224,59,4,227,112,5,224,25,1,224,27,5,-229,182,16,6,75,51,32,95,51,52,51,226,10,2,8,115,101,112,49,32,-65,98,111,118,202,27,224,37,17,4,66,101,115,105,100,224,38,0,224,124,-1,227,246,12,1,95,57,154,31,224,37,0,213,197,128,168,100,3,231,100,-2,1,57,53,134,172,128,79,64,189,231,112,1,64,88,0,67,64,34,101,-64,161,47,64,51,65,120,0,95,167,193,128,0,129,93,225,56,2,224,97,-0,230,122,8,128,28,224,144,1,224,142,1,224,205,4,170,199,224,195,2,-224,79,0,116,114,79,203,225,189,0,128,69,169,42,64,11,3,95,49,55,-52,181,29,192,113,224,71,15,134,57,224,71,10,97,1,66,108,96,181,104,-113,224,85,1,245,104,0,96,59,224,202,1,224,199,8,128,38,192,124,128,-123,2,95,57,52,106,21,225,103,39,224,196,4,137,2,0,53,166,79,149,-10,96,0,1,95,55,64,210,67,18,135,7,99,18,161,160,224,161,5,96,-184,0,64,152,94,225,146,2,225,195,21,161,152,225,179,1,98,82,248,65,-0,224,30,5,225,112,0,223,65,226,99,0,224,66,18,226,191,12,160,135,-64,234,64,31,64,14,64,11,65,94,193,202,1,54,48,198,222,100,25,252,-96,0,115,0,64,6,193,178,161,58,71,192,97,109,226,211,12,164,102,97,-72,136,12,231,142,8,65,115,228,1,49,7,111,110,101,76,105,110,101,114,-228,5,25,224,41,0,228,9,6,228,0,20,74,126,193,33,64,0,234,5,-12,227,114,8,136,176,131,94,224,61,1,224,21,0,76,194,224,83,1,233,-202,12,95,169,164,130,64,140,0,53,230,105,2,137,35,0,83,65,173,197,-162,217,142,225,252,6,164,151,224,64,1,64,62,137,82,238,45,3,0,48,-64,36,64,7,70,135,0,58,139,230,64,97,98,192,118,89,224,94,0,98,-229,128,174,230,24,5,96,196,96,205,195,141,224,19,0,128,17,210,57,207,-217,239,59,0,250,96,4,185,239,160,48,170,198,103,32,64,159,205,52,64,-168,192,195,233,145,5,148,109,199,250,160,17,232,62,6,2,32,92,124,240,-215,0,231,254,39,192,175,64,132,167,172,1,32,80,234,157,0,232,119,7,-74,166,224,124,6,1,60,45,233,32,6,192,7,129,137,241,132,54,64,150,-0,54,160,150,2,95,57,57,112,204,189,116,75,172,253,154,3,64,155,225,-228,0,98,11,255,246,6,3,49,48,48,48,66,147,225,184,0,224,150,3,-3,119,104,101,114,195,65,224,153,28,128,155,133,74,4,95,49,48,52,53,-96,131,132,17,229,131,1,132,64,64,25,130,228,224,197,1,168,208,64,146,-169,102,186,220,162,137,231,147,6,229,5,7,211,73,163,49,231,194,7,224,-46,7,2,95,57,55,64,183,101,52,96,5,0,58,96,134,225,238,19,98,-68,0,55,226,76,9,248,29,1,151,166,180,238,192,31,0,54,233,213,0,-226,9,3,224,73,35,235,29,14,1,58,57,88,16,65,109,3,54,32,95,-56,107,1,64,75,0,57,64,8,2,51,54,53,97,90,0,55,231,42,1,-170,30,64,54,240,145,1,178,19,102,250,97,114,125,186,0,67,80,14,128,-137,240,79,1,182,196,177,89,64,92,231,218,1,0,58,64,198,129,232,227,-152,20,5,102,111,114,97,108,108,227,155,5,160,235,111,249,225,53,1,225,-11,0,1,58,57,91,143,134,85,228,174,0,133,13,193,227,225,219,6,64,-165,136,67,132,192,98,98,98,164,225,81,1,129,222,0,56,101,220,236,251,-12,246,119,11,248,200,1,0,57,75,152,128,156,131,100,65,217,2,49,32,-58,96,23,96,171,0,75,254,77,0,0,55,104,102,3,95,56,52,51,107,-209,249,90,1,0,58,96,149,225,191,27,102,71,225,191,2,198,31,0,73,-229,28,3,225,5,0,100,202,108,14,166,223,224,35,1,2,95,57,55,108,-110,140,188,160,116,96,113,96,212,129,28,0,58,96,8,163,9,0,75,71,-29,161,54,224,9,3,224,11,1,0,58,125,237,239,195,0,2,95,56,52,-133,112,64,240,96,114,4,56,55,32,95,56,96,139,1,95,55,66,38,128,-51,130,186,2,75,32,89,99,232,65,48,233,1,4,138,38,98,101,207,150,-161,251,119,45,255,168,2,160,56,0,80,65,105,161,206,193,122,116,148,98,-74,169,236,97,188,2,52,53,49,96,33,0,56,77,70,99,143,128,34,128,-0,0,58,64,175,128,253,192,102,128,70,2,56,54,53,178,227,224,22,5,-0,53,98,185,1,95,54,84,66,234,150,0,165,148,96,188,211,252,136,223,-64,20,237,179,1,244,17,0,1,57,56,205,151,1,80,32,184,129,64,20,-130,78,238,46,13,72,60,238,46,5,65,121,163,52,66,218,165,94,64,249,-224,143,0,130,58,247,12,4,161,148,0,58,97,207,160,51,117,241,104,82,-0,58,96,36,224,74,4,101,169,99,229,229,168,93,64,158,229,168,3,64,-133,160,121,97,46,129,188,128,60,117,70,64,35,129,120,227,90,5,0,55,-79,14,227,90,0,0,50,229,26,10,70,216,64,54,64,250,0,58,96,21,-227,104,18,98,81,227,104,21,167,48,163,104,64,127,96,109,196,61,64,8,-224,201,3,237,99,2,224,201,1,129,201,205,137,65,42,193,101,225,60,2,-161,61,225,63,9,224,24,0,224,168,1,192,19,97,83,192,85,96,71,129,-101,225,103,0,130,44,0,65,65,9,130,26,2,95,57,54,65,71,73,173,-2,58,57,54,130,23,6,95,57,54,55,32,35,49,71,183,1,80,32,75,-27,104,37,0,58,96,36,5,10,65,32,80,32,58,64,32,130,65,76,152,-1,57,54,144,148,136,12,74,0,0,75,96,77,129,176,0,85,87,171,0,-58,96,23,162,167,64,13,195,27,133,171,226,105,1,203,21,70,156,253,57,-4,138,207,78,151,1,57,51,238,66,5,2,95,57,53,133,77,108,251,166,-37,2,95,49,48,68,78,87,218,68,32,0,48,239,18,0,0,58,96,173,-194,3,64,87,236,178,10,192,138,2,95,57,53,120,186,160,89,226,50,0,-229,153,5,224,47,3,72,27,224,47,1,0,58,96,9,137,178,227,34,0,-238,103,2,129,181,237,89,8,240,182,3,224,39,15,164,223,238,183,0,240,-77,15,165,36,226,31,2,64,8,206,148,224,7,5,224,190,7,224,54,4,-224,145,0,227,218,2,192,13,133,222,163,75,69,227,101,78,0,57,101,94,-96,29,224,89,6,160,165,225,220,0,1,95,57,69,247,161,62,129,194,134,-42,160,15,224,51,0,224,219,5,241,247,7,192,171,161,17,226,76,1,241,-237,0,224,88,7,224,104,11,225,119,1,160,226,238,58,5,224,94,0,160,-32,224,145,4,242,82,1,208,243,130,166,128,224,142,92,224,118,12,224,50,-7,133,176,160,130,229,140,0,227,37,3,160,217,228,29,7,224,225,9,128,-88,144,36,160,0,164,104,224,193,11,224,53,5,225,61,0,87,180,145,186,-224,188,10,132,100,0,58,96,16,209,118,128,86,130,17,164,225,225,85,15,-193,52,227,93,8,192,24,0,85,199,22,224,33,8,165,166,239,108,1,103,-205,65,104,0,55,71,62,70,11,233,155,0,64,255,99,247,0,95,70,255,-0,58,97,145,68,237,1,52,56,97,68,64,143,2,95,52,53,65,226,65,-110,2,95,51,48,74,196,98,194,0,58,96,6,227,198,3,192,193,192,207,-227,114,10,225,209,5,228,79,3,225,66,2,128,14,64,0,227,200,1,225,-221,12,163,238,225,0,0,157,169,115,56,97,4,195,90,128,54,227,231,20,-224,67,5,97,221,104,27,246,84,1,228,1,3,64,252,246,226,0,128,50,-193,193,246,85,12,98,239,132,22,224,210,0,228,235,22,160,25,224,27,5,-242,78,34,0,97,82,69,3,78,101,115,116,242,79,25,224,42,1,246,90,-58,225,178,13,228,108,1,129,250,97,47,193,238,161,198,224,24,16,64,0,-225,54,24,161,155,224,126,1,224,39,1,228,140,10,226,18,7,197,170,228,-140,2,205,87,225,189,2,224,151,5,246,84,7,224,82,2,132,223,131,235,-224,74,0,78,89,72,24,171,133,96,116,134,41,193,48,225,54,2,225,55,-0,232,232,10,160,151,224,138,2,224,205,4,131,3,224,150,0,101,56,246,-169,11,230,187,0,225,42,15,160,40,224,92,4,128,1,228,246,2,225,179,-16,192,52,182,148,96,0,108,158,0,58,96,36,249,156,6,227,64,22,192,-153,225,79,0,243,192,0,224,23,1,225,200,1,225,237,12,229,72,14,224,-167,0,129,179,2,64,95,56,233,22,1,229,91,29,96,125,225,76,0,192,-72,1,95,49,95,247,165,59,71,252,3,54,53,32,95,102,109,128,67,225,-70,2,193,33,96,16,0,55,96,253,0,50,91,220,101,169,225,55,1,65,-56,138,47,128,240,230,68,34,192,48,224,28,4,96,227,224,224,8,96,21,-232,63,5,225,57,14,97,54,128,198,152,118,225,57,4,225,58,26,253,78,-0,137,25,74,176,165,105,99,132,70,112,0,58,96,90,140,170,2,50,32,-58,100,67,172,73,1,80,32,133,42,0,80,98,81,206,7,1,67,39,98,-84,194,200,98,151,228,19,0,76,105,226,195,0,135,159,128,39,201,19,226,-73,25,227,52,11,224,39,4,229,190,4,254,48,6,64,213,65,19,225,108,-4,229,140,6,0,98,69,135,0,103,213,44,229,101,4,160,84,164,97,192,-135,197,102,160,198,110,214,96,172,105,31,226,223,1,160,169,228,228,2,194,-241,251,28,7,163,146,224,227,17,228,24,0,164,178,231,239,11,234,211,1,-224,124,8,103,222,65,162,99,110,233,236,11,228,95,0,226,48,5,128,138,-225,3,0,192,193,225,223,0,97,187,224,37,0,225,190,11,225,55,1,193,-194,224,46,13,196,177,192,28,225,200,50,0,49,225,201,11,224,88,0,226,-133,3,225,208,4,227,173,0,132,232,64,61,97,82,225,213,2,229,148,0,-72,192,160,70,225,187,5,224,220,13,225,113,1,230,2,24,164,128,224,109,-4,160,79,225,203,2,227,235,0,78,160,64,8,228,10,1,253,24,2,224,-68,8,225,231,2,226,138,14,229,104,4,0,64,111,52,104,194,64,6,64,-4,0,58,110,229,111,126,68,57,0,73,100,10,207,195,3,52,56,32,58,-96,95,210,111,64,137,114,111,0,52,182,80,71,138,0,58,96,195,228,83,-1,96,241,100,83,71,167,128,37,0,52,64,37,210,205,96,37,98,78,128,-37,132,159,129,113,129,164,64,138,0,58,99,132,234,32,1,226,112,8,1,-95,57,82,198,128,13,224,246,3,1,95,54,84,72,172,150,96,208,64,82,-208,86,167,28,1,52,54,230,75,3,128,123,230,14,2,134,146,96,90,225,-248,4,195,147,131,42,230,14,36,199,136,230,14,11,192,86,230,14,0,96,-217,98,7,255,33,12,252,39,15,150,0,128,110,220,83,227,84,6,3,102,-105,116,115,250,119,0,147,235,64,108,130,1,0,53,162,1,67,102,85,116,-0,50,230,15,1,96,240,225,132,1,233,109,0,225,148,0,193,166,239,29,-1,230,44,10,227,48,2,230,38,15,225,37,3,229,26,2,224,35,4,235,-7,2,228,67,3,64,22,224,238,6,10,100,105,115,112,108,97,121,32,108,-97,121,203,148,192,141,195,49,231,116,5,192,29,65,79,173,227,225,178,0,-229,167,13,129,103,192,55,97,191,2,50,50,49,78,39,93,96,224,67,0,-211,51,195,250,0,66,64,5,96,41,232,174,9,160,240,64,157,96,32,224,-172,0,228,26,15,225,101,7,233,237,7,225,97,10,225,187,1,225,94,61,-0,50,225,95,7,133,83,225,23,3,224,210,36,225,118,70,65,207,100,252,-64,9,97,1,96,5,99,254,0,58,115,251,229,4,5,0,51,132,225,128,-164,224,131,3,96,7,128,16,128,143,1,95,49,99,173,1,95,51,122,158,-0,51,105,200,224,11,1,2,95,57,51,130,91,74,193,0,49,96,92,64,-0,3,95,57,51,54,96,102,133,58,96,147,1,75,52,224,2,1,128,170,-96,154,0,54,192,154,0,54,192,154,182,123,112,97,0,66,137,157,228,140,-8,97,195,228,166,17,129,250,225,82,6,178,26,0,85,85,223,225,249,4,-64,24,164,192,228,90,3,224,43,12,97,197,224,43,10,224,114,13,171,182,-224,70,9,97,70,224,114,30,98,152,224,114,11,224,115,0,225,0,4,96,-30,224,141,12,98,23,224,97,11,64,24,224,141,31,98,12,224,141,11,224,-44,11,107,173,224,186,12,178,41,98,79,0,58,96,6,185,224,3,48,32,-95,50,64,241,102,197,86,71,0,52,87,65,88,95,1,49,49,128,26,2,-95,51,49,64,53,66,155,192,44,1,95,56,95,71,130,205,2,95,56,50,-192,21,0,52,90,77,77,54,192,58,2,64,95,49,157,2,96,116,231,128,-0,0,83,98,101,167,21,210,174,83,17,98,232,0,55,89,226,131,22,99,-203,83,213,0,51,78,124,1,51,49,98,134,190,10,131,164,68,64,227,175,-2,228,75,1,17,114,101,99,117,114,115,105,118,101,32,109,111,100,117,108,-101,58,32,132,81,160,180,100,53,1,95,56,96,73,224,59,8,13,44,32,-105,109,112,111,114,116,32,99,104,97,105,110,160,57,4,66,32,95,55,49,-82,131,126,56,128,57,161,91,0,56,83,165,1,58,57,65,119,67,73,4,-56,49,48,32,75,186,236,195,228,227,237,3,101,162,0,55,214,119,129,27,-212,148,0,66,97,100,0,55,88,248,6,95,55,57,49,32,95,52,152,72,-237,156,1,98,100,130,132,224,42,0,161,1,64,48,128,168,65,117,1,95,-56,93,33,64,0,128,57,167,74,191,80,71,78,200,168,193,130,1,95,56,-96,218,157,52,0,56,90,74,0,56,154,161,96,49,225,38,8,0,77,97,-88,9,32,110,111,116,32,102,111,117,110,100,193,98,161,186,225,101,0,1,-49,49,97,48,244,113,1,224,71,6,13,94,42,115,101,97,114,99,104,32,-112,97,116,104,61,128,67,128,178,165,220,65,51,96,69,125,203,225,240,14,-8,94,42,112,97,99,107,97,103,101,224,70,3,224,57,3,225,14,0,98,-67,1,50,54,88,0,4,54,32,95,51,48,162,161,160,228,230,246,3,161,-191,225,105,3,193,102,1,95,52,125,128,96,0,96,237,114,144,135,38,0,-39,131,20,161,154,224,31,1,82,109,71,153,235,160,2,225,37,0,197,254,-1,50,50,64,142,128,116,233,173,7,128,5,101,243,2,95,52,52,67,207,-0,50,200,105,192,171,226,61,2,81,176,224,157,7,169,108,217,4,2,95,-56,48,64,64,96,56,227,73,16,193,86,3,100,111,101,115,97,236,6,99,-111,110,116,97,105,110,163,88,161,244,97,105,193,174,199,59,246,218,0,227,-47,4,224,169,8,226,231,3,224,201,1,68,68,225,66,0,162,82,240,51,-0,130,96,99,74,0,80,71,22,155,67,103,22,239,61,6,128,0,65,78,-2,55,57,53,96,109,0,56,96,48,96,110,1,58,57,93,34,1,10,65,-224,238,2,2,46,116,120,79,236,0,58,96,33,103,42,2,95,57,50,123,-96,64,5,0,58,96,105,108,134,98,65,76,172,1,95,55,75,251,128,5,-0,58,96,37,163,202,65,109,108,148,1,50,54,224,100,6,161,83,75,59,-0,58,97,196,165,24,226,57,5,163,69,1,52,50,64,18,92,247,101,132,-104,32,1,95,55,92,157,69,180,105,234,129,37,194,155,64,51,67,110,225,-200,6,7,76,111,97,100,105,110,103,32,193,208,201,98,228,73,4,226,223,-0,0,55,116,178,226,206,9,132,121,224,147,2,98,169,4,56,52,32,95,-51,155,31,1,56,57,65,13,1,52,50,228,151,1,226,90,16,0,80,160,-137,29,99,111,109,112,105,108,101,32,118,101,114,115,105,111,110,32,109,105,-115,109,97,116,99,104,58,32,102,105,108,101,163,203,102,14,98,97,229,176,-10,160,211,128,42,64,145,165,224,96,139,224,44,7,160,110,0,114,96,45,-192,169,96,0,96,163,1,56,48,100,47,0,57,102,193,66,35,65,98,223,-11,97,13,70,147,0,56,97,37,166,147,224,24,4,71,118,192,24,70,215,-192,47,69,147,160,22,161,217,0,57,102,80,1,57,49,69,26,1,95,57,-100,166,163,250,2,51,54,53,128,81,68,101,1,95,56,66,139,2,95,57,-49,98,179,1,95,55,100,200,229,30,0,1,95,57,64,192,1,95,57,139,-7,228,91,6,135,43,67,52,1,95,57,100,89,0,58,96,214,138,36,0,-51,108,147,0,58,96,24,128,17,0,52,138,205,0,58,96,76,224,36,0,-64,178,0,58,96,101,3,10,65,32,90,69,31,0,58,96,139,192,32,74,-94,0,58,96,190,191,60,64,71,64,140,0,58,96,218,245,33,0,224,5,-1,67,141,123,153,200,67,99,154,1,56,57,106,26,128,6,224,25,6,97,-34,128,6,224,26,7,133,221,96,6,224,26,1,72,53,104,183,2,95,57,-49,101,65,128,6,0,58,97,114,203,35,160,184,163,127,204,63,0,66,244,-128,1,64,1,236,121,1,67,207,164,120,143,250,129,99,1,57,48,131,56,-87,37,1,54,53,64,124,0,51,67,49,0,55,152,78,229,110,0,239,163,-4,195,176,204,111,144,43,224,43,27,133,197,129,74,149,168,137,48,192,249,-231,194,14,231,189,9,16,117,108,116,105,112,108,101,32,105,110,115,116,97,-110,99,101,115,232,232,3,98,117,232,1,3,224,0,4,1,95,56,72,176,-108,120,1,48,50,65,104,131,41,97,76,170,90,128,200,0,90,64,198,192,-9,3,95,57,49,50,192,155,128,43,130,137,2,75,32,89,97,92,129,116,-236,101,12,96,131,224,25,12,135,1,129,50,235,96,1,236,54,2,139,40,-160,133,224,37,22,246,248,1,160,0,224,49,6,236,70,2,128,48,0,90,-192,232,224,38,23,128,89,0,57,235,145,2,64,0,240,148,18,128,40,130,-107,224,90,2,104,6,209,252,226,62,2,97,252,128,17,224,49,19,160,32,-104,225,212,219,192,49,128,28,153,39,244,216,1,225,64,19,98,100,225,63,-9,171,192,160,0,0,58,65,245,65,230,238,97,21,206,71,224,25,9,96,-76,237,122,12,101,14,237,122,12,79,180,224,184,18,96,30,224,185,10,134,-193,224,244,2,129,86,225,83,8,102,231,225,133,7,128,44,225,82,0,161,-72,224,88,5,162,6,0,48,195,47,224,164,19,100,214,224,163,20,225,21,-13,105,104,225,21,12,191,214,224,111,14,101,97,225,19,26,224,58,10,239,-209,2,224,170,15,224,59,16,227,132,14,224,59,3,227,249,14,224,231,3,-224,25,4,199,146,240,32,19,227,183,28,128,138,0,49,74,35,224,197,22,-129,234,224,58,8,5,57,48,52,32,95,53,152,41,224,65,22,64,35,224,-65,11,130,202,193,6,226,234,10,224,210,20,227,253,3,224,85,2,224,146,-2,224,58,16,227,35,14,229,29,2,240,86,0,100,214,0,58,96,6,163,-232,2,95,57,48,109,96,97,3,136,182,128,17,74,40,160,17,0,58,96,-219,224,48,1,107,100,73,123,0,58,96,32,75,48,3,47,61,32,58,96,-18,64,12,0,61,96,12,136,80,200,228,96,184,1,95,57,108,198,128,6,-0,58,64,103,64,34,0,73,64,45,216,37,118,116,99,150,88,108,64,229,-132,240,163,225,229,12,14,229,14,1,96,202,224,7,2,160,250,64,196,0,-48,189,17,1,52,56,72,82,177,117,161,24,99,232,0,58,96,6,202,64,-244,179,1,145,3,71,111,0,53,81,121,107,40,106,15,81,92,73,231,106,-23,0,58,71,98,128,61,96,198,160,152,81,160,249,237,3,205,221,233,254,-2,163,19,171,57,177,53,101,214,0,58,96,98,236,165,7,72,198,193,44,-194,100,149,242,0,83,194,114,64,171,217,14,1,95,56,69,216,192,6,0,-64,160,124,160,81,64,204,1,54,53,96,7,73,14,74,194,128,172,200,58,-0,58,73,162,64,110,148,172,64,232,105,194,202,65,64,83,0,58,105,239,-202,101,64,14,129,217,128,151,224,148,26,0,67,170,36,97,233,233,157,4,-175,188,160,141,0,58,96,37,113,187,66,177,66,130,96,33,96,122,0,58,-96,192,241,216,3,129,129,106,23,1,95,55,177,199,0,58,107,223,224,37,-7,64,35,128,45,97,30,224,45,0,64,46,235,97,0,117,171,96,18,129,-128,139,135,224,2,0,166,43,0,58,112,191,128,253,161,235,129,245,247,149,-6,2,95,56,54,198,1,128,2,124,176,162,205,211,192,113,72,173,188,160,-69,175,90,224,55,23,98,75,96,59,207,239,2,79,32,35,64,14,183,35,-226,140,1,192,80,192,14,227,84,2,224,78,11,208,51,0,49,67,86,160,-76,130,230,244,135,5,164,176,227,175,2,3,95,51,52,55,192,80,122,97,-0,95,140,70,67,84,77,223,209,168,97,106,1,95,55,163,191,224,70,6,-224,68,3,241,219,2,161,88,245,38,15,194,241,161,61,164,98,235,131,32,-0,70,78,244,243,63,7,147,47,242,155,6,224,168,23,196,90,225,92,2,-1,95,56,145,5,163,147,97,133,225,121,2,129,228,236,210,2,133,22,216,-127,1,56,55,98,69,245,202,1,83,64,168,64,245,225,3,160,14,117,230,-129,239,66,169,131,200,225,235,3,3,95,56,56,48,224,249,2,6,109,104,-115,105,110,46,104,220,60,64,41,217,120,96,171,246,85,8,64,27,241,33,-2,193,237,1,95,56,158,143,224,106,21,2,111,117,116,224,107,9,164,224,-226,232,5,224,91,1,64,70,64,120,192,144,225,86,0,161,115,97,53,64,-60,224,170,2,1,56,56,97,52,194,6,224,23,6,225,52,2,192,0,0,-58,97,83,247,138,9,0,49,78,147,2,95,56,56,65,192,64,26,113,110,-148,38,167,67,103,134,135,163,251,68,5,5,114,101,109,111,118,101,98,89,-5,102,97,105,108,101,100,128,246,0,58,96,131,11,10,65,32,94,117,110,-108,105,110,107,32,58,96,93,161,165,225,60,2,2,51,53,54,238,37,3,-6,72,83,67,80,80,72,83,210,43,128,44,224,46,4,163,79,252,135,1,-96,2,225,171,9,167,126,224,201,3,146,188,168,193,146,179,227,35,8,7,-82,117,110,32,99,112,112,104,206,158,227,30,12,2,95,56,56,160,10,194,-65,96,108,145,31,2,55,50,53,64,92,6,57,32,95,52,49,49,32,71,-0,224,93,1,96,89,192,220,224,222,2,224,131,5,7,32,45,45,115,116,-114,105,112,128,129,225,252,3,242,106,0,130,129,120,33,128,10,64,21,2,-95,56,56,163,35,224,39,0,3,67,39,32,79,224,229,0,224,149,15,1,-45,73,178,242,0,32,117,231,224,25,2,10,115,114,99,47,114,117,110,116,-105,109,101,128,34,101,41,64,78,1,54,56,192,117,85,120,197,144,229,164,-2,224,19,0,69,252,95,147,224,242,1,224,54,0,213,175,133,151,129,62,-225,10,7,0,79,225,46,1,98,86,135,39,0,79,224,35,2,8,45,68,-95,95,77,72,83,95,95,64,41,0,75,71,76,65,6,134,186,226,229,11,-129,62,244,86,0,226,231,14,128,169,244,75,16,8,99,97,108,108,67,111,-109,109,97,69,72,130,249,161,174,225,125,2,130,60,0,50,146,70,244,70,-10,226,97,17,96,234,135,225,6,94,115,121,115,116,101,109,67,65,201,69,-227,190,3,117,163,64,217,72,199,131,190,0,54,97,241,160,20,125,140,1,-95,56,134,135,225,17,3,1,95,51,85,114,228,60,9,64,40,230,131,7,-69,97,1,95,56,111,104,96,46,228,90,1,165,132,64,29,90,149,69,11,-193,122,0,54,111,129,129,87,140,212,0,35,74,112,120,77,0,57,169,243,-141,77,171,186,109,132,226,164,5,130,30,103,152,2,51,50,50,225,60,2,-6,92,34,108,105,98,47,83,97,26,13,47,73,79,46,104,115,92,34,44,-51,48,48,58,56,129,133,0,90,129,38,87,173,96,109,97,17,2,48,54,-32,128,130,160,19,96,0,0,67,64,36,148,63,96,195,82,34,115,171,0,-58,96,240,65,129,8,116,109,112,110,97,109,101,32,58,97,70,233,70,2,-3,75,52,32,90,224,1,0,105,86,225,189,0,70,208,97,172,0,95,97,-222,85,51,2,54,32,89,135,4,134,8,65,58,131,255,72,118,239,222,0,-235,9,3,192,13,97,36,238,31,3,1,35,49,197,217,96,36,96,46,96,-10,204,89,65,120,224,45,1,0,52,184,160,96,33,248,212,1,224,42,11,-191,241,128,0,109,159,224,129,15,141,86,96,123,224,117,13,190,17,96,112,-224,33,14,116,203,224,33,20,108,149,224,67,21,145,178,64,33,148,2,98,-86,224,36,7,140,228,242,153,0,224,0,3,225,132,8,131,20,225,133,26,-193,44,225,132,71,0,49,251,105,0,64,0,239,136,6,224,133,9,192,181,-163,81,74,140,227,115,0,255,151,4,132,14,132,41,66,243,230,153,4,132,-141,126,111,1,54,53,128,82,1,95,52,76,169,0,58,105,218,108,108,0,-55,117,82,109,29,74,100,173,62,64,13,133,114,76,191,0,55,215,223,0,-73,96,24,175,165,2,56,54,57,64,27,132,30,2,73,32,58,64,15,99,-107,135,1,133,104,231,72,5,151,80,229,52,5,253,245,0,0,58,74,246,-96,89,0,54,71,8,72,28,227,95,14,68,59,232,179,4,72,146,1,116,-58,89,246,0,115,90,160,10,92,92,101,110,100,123,99,111,100,101,125,160,-91,128,134,241,233,3,228,160,16,228,145,2,224,70,12,207,8,165,55,1,-48,54,129,123,0,85,226,108,1,226,126,2,239,97,1,237,117,1,160,30,-192,135,6,54,56,53,32,95,54,51,235,135,0,225,244,1,224,37,3,224,-173,27,4,98,101,103,105,110,224,175,4,176,34,224,76,6,98,213,171,190,-96,5,106,192,160,150,98,139,224,13,2,227,40,23,224,41,2,160,57,224,-16,0,216,250,224,75,3,227,199,8,182,45,160,250,225,94,2,224,56,1,-227,81,13,0,54,195,247,128,55,3,66,39,32,85,226,22,22,13,98,108,-97,110,107,32,98,101,102,111,114,101,32,62,234,145,3,71,99,96,119,134,-81,161,199,65,210,227,106,1,225,224,5,96,40,230,217,11,224,54,6,227,-159,4,0,65,104,64,109,30,0,54,71,128,66,242,221,237,0,83,71,89,-2,56,54,53,160,222,225,229,15,236,134,0,174,205,173,57,1,95,55,72,-146,0,58,111,186,242,221,3,65,80,68,58,199,31,128,6,0,58,64,103,-128,118,113,170,129,65,224,183,2,192,18,129,84,224,246,2,96,85,192,29,-193,159,242,227,7,131,203,220,243,72,118,159,167,0,56,89,235,0,56,113,-102,131,60,126,40,128,10,0,56,97,206,233,103,1,100,180,0,56,225,138,-0,96,81,132,144,3,95,51,57,56,65,121,0,54,96,199,210,218,224,101,-29,108,33,224,101,22,196,221,0,53,68,221,64,70,209,81,1,64,58,64,-19,96,28,1,50,57,67,221,0,56,73,110,2,95,56,53,66,175,0,73,-65,218,65,138,0,85,64,23,115,119,0,56,81,171,252,41,4,96,24,64,-63,2,49,49,57,142,68,98,120,64,138,64,13,64,35,1,95,51,135,30,-65,76,82,103,96,92,0,95,70,61,160,11,0,58,96,6,97,7,82,38,-3,95,51,51,56,64,10,226,246,3,25,67,111,110,116,114,111,108,46,69,-120,99,101,112,116,105,111,110,46,73,110,116,101,114,110,97,108,66,58,224,-39,1,3,83,111,109,101,224,35,0,98,85,169,52,64,215,123,131,132,139,-64,227,69,141,67,122,98,154,125,95,69,157,234,54,1,1,95,52,107,19,-2,58,56,53,193,247,130,123,107,126,101,121,68,72,96,74,0,50,97,120,-160,105,198,100,243,195,0,64,30,3,10,65,32,99,95,190,1,32,58,96,-63,98,208,97,191,234,193,9,137,245,132,164,239,216,5,66,38,239,253,0,-0,58,111,230,102,156,84,25,0,58,96,55,244,42,5,77,39,97,248,0,-52,65,107,74,84,1,58,56,69,190,86,57,225,50,0,97,72,4,97,99,-116,105,118,77,62,0,58,96,38,128,52,76,106,67,184,0,58,64,63,128,-178,107,183,1,95,56,81,15,1,95,56,71,13,0,58,64,38,129,29,1,-95,56,87,65,1,116,111,96,86,64,24,129,8,71,70,64,24,3,10,65,-32,80,64,10,204,31,1,95,56,73,19,107,88,0,56,68,24,1,56,51,-64,253,0,51,157,55,150,195,0,56,77,159,96,200,226,179,0,193,83,64,-25,244,89,5,0,90,163,197,104,90,0,51,163,181,0,58,96,85,239,209,-0,230,171,0,64,8,71,122,0,58,96,41,128,90,96,205,0,51,128,253,-103,158,1,95,52,97,216,0,55,64,253,239,222,2,1,55,53,71,204,99,-16,243,141,6,0,55,67,207,239,246,0,225,188,2,240,175,5,109,13,97,-66,0,55,68,82,239,244,0,99,223,99,208,232,79,6,3,76,111,97,100,-69,237,11,115,97,118,101,100,32,99,97,99,104,101,32,66,220,237,149,8,-192,150,108,235,199,127,224,159,7,1,58,56,70,232,129,206,203,22,170,68,-131,28,1,95,55,149,46,134,68,1,51,54,196,135,201,189,116,75,165,39,-228,163,0,0,55,73,67,161,93,138,11,135,26,1,95,55,85,194,96,131,-96,40,189,67,130,253,167,168,224,73,4,228,226,4,0,67,181,9,230,45,-10,199,239,128,64,236,167,1,125,200,64,8,246,104,1,174,41,128,94,192,-91,1,95,56,139,110,192,36,163,143,65,179,224,40,6,211,109,225,33,2,-97,204,0,55,74,29,239,150,1,0,51,250,150,2,96,0,1,95,54,148,-109,96,96,248,166,1,224,141,7,69,221,64,7,0,54,64,10,142,222,121,-187,192,57,96,156,224,114,5,193,64,64,253,196,37,225,162,0,96,198,224,-45,2,242,84,8,96,213,242,92,16,9,105,110,118,97,108,105,100,97,116,-101,130,105,176,50,130,107,0,56,102,109,224,155,1,224,124,5,195,212,1,-95,56,133,12,200,255,226,66,3,96,157,114,126,170,73,96,220,0,55,104,-59,2,95,56,50,255,38,3,1,95,56,71,132,0,58,98,200,167,217,65,-232,68,0,236,109,0,105,201,161,38,105,154,225,162,0,137,116,98,25,2,-95,56,50,193,54,137,190,64,168,71,32,1,95,55,88,64,64,98,167,136,-0,54,146,53,1,95,56,140,150,121,10,0,58,96,42,100,20,64,128,131,-44,106,25,224,105,4,144,100,192,135,196,3,200,93,74,111,122,120,130,106,-232,117,1,224,61,4,100,159,97,108,65,27,0,58,96,126,100,156,111,233,-64,147,96,13,175,198,0,58,96,214,103,55,1,54,53,155,190,131,176,100,-175,73,123,74,90,104,22,64,90,0,79,242,235,2,72,4,0,58,97,109,-229,27,0,66,160,236,75,0,183,6,128,225,160,169,64,162,1,95,56,81,-176,162,100,195,225,2,56,49,51,69,16,0,57,221,91,96,10,193,12,225,-152,0,205,250,192,95,160,2,193,239,247,173,1,172,89,128,126,226,228,1,-225,232,0,96,8,1,95,54,66,117,151,125,129,207,0,50,168,240,128,155,-96,181,65,2,116,125,224,125,2,68,46,224,44,1,0,58,123,131,170,173,-166,135,74,48,230,135,0,103,241,78,232,226,42,0,66,218,202,103,224,178,-0,134,200,0,85,161,6,226,6,1,160,117,200,48,139,236,0,55,114,163,-225,39,6,160,45,225,27,10,225,52,0,225,18,8,72,200,225,18,25,128,-73,128,134,241,41,0,0,64,104,34,210,15,224,34,4,192,110,75,227,224,-38,11,252,100,3,1,49,54,77,233,131,43,252,101,4,95,53,163,40,160,-45,129,138,103,194,154,120,140,64,96,9,115,255,65,150,97,116,65,42,67,-95,100,92,160,52,128,34,224,61,9,96,53,197,158,225,227,16,201,252,0,-80,154,235,225,149,1,68,28,161,134,0,90,225,120,6,226,174,0,227,8,-1,160,2,97,27,194,221,102,110,224,80,4,225,91,6,128,38,99,141,217,-180,130,160,227,89,1,224,56,0,224,182,6,132,247,224,182,70,226,64,0,-164,139,224,180,12,192,36,101,222,161,148,224,181,18,192,14,96,5,96,234,-160,196,128,199,133,92,128,65,100,102,224,178,0,168,121,229,47,0,153,42,-229,91,2,254,197,0,198,216,0,56,70,74,68,131,226,112,5,134,220,224,-89,2,250,193,2,225,23,6,192,114,224,227,1,234,22,1,224,11,0,160,-9,160,133,128,207,128,19,228,238,17,225,61,0,225,44,1,224,200,0,137,-95,0,82,214,203,224,75,23,245,168,2,225,222,5,225,39,1,64,15,137,-161,227,132,8,103,219,129,38,1,95,56,143,83,128,24,224,78,17,227,210,-18,224,77,18,165,94,225,188,3,162,171,254,86,5,128,1,199,123,224,13,-17,224,156,1,226,194,1,224,35,1,128,17,128,243,1,52,54,224,164,19,-64,120,224,242,1,96,11,136,95,0,49,193,170,226,27,1,224,176,10,224,-177,65,162,112,96,158,224,177,38,0,50,128,43,135,189,224,21,0,97,111,-0,58,98,143,236,213,2,224,195,17,169,19,128,1,231,13,0,192,8,0,-58,96,94,224,72,33,224,234,1,224,86,1,226,57,0,224,5,1,71,7,-234,39,0,195,117,241,92,0,233,176,0,233,185,1,225,57,0,224,167,5,-160,58,129,26,78,120,227,106,1,96,16,224,15,0,192,224,224,168,0,224,-119,34,192,35,225,39,19,128,26,228,225,4,192,24,129,69,137,153,228,81,-1,227,5,16,225,143,2,224,124,3,224,79,0,224,103,17,0,58,98,188,-224,101,34,226,154,3,225,181,2,225,46,6,160,67,224,24,3,192,152,225,-150,76,224,98,10,225,129,59,67,223,7,10,65,32,35,50,32,58,56,67,-76,0,10,123,222,228,233,2,224,110,3,165,255,160,13,132,81,160,5,135,-36,224,225,1,224,51,1,235,189,0,71,241,171,7,231,51,4,231,65,7,-224,108,3,192,188,169,180,101,247,230,209,8,102,105,230,222,5,134,214,228,-24,0,79,60,0,58,96,248,99,179,176,242,65,90,144,204,64,148,225,5,-0,205,53,225,127,3,224,13,13,225,228,3,227,217,0,64,8,167,222,0,-58,96,174,168,138,80,166,2,75,50,32,128,153,0,75,113,54,64,32,132,-144,241,143,9,224,81,6,1,95,55,84,66,192,85,204,222,0,58,64,54,-128,10,121,143,91,181,146,36,0,55,86,77,64,60,253,206,2,66,180,144,-70,0,58,110,110,212,126,2,95,50,57,84,95,110,162,1,95,56,150,251,-116,101,96,17,0,58,96,6,179,32,1,95,55,115,240,0,58,96,37,161,-37,125,3,0,55,76,15,2,95,56,48,233,5,0,142,154,235,253,0,79,-153,114,201,65,236,128,171,129,103,219,153,0,75,214,114,0,58,111,204,224,-197,17,110,186,65,96,96,202,0,58,112,5,97,98,1,95,52,64,107,78,-138,0,51,78,249,1,95,56,124,127,0,58,112,174,93,232,9,109,100,53,-66,70,73,76,69,32,58,96,25,228,17,2,64,214,0,50,113,114,172,188,-64,16,108,187,116,56,0,58,113,74,128,145,78,229,75,99,248,128,4,190,-251,64,144,1,95,52,156,9,183,133,96,64,225,59,6,96,25,244,74,3,-0,58,96,24,65,141,2,55,57,52,64,13,129,43,207,171,255,65,4,107,-189,173,51,255,52,7,3,109,104,115,47,191,52,7,70,105,108,101,80,97,-116,104,159,58,5,49,49,56,58,49,52,177,254,194,198,228,218,1,130,99,-1,95,52,85,175,161,188,151,19,152,216,85,152,64,209,175,16,96,231,0,-58,64,169,160,216,0,51,255,38,2,224,1,5,233,139,0,192,0,0,58,-97,97,161,121,120,100,179,97,152,193,201,16,164,55,245,227,4,66,9,1,-95,52,92,22,196,36,239,94,2,114,238,99,234,226,242,8,64,14,96,26,-163,147,64,75,85,223,96,140,248,50,0,98,104,96,249,192,115,226,117,8,-128,63,0,58,114,4,226,249,9,0,55,93,24,226,249,11,115,198,245,131,-0,64,36,0,58,96,25,239,10,12,92,205,97,9,192,224,133,77,238,254,-3,249,236,5,225,206,1,129,50,230,22,5,229,187,2,139,214,64,107,64,-79,238,241,3,160,73,164,24,96,187,66,138,0,52,192,113,113,31,0,90,-145,38,1,90,32,160,58,198,66,224,28,6,73,171,224,28,16,76,146,224,-28,16,107,61,224,29,17,0,52,224,117,4,1,95,53,65,119,96,191,2,-95,53,57,192,10,0,58,96,6,224,187,1,129,150,96,30,64,56,3,95,-55,55,51,192,161,163,162,64,16,128,149,224,16,2,160,137,224,17,3,128,-125,128,17,128,122,96,80,128,122,131,211,64,6,224,122,1,103,220,0,56,-117,222,0,56,118,175,0,56,100,94,0,56,118,76,85,21,160,70,102,176,-128,70,64,10,0,58,96,6,8,10,65,32,98,115,62,61,32,58,96,41,-128,13,64,12,131,57,2,98,115,60,96,26,130,186,2,98,115,60,64,12,-130,146,4,98,115,99,109,112,64,14,196,221,96,2,227,234,0,141,74,155,-153,1,95,50,226,102,1,231,175,3,96,143,64,31,0,53,100,198,1,95,-53,88,165,96,7,84,81,65,77,128,229,69,4,225,161,5,130,161,201,17,-2,95,51,48,64,224,98,177,0,58,96,6,160,54,161,81,128,45,97,207,-160,17,86,9,160,17,0,58,96,71,224,48,1,65,47,0,55,71,220,0,-58,96,32,96,233,0,47,65,4,64,19,96,13,0,61,96,13,129,45,0,-73,64,10,129,43,84,243,80,255,69,123,130,33,67,165,101,104,1,54,55,-227,223,4,0,83,67,222,134,80,119,144,103,26,182,8,99,233,100,32,243,-35,0,228,38,1,84,19,65,41,104,222,96,39,182,130,224,53,33,0,90,-224,53,2,2,95,51,54,78,216,118,127,0,58,117,249,64,137,66,126,68,-249,231,17,14,100,153,1,95,49,106,205,108,252,0,49,65,93,96,67,0,-95,71,222,160,10,0,50,73,34,160,89,64,6,117,0,132,199,128,167,202,-94,224,220,15,224,118,6,184,61,96,182,96,101,129,236,64,6,161,134,190,-209,224,85,13,103,18,224,77,2,0,58,121,61,192,57,129,217,114,175,0,-52,230,91,28,0,58,122,19,97,219,67,91,118,8,160,5,117,181,224,11,-0,91,243,121,208,130,7,97,229,99,169,224,5,7,0,58,96,43,237,228,-2,233,224,6,0,58,64,60,160,113,0,57,64,179,188,86,2,50,32,58,-107,200,234,68,2,234,40,21,0,58,105,219,252,92,4,3,46,109,104,115,-120,69,92,90,122,156,136,16,231,18,15,102,58,231,77,7,130,115,251,76,-0,185,143,166,182,125,190,133,250,1,95,55,93,229,128,136,129,130,225,174,-3,71,91,72,222,160,105,224,132,3,1,95,55,93,74,225,222,7,248,99,-1,233,36,6,0,49,146,221,225,244,2,253,169,4,1,95,55,71,151,2,-95,55,53,65,146,92,65,160,32,224,109,2,91,245,171,252,224,213,6,226,-73,3,96,200,212,186,170,21,0,55,72,197,0,58,96,65,66,98,12,79,-46,100,101,115,101,114,105,97,108,105,122,101,65,175,130,15,21,94,97,100,-100,95,108,122,55,55,95,100,101,99,111,109,112,114,101,115,115,111,114,64,-31,194,9,0,83,107,65,171,165,241,191,0,1,95,51,231,254,1,0,66,-147,26,225,17,3,129,138,202,107,224,207,0,0,51,66,95,224,53,4,224,-216,5,133,13,65,120,194,235,0,58,65,28,98,10,160,215,161,13,225,34,-1,104,218,169,62,255,3,2,74,209,94,231,1,95,50,159,10,227,119,4,-191,15,8,94,117,110,103,101,116,98,32,58,96,41,224,100,2,228,187,5,-1,95,52,72,209,225,229,0,235,10,1,127,223,0,95,99,80,0,53,205,-129,98,6,118,248,224,35,2,95,145,67,58,5,35,50,48,57,53,49,108,-50,3,35,53,53,50,107,29,228,97,3,1,95,52,168,227,98,73,0,51,-107,145,0,51,96,37,227,40,1,17,104,71,101,116,67,104,97,114,58,32,-115,117,114,114,111,103,97,116,67,50,224,52,6,0,55,123,49,224,52,9,-160,41,0,58,97,53,102,47,1,35,52,140,157,96,49,239,11,0,228,186,-2,0,52,67,170,201,179,86,78,1,52,56,75,35,72,121,224,95,1,9,-111,112,101,110,66,105,110,97,114,121,75,135,128,101,230,2,7,1,95,52,-245,158,3,73,148,129,230,1,95,52,158,68,64,131,0,54,96,131,107,98,-229,5,10,229,1,5,0,58,127,110,102,183,71,74,65,104,1,95,55,71,-181,78,119,1,58,55,71,199,130,248,18,112,101,114,102,111,114,109,73,79,-32,94,119,97,110,116,95,103,109,112,96,32,205,116,226,80,3,2,95,52,-51,240,145,5,224,24,0,2,51,53,54,228,174,2,4,77,72,83,67,67,-222,94,226,26,1,99,6,240,38,4,227,1,5,83,202,0,52,65,237,126,-45,104,106,156,70,0,52,224,93,4,5,105,110,99,108,117,100,193,215,96,-0,227,79,1,224,2,0,224,86,40,3,99,98,105,116,255,19,0,192,184,-247,76,3,96,13,64,250,96,190,224,96,2,2,64,95,55,100,209,128,137,-224,1,3,120,213,224,22,7,241,194,5,224,1,5,225,80,0,229,147,0,-125,227,0,52,91,81,2,52,49,49,100,109,109,243,225,113,9,11,69,88,-84,82,65,67,67,70,76,65,71,83,224,198,4,237,72,4,141,37,128,193,-224,5,24,192,54,228,61,7,96,169,127,26,110,3,255,25,0,190,153,255,-17,14,8,69,120,101,99,117,116,101,58,32,255,8,2,1,49,50,79,159,-79,179,225,19,1,229,228,5,79,187,227,46,0,230,192,4,164,136,224,135,-4,138,55,0,51,106,172,0,55,94,141,96,143,0,51,66,205,224,141,6,-13,99,111,109,109,97,110,100,32,102,97,105,108,101,100,160,148,192,130,226,-240,7,229,173,1,224,245,15,128,54,96,248,128,10,224,109,5,1,67,32,-70,63,7,105,108,97,116,105,111,110,32,192,0,128,115,160,215,143,79,96,-59,4,55,51,54,32,35,99,246,96,14,97,41,0,50,80,38,128,227,0,-55,64,227,170,33,224,98,1,0,109,226,188,5,160,0,227,25,10,192,2,-2,95,55,51,199,140,226,96,5,224,83,1,2,36,73,78,224,84,5,227,-18,4,224,2,6,224,80,3,224,66,2,2,79,85,84,129,240,1,55,51,-210,178,193,187,224,2,9,98,238,224,35,1,128,1,224,193,1,240,116,1,-224,29,1,128,1,225,111,6,15,32,45,119,32,45,87,97,108,108,32,45,-79,51,32,45,73,224,197,2,231,167,2,225,10,1,224,87,1,224,86,20,-11,47,115,114,99,47,114,117,110,116,105,109,101,226,49,1,224,169,8,224,-78,14,96,22,2,79,32,35,146,223,224,59,3,231,242,4,96,60,65,77,-118,20,100,169,224,133,5,224,206,4,224,97,2,224,95,12,224,30,6,225,-233,15,8,45,68,95,95,77,72,83,95,95,224,90,1,224,88,30,0,67,-224,238,2,224,48,19,229,77,5,224,229,1,1,51,57,224,155,13,64,62,-210,225,66,246,96,48,224,190,15,0,39,225,141,0,2,95,55,52,165,139,-225,142,8,224,155,2,225,210,13,5,47,101,118,97,108,45,160,73,224,219,-5,224,57,10,1,46,99,160,116,165,16,225,183,5,1,52,51,131,175,192,-126,225,208,4,192,87,224,134,2,2,42,46,99,160,120,226,197,2,10,36,-73,78,32,45,108,109,32,45,111,32,227,71,0,224,0,19,2,95,55,52,-96,173,2,58,55,52,138,161,114,102,237,45,9,232,51,13,64,0,0,58,-96,65,232,102,2,232,105,2,224,45,2,0,58,97,101,210,180,64,254,76,-112,105,87,230,102,1,226,23,0,0,58,65,228,160,84,237,190,13,237,192,-11,68,46,232,130,0,126,239,194,94,116,238,160,109,197,64,179,254,217,158,-224,19,3,132,90,224,63,0,128,11,1,95,54,153,93,64,37,116,217,64,-73,227,187,3,0,58,68,205,64,128,171,62,128,23,229,172,0,145,47,64,-59,229,142,0,1,95,56,64,33,98,244,138,53,1,51,54,137,130,113,31,-118,168,0,64,109,151,0,49,150,223,96,40,128,69,64,207,96,14,235,23,-2,241,54,0,102,206,0,58,96,6,237,140,9,0,49,88,172,2,95,55,-51,134,60,235,45,1,246,149,3,96,78,102,167,1,95,55,128,101,167,27,-0,58,103,94,78,165,1,32,58,96,18,3,10,65,32,90,72,181,0,58,-96,39,76,5,0,115,118,65,64,30,172,106,236,204,6,1,95,55,130,221,-234,12,16,234,9,0,163,126,234,50,18,232,187,4,193,236,224,48,18,2,-79,78,70,227,18,0,230,72,4,96,20,130,10,128,175,122,118,162,31,224,-8,13,1,95,55,78,142,1,95,55,128,213,237,133,4,100,175,232,118,0,-66,11,232,5,2,76,202,84,34,158,147,0,52,64,34,97,105,233,6,2,-99,247,2,66,32,79,225,20,3,12,111,117,108,100,32,110,111,116,32,102,-105,110,100,96,196,3,67,39,32,79,192,128,224,42,3,3,105,110,32,102,-172,54,230,52,1,225,31,3,238,234,3,226,246,2,0,39,238,14,0,2,-55,50,52,224,79,2,6,100,101,102,97,117,108,116,167,147,1,50,53,233,-19,3,164,130,96,22,229,120,0,231,146,1,192,114,234,216,0,232,91,8,-234,42,24,225,46,15,234,54,17,11,70,111,117,110,100,32,116,97,114,103,-101,116,234,59,9,2,55,50,54,100,122,64,11,138,71,234,83,8,160,0,-224,188,1,225,51,6,225,53,7,64,32,220,112,128,192,144,191,130,69,97,-77,128,77,225,61,14,100,21,0,53,64,242,1,55,50,115,105,1,54,55,-64,144,68,110,230,190,15,192,58,192,167,225,128,1,224,76,44,3,102,108,-97,103,234,13,3,133,145,161,200,224,81,43,2,111,110,102,230,123,4,231,-174,10,224,45,1,3,117,110,105,120,135,68,234,185,2,0,95,85,70,128,-0,0,58,109,45,69,23,0,53,65,134,1,55,50,81,230,114,163,68,177,-98,228,1,95,53,64,95,160,159,1,53,50,69,96,96,11,0,58,96,6,-213,3,118,185,114,179,165,66,217,44,224,12,2,249,239,0,213,7,64,109,-181,7,128,10,117,7,96,10,0,58,96,6,213,7,249,124,0,224,66,1,-116,215,64,117,64,42,134,28,102,153,127,2,66,28,98,89,0,57,85,195,-245,35,3,0,52,114,244,124,205,190,186,166,152,0,95,208,226,68,122,84,-220,129,172,96,24,3,95,51,48,49,73,66,78,175,163,247,224,41,1,86,-197,193,138,0,49,98,199,125,162,96,151,0,54,134,37,182,193,0,58,97,-244,244,181,19,66,206,250,144,0,103,239,160,2,160,99,0,58,100,145,231,-234,6,244,82,0,64,73,122,76,229,124,0,175,39,250,94,1,198,133,98,-98,224,225,0,180,107,0,53,167,4,64,102,189,185,99,114,238,4,4,0,-52,121,14,229,219,1,128,118,1,95,52,148,21,224,44,7,81,227,165,246,-128,44,134,8,2,95,55,50,133,151,164,148,228,165,0,196,121,228,119,6,-2,67,97,110,69,159,3,112,97,114,115,235,235,1,167,254,228,225,44,174,-29,245,151,1,232,193,0,243,160,10,224,85,32,229,55,16,2,82,101,97,-197,54,0,115,102,65,9,46,32,80,111,115,115,105,98,108,101,192,22,165,-78,206,98,101,56,229,61,4,0,89,97,237,66,9,193,231,64,151,80,192,-97,128,201,54,160,0,229,85,5,224,231,9,221,107,224,163,1,160,135,0,-46,228,96,0,0,58,104,77,184,36,246,75,0,2,52,57,56,64,249,110,-62,103,79,67,242,64,128,0,53,68,14,116,90,148,95,65,12,164,109,98,-107,1,95,52,84,31,0,58,97,249,184,63,97,88,1,55,49,167,201,99,-136,0,79,96,104,235,166,2,90,97,0,54,121,59,224,170,1,2,58,94,-42,229,222,1,96,51,225,113,8,2,32,32,102,70,171,225,85,1,0,52,-73,93,141,193,0,53,94,233,128,62,224,59,14,5,101,120,112,101,99,116,-240,138,0,236,47,0,0,55,65,154,195,59,227,148,1,64,224,190,172,0,-49,101,7,68,144,0,58,64,44,227,171,7,235,150,0,206,249,193,183,195,-10,128,27,2,95,55,48,163,13,127,229,231,62,0,0,58,96,95,117,255,-235,117,0,75,176,3,95,55,49,53,134,87,97,56,96,84,138,251,160,53,-0,54,228,53,9,1,52,51,224,242,2,16,102,111,108,100,114,49,58,32,-101,109,112,116,121,32,108,105,115,136,147,224,169,0,0,83,68,233,160,14,-179,53,224,10,2,101,68,160,105,218,29,107,98,244,93,1,1,95,52,75,-128,232,164,0,224,168,0,242,120,9,96,255,225,144,5,210,17,224,83,0,-235,76,9,224,26,13,246,242,6,224,90,10,2,108,105,110,196,81,163,232,-224,152,2,177,231,224,52,8,4,44,32,99,111,108,128,53,224,40,4,238,-48,4,6,101,110,100,45,111,102,45,202,47,224,26,3,5,110,111,32,108,-111,99,114,127,196,204,224,28,17,0,58,99,3,119,2,129,241,225,231,1,-173,45,0,35,84,156,66,156,98,214,0,58,96,7,193,237,244,54,0,64,-4,0,85,99,92,74,217,0,53,71,93,130,192,165,157,171,169,129,213,151,-91,173,0,114,68,226,77,0,224,46,30,96,146,162,215,230,39,0,224,39,-11,131,138,230,34,3,224,39,12,131,114,224,205,4,231,231,0,0,83,224,-82,6,164,246,152,223,192,130,66,162,250,244,4,0,35,127,70,97,221,0,-54,79,103,3,67,32,95,54,66,163,0,35,227,109,0,224,109,28,224,69,-0,192,108,200,84,224,108,12,128,228,224,77,5,1,67,39,156,33,0,49,-136,171,131,239,1,95,54,88,98,1,64,64,232,96,1,96,52,1,95,54,-99,243,98,2,96,173,71,60,73,52,66,227,64,184,64,15,0,49,232,192,-1,111,92,110,242,224,140,2,224,141,0,160,228,171,96,225,121,3,0,54,-90,103,96,28,175,196,160,28,99,202,0,54,105,255,225,30,30,148,103,193,-30,224,109,12,103,80,224,157,1,1,95,54,65,0,1,35,49,104,34,224,-50,37,169,215,192,142,68,149,106,15,224,43,10,123,108,154,138,65,249,93,-93,4,95,51,50,52,32,129,254,72,2,0,49,162,21,225,56,4,123,195,-224,19,6,169,74,224,76,11,96,100,2,95,54,53,200,92,224,32,8,69,-153,96,33,245,143,0,248,31,0,97,77,161,114,1,50,57,64,100,133,136,-225,108,18,177,57,1,32,83,225,47,0,229,172,2,167,198,66,67,227,77,-5,134,131,71,194,0,57,87,67,128,69,231,219,1,163,22,236,51,0,224,-134,24,113,35,197,79,221,144,221,149,234,132,2,69,162,160,86,128,155,114,-7,128,68,236,208,15,229,175,3,64,201,130,218,88,105,161,141,132,120,65,-62,118,194,128,194,65,206,104,159,120,128,0,52,96,7,0,54,73,190,64,-67,0,54,224,134,4,242,67,2,96,36,0,51,224,36,2,96,90,128,42,-160,48,2,95,54,54,227,74,1,225,24,25,228,152,29,165,106,225,158,7,-96,134,66,56,135,247,85,147,0,51,197,196,225,173,8,228,196,3,128,150,-131,62,96,9,162,25,218,254,200,139,229,171,0,133,224,96,122,64,98,2,-95,54,54,64,112,228,154,8,160,91,232,180,0,136,202,130,69,96,76,129,-9,227,68,8,140,109,0,54,159,151,226,103,26,228,148,1,64,95,224,21,-8,0,55,170,63,195,48,96,21,225,78,3,109,30,197,150,65,3,224,29,-4,180,121,64,170,0,79,229,90,1,0,53,96,254,231,246,5,16,85,110,-114,101,99,111,103,110,105,122,101,100,32,105,110,112,117,241,3,5,200,193,-144,43,97,227,3,83,32,95,54,69,142,224,220,5,192,171,130,5,131,38,-102,4,65,21,0,56,64,68,0,75,96,73,96,53,0,53,235,163,3,7,-73,108,108,101,103,97,108,32,95,33,7,32,108,105,116,101,114,97,108,168,-65,206,8,0,90,132,98,224,225,7,174,37,109,234,2,95,49,53,79,125,-127,179,100,131,225,113,0,0,95,132,142,226,200,1,162,56,230,211,13,129,-88,97,81,64,187,226,206,16,128,38,225,17,14,99,18,2,95,54,56,64,-7,192,195,98,57,224,67,9,160,195,224,37,37,225,15,10,224,37,2,225,-15,12,205,53,161,19,1,54,56,197,224,225,212,19,224,194,6,224,118,42,-225,134,9,226,180,2,227,94,9,227,54,14,98,76,133,25,227,168,0,167,-66,131,170,163,252,204,120,98,126,66,144,228,92,4,236,151,2,192,105,232,-116,14,107,102,65,14,224,0,3,96,130,1,55,48,207,252,229,19,2,64,-3,196,217,64,5,101,113,128,216,1,54,53,101,74,224,113,2,128,109,229,-10,1,224,48,6,0,55,224,162,8,224,48,0,64,0,65,171,3,95,55,-48,57,113,123,238,249,1,225,32,3,0,55,112,5,225,32,7,225,18,1,-0,55,78,231,225,18,6,225,17,42,192,48,1,95,54,154,136,224,180,1,-64,37,224,29,2,168,4,225,220,15,0,58,96,21,109,254,101,200,197,194,-64,7,77,158,227,129,3,5,67,32,61,61,32,64,136,128,139,250,202,17,-104,219,64,202,96,102,71,107,143,95,65,37,0,58,96,146,108,60,0,80,-136,189,120,128,64,37,242,183,2,225,60,5,198,98,230,104,0,194,98,196,-63,224,16,2,235,28,14,225,180,0,224,39,2,206,114,224,20,1,64,1,-134,177,224,115,5,129,186,152,104,224,123,2,246,46,1,234,184,5,203,131,-230,86,1,192,21,160,153,131,54,0,85,227,63,1,0,85,224,236,2,64,-0,192,43,96,169,193,119,130,106,226,19,27,64,252,218,228,224,172,0,233,-155,0,202,8,161,204,160,166,143,96,162,153,130,151,130,67,0,52,128,189,-242,0,2,128,81,162,162,224,50,0,131,25,129,20,224,151,0,224,163,15,-227,208,6,224,138,2,228,65,14,164,60,128,140,160,153,227,35,7,224,84,-0,0,58,97,41,162,79,170,18,136,39,192,237,227,241,0,235,133,1,0,-51,81,185,145,122,249,145,3,1,108,101,112,169,224,18,3,3,119,104,101,-114,111,114,224,20,3,1,100,111,224,17,7,0,111,114,229,237,38,0,161,-25,104,240,194,157,128,110,224,50,1,0,105,183,121,77,174,73,164,91,158,-64,55,227,109,0,65,82,188,60,77,129,230,2,7,0,49,120,174,252,93,-0,172,173,160,127,225,79,0,134,213,165,19,215,170,129,96,0,58,97,248,-155,249,129,25,130,189,224,14,2,66,226,224,14,1,108,55,233,126,6,136,-241,64,75,215,54,99,236,103,165,0,80,96,99,0,54,147,246,97,242,193,-149,141,75,0,80,70,172,242,57,4,2,105,109,112,180,201,8,58,32,102,-105,114,115,116,32,99,72,156,8,105,115,32,97,32,100,105,103,105,178,72,-64,100,67,206,225,226,0,228,43,8,170,154,227,238,3,228,45,23,224,42,-5,228,48,1,228,49,4,228,51,1,224,22,2,228,28,0,95,253,109,91,-128,0,128,23,228,86,1,96,24,163,66,102,18,160,69,143,18,65,13,0,-52,209,250,192,90,128,131,160,96,164,37,186,201,196,165,225,4,0,160,13,-96,33,194,249,128,95,224,107,3,106,26,149,62,227,177,4,64,188,224,11,-0,232,0,4,160,133,224,239,2,224,163,1,228,188,3,137,182,117,169,196,-29,7,95,52,48,32,95,54,57,51,80,147,1,53,57,66,67,0,53,180,-127,2,95,54,57,77,109,0,80,68,126,0,49,224,30,8,128,13,192,14,-136,219,224,70,11,168,235,178,30,192,148,224,199,1,224,224,25,96,0,98,-156,244,94,1,192,5,170,181,64,53,104,32,4,50,32,95,53,55,229,81,-3,161,12,96,36,0,52,224,36,10,96,140,224,232,21,0,51,154,171,151,-253,224,231,30,128,86,180,140,192,242,135,252,181,237,194,134,66,144,89,125,-160,0,225,138,13,192,0,226,72,13,160,86,226,163,9,194,24,226,21,5,-226,170,5,226,19,11,226,21,20,225,63,3,226,34,78,226,29,2,224,247,-0,182,201,64,175,219,1,227,189,1,244,72,19,128,70,128,59,119,70,192,-61,232,83,1,230,228,2,239,46,2,239,213,15,243,76,0,192,49,228,215,-5,228,127,0,128,67,160,73,239,102,10,242,211,14,0,48,135,145,228,165,-0,192,68,251,183,0,232,254,1,96,240,0,80,96,81,66,107,1,53,55,-65,246,124,76,225,29,1,227,92,13,236,139,7,162,102,70,196,167,33,64,-10,220,234,98,178,161,52,225,55,28,227,156,0,225,55,4,205,103,225,55,-128,193,42,225,41,19,129,26,225,24,29,224,185,2,107,146,224,183,41,226,-156,1,224,190,63,96,93,224,190,29,0,64,124,102,226,38,19,229,146,0,-224,24,7,163,187,4,95,54,53,52,32,227,206,2,160,213,0,58,110,26,-152,210,250,135,6,15,114,111,109,74,117,115,116,58,32,78,111,116,104,105,-110,103,104,61,127,59,64,152,251,77,13,165,5,225,19,0,129,1,235,16,-0,0,58,123,76,122,148,0,65,96,72,237,67,2,75,24,64,146,100,135,-102,21,146,205,129,66,206,24,160,2,96,77,231,62,2,118,135,162,151,129,-132,99,121,65,157,195,135,151,189,82,73,91,24,96,7,0,54,247,157,2,-247,166,1,200,140,102,147,224,15,9,64,73,157,250,224,73,14,192,36,99,-140,235,73,7,102,240,0,95,73,55,224,145,24,130,149,0,53,126,196,224,-114,22,225,233,3,73,161,245,121,0,160,112,128,131,160,23,76,218,98,45,-224,8,0,224,211,37,254,128,0,65,107,229,232,1,70,126,160,94,96,180,-224,9,3,224,95,26,0,58,70,166,130,85,225,183,43,0,58,96,124,239,-24,2,195,243,114,8,2,64,64,58,98,91,139,174,228,187,1,162,171,204,-225,225,167,8,2,49,52,50,224,130,21,224,190,0,225,171,28,192,45,227,-152,4,241,80,1,64,8,1,95,54,82,83,230,40,0,233,40,3,65,174,-138,120,64,84,65,185,224,107,27,160,68,224,62,4,128,223,230,160,1,72,-147,192,114,224,59,1,224,247,28,0,58,72,102,131,209,2,75,51,32,64,-14,223,21,227,172,5,242,54,2,0,83,194,69,227,8,26,225,95,58,98,-6,0,89,228,64,12,225,122,5,224,151,3,70,12,128,90,120,161,224,160,-26,224,161,51,160,154,167,188,224,154,13,97,167,0,53,224,116,6,98,178,-194,186,69,36,164,164,199,233,101,30,229,75,0,141,69,96,34,82,96,226,-231,3,78,127,224,89,1,224,202,42,162,174,225,101,1,224,120,9,138,186,-226,104,0,96,130,224,129,75,224,59,0,160,105,231,31,5,230,229,6,31,-68,97,116,97,46,73,110,116,101,103,114,97,108,46,92,94,58,32,110,101,-103,97,116,105,118,101,32,101,120,112,111,110,1,101,110,175,53,160,76,0,-58,99,67,134,179,133,1,226,45,23,128,175,193,26,96,15,84,79,224,224,-15,192,46,224,212,4,224,45,30,97,251,0,58,98,38,131,145,0,50,96,-44,0,58,100,83,244,171,0,199,109,80,149,231,102,28,160,13,231,87,0,-224,11,3,231,105,52,166,61,66,186,175,225,102,75,174,51,231,136,8,102,-118,231,154,55,224,241,142,92,234,224,242,79,224,243,20,64,37,195,176,169,-64,103,215,224,168,1,224,240,52,233,76,64,107,71,136,192,230,253,26,224,-59,20,1,57,48,224,60,37,0,90,134,24,233,64,0,96,43,233,150,27,-233,193,40,235,196,0,224,111,7,224,68,29,224,111,46,0,58,107,113,203,-208,230,139,1,64,28,231,183,14,0,49,95,107,160,76,224,116,26,172,213,-230,245,5,233,117,3,233,132,2,136,153,232,30,1,224,101,53,225,184,38,-205,126,224,211,47,203,114,228,80,0,131,71,67,66,235,118,36,192,135,227,-169,0,96,37,242,96,1,235,117,0,235,214,1,107,110,153,26,224,9,1,-64,82,0,54,81,208,192,82,192,7,1,58,54,67,206,171,15,235,208,14,-98,14,128,22,160,118,226,14,16,231,0,29,230,198,35,161,76,144,190,135,-51,168,51,138,201,192,242,160,9,224,81,15,0,58,96,253,135,13,0,52,-231,194,0,140,42,1,95,54,103,11,0,73,137,14,97,104,246,225,8,111,-223,1,64,83,68,245,248,64,6,243,20,0,1,95,54,71,75,0,53,232,-84,2,2,92,92,110,104,52,64,25,1,50,54,83,134,126,168,0,53,89,-125,69,230,125,4,2,52,48,57,64,55,0,49,64,127,184,251,1,95,54,-239,74,0,64,138,143,54,65,225,64,68,64,218,1,52,53,124,35,1,56,-54,163,52,196,158,160,4,220,14,128,101,161,172,101,175,192,35,96,86,1,-54,56,83,237,64,190,250,92,4,97,154,240,81,3,0,48,96,0,128,32,-129,121,192,208,0,89,242,38,0,161,60,96,108,226,170,1,210,71,141,79,-225,79,4,128,78,230,105,0,225,112,8,121,144,224,65,0,97,2,192,19,-241,3,8,247,104,2,130,181,2,95,50,50,90,162,65,49,89,223,64,63,-1,55,52,128,44,125,65,85,209,1,49,50,81,6,64,13,157,145,192,93,-0,85,226,120,0,128,7,2,95,54,56,182,136,2,58,54,56,174,59,84,-163,144,233,2,90,32,90,97,110,1,54,52,250,88,5,82,53,161,123,98,-50,0,79,157,236,0,90,96,160,129,208,224,88,1,96,90,237,62,0,0,-50,66,161,99,157,0,58,65,161,229,144,0,129,106,78,196,232,60,6,1,-95,51,154,146,136,180,64,53,0,54,239,65,0,65,229,122,225,98,58,0,-58,66,124,98,242,2,51,54,53,178,243,154,244,0,58,96,38,250,122,1,-96,80,90,122,1,54,56,198,19,96,23,97,35,128,23,132,55,228,49,0,-193,242,164,251,232,82,3,160,2,77,124,224,17,5,217,204,224,17,2,192,-69,224,21,3,244,196,2,197,88,224,104,4,226,114,0,224,26,0,224,61,-1,226,143,0,97,56,226,35,2,224,33,6,186,233,225,90,0,192,2,160,-23,224,42,4,224,21,0,192,147,67,114,192,64,224,19,2,160,187,228,73,-11,224,84,1,169,111,224,87,3,224,84,8,229,242,0,225,99,1,128,1,-195,89,163,233,227,112,2,224,121,11,212,71,160,36,161,18,224,172,28,224,-30,1,191,144,94,62,0,35,118,46,195,157,96,43,224,12,0,157,86,224,-23,0,224,0,1,224,73,13,149,97,224,47,5,132,80,225,37,4,130,11,-96,177,70,163,128,186,254,245,3,160,39,1,95,54,108,58,96,99,255,2,-0,224,34,0,69,74,159,10,223,131,165,82,224,110,0,226,77,4,193,108,-225,142,2,226,88,3,225,145,13,225,68,11,226,62,0,224,53,27,230,87,-0,224,53,36,192,233,224,106,37,247,246,5,226,10,13,197,144,225,184,11,-161,171,225,218,4,2,95,54,51,69,32,161,211,225,91,2,224,32,2,123,-181,96,32,224,237,0,224,93,12,239,172,6,13,98,97,100,32,115,116,114,-105,110,103,32,103,97,112,143,151,227,185,4,101,115,0,39,69,116,96,73,-2,53,32,64,224,60,1,18,117,110,116,101,114,109,105,110,97,116,101,100,-32,67,104,97,114,47,83,128,74,6,108,105,116,101,114,97,108,96,78,171,-29,225,69,1,64,15,225,170,24,224,46,30,161,12,224,92,31,161,156,227,-6,2,106,69,225,38,9,105,238,137,98,225,142,64,107,118,202,50,209,106,-209,186,128,5,135,9,1,58,54,72,67,152,64,136,185,224,250,12,64,49,-64,115,231,2,0,167,99,0,55,120,132,96,14,199,96,225,243,5,12,66,-97,100,32,92,92,32,101,115,99,97,112,101,129,242,130,218,225,52,13,171,-10,224,33,17,157,127,224,32,19,103,156,224,99,19,88,181,224,133,22,101,-113,224,33,20,164,185,224,33,18,224,135,23,97,182,224,66,20,0,50,225,-12,23,104,2,66,131,117,174,64,29,252,26,8,134,60,101,2,128,34,115,-208,64,8,168,70,74,52,6,49,51,57,32,64,35,54,64,42,0,67,92,-236,160,17,253,226,0,133,126,129,251,126,206,211,1,201,157,90,142,0,56,-75,181,2,57,56,32,128,71,137,129,194,142,101,132,100,212,186,184,64,204,-64,75,133,155,238,74,6,100,204,133,180,98,234,228,217,0,192,26,224,23,-2,7,95,54,55,54,32,95,51,53,131,26,164,75,0,79,162,173,100,72,-169,194,98,173,184,205,227,113,0,224,162,1,224,101,3,144,228,224,94,9,-224,82,8,224,81,22,227,46,7,96,48,0,56,131,165,251,215,1,64,17,-0,56,224,16,0,160,33,68,29,192,16,211,77,163,226,65,242,224,81,0,-231,183,0,224,20,11,100,130,224,21,9,135,64,224,21,6,100,67,224,20,-7,100,121,224,63,8,64,14,192,21,0,58,100,1,202,234,129,51,161,197,-198,149,234,45,11,96,17,238,140,2,224,25,0,229,81,1,128,10,98,249,-160,26,64,128,98,178,1,54,53,131,58,112,96,141,9,128,0,136,104,96,-70,98,176,236,105,0,96,43,224,12,0,97,85,0,53,101,159,226,217,3,-130,215,224,218,3,139,219,2,79,32,80,228,208,2,2,78,85,76,68,198,-97,157,224,25,5,2,83,79,72,96,25,65,160,224,25,6,1,84,88,96,-25,64,94,224,25,5,0,69,160,25,64,140,224,25,6,1,79,84,96,25,-67,76,224,25,6,1,78,81,96,25,64,203,224,25,5,2,65,67,75,96,-25,66,136,224,25,5,1,66,69,128,181,65,209,224,25,6,0,83,96,24,-65,81,224,24,5,0,72,128,127,66,89,224,24,5,1,76,70,128,230,225,-1,9,0,86,128,50,98,162,224,25,5,0,70,160,51,225,1,9,1,67,-82,128,25,225,1,9,1,83,79,128,25,225,1,9,1,83,73,128,25,225,-1,9,2,68,76,69,128,26,225,2,9,2,68,67,49,128,26,225,3,9,-2,68,67,50,128,26,225,5,9,2,68,67,51,128,26,225,7,9,2,68,-67,52,96,26,101,166,224,26,5,1,78,65,129,136,78,206,224,187,7,1,-89,78,128,26,226,12,11,0,66,128,26,225,11,9,1,67,65,160,53,226,-14,10,0,77,128,25,225,12,9,1,83,85,160,79,225,12,9,2,69,83,-67,128,26,225,12,9,0,70,130,16,111,98,224,25,5,0,71,160,25,225,-10,9,0,82,128,25,70,113,224,25,6,0,85,160,25,225,8,10,0,80,-128,25,225,7,9,0,68,162,172,70,198,233,211,0,224,0,20,0,58,101,-136,238,214,1,230,33,1,196,10,0,54,119,160,197,212,105,48,64,93,1,-95,54,132,18,1,95,51,98,102,73,43,1,95,49,139,248,0,58,69,250,-64,83,114,153,0,58,96,40,239,211,3,1,80,32,160,52,196,246,224,95,-0,64,92,224,67,0,143,158,114,66,231,150,2,119,63,224,20,8,65,36,-224,20,7,82,255,224,20,9,66,33,224,20,7,0,49,98,55,224,21,9,-64,224,224,106,8,135,235,224,20,5,102,229,0,67,241,16,5,0,35,126,-115,1,95,49,97,166,144,115,224,7,55,2,58,54,55,144,155,242,128,2,-69,240,184,216,230,19,1,106,226,3,67,32,61,61,231,46,1,134,28,0,-85,64,12,64,8,0,90,249,11,8,198,116,134,75,241,113,2,237,23,1,-103,205,226,109,1,2,99,97,115,170,152,231,179,5,145,156,171,44,129,203,-181,114,96,1,168,138,104,149,137,154,198,216,166,192,137,144,2,67,32,60,-178,188,230,159,0,224,218,7,224,28,0,128,216,179,232,233,31,3,192,234,-224,34,1,240,41,1,160,68,134,216,224,67,7,224,245,2,226,35,3,192,-0,106,5,169,212,0,54,82,104,2,95,54,55,65,104,175,193,224,104,93,-0,58,97,105,140,129,7,54,54,57,32,64,90,32,85,156,226,225,63,1,-64,116,224,18,6,65,53,236,171,0,128,18,130,190,224,18,4,102,164,104,-20,192,191,168,190,64,104,1,64,85,117,188,250,239,1,192,15,224,68,6,-144,106,171,97,128,18,68,152,160,45,224,60,1,206,125,224,61,5,109,58,-224,18,5,131,167,224,80,4,196,125,224,80,10,224,41,6,66,150,224,41,-1,194,157,65,70,183,22,2,53,50,57,64,30,88,165,149,58,64,49,67,-64,0,58,96,245,100,195,0,80,137,220,0,85,96,20,136,230,228,13,7,-120,228,228,77,9,228,56,11,142,30,224,63,7,224,41,11,73,191,228,98,-8,0,49,102,160,228,99,44,2,58,54,54,213,106,133,147,164,40,131,156,-116,242,64,35,0,54,160,35,246,1,6,98,222,130,152,248,126,0,0,54,-155,26,143,59,118,32,243,165,1,4,64,95,52,53,49,192,15,0,58,96,-41,181,175,0,52,98,211,82,142,64,195,0,58,64,54,97,139,0,54,153,-49,173,36,1,54,54,118,188,119,156,64,81,2,58,54,54,133,9,70,148,-0,53,64,201,100,201,211,12,74,190,0,53,140,97,170,191,160,13,107,10,-0,57,68,202,103,165,202,204,249,126,1,0,58,64,105,160,88,142,60,65,-114,235,45,0,129,36,0,67,184,7,70,200,239,179,4,17,33,33,58,32,-105,110,100,101,120,32,116,111,111,32,108,97,114,103,197,32,164,15,227,236,-1,0,53,194,91,64,78,144,218,238,20,1,253,15,1,242,9,7,64,97,-7,110,101,103,97,116,105,118,101,128,106,96,96,1,58,54,66,116,132,10,-224,48,5,15,105,110,105,116,58,32,101,109,112,116,121,32,108,105,115,116,-96,46,225,207,4,249,37,7,165,197,204,29,0,58,96,9,231,191,3,66,-133,67,85,199,171,128,20,134,47,80,198,135,219,64,22,225,145,0,96,8,-232,89,2,97,3,200,59,128,101,70,91,155,150,1,95,49,71,207,238,238,-0,128,14,239,119,11,112,210,239,119,5,176,163,239,165,12,135,206,224,45,-3,101,74,96,124,131,201,224,54,11,66,160,224,54,6,0,53,64,73,2,-58,54,53,233,57,4,134,201,161,15,226,141,3,70,135,2,95,54,53,96,-233,98,6,96,23,129,102,82,208,64,77,251,255,4,198,236,149,178,242,243,-6,175,45,64,37,0,85,190,179,243,35,0,96,52,128,31,128,86,129,154,-181,250,97,220,96,74,250,74,4,231,165,1,1,53,54,228,16,0,1,80,-32,150,234,120,248,64,73,96,23,128,230,176,109,132,139,0,54,91,219,102,-24,251,68,6,128,203,193,225,128,153,98,46,245,162,1,64,102,229,137,0,-243,118,1,243,119,2,97,11,231,38,0,224,5,0,153,89,224,15,3,66,-142,228,186,0,134,49,128,2,151,241,225,162,0,248,210,1,224,95,0,224,-1,1,104,156,128,0,192,45,247,124,0,160,54,104,180,224,53,3,160,202,-224,74,8,128,146,229,234,4,207,65,233,91,1,181,187,242,94,1,218,209,-224,126,3,103,131,126,159,225,181,2,252,178,8,224,91,0,230,244,0,96,-74,224,51,28,96,199,165,242,225,42,11,225,176,0,224,46,1,224,1,3,-208,167,128,125,225,56,11,129,53,160,47,240,170,2,197,20,225,65,134,129,-66,224,62,0,225,68,42,66,195,98,204,168,110,64,4,227,22,2,227,43,-13,160,180,230,195,47,0,58,100,98,203,101,228,200,0,3,49,51,54,32,-228,195,0,64,12,1,64,35,68,183,105,108,224,38,7,197,79,128,38,197,-74,133,237,224,39,3,197,73,128,39,133,68,230,118,6,8,100,105,103,105,-116,84,111,73,110,134,112,64,218,244,244,9,224,16,0,180,254,134,250,161,-13,224,49,27,96,176,224,49,21,96,39,96,255,65,33,237,62,1,1,95,-54,65,61,96,9,0,49,78,83,65,84,1,49,49,65,84,0,50,224,198,-2,10,92,34,108,105,98,47,68,97,116,97,47,89,57,9,46,104,115,92,-34,44,49,57,49,58,113,17,97,124,98,1,106,207,95,134,86,53,64,135,-226,48,0,245,237,18,98,206,224,200,2,96,161,136,125,3,95,54,49,57,-70,26,106,123,64,98,115,77,0,67,69,151,64,54,144,179,138,40,160,22,-103,80,145,27,224,23,4,74,118,107,135,224,21,4,64,241,98,118,179,89,-128,42,224,19,255,224,19,195,0,51,98,90,224,81,58,0,51,224,241,150,-224,159,151,224,19,255,224,19,37,115,217,160,21,0,49,224,81,50,69,5,-96,19,0,52,182,116,224,81,45,0,52,183,135,224,61,20,109,217,0,52,-183,229,224,83,16,226,175,0,0,49,121,148,224,83,7,1,52,48,229,220,-3,224,21,1,150,145,224,189,25,224,127,4,224,63,1,184,19,224,43,6,-183,82,224,43,7,224,151,11,225,83,13,224,63,12,183,61,224,107,7,224,-85,22,226,35,40,0,52,72,133,225,19,29,224,41,3,228,47,20,224,83,-28,129,231,112,210,224,187,49,225,99,31,224,19,2,220,243,186,225,224,247,-26,224,39,70,224,19,142,230,1,171,224,179,0,225,123,51,0,49,120,213,-224,61,7,147,238,224,83,47,224,19,255,224,19,88,122,59,224,201,178,228,-141,0,3,50,49,53,57,64,8,160,23,226,113,20,0,51,189,116,224,41,-6,2,49,53,56,227,7,2,227,207,20,1,51,56,225,55,2,226,243,1,-229,79,12,1,49,52,224,65,2,227,9,92,65,8,224,41,28,229,223,11,-84,117,128,19,189,226,96,21,77,222,96,21,93,92,224,82,3,64,35,0,-35,125,164,224,83,7,0,49,231,107,3,64,42,102,177,152,52,160,21,65,-99,127,242,238,76,5,65,212,64,59,238,52,5,224,88,1,224,65,2,224,-173,1,225,79,82,224,19,130,80,242,129,4,0,49,226,129,2,226,171,20,-1,49,51,224,20,1,226,126,11,64,60,97,197,228,12,4,97,154,145,18,-117,97,192,64,64,128,0,51,97,201,225,156,3,0,56,239,209,255,224,19,-67,75,67,225,24,255,224,19,255,224,19,9,86,156,192,20,233,103,131,241,-17,255,224,19,255,224,19,255,224,19,159,67,191,0,51,120,225,0,57,233,-242,3,0,57,119,233,128,24,2,49,52,53,233,227,3,126,176,96,70,224,-24,6,232,180,1,224,23,5,1,55,50,64,100,0,55,159,12,1,55,55,-224,26,3,104,80,168,126,224,125,2,1,50,48,228,226,11,64,145,107,100,-2,35,54,48,104,179,160,23,0,52,120,172,224,23,9,0,51,96,119,225,-224,247,224,19,255,224,19,255,224,19,255,224,19,255,224,19,175,237,54,1,-3,49,53,50,50,242,223,182,224,19,255,224,19,255,224,19,243,99,216,138,-120,245,191,3,74,93,138,41,224,21,7,224,43,13,224,65,31,244,242,0,-224,21,3,224,151,0,224,20,45,75,33,224,127,8,85,103,224,171,36,224,-21,13,149,94,224,129,6,128,20,0,52,64,49,224,151,8,224,20,2,94,-88,75,241,64,21,249,183,2,245,114,1,224,43,7,224,108,18,0,57,247,-26,3,64,65,224,43,17,0,50,75,136,224,152,9,224,20,2,224,108,1,-1,50,53,224,65,12,0,53,224,174,2,224,218,12,1,50,57,248,35,0,-3,49,53,48,51,224,91,2,246,80,2,1,55,54,225,77,3,224,23,1,-0,53,224,160,3,226,16,0,0,53,236,146,2,0,52,97,122,98,61,247,-47,3,0,51,76,122,226,192,7,0,56,85,179,0,35,120,124,1,35,53,-226,216,3,1,56,54,64,69,97,165,0,35,237,109,3,64,11,227,26,18,-2,49,52,56,224,182,11,1,55,54,77,163,224,22,8,3,50,49,52,53,-224,205,2,237,2,61,1,49,53,246,52,3,224,107,3,0,57,224,131,13,-0,53,225,105,12,64,23,224,155,2,224,115,11,224,175,11,65,78,130,6,-1,49,54,231,233,255,224,19,255,224,19,255,224,19,211,251,253,31,229,140,-11,3,51,49,48,53,252,255,11,225,107,255,224,19,168,251,45,255,224,19,-7,1,49,51,232,69,21,224,19,101,227,114,255,224,19,255,224,19,83,0,-49,253,15,40,2,55,48,54,234,135,3,253,79,91,230,155,11,224,39,0,-1,56,52,235,95,4,235,179,31,227,100,200,2,56,52,54,238,239,4,224,-23,2,122,138,224,23,10,236,15,3,224,23,3,0,48,224,23,14,239,187,-12,2,56,52,53,224,119,14,236,175,4,224,23,3,0,50,238,144,2,238,-73,1,0,56,238,51,3,226,86,91,224,19,60,0,57,225,115,14,239,161,-4,192,23,3,55,48,55,54,237,243,12,224,108,30,2,56,52,54,238,206,-12,224,43,2,226,215,11,230,220,60,2,56,53,49,225,183,3,79,162,224,-44,9,1,50,51,113,103,143,191,1,54,52,224,170,2,0,50,79,186,124,-255,0,64,124,185,224,24,0,0,55,64,48,80,11,224,23,6,0,57,64,-121,82,207,2,64,35,55,252,245,2,144,237,64,89,224,22,5,64,69,66,-63,224,21,4,80,214,110,252,224,42,4,1,55,55,64,67,0,53,96,90,-0,49,253,81,3,1,50,48,64,48,96,229,224,188,4,1,50,56,112,101,-0,51,224,24,9,1,49,57,105,83,224,25,9,3,51,49,52,50,65,138,-113,76,1,35,54,64,100,2,75,32,64,224,0,255,224,0,255,224,0,136,-1,58,54,67,22,27,10,65,32,83,39,32,95,49,52,49,32,64,95,54,-50,54,32,64,67,32,95,49,50,55,32,95,49,51,99,53,100,244,3,58,-54,52,57,96,43,13,66,32,89,32,64,66,32,66,32,83,32,85,32,80,-64,55,2,55,32,64,128,5,64,0,1,67,39,64,27,1,67,39,64,83,-0,66,64,18,64,16,2,67,32,64,192,41,192,17,96,32,1,80,32,128,-13,7,95,49,48,54,32,64,85,32,99,52,2,85,32,65,163,59,3,58,-54,52,56,224,115,1,128,80,64,119,3,64,66,32,85,96,165,0,55,68,-31,224,87,0,64,85,96,124,3,32,64,67,39,64,97,0,64,224,198,2,-132,92,2,64,64,64,128,52,96,92,0,55,96,92,2,67,32,83,224,239,-3,131,216,224,20,7,68,159,224,20,8,0,54,68,8,224,20,7,0,52,-68,3,224,20,8,65,66,224,20,7,0,53,68,39,224,83,8,64,166,224,-20,8,224,125,11,85,104,224,20,8,100,129,224,20,8,224,125,11,77,4,-224,20,9,65,73,224,251,8,225,16,11,0,51,224,188,11,0,52,224,167,-12,224,83,11,0,49,69,47,224,21,10,224,148,11,104,88,224,20,7,1,-56,55,106,7,224,22,8,0,54,225,85,12,1,56,53,224,196,12,1,56,-53,225,215,12,2,56,55,48,64,45,99,21,65,80,3,66,32,95,52,86,-158,2,95,49,52,65,157,227,45,2,65,236,1,95,54,97,221,3,64,64,-95,49,75,95,224,7,183,1,58,54,66,88,68,20,97,21,64,241,2,95,-54,52,129,61,1,95,54,65,14,31,102,114,111,109,85,84,70,56,32,34,-33,92,34,35,37,38,39,40,41,42,44,45,46,47,58,59,63,64,91,92,-92,93,3,95,123,125,34,64,79,0,58,97,24,99,97,6,95,50,57,48,-32,64,83,67,243,1,83,39,67,186,0,60,199,215,224,19,7,162,0,224,-19,4,98,64,100,70,3,67,32,61,61,192,17,1,95,49,120,95,1,85,-32,192,191,224,10,3,0,67,164,97,192,66,65,161,224,30,1,224,40,2,-224,128,8,130,16,224,61,5,66,128,224,61,12,224,149,5,64,19,224,149,-9,65,7,0,52,225,81,9,128,103,225,81,7,10,36,43,60,61,62,92,-94,96,92,124,126,193,67,0,51,225,67,19,72,144,225,47,7,104,210,224,-153,4,96,17,225,47,20,0,83,224,241,6,67,91,224,30,1,224,230,5,-67,96,224,230,13,0,50,198,77,101,163,67,86,133,149,101,152,230,86,5,-132,148,0,64,65,9,101,152,97,10,216,190,1,58,54,67,94,97,49,160,-150,101,213,0,66,160,90,192,72,0,51,68,2,225,59,1,5,83,79,85,-82,67,69,97,54,160,118,134,87,1,64,95,140,227,64,20,7,95,50,54,-56,32,95,54,50,64,188,0,66,64,8,0,51,64,119,64,129,3,95,52,-53,49,64,11,66,148,224,242,0,224,147,2,96,75,160,181,0,58,96,180,-102,152,102,154,68,18,192,159,70,119,96,8,166,125,91,143,107,58,96,37,-70,193,64,5,0,80,102,163,0,79,96,203,0,54,64,84,224,198,1,18,-85,110,99,108,111,115,101,100,32,123,45,32,99,111,109,109,101,110,116,96,-211,138,81,129,233,71,89,135,131,128,7,225,37,0,0,83,230,244,6,123,-174,96,249,193,143,192,47,225,146,10,164,199,167,195,128,251,96,159,107,229,-161,165,4,56,48,32,95,55,107,192,161,247,224,147,39,192,101,224,146,28,-0,49,108,92,224,147,23,2,49,55,52,224,148,14,64,85,192,97,130,62,-232,22,14,224,46,30,130,71,160,187,224,231,4,224,84,4,129,117,224,175,-8,192,156,192,24,0,95,143,172,224,16,4,67,93,96,0,168,168,0,58,-96,24,7,10,65,32,85,32,66,32,90,66,54,129,100,1,95,51,126,152,-128,177,1,95,53,79,221,128,95,225,163,10,0,58,96,86,96,67,193,102,-128,49,67,35,0,52,192,44,131,48,67,87,109,38,224,71,4,125,137,64,-21,96,4,64,80,201,60,105,147,192,85,224,154,4,160,99,224,73,5,96,-59,0,54,227,60,0,142,175,2,64,64,80,70,120,67,7,229,38,6,100,-101,229,38,9,10,32,94,41,94,42,94,43,94,44,94,45,165,38,67,183,-234,157,3,74,111,96,60,170,22,96,20,135,182,225,170,3,160,144,165,99,-65,0,64,26,0,54,109,226,133,112,1,95,50,69,129,0,58,96,137,5,-10,65,32,95,52,56,128,244,196,229,230,61,5,96,226,224,26,12,100,114,-224,26,14,97,2,224,26,13,97,110,196,94,229,163,4,129,91,107,10,65,-214,229,238,3,64,25,229,161,10,224,44,13,229,206,14,224,117,15,98,176,-224,72,12,231,148,13,224,44,14,101,151,224,117,11,225,7,14,101,150,224,-145,13,97,115,224,100,12,64,25,224,145,32,64,97,225,7,34,99,226,224,-72,12,64,25,224,117,32,64,37,225,7,13,226,97,14,194,16,225,35,10,-98,207,224,173,13,96,86,224,128,12,131,16,224,173,30,103,40,225,35,32,-104,69,224,72,12,96,25,224,117,31,232,112,15,224,118,2,225,34,5,195,-78,224,145,10,226,189,16,234,82,14,224,44,14,226,189,16,224,45,12,226,-134,15,225,200,15,96,164,225,253,13,96,58,224,26,13,98,144,224,245,13,-99,60,224,154,12,226,244,15,224,44,12,226,216,15,224,117,14,64,39,224,-72,13,226,244,15,224,44,12,226,160,15,225,7,14,98,115,224,144,13,99,-31,224,99,12,226,215,15,224,44,11,226,186,15,224,116,13,99,174,224,70,-11,226,212,15,224,43,11,226,155,15,225,3,15,194,10,224,25,9,198,159,-224,168,9,99,52,224,124,11,226,235,15,224,43,11,226,233,16,224,114,12,-226,150,16,226,149,35,226,148,16,228,28,14,225,0,16,226,174,16,226,173,-36,228,24,35,229,77,16,73,59,1,51,48,76,168,104,136,0,58,96,6,-233,25,6,102,175,243,184,6,0,95,153,228,0,58,108,209,224,47,7,98,-68,0,54,71,238,0,58,96,38,211,247,72,252,1,95,53,105,16,74,67,-0,54,106,10,0,32,224,17,1,1,64,35,73,6,64,52,138,67,238,137,-15,238,116,8,224,221,12,225,0,26,0,58,96,171,160,190,75,221,139,59,-0,55,160,192,98,99,0,54,67,178,0,58,96,244,224,146,2,225,138,25,-0,58,96,63,224,197,22,227,76,9,224,18,6,113,13,226,176,25,224,10,-13,240,92,7,224,51,4,225,6,5,234,211,10,148,235,64,124,98,216,77,-116,0,82,224,22,4,174,243,96,63,138,214,98,5,97,48,226,15,1,64,-39,1,49,49,75,234,1,50,32,235,86,1,25,92,34,108,105,98,47,68,-97,116,97,47,67,104,97,114,46,104,115,92,34,44,49,57,54,58,49,143,-85,1,95,54,136,72,0,73,64,4,79,76,83,85,75,53,235,222,0,107,-66,237,141,0,3,95,50,57,56,75,65,4,57,56,32,35,57,96,161,128,-11,98,99,96,161,171,84,2,54,49,57,79,140,129,211,130,235,185,90,64,-54,0,35,186,97,65,137,217,235,0,52,162,62,3,35,49,52,56,252,73,-2,75,171,137,84,224,46,4,121,157,122,48,224,21,3,64,90,96,67,0,-50,113,141,192,43,224,89,0,224,19,255,224,19,206,0,52,226,33,4,224,-81,50,66,115,224,241,147,224,159,151,224,19,255,224,19,27,225,203,51,212,-137,2,35,53,57,71,215,224,21,7,0,51,103,231,224,103,38,224,39,11,-229,155,1,224,19,1,71,194,224,59,17,121,157,224,61,18,224,163,1,112,-56,224,21,7,2,56,53,49,101,243,224,87,7,0,50,123,77,225,57,58,-224,59,11,0,53,225,13,50,225,73,51,224,59,1,109,71,160,21,225,95,-11,225,53,1,224,121,21,224,39,71,224,19,131,224,179,0,1,49,53,72,-128,224,181,158,224,19,11,226,31,11,225,145,31,226,131,31,224,19,255,224,-19,87,225,143,171,78,28,224,19,7,66,147,64,14,2,35,50,49,155,69,-224,23,2,224,43,7,229,47,11,224,163,71,227,15,0,3,50,49,53,54,-230,41,11,64,23,224,167,2,224,23,4,230,131,2,224,23,0,0,52,116,-169,224,21,9,224,135,6,97,3,0,52,124,101,225,1,7,2,52,48,51,-224,179,10,1,52,48,76,210,224,87,7,1,56,52,153,255,160,23,226,37,-0,224,89,4,224,45,4,224,203,2,224,91,1,115,168,224,45,10,237,40,-3,224,23,2,225,17,13,2,56,52,54,116,230,224,93,9,229,71,2,225,-17,1,110,24,224,67,22,225,109,2,237,180,4,224,47,4,224,139,2,225,-67,1,224,93,3,224,137,0,2,50,49,52,78,94,224,139,10,225,91,2,-224,67,2,224,183,2,0,56,224,67,2,0,53,225,247,2,224,45,1,125,-232,224,113,7,64,159,226,37,12,224,45,3,225,181,0,65,89,224,45,24,-224,21,0,0,49,124,10,224,21,2,130,83,81,157,224,135,8,154,198,160,-21,231,249,0,0,52,224,65,4,225,224,3,233,28,3,224,23,3,225,156,-4,0,54,239,14,0,1,49,54,226,132,3,228,171,31,224,39,11,64,19,-111,140,233,137,4,0,52,228,74,0,112,37,224,152,2,96,43,0,55,224,-242,2,64,64,96,165,239,184,4,66,130,128,64,0,54,226,118,6,124,162,-224,42,3,228,181,1,225,255,3,225,95,0,158,95,160,21,228,181,1,121,-195,225,48,7,0,49,227,87,3,224,237,0,0,57,224,42,12,0,48,227,-36,11,120,8,225,65,18,224,19,211,225,4,1,126,27,225,26,9,228,225,-11,227,108,12,0,50,117,19,224,106,8,0,57,224,21,2,230,126,11,230,-146,12,64,20,96,78,226,51,4,83,199,129,172,224,151,6,227,33,1,225,-80,121,224,19,191,69,240,225,24,255,224,19,255,224,19,0,239,179,51,224,-19,71,228,128,1,228,18,2,225,104,191,224,19,255,224,19,255,224,19,223,-0,53,70,125,107,55,1,35,57,233,157,3,0,57,74,45,0,35,122,22,-2,35,54,48,235,39,3,0,52,78,199,224,23,10,0,55,72,65,127,0,-233,231,5,0,49,250,170,2,1,50,53,234,23,13,1,50,53,238,14,12,-3,49,50,52,56,234,180,13,2,52,56,51,224,215,11,2,50,52,56,224,-71,14,233,116,13,1,50,51,235,63,7,96,23,2,55,48,53,124,202,225,-75,19,126,43,160,45,0,54,236,230,3,224,237,0,0,55,126,48,224,92,-0,233,59,0,2,55,48,55,236,95,3,0,49,65,45,225,231,88,224,19,-255,224,19,255,224,19,255,224,19,255,224,19,255,224,19,71,250,150,1,244,-54,3,250,172,11,225,65,255,224,19,255,224,19,255,224,19,139,74,41,107,-51,246,64,5,234,255,0,224,21,7,224,43,13,224,65,31,246,151,2,224,-150,11,224,20,44,74,189,224,127,13,64,230,2,35,49,52,234,161,2,64,-64,0,51,96,21,0,55,235,21,2,118,153,64,21,1,50,48,64,93,224,-43,2,128,21,0,53,224,130,6,128,21,0,50,235,41,2,224,43,2,224,-87,6,225,47,35,224,197,19,224,21,2,241,73,1,235,123,4,224,21,0,-0,52,250,99,4,235,146,1,224,45,3,251,237,0,224,110,25,224,64,1,-245,194,3,237,9,1,224,86,2,1,51,52,225,224,0,0,53,247,140,3,-97,96,98,13,245,240,4,244,46,11,0,56,120,164,119,202,1,35,53,226,-167,3,1,56,56,89,233,64,96,237,223,5,248,129,1,224,45,2,224,157,-0,3,50,49,53,56,246,142,11,64,23,0,51,224,138,2,227,45,30,224,-19,11,246,73,11,255,224,12,225,161,1,224,120,61,224,19,255,224,19,255,-224,19,255,224,19,119,228,144,11,224,39,11,241,44,11,101,152,146,196,2,-49,52,53,252,231,3,241,165,1,224,24,6,235,129,1,224,48,6,2,48,-57,57,235,157,255,224,19,188,251,93,255,224,19,7,1,49,51,226,230,131,-233,24,1,225,65,161,224,19,255,224,19,167,234,82,32,253,124,91,230,206,-11,248,15,31,224,199,0,70,177,224,180,99,225,165,92,224,160,151,225,165,-31,225,144,11,228,238,11,229,142,52,237,78,11,0,56,90,219,160,21,0,-56,238,89,3,95,191,1,35,55,77,224,3,35,55,55,55,232,253,3,3,-50,49,52,53,64,74,142,73,91,208,192,25,1,49,50,64,65,105,79,160,-59,192,24,0,55,64,184,0,51,96,48,224,23,4,0,57,123,174,96,126,-0,55,251,196,3,64,191,111,20,224,22,5,64,69,66,198,224,21,4,78,-188,64,209,224,42,5,1,55,57,64,163,92,185,91,194,224,25,4,64,69,-0,50,96,49,224,188,3,1,50,56,105,211,111,70,224,24,5,1,49,57,-104,32,224,25,9,3,51,49,52,50,96,51,64,19,1,35,54,64,100,2,-75,32,64,224,0,255,224,0,255,224,0,152,1,58,54,66,223,12,10,65,-32,67,39,32,83,32,64,67,39,32,67,128,5,18,39,32,89,32,64,64,-83,39,32,66,32,64,66,39,32,66,39,32,80,66,222,1,66,32,128,1,-0,67,64,23,64,0,128,43,1,67,39,64,14,160,26,96,11,224,41,1,-96,82,224,42,3,192,2,128,21,224,98,3,64,2,64,134,5,95,52,54,-32,95,54,67,191,160,33,224,101,3,224,131,2,128,85,0,66,64,55,128,-33,9,64,66,32,83,39,32,64,95,53,55,192,63,7,67,32,95,56,48,-32,95,55,68,127,96,14,160,64,2,95,52,57,84,83,64,61,224,32,1,-1,95,54,115,119,128,0,224,55,4,101,38,2,64,95,50,82,246,3,58,-54,49,57,97,51,9,83,39,32,95,49,56,50,32,95,54,115,217,0,67,-64,8,64,120,96,13,100,151,0,66,64,13,160,69,5,67,32,95,49,53,-57,224,30,4,64,74,0,56,96,74,3,85,32,75,52,224,2,1,2,90,-32,90,64,6,160,136,0,58,64,85,64,36,5,95,49,54,48,32,95,83,-191,1,95,51,69,187,1,95,54,72,170,1,95,54,69,50,1,95,54,78,-228,3,95,49,54,56,192,97,3,95,49,55,49,224,109,0,0,48,64,27,-3,55,50,32,80,160,17,160,216,2,95,49,55,224,145,0,2,95,49,56,-224,47,0,3,95,49,56,51,224,11,2,0,54,224,55,7,129,190,65,171,-1,67,32,225,172,1,129,36,224,27,4,1,49,52,65,30,64,23,1,95,-55,96,241,1,95,54,133,219,129,79,1,49,56,69,56,128,19,224,83,51,-111,218,224,82,5,0,55,64,241,0,56,224,221,2,1,57,48,224,11,0,-0,54,85,54,6,75,32,95,49,57,50,32,160,67,0,75,160,8,64,21,-65,85,65,117,0,54,97,117,9,112,111,112,99,111,117,110,116,32,58,96,-54,5,10,65,32,115,104,108,64,12,0,52,96,12,2,105,110,118,64,12,-0,51,96,12,2,120,111,114,64,12,0,50,96,12,128,11,0,49,226,42,-1,70,43,98,154,0,49,112,118,70,165,66,21,224,17,0,70,173,66,148,-1,58,54,71,22,1,10,65,98,229,144,250,2,64,64,80,66,120,86,130,-66,8,5,52,57,57,32,95,53,64,13,224,10,3,5,53,50,54,32,95,-53,70,171,3,95,54,48,53,96,5,97,37,224,6,0,0,55,96,67,130,-113,0,95,98,74,0,52,96,37,192,54,1,64,85,99,99,5,67,32,67,-32,61,61,199,157,3,95,53,49,50,64,42,64,102,96,36,13,102,114,111,-109,85,84,70,56,32,34,101,111,102,34,98,165,7,85,32,75,32,95,51,-54,51,160,137,0,73,162,186,0,58,96,114,96,200,1,95,53,64,132,132,-101,1,95,53,66,208,2,66,32,90,228,112,0,64,30,64,249,1,95,53,-64,48,128,57,129,125,1,95,49,192,84,2,95,49,56,64,9,64,177,1,-53,51,66,241,224,249,3,0,57,64,5,128,231,64,7,0,52,96,232,129,-173,3,95,54,48,49,225,22,1,65,130,96,39,0,58,96,37,224,97,14,-0,80,96,83,68,11,2,95,53,51,224,30,0,4,53,57,53,32,35,67,-120,64,66,129,168,64,79,64,67,1,53,57,193,67,225,29,1,4,118,97,-108,117,101,65,31,225,85,7,64,64,0,51,99,6,97,55,66,133,193,46,-130,57,0,67,66,47,132,206,128,5,1,95,53,66,24,1,95,53,105,119,-129,232,64,67,225,112,0,1,95,49,119,194,0,58,64,234,128,143,0,49,-65,222,1,50,53,193,179,3,95,53,51,52,224,160,8,2,92,92,110,224,-158,10,96,245,0,49,65,97,160,158,99,14,160,159,130,151,225,122,4,225,-31,6,73,214,225,60,1,96,17,73,34,0,58,97,162,129,42,2,55,32,-58,96,31,225,56,15,2,107,101,121,224,151,10,98,139,225,54,0,0,50,-225,55,3,64,82,195,47,194,106,230,89,3,226,116,1,230,133,7,134,197,-198,182,230,29,0,96,68,64,182,134,94,64,24,1,83,39,99,196,0,53,-66,85,64,76,69,12,0,53,134,46,2,67,32,79,68,78,96,139,226,208,-16,64,232,196,9,225,140,1,97,219,65,32,2,95,53,57,64,19,3,50,-57,32,75,128,235,132,206,3,64,66,32,85,130,6,225,9,2,96,129,129,-161,128,31,2,90,32,95,74,231,2,95,49,51,128,52,96,110,130,253,164,-66,98,55,68,66,64,102,64,23,2,85,32,83,64,138,71,45,2,67,32,-60,171,91,224,18,6,68,119,98,138,224,18,1,100,17,0,67,65,59,224,-19,2,132,57,1,75,32,225,193,1,3,84,82,97,119,132,25,224,24,6,-2,69,79,70,160,23,96,24,5,66,32,95,50,50,49,224,31,2,3,123,-45,35,32,96,32,0,67,128,25,226,21,2,3,32,35,45,125,192,59,224,-151,8,133,74,224,150,4,65,154,224,149,6,5,73,110,100,101,110,116,224,-152,12,4,84,66,114,97,99,99,173,128,27,0,65,128,9,225,17,6,66,-18,224,121,6,66,143,224,121,6,65,108,64,93,0,67,166,175,225,154,1,-0,35,102,182,224,23,11,104,140,226,71,0,224,151,1,6,125,32,108,97,-121,111,117,160,180,225,40,2,224,23,4,227,170,0,68,192,0,51,67,245,-195,27,224,25,4,224,20,0,225,213,7,224,195,9,227,254,2,3,56,32,-95,51,98,204,224,76,4,0,49,70,108,224,23,0,193,206,73,88,7,49,-53,32,79,32,35,52,54,195,19,105,99,97,204,227,40,3,64,0,0,58,-98,250,101,131,134,94,0,56,72,104,0,53,93,237,1,95,53,100,72,3,-64,95,49,50,68,95,96,185,1,95,49,100,208,96,11,0,58,96,6,96,-58,0,48,64,218,1,55,56,103,91,64,69,164,129,73,190,160,11,0,50,-101,13,192,11,70,13,196,165,73,23,0,50,96,123,96,17,0,73,99,33,-133,67,68,53,70,200,102,167,131,70,3,95,51,52,51,226,51,2,21,73,-110,116,101,103,101,114,58,32,100,105,118,105,115,105,111,110,32,98,121,32,-48,161,145,160,54,70,227,100,134,96,79,0,85,64,68,0,49,69,60,127,-20,165,182,224,17,9,128,64,96,61,224,7,0,132,137,164,135,70,31,64,-39,132,172,4,83,32,95,53,56,133,165,164,175,68,216,2,95,53,56,132,-130,105,17,160,42,0,85,64,10,192,36,235,183,2,235,255,0,1,95,53,-94,18,227,0,0,192,36,107,100,160,5,160,88,164,150,76,23,193,224,66,-4,161,219,69,2,126,36,224,0,3,0,58,97,113,133,5,0,83,140,82,-1,95,50,102,218,0,52,79,174,0,58,96,49,140,141,105,239,98,148,0,-89,161,61,224,19,0,66,165,96,8,64,63,226,83,4,224,173,2,236,147,-5,64,31,103,83,224,28,0,64,238,128,69,71,98,100,111,72,231,1,51,-56,69,8,160,220,66,92,171,217,2,49,48,55,224,28,2,96,241,66,96,-112,81,64,31,0,52,224,12,0,1,95,50,195,20,2,95,53,53,102,67,-1,95,52,95,78,161,219,0,58,97,95,98,95,135,230,167,229,230,98,0,-128,181,64,11,106,241,192,7,68,49,1,53,52,130,229,108,26,129,196,104,-169,127,116,160,6,193,150,96,26,70,93,64,21,64,59,0,54,105,57,96,-162,162,13,160,49,96,28,228,25,0,141,78,128,46,138,157,128,26,132,29,-65,72,136,155,0,83,142,33,128,162,231,103,0,128,33,97,112,98,75,108,-172,1,53,55,128,152,226,105,0,161,125,225,229,0,136,236,97,214,231,155,-0,2,95,53,56,96,230,192,95,160,163,128,220,160,12,98,99,141,39,2,-95,53,56,102,227,138,122,224,197,16,64,39,192,18,64,66,225,16,3,227,-134,2,64,139,164,178,96,8,140,158,3,95,49,55,52,206,41,67,110,146,-122,101,209,0,39,66,133,1,95,53,66,31,162,139,224,77,3,224,13,5,-0,58,99,144,1,10,65,228,80,9,14,108,97,115,116,58,32,101,109,112,-116,121,32,108,105,115,133,220,129,44,103,229,0,90,64,239,128,175,0,58,-96,8,100,255,224,89,0,0,79,115,252,64,127,0,58,97,13,227,72,0,-132,232,0,75,98,124,199,254,0,65,96,13,133,126,196,24,207,105,227,56,-1,239,244,0,2,95,53,53,137,209,0,54,170,130,96,14,0,58,100,9,-3,10,65,32,89,160,45,169,160,162,184,129,230,192,93,96,70,137,180,131,-186,228,148,0,68,222,224,10,7,64,133,72,241,167,38,139,118,0,49,109,-43,65,178,4,95,51,50,52,32,169,35,192,116,133,105,239,241,3,128,48,-64,10,128,47,202,201,64,0,64,60,0,58,101,54,161,39,130,187,1,95,-50,73,212,129,29,241,26,0,224,27,4,97,71,84,202,134,125,0,57,102,-179,84,128,134,185,64,106,0,53,96,34,170,226,0,52,70,112,130,108,163,-131,128,11,142,13,99,157,128,1,1,95,54,77,104,128,67,131,228,1,95,-53,128,198,224,13,0,65,252,102,164,64,111,225,253,8,0,49,193,253,64,-39,224,29,0,2,51,50,51,224,29,6,173,24,230,118,7,0,58,96,102,-144,141,227,13,4,64,25,130,41,0,83,134,203,231,17,1,230,186,10,230,-249,1,231,66,11,224,48,20,97,192,226,57,5,73,44,229,217,8,130,62,-132,230,230,242,3,162,98,101,109,162,169,99,233,76,99,133,139,79,234,100,-10,160,60,231,78,0,166,14,224,114,2,228,139,0,242,219,3,162,184,224,-115,21,224,113,5,224,111,3,224,49,17,144,134,224,0,3,0,58,98,40,-163,158,1,95,53,81,217,1,53,53,99,253,160,16,65,72,68,163,3,95,-50,54,56,66,62,100,167,141,39,5,53,55,48,32,95,50,118,238,172,18,-71,162,0,54,102,62,224,155,3,0,58,96,119,242,128,0,141,169,0,55,-208,125,167,121,64,180,0,85,81,119,193,174,166,97,0,39,224,21,3,165,-153,224,29,0,195,239,103,64,160,207,0,54,131,52,132,40,228,249,4,5,-102,111,108,100,108,49,228,251,8,64,173,98,152,64,185,224,146,3,0,83,-226,1,4,96,91,131,16,231,228,1,0,85,66,78,235,104,2,100,65,133,-173,232,50,0,192,189,230,196,0,102,154,199,247,1,95,50,206,3,230,207,-0,0,54,128,22,161,171,166,169,232,8,1,232,9,5,128,151,0,54,228,-68,0,208,238,128,144,0,53,113,242,131,157,64,83,100,142,66,13,96,45,-198,227,132,39,0,58,100,57,99,127,0,73,194,240,134,20,227,60,4,137,-26,227,245,2,230,134,7,96,144,131,201,104,247,144,93,163,4,135,185,233,-96,0,193,92,233,121,10,231,43,5,68,247,128,238,200,174,128,89,67,68,-128,15,1,95,53,76,13,130,181,0,53,76,78,128,155,99,154,129,74,103,-182,162,84,176,113,224,46,1,224,102,0,160,44,227,250,3,224,184,11,224,-134,15,105,65,64,169,224,137,8,192,90,224,134,27,224,181,2,225,11,3,-224,73,0,161,11,97,218,0,50,226,226,2,10,92,34,108,105,98,47,68,-97,116,97,47,172,56,96,7,13,114,110,97,108,46,104,115,92,34,44,53,-52,58,49,98,245,0,58,97,249,113,29,117,240,67,171,0,58,96,115,162,-224,97,148,128,236,237,182,0,98,186,96,23,162,95,98,240,163,253,225,236,-0,64,41,227,206,4,132,156,128,5,227,149,8,19,105,109,112,111,115,115,-105,98,108,101,58,32,120,115,32,62,61,32,121,115,96,161,81,126,224,221,-38,3,57,48,58,54,239,190,0,234,247,2,64,145,226,86,0,227,125,3,-172,130,227,124,3,0,48,236,97,0,228,118,0,163,81,1,53,53,114,128,-164,213,196,131,224,80,12,234,157,2,224,80,2,97,176,96,69,97,127,245,-127,1,98,76,139,74,105,254,156,67,104,141,132,7,196,37,196,13,224,37,-1,64,106,224,14,3,228,40,1,236,35,0,0,58,96,114,163,241,142,33,-231,33,21,166,55,96,172,0,55,228,220,11,64,82,133,44,64,140,0,51,-68,80,232,192,1,131,14,163,23,129,116,150,150,3,64,95,52,51,96,162,-133,175,160,120,200,22,0,53,168,108,1,53,53,79,127,130,142,66,230,226,-142,2,163,123,129,43,229,119,9,161,154,229,121,8,225,244,15,96,188,64,-110,161,159,230,102,1,67,126,0,53,105,70,199,208,226,76,45,224,91,1,-226,76,10,224,95,3,226,76,31,224,80,2,161,159,106,148,0,58,96,24,-226,76,6,130,58,226,57,0,100,69,230,69,2,224,11,3,0,58,96,71,-1,10,65,74,236,0,58,96,147,106,83,70,64,0,52,102,31,64,187,206,-25,78,103,1,95,53,79,74,205,122,104,52,138,81,80,229,96,10,0,58,-96,6,230,148,6,192,251,96,78,148,92,165,1,128,6,0,58,96,80,224,-52,27,224,59,2,0,58,96,139,224,52,20,224,98,2,160,59,0,58,96,-198,224,52,27,224,112,2,0,58,97,1,102,215,134,208,226,149,3,140,23,-224,19,0,111,240,166,10,2,95,53,52,105,128,209,165,165,28,1,53,52,-143,99,198,49,97,136,64,123,135,57,96,86,75,246,2,52,51,32,101,12,-160,47,198,59,96,65,187,41,194,63,195,118,234,215,2,0,73,217,42,107,-249,0,51,142,202,96,17,192,118,0,58,96,7,3,10,65,32,75,141,176,-64,84,64,13,2,50,32,58,96,114,96,25,108,144,64,137,98,25,65,241,-0,52,98,1,0,52,97,129,66,37,202,68,0,52,162,10,64,31,0,58,-96,31,193,49,231,80,0,224,174,0,96,48,164,28,232,176,2,192,13,2,-51,48,57,195,220,128,167,216,26,74,138,225,32,0,97,169,214,171,64,15,-121,185,184,82,1,95,51,115,186,96,86,0,58,96,6,104,225,1,95,53,-68,138,2,95,53,51,100,123,0,51,193,214,0,83,65,33,175,145,77,214,-105,226,67,110,74,217,91,153,96,7,227,154,2,205,243,206,36,0,56,98,-38,64,85,242,128,0,202,166,129,148,128,19,228,80,1,92,133,195,210,224,-117,39,201,111,100,53,160,2,64,18,228,172,6,96,116,160,5,69,49,1,-54,53,220,247,162,117,132,53,171,72,0,35,162,171,97,166,66,197,126,114,-224,40,12,235,245,0,224,62,13,194,145,224,70,6,160,38,233,102,0,224,-236,24,65,80,0,54,162,95,0,89,106,130,192,215,117,210,96,127,138,165,-163,25,65,85,1,50,55,224,236,7,165,219,235,188,1,95,56,179,120,76,-225,119,204,192,22,2,95,51,48,248,50,3,2,32,37,32,168,87,224,45,-5,64,0,118,61,96,6,64,249,0,58,87,26,195,11,73,213,137,208,250,-39,25,162,41,230,12,2,97,203,224,70,0,172,37,96,28,250,41,38,154,-39,250,38,2,0,51,239,130,0,0,51,67,230,96,18,131,218,2,80,32,-58,124,248,103,137,3,50,55,32,80,112,120,0,50,99,66,109,244,134,198,-117,84,64,116,0,58,122,97,128,45,250,86,4,0,58,96,47,161,7,64,-201,122,24,0,50,237,156,1,131,51,0,85,96,21,131,126,64,123,65,182,-151,23,173,43,253,57,1,253,156,3,205,241,225,240,1,92,140,252,188,0,-81,158,126,79,133,48,0,58,124,203,226,63,8,103,81,119,169,96,94,128,-14,97,40,66,85,225,252,1,110,47,97,254,225,209,2,195,93,165,98,110,-213,231,251,2,160,98,65,116,0,49,163,138,98,117,251,178,1,226,109,1,-129,219,192,18,160,50,96,8,66,104,64,6,64,198,0,58,96,219,100,188,-147,66,64,24,96,173,98,126,137,136,113,238,0,50,233,213,1,0,58,96,-59,225,234,0,128,17,129,233,124,223,161,252,64,71,192,89,195,89,224,74,-0,132,150,0,56,128,21,0,53,224,21,0,193,131,129,121,0,58,96,171,-207,227,64,14,193,253,1,95,53,97,193,97,138,225,63,4,226,215,51,0,-58,97,162,244,123,2,67,79,1,90,32,224,34,1,0,58,96,52,178,102,-64,13,194,87,67,219,69,225,64,51,115,65,64,98,244,172,1,64,19,114,-182,162,21,224,177,2,229,96,1,224,173,0,161,170,224,25,3,227,205,1,-139,154,128,33,226,0,39,225,20,0,0,95,77,155,97,59,0,95,117,26,-255,142,1,64,172,129,219,67,55,65,174,224,197,2,231,142,1,195,126,193,-113,228,84,0,163,147,96,71,225,186,0,0,51,101,115,0,58,97,210,65,-6,67,68,67,112,193,4,228,79,11,225,34,40,96,25,227,31,4,224,20,-1,97,35,128,110,103,206,225,39,27,1,95,49,72,56,164,34,74,128,128,-10,0,50,65,58,161,41,64,6,244,89,1,229,140,2,230,190,2,182,23,-225,196,2,160,177,64,34,248,127,6,96,186,1,52,54,166,90,224,51,4,-64,15,224,45,2,128,21,145,180,224,47,7,134,133,99,201,130,239,115,105,-160,0,0,58,96,230,101,89,0,48,77,17,114,44,99,213,205,49,65,126,-75,179,1,49,48,192,0,1,32,58,96,38,229,117,7,64,92,64,72,0,-51,230,146,3,224,174,1,128,164,225,170,0,225,124,4,129,96,97,84,132,-132,64,6,3,10,65,32,90,71,113,0,58,96,31,226,104,0,247,86,1,-162,90,0,58,96,71,3,10,65,32,73,64,152,130,100,96,10,130,93,148,-14,64,39,0,52,78,111,227,205,0,1,82,32,120,133,1,52,57,133,227,-2,95,52,57,64,238,1,52,57,211,158,0,90,114,148,0,58,96,22,224,-138,0,96,45,174,144,84,150,142,9,1,95,52,91,8,1,95,52,83,218,-64,72,68,154,1,52,57,199,160,0,89,100,111,67,148,0,52,92,19,162,-130,224,62,0,1,95,52,88,209,248,177,0,233,198,0,206,117,76,171,0,-64,72,212,119,252,215,247,193,77,96,41,69,57,224,42,0,0,67,69,161,-72,58,4,50,48,57,53,49,97,79,3,35,53,53,50,128,230,131,1,224,-123,3,129,139,104,228,160,20,101,129,98,7,0,52,255,101,2,64,86,64,-210,1,95,51,96,73,230,183,1,22,104,71,101,116,67,111,110,116,101,110,-116,115,58,32,115,117,114,114,111,103,97,116,101,168,200,69,102,71,36,160,-110,76,23,64,174,224,18,0,65,60,88,128,1,95,52,95,63,75,79,128,-24,238,124,0,0,58,97,78,76,28,102,89,0,58,96,39,99,100,143,89,-0,49,78,71,0,95,73,13,4,35,49,49,49,52,173,79,241,252,5,30,-68,97,116,97,46,67,104,97,114,46,99,104,114,58,32,105,110,118,97,108,-105,100,32,99,111,100,101,112,111,105,110,213,160,0,50,161,184,196,214,0,-95,96,238,75,106,97,38,9,10,65,32,94,103,101,116,98,32,58,97,177,-98,234,3,55,51,32,79,67,114,0,53,88,150,1,95,51,65,161,134,24,-97,234,213,196,225,112,1,66,36,74,50,143,58,2,52,56,54,66,59,0,-55,232,6,3,6,111,112,101,110,70,105,108,129,63,225,148,2,0,58,98,-99,101,135,66,3,89,57,96,57,234,3,1,0,51,97,65,200,172,185,135,-2,51,57,52,218,201,64,152,64,3,250,216,1,115,240,65,226,67,76,164,-22,96,6,224,142,1,1,58,32,210,233,0,58,64,173,226,251,11,64,208,-162,251,109,38,128,26,173,41,225,236,4,129,255,224,34,2,141,60,64,90,-131,44,241,109,3,0,52,87,98,2,64,95,52,120,77,0,83,136,53,1,-95,49,75,208,224,33,7,254,216,0,224,54,4,161,110,135,133,0,52,158,-80,224,122,0,78,153,0,58,96,141,96,117,1,95,51,114,202,1,52,56,-97,236,188,74,5,94,102,108,117,115,104,65,238,64,22,129,203,227,57,2,-90,96,161,221,224,224,0,207,147,239,235,3,117,173,0,83,128,114,64,3,-224,131,4,224,13,6,227,46,7,64,149,64,157,91,190,1,95,52,91,40,-138,118,163,50,64,22,96,199,130,157,135,87,0,58,96,22,207,12,0,90,-132,201,96,51,134,207,0,58,96,60,128,246,0,52,75,143,107,71,96,29,-64,244,4,99,108,111,115,101,64,244,187,150,0,85,165,38,79,214,2,52,-55,53,238,14,0,0,58,96,156,10,10,65,32,116,111,70,117,110,80,116,-114,64,50,129,197,73,12,0,90,68,133,100,61,0,58,97,41,111,79,1,-48,52,64,67,0,50,67,85,64,19,226,101,1,5,115,116,100,101,114,114,-66,105,0,58,97,184,69,193,1,79,46,128,21,64,87,172,42,160,64,97,-12,67,114,224,64,4,1,105,110,160,63,166,1,96,63,1,105,110,64,62,-239,207,1,131,40,65,0,136,247,97,89,224,9,1,128,30,72,252,135,34,-176,31,112,106,100,34,111,230,130,98,0,58,96,6,129,118,0,58,98,254,-239,139,0,227,238,3,84,193,64,86,227,26,3,221,228,230,10,7,64,124,-83,14,96,36,0,52,117,193,1,95,52,167,203,163,228,76,156,108,131,131,-184,233,2,3,0,52,89,88,64,6,209,229,99,153,177,229,0,80,164,165,-129,121,224,6,2,74,157,96,50,64,201,0,52,64,201,198,183,230,43,8,-143,88,102,157,226,166,5,98,27,76,21,166,152,224,55,6,135,230,192,192,-228,209,0,201,230,0,52,180,58,64,135,130,41,14,73,79,46,112,101,114,-102,111,114,109,73,79,32,94,38,162,146,64,31,130,27,2,102,112,102,97,-216,184,91,4,102,112,110,101,119,64,14,165,164,7,97,100,100,95,70,73,-76,69,64,18,129,250,96,18,5,117,116,102,56,32,58,97,86,168,4,225,-169,3,98,4,0,49,75,152,160,191,128,11,161,58,82,33,2,52,49,49,-126,2,94,127,65,192,101,232,224,26,10,0,57,198,189,224,27,8,72,74,-224,26,11,226,199,1,1,119,43,165,110,1,95,52,81,161,67,236,229,17,-1,130,135,1,95,51,117,205,225,74,3,194,12,226,97,8,0,58,98,126,-100,203,70,87,64,253,162,18,3,39,32,95,52,117,104,0,52,85,211,1,-58,52,183,3,76,183,0,52,117,122,64,8,1,53,48,102,107,160,12,0,-49,128,29,64,132,1,95,52,150,17,128,43,96,103,204,209,119,40,79,148,-1,95,52,119,93,96,41,74,63,1,52,54,64,126,207,255,243,78,3,0,-58,96,83,201,43,195,44,150,200,98,218,115,131,139,200,207,146,0,58,64,-143,130,220,160,27,84,224,0,55,209,133,141,251,224,70,0,69,5,96,206,-102,38,88,198,66,247,233,76,0,135,77,181,223,0,89,253,147,0,130,8,-96,50,160,117,171,19,96,245,100,81,3,52,55,32,58,97,71,128,13,64,-226,213,90,66,79,158,211,64,61,1,95,52,114,177,0,58,64,35,129,14,-96,57,198,246,194,121,227,54,3,84,237,225,254,16,231,87,6,85,50,231,-87,9,231,140,7,96,127,129,142,133,231,1,100,105,69,94,181,111,0,94,-66,34,160,17,237,217,1,1,89,32,236,104,4,121,18,176,2,249,210,1,-131,244,96,149,65,138,1,95,52,83,180,129,127,118,153,193,63,64,127,239,-192,2,110,5,96,43,97,62,0,51,67,158,181,59,12,94,71,69,84,84,-73,77,69,77,73,76,76,73,64,22,129,99,139,204,96,2,70,150,0,90,-112,6,128,0,1,58,52,181,15,194,92,86,204,128,247,0,58,122,17,160,-208,193,97,0,95,112,239,228,206,0,193,119,73,8,74,76,133,117,130,2,-165,213,231,230,1,164,229,231,65,3,129,146,171,55,82,249,233,138,1,228,-100,3,244,21,2,224,78,1,224,71,5,229,34,3,96,187,130,36,252,210,-8,5,104,101,97,100,58,32,114,54,3,32,108,105,115,138,197,107,34,179,-120,6,65,46,119,114,105,116,101,65,61,241,140,0,225,63,1,64,2,198,-215,1,58,52,179,141,145,174,225,98,1,225,94,0,1,58,52,179,129,145,-226,224,68,2,192,30,161,197,68,255,2,75,32,85,165,95,224,2,43,193,-208,224,0,3,224,68,40,224,2,3,224,80,11,224,81,53,224,84,15,224,-85,56,96,2,118,47,224,0,12,135,67,224,1,31,246,96,9,5,70,108,-97,103,115,123,254,187,0,224,0,10,162,178,224,2,52,96,192,224,126,11,-7,118,101,114,98,111,115,101,61,173,111,86,225,1,95,50,71,20,248,99,-0,224,0,10,224,231,25,224,1,1,192,114,2,79,32,35,68,231,238,68,-0,224,0,9,224,231,56,224,228,16,4,114,117,110,73,116,224,226,4,0,-52,228,80,2,224,0,11,224,215,25,192,1,224,223,32,224,222,50,100,234,-66,129,224,112,3,224,222,1,5,109,104,115,100,105,114,160,223,144,23,152,-169,224,223,16,224,212,23,192,1,224,220,31,224,219,44,64,213,219,34,224,-221,18,4,112,97,116,104,115,224,220,34,224,209,21,192,1,224,217,30,224,-216,48,224,208,18,4,111,117,116,112,117,194,142,224,209,26,224,202,23,64,-1,224,206,29,224,205,45,227,85,15,6,108,111,97,100,105,110,103,227,87,-32,224,197,62,224,196,41,224,193,16,4,115,112,101,101,100,224,191,31,224,-188,59,224,187,38,224,184,16,7,114,101,97,100,67,97,99,104,229,183,5,-224,188,17,224,185,56,224,184,35,224,181,16,104,250,224,182,34,224,179,53,-224,178,32,224,175,16,6,117,115,101,84,105,99,107,196,124,224,173,21,224,-170,50,224,169,29,224,166,16,4,100,111,67,80,80,224,163,27,224,160,47,-224,159,20,229,197,30,5,99,112,112,65,114,103,229,199,27,224,163,44,224,-162,17,224,159,31,224,157,29,224,154,41,225,60,21,225,211,15,6,99,111,-109,112,114,101,115,226,122,25,224,142,38,224,141,8,225,30,2,125,254,225,-36,20,6,98,117,105,108,100,80,107,197,242,225,39,16,224,146,35,224,145,-5,251,27,3,224,140,22,77,95,224,139,25,224,134,29,224,132,2,238,13,-2,232,147,18,5,107,103,80,97,116,104,224,123,20,224,117,23,224,115,3,-226,6,15,6,105,110,115,116,97,108,108,224,230,1,226,8,11,224,102,20,-96,101,236,193,0,224,205,13,4,116,97,114,103,101,232,144,18,224,92,14,-224,74,11,3,100,117,109,112,108,209,224,175,4,1,49,50,81,109,0,50,-64,129,233,182,16,224,0,11,192,115,0,49,64,239,128,116,128,75,0,51,-188,166,96,12,224,17,3,3,64,95,52,50,85,142,224,18,3,96,39,0,-51,64,128,158,40,1,50,53,192,11,0,58,96,6,210,229,120,38,81,43,-115,199,188,22,79,226,224,225,4,6,78,111,116,104,105,110,103,161,44,245,-90,0,1,52,50,90,67,82,220,0,50,210,240,177,241,225,115,13,4,74,-117,115,116,32,225,113,0,161,111,160,49,160,176,160,171,96,166,145,106,120,-180,96,79,80,212,0,35,81,165,64,61,92,199,128,16,217,187,64,140,239,-249,3,121,169,147,145,3,60,32,64,35,64,91,224,18,6,64,103,225,0,-0,128,18,65,174,0,85,224,183,7,3,68,97,108,108,160,182,224,27,9,-8,99,111,109,98,105,110,97,116,111,120,55,128,218,224,82,4,80,154,224,-54,9,6,116,111,112,108,101,118,101,224,87,17,5,100,101,115,117,103,97,-224,84,0,244,124,1,128,85,64,245,224,104,6,65,249,224,104,10,7,121,-112,101,99,104,101,99,107,224,105,18,2,114,105,118,221,40,224,31,10,3,-112,97,114,115,224,30,0,226,88,1,147,81,130,88,64,11,0,58,96,6,-225,129,1,226,69,8,2,70,97,108,160,71,224,24,6,2,84,114,117,192,-95,192,92,65,154,192,92,162,14,216,15,3,95,49,54,53,162,110,1,95,-52,66,50,1,58,52,83,66,250,35,0,224,1,17,243,164,1,224,0,0,-0,58,96,65,96,87,0,85,244,82,1,155,150,0,50,183,214,224,167,0,-6,118,55,46,50,94,42,34,96,113,146,133,2,95,52,49,67,229,67,56,-2,58,52,50,212,64,1,49,56,67,192,0,48,93,139,2,35,49,50,96,-6,0,54,128,12,228,163,0,0,58,96,51,128,45,85,129,0,49,212,87,-0,58,64,15,128,10,67,97,1,49,53,100,127,0,54,160,56,2,95,50,-54,67,233,89,125,112,176,128,73,129,118,131,146,0,49,149,136,87,119,0,-58,64,61,128,25,246,129,0,131,187,181,8,246,231,10,229,160,1,213,44,-224,47,2,160,110,187,70,0,51,65,134,182,89,150,142,64,123,64,25,64,-20,2,95,52,48,87,214,253,197,5,9,94,42,79,112,116,105,111,110,115,-58,97,70,248,126,16,2,45,104,32,224,0,7,14,80,114,105,110,116,32,-117,115,97,103,101,94,42,45,63,224,31,22,4,45,104,101,108,112,224,31,-10,7,116,104,105,115,32,109,101,115,192,38,6,118,101,114,115,105,111,110,-224,38,9,1,101,32,160,26,64,37,6,110,117,109,101,114,105,99,224,45,-1,224,37,8,10,32,110,117,109,98,101,114,94,42,45,118,224,116,3,96,-0,6,73,110,99,114,101,97,115,96,43,31,98,111,115,105,116,121,32,40,-102,108,97,103,32,99,97,110,32,98,101,32,114,101,112,101,97,116,101,100,-41,94,42,45,0,113,224,61,8,1,68,101,224,61,33,0,108,224,61,8,-27,83,104,111,119,32,101,118,101,114,121,32,116,105,109,101,32,97,32,109,-111,100,117,108,101,32,105,115,32,78,202,5,101,100,94,42,45,115,224,54,-13,73,142,2,105,108,97,65,175,0,32,110,52,14,32,105,110,32,108,105,-110,101,115,47,115,94,42,45,114,224,53,8,16,82,117,110,32,100,105,114,-101,99,116,108,121,94,42,45,67,82,224,32,8,2,101,97,100,224,86,4,-0,99,77,23,64,42,0,87,224,42,7,0,87,118,49,224,43,12,224,42,-7,128,86,3,97,110,100,32,150,102,224,52,11,3,88,67,80,80,224,52,-6,8,117,110,32,99,112,112,104,115,32,64,222,9,111,117,114,99,101,32,-102,105,108,101,64,218,3,68,120,120,120,224,45,5,4,80,97,115,115,32,-128,23,1,116,111,128,55,3,94,42,45,73,224,39,14,96,23,224,39,2,-0,84,224,36,5,23,32,32,32,71,101,110,101,114,97,116,101,32,100,121,-110,97,109,105,99,32,102,117,110,99,96,177,98,193,9,32,115,116,97,116,-105,115,116,105,99,64,62,0,122,224,62,8,0,67,171,41,64,235,166,124,-6,32,99,111,100,101,32,103,160,87,97,171,66,159,1,46,99,96,213,7,-94,42,45,105,80,65,84,72,224,69,4,3,65,100,100,32,96,20,1,116,-111,194,22,6,115,101,97,114,99,104,32,82,126,3,94,42,45,111,124,189,-224,0,3,0,79,113,198,64,48,64,26,1,94,42,224,28,4,128,0,1,-73,102,96,27,4,32,101,110,100,115,64,133,0,46,64,163,6,32,112,114,-111,100,117,99,66,128,224,178,2,128,153,224,67,28,224,64,2,0,67,224,-55,17,7,79,116,104,101,114,119,105,115,194,4,0,101,97,3,224,113,1,-5,115,32,116,111,103,101,64,36,4,32,119,105,116,104,96,29,2,114,117,-110,99,26,5,115,121,115,116,101,109,64,218,224,106,1,15,114,101,103,117,-108,97,114,32,101,120,101,99,117,116,97,98,97,72,0,97,224,118,8,9,-67,108,101,97,114,32,112,97,99,107,97,187,225,67,4,0,97,225,118,20,-224,51,13,3,76,80,75,71,224,50,4,8,32,76,105,115,116,32,97,108,-108,161,167,3,115,32,111,102,224,59,0,6,80,75,71,94,42,45,80,224,-51,8,0,66,76,184,224,37,6,0,81,64,7,5,32,91,68,73,82,93,-160,37,0,73,139,109,224,39,6,5,116,84,65,82,71,69,226,183,3,6,-83,101,108,101,99,116,32,139,54,225,124,12,7,68,105,115,116,114,105,98,-117,66,125,128,38,21,115,58,32,100,101,102,97,117,108,116,44,32,101,109,-115,99,114,105,112,116,101,110,224,60,12,0,84,128,48,196,213,4,100,101,-102,105,110,162,197,128,25,4,46,99,111,110,102,66,147,9,112,116,99,32,-79,80,84,73,79,78,160,58,166,82,3,32,102,111,114,97,208,0,67,193,-252,69,142,0,100,75,156,4,45,80,65,83,83,192,105,7,68,101,98,117,-103,44,32,112,101,194,9,65,83,84,32,97,102,116,101,114,32,64,34,224,-153,12,16,80,111,115,115,105,98,108,101,32,112,97,115,115,101,115,58,32,-105,14,1,44,32,137,53,1,44,32,233,95,0,64,18,105,178,1,44,32,-201,220,0,44,226,123,2,0,44,65,191,134,246,103,69,136,92,0,75,70,-254,0,48,102,254,0,58,71,7,232,4,0,136,75,0,85,64,25,0,58,-71,37,232,137,5,0,85,68,37,14,58,32,109,104,115,32,91,45,104,92,-124,63,93,32,91,134,244,96,8,166,149,96,11,230,188,6,64,19,0,118,-64,4,0,113,64,4,0,108,64,4,0,115,64,4,0,114,64,4,6,67,-91,82,92,124,87,93,64,10,69,49,64,7,3,68,68,69,70,64,7,0,-73,66,178,64,8,0,84,64,4,0,122,64,4,100,81,64,8,100,39,64,-8,1,97,91,96,18,64,10,0,76,96,10,4,92,124,80,75,71,96,15,-66,159,64,7,226,129,2,64,14,162,104,96,69,225,217,1,64,14,225,185,-1,16,93,32,91,77,79,68,85,76,69,78,65,77,69,46,46,92,124,96,-110,105,134,72,99,104,139,0,57,72,71,72,164,2,58,52,48,172,7,2,-52,48,52,64,4,7,53,32,64,95,51,55,52,32,232,94,2,4,115,116,-100,111,117,124,167,0,58,96,51,5,10,65,32,73,79,46,128,21,1,32,-58,96,50,169,79,4,66,32,95,51,55,77,53,236,244,1,255,24,1,141,-106,160,38,253,44,2,93,144,64,30,128,13,0,58,64,135,192,79,91,174,-0,80,96,164,137,42,78,163,0,52,96,44,0,48,106,29,77,134,64,176,-1,52,48,64,12,0,58,96,98,64,157,64,149,130,28,6,65,46,97,108,-108,111,99,64,16,130,34,0,83,155,171,253,197,1,3,95,51,57,56,138,-202,122,210,66,73,1,64,58,65,32,128,132,2,95,51,54,224,194,0,96,-33,0,58,96,47,96,140,113,25,0,67,74,19,0,83,96,84,127,239,0,-53,140,106,2,95,51,54,77,174,4,50,48,57,53,49,64,209,5,64,35,-53,53,50,57,234,34,1,1,51,55,94,114,1,51,55,138,70,79,79,1,-51,57,97,123,96,35,225,124,1,17,104,80,117,116,67,104,97,114,58,32,-115,117,114,114,111,103,97,116,171,251,1,95,50,64,135,0,58,96,147,126,-103,107,59,66,255,96,66,225,145,2,0,57,254,196,1,97,81,224,9,5,-110,203,1,51,57,65,86,1,49,57,65,162,75,57,1,95,51,74,182,192,-6,0,58,96,154,224,81,0,193,153,240,192,2,128,14,224,11,2,225,189,-2,65,212,96,95,130,121,2,50,32,58,96,145,106,249,0,56,64,17,0,-49,96,179,129,186,2,95,50,57,109,9,0,55,75,13,1,51,57,108,181,-2,51,48,55,160,38,64,144,192,50,64,11,0,57,192,11,0,58,96,6,-205,76,108,156,192,154,0,90,96,129,97,246,242,54,3,178,60,253,183,0,-129,20,64,174,139,223,64,20,253,215,2,144,164,2,51,56,56,128,144,235,-165,3,0,58,239,163,0,128,43,96,30,224,36,16,193,27,131,29,0,54,-66,121,0,83,162,57,2,51,53,57,140,183,224,72,28,128,162,192,185,242,-143,3,192,171,99,136,224,94,10,240,107,11,1,32,40,128,86,224,122,9,-77,79,237,136,1,224,118,1,206,124,161,164,110,124,128,11,0,58,96,6,-238,217,1,66,95,64,78,240,99,8,64,160,224,18,6,98,111,224,19,7,-97,139,224,19,6,67,55,239,208,6,78,20,1,64,85,224,212,2,10,105,-110,116,101,114,114,117,112,116,101,100,128,221,224,28,3,1,114,101,170,198,-5,118,97,110,105,115,104,192,34,224,35,4,72,233,164,250,240,168,9,78,-45,224,45,4,7,117,110,115,117,112,112,111,114,71,209,1,111,112,74,88,-2,105,111,110,224,120,9,8,104,97,114,100,119,97,114,101,32,103,234,194,-22,224,243,7,132,69,224,19,5,67,157,224,132,7,67,219,224,243,5,7,-97,112,112,114,111,112,114,105,75,47,71,109,224,129,9,14,105,110,118,97,-108,105,100,32,97,114,103,117,109,101,110,192,131,224,34,3,3,102,97,105,-108,225,18,0,224,115,7,65,228,224,44,3,11,112,114,111,116,111,99,111,-108,32,101,114,114,209,215,224,31,3,170,43,224,29,2,224,240,9,225,247,-10,225,246,10,225,245,10,225,244,7,2,117,110,115,76,12,2,102,105,101,-77,60,8,110,115,116,114,97,105,110,116,115,224,149,9,3,117,115,101,114,-224,147,4,224,210,4,4,101,114,109,105,115,110,171,3,100,101,110,105,225,-10,15,226,2,7,6,105,108,108,101,103,97,108,225,254,19,2,101,110,100,-74,142,75,148,225,251,14,225,230,10,225,229,7,226,188,0,5,101,120,104,-97,117,115,226,224,21,3,98,117,115,121,225,201,14,224,86,6,12,100,111,-101,115,32,110,111,116,32,101,120,105,115,162,22,224,31,3,1,97,108,92,-85,0,121,128,30,161,82,128,0,164,11,100,115,164,11,96,11,0,58,96,-6,196,11,2,95,50,57,96,37,65,179,200,43,70,249,1,56,48,181,81,-167,105,0,66,145,20,224,120,1,6,72,97,110,100,108,101,45,96,113,145,-207,1,51,56,145,207,224,110,1,64,84,0,58,96,6,228,122,4,228,234,-8,1,48,120,128,184,64,128,1,56,51,102,109,0,56,70,253,1,51,56,-100,217,1,95,51,103,193,224,210,1,64,103,192,99,64,11,0,58,96,6,-96,99,0,48,96,136,71,182,0,50,73,70,1,95,50,145,196,1,49,48,-64,22,101,138,0,50,64,211,224,11,0,96,79,160,11,70,187,160,11,72,-31,0,58,96,12,128,85,103,2,0,49,136,32,64,154,96,170,83,208,128,-42,64,43,135,143,2,95,52,55,70,170,114,83,64,181,3,95,49,53,50,-96,5,0,51,96,5,103,211,0,53,64,55,0,53,96,168,103,210,0,53,-96,120,160,70,135,149,102,35,3,51,56,49,32,101,254,2,49,53,55,65,-141,1,85,32,166,43,0,50,68,232,96,7,0,54,69,195,0,65,129,118,-4,95,51,50,52,32,133,154,64,12,1,56,50,96,194,135,215,0,83,73,-15,3,32,95,52,54,246,230,0,64,5,64,66,104,102,4,56,48,32,95,-55,64,149,2,49,55,52,160,9,72,203,1,35,54,67,77,128,43,129,158,-224,46,6,96,36,0,52,65,230,96,187,136,48,131,57,219,189,232,212,1,-128,23,1,67,39,192,24,64,8,201,173,0,95,64,225,128,223,224,241,41,-128,12,128,115,73,248,64,65,163,190,224,96,1,84,129,224,96,46,128,254,-0,85,64,5,128,192,169,171,192,13,96,225,64,210,224,222,8,96,20,232,-182,0,64,40,106,150,64,27,128,33,224,152,5,67,121,66,58,224,162,47,-3,95,51,52,51,227,86,2,0,78,141,56,23,46,115,104,111,119,73,110,-116,65,116,66,97,115,101,58,32,110,101,103,97,116,105,118,101,230,108,7,-96,207,224,2,3,137,134,192,206,64,5,234,81,2,160,168,161,219,89,12,-67,111,224,46,33,0,50,103,59,160,48,224,227,22,224,237,3,224,225,27,-231,246,3,1,98,97,247,250,0,128,139,0,89,161,185,226,163,3,194,153,-67,116,0,55,162,79,193,180,225,235,1,224,49,2,194,94,160,83,192,11,-226,106,8,224,70,4,74,18,192,49,74,237,160,124,193,40,128,60,97,70,-224,249,1,97,88,129,135,224,10,2,224,55,2,162,246,124,143,0,49,109,-55,107,51,128,65,99,165,224,92,2,97,116,224,92,1,99,180,171,165,1,-51,55,76,6,69,246,96,13,64,12,70,11,96,12,0,48,79,229,1,51,-51,68,177,0,48,225,126,3,0,83,104,69,4,46,73,79,46,69,199,180,-224,28,1,5,73,79,69,120,99,101,112,218,97,127,97,15,0,58,108,70,-7,10,65,32,94,112,117,116,98,64,99,165,184,4,51,55,51,32,79,64,-6,0,52,88,103,1,95,51,64,184,192,49,0,54,96,34,1,75,50,64,-2,64,15,133,105,2,75,32,75,89,58,96,49,109,8,0,83,225,157,0,-76,96,129,102,108,106,162,131,0,39,238,250,2,1,51,54,130,125,216,45,-96,29,238,129,1,129,176,3,95,51,54,52,65,51,96,17,64,13,65,0,-0,54,107,195,226,135,6,3,66,97,100,32,135,16,82,223,232,69,0,97,-84,161,103,0,55,175,47,132,164,0,90,160,4,130,121,224,151,0,188,22,-1,51,55,67,207,174,148,102,68,239,155,1,96,75,173,153,1,55,57,65,-65,129,192,3,102,112,50,112,64,13,217,194,0,56,130,207,96,97,224,5,-0,70,87,104,106,64,1,70,209,74,212,2,95,49,51,64,165,224,6,12,-224,42,2,64,15,128,48,224,42,30,160,28,224,49,10,224,42,15,224,49,-10,224,42,22,224,49,3,77,28,225,161,0,0,58,96,6,218,84,1,51,-54,168,50,112,45,0,54,130,130,168,137,0,54,135,241,64,20,0,58,96,-39,98,142,1,54,53,90,81,225,29,0,0,58,96,38,160,78,68,65,132,-226,78,156,131,214,0,58,64,49,128,32,0,82,137,65,251,134,0,66,69,-64,25,68,18,123,192,0,58,96,27,98,12,0,95,72,67,69,189,0,58,-98,145,1,10,65,120,6,0,58,112,169,224,109,2,227,228,2,0,80,133,-108,0,49,128,92,238,107,5,128,138,90,250,102,15,98,252,0,58,81,45,-194,18,2,95,51,53,111,197,97,39,78,124,1,64,58,96,6,10,10,65,-32,115,101,113,117,97,108,32,58,96,33,97,2,72,201,66,116,1,95,51,-96,57,1,52,57,226,136,4,3,95,51,53,54,227,1,2,5,77,72,83,-68,73,82,98,248,1,58,51,70,184,178,27,194,217,96,179,113,77,0,53,-98,219,136,143,175,5,97,196,0,51,73,34,101,1,92,32,0,48,240,252,-0,1,95,51,73,47,97,229,192,143,110,146,64,103,129,147,210,131,0,51,-73,94,178,127,0,51,64,188,125,213,64,39,129,154,86,33,6,67,83,116,-114,105,110,103,64,231,176,255,1,57,55,103,62,0,58,96,127,227,58,0,-98,54,96,158,105,204,202,131,224,6,0,129,65,64,159,0,58,96,6,7,-10,65,32,116,111,73,110,116,64,88,129,187,6,94,103,101,116,101,110,118,-64,16,239,123,0,128,192,253,15,2,0,58,97,86,114,44,0,58,65,102,-129,244,1,95,51,64,31,65,196,0,58,65,133,96,227,64,31,128,238,193,-83,0,95,94,52,225,99,6,194,78,97,71,193,171,2,95,51,52,161,48,-0,52,129,8,75,96,228,191,4,12,116,97,105,108,58,32,101,109,112,116,-121,32,108,204,103,0,65,96,126,197,93,146,25,67,17,64,79,99,18,0,-52,129,48,0,73,64,154,242,43,5,0,51,66,43,1,51,52,242,43,2,-160,56,108,39,192,11,74,246,96,11,0,58,96,6,129,34,236,146,0,128,-61,236,116,5,110,27,177,111,172,0,96,38,0,58,96,6,230,171,20,6,-67,111,110,116,114,111,108,230,169,11,96,18,3,67,97,108,108,230,167,3,-64,194,107,56,163,91,198,83,64,7,168,47,233,216,0,1,95,51,64,197,-132,105,0,51,66,115,104,241,135,172,158,240,1,51,51,169,28,131,180,0,-58,64,160,64,94,0,85,166,211,64,30,96,109,0,85,225,154,7,4,109,-100,53,67,111,87,130,0,101,161,160,205,42,69,20,67,227,0,90,96,118,-0,50,107,95,1,95,56,99,59,67,47,0,89,100,43,137,86,1,67,39,-100,69,228,42,1,196,183,255,22,2,160,189,140,219,136,244,2,95,51,51,-64,73,99,94,171,241,1,64,95,72,47,2,95,51,50,103,5,198,143,64,-243,66,241,9,109,100,53,65,114,114,97,121,32,58,96,57,130,55,194,173,-0,55,192,154,2,95,51,51,100,158,102,139,231,116,2,231,8,3,3,95,-51,51,50,224,46,5,163,146,224,46,0,0,95,109,249,226,230,5,0,51,-167,34,0,58,96,199,162,154,64,20,132,36,150,23,139,126,0,67,108,114,-173,12,128,142,233,235,0,128,106,225,52,3,192,25,233,238,1,135,70,237,-80,1,107,173,141,20,235,144,2,229,159,6,170,64,160,69,231,245,1,64,-186,136,101,224,44,1,96,95,0,66,133,236,205,148,144,30,234,9,4,232,-27,4,224,43,10,1,95,49,68,64,229,61,3,128,16,0,58,65,96,226,-129,0,0,90,134,152,64,21,195,136,99,181,0,50,70,45,193,251,129,245,-113,221,0,95,72,116,0,58,97,152,1,10,65,110,115,0,58,96,28,128,-57,66,239,69,122,0,95,84,116,1,95,51,71,116,175,129,64,79,207,129,-192,11,67,235,192,11,68,17,128,11,65,68,1,64,58,96,12,5,10,65,-32,114,101,109,64,97,239,228,0,100,101,96,147,97,124,239,140,0,96,53,-64,54,130,144,102,116,128,131,174,39,0,58,96,39,96,26,98,126,162,10,-69,132,97,178,241,247,2,0,95,70,93,165,75,98,102,96,180,0,50,227,-154,2,31,92,34,108,105,98,47,68,97,116,97,47,73,110,116,101,103,101,-114,95,84,121,112,101,46,104,115,92,34,44,51,57,58,0,49,236,119,0,-69,19,97,163,64,169,64,168,1,52,51,226,34,1,96,30,0,50,89,12,-70,94,130,15,0,49,90,14,96,19,193,192,242,39,0,107,203,175,75,204,-141,109,96,0,56,160,174,234,213,0,96,69,128,13,0,79,64,209,0,79,-246,51,0,131,251,64,29,224,21,3,1,95,50,121,180,1,95,50,121,248,-0,58,97,76,89,176,65,122,131,68,198,6,0,50,128,172,75,26,0,58,-65,19,195,107,64,16,230,6,2,81,26,1,95,51,100,142,166,6,160,56,-102,6,192,11,97,244,133,197,64,6,128,102,82,81,110,24,108,198,0,51,-118,92,0,58,64,43,128,31,184,77,1,95,51,112,238,99,172,0,80,128,-47,64,203,160,47,224,15,8,64,65,229,119,0,108,60,64,23,186,56,132,-142,136,145,149,235,101,216,109,48,160,68,103,100,224,21,1,160,154,169,14,-104,148,97,86,74,167,0,51,118,139,0,58,96,159,102,151,2,55,32,58,-96,19,108,185,0,58,96,45,161,52,64,64,253,41,0,96,90,200,133,236,-43,6,224,14,5,192,170,228,105,0,200,149,96,188,0,58,96,6,201,246,-2,50,56,49,64,93,160,50,1,48,57,200,213,65,236,192,26,1,56,52,-224,26,6,0,58,96,91,97,110,0,89,236,169,0,113,236,101,30,172,75,-204,69,0,75,69,175,139,178,206,160,130,133,0,85,224,23,2,197,89,234,-175,5,133,13,0,49,133,189,139,164,224,8,4,64,214,64,142,190,68,229,-168,3,192,9,128,44,236,58,4,0,58,96,54,136,19,68,159,189,85,73,-104,189,50,244,145,0,185,14,227,217,1,11,110,111,32,109,97,116,99,104,-32,97,116,32,131,196,153,47,96,104,68,176,130,211,136,129,96,11,0,58,-96,6,232,129,29,207,22,0,46,68,53,2,114,110,97,104,119,224,39,1,-2,80,97,116,64,22,0,77,64,128,2,70,97,105,232,149,4,189,137,141,-206,132,191,1,95,49,113,73,164,164,135,20,163,64,2,95,49,50,117,107,-129,125,99,244,73,79,137,85,234,133,2,64,0,72,152,98,128,189,216,161,-28,250,172,1,0,49,69,237,0,35,73,22,66,229,0,54,64,16,1,49,-32,128,15,99,20,154,163,100,177,224,24,1,161,56,224,220,1,4,39,92,-92,39,39,165,23,193,75,128,190,224,82,1,102,138,136,191,224,17,3,211,-202,229,161,1,224,151,1,0,64,160,35,168,37,224,139,0,98,138,246,112,-9,3,92,92,92,34,242,245,0,97,87,202,191,1,50,49,66,31,131,58,-230,12,0,100,24,66,158,1,95,49,74,103,224,14,1,0,50,67,235,64,-136,67,60,160,136,108,180,97,18,64,39,97,111,162,168,173,201,242,70,2,-156,220,161,150,1,79,32,96,59,129,144,160,200,96,62,193,205,0,50,94,-88,190,101,143,24,207,22,0,90,64,28,97,112,64,61,224,231,3,0,38,-192,230,131,101,178,52,206,80,195,75,178,153,113,8,225,89,7,224,60,1,-104,116,192,223,128,77,160,223,96,224,112,87,135,82,195,206,225,163,6,141,-183,224,180,1,127,100,226,92,2,113,45,239,212,6,224,210,18,2,64,64,-79,95,100,1,48,32,224,30,2,2,78,85,76,96,30,96,25,0,49,224,-25,3,2,83,79,72,224,25,1,0,50,224,25,4,1,84,88,224,25,1,-0,51,224,25,3,0,69,224,25,3,0,52,224,25,4,1,79,84,224,25,-1,0,53,224,25,4,1,78,81,224,25,1,0,54,224,25,3,2,65,67,-75,224,25,1,0,55,110,7,65,209,97,240,96,19,0,56,128,19,0,56,-224,19,3,0,57,96,19,0,49,70,71,224,20,1,69,152,96,21,0,48,-224,21,4,0,49,160,21,224,64,4,68,29,64,21,66,226,224,21,2,142,-135,0,49,65,146,224,108,2,128,43,226,134,0,128,42,224,248,4,1,83,-79,225,95,2,224,248,4,1,83,73,224,25,2,224,248,4,2,68,76,69,-224,26,2,0,55,224,26,4,0,67,137,37,128,26,0,56,224,26,5,0,-50,224,26,2,0,57,224,26,5,0,51,225,203,2,226,0,4,2,68,67,-52,224,26,2,226,1,4,1,78,65,225,127,2,72,181,224,187,2,1,89,-78,224,26,2,226,3,6,0,66,224,26,2,225,11,4,1,67,65,224,53,-3,226,5,5,0,77,224,25,2,225,12,4,1,83,85,224,79,3,225,12,-4,2,69,83,67,224,26,2,225,12,4,1,70,83,224,25,2,225,11,4,-0,71,224,25,2,67,69,224,25,1,0,82,224,25,3,225,9,4,0,85,-224,25,2,103,57,225,63,2,0,69,131,64,198,23,224,0,21,110,206,140,-140,0,58,101,112,153,255,165,30,77,18,0,49,70,8,154,35,173,115,96,-17,1,64,35,82,36,1,64,58,100,182,101,121,3,56,57,32,58,100,218,-240,7,5,228,244,0,69,211,103,112,128,17,0,58,96,6,250,218,11,139,-178,2,95,50,57,108,31,0,49,173,14,137,155,68,192,81,4,64,80,103,-182,96,87,96,69,254,215,2,3,95,49,54,53,205,215,192,64,187,5,229,-151,6,96,69,109,142,205,46,251,46,0,235,89,2,224,10,1,96,50,146,-165,251,106,2,1,56,57,219,69,185,24,224,74,6,0,58,96,102,5,10,-65,32,99,104,114,65,36,136,4,79,248,192,138,157,130,96,41,135,190,65,-21,134,173,2,95,50,57,64,32,225,149,11,101,104,225,149,5,72,49,128,-113,135,17,64,144,77,198,255,16,7,64,37,224,19,7,129,227,172,166,160,-19,64,84,234,1,1,234,11,2,224,40,7,65,211,224,40,12,224,102,8,-70,68,224,61,7,65,203,224,102,13,107,217,3,67,32,61,61,64,38,112,-38,134,88,224,97,3,0,58,97,34,106,233,72,239,97,42,82,145,226,86,-8,65,233,1,52,50,239,242,0,1,52,52,65,126,136,232,65,137,0,51,-79,209,89,53,128,13,80,170,158,171,0,50,81,151,192,41,2,64,95,50,-114,36,97,247,64,123,131,54,4,111,114,100,32,58,96,18,9,10,65,32,-98,115,105,110,100,101,120,64,16,163,17,2,50,51,49,96,156,231,49,0,-117,71,2,95,50,54,67,40,89,182,96,157,93,153,0,49,66,210,176,144,-96,11,253,38,4,242,94,6,19,87,111,114,100,56,46,115,117,99,99,58,-32,111,118,101,114,102,108,111,119,99,255,245,162,4,192,108,0,55,96,210,-192,108,98,193,224,109,42,3,112,114,101,100,91,164,0,100,224,110,3,105,-254,126,93,111,3,64,14,87,37,1,95,50,107,94,66,134,1,54,54,225,-79,1,224,245,2,66,28,143,16,131,137,65,159,0,49,79,187,200,149,2,-95,50,54,86,12,160,57,224,194,2,224,31,12,224,89,2,237,28,1,160,-123,96,84,224,20,2,96,54,163,47,64,62,225,167,6,79,145,192,80,98,-105,193,160,90,209,209,159,225,32,9,225,141,19,128,82,128,195,192,82,129,-134,224,83,22,225,115,13,112,139,65,102,65,95,0,56,97,110,224,174,2,-225,89,7,119,135,193,51,0,56,65,170,224,137,3,224,25,1,100,211,224,-71,2,64,19,0,51,192,72,131,203,67,186,224,83,1,128,77,160,58,65,-75,0,54,198,72,140,232,171,244,160,133,128,155,196,0,106,195,120,243,179,-18,235,107,1,202,220,96,66,171,144,253,192,0,238,198,0,1,95,49,88,-9,66,113,96,6,128,28,192,76,203,49,65,122,134,69,241,71,5,0,32,-160,53,160,252,140,162,224,165,0,224,42,1,211,117,96,225,224,218,17,140,-231,224,218,67,97,44,224,218,70,133,128,224,218,9,238,155,0,178,160,71,-176,64,44,128,179,224,125,5,160,192,96,202,160,180,162,222,64,91,148,247,-64,150,164,72,211,5,192,9,0,58,98,81,99,111,1,55,48,108,2,0,-95,160,7,64,26,134,186,79,133,128,42,210,149,0,55,101,29,181,157,128,-9,0,50,98,128,0,58,99,241,195,190,2,95,50,51,72,120,101,200,2,-95,50,51,72,114,96,11,239,11,1,89,226,166,16,224,18,4,109,235,224,-18,5,130,7,224,18,4,114,70,224,18,5,129,82,224,18,4,132,246,224,-18,4,65,57,224,18,6,65,21,224,18,6,135,134,224,18,4,224,189,10,-104,90,224,19,7,224,191,10,112,92,224,19,7,224,193,10,109,219,224,19,-7,224,195,10,115,176,224,19,7,224,197,10,104,206,224,19,7,224,199,10,-116,57,224,19,7,225,135,11,224,199,10,187,53,224,19,5,224,199,10,104,-94,224,19,7,224,199,10,104,196,224,19,7,169,21,224,19,4,98,89,251,-130,6,18,111,69,110,117,109,58,32,111,117,116,32,111,102,32,114,97,110,-103,101,165,165,136,46,64,7,99,3,1,95,50,90,60,96,7,104,80,1,-95,50,123,3,64,7,133,254,0,50,91,141,96,7,147,81,0,50,155,254,-1,95,50,106,249,64,7,160,79,184,26,0,50,138,123,1,95,50,87,6,-64,7,103,237,64,7,160,79,164,69,0,50,125,161,64,7,160,79,189,152,-0,50,135,109,1,95,50,107,210,64,7,160,79,126,97,70,11,160,79,0,-54,160,79,94,234,96,7,160,79,132,104,1,95,50,100,135,0,85,241,119,-1,137,220,98,69,234,4,7,64,65,234,147,53,128,7,96,8,96,174,234,-145,14,128,7,96,8,96,229,234,143,35,128,7,96,8,165,74,224,38,6,-64,255,64,29,97,7,64,8,170,144,224,99,7,99,12,224,119,7,130,248,-224,80,5,138,217,128,7,96,8,168,232,224,38,5,99,71,0,85,143,84,-128,8,129,1,66,187,224,39,4,130,227,224,59,5,161,22,151,81,64,8,-129,22,64,9,166,70,224,169,7,64,41,224,208,7,108,146,224,19,6,131,-141,224,109,5,65,55,64,90,97,63,64,8,97,42,224,38,8,65,55,64,-29,97,63,64,8,170,127,224,98,6,132,63,224,58,5,65,33,64,49,97,-41,0,85,113,112,224,96,9,65,31,0,85,113,160,96,7,166,139,224,94,-7,64,155,224,18,6,132,57,224,75,4,65,47,0,85,114,26,96,7,129,-52,224,35,6,160,246,192,245,128,244,225,158,8,226,0,10,161,255,193,6,-193,154,130,6,135,214,138,204,198,221,99,52,0,39,233,232,1,104,116,236,-229,3,140,199,96,46,224,12,5,235,61,4,160,78,136,73,224,25,11,196,-195,0,55,224,19,2,94,18,128,11,0,58,96,6,137,24,84,152,0,39,-88,57,77,68,138,240,180,136,137,53,148,173,96,11,184,71,192,105,197,38,-64,254,224,6,5,0,58,64,107,224,95,5,224,92,6,224,79,6,97,34,-224,79,10,0,58,64,192,235,232,7,69,55,170,241,93,24,97,101,75,232,-253,135,3,229,237,5,2,73,110,116,235,230,19,128,80,107,92,224,80,0,-253,217,8,224,81,9,235,228,12,1,73,32,64,2,65,247,0,55,235,224,-1,128,85,225,247,3,188,240,225,187,0,0,55,235,223,1,128,44,224,25,-1,235,223,1,160,25,128,90,224,77,1,130,145,224,82,0,128,76,160,57,-65,65,0,54,235,3,17,134,98,235,2,66,166,163,135,10,235,1,16,135,-49,64,10,235,1,4,128,53,235,1,7,96,163,235,0,10,64,222,224,215,-16,96,134,224,215,67,135,59,224,215,68,132,172,224,215,9,235,216,10,64,-43,235,215,33,136,88,203,215,64,148,235,215,16,66,73,157,160,96,13,217,-151,75,186,195,82,78,177,1,95,50,83,113,203,243,132,240,96,83,224,28,-15,0,58,98,172,156,0,64,77,128,100,0,65,64,100,0,54,222,85,160,-205,88,160,128,150,252,171,0,192,222,64,45,132,72,6,85,32,75,50,32,-75,52,126,4,64,21,132,21,192,21,97,64,0,58,68,70,128,114,64,136,-91,93,101,32,128,17,0,49,192,17,129,93,152,148,128,17,129,2,152,140,-128,17,129,6,152,132,128,17,192,204,70,63,128,17,128,211,152,116,96,17,-73,126,128,17,0,55,192,17,128,187,152,106,128,17,221,21,70,247,128,17,-224,179,0,71,18,128,18,224,180,1,192,181,74,2,160,18,192,182,66,145,-160,18,192,183,74,56,160,18,192,184,74,83,160,18,192,185,74,110,160,18,-192,186,66,48,160,18,192,187,74,164,160,18,192,188,65,164,160,18,192,189,-74,218,128,18,72,250,128,18,224,189,0,73,22,128,18,225,115,1,192,189,-67,18,160,18,192,189,66,167,160,18,192,189,75,97,160,18,192,189,75,124,-160,18,192,189,75,151,160,18,192,189,75,178,160,18,192,189,75,205,160,18,-192,189,71,36,183,65,83,73,102,154,156,191,1,50,51,165,253,165,252,198,-141,81,193,180,184,0,64,102,34,64,19,128,221,224,69,9,230,150,10,224,-71,0,227,118,0,0,51,66,191,96,18,128,254,67,17,224,1,1,67,217,-96,0,224,20,11,224,17,8,224,14,5,224,11,2,192,8,93,0,131,86,-88,160,195,64,0,90,128,130,64,21,207,150,77,59,0,50,65,58,0,58,-117,70,15,10,65,32,34,94,95,94,44,94,41,94,66,94,57,94,59,96,-5,18,53,94,54,94,57,94,58,94,57,94,52,94,57,94,57,94,73,94,-38,96,7,0,66,96,19,30,57,94,89,94,32,94,53,94,57,94,54,94,-60,94,51,94,60,94,89,94,33,94,53,94,58,94,54,94,58,124,32,96,-75,22,57,94,67,94,59,94,61,94,57,94,60,94,61,94,50,94,55,94,-58,94,45,94,61,96,13,8,58,94,40,94,40,94,60,94,33,96,75,31,-60,94,40,94,50,94,56,94,66,94,40,94,57,94,86,94,32,94,58,94,-70,94,32,94,87,94,33,94,58,94,71,94,2,33,94,32,224,3,102,224,-33,59,224,3,53,224,9,1,0,66,224,15,6,64,5,0,66,96,5,2,-33,94,67,224,19,6,224,43,3,224,79,13,224,69,9,224,15,1,2,33,-94,50,160,67,0,67,96,9,0,34,96,25,224,5,3,224,3,21,224,33,-25,192,37,192,77,224,129,3,224,3,99,0,70,96,5,128,11,64,5,128,-23,193,77,224,3,2,1,124,68,97,21,28,90,94,33,94,81,94,49,94,-67,94,60,94,75,94,49,94,77,94,60,94,68,94,49,94,70,94,60,94,-49,96,3,6,80,94,60,124,111,94,35,224,57,0,64,21,64,7,4,48,-94,48,94,49,97,83,8,57,94,32,94,67,94,48,94,60,96,25,67,73,-2,32,94,48,160,3,64,41,0,80,96,11,3,72,94,32,124,193,29,225,-211,3,224,3,35,64,179,64,9,0,58,160,15,96,75,5,124,50,94,32,-124,47,224,75,40,224,3,13,8,61,94,68,94,35,94,37,94,37,224,73,-56,224,3,37,224,29,19,224,67,31,224,3,145,1,48,124,65,79,130,49,-4,69,94,57,124,40,98,53,0,52,96,17,18,61,94,61,94,59,94,48,-124,44,94,35,94,52,94,35,94,57,94,35,224,5,4,6,71,94,48,94,-90,94,50,98,97,67,189,69,87,6,74,94,48,94,69,94,45,229,179,0,-0,59,96,5,64,73,0,74,96,53,64,25,14,57,94,95,94,50,94,49,-94,73,94,50,94,84,94,35,101,231,10,67,94,57,94,50,94,50,94,35,-124,98,96,73,4,50,94,70,94,35,101,187,6,69,94,35,94,49,94,49,-96,117,4,61,94,67,94,35,96,39,64,51,2,66,94,50,96,89,8,50,-94,77,94,57,94,48,94,45,64,63,1,94,93,99,59,0,35,64,193,3,-124,88,94,50,96,119,64,33,0,48,64,51,5,124,32,94,50,94,72,160,-81,0,61,96,139,0,49,96,235,6,35,94,59,94,59,94,85,96,205,64,-29,128,35,0,66,96,5,66,119,64,35,0,78,96,101,64,83,64,23,64,-17,64,15,16,74,94,50,94,68,94,48,94,87,94,50,94,60,94,69,94,-50,96,137,0,45,96,19,3,72,94,35,124,70,103,2,49,94,87,96,205,-6,95,94,35,94,36,124,53,96,167,0,36,96,151,8,66,94,36,94,71,-94,35,94,67,96,15,2,36,94,36,160,249,65,27,129,103,199,7,2,49,-94,78,160,55,4,36,94,48,94,71,96,103,0,48,97,11,64,7,64,185,-2,48,94,70,96,5,64,85,129,145,128,217,128,101,64,215,64,15,128,63,-128,7,64,27,65,197,64,29,192,75,65,85,64,121,64,35,64,121,64,21,-65,27,2,69,94,40,98,15,65,157,128,29,64,37,64,75,64,243,224,63,-1,224,139,7,224,5,7,64,55,64,101,64,125,64,247,128,71,64,23,65,-85,64,185,2,35,94,70,224,191,0,65,13,128,135,64,37,128,155,65,17,-224,125,1,0,72,224,181,0,224,121,11,0,68,225,5,6,129,203,192,59,-129,3,129,71,0,78,160,51,224,251,3,66,191,64,127,0,50,98,133,64,-55,225,125,27,224,119,7,129,217,225,127,13,64,93,128,141,225,129,17,66,-225,65,125,128,245,64,33,65,113,65,41,128,245,65,41,64,13,193,101,128,-9,192,17,192,39,64,7,0,75,161,169,128,123,64,5,128,29,64,145,129,-145,128,213,0,69,96,35,163,51,105,35,0,69,97,251,69,131,64,131,128,-43,129,5,128,131,0,86,96,5,0,79,225,109,4,130,213,129,215,64,165,-224,237,1,192,53,128,173,225,119,9,64,39,2,57,94,70,98,113,194,243,-0,57,224,111,10,67,37,225,107,9,0,68,96,117,193,171,128,235,128,123,-64,11,64,219,226,143,1,224,117,3,128,17,2,36,94,75,225,147,0,0,-36,226,93,3,99,201,64,23,227,79,3,225,59,3,68,141,65,93,64,45,-0,36,96,189,225,201,7,0,72,96,209,132,35,192,159,0,81,161,155,68,-63,194,205,128,207,66,79,131,15,128,85,65,173,130,133,66,129,128,201,128,-183,128,217,0,57,64,185,1,124,47,96,115,64,201,68,71,64,57,67,187,-68,131,68,103,235,85,0,0,124,64,123,226,49,1,129,67,128,131,193,89,-128,69,69,9,128,143,128,35,69,47,64,89,224,123,1,66,127,0,95,96,-55,2,66,94,61,101,37,75,129,64,11,64,251,66,57,64,41,0,73,96,-251,69,195,128,3,75,237,64,3,64,185,97,217,0,124,64,103,64,175,0,-77,97,27,67,169,134,107,64,119,69,197,64,33,128,251,64,63,64,87,134,-163,0,68,107,247,64,115,96,213,1,124,42,97,127,129,161,65,37,133,107,-129,111,129,191,64,143,2,69,94,57,97,23,192,21,131,69,193,221,129,63,-65,113,134,17,0,76,226,135,0,128,211,129,239,0,36,163,31,64,13,2,-61,94,61,167,75,73,13,137,101,64,139,71,79,137,141,1,66,124,129,221,-197,153,196,47,224,17,0,98,97,224,13,1,70,171,224,45,18,102,15,2,-48,124,56,224,51,4,195,87,64,201,4,72,94,57,94,83,98,133,131,153,-0,73,98,123,2,48,124,85,167,241,0,69,170,43,4,52,94,68,124,107,-98,189,10,57,94,80,94,50,94,41,94,89,94,50,97,155,3,66,94,48,-124,70,223,71,39,2,66,94,39,97,167,67,71,130,179,65,15,4,72,94,-48,94,82,162,229,66,129,0,57,96,17,64,31,64,17,67,73,65,57,195,-181,160,19,1,124,51,224,49,0,66,73,66,203,129,91,65,229,135,147,142,-21,64,37,195,59,130,237,68,137,64,185,72,163,72,51,64,133,0,45,168,-67,64,219,0,34,66,233,1,124,52,160,167,66,57,3,35,94,35,124,75,-79,65,175,3,68,94,48,124,65,243,69,73,0,94,160,151,199,123,132,213,-229,29,1,65,227,128,29,66,101,65,67,199,139,72,97,195,15,4,74,94,-48,124,43,162,183,65,53,195,147,97,117,0,124,74,181,68,169,226,125,1,-64,55,66,167,64,161,128,245,131,75,130,163,131,11,128,123,0,73,160,45,-224,219,0,224,7,0,0,70,97,33,65,3,64,31,67,45,5,37,94,79,-94,35,124,131,139,72,97,0,46,162,173,67,67,197,17,192,93,64,187,192,-201,64,73,66,21,67,227,0,72,169,15,128,171,64,227,195,65,195,61,131,-29,99,61,96,243,128,91,198,13,128,31,128,99,64,135,0,57,99,207,65,-219,64,209,192,69,65,71,67,175,131,55,130,23,193,83,2,69,94,49,162,-65,138,155,65,173,0,42,162,171,76,149,0,71,102,3,129,179,2,57,94,-76,225,61,0,66,251,65,51,196,177,128,105,129,237,8,43,94,33,124,62,-94,49,94,76,77,31,0,124,76,147,4,36,94,49,124,63,237,53,2,224,-3,255,224,3,17,193,143,224,3,181,64,197,2,71,94,32,228,245,0,0,-69,162,89,81,235,64,23,192,7,224,31,11,207,51,192,3,192,43,0,77,-160,43,128,15,0,34,224,7,8,79,21,0,48,241,53,0,0,34,114,125,-2,66,94,60,102,13,224,23,3,64,19,0,67,160,75,192,21,66,231,0,-60,96,73,0,68,111,145,0,60,163,7,224,81,7,64,23,8,74,94,41,-94,68,94,45,94,69,179,57,6,55,94,56,94,53,94,55,224,7,0,67,-57,2,42,94,43,96,35,0,41,102,23,64,25,69,63,2,51,94,51,99,-245,0,58,101,239,0,74,179,127,4,51,94,73,94,57,160,83,68,119,2,-45,94,40,173,39,74,135,77,219,64,45,77,193,224,13,1,69,233,69,183,-70,183,0,59,107,77,67,161,2,67,94,37,99,245,4,37,94,75,94,35,-96,21,71,177,80,149,64,5,64,11,242,89,1,128,7,192,23,0,58,96,-247,71,229,64,15,192,3,64,245,64,51,145,55,67,249,64,49,64,17,65,-227,71,121,80,129,65,75,64,65,128,25,8,61,94,79,94,40,124,34,94,-39,160,51,0,39,104,137,137,171,64,47,0,68,96,43,0,58,96,147,128,-51,192,5,0,70,96,5,0,94,160,31,192,25,128,17,2,66,94,75,116,-41,0,61,232,201,0,0,83,160,39,64,53,4,53,94,54,124,80,96,15,-8,93,94,61,94,88,94,58,124,39,103,125,1,58,124,64,49,0,85,97,-179,10,61,94,84,94,48,124,59,94,40,124,77,96,19,4,40,94,65,124,-54,96,51,69,139,10,58,124,53,94,61,94,71,94,58,124,110,96,19,2,-65,124,119,224,107,2,224,3,11,4,93,94,40,124,43,105,15,129,145,0,-94,160,7,224,3,7,0,79,64,77,5,92,95,94,61,94,65,225,189,0,-224,3,30,1,124,62,224,47,2,0,95,160,11,6,66,94,65,94,58,124,-47,96,207,129,37,64,231,76,183,66,49,64,103,6,48,124,104,94,61,124,-47,242,13,2,193,243,227,163,3,243,11,1,64,5,67,135,79,165,243,175,-111,224,3,73,0,33,162,205,128,13,70,197,64,7,74,43,67,137,86,135,-2,57,124,37,163,223,64,21,100,15,1,124,55,168,203,71,27,77,145,0,-35,104,81,73,101,138,17,224,5,33,80,125,196,29,64,3,67,247,64,7,-128,5,68,21,132,61,64,5,128,23,196,73,226,7,5,71,191,67,251,64,-41,137,133,64,49,2,53,94,76,177,233,215,203,224,3,3,1,52,124,64,-205,0,89,98,11,2,88,94,61,106,25,6,65,124,85,94,61,94,89,106,-157,0,61,184,9,6,61,94,49,94,50,94,39,226,123,11,96,91,224,87,-8,96,5,64,27,2,72,94,39,232,175,0,0,52,117,41,128,139,0,39,-96,81,128,153,74,251,137,187,72,33,69,59,66,97,3,50,94,52,124,73,-187,74,77,64,13,136,119,75,91,137,233,132,43,79,127,0,61,82,185,1,-124,37,96,109,64,23,2,79,94,50,100,11,138,153,67,233,0,71,100,91,-2,78,94,40,98,247,2,73,94,40,99,7,64,15,2,66,124,63,78,205,-2,124,51,124,64,47,0,50,128,13,5,94,65,124,35,124,125,176,65,4,-49,94,72,124,118,141,243,100,7,4,72,94,48,124,39,233,23,2,68,113,-64,37,65,39,64,121,73,55,72,239,0,83,102,147,226,155,53,224,3,19,-73,87,69,193,73,181,66,65,0,49,224,73,48,179,199,171,131,0,39,173,-75,137,213,4,86,94,60,94,72,118,195,150,197,224,3,13,246,153,41,224,-3,69,79,69,224,17,3,224,35,13,224,195,3,88,213,64,9,224,185,35,-70,249,192,5,224,3,19,248,61,3,64,5,66,217,128,7,128,3,224,47,-5,0,84,104,63,129,189,66,71,2,49,94,33,100,25,211,87,139,71,68,-93,235,243,1,71,19,139,181,147,255,146,5,77,105,77,195,67,251,148,63,-1,36,124,67,57,0,79,160,55,64,19,204,99,76,177,0,81,171,159,66,-185,149,221,64,105,64,29,0,91,108,35,132,151,64,121,78,1,142,9,64,-65,0,92,242,191,0,236,213,3,236,151,5,76,125,68,121,69,33,64,81,-71,213,64,77,141,251,85,201,131,41,112,189,111,97,144,17,192,225,128,7,-67,207,129,5,77,33,64,23,65,75,64,55,141,85,131,113,77,117,144,229,-173,189,96,245,144,51,140,123,64,75,174,117,160,25,0,87,177,103,131,195,-79,77,224,121,1,64,17,129,137,64,19,78,149,146,27,224,7,5,229,235,-6,112,83,74,47,64,219,194,109,6,67,94,48,124,79,94,33,110,255,128,-211,224,5,1,0,57,96,9,192,207,65,143,2,50,124,87,101,143,0,50,-101,135,65,119,64,63,64,15,65,61,2,46,94,70,100,147,2,46,94,46,-192,7,1,94,71,160,9,2,47,124,49,96,9,4,47,94,66,124,109,128,-163,1,124,105,101,19,64,157,0,33,96,79,74,245,70,191,129,227,2,50,-94,58,176,3,146,63,128,3,224,5,0,112,121,4,80,94,60,94,79,65,-129,3,124,106,94,50,101,217,4,79,94,61,124,63,160,95,87,47,71,1,-69,125,148,195,94,47,69,125,83,213,222,55,64,215,64,17,134,149,74,215,-230,67,11,224,3,3,65,125,64,7,144,71,139,7,129,235,134,85,192,3,-139,31,0,52,105,43,66,91,152,211,138,61,64,161,0,65,161,157,87,247,-66,69,254,207,58,160,59,192,165,65,69,2,49,124,44,162,43,80,185,131,-145,226,43,9,140,35,128,31,87,181,0,58,126,251,64,9,65,63,0,67,-169,159,66,105,0,66,121,93,137,163,65,83,144,191,145,205,193,161,114,97,-112,99,0,50,66,47,1,124,122,184,235,64,221,66,49,0,44,178,93,4,-72,94,61,124,52,103,127,1,40,94,74,245,95,105,65,161,76,3,145,59,-2,61,124,46,96,47,68,77,4,65,94,65,94,48,195,219,98,117,76,23,-4,35,94,90,94,40,97,85,90,29,64,73,66,247,0,83,104,13,67,147,-0,39,103,151,0,37,96,129,67,99,0,48,177,135,144,103,64,55,64,37,-67,247,2,39,124,41,103,57,6,32,124,39,94,33,124,77,160,195,210,33,-73,117,64,187,0,35,101,63,135,97,0,71,164,207,132,117,0,74,109,125,-0,78,96,5,0,70,253,45,0,75,177,67,51,0,78,96,5,66,235,141,-135,64,195,64,59,66,249,2,66,124,54,163,175,71,207,65,101,64,147,68,-1,71,195,2,48,124,41,109,69,3,72,94,49,124,64,191,193,175,67,5,-81,79,129,117,65,45,128,23,150,227,69,97,0,40,96,11,65,173,86,85,-65,255,69,97,4,72,94,40,124,47,225,177,4,64,85,2,68,94,40,96,-125,141,169,64,63,65,215,64,25,2,57,124,63,170,79,65,45,65,163,64,-51,2,79,94,40,99,101,77,227,132,199,137,29,138,151,134,21,211,191,65,-179,130,97,147,23,69,55,0,40,99,155,74,61,64,7,64,33,64,89,197,-187,73,7,129,5,0,61,101,235,64,89,131,57,64,55,116,45,99,223,64,-169,64,15,201,159,64,243,64,215,64,133,64,11,84,81,154,21,118,229,65,-7,3,124,79,94,48,85,81,3,124,54,94,48,94,105,1,94,76,96,7,-70,211,102,173,162,23,134,141,243,67,3,64,209,69,183,85,7,146,143,92,-223,2,49,94,85,111,181,0,48,109,195,0,65,64,93,1,94,94,65,27,-1,124,41,96,147,64,185,157,23,129,53,97,19,64,123,96,99,64,237,74,-3,129,153,64,197,70,201,66,197,75,45,77,239,64,193,129,79,75,229,2,-48,94,84,96,209,0,40,105,189,203,209,134,83,84,27,0,78,164,219,65,-43,85,195,64,183,230,97,1,128,45,135,21,68,21,216,143,198,205,68,51,-0,45,97,43,134,85,68,151,156,185,219,77,65,11,2,66,94,35,97,35,-148,37,71,133,193,31,70,149,64,75,131,25,70,83,128,83,128,119,102,189,-120,103,64,119,84,59,135,147,136,15,64,135,134,113,138,159,64,53,133,89,-64,199,67,97,65,9,221,71,244,53,1,64,5,202,15,160,233,107,41,246,-247,7,132,147,69,17,101,243,168,21,64,73,64,193,66,47,192,223,199,101,-251,175,33,129,91,128,141,154,187,251,175,1,153,233,64,47,64,91,85,91,-128,53,192,31,84,137,194,77,64,229,154,155,192,119,132,185,64,9,64,71,-156,77,192,95,64,217,64,5,225,5,1,136,57,65,113,136,203,66,83,64,-155,2,92,94,48,98,29,192,237,64,49,129,63,131,167,213,89,192,57,137,-217,0,93,186,21,192,121,192,221,129,31,128,243,129,167,195,41,0,65,66,-161,97,89,194,89,64,169,224,51,5,0,86,97,235,98,143,102,27,192,97,-245,237,1,128,39,137,243,129,17,129,151,73,173,0,82,173,99,128,37,64,-47,192,153,161,215,224,45,0,0,83,106,37,2,48,94,90,161,75,224,49,-1,130,241,65,111,67,37,64,47,134,119,77,235,65,219,2,65,124,56,165,-89,226,167,1,99,29,1,124,99,102,101,4,32,94,95,94,33,96,55,68,-197,68,85,226,39,1,132,131,226,31,1,91,25,87,149,226,15,1,193,9,-66,1,137,211,64,121,67,31,87,31,64,185,160,77,0,124,67,5,225,71,-3,133,3,192,235,64,59,0,90,96,103,2,73,94,35,173,239,64,89,196,-187,65,197,65,151,234,183,1,67,183,2,45,94,50,183,1,225,99,1,65,-253,69,3,74,241,131,231,4,57,94,65,124,53,186,73,144,61,193,85,122,-137,0,124,128,185,152,129,225,127,1,130,69,128,43,0,82,230,69,0,0,-57,248,247,0,0,85,162,189,64,55,226,17,2,0,124,234,167,1,137,217,-66,241,64,85,64,63,198,85,131,39,139,103,224,141,1,135,9,129,105,71,-253,221,193,128,103,194,75,228,189,1,0,66,64,213,250,119,2,139,73,222,-93,64,211,106,113,121,247,64,29,66,35,64,133,224,75,1,66,131,101,83,-0,124,77,21,136,129,2,84,94,40,115,207,2,67,94,59,104,197,0,76,-167,125,10,89,94,50,124,101,94,48,124,110,94,39,184,189,66,205,1,65,-124,66,253,1,84,124,90,207,0,96,163,173,64,49,0,72,99,9,0,79,-122,149,64,215,69,201,65,77,0,95,98,193,100,53,5,124,70,94,50,124,-53,66,157,97,83,85,25,197,9,64,147,0,77,98,61,0,68,123,217,64,-211,154,169,133,153,154,61,197,3,129,61,250,143,1,157,223,131,139,65,103,-221,25,76,43,67,21,193,213,103,63,166,131,64,145,65,73,0,67,104,75,-2,66,94,49,98,131,147,121,129,35,0,65,96,143,195,47,0,86,105,165,-2,57,124,100,188,27,136,7,71,9,66,17,135,13,0,76,121,99,77,145,-64,119,79,243,65,49,65,125,66,131,4,50,124,47,124,117,97,117,98,3,-81,147,0,124,64,141,65,255,64,65,4,50,124,69,124,102,96,73,158,107,-64,5,64,73,73,95,70,139,65,171,0,50,69,11,168,149,64,13,64,87,-65,143,154,123,74,207,0,82,105,221,76,79,64,225,66,15,138,169,194,69,-128,57,158,163,65,37,3,45,94,94,124,68,103,2,65,124,111,190,177,64,-245,4,67,124,51,94,61,97,227,65,207,64,49,0,86,142,45,4,124,115,-94,61,124,75,85,2,65,124,117,129,89,212,241,0,124,79,33,197,153,75,-5,68,55,2,71,94,45,101,25,137,195,0,35,114,43,3,67,94,35,124,-75,157,86,5,0,65,107,39,4,35,94,61,124,121,167,41,68,143,160,7,-1,124,86,178,113,0,88,86,35,96,191,76,59,76,47,64,7,138,139,0,-81,160,13,64,21,234,179,1,190,135,224,13,0,152,89,88,187,152,111,234,-203,1,74,221,224,63,1,64,37,128,43,128,45,203,9,224,29,7,80,163,-64,93,137,191,192,33,224,157,3,224,7,23,0,91,176,183,10,88,94,32,-94,58,94,88,94,33,94,58,117,251,224,15,55,177,15,1,124,49,67,55,-86,237,1,124,54,101,119,1,61,124,66,143,67,231,1,35,94,87,119,129,-147,67,41,66,87,67,67,72,99,2,35,94,72,106,1,0,73,113,43,0,-83,117,187,68,167,2,33,94,65,100,49,133,51,0,80,162,19,221,195,64,-5,172,157,4,124,61,94,49,124,65,15,2,35,124,111,108,249,202,227,73,-215,153,75,195,209,75,27,84,29,131,201,2,35,94,80,254,83,0,132,15,-66,191,2,59,94,67,96,143,68,67,0,49,224,25,0,85,65,192,53,68,-247,228,35,1,2,67,124,95,229,141,0,137,55,237,209,3,1,65,124,136,-239,108,67,64,147,67,127,3,124,33,94,32,93,33,96,163,64,99,228,115,-4,1,94,70,96,151,0,58,114,5,75,215,0,59,74,221,99,25,78,5,-148,227,1,65,124,77,217,128,111,135,175,128,117,195,165,195,119,192,145,134,-213,64,5,129,7,224,3,1,131,217,224,61,7,224,3,9,224,31,1,128,-83,224,241,3,224,101,1,128,117,0,80,238,189,0,64,13,129,1,0,80,-85,145,171,243,0,66,68,69,121,65,68,57,0,99,182,165,0,78,175,35,-128,7,96,5,1,124,36,165,75,0,76,96,243,4,32,94,61,124,55,108,-251,102,51,192,65,121,197,144,183,0,61,100,159,87,253,0,65,118,239,2,-65,124,122,98,115,4,60,94,69,124,87,160,45,70,113,66,33,175,49,1,-124,118,160,135,86,95,65,35,0,75,160,39,65,105,224,13,0,1,124,55,-118,115,64,225,147,149,90,101,64,15,68,95,64,181,224,53,1,0,61,107,-77,1,66,124,90,165,64,215,66,251,64,33,207,161,64,65,66,183,64,81,-64,181,192,247,90,167,136,49,128,23,2,65,94,82,97,3,0,91,165,37,-0,72,161,193,4,66,124,77,124,93,96,9,66,121,2,50,124,32,97,19,-193,223,0,65,101,91,161,201,2,124,44,92,96,35,166,13,0,58,80,27,-229,215,0,2,68,124,107,96,7,0,83,114,161,0,68,135,33,1,124,97,-96,41,0,38,104,99,129,197,64,97,96,111,5,124,43,124,56,124,80,108,-229,74,233,2,95,94,45,96,93,69,199,4,35,94,67,124,124,109,171,0,-47,68,3,1,124,123,96,9,64,131,224,15,2,31,34,32,58,50,50,56,-32,64,10,65,32,95,54,32,95,49,52,54,32,64,95,54,32,89,32,66,-32,66,32,83,32,85,64,18,5,55,32,64,64,64,64,64,16,1,90,32,-224,7,1,12,83,39,32,83,32,64,66,32,67,39,32,83,39,64,8,14,-83,32,64,95,49,50,55,32,95,53,49,32,64,35,49,160,52,0,67,64,-23,224,38,0,9,66,32,64,64,67,32,67,32,95,52,64,108,12,53,54,-32,64,64,95,49,53,55,32,95,49,57,64,120,5,51,50,52,32,35,49,-64,143,96,0,64,53,64,110,10,95,49,48,54,32,64,67,32,95,56,48,-160,41,224,53,19,3,85,32,35,48,224,64,0,31,66,32,80,32,95,51,-50,50,32,102,114,111,109,85,84,70,56,32,34,92,34,108,105,98,47,68,-97,116,97,47,67,104,21,97,114,47,85,110,105,99,111,100,101,46,104,115,-92,34,44,50,48,50,58,56,34,128,62,64,225,96,228,96,71,128,13,64,-133,224,187,28,128,185,2,64,67,39,64,249,7,95,49,55,52,32,95,55,-53,64,27,160,210,64,202,96,16,64,80,192,11,192,63,3,95,49,57,56,-64,184,4,50,50,48,32,64,160,55,224,28,0,129,76,64,70,96,151,2,-95,50,50,65,107,96,8,0,52,225,37,0,160,78,128,140,225,17,2,64,-71,64,11,2,95,50,50,64,192,3,58,50,50,55,129,252,2,50,50,53,-66,10,0,54,96,13,7,98,115,117,110,112,97,99,107,64,17,0,53,96,-17,64,110,4,95,50,50,50,32,64,57,1,51,32,64,56,0,52,96,24,-2,66,32,89,65,247,65,160,0,58,96,25,64,44,65,41,0,67,129,44,-65,32,0,54,64,113,96,118,97,142,130,81,129,220,128,57,128,189,0,50,-96,48,225,42,1,192,190,0,64,128,49,0,58,96,33,96,139,64,115,64,-61,0,80,128,6,160,68,64,33,0,49,128,205,5,49,48,56,32,95,50,-64,21,3,95,49,57,53,64,10,64,114,192,11,65,70,3,95,50,49,48,-161,96,64,11,0,49,224,11,2,0,51,224,11,2,0,57,224,11,0,0,-54,64,57,0,52,64,255,0,48,64,156,0,58,96,22,1,10,65,162,213,-98,254,129,236,66,48,128,255,64,2,64,151,162,72,226,78,0,66,4,225,-192,1,192,37,64,16,128,52,64,77,96,5,99,79,97,28,1,49,52,64,-7,2,85,32,65,161,44,1,49,53,64,137,0,49,96,246,64,59,64,18,-99,167,64,136,1,95,54,65,57,224,19,1,8,64,64,83,32,73,32,64,-75,50,226,127,1,224,125,0,1,83,39,65,69,194,84,99,208,129,131,66,-54,0,75,192,172,98,232,96,128,64,18,224,128,7,162,251,192,139,96,71,-130,135,96,16,224,54,15,0,64,128,206,97,103,0,56,65,223,1,49,57,-97,81,64,45,2,75,52,32,128,174,0,58,96,27,224,21,2,160,20,130,-182,2,85,32,90,96,1,0,75,64,175,96,23,0,54,224,44,0,64,13,-130,188,224,37,9,130,187,225,148,0,97,1,1,95,49,66,36,3,95,50,-49,50,96,58,130,202,0,85,64,134,192,57,0,58,96,27,130,129,161,181,-6,95,50,48,57,32,64,65,96,49,130,123,224,27,7,128,136,130,43,96,-77,224,196,1,64,30,8,10,65,32,117,114,101,109,32,58,98,150,64,13,-3,113,117,111,116,64,14,163,152,2,49,48,57,99,52,100,100,164,118,0,-54,68,211,65,73,226,148,6,64,83,129,0,0,73,64,65,128,253,0,83,-99,141,65,145,226,93,0,163,155,2,54,56,32,131,150,98,175,130,196,224,-22,4,133,124,67,28,229,66,16,10,73,110,116,101,103,101,114,95,84,121,-112,165,66,3,53,52,58,49,165,65,128,63,0,57,67,68,0,48,96,80,-66,118,0,79,64,123,0,79,97,24,160,36,224,34,3,224,26,3,224,23,-2,198,134,2,95,50,48,66,103,2,95,50,48,100,132,64,251,100,112,2,-95,49,54,68,155,1,54,52,64,47,0,50,166,127,0,58,96,37,102,218,-0,54,98,159,1,95,55,97,219,64,32,128,53,1,54,57,224,20,1,129,-190,0,75,65,56,129,173,2,80,32,58,64,128,162,41,99,47,131,7,162,-183,96,184,96,14,129,207,69,180,225,229,3,96,36,0,58,96,34,64,131,-1,52,49,64,47,3,53,32,95,54,65,170,160,10,66,87,128,10,2,49,-55,51,96,11,0,55,64,11,102,227,0,73,97,179,96,220,71,86,1,49,-53,100,135,230,114,7,131,100,230,137,9,224,22,13,128,45,96,185,66,54,-96,115,0,58,96,31,101,203,192,24,64,19,130,61,96,243,0,56,133,153,-1,53,57,64,30,64,50,2,35,50,53,101,4,96,44,98,165,0,54,71,-154,68,119,161,137,2,49,54,51,96,5,96,101,97,192,1,54,56,192,61,-2,95,49,55,97,11,96,73,96,27,1,55,50,130,227,96,51,0,55,132,-84,1,49,55,224,110,0,2,95,49,56,224,48,0,3,95,49,56,51,224,-11,2,0,54,224,56,8,196,199,98,203,71,171,230,126,1,224,27,5,2,-49,52,50,160,28,1,95,55,97,46,66,38,192,41,2,95,49,56,102,50,-64,18,224,81,51,0,57,224,81,9,66,115,1,49,56,224,220,2,0,57,-104,214,160,11,0,49,66,254,4,95,49,57,50,32,160,67,0,75,160,8,-64,21,0,51,69,19,0,58,96,43,6,10,65,32,90,32,85,32,64,13,-130,206,7,112,111,112,99,111,117,110,116,66,181,228,138,2,0,66,96,109,-0,56,67,28,0,49,167,88,0,58,64,113,129,182,3,56,56,32,58,64,-139,226,183,3,133,44,224,1,9,165,62,224,0,2,0,58,96,88,64,72,-2,51,52,51,228,31,2,18,97,114,105,116,104,109,101,116,105,99,32,111,-118,101,114,102,108,111,119,68,17,0,58,97,1,131,78,165,35,0,83,228,-148,5,192,5,2,95,49,56,102,240,3,95,49,56,53,227,96,0,230,188,-0,71,106,130,142,134,250,1,49,55,137,24,230,168,0,131,160,226,241,3,-128,66,0,58,66,47,128,234,224,228,15,224,1,3,224,240,9,64,0,0,-58,96,147,96,68,69,247,96,169,192,211,129,108,98,255,64,147,0,58,66,-171,161,90,0,51,224,108,42,0,58,96,75,224,92,4,64,244,132,141,1,-95,49,71,96,160,252,0,58,67,33,160,105,225,193,17,224,103,14,0,58,-96,73,224,102,4,0,55,71,10,160,195,0,55,226,30,0,0,52,224,92,-15,224,84,7,0,58,96,58,231,63,1,224,1,21,225,103,12,0,58,96,-131,197,56,69,51,101,45,133,39,165,38,99,240,229,38,7,104,252,97,246,-101,4,138,238,64,52,0,58,96,47,103,17,136,225,98,68,64,232,226,40,-1,0,58,64,88,160,184,231,247,1,96,45,5,10,65,32,42,32,58,96,-126,129,42,1,95,49,68,28,130,89,226,122,12,99,190,0,58,68,220,160,-49,236,78,3,228,75,10,137,247,98,221,102,209,70,32,224,29,2,1,95,-49,100,77,234,60,0,1,95,49,101,88,227,214,0,64,106,226,4,0,136,-103,224,2,2,225,85,0,232,138,0,224,30,4,225,133,3,0,58,96,104,-224,178,62,229,147,0,128,178,0,54,65,111,224,178,3,72,109,195,33,224,-141,2,226,23,6,0,58,96,56,224,183,7,226,66,14,0,58,96,117,226,-178,0,134,227,66,65,7,10,65,32,120,111,114,32,58,102,150,2,10,65,-32,128,11,129,208,2,97,110,100,64,12,129,171,2,95,52,56,137,7,3,-95,49,52,57,66,57,66,84,167,33,224,1,31,107,212,224,0,10,224,57,-25,192,1,224,65,14,224,56,25,128,1,224,62,13,224,55,25,64,1,224,-59,12,224,54,25,224,56,13,224,53,44,224,50,41,224,47,38,224,44,35,-224,41,32,224,38,29,224,35,26,224,32,23,224,29,20,224,26,17,224,23,-14,224,20,11,224,17,8,224,14,5,224,11,2,192,8,109,70,224,0,9,-0,58,74,28,229,83,1,224,1,23,227,202,4,224,68,2,70,249,140,217,-106,144,228,11,1,171,103,69,125,99,186,203,43,1,95,49,67,197,0,49,-82,142,224,11,0,73,63,192,11,137,112,128,11,139,135,128,11,107,158,0,-53,96,10,109,109,106,246,96,10,0,58,96,6,5,10,65,32,117,62,61,-64,134,132,82,1,117,62,64,11,132,81,1,117,60,96,24,132,82,1,117,-60,64,11,132,81,3,117,99,109,112,64,13,176,160,96,105,196,100,192,121,-68,106,64,99,129,45,0,47,64,73,64,18,160,244,0,52,128,244,0,75,-64,10,206,27,1,52,53,64,13,128,147,1,98,115,145,178,64,20,160,29,-0,51,64,13,128,152,7,98,115,108,101,110,103,116,104,64,17,232,147,0,-101,30,143,102,74,186,64,21,0,82,141,240,64,16,170,68,145,195,1,49,-51,106,201,112,144,2,58,49,52,170,63,97,107,0,51,97,107,0,51,103,-156,0,51,71,167,1,49,51,110,171,0,51,104,67,0,51,69,69,97,77,-96,65,129,77,96,10,0,58,96,6,225,77,0,64,40,193,77,64,58,225,-77,0,64,77,193,77,64,95,3,10,65,32,105,129,77,64,115,96,201,139,-25,2,58,49,51,128,218,65,35,64,16,143,63,0,54,64,13,225,119,3,-83,71,2,95,49,50,101,216,64,188,193,108,64,17,3,10,65,32,61,96,-11,226,98,1,1,64,58,96,245,210,236,111,71,209,159,80,178,0,90,64,-82,171,226,83,1,64,6,139,102,179,78,113,200,97,30,82,193,0,58,96,-29,96,22,71,52,192,73,3,48,54,32,35,75,183,147,76,0,35,108,14,-227,116,2,224,32,2,143,175,116,92,177,196,0,89,243,79,0,115,19,224,-65,4,224,64,5,66,13,64,0,96,58,163,88,179,201,139,145,128,163,128,-244,129,76,105,88,85,210,0,48,96,20,129,86,104,97,64,14,232,112,0,-99,134,0,58,97,8,167,40,164,18,0,58,97,36,194,112,96,36,177,210,-0,66,80,87,137,134,114,23,80,214,130,70,146,32,1,58,49,177,230,11,-94,109,100,53,83,116,114,105,110,103,32,58,96,27,180,145,2,66,32,95,-128,46,64,213,97,74,64,15,213,98,116,173,141,115,168,107,178,15,73,172,-128,55,0,51,73,176,1,90,32,224,31,0,129,9,4,110,101,119,67,65,-128,111,2,76,101,110,64,114,129,9,224,212,5,129,8,0,65,64,30,129,-4,129,148,2,115,101,113,142,15,96,8,101,19,1,58,49,177,255,80,81,-177,244,193,150,128,1,229,136,78,0,58,85,7,193,122,229,91,2,0,58,-114,234,3,10,65,32,79,64,144,129,79,6,95,56,57,32,75,32,95,98,-97,192,7,1,95,57,79,106,114,90,0,95,112,163,128,10,1,49,48,78,-176,192,11,0,50,224,11,2,107,154,81,148,0,58,96,18,65,186,6,112,-111,107,101,87,111,114,73,92,177,173,4,94,112,101,101,107,192,18,162,99,-65,177,75,66,145,221,81,117,0,58,64,89,160,187,241,78,3,177,167,192,-49,152,13,160,48,226,123,1,0,95,81,117,67,87,68,214,0,95,81,152,-1,64,58,177,203,2,116,111,73,79,36,177,172,6,116,111,80,116,114,32,-58,177,164,243,160,5,177,22,131,24,245,210,0,129,102,67,182,1,64,95,-113,43,182,201,99,90,0,95,144,131,3,73,32,64,58,177,64,229,102,5,-177,47,237,104,0,79,187,65,179,128,61,1,67,32,96,63,0,95,76,249,-64,44,229,168,0,202,197,175,234,0,95,80,49,75,235,0,35,77,160,175,-237,148,55,175,217,226,51,1,226,55,2,226,94,72,176,56,203,221,64,31,-0,95,87,85,100,121,0,95,79,38,163,149,224,20,0,163,154,1,56,50,-160,16,163,159,119,127,132,175,0,58,176,82,64,37,114,182,64,226,176,55,-6,94,102,114,101,101,32,58,175,196,140,157,224,91,5,0,95,78,119,0,-95,79,11,140,115,96,33,224,109,0,97,171,64,31,135,238,224,116,0,0,-58,175,209,128,50,64,226,64,165,133,85,96,244,0,39,86,195,224,48,0,-0,73,160,255,224,247,3,193,209,225,62,1,224,118,3,1,64,95,80,8,-128,162,247,28,0,248,229,6,101,95,176,76,205,13,64,154,226,4,0,0,-50,133,61,176,18,91,162,0,83,118,185,123,143,129,88,64,240,1,32,95,-79,176,65,121,98,80,224,104,8,128,103,197,183,228,21,1,0,58,176,4,-68,183,0,58,175,243,96,199,103,172,130,164,192,75,226,169,7,175,237,242,-6,6,8,117,110,100,101,102,105,110,101,100,113,252,175,206,247,140,7,175,-147,111,229,99,172,72,158,99,14,0,95,72,200,0,83,238,118,11,65,128,-238,68,2,143,254,85,206,211,126,143,244,192,33,128,249,240,18,1,0,95,-79,206,0,58,175,232,2,66,32,95,116,170,112,33,175,231,0,85,97,203,-124,186,80,116,142,204,0,80,96,7,97,114,225,113,0,112,151,64,120,97,-11,99,226,128,212,129,180,2,95,54,55,163,167,73,81,176,7,0,89,162,-99,252,82,3,247,114,1,194,83,0,67,103,224,150,161,128,191,65,5,214,-217,161,2,1,55,48,128,155,97,210,175,251,4,105,110,118,32,58,175,228,-4,115,104,114,32,58,175,203,72,213,175,107,0,97,128,23,129,143,4,115,-104,108,32,58,175,47,2,43,32,58,175,38,2,45,32,58,175,35,2,73,-32,58,175,33,230,68,7,175,43,130,171,100,158,175,37,106,22,74,233,0,-95,74,252,0,95,75,13,0,95,75,31,0,95,75,48,0,95,75,66,106,-16,149,40,74,15,96,9,0,58,172,37,131,180,98,189,131,193,96,37,0,-55,131,118,69,88,172,8,224,29,1,224,49,1,224,39,5,230,251,0,195,-75,172,34,74,110,171,200,2,62,32,58,171,197,74,106,171,196,2,60,32,-58,171,193,138,103,171,194,106,60,75,144,0,95,75,161,0,58,171,202,74,-57,171,177,65,98,171,176,2,80,32,58,171,175,196,14,164,73,194,34,224,-20,11,224,17,8,224,14,5,224,11,2,192,8,229,137,0,172,17,250,174,-5,172,24,4,110,101,103,32,58,172,20,2,42,32,58,172,16,2,45,32,-58,172,8,2,43,32,58,171,252,224,148,68,0,58,172,64,199,83,64,17,-225,225,0,73,127,68,90,66,26,75,223,64,12,66,28,69,237,1,64,58,-172,23,4,95,51,55,32,58,172,22,2,73,32,58,172,20,64,54,66,76,-76,10,0,58,172,27,64,29,128,224,64,9,168,102,7,109,97,108,108,111,-99,32,58,172,20,13,73,79,46,112,101,114,102,111,114,109,73,79,32,58,-172,30,224,179,2,0,58,172,35,2,85,32,58,172,20,224,219,14,0,58,-172,39,64,19,0,95,127,70,0,95,109,21,236,50,2,103,237,0,58,172,-53,6,114,97,105,115,101,32,58,172,12,7,65,46,114,101,97,100,32,58,-172,4,13,73,79,46,103,101,116,65,114,103,82,101,102,32,58,171,138,0,-95,70,104,67,63,123,218,99,67,64,95,224,199,0,1,62,62,95,153,128,-42,105,126,128,33,1,95,49,231,86,0,1,49,55,128,65,88,81,192,9,-0,50,71,41,64,9,0,58,171,181,186,213,73,119,64,52,119,110,64,69,-108,188,254,222,4,96,32,116,227,192,32,0,95,150,117,161,168,0,55,88,-69,224,47,12,107,103,96,155,143,64,129,18,78,207,129,14,70,14,130,28,-253,172,0,119,85,231,7,0,0,50,211,192,128,253,233,57,0,69,139,224,-11,2,96,197,101,26,0,58,171,153,96,59,140,148,164,150,0,51,97,196,-108,34,130,110,73,193,129,62,74,61,96,36,64,180,101,204,128,226,0,58,-128,224,2,75,32,58,225,220,1,1,64,58,194,136,0,58,162,125,9,79,-46,114,101,116,117,114,110,32,58,225,212,0,0,62,68,100,128,196,2,80,-32,58,128,187,227,74,47,0,58,227,157,3,226,142,9,237,130,1,130,118,-64,200,1,95,50,86,129,131,193,224,0,255,224,0,255,224,0,255,224,0,-255,224,0,255,224,0,255,224,0,255,224,0,255,224,0,198,1,32,125,-};-unsigned char *combexpr = data;-int combexprlen = 126219;+122,76,90,49,39,243,1,0,26,118,56,46,48,10,50,51,53,50,10,65,+32,95,48,32,95,50,51,32,64,95,51,52,53,32,64,66,224,15,2,6,+53,55,32,64,64,66,32,224,18,3,17,52,57,32,64,64,64,83,39,32,+66,32,64,66,39,32,67,32,83,64,50,6,83,32,67,39,32,83,39,128,+10,24,64,95,49,50,55,32,95,51,53,57,32,64,102,114,111,109,85,84,+70,56,32,34,45,104,34,64,57,15,64,67,39,66,32,85,32,95,51,57,+57,32,95,52,48,48,64,19,1,75,50,96,25,224,70,29,0,63,224,70,+61,4,45,104,101,108,112,224,74,11,0,52,224,74,41,6,118,101,114,115,+105,111,110,224,77,9,3,50,51,53,32,224,40,1,8,77,105,99,114,111,+72,115,44,32,160,47,0,32,64,48,96,35,4,95,52,49,50,32,128,10,+224,46,1,16,44,32,99,111,109,98,105,110,97,116,111,114,32,102,105,108,+101,224,55,5,2,52,49,51,96,111,224,172,0,2,83,39,32,64,123,2,+64,67,32,224,166,14,6,110,117,109,101,114,105,99,224,174,5,2,66,32,+80,192,250,64,131,224,77,0,96,0,65,250,64,248,96,90,64,5,2,95,+56,50,130,8,64,109,9,95,52,49,52,32,95,50,49,32,64,64,115,5,+52,49,54,32,64,35,64,12,0,66,128,80,64,7,224,209,5,6,102,108,+97,103,115,32,61,96,191,7,64,95,49,49,56,32,95,52,96,62,96,0,+0,67,128,100,162,113,0,83,64,27,96,138,128,121,224,23,4,96,249,224,+23,10,97,187,65,4,0,66,66,159,10,95,52,50,55,32,64,85,32,75,+32,65,128,99,0,67,66,174,2,39,32,64,96,208,9,95,52,50,56,32,+64,95,52,50,57,65,50,3,67,32,95,55,66,253,2,95,49,52,66,243,+0,75,96,161,2,50,50,51,192,105,3,67,39,32,80,64,231,0,39,64,+212,0,50,64,221,8,95,56,52,55,32,95,53,50,50,224,224,2,11,99,+111,109,109,97,110,100,45,108,105,110,101,64,228,2,35,48,32,96,3,129,+86,3,95,51,52,51,226,172,0,128,143,4,95,50,51,49,53,162,54,1,+32,67,98,2,161,16,64,9,2,56,32,64,64,190,97,5,64,198,96,149,+224,43,0,128,149,1,95,50,131,146,163,145,3,32,95,56,49,97,162,0,+51,64,204,1,51,49,64,76,65,133,64,115,129,93,128,60,129,209,1,95,+49,96,224,226,47,2,98,61,1,56,52,192,13,5,79,32,35,52,54,32,+129,14,193,27,3,67,39,32,79,161,220,66,130,224,8,0,160,6,161,60,+192,45,96,0,9,58,50,51,53,49,32,64,10,65,32,65,105,224,1,19,+0,83,65,94,2,51,49,32,65,53,2,95,49,51,64,250,162,70,1,79,+32,224,140,2,96,98,65,196,64,25,97,190,224,205,0,226,254,4,224,192,+4,1,95,55,96,145,160,152,0,79,65,138,0,49,64,4,4,51,32,73,+32,64,227,41,2,5,108,105,98,47,103,109,132,28,96,56,128,241,97,173,+0,53,227,82,3,3,47,108,105,98,224,37,1,224,66,3,3,111,117,116,+46,67,189,162,233,96,199,224,6,28,224,161,3,192,20,0,51,99,152,192,+6,224,27,4,224,113,1,6,100,101,102,97,117,108,116,160,112,64,35,65,+116,0,48,97,116,2,66,32,89,97,241,98,32,0,83,194,201,65,50,4,+67,32,64,64,80,226,245,0,162,21,64,5,64,13,163,253,132,255,228,83,+14,132,68,224,57,42,0,118,224,57,48,0,113,224,57,48,0,114,224,57,+48,0,108,224,57,48,0,115,224,57,48,1,67,82,224,58,49,0,87,224,+58,49,224,57,48,0,84,224,57,48,3,88,67,80,80,224,60,48,0,122,+224,57,48,0,81,224,57,2,195,26,198,78,128,73,231,245,19,0,111,192,+61,64,46,0,82,96,54,229,142,2,197,134,70,93,165,134,224,105,49,2,+112,116,99,224,108,20,128,85,229,249,0,69,58,128,114,103,10,164,182,134,+233,1,64,67,68,202,198,72,224,144,12,161,51,64,14,161,69,96,108,232,+91,4,0,49,64,100,0,35,71,48,128,0,167,187,228,83,0,224,57,2,+96,87,128,105,225,161,1,192,37,224,38,0,225,170,6,128,95,1,49,48,+224,96,0,224,61,43,225,117,0,224,61,45,0,54,224,61,5,224,67,0,+224,61,11,0,67,224,61,6,0,54,71,186,224,60,2,0,66,225,91,1,+225,33,8,224,62,10,0,55,201,218,224,119,9,224,178,18,0,56,200,88,+224,53,36,0,57,199,165,224,53,36,0,55,193,29,224,195,2,226,31,8,+0,49,232,234,0,160,37,102,121,224,51,74,0,49,192,195,224,103,35,108,+200,224,103,38,203,27,224,51,33,227,35,0,128,36,169,186,74,111,2,54,+55,57,200,165,4,89,32,66,32,80,105,222,163,177,2,49,48,54,103,177,+0,80,105,95,3,52,52,50,32,107,89,171,51,0,49,98,93,72,180,106,+40,163,246,0,49,73,130,1,49,49,96,11,104,41,2,50,48,56,224,12,+0,160,0,96,130,228,62,22,109,230,99,59,64,43,128,138,3,64,95,57,+53,227,15,0,224,0,2,224,79,12,107,36,192,77,0,52,234,134,1,1,+49,57,192,137,227,81,1,64,16,129,25,0,85,128,10,160,68,0,67,234,+200,12,202,82,128,49,0,90,224,60,1,224,10,0,224,220,23,224,76,1,+229,27,4,0,57,128,18,229,27,5,224,223,28,0,54,224,223,11,224,130,+20,0,55,224,130,13,1,55,52,67,244,224,130,5,224,70,64,224,197,10,+224,72,0,77,5,230,161,1,224,43,20,230,205,9,225,198,33,224,58,1,+225,198,58,224,76,1,224,252,5,0,57,66,164,225,198,11,109,123,238,145,+9,7,85,110,107,110,111,119,110,32,78,153,1,58,32,103,100,203,230,172,+116,2,35,49,48,128,76,237,184,3,160,156,160,249,64,128,165,34,76,146,+2,49,52,49,140,44,2,50,52,52,231,199,3,0,46,135,196,224,34,20,+136,84,224,25,11,0,97,200,1,160,241,174,138,140,254,224,239,2,232,24,+63,225,196,12,0,52,224,65,1,0,95,231,94,0,224,39,11,68,139,224,+39,27,0,50,224,39,30,228,147,1,224,39,11,80,151,160,40,228,110,1,+224,61,2,228,65,3,224,108,26,224,46,8,224,39,14,228,218,3,224,39,+19,228,34,3,224,39,17,0,50,69,167,224,79,28,227,249,1,224,39,21,+227,216,1,5,95,54,49,32,95,55,112,222,1,53,55,160,9,1,51,50,+166,84,128,0,224,64,0,0,83,224,64,11,97,98,0,48,128,57,82,122,+0,53,177,234,128,57,131,175,135,11,0,58,128,69,84,86,5,56,49,51,+32,75,32,80,184,131,221,224,1,21,136,114,224,0,5,224,53,44,224,50,+41,224,47,38,224,44,35,224,41,32,224,38,29,224,35,26,224,32,23,224,+29,20,224,26,17,224,23,14,224,20,11,224,17,8,224,14,5,224,11,2,+192,8,96,5,100,245,72,197,224,0,13,66,88,0,56,226,88,5,0,90,+224,147,4,224,1,15,226,34,10,226,88,255,224,37,23,224,35,4,224,32,+23,224,29,20,224,26,17,224,23,14,224,20,11,224,17,8,224,14,5,224,+11,2,192,8,96,5,226,86,19,66,85,0,55,226,85,5,224,101,1,104,+142,225,247,25,64,1,226,46,10,224,55,26,224,53,10,224,50,41,224,47,+38,224,44,35,224,41,32,224,38,29,224,35,26,224,32,23,224,29,20,224,+26,17,224,23,14,224,20,11,226,45,14,66,40,0,54,226,40,15,64,1,+162,44,226,46,255,224,41,20,224,38,29,224,35,26,224,32,23,224,29,20,+224,26,17,226,3,12,66,1,0,53,226,1,17,193,255,224,85,7,224,1,+11,225,254,255,224,38,20,224,35,26,224,32,23,224,29,20,224,26,17,224,+23,14,228,25,13,66,22,0,52,228,24,19,228,26,2,226,28,255,224,41,+19,224,38,29,224,35,26,224,32,23,224,29,20,225,235,11,65,233,0,51,+225,233,21,225,235,3,225,236,255,224,41,19,224,38,29,224,35,26,224,32,+23,225,207,10,65,206,0,50,225,206,23,128,1,225,212,2,225,215,255,224,+41,21,225,110,7,65,107,0,49,225,107,29,192,1,225,115,5,64,0,224,+49,23,64,1,225,119,64,224,193,3,64,189,159,73,224,189,4,64,161,224,+89,23,64,1,226,11,246,224,38,29,224,35,26,224,32,23,224,29,20,224,+26,17,224,23,14,224,20,11,224,17,8,224,14,5,224,11,2,238,115,17,+0,58,150,190,227,10,35,227,12,11,226,121,48,224,153,2,64,138,241,82,+6,224,69,11,224,124,3,224,31,11,224,1,7,224,117,11,224,53,44,224,+50,41,224,47,38,224,44,35,224,41,32,224,38,29,224,35,26,226,67,9,+65,176,240,173,16,224,1,7,226,51,6,224,40,17,224,1,1,225,185,205,+225,71,6,65,68,0,54,227,128,35,227,124,8,224,46,21,128,1,225,74,+114,224,239,4,64,237,238,181,18,224,1,7,224,235,7,224,43,19,192,1,+226,53,161,226,9,5,65,26,237,185,22,224,1,11,229,139,10,224,88,2,+64,84,172,36,6,50,48,57,32,95,57,53,89,69,3,57,53,53,32,96,+26,170,112,7,50,48,55,32,95,50,52,54,89,102,96,56,2,95,50,52,+159,172,64,12,14,67,32,83,32,95,49,50,55,32,95,53,49,32,64,35,+92,118,224,18,6,224,37,10,94,123,224,18,6,158,9,224,18,4,0,52,+224,18,9,89,210,0,67,127,233,224,18,0,127,241,76,236,252,128,1,19,+116,111,69,110,117,109,58,32,111,117,116,32,111,102,32,114,97,110,103,101,+156,146,128,220,64,194,1,49,53,127,0,65,12,64,103,90,158,0,50,97,+21,2,95,49,48,122,57,4,64,95,49,56,57,125,69,129,23,3,64,85,+32,83,221,58,2,67,32,60,160,178,224,18,6,160,159,224,18,3,64,159,+1,85,32,96,6,64,7,96,90,224,35,7,64,129,1,85,32,96,6,64,+7,64,88,96,36,224,91,4,129,71,224,55,4,64,194,1,85,32,96,6,+64,7,129,213,1,85,32,97,133,189,155,189,78,97,183,128,252,158,9,128,+5,157,129,5,49,52,50,32,95,54,64,52,3,95,50,52,53,224,47,0,+224,13,6,1,67,39,66,164,3,95,50,49,51,224,81,3,65,25,224,26,+14,161,105,0,56,224,67,1,2,95,50,56,226,70,1,66,98,235,103,28,+226,196,4,224,34,13,224,1,5,230,26,205,224,41,32,224,38,29,231,177,+8,65,143,236,57,10,161,127,224,84,15,224,1,3,225,119,255,224,38,20,+224,35,26,224,32,23,224,29,20,224,26,17,224,23,14,224,20,11,224,17,+8,224,14,5,236,49,16,3,58,50,51,50,140,48,0,83,100,18,0,66,+229,190,0,5,51,53,57,32,64,75,64,51,0,66,64,27,1,95,48,68,+7,127,160,0,55,68,66,132,233,95,150,128,9,224,31,0,2,64,67,39,+64,119,3,95,55,57,53,70,155,127,225,8,66,32,95,52,52,48,32,95,+57,86,227,68,229,1,55,57,70,184,1,50,49,96,15,64,31,0,67,96,+75,1,66,32,102,24,4,64,95,50,51,53,230,30,2,11,67,97,110,110,+111,116,32,102,105,110,100,32,134,22,3,64,66,32,85,64,46,133,14,0,+56,101,50,128,155,0,55,64,31,3,95,50,51,50,101,99,224,10,3,64,+9,0,55,103,40,0,50,140,151,64,109,0,54,160,182,224,227,7,73,196,+65,60,3,95,52,49,52,69,148,64,65,224,33,4,4,50,51,50,53,32,+192,235,224,128,0,64,82,1,57,57,158,110,73,25,2,79,32,35,69,112,+97,70,128,29,224,112,1,128,41,224,234,6,0,32,192,224,5,89,32,66,+32,80,32,64,56,128,99,3,67,39,32,89,96,12,0,32,64,15,0,64,+64,28,96,145,126,219,70,96,128,174,1,49,48,102,183,133,226,0,79,96,+94,4,50,54,32,95,49,68,40,193,111,160,141,128,37,129,153,0,64,161,+154,70,6,65,177,65,36,140,11,96,112,98,69,128,6,160,15,64,112,64,+136,7,95,54,54,50,32,64,95,52,81,128,224,6,0,1,51,49,65,113,+4,66,32,95,49,57,224,28,1,64,82,0,54,130,105,4,32,95,49,49,+53,198,203,225,115,2,104,63,130,77,225,81,0,160,37,225,134,1,200,75,+0,51,104,15,2,95,51,53,160,37,226,57,12,22,103,101,116,68,105,114,+101,99,116,111,114,121,67,111,110,116,101,110,116,115,58,32,99,130,79,3,+111,112,101,110,193,110,129,94,2,83,39,32,65,91,64,5,225,233,4,224,+136,1,129,113,98,121,0,83,232,214,0,224,138,5,226,150,0,224,65,3,+104,41,224,24,8,0,51,135,114,129,225,96,217,225,190,0,226,90,8,1,+95,52,66,80,97,85,0,49,224,18,0,97,89,104,250,94,104,163,207,139,+145,9,94,99,95,100,95,110,97,109,101,32,64,19,138,138,7,94,114,101,+97,100,100,105,114,96,18,138,72,0,75,224,145,5,0,55,66,174,225,128,+4,194,168,0,66,130,210,225,91,1,64,91,0,58,129,63,64,167,0,48,+98,204,192,135,224,66,29,6,118,101,114,115,105,111,110,224,69,1,1,52,+48,100,23,1,51,49,97,47,224,69,30,13,99,111,109,112,105,108,101,114,+58,32,109,104,115,45,96,74,1,95,57,98,130,224,64,30,6,100,101,112,+101,110,100,115,224,134,1,1,55,49,128,38,76,221,0,85,99,112,160,51,+0,64,128,231,192,66,2,79,32,35,67,54,99,80,128,187,97,140,2,50,+49,52,160,10,0,67,98,74,192,129,96,126,224,118,1,15,101,120,112,111,+115,101,100,45,109,111,100,117,108,101,115,58,162,138,165,79,227,1,3,0,+85,99,160,73,239,226,19,4,224,79,6,4,111,116,104,101,114,224,77,7,+192,60,130,40,228,127,1,1,95,54,196,128,105,224,228,131,10,64,24,129,+213,0,56,76,89,224,0,1,66,60,140,106,128,170,0,66,224,151,7,226,+188,0,227,181,2,74,181,1,54,53,202,181,0,52,67,255,138,245,229,8,+14,15,66,117,105,108,100,105,110,103,32,112,97,99,107,97,103,101,128,147,+170,186,69,1,163,171,230,123,7,67,158,66,64,5,54,32,64,95,55,54,+99,77,229,51,1,67,180,196,98,132,197,227,232,1,1,95,52,231,33,0,+96,29,128,48,0,39,224,5,8,224,230,3,192,131,224,232,30,192,234,128,+10,224,239,5,3,87,114,105,116,224,238,9,101,211,98,120,226,181,9,2,+32,116,111,161,168,0,55,196,6,224,189,1,128,2,65,153,232,9,0,224,+183,2,161,160,0,39,96,2,64,184,1,54,52,65,46,160,70,160,46,2,+50,51,49,99,203,160,79,134,97,96,8,200,42,77,216,65,126,3,50,51,+49,56,97,6,0,56,66,247,0,85,102,181,3,64,85,32,65,96,156,0,+52,131,137,224,21,5,109,180,195,147,1,51,53,168,74,164,62,227,255,0,+64,15,132,8,161,50,225,170,6,192,196,225,127,29,225,128,22,6,67,111,+109,112,114,101,115,68,143,3,32,116,105,109,193,129,129,74,225,131,0,101,+126,79,76,72,221,134,140,3,55,52,32,95,142,128,0,64,225,156,2,1,+109,115,194,176,136,122,68,81,227,23,0,1,49,50,72,167,64,87,0,54,+101,246,6,51,54,56,32,95,55,56,96,212,195,109,70,53,128,183,97,33,+129,91,131,124,141,132,1,66,32,232,35,1,225,145,1,168,10,248,64,1,+128,7,230,91,4,141,159,65,175,100,210,0,55,71,165,96,88,140,77,0,+83,196,241,2,54,53,49,97,223,0,49,66,24,2,95,50,57,64,179,166,+242,104,80,2,64,35,52,128,82,166,136,131,14,0,80,227,155,1,98,129,+224,50,4,101,47,161,8,168,71,99,148,103,227,65,236,1,95,52,73,157,+193,41,66,20,200,91,0,49,196,46,68,185,65,17,0,54,99,222,64,14,+1,54,54,70,54,64,20,80,126,224,163,11,0,73,64,9,196,198,231,55,+1,98,127,72,55,226,14,8,195,135,103,65,104,45,9,102,32,116,104,101,+32,102,111,114,109,96,20,0,45,198,188,131,131,98,21,0,49,73,107,1,+51,48,175,205,0,58,129,245,97,170,224,1,1,235,177,30,224,11,2,192,+8,73,241,160,86,183,88,2,50,49,54,69,189,0,49,66,126,64,22,137,+178,128,58,0,95,96,144,73,218,0,56,82,51,194,255,0,55,65,42,96,+246,70,9,0,55,99,132,112,118,92,174,3,95,49,57,53,129,209,64,77,+0,54,226,102,0,163,5,200,249,65,100,229,38,5,204,11,195,146,1,67,+32,138,71,241,231,6,15,112,107,103,80,97,116,104,32,105,115,32,101,109,+112,116,121,230,163,0,130,166,129,243,96,6,0,79,66,55,0,79,235,57,+0,192,27,128,135,96,105,134,123,231,41,5,228,17,13,64,12,70,14,1,+54,49,131,168,177,118,228,15,22,6,73,110,115,116,97,108,108,229,147,9,+64,99,168,12,229,144,6,0,105,234,78,0,64,81,230,28,0,233,92,5,+196,82,70,133,224,13,1,229,180,0,224,208,4,4,95,50,51,48,51,68,+113,229,223,0,131,83,96,226,128,50,224,253,10,64,53,147,138,139,219,161,+63,225,172,1,64,54,232,8,0,225,91,2,161,123,135,83,231,204,19,161,+81,146,199,231,192,14,4,99,114,101,97,116,231,182,1,224,84,6,97,66,+224,219,1,69,32,128,107,2,32,95,56,171,70,129,104,96,193,64,176,110,+50,106,104,66,87,133,36,2,95,57,52,101,86,96,9,96,233,236,207,7,+134,158,108,108,1,95,56,67,152,202,162,233,193,10,224,101,3,234,136,4,+238,168,1,64,0,0,75,174,78,66,218,1,95,52,131,236,67,46,139,118,+70,231,2,90,32,75,102,182,64,21,182,3,105,100,69,128,64,83,0,50,+131,173,181,201,68,191,79,82,64,25,141,122,64,32,99,121,129,226,0,80,+109,226,0,32,133,25,68,200,225,100,1,1,46,47,129,95,135,86,167,99,+64,72,0,48,128,72,179,174,1,50,51,86,45,2,50,51,48,164,39,133,+231,129,131,64,121,0,54,165,124,64,28,73,241,233,218,0,67,105,1,95,+53,65,144,64,42,143,61,64,49,128,61,96,54,199,116,64,219,0,53,70,+214,237,239,1,64,48,64,126,64,64,224,125,1,65,5,64,21,229,163,1,+1,95,52,90,120,64,26,129,67,162,112,194,160,80,47,65,231,1,95,52,+103,211,194,143,224,30,8,0,56,150,33,224,30,6,2,95,52,56,65,239,+227,45,8,2,95,51,56,96,83,144,49,96,125,129,171,168,213,96,212,224,+99,2,110,178,105,141,65,242,1,35,53,108,7,1,64,75,64,24,128,36,+65,153,163,14,235,100,0,162,227,167,209,130,4,0,50,96,223,228,65,2,+3,95,52,48,49,64,4,1,51,32,64,66,66,145,0,55,228,248,1,71,+227,129,136,229,15,1,129,155,238,135,0,150,96,231,100,4,128,211,129,9,+228,176,2,229,82,3,131,240,168,21,0,85,71,228,128,52,238,75,4,0,+48,130,163,71,136,160,22,64,193,130,165,0,48,194,165,0,89,230,2,0,+0,66,64,134,136,102,64,17,224,54,2,224,140,0,160,87,130,152,2,94,+109,107,174,141,65,83,166,186,233,229,7,230,102,3,235,233,1,229,93,9,+0,56,94,110,234,253,1,224,42,1,120,60,103,227,114,51,0,90,228,229,+13,71,70,230,10,0,239,98,0,1,64,67,134,109,128,0,64,27,0,85,+160,35,128,9,160,10,224,183,11,229,233,2,205,33,131,209,161,14,160,167,+230,10,2,224,21,8,224,24,1,192,239,165,248,160,80,172,145,224,96,3,+231,13,31,235,19,28,16,116,111,112,32,108,101,118,101,108,32,100,101,102,+110,115,58,32,96,0,236,154,0,229,91,2,2,55,51,57,153,50,235,32,+5,164,145,96,22,231,44,6,7,40,117,110,112,114,117,110,101,179,210,224,+76,3,224,64,2,0,95,107,20,67,19,0,49,232,12,2,225,18,24,237,+170,9,65,11,72,149,0,53,91,27,98,47,186,72,227,173,1,151,62,161,+13,164,69,131,165,239,244,4,224,195,2,0,61,160,187,0,32,64,76,243,+231,1,192,0,225,202,5,130,252,224,180,1,173,125,75,2,64,62,166,200,+226,79,1,226,158,4,103,178,0,55,102,249,64,4,228,115,6,224,55,4,+226,137,12,224,119,5,233,183,4,226,49,68,9,102,105,110,97,108,32,112,+97,115,115,130,43,226,49,3,163,151,97,82,128,59,226,53,0,128,14,237,+89,18,230,243,2,237,89,4,163,239,161,255,129,5,205,1,130,161,238,245,+16,224,225,1,2,95,50,50,169,39,169,94,228,60,1,235,71,3,85,71,+2,49,50,57,160,147,172,131,89,123,64,27,0,57,234,84,0,78,218,160,+115,2,95,52,56,171,109,1,55,48,64,41,0,56,230,241,1,229,242,3,+231,207,2,0,104,192,220,175,24,102,51,0,50,109,127,0,56,129,24,64,+14,241,142,0,161,239,129,142,226,111,1,161,99,192,30,225,87,3,96,19,+96,34,0,50,72,191,117,147,97,226,76,13,64,33,2,35,49,48,172,192,+225,130,17,6,32,108,105,110,101,115,47,225,136,2,236,11,4,229,134,3,+100,237,194,255,160,123,100,211,128,155,109,173,1,50,50,72,124,225,5,2,+3,99,111,109,98,192,91,165,6,224,53,4,126,81,224,53,9,234,107,1,+225,195,3,3,95,57,48,50,226,161,2,3,109,104,115,99,224,42,7,229,+201,0,230,24,11,79,159,72,42,224,46,1,226,86,4,232,65,0,224,168,+0,227,80,7,1,95,55,74,61,225,208,0,121,62,64,189,129,206,0,57,+212,54,234,252,6,224,11,0,209,151,239,84,1,193,223,3,95,50,50,54,+135,147,1,50,57,209,39,98,57,192,128,2,95,51,54,162,227,3,95,50,+49,56,66,119,237,143,5,31,84,104,101,32,45,114,32,102,108,97,103,32,+99,117,114,114,101,110,116,108,121,32,111,110,108,121,32,119,111,114,107,115,+4,32,119,105,116,104,85,85,161,46,64,104,162,12,209,222,1,50,50,75,+49,64,117,104,162,7,95,49,49,57,56,32,95,56,112,82,112,179,225,121,+2,2,97,105,110,227,186,3,2,58,50,50,66,183,107,52,130,41,197,200,+255,53,0,78,74,97,249,64,103,121,146,3,90,32,64,83,96,106,0,39,+96,113,128,16,161,25,3,95,56,57,48,224,123,1,1,57,51,64,11,228,+93,1,228,168,5,5,68,117,112,108,105,99,76,161,0,105,77,232,1,110,+99,237,222,3,197,248,64,7,112,246,166,1,230,2,10,1,97,116,128,55,+118,53,96,41,224,119,2,224,0,1,66,233,72,72,224,91,0,1,95,52,+140,240,225,207,2,227,167,4,236,159,1,68,123,102,88,81,234,71,80,147,+65,224,131,2,0,125,225,85,1,64,31,1,85,32,172,162,228,17,2,90,+59,224,13,1,238,120,2,174,123,160,250,224,17,2,192,20,227,202,2,224,+48,8,224,51,10,224,57,3,227,188,3,224,29,17,224,65,3,135,35,195,+103,163,109,224,203,7,96,2,128,41,224,37,8,230,192,0,236,191,1,161,+209,65,102,1,49,50,115,68,137,194,73,217,1,95,49,72,15,68,224,0,+95,86,211,134,226,2,95,55,54,161,154,167,214,65,84,1,75,52,161,119,+224,159,6,68,101,1,49,50,109,33,2,49,50,53,244,173,3,128,1,100,+90,224,234,8,225,5,2,192,40,194,196,129,41,64,133,198,82,224,34,3,+224,62,0,99,227,128,120,224,34,3,64,18,229,231,1,242,64,0,163,45,+4,64,83,32,95,57,113,11,1,49,49,141,44,224,96,1,128,146,133,159,+147,149,224,100,6,100,202,105,44,160,17,2,95,49,49,100,203,192,107,225,+10,11,225,4,2,192,162,224,166,5,192,157,160,221,234,200,1,160,185,193,+22,132,93,0,56,230,165,1,96,61,96,147,96,209,102,230,64,211,214,134,+227,64,1,67,80,143,24,231,8,4,128,0,226,48,0,0,67,97,231,0,+50,175,186,235,248,6,3,64,66,32,82,64,214,122,24,64,0,173,247,128,+238,233,133,5,236,32,1,143,34,228,48,5,1,65,32,227,172,0,224,122,+1,143,62,226,112,1,161,21,96,21,228,139,3,128,207,254,81,0,228,57,+12,228,23,2,2,64,94,42,231,69,0,143,160,160,65,87,238,234,171,3,+163,127,138,103,160,9,131,32,231,217,3,1,95,49,151,142,96,238,100,98,+160,133,193,60,65,59,192,86,2,80,32,90,241,7,0,132,182,192,25,65,+31,0,85,96,42,130,129,3,85,32,75,51,64,2,160,11,224,53,0,86,+167,224,11,1,229,227,0,0,55,81,5,98,155,229,236,13,229,162,8,1,+78,111,76,189,3,105,110,105,116,87,218,4,102,111,117,110,100,85,197,187,+237,197,217,227,111,0,70,149,181,94,182,104,246,83,10,65,64,246,83,3,+5,95,52,52,50,32,35,65,126,64,62,176,246,0,54,169,246,0,54,96,+61,0,54,248,147,0,228,115,6,130,201,140,232,170,100,0,57,73,117,0,+57,96,44,192,68,0,49,98,229,202,117,163,119,64,108,0,54,209,141,114,+80,2,95,50,50,145,251,98,12,125,223,137,100,129,216,97,56,119,206,115,+90,0,52,128,7,65,81,248,75,10,196,8,130,206,197,117,133,85,65,150,+130,246,109,86,248,91,0,195,10,224,94,36,162,116,165,19,224,108,0,96,+176,143,181,162,5,224,107,4,96,106,227,122,0,103,127,0,54,128,224,195,+47,65,43,226,14,8,10,35,105,110,99,108,117,100,101,32,92,34,237,188,+0,64,47,2,79,32,35,78,15,238,175,1,64,103,235,167,15,7,109,104,+115,102,102,105,46,104,131,94,98,149,4,49,32,95,51,53,66,74,225,73,+24,150,236,224,245,6,224,13,0,100,117,192,36,224,46,2,224,10,6,164,+158,225,125,5,129,15,129,19,225,25,0,225,17,0,130,59,1,50,50,98,+105,228,78,0,224,212,1,31,115,116,97,116,105,99,32,115,116,114,117,99,+116,32,102,102,105,95,101,110,116,114,121,32,116,97,98,108,101,91,93,32,+2,61,32,123,64,239,228,122,6,192,84,67,192,224,77,3,4,123,32,48,+44,48,136,154,224,22,3,1,125,59,224,17,7,224,111,8,1,42,120,64,+11,96,117,1,32,61,128,125,96,52,228,177,3,234,200,6,24,85,110,105,+109,112,108,101,109,101,110,116,101,100,32,70,70,73,32,102,101,97,116,117,+114,101,225,160,0,2,50,50,56,122,235,227,144,1,81,238,161,178,64,29,+99,93,2,50,50,56,164,111,225,197,1,65,98,65,186,232,197,1,225,142,+1,133,43,160,5,193,231,0,83,99,112,0,83,66,50,64,63,72,54,229,+45,0,96,3,96,12,167,126,198,41,136,39,224,85,0,99,106,76,230,4,+61,61,32,64,35,166,116,231,77,5,232,10,1,243,114,2,117,176,2,50,+50,57,168,22,226,7,2,68,18,148,224,141,75,192,100,199,126,116,244,0,+83,96,15,165,255,100,56,232,13,0,212,97,97,49,225,121,1,5,100,121,+110,97,109,105,173,79,64,73,0,85,97,107,76,150,224,226,3,224,73,26,+6,119,114,97,112,112,101,114,224,73,7,68,233,192,73,225,24,1,224,65,+2,227,163,15,130,206,236,112,2,97,9,0,95,124,43,193,205,192,232,186,+209,193,210,138,136,72,111,239,177,26,224,97,0,194,40,104,148,1,50,50,+118,94,0,49,102,159,96,28,0,85,150,62,128,23,119,227,64,0,224,135,+12,226,106,11,128,19,225,58,3,246,55,8,242,130,4,128,47,196,115,224,+96,0,194,162,224,87,3,225,83,4,150,65,168,133,196,151,233,152,1,98,+229,225,138,4,0,66,71,251,66,115,185,128,246,98,0,225,255,3,225,185,+36,3,118,97,108,117,163,185,224,105,13,103,42,1,67,39,64,106,0,95,+105,146,192,245,224,141,7,224,17,4,224,142,6,226,234,1,104,193,133,121,+226,105,1,64,38,238,80,18,230,85,6,1,98,97,104,84,9,101,105,103,+110,32,105,109,112,111,114,174,22,254,23,11,99,138,0,51,167,157,0,65,+135,172,151,75,105,36,64,14,151,30,2,75,50,32,64,12,247,26,1,64,+1,223,188,224,13,9,231,61,1,254,44,0,0,58,130,110,224,105,2,67,+79,224,105,2,67,168,1,10,65,230,6,4,5,71,69,84,82,65,87,229,+165,7,11,71,69,84,84,73,77,69,77,73,76,76,73,224,27,7,2,97,+99,111,112,33,224,19,4,6,100,100,95,70,73,76,69,224,23,11,3,117,+116,102,56,224,23,8,0,115,144,28,224,19,4,1,116,97,224,19,12,0,+50,224,20,7,4,99,97,108,108,111,99,234,224,21,4,3,108,111,115,101,+114,71,224,21,4,224,171,9,2,101,120,112,224,18,7,4,102,108,117,115,+104,224,59,8,3,102,111,112,101,224,145,8,2,102,114,101,98,172,224,19,+3,2,103,101,116,224,60,8,5,103,101,116,101,110,118,224,21,7,7,105,+115,119,105,110,100,111,119,224,148,8,2,108,111,103,224,18,7,0,109,224,+230,12,6,109,100,53,65,114,114,97,127,76,224,23,6,0,66,225,129,11,+7,109,100,53,83,116,114,105,110,224,94,9,3,101,109,99,112,224,70,9,+4,101,109,109,111,118,224,225,8,1,112,117,224,225,9,225,194,10,3,115,+113,114,116,224,19,8,4,121,115,116,101,109,224,21,7,225,235,10,5,116,+109,112,110,97,109,224,122,8,1,117,110,225,94,11,5,117,110,108,105,110,+107,224,21,7,3,114,101,97,100,224,42,8,3,119,114,105,116,226,24,9,+5,112,101,101,107,80,116,102,127,224,22,4,2,111,107,101,224,22,14,3,+87,111,114,100,224,69,11,224,23,11,66,247,13,108,122,55,55,95,99,111,+109,112,114,101,115,115,111,224,82,8,224,34,0,1,100,101,224,36,21,2,+114,108,101,224,70,22,64,33,224,69,23,2,98,119,116,224,69,22,64,33,+224,69,19,64,235,4,95,117,105,110,116,227,205,8,65,29,224,25,14,192,+51,1,49,54,224,52,16,224,26,10,192,53,0,51,227,251,8,224,53,0,+224,26,10,192,53,1,54,52,224,53,16,224,26,10,64,53,224,212,16,224,+211,16,224,210,17,224,209,17,224,208,17,224,207,17,224,206,17,224,205,17,+3,117,115,104,111,227,135,9,129,3,224,26,13,64,53,224,52,17,224,51,+17,65,82,225,107,16,224,207,15,224,205,15,224,97,13,1,108,111,228,186,+9,128,98,224,25,12,64,51,224,50,16,224,49,16,1,117,108,224,102,18,+224,103,17,224,104,17,224,51,16,1,102,108,224,255,13,224,23,10,5,115,+105,122,101,111,102,225,25,11,160,25,224,100,11,192,26,224,27,11,70,206,+1,100,105,227,215,8,103,56,224,23,10,69,76,224,46,11,2,95,100,95,+229,167,11,1,99,104,224,44,10,127,241,224,20,7,4,103,101,116,99,119,+229,50,8,6,103,101,116,95,98,117,102,224,180,11,3,98,95,114,100,224,+27,17,1,119,114,224,27,11,6,110,101,119,95,109,112,122,224,144,8,4,+112,122,95,97,98,231,126,8,96,22,0,100,224,147,8,96,22,0,110,224,+22,12,1,99,109,232,69,8,64,22,64,197,224,47,12,64,24,1,115,105,+224,25,15,0,117,224,25,12,82,197,1,95,115,224,56,16,224,30,0,224,+61,14,229,194,9,64,22,2,109,117,108,224,22,14,1,95,50,233,26,10,+64,27,1,110,101,232,61,9,8,112,122,95,112,111,112,99,111,117,226,158,+9,64,27,1,115,117,231,113,8,64,22,5,102,100,105,118,95,113,224,104,+16,0,116,96,30,224,182,12,4,116,115,116,98,105,224,106,12,0,120,224,+231,9,5,119,97,110,116,95,103,129,161,240,71,3,224,0,94,75,105,0,+54,244,84,4,1,95,52,125,121,179,239,118,74,80,143,237,28,1,240,140,+1,1,95,49,80,187,160,32,0,54,91,218,157,161,240,173,1,64,94,147,+238,2,85,32,90,114,26,0,90,176,27,141,247,86,187,1,50,50,124,167,+143,4,96,10,128,5,96,60,144,24,219,134,80,119,77,229,108,94,208,104,+214,19,192,26,0,95,237,0,5,4,123,32,92,34,38,65,93,88,99,246,+176,3,224,34,1,5,92,34,44,32,48,44,92,78,67,89,1,114,95,96,+45,211,126,224,38,1,1,125,44,96,24,96,0,109,132,224,104,9,224,103,+32,224,98,24,193,22,224,106,21,112,181,128,68,224,39,11,64,112,128,39,+174,54,192,151,247,150,2,65,172,110,91,224,61,8,224,169,30,128,174,225,+184,2,65,183,142,69,66,68,83,212,64,7,118,26,2,95,49,54,111,35,+64,34,142,89,225,218,12,250,79,0,208,116,146,14,175,24,149,124,96,8,+151,121,1,50,50,81,58,224,189,6,225,201,1,97,36,112,225,3,55,51,+32,64,155,74,152,197,96,211,64,121,65,68,1,50,55,94,146,1,50,54,+66,226,224,17,4,0,55,64,49,122,217,239,116,7,1,49,50,121,243,224,+116,1,207,105,16,38,32,109,117,115,116,32,98,101,32,80,116,114,47,70,+117,110,171,168,78,254,240,92,15,2,40,72,115,128,40,0,41,193,89,224,+43,7,176,189,64,5,96,186,241,89,7,64,171,149,112,211,59,225,26,0,+162,76,96,244,97,6,160,43,129,13,227,63,1,147,9,65,143,97,149,129,+136,97,113,179,140,158,251,160,87,97,40,243,62,0,82,4,0,50,68,11,+207,247,225,145,6,5,114,101,116,117,114,110,162,144,96,42,222,104,226,194,+1,224,50,6,1,59,32,160,52,66,137,64,22,6,95,85,110,105,116,40,+115,162,214,250,103,12,2,79,32,35,88,71,225,21,0,146,245,227,144,2,+64,32,222,186,224,65,0,88,15,1,48,55,226,253,4,194,249,1,53,54,+150,72,100,218,1,53,54,91,57,68,151,161,58,224,110,6,185,46,90,47,+163,83,97,103,0,85,221,164,195,1,227,51,10,145,91,225,56,10,64,252,+1,116,111,162,204,227,201,3,64,92,66,141,224,49,8,225,33,35,64,122,+145,201,67,139,130,9,117,220,154,19,122,71,0,85,250,103,0,0,55,96,+223,64,120,249,233,0,65,241,67,236,3,49,51,57,56,224,131,3,98,199,+64,31,250,181,1,0,56,70,31,4,95,49,48,48,56,113,228,64,250,1,+10,65,227,127,5,99,81,184,45,64,34,0,54,224,92,12,12,80,114,105,+109,105,116,105,118,101,115,46,73,79,192,103,134,105,116,208,131,0,224,202,+0,96,179,180,218,192,31,244,130,0,224,244,9,213,4,64,29,0,85,226,+251,1,195,21,225,9,4,160,43,245,80,1,128,139,134,184,227,7,12,226,+203,0,163,9,96,93,68,203,225,212,5,229,208,11,225,215,0,226,6,5,+254,62,3,229,198,10,229,194,4,227,30,7,64,172,133,173,69,36,155,71,+101,105,163,216,2,67,32,60,161,64,132,13,247,254,3,96,21,161,79,103,+145,0,85,164,50,224,36,3,165,111,86,101,192,89,226,77,9,101,117,160,+32,64,57,226,108,7,96,68,224,211,1,229,81,3,226,20,2,192,18,128,+0,224,115,2,100,219,1,95,54,249,88,2,130,137,2,50,50,55,96,195,+184,139,253,189,12,165,228,225,87,8,17,78,111,116,32,97,32,118,97,108,+105,100,32,67,32,116,121,112,101,221,185,1,49,53,133,134,65,90,134,229,+164,119,229,252,17,226,207,2,4,70,108,111,97,116,116,230,246,135,16,224,+34,2,0,64,224,85,30,0,73,138,252,224,82,16,192,31,224,79,31,210,+74,224,80,16,224,32,0,224,81,20,3,68,97,116,97,96,75,96,4,112,+192,224,81,20,128,33,224,82,20,132,119,224,69,16,70,64,224,68,25,0,+83,116,10,8,46,73,79,46,72,97,110,100,108,151,244,225,22,16,194,119,+231,137,1,75,73,157,51,97,250,225,200,16,136,47,8,46,67,46,84,121,+112,101,115,46,128,70,64,35,236,35,3,3,67,67,104,97,236,56,8,1,+67,83,224,21,12,0,85,224,43,13,241,23,11,1,67,85,224,22,13,162,+10,224,42,5,224,20,11,0,76,239,185,10,1,67,85,224,21,12,5,80,+116,114,100,105,102,238,250,8,3,67,83,105,122,239,158,8,1,67,83,224,+21,12,0,76,224,110,14,224,22,12,1,84,105,143,246,237,82,10,67,149,+135,106,230,84,18,228,96,1,64,46,135,30,224,46,18,224,43,1,68,200,+231,197,13,64,9,1,95,116,235,83,1,232,152,9,224,43,1,8,40,105,+110,116,32,115,41,32,123,229,187,5,224,32,1,0,59,158,192,128,206,73,+138,103,70,169,171,4,95,50,50,52,54,128,6,137,140,160,9,75,248,5,+48,54,32,35,49,50,100,221,2,50,50,54,196,166,0,54,135,136,64,18,+139,4,0,53,103,124,64,31,3,10,65,32,94,246,35,10,90,0,64,37,+192,235,0,51,104,213,96,10,0,48,64,173,96,126,0,53,155,121,0,39,+102,76,192,23,198,187,101,108,78,52,160,19,3,32,95,51,54,192,34,101,+173,92,141,0,52,73,109,1,50,53,134,6,154,226,134,154,224,58,1,64,+31,137,4,96,232,0,53,105,172,0,53,74,245,1,51,53,170,96,224,26,+5,124,254,0,53,70,94,71,59,3,51,50,50,32,169,202,224,153,2,224,+156,5,97,43,64,35,235,87,0,192,168,1,95,57,128,160,137,12,224,30,+16,159,39,188,211,225,9,2,160,152,0,54,64,191,123,24,224,65,0,224,+222,1,126,178,251,247,0,224,245,2,0,54,96,7,1,49,49,224,165,0,+224,0,1,65,156,136,129,0,94,154,108,97,174,135,230,141,113,2,39,32,+95,79,162,64,70,0,49,98,25,97,11,3,55,32,95,50,75,27,160,66,+134,188,4,112,97,99,107,67,153,153,2,76,101,110,96,73,131,63,0,94,+179,8,96,18,163,35,5,56,57,32,75,32,95,98,12,192,7,0,95,71,+69,161,4,1,95,57,225,131,0,106,7,224,12,3,64,218,128,12,160,157,+98,175,66,73,125,244,160,163,96,245,193,14,2,49,48,52,192,30,0,95,+108,65,0,58,128,65,224,137,22,96,47,160,137,96,11,192,137,160,12,128,+137,64,12,224,137,1,2,50,50,53,98,145,224,138,2,158,139,201,137,2,+50,53,55,224,139,1,64,5,64,139,131,153,0,94,85,56,1,80,116,99,+52,64,37,96,18,153,213,96,18,0,54,96,18,174,207,109,93,0,53,65,+156,227,37,9,141,155,2,95,49,48,104,181,64,58,195,130,64,51,0,51,+126,198,72,123,236,84,0,64,71,68,26,128,163,97,44,174,223,162,0,224,+189,0,0,32,162,105,64,217,128,58,130,46,0,94,156,113,96,167,130,15,+0,94,91,98,96,15,162,6,244,220,3,96,23,222,24,3,95,55,49,54,+237,118,2,228,190,1,30,115,116,97,116,105,99,32,117,110,115,105,103,110,+101,100,32,99,104,97,114,32,100,97,116,97,91,93,32,61,32,123,229,185,+0,64,165,197,33,114,156,2,50,50,52,96,164,6,50,50,52,56,32,35,+50,170,91,224,90,3,1,125,59,101,24,224,20,5,224,104,5,10,42,99,+111,109,98,101,120,112,114,32,61,96,116,128,49,159,182,229,138,8,69,137,+192,47,5,108,101,110,32,61,32,192,45,224,153,0,241,77,3,106,177,2,+79,32,35,66,133,239,175,2,129,82,69,132,97,24,0,89,64,55,75,8,+3,85,32,95,49,96,209,129,237,95,53,224,7,1,229,39,1,69,182,206,+83,107,164,238,79,1,0,53,95,177,192,95,173,105,2,55,52,50,240,223,+1,241,238,7,101,69,76,5,0,52,160,161,64,56,130,148,64,97,1,75,+52,160,2,2,90,32,90,64,6,228,81,1,70,83,64,93,1,57,52,127,+254,0,52,130,122,5,67,32,95,56,56,55,71,28,65,140,64,23,211,179,+1,75,51,128,63,64,19,130,75,64,248,2,66,32,80,96,199,205,129,133,+108,0,67,105,43,225,4,11,225,12,0,161,5,96,0,64,18,140,235,1,+56,51,66,212,0,55,107,175,64,104,210,85,1,75,50,102,193,76,234,192,+15,160,211,224,1,5,224,225,1,224,230,0,207,12,0,75,224,46,10,224,+56,16,160,60,67,93,135,138,1,32,80,140,115,226,82,0,76,115,164,233,+2,54,32,35,111,86,195,125,135,172,100,52,198,249,128,14,163,56,0,35,+69,204,194,71,2,75,50,32,181,32,237,176,1,0,83,237,176,8,99,197,+237,112,0,224,25,3,97,67,109,132,237,224,4,65,189,0,85,128,140,160,+161,231,151,0,224,195,3,0,50,96,6,224,196,4,64,0,102,82,237,245,+3,96,101,102,106,224,62,27,2,85,32,83,128,144,5,95,49,54,53,32,+95,103,107,99,74,110,98,100,159,129,14,0,50,80,57,224,17,2,98,220,+1,52,52,96,5,86,138,2,49,52,54,233,114,6,64,9,169,42,128,44,+163,18,0,55,68,223,64,69,131,125,96,0,225,73,12,193,6,224,223,5,+96,21,66,35,161,139,224,34,10,101,163,224,34,4,225,78,9,1,49,48,+67,26,225,15,5,66,70,227,200,2,64,163,0,54,98,204,64,170,111,167,+111,64,72,193,0,49,101,205,3,95,52,56,53,73,213,96,101,65,217,96,+31,73,58,97,72,2,35,50,48,68,24,0,64,224,23,8,2,54,53,53,+64,89,98,71,224,24,4,4,49,49,49,52,49,112,215,3,95,51,52,51,+229,71,3,2,116,102,56,76,96,5,58,32,98,97,100,32,204,106,226,78,+3,0,83,197,69,64,147,96,238,1,56,48,137,105,164,191,0,35,200,96,+177,123,224,46,18,68,226,2,35,49,50,137,91,149,178,224,44,30,224,41,+32,131,84,133,43,3,50,32,95,51,120,251,160,168,67,116,224,27,22,224,+26,4,160,20,97,13,225,8,28,0,50,128,47,224,216,81,224,187,47,224,+184,22,178,234,224,139,38,224,111,12,203,212,0,67,64,74,64,39,66,230,+0,54,200,62,131,21,136,166,195,49,67,18,119,253,135,24,69,224,162,187,+131,12,107,203,70,44,0,54,68,15,128,18,105,38,227,0,4,160,24,99,+113,64,22,224,75,3,114,122,134,206,128,124,224,28,15,0,57,224,28,19,+0,49,97,221,224,49,7,164,241,224,137,9,131,189,64,214,224,71,8,64,+24,224,48,10,99,170,227,186,2,224,235,4,227,178,1,1,92,92,142,110,+73,16,192,148,225,184,8,0,49,85,123,97,185,129,144,227,30,5,128,59,+96,237,225,243,18,224,71,18,161,237,160,77,224,155,3,0,63,175,10,193,+254,192,107,65,39,224,20,2,224,129,29,160,115,133,70,160,56,228,192,6,+4,113,117,111,116,101,140,203,196,185,224,72,1,1,50,50,93,3,156,254,+128,74,107,154,64,0,89,106,233,47,2,66,137,7,10,65,32,80,32,35,+52,32,182,168,64,30,130,181,203,174,3,95,51,57,57,234,77,7,17,87,+101,108,99,111,109,101,32,116,111,32,105,110,116,101,114,97,99,80,64,15,+32,77,105,99,114,111,72,115,44,32,118,101,114,115,105,111,153,36,7,95,+52,48,56,32,95,52,49,102,71,96,169,224,89,0,1,52,49,79,166,91,+89,0,55,73,186,96,105,224,100,1,8,85,115,105,110,103,32,71,77,80,+230,247,0,239,126,3,1,95,56,70,93,174,3,238,137,5,1,55,54,74,+39,0,50,98,120,96,33,72,180,0,52,109,26,0,49,174,116,0,49,161,+201,238,119,0,181,58,74,6,0,49,134,172,76,74,0,51,96,181,1,95,+49,160,188,65,31,188,18,5,56,49,51,32,75,32,72,105,128,1,137,202,+192,13,224,1,19,0,67,128,105,224,0,4,224,53,44,224,50,41,224,47,+38,224,44,35,224,41,32,224,38,29,224,35,26,224,32,23,224,29,20,224,+26,17,224,23,14,224,20,11,224,17,8,66,54,162,230,224,0,4,66,55,+139,209,224,93,5,224,1,15,226,34,11,226,91,255,224,41,19,224,38,29,+224,35,26,224,32,23,224,29,20,224,26,17,224,23,14,224,20,11,224,17,+8,224,14,5,224,11,2,192,8,110,120,224,0,6,66,120,182,36,69,116,+0,55,159,50,0,49,116,59,70,110,96,15,0,55,91,229,102,129,192,34,+69,164,0,55,70,166,112,184,0,49,93,25,1,95,56,81,38,1,95,56,+78,153,69,124,224,77,0,64,39,229,184,6,88,4,7,32,39,58,113,117,+105,116,39,70,34,64,8,13,44,32,39,58,104,101,108,112,39,32,102,111,+114,32,64,9,133,213,224,73,2,0,51,85,180,0,55,90,106,2,95,50,+49,93,203,230,244,6,2,84,104,101,230,109,4,0,115,120,220,25,32,99,+117,114,114,101,110,116,108,121,32,111,110,108,121,32,119,111,114,107,115,32,+119,105,116,104,86,163,160,100,2,50,50,50,148,187,97,17,179,227,225,0,+0,1,56,48,77,172,64,233,0,56,114,63,128,227,148,255,224,33,2,2,+50,49,56,237,68,1,224,28,1,129,129,129,47,166,109,160,33,0,50,138,+97,96,30,72,217,244,226,1,64,26,71,146,224,220,1,4,46,109,104,115,+105,96,173,224,19,1,1,62,32,128,190,0,80,70,143,64,192,113,104,160,+203,205,167,65,252,233,105,2,0,35,149,195,225,206,5,70,240,97,86,161,+6,224,190,4,64,21,1,56,32,64,100,225,202,10,1,66,121,154,51,225,+66,3,129,69,64,13,176,34,1,95,54,87,186,96,223,129,46,167,47,108,+17,96,179,226,46,20,11,85,110,114,101,99,111,103,110,105,122,101,100,82,+163,2,109,97,110,187,114,224,82,9,194,238,81,114,96,10,71,119,144,126,+112,34,120,60,64,25,0,85,64,107,0,49,128,177,80,231,226,223,13,119,+241,152,82,232,224,5,8,65,109,98,105,103,117,111,117,115,192,144,189,20,+116,12,67,14,115,198,1,54,55,173,212,224,169,12,64,0,64,118,0,55,+81,239,64,8,81,16,1,56,56,106,227,112,25,0,54,129,59,0,52,223,+175,0,54,193,73,192,87,65,116,111,13,65,111,143,75,91,237,234,7,3,+2,105,116,32,96,0,96,9,169,127,105,117,0,56,130,112,160,147,175,147,+224,61,5,4,99,108,101,97,114,96,61,128,9,13,97,108,108,32,100,101,+102,105,110,105,116,105,111,110,224,70,0,228,57,2,0,50,86,96,105,92,+105,72,227,189,3,2,56,49,49,129,100,73,62,0,56,76,73,169,61,233,+82,0,0,49,85,197,201,82,169,130,1,95,55,153,188,225,63,12,224,173,+5,5,114,101,108,111,97,100,64,173,160,9,5,109,111,100,117,108,101,224,+166,0,227,172,5,100,174,227,195,9,163,219,227,194,19,1,95,56,113,75,+226,48,8,64,224,224,204,0,224,224,3,225,6,4,165,92,226,14,14,224,+209,5,9,100,101,108,101,116,101,32,100,32,32,192,9,225,124,0,3,40,+115,41,32,99,4,224,134,8,97,131,64,8,0,54,182,151,194,90,64,192,+66,105,128,26,0,52,84,191,226,110,4,66,96,120,62,225,109,12,224,153,+5,0,116,69,193,0,101,65,107,4,115,104,111,119,32,96,14,2,111,102,+32,100,11,228,90,9,227,252,12,224,81,6,4,107,105,110,100,32,98,171,+96,81,96,14,2,111,102,32,125,141,224,81,8,108,28,224,81,23,13,109,+97,105,110,32,97,114,103,115,32,114,117,110,32,96,13,101,245,7,97,114,+103,117,109,101,110,116,98,24,224,90,9,66,131,224,90,23,3,100,101,102,+115,131,86,96,172,166,97,227,27,23,0,50,115,9,225,248,9,224,91,5,+70,250,128,91,7,116,104,105,115,32,116,101,120,97,3,224,76,5,229,37,+0,100,150,64,91,121,13,0,49,77,216,100,120,176,84,153,233,132,46,228,+44,0,227,78,14,174,73,64,0,68,78,147,132,224,151,1,0,67,132,231,+3,115,58,94,42,120,83,128,0,8,101,118,97,108,117,97,116,101,32,64,+19,1,101,115,77,212,5,94,42,100,101,102,110,160,31,11,97,100,100,32,+116,111,112,32,108,101,118,101,228,60,3,2,94,42,34,110,78,64,183,231,+107,9,0,56,111,227,195,113,133,130,96,45,250,6,2,70,176,229,150,8,+0,95,65,225,0,65,65,243,101,141,103,100,248,28,3,1,49,50,65,25,+64,4,0,51,67,37,98,243,69,81,231,84,2,98,41,134,94,64,113,238,+238,0,224,161,11,228,39,14,1,50,49,111,79,103,121,150,8,250,27,0,+118,128,97,105,65,142,128,130,0,80,228,91,0,64,57,64,141,0,75,228,+150,13,230,149,10,1,49,53,91,7,64,103,0,50,154,219,0,52,133,125,+231,138,1,128,198,216,152,80,7,111,249,103,123,185,159,2,80,32,79,64,+109,240,154,1,231,65,4,199,69,224,13,1,0,85,224,13,2,96,25,245,+19,0,104,113,0,64,91,220,103,111,136,119,0,55,122,44,161,15,248,220,+1,128,18,64,184,69,42,1,50,50,100,171,96,172,248,220,2,0,75,65,+85,64,19,138,165,225,240,8,100,121,199,121,163,11,96,252,224,41,8,250,+209,0,161,147,225,139,3,128,98,137,246,224,49,1,74,166,1,95,105,67,+125,0,58,128,84,226,8,80,93,253,226,8,65,0,49,81,42,162,8,0,+48,248,123,0,128,228,69,139,226,8,51,225,250,64,131,195,153,43,225,249,+0,64,185,202,51,0,56,82,21,0,56,93,99,189,230,146,127,64,43,251,+118,0,64,220,64,19,210,166,1,95,57,114,38,96,5,64,23,131,188,226,+8,6,136,22,98,12,130,49,0,56,92,175,226,40,2,14,119,104,101,114,+101,94,42,105,109,112,111,114,116,32,83,108,69,12,46,73,79,46,80,114,+105,110,116,79,114,82,117,132,226,25,97,117,108,116,32,78,117,109,32,40,+73,110,116,101,103,101,114,44,32,68,111,117,98,108,101,41,224,30,1,1,+73,115,147,132,1,32,40,128,7,224,26,2,0,83,70,57,3,40,40,41,+41,101,10,128,199,195,165,226,99,13,161,103,1,32,83,108,57,75,208,1,+48,54,72,75,2,50,49,57,66,43,178,252,198,201,98,122,65,210,226,83,+7,1,64,90,133,64,69,0,0,95,202,159,65,144,0,90,66,63,156,164,+96,84,64,97,0,50,73,126,64,44,105,169,226,228,53,118,156,226,228,10,+66,1,168,119,72,179,192,26,222,46,224,86,0,227,185,16,70,10,97,55,+224,157,4,227,36,2,2,56,55,54,93,190,150,73,2,95,51,55,68,112,+237,109,2,224,42,0,0,80,96,205,148,54,64,72,180,72,224,61,1,224,+32,0,244,25,9,128,70,0,51,65,195,130,219,0,48,96,79,131,135,226,+102,0,193,24,94,100,64,192,65,23,152,34,160,202,221,200,108,168,99,150,+0,83,126,51,148,220,0,55,75,229,64,102,91,78,229,12,9,18,114,97,+110,115,108,97,116,101,58,32,110,111,116,32,102,111,117,110,100,98,231,221,+147,161,78,0,55,105,230,255,91,0,97,197,0,49,141,12,228,11,3,97,+96,228,3,3,99,218,130,3,163,203,159,188,80,89,130,82,0,57,255,190,+0,192,0,214,74,65,14,191,26,162,71,0,83,128,110,98,210,194,91,189,+171,64,14,96,86,196,87,193,89,129,108,99,247,196,141,131,21,64,76,64,+17,128,13,254,28,3,128,67,224,32,13,130,98,164,194,224,32,11,225,52,+0,160,135,252,244,0,192,24,0,85,64,155,99,56,128,165,253,165,18,5,+100,121,110,115,121,109,136,89,160,42,106,16,0,50,104,221,128,0,224,103,+8,96,161,0,85,225,251,31,65,247,6,32,112,114,105,109,111,112,161,247,+232,245,1,200,240,67,70,5,54,55,57,32,95,51,76,136,98,128,229,150,+0,175,31,255,68,5,86,195,129,125,2,95,52,48,66,243,1,50,48,202,+70,96,255,96,250,64,21,196,75,161,202,225,79,11,230,13,0,255,177,11,+237,121,1,225,1,3,96,21,0,85,193,255,224,116,5,2,49,51,54,170,+188,224,32,3,225,36,24,69,217,5,115,115,105,98,108,101,175,181,161,38,+0,49,196,15,0,58,130,202,70,59,106,47,152,124,203,88,129,183,96,24,+81,240,219,219,96,53,135,94,3,95,52,48,50,128,43,67,231,224,57,0,+0,50,66,27,137,245,1,95,50,98,33,1,52,54,161,74,64,59,134,252,+76,13,2,79,32,35,69,119,67,59,67,121,160,18,83,102,64,18,0,79,+224,18,2,0,53,128,18,128,22,236,70,3,1,67,39,172,222,224,43,0,+64,106,64,39,65,152,192,18,160,62,68,8,224,62,5,0,83,96,62,99,+139,160,43,68,255,64,43,67,236,192,125,0,51,128,18,67,148,192,37,160,+18,67,77,192,18,160,100,67,172,192,18,160,201,0,89,224,119,8,0,66,+96,119,0,66,224,119,2,0,57,160,119,72,109,192,62,0,50,128,18,0,+82,224,62,8,1,75,50,64,62,100,31,224,24,6,0,51,96,24,65,223,+224,24,6,0,52,96,24,69,131,225,64,7,0,66,129,65,225,129,2,66,+84,64,120,0,43,224,18,2,160,221,0,45,224,18,2,160,158,0,42,224,+83,8,91,150,64,84,64,7,224,28,8,1,114,101,100,28,2,114,101,109,+224,26,8,0,117,192,56,96,8,224,30,9,160,58,64,7,224,28,8,1,+110,101,124,2,2,110,101,103,224,26,8,179,71,2,97,110,100,224,26,8,+1,111,114,64,25,1,111,114,224,24,8,0,120,128,25,0,120,224,26,10,+2,105,110,118,64,26,2,105,110,118,224,26,8,2,115,104,108,64,26,2,+115,104,108,224,26,10,96,80,1,115,104,224,80,9,0,97,160,27,64,7,+224,55,9,2,117,98,116,85,233,96,60,160,11,224,36,8,6,112,111,112,+99,111,117,110,96,36,192,11,224,36,8,2,99,108,122,64,31,2,99,108,+122,224,26,9,0,116,128,26,0,116,224,26,9,1,61,61,64,25,68,162,+224,24,6,0,47,96,24,0,47,192,24,67,102,162,194,0,60,224,43,8,+0,60,96,43,0,60,224,43,3,162,60,0,62,224,43,8,0,62,96,43,+0,62,224,112,9,1,117,60,64,24,0,117,224,93,9,0,117,128,94,0,+117,224,95,0,224,26,2,0,62,96,25,224,101,9,0,117,128,102,0,117,+224,103,10,1,111,114,98,46,1,111,114,226,46,9,0,99,129,168,0,99,+225,167,10,1,102,43,64,25,0,102,195,50,224,24,2,0,45,96,24,195,+56,224,24,2,107,16,0,102,227,62,9,1,102,47,96,24,0,47,224,24,+9,129,140,0,102,225,141,10,0,102,129,142,0,102,225,143,0,224,26,2,+97,55,0,102,225,55,9,0,102,129,55,0,102,225,55,10,0,102,97,55,+0,102,225,55,9,0,102,129,55,0,102,225,55,10,0,102,163,130,64,7,+224,28,9,82,65,96,29,114,74,224,30,8,2,114,101,97,97,117,96,8,+224,30,8,3,105,116,111,102,64,29,64,7,224,28,8,2,115,101,113,64,+27,2,115,101,113,224,26,11,1,117,97,131,146,96,9,224,32,8,224,31,+0,224,30,13,2,115,99,109,121,159,64,7,224,148,9,160,28,64,7,224,+28,8,0,117,160,28,64,7,224,28,8,1,114,110,96,205,1,114,110,224,+204,9,3,73,79,46,62,129,98,128,9,224,32,13,224,31,0,224,30,11,+4,114,101,116,117,114,113,218,224,12,0,224,38,11,0,112,77,230,160,37,+96,11,224,36,11,7,115,101,114,105,97,108,105,122,116,241,224,15,3,224,+44,11,1,100,101,224,46,7,224,17,2,224,93,12,1,116,100,146,131,192,+11,224,36,14,1,111,117,192,168,128,12,224,38,14,1,101,114,99,157,224,+12,0,224,38,11,7,103,101,116,65,114,103,82,101,97,128,224,15,3,225,+34,12,7,101,114,102,111,114,109,73,79,193,38,192,15,224,89,12,0,99,+192,82,0,99,225,240,9,2,97,105,115,97,19,96,8,224,30,8,4,99,+97,116,99,104,64,30,96,8,224,30,8,235,81,1,128,9,224,32,8,4,+110,101,119,67,65,143,121,1,76,101,97,80,224,17,5,224,48,8,4,112,+97,99,107,67,128,30,64,45,224,14,2,224,42,19,160,91,224,17,5,224,+48,8,2,116,111,73,130,87,96,8,224,30,10,1,80,116,97,166,96,8,+224,30,10,1,68,98,99,144,96,8,224,30,10,2,70,117,110,224,64,0,+128,11,224,36,8,5,65,46,97,108,108,111,97,142,160,10,224,34,10,3,+99,111,112,121,128,33,64,9,224,32,10,0,115,162,198,128,9,224,32,10,+196,178,128,9,224,32,10,3,119,114,105,116,160,66,96,10,224,34,10,133,+208,64,7,224,28,8,2,98,115,43,102,82,64,7,224,28,12,0,46,192,+29,0,46,224,30,10,128,88,64,7,224,28,10,134,43,64,7,224,28,10,+102,45,1,98,115,230,46,9,1,98,115,134,47,64,7,224,28,10,100,148,+1,98,115,228,146,9,1,98,115,132,208,64,7,224,28,10,165,40,96,8,+224,30,10,66,109,128,31,64,9,224,32,10,1,117,110,224,34,1,128,11,+224,36,10,6,114,101,112,108,105,99,97,129,142,224,14,2,224,42,10,4,+108,101,110,103,116,99,141,192,11,224,36,10,3,115,117,98,115,130,133,192,+11,224,36,10,4,105,110,100,101,120,128,35,96,10,224,34,8,192,9,64,+35,224,21,0,224,36,7,1,116,111,192,34,128,9,224,32,8,3,104,101,+97,100,192,34,192,11,224,69,9,2,97,105,108,224,71,0,160,11,224,143,+9,0,112,136,196,0,112,232,197,10,1,112,50,97,166,64,7,224,28,10,+1,110,101,135,220,64,8,224,30,10,0,102,133,230,96,8,224,90,11,0,+98,122,72,96,8,225,71,10,1,50,102,162,33,1,50,102,224,123,9,5,+73,79,46,102,111,114,97,255,160,10,224,34,11,2,116,104,105,99,171,160,+10,225,30,9,2,104,110,117,101,97,96,8,224,65,13,4,114,111,119,116,+111,224,68,0,96,13,224,40,11,3,121,105,101,108,192,107,96,11,224,36,+11,5,110,101,119,109,118,97,198,174,160,13,224,118,12,2,97,107,101,224,+41,2,192,14,224,42,11,2,112,117,116,224,41,2,160,13,224,40,11,68,+174,224,41,2,192,14,224,126,12,1,114,121,224,129,7,224,17,1,224,48,+14,224,135,5,224,16,1,224,46,14,224,141,6,224,17,2,225,134,14,6,+101,97,100,100,101,108,97,101,189,224,17,5,224,48,17,4,115,116,97,116,+117,98,100,224,18,6,224,50,8,1,105,115,169,22,96,8,176,115,224,0,+128,81,63,0,54,152,60,219,243,185,87,149,124,149,102,242,14,6,1,32,+61,83,44,0,110,151,211,114,9,224,44,0,0,50,246,102,10,86,192,250,+32,4,2,95,105,116,105,2,64,27,252,39,0,224,65,2,242,128,9,250,+132,20,64,70,152,1,224,98,4,160,96,150,227,3,95,49,57,55,86,152,+2,48,49,50,64,5,0,56,146,75,2,49,51,54,128,36,251,37,0,0,+56,86,72,0,66,88,42,0,56,96,41,1,49,57,86,124,0,51,151,103,+147,60,184,85,64,54,149,155,6,95,56,49,51,32,75,32,85,192,149,245,+148,16,64,172,1,56,52,180,60,64,47,96,75,224,139,2,1,49,51,151,+177,128,132,120,140,129,135,211,203,186,47,64,80,115,223,83,185,0,57,210,+142,64,4,64,53,146,253,214,108,150,88,224,59,1,122,107,128,10,64,213,+0,85,83,59,83,58,116,74,0,80,118,82,0,79,96,169,193,86,0,51,+175,71,128,4,4,90,32,90,32,83,182,6,1,85,32,96,14,0,67,64,+48,161,220,65,31,4,51,32,95,49,51,224,229,0,224,109,2,2,95,55,+48,115,245,85,51,96,33,0,35,64,232,224,34,2,119,15,1,51,52,152,+106,2,54,54,50,192,72,4,66,32,95,52,52,88,106,2,53,55,55,117,+193,0,49,96,13,0,55,65,241,91,14,91,32,128,41,120,14,192,0,247,+9,0,184,246,160,101,148,69,0,56,181,197,193,31,194,234,0,49,88,190,+96,59,224,17,6,96,9,151,8,161,188,0,54,180,102,226,100,2,86,50,+3,105,116,105,118,104,5,224,25,3,1,99,97,139,158,224,19,4,2,108,+97,115,100,49,224,20,3,3,100,97,116,97,224,19,8,154,233,224,22,9,+2,114,105,118,171,96,224,23,4,102,67,224,17,3,1,101,108,224,125,9,+4,102,111,114,97,108,107,8,224,21,6,2,101,105,103,103,75,224,22,3,+0,105,108,205,224,17,4,123,212,224,21,8,224,57,9,2,110,102,105,104,+162,224,20,8,224,123,8,96,21,101,165,224,21,5,4,115,116,97,110,99,+224,191,8,1,108,101,224,125,8,156,144,224,21,7,5,110,101,119,116,121,+112,224,22,8,143,239,224,17,3,4,112,97,116,116,101,142,215,224,22,3,+1,116,104,140,149,224,19,4,224,80,10,124,237,64,20,229,207,18,66,54,+132,252,68,28,0,90,67,243,157,216,64,24,196,249,250,55,0,163,154,154,+58,0,39,87,174,192,17,117,77,99,48,0,83,90,75,248,43,6,154,87,+0,55,67,63,0,54,158,183,160,79,0,51,91,224,227,24,1,64,56,224,+55,1,99,71,68,218,64,35,2,95,49,57,96,42,0,64,224,131,1,96,+114,250,177,1,164,86,254,140,2,64,195,221,120,128,150,157,128,120,12,3,+67,32,95,52,89,39,2,95,52,54,195,120,195,242,192,34,64,240,188,10,+160,117,252,61,4,2,52,56,55,101,137,0,39,220,120,65,57,252,125,2,+1,95,54,123,141,96,0,193,49,69,192,69,181,156,126,0,56,131,200,225,+59,0,224,91,0,165,76,121,179,221,180,93,212,1,50,49,96,82,65,208,+97,212,153,49,161,58,224,93,5,96,85,2,95,56,53,64,188,0,55,159,+135,253,25,4,129,30,134,123,96,103,65,250,65,111,132,217,128,239,129,124,+64,40,198,127,164,178,192,102,1,95,52,93,66,0,51,126,166,225,68,1,+225,102,1,64,84,164,163,64,10,70,151,64,77,220,50,98,91,187,166,229,+29,0,102,77,255,20,0,155,194,224,24,3,224,25,11,155,229,96,0,224,+71,0,224,29,3,224,61,2,224,33,2,224,42,3,224,69,6,224,37,11,+224,2,4,224,40,1,224,113,17,224,23,0,224,44,2,64,189,224,87,19,+224,48,9,225,31,8,128,34,224,5,2,64,2,224,49,31,224,17,6,224,+53,3,225,189,0,224,1,9,224,94,5,225,27,23,224,2,3,224,56,5,+224,57,4,225,9,24,225,6,5,225,249,16,224,61,15,224,125,9,224,65,+42,224,68,11,225,40,2,224,55,12,224,2,7,224,64,9,224,134,6,101,+49,224,86,3,224,145,22,224,86,15,225,184,9,224,1,7,0,83,232,158,+3,0,35,132,127,224,0,6,224,195,13,224,2,17,225,103,12,224,138,40,+133,221,224,0,6,224,108,13,224,2,21,224,138,57,233,178,2,224,0,1,+225,177,3,192,108,161,182,224,96,6,224,177,19,224,89,8,224,143,13,224,+1,1,224,153,5,230,79,0,224,0,2,226,209,12,224,2,19,224,131,54,+234,114,0,224,0,2,224,116,25,192,2,227,82,15,224,131,37,198,110,224,+65,31,224,114,11,224,47,19,225,119,8,72,137,224,0,7,224,223,19,224,+2,9,224,126,52,231,179,0,224,63,15,224,115,28,224,106,13,128,1,224,+112,6,237,46,3,128,0,224,97,13,192,2,226,228,19,224,118,34,228,143,+9,224,115,31,224,118,52,227,240,9,227,75,14,195,240,224,92,8,224,41,+7,224,80,5,224,130,11,128,1,229,3,6,227,223,8,227,220,11,228,117,+28,224,129,5,224,124,13,225,7,8,224,126,7,230,156,1,96,44,225,19,+7,225,13,16,227,228,9,224,122,9,224,124,7,112,178,224,0,0,224,202,+3,231,31,10,136,183,224,14,15,224,154,1,224,110,3,192,142,224,19,3,+225,126,6,227,228,1,224,73,3,64,38,1,64,67,64,134,3,95,49,51,+51,143,225,0,52,112,11,64,179,112,143,108,77,80,75,128,18,228,46,4,+224,127,1,64,65,235,159,1,64,0,193,70,128,106,145,241,75,28,96,99,+236,199,0,224,69,3,235,90,12,234,83,8,224,253,7,1,67,32,64,80,+1,56,52,160,233,1,64,35,236,153,5,224,88,17,160,152,224,83,0,192,+43,231,48,6,224,46,7,64,14,224,40,12,160,210,224,37,0,224,34,10,+129,58,210,159,224,25,3,229,245,5,0,73,192,13,173,218,64,5,233,77,+2,96,126,65,82,224,220,5,97,116,64,16,1,64,80,225,59,1,226,228,+8,130,62,160,236,98,93,224,248,1,224,25,2,77,125,177,136,165,48,225,+208,3,224,74,10,226,203,11,65,10,192,139,224,18,2,226,44,5,2,95,+51,54,224,192,1,226,55,19,242,38,0,109,198,224,85,5,179,108,224,16,+20,77,143,224,16,4,143,167,1,50,48,240,88,2,31,92,34,109,104,115,+47,83,121,115,116,101,109,47,67,111,110,115,111,108,101,47,83,105,109,112,+108,101,82,101,97,100,108,13,105,110,101,46,104,115,92,34,44,49,55,57,+58,53,80,129,224,136,6,163,85,225,117,1,224,233,17,224,138,5,238,121,+18,224,41,9,226,206,10,225,227,0,228,89,0,64,5,225,144,8,227,45,+8,192,62,130,181,192,65,128,8,130,204,66,70,227,220,5,226,150,1,224,+2,0,239,252,11,224,120,3,224,67,4,64,45,64,35,116,250,0,56,84,+156,235,34,1,225,255,2,96,128,160,5,64,136,224,132,3,245,115,2,6,+32,95,56,48,32,95,55,97,8,112,168,160,71,64,53,128,31,148,147,245,+60,3,224,42,3,64,41,64,230,226,96,12,224,0,1,224,199,0,145,108,+224,238,10,161,98,97,64,224,171,2,97,177,128,36,99,86,224,163,3,196,+44,209,5,210,115,160,54,64,219,224,243,1,128,43,128,5,224,48,5,224,+55,1,100,58,164,63,224,6,3,225,133,10,241,164,2,192,87,129,251,193,+111,227,123,18,224,168,2,128,44,225,162,9,224,235,5,224,181,11,224,174,+5,224,127,0,166,226,160,175,162,143,224,147,1,128,107,134,175,2,95,52,+50,67,36,160,6,225,130,1,231,38,0,128,15,247,136,5,225,3,12,226,+170,2,227,135,1,3,50,49,56,54,151,149,224,234,1,228,193,10,98,137,+96,252,194,135,96,246,236,210,0,229,68,2,2,64,64,85,244,26,0,225,+58,1,224,241,2,161,75,227,81,5,1,85,32,237,30,1,227,31,8,226,+63,3,231,93,6,224,95,12,225,12,2,226,204,9,224,105,2,224,32,2,+227,223,15,225,51,31,97,195,243,198,9,211,226,225,55,15,224,220,8,224,+22,2,225,196,4,96,115,228,151,1,224,171,9,226,139,5,228,126,8,162,+60,164,50,130,116,64,179,225,148,2,101,14,192,35,134,213,129,246,100,95,+148,94,244,88,3,128,43,160,72,128,2,167,9,225,223,0,97,18,103,102,+160,120,227,135,3,160,83,225,207,1,224,93,7,245,64,0,131,22,192,5,+64,166,99,38,64,185,227,213,14,97,134,224,95,7,64,97,160,8,200,126,+224,169,0,224,180,7,130,123,136,33,224,228,6,166,113,160,118,224,117,1,+224,169,7,211,159,227,245,2,227,180,4,161,18,196,56,195,117,128,219,128,+81,197,220,192,200,229,221,0,215,80,96,199,155,79,138,200,224,135,6,225,+43,1,192,80,162,114,192,83,227,77,4,193,21,160,155,230,142,7,228,88,+14,225,211,3,229,82,3,165,72,166,142,230,87,19,130,128,224,13,3,65,+120,129,31,227,57,6,230,90,2,91,199,93,251,194,227,3,95,52,48,49,+64,18,1,51,32,64,199,232,240,1,4,94,40,32,94,40,200,199,157,99,+161,61,251,167,0,165,242,128,135,0,82,224,10,1,224,178,10,195,136,228,+166,7,235,251,12,192,20,128,200,228,63,5,175,165,224,26,5,233,22,4,+97,178,70,7,247,248,0,134,41,67,101,107,120,167,244,249,203,3,64,23,+249,216,1,101,10,96,4,161,164,162,194,64,210,102,93,125,11,94,38,166,+94,98,26,107,181,0,51,89,94,4,64,64,95,53,56,96,24,226,123,1,+231,192,3,98,48,64,207,164,94,0,58,152,37,122,144,160,123,225,97,5,+64,32,158,135,130,134,89,166,96,20,158,102,3,95,51,56,56,160,255,64,+20,0,54,128,20,234,10,2,0,52,233,170,6,68,70,2,52,49,52,66,+206,129,123,77,199,122,18,0,35,64,4,3,95,51,52,51,234,250,2,12,+103,101,116,82,97,119,32,102,97,105,108,101,100,130,17,225,94,3,1,95,+52,138,106,64,122,155,86,7,94,71,69,84,82,65,87,32,64,17,155,79,+5,85,32,75,50,32,65,153,8,1,56,51,128,159,0,54,219,120,1,95,+55,66,87,64,25,153,153,64,25,126,30,1,54,55,103,195,0,56,95,145,+64,30,153,143,3,95,49,49,49,96,90,153,80,226,108,0,224,208,1,2,+95,50,49,96,204,195,10,224,246,17,81,5,160,242,1,57,57,129,116,224,+247,1,1,83,97,93,216,6,32,99,97,99,104,101,32,64,247,3,95,49,+49,56,65,231,64,159,126,185,1,95,55,187,71,96,115,2,55,56,32,192,+16,1,58,50,95,96,64,158,64,131,64,143,66,45,3,50,49,55,55,96,+201,64,215,64,201,2,50,49,54,97,5,1,55,54,128,22,161,206,5,49,+48,55,57,32,85,228,254,2,98,74,229,15,4,161,133,128,1,64,215,123,+141,64,0,192,33,204,102,224,30,5,227,125,2,224,23,3,129,41,251,213,+0,131,142,97,125,224,10,3,70,8,64,228,0,49,97,7,2,50,49,54,+172,35,192,22,0,48,68,116,3,49,48,56,55,125,54,192,13,124,201,1,+50,49,139,134,224,46,2,2,50,49,55,100,184,224,41,1,131,255,65,8,+162,194,225,8,8,225,14,1,225,16,8,225,22,1,225,24,1,225,28,8,+230,86,17,224,44,11,224,40,7,192,37,225,39,1,225,111,11,199,72,0,+66,225,93,2,232,229,2,161,96,130,154,157,67,225,62,0,188,177,193,30,+130,91,225,93,7,201,64,225,152,3,225,164,10,193,94,225,157,16,0,54,+130,145,226,192,0,160,32,2,49,49,57,224,44,14,2,49,49,50,233,108,+1,65,165,131,237,225,165,7,226,120,1,224,255,38,131,93,0,49,181,16,+224,21,6,0,48,135,78,226,130,7,193,133,224,22,7,160,45,64,165,132,+129,224,165,4,224,139,47,225,21,5,96,29,64,108,234,210,0,225,106,15,+96,13,103,60,224,13,5,128,0,64,164,165,19,96,164,0,67,160,139,70,+38,64,27,165,21,227,12,9,226,148,4,227,226,5,225,135,51,192,161,128,+78,224,21,5,193,17,225,40,2,226,101,25,224,53,1,225,34,51,197,253,+129,6,224,71,7,129,240,64,39,134,22,128,39,0,80,225,239,33,226,245,+27,224,116,7,168,176,160,22,1,50,49,147,173,224,83,37,0,58,133,71,+224,178,0,224,99,4,1,50,49,148,26,64,36,166,51,192,36,0,56,71,+127,128,30,64,29,134,58,145,217,64,23,0,53,98,63,64,25,0,54,96,+25,224,255,2,128,97,96,27,131,193,161,16,64,111,103,38,4,32,95,55,+52,57,77,22,0,53,169,239,232,60,5,136,111,85,241,160,30,69,53,192,+60,2,95,55,53,103,96,0,54,194,113,239,17,7,64,27,136,54,70,238,+160,219,131,163,64,135,1,95,51,69,252,128,38,64,94,64,29,131,28,11,+73,79,46,115,101,114,105,97,108,105,122,101,71,255,64,30,72,108,18,97,+100,100,95,108,122,55,55,95,99,111,109,112,114,101,115,115,111,114,96,30,+130,47,3,85,32,75,52,64,2,0,90,224,1,4,0,75,226,143,0,160,+128,162,52,75,52,67,139,6,95,56,48,53,32,95,56,118,217,160,221,96,+23,65,90,1,53,54,85,71,4,66,32,95,55,57,131,255,0,53,65,245,+0,75,65,240,160,37,172,16,2,58,50,49,74,13,97,124,64,38,78,9,+0,56,65,188,0,56,72,186,96,30,201,212,104,126,0,64,232,127,6,13,+42,42,42,32,69,120,99,101,112,116,105,111,110,58,104,129,96,52,129,234,+168,216,160,174,1,52,51,64,14,64,91,0,53,203,32,224,204,7,0,53,+97,145,193,233,224,25,3,0,52,174,56,205,202,224,88,1,64,70,128,230,+2,56,53,51,137,31,1,95,56,66,27,224,165,1,2,46,104,115,244,237,+0,132,122,225,45,1,128,109,96,64,128,10,0,56,75,168,128,254,129,227,+0,53,96,133,160,179,97,85,225,69,0,3,64,95,52,57,64,23,68,242,+64,60,203,150,162,173,224,163,4,64,255,1,64,95,167,11,224,31,7,64,+102,72,124,224,92,6,75,114,224,0,2,65,89,0,54,225,89,0,90,22,+83,99,0,49,66,185,1,49,53,65,1,0,51,154,42,64,39,166,248,4,+56,49,51,32,75,107,179,145,60,2,95,56,52,128,200,64,35,130,210,245,+118,0,247,139,2,64,80,0,49,64,201,1,83,32,66,41,192,61,224,7,+3,77,200,172,128,64,14,243,63,5,64,19,5,67,32,95,57,53,55,195,+115,1,50,49,99,169,194,71,172,62,225,163,1,13,99,111,109,98,105,110,+97,116,111,114,115,58,94,42,97,174,68,131,169,145,237,41,2,225,9,0,+131,114,1,80,32,94,249,132,71,64,97,224,208,14,129,229,100,252,128,30,+226,1,2,97,229,66,96,2,95,49,57,65,95,241,138,5,193,192,0,89,+165,160,226,152,5,1,50,49,65,214,160,96,69,61,227,96,5,193,48,192,+81,196,105,192,121,130,7,107,240,0,55,103,163,235,241,4,226,218,0,225,+53,19,2,112,105,108,76,2,14,117,115,101,100,32,98,111,111,116,32,109,+111,100,117,108,140,13,64,164,194,66,225,166,1,224,249,18,246,98,2,226,+163,11,67,86,129,139,160,64,96,163,0,85,98,242,241,106,4,145,109,226,+17,7,237,1,4,224,233,8,224,225,13,17,116,111,116,97,108,32,105,109,+112,111,114,116,32,116,105,109,101,32,64,0,96,220,64,96,110,131,65,38,+3,51,57,32,35,146,106,105,94,0,57,98,56,224,70,1,0,109,228,1,+1,129,149,239,125,4,251,168,2,128,140,65,203,64,7,143,147,1,95,56,+116,18,64,102,124,96,0,48,69,255,98,210,131,75,209,93,66,130,168,2,+206,31,1,56,48,114,248,68,82,111,45,110,71,96,40,133,206,226,87,18,+246,223,1,72,28,224,158,1,64,45,1,83,32,239,215,2,226,83,5,65,+73,89,170,225,180,1,211,33,226,154,4,1,83,39,192,121,1,80,32,97,+244,98,29,146,182,129,31,117,107,243,33,1,96,24,97,215,129,238,1,95,+49,78,63,1,95,55,145,181,128,237,0,50,240,65,0,128,33,253,42,1,+129,57,2,50,49,52,240,79,1,66,76,134,253,70,235,79,121,96,21,134,+111,0,85,231,3,2,64,21,134,80,128,138,229,188,13,162,96,0,55,65,+249,1,95,57,101,8,113,3,4,48,32,95,57,52,145,77,64,29,82,78,+0,56,79,25,64,140,164,93,193,231,65,58,67,206,226,132,8,17,67,97,+110,110,111,116,32,102,105,110,100,32,112,97,99,107,97,103,227,95,7,163,+5,225,141,7,230,155,0,0,52,168,73,1,95,57,161,215,64,212,0,54,+96,212,230,167,2,3,112,107,103,34,100,201,64,153,226,70,4,81,210,64,+60,144,133,64,67,143,156,1,51,57,72,72,64,180,169,64,226,73,3,0,+55,173,94,187,79,226,221,2,128,11,2,95,56,48,97,142,128,13,246,40,+0,161,101,228,167,29,167,177,231,175,7,0,56,233,119,2,231,6,5,75,+6,225,96,8,0,91,64,10,129,82,227,213,3,1,52,50,73,104,249,191,+0,163,81,65,113,4,79,32,79,32,35,65,37,66,187,132,180,4,79,32,+35,57,51,251,36,1,96,107,128,70,224,107,5,132,75,69,51,229,34,7,+226,94,20,2,32,95,57,83,216,224,71,1,200,84,128,53,68,47,230,89,+8,1,95,57,67,230,216,42,99,199,96,82,227,174,4,224,98,0,242,38,+10,225,102,5,166,213,229,84,27,161,126,229,84,14,0,32,149,53,225,89,+1,242,53,7,65,76,83,215,193,76,96,71,224,12,0,230,0,4,64,129,+72,11,230,226,2,205,214,224,231,182,246,217,1,234,113,9,105,125,1,95,+57,140,125,167,72,118,170,199,72,160,79,1,50,49,149,30,225,254,15,227,+89,26,227,49,13,226,197,1,115,252,0,100,226,204,7,234,73,4,134,57,+0,67,102,203,0,57,101,130,0,95,75,163,119,125,4,95,51,50,50,32,+135,132,64,0,68,77,233,70,0,232,174,41,224,172,23,104,161,224,170,5,+227,117,37,3,46,104,115,45,64,68,213,228,131,122,229,185,16,233,17,3,+101,194,3,111,117,110,100,172,168,229,188,2,202,206,225,239,22,1,50,49,+171,61,225,240,3,0,48,76,237,225,59,0,135,255,103,161,107,153,0,49,+66,109,235,153,0,65,65,135,22,133,187,128,51,136,10,103,8,64,110,0,+58,128,26,229,208,0,97,15,229,212,1,5,57,52,32,95,52,51,96,78,+192,188,224,184,5,225,73,0,230,125,0,0,57,75,44,128,0,224,40,2,+227,169,1,157,140,189,146,225,241,30,102,90,234,160,7,225,125,6,6,112,+97,114,115,105,110,103,161,111,192,0,168,202,97,246,148,221,224,148,1,104,+96,250,230,5,224,143,7,204,87,128,18,1,95,57,110,219,235,41,24,64,+138,1,101,100,236,90,2,112,192,214,30,224,152,6,192,2,128,157,233,123,+7,96,13,224,161,0,251,142,1,233,138,8,162,217,225,61,2,228,251,1,+217,164,1,49,48,82,13,1,95,56,153,104,0,95,88,141,201,83,97,122,+98,214,128,10,224,208,5,194,212,7,97,109,101,32,100,111,101,115,98,222,+12,97,103,114,101,101,32,119,105,116,104,32,102,105,160,29,193,125,161,203,+133,8,130,250,160,14,0,79,158,243,154,4,231,14,1,225,20,14,221,38,+224,25,10,193,211,226,173,17,64,0,225,237,4,224,2,3,230,59,4,228,+15,6,65,175,0,55,211,14,197,26,2,49,48,55,227,164,3,1,57,49,+64,218,132,192,224,0,2,227,69,1,224,1,1,157,255,224,31,17,106,252,+224,31,18,64,1,224,229,21,224,56,18,233,46,8,1,49,48,128,233,224,+0,3,130,60,226,140,9,224,70,2,184,75,224,88,3,224,41,3,224,128,+9,224,29,5,225,193,14,225,202,1,225,3,22,226,203,0,229,41,9,129,+155,0,52,95,103,0,75,231,79,1,224,0,0,226,1,16,226,10,4,227,+248,22,1,49,48,121,175,227,249,24,9,116,121,112,101,32,99,104,101,99,+107,227,255,1,232,17,2,2,48,55,55,100,9,67,127,224,52,1,0,45,+64,0,160,44,224,187,8,225,54,20,225,94,2,226,57,49,224,97,20,64,+2,235,210,0,229,237,4,242,59,2,245,224,36,224,0,4,224,180,15,64,+1,227,54,3,224,43,23,224,228,24,224,230,19,225,69,1,224,88,9,225,+1,3,187,104,224,80,10,248,121,4,224,83,3,224,74,9,224,2,4,224,+80,4,224,31,10,224,94,3,224,79,8,192,85,226,4,2,224,30,9,128,+118,224,103,3,224,102,16,224,36,0,229,51,17,128,41,128,103,109,190,224,+8,12,231,219,14,227,82,7,0,49,107,93,227,82,24,6,100,101,115,117,+103,97,114,231,79,3,131,70,243,176,0,224,0,4,196,40,232,112,13,224,+5,9,225,0,1,228,5,6,64,0,102,198,225,1,4,234,144,17,64,0,+225,117,1,138,156,224,19,6,234,168,15,2,100,111,110,175,227,224,116,9,+231,68,5,224,79,2,224,77,6,0,44,224,64,0,128,30,236,135,6,178,+164,192,29,231,223,7,0,115,172,189,64,31,231,187,4,224,60,4,224,57,+10,1,32,43,160,119,224,53,16,224,50,16,224,161,12,237,35,6,224,0,+6,128,100,227,19,0,96,203,254,95,0,224,8,27,225,225,5,234,22,1,+96,26,233,59,17,1,95,55,122,88,129,85,96,17,82,113,233,62,1,3,+95,56,52,56,224,225,2,10,73,110,116,101,114,97,99,116,105,118,101,225,+85,0,1,95,52,81,72,226,50,8,96,120,140,127,96,10,99,3,225,104,+11,3,108,111,97,100,205,121,233,94,18,225,102,2,174,143,160,38,225,88,+16,228,100,3,225,44,6,235,51,0,128,14,225,61,6,1,64,67,196,15,+138,152,228,25,0,199,152,224,13,0,1,49,49,244,63,2,164,106,68,15,+80,199,242,115,3,83,186,0,50,105,123,160,165,250,67,8,224,137,1,240,+23,6,192,194,64,27,224,94,3,72,19,115,238,128,37,81,210,142,138,132,+129,84,84,228,69,2,128,187,224,33,0,224,46,4,64,0,65,245,0,55,+65,245,192,17,224,16,7,224,32,8,0,83,64,169,70,141,85,124,212,255,+212,252,193,15,180,188,64,192,79,53,0,49,255,66,6,253,86,0,0,51,+179,99,2,85,32,75,192,32,224,247,4,229,199,2,224,23,2,196,231,160,+120,112,54,128,62,2,95,49,51,148,150,121,121,110,15,160,0,224,171,11,+249,142,1,170,178,224,10,4,224,201,4,65,121,192,0,224,248,11,202,111,+161,4,7,32,67,32,61,61,32,64,35,129,246,64,84,143,33,245,214,5,+225,203,4,193,2,64,204,172,205,1,57,54,237,102,0,78,240,162,67,78,+224,222,42,7,57,55,48,32,95,53,49,53,64,4,64,43,0,57,97,103,+64,44,156,185,67,39,96,7,0,54,116,249,64,66,189,5,0,53,87,90,+2,95,54,49,72,218,128,53,155,134,224,186,0,80,56,2,64,95,53,75,+96,0,53,111,138,128,37,227,142,1,2,101,111,102,131,187,64,197,3,95,+51,54,51,64,84,0,50,226,216,1,64,111,0,54,224,111,6,1,50,48,+146,132,99,28,119,107,192,53,96,247,92,227,228,119,4,3,77,97,105,110,+96,100,0,79,64,128,1,57,56,224,31,7,0,109,192,31,164,6,64,115,+219,187,0,50,192,116,3,49,57,55,51,237,250,8,135,120,224,152,0,1,+49,57,66,224,170,17,96,18,64,158,225,89,9,129,113,1,49,57,92,230,+5,49,57,55,55,32,35,112,211,64,11,74,42,96,37,2,95,50,48,86,+25,192,31,130,225,192,13,137,198,224,250,5,3,67,39,32,79,96,47,93,+55,128,200,131,183,224,194,15,3,119,104,101,114,229,136,1,138,44,225,96,+10,194,208,224,107,3,193,104,225,163,1,188,199,81,115,64,239,1,64,67,+224,9,30,224,49,21,224,79,33,0,67,160,9,2,95,50,48,121,222,1,+95,49,192,172,110,182,1,52,57,64,215,78,156,2,95,49,54,86,146,97,+13,129,126,225,19,3,3,100,97,116,97,129,212,2,50,49,49,131,73,0,+50,75,191,128,242,224,82,1,224,92,10,0,49,122,103,224,86,13,5,110,+101,119,116,121,112,162,46,2,50,48,57,99,188,226,0,4,0,54,103,47,+224,87,12,1,54,56,64,37,89,126,128,5,64,146,194,236,0,56,93,220,+1,49,48,64,248,0,54,100,23,1,50,55,65,8,96,28,244,93,5,130,+50,69,44,0,50,70,135,71,32,236,12,0,224,227,13,224,217,3,104,142,+224,217,11,224,214,28,1,50,48,196,118,224,85,3,0,57,127,47,224,85,+12,138,3,193,136,202,208,136,101,226,239,2,224,13,2,176,158,224,176,0,+182,228,128,94,224,9,2,64,39,192,113,224,119,9,5,102,111,114,101,105,+103,132,12,224,147,18,103,227,194,112,224,38,6,4,99,99,97,108,108,128,+37,224,26,8,2,97,112,105,224,63,0,67,100,73,66,224,35,6,4,117,+110,115,97,102,195,149,224,37,1,2,50,48,53,161,160,1,50,48,64,117,+193,55,1,50,48,78,65,225,96,4,226,164,11,225,212,13,113,201,225,6,+11,3,99,108,97,115,153,89,65,213,134,71,161,222,228,205,13,225,239,0,+1,49,50,65,120,1,95,53,110,242,96,31,97,122,225,166,12,71,13,97,+69,117,138,128,214,225,159,1,1,50,48,85,180,224,32,9,224,123,4,96,+124,229,30,2,228,162,1,163,42,96,184,0,54,125,22,96,78,226,226,16,+156,149,226,140,13,5,110,115,116,97,110,99,226,230,0,129,106,224,87,1,+161,121,226,143,19,0,55,97,59,226,123,3,228,116,4,4,101,102,97,117,+108,162,90,225,243,1,229,142,1,99,238,205,135,230,87,0,1,49,57,68,+24,225,14,4,96,131,75,127,0,51,98,46,157,101,224,104,1,1,40,41,+194,152,0,49,192,71,161,18,5,57,56,53,32,95,54,115,7,198,125,64,+230,225,94,5,225,60,15,0,50,106,199,224,219,13,228,31,4,170,95,226,+185,5,110,238,96,23,192,80,0,85,97,86,96,192,224,83,12,5,112,97,+116,116,101,114,163,165,1,50,49,85,55,225,216,17,0,54,84,137,64,65,+231,113,3,224,77,16,226,184,2,161,118,225,2,5,160,182,228,211,3,227,+103,24,86,61,225,248,15,4,114,105,118,105,110,94,112,227,89,13,227,173,+3,73,191,224,69,12,1,118,105,198,178,0,48,135,176,69,206,160,155,227,+16,1,141,90,224,65,13,226,225,13,130,100,82,54,129,229,2,48,56,57,+114,187,2,54,54,48,160,78,195,100,130,216,129,96,224,5,3,226,8,13,+224,24,6,1,114,111,169,71,226,34,1,231,216,12,224,54,6,5,110,111,+109,105,110,97,229,105,14,6,112,104,97,110,116,111,109,165,70,224,113,8,+11,101,112,114,101,115,101,110,116,97,116,105,111,224,67,0,228,90,6,72,+212,159,210,233,23,3,67,199,108,21,207,8,67,113,225,184,8,233,121,11,+199,12,233,107,9,124,12,96,21,227,226,27,66,240,143,37,233,150,11,143,+1,76,68,0,32,140,110,96,34,0,49,105,18,140,138,0,79,160,89,0,+50,123,57,110,101,66,16,1,48,52,116,144,0,52,185,141,239,15,2,224,+202,8,1,57,52,225,75,2,1,60,45,161,61,224,213,15,175,147,235,16,+3,100,223,224,213,5,229,26,15,234,163,2,128,56,131,152,244,199,0,225,+3,13,238,243,5,111,78,73,11,65,55,239,82,0,96,0,65,228,157,105,+96,93,169,77,132,255,120,193,109,199,137,85,186,17,64,50,156,96,0,85,+74,238,109,177,3,64,67,32,60,187,142,224,18,6,64,241,224,18,6,65,+96,237,35,4,132,232,100,197,1,85,32,237,63,6,131,101,160,27,2,95,+54,56,82,16,193,255,128,235,238,39,6,224,44,17,224,42,4,103,165,192,+42,0,75,125,35,193,82,0,67,224,174,5,64,22,237,210,5,224,58,3,+161,221,146,13,160,108,224,116,2,109,212,224,90,0,65,58,157,103,129,182,+2,80,32,35,70,232,161,198,193,170,0,58,133,251,160,37,2,80,32,35,+103,183,0,80,110,122,70,103,67,145,229,42,19,139,228,0,48,108,157,65,+211,159,106,230,26,23,229,248,4,0,48,69,62,163,180,133,248,229,247,8,+64,140,175,7,224,140,9,2,50,48,57,66,106,233,118,14,166,14,230,143,+15,232,13,3,160,138,224,126,13,0,54,96,126,97,174,232,123,5,164,150,+232,140,5,224,139,9,112,78,75,134,106,79,225,82,10,229,250,0,159,95,+71,148,0,48,224,168,2,5,83,79,85,82,67,69,165,128,233,121,3,1,+57,53,169,106,130,74,101,38,165,197,233,37,6,234,12,5,64,121,170,4,+224,177,13,179,26,192,38,99,233,64,21,160,91,224,132,4,232,21,0,229,+152,5,235,121,5,225,125,9,0,97,170,247,1,49,57,182,168,0,83,192,+47,233,223,17,138,200,230,168,1,225,55,1,66,249,224,97,7,2,104,105,+100,199,242,224,178,13,169,141,240,12,5,107,88,226,146,4,128,42,224,107,+21,8,113,117,97,108,105,102,105,101,100,161,165,230,224,6,77,88,130,66,+231,110,0,239,91,20,225,146,10,225,224,1,92,170,250,19,0,114,233,217,+100,96,65,229,67,2,2,95,49,57,70,109,134,204,105,254,178,180,2,50,+49,50,130,21,1,57,57,99,189,193,8,64,104,96,237,227,80,10,128,51,+224,50,0,236,1,10,224,45,6,141,78,179,63,224,26,9,234,35,25,160,+106,224,144,24,235,13,22,128,129,224,176,10,225,165,8,145,91,2,90,32,+90,115,255,64,17,136,152,67,38,212,123,64,7,197,61,134,209,0,90,128,+21,192,50,134,179,103,103,1,48,57,160,171,66,220,0,53,65,151,160,108,+100,17,135,178,230,157,11,128,31,0,90,161,203,140,98,96,0,64,95,133,+216,2,95,53,48,64,206,229,12,4,88,198,64,34,80,98,192,130,235,12,+23,108,237,233,87,9,228,61,15,2,95,51,52,64,80,0,56,116,110,235,+55,48,229,177,15,64,85,235,83,2,224,117,2,1,51,53,107,17,241,105,+5,166,251,239,41,12,237,102,27,228,239,3,149,232,241,247,0,192,168,65,+77,135,10,227,177,23,235,190,1,0,49,240,110,11,4,115,116,111,99,107,+235,38,0,224,44,3,164,110,235,114,4,242,197,2,224,47,8,235,162,10,+2,97,110,121,240,73,1,226,235,6,1,50,49,79,213,226,235,8,65,99,+5,10,65,32,75,52,32,64,12,0,54,128,12,0,51,87,36,64,15,132,+174,1,75,50,118,228,64,16,131,25,0,75,64,34,96,15,235,176,13,135,+34,66,217,193,33,66,94,96,16,230,151,5,193,119,67,73,226,51,1,242,+198,0,238,28,6,97,152,96,30,144,245,96,226,0,50,168,237,245,155,6,+152,192,208,146,226,211,4,64,183,131,177,0,85,250,78,3,245,178,23,245,+175,11,143,209,235,17,8,140,171,0,80,114,252,66,178,96,165,234,67,0,+217,94,64,25,64,129,2,95,49,52,73,23,66,123,2,49,56,57,123,33,+87,129,236,17,1,64,176,132,77,120,181,138,2,248,187,0,224,2,1,70,+16,128,169,224,1,1,134,46,7,95,49,53,54,57,32,95,56,108,150,224,+36,9,64,1,68,182,128,0,224,82,3,224,2,7,224,36,0,166,121,254,+218,22,192,152,219,191,128,19,170,224,192,29,232,126,0,134,130,235,250,2,+220,95,245,100,2,188,230,203,59,129,108,224,2,3,224,104,2,161,1,128,+16,96,74,254,205,1,128,149,128,39,64,33,91,46,75,149,0,54,65,193,+97,102,101,204,160,9,236,34,9,0,51,150,172,165,192,0,83,64,79,157,+89,2,95,49,50,120,70,224,32,0,238,14,0,64,66,137,78,109,251,224,+0,5,224,175,1,129,200,224,79,0,98,31,124,31,74,226,206,64,0,55,+109,236,128,0,225,255,1,226,5,3,225,182,9,251,152,0,67,121,1,54,+56,128,130,225,22,1,3,83,32,95,52,75,238,154,8,64,172,65,74,193,+129,1,52,54,93,113,97,119,96,14,0,55,69,162,253,50,5,224,153,7,+96,56,0,52,96,181,64,114,99,8,128,59,101,23,0,52,188,68,224,172,+7,226,212,1,224,72,1,224,204,4,224,25,1,206,236,96,21,254,55,0,+224,224,31,219,221,224,207,0,251,233,3,224,219,5,224,134,1,158,196,4,+64,95,53,54,53,129,33,130,38,66,82,65,215,186,141,128,9,128,18,69,+15,80,102,120,79,2,56,57,51,98,206,64,67,0,79,68,199,227,232,0,+96,149,226,26,5,161,60,160,140,64,154,100,40,128,36,93,157,224,42,0,+98,197,64,100,1,57,48,195,229,224,106,4,193,25,255,154,6,15,66,97,+100,32,71,65,68,84,32,114,101,115,117,108,116,32,230,108,2,160,47,70,+245,68,231,0,56,98,187,3,95,49,50,54,69,132,135,246,64,13,96,28,+232,150,0,202,127,172,55,128,0,68,189,168,171,72,145,3,95,51,51,57,+224,53,0,133,128,96,149,0,79,155,147,129,12,162,117,97,107,128,131,168,+105,224,194,8,1,58,58,96,176,225,153,0,128,45,128,167,65,97,91,185,+229,73,0,0,95,75,128,192,123,0,58,128,7,105,32,0,89,103,195,132,+18,96,245,0,57,73,118,163,220,161,10,0,52,102,140,207,90,222,54,228,+234,1,0,95,214,113,74,14,255,25,1,160,61,65,41,1,57,57,96,229,+0,52,224,145,1,224,69,2,224,63,8,126,168,195,70,224,62,12,224,44,+3,222,143,128,0,82,109,129,161,65,253,64,233,175,199,246,226,6,230,250,+4,174,242,230,231,5,103,157,96,130,224,20,3,243,64,0,224,23,3,234,+137,9,143,116,1,50,49,87,20,242,199,7,1,45,62,200,165,192,73,224,+99,5,245,18,1,224,29,0,242,116,4,224,25,1,196,221,224,11,0,192,+8,255,253,3,65,3,240,62,16,246,80,12,224,9,11,234,39,0,225,183,+2,132,121,196,112,96,168,196,244,0,66,83,252,0,67,64,4,161,177,193,+80,193,67,161,27,96,7,102,216,192,15,224,135,30,160,117,224,86,11,96,+216,0,50,124,169,96,252,0,54,96,252,0,83,234,169,2,224,68,0,0,+52,72,117,233,126,4,194,62,145,52,224,40,0,71,34,82,130,67,47,64,+232,0,80,130,163,161,3,96,250,133,61,227,255,3,235,126,4,224,195,10,+169,250,242,18,36,0,49,81,211,235,197,8,160,186,132,240,131,30,224,227,+1,129,146,64,125,147,57,124,176,235,14,8,65,46,100,169,224,167,13,2,+50,48,57,109,158,140,23,64,47,139,16,224,47,26,0,55,128,47,171,48,+226,131,9,2,50,48,57,140,1,76,177,162,14,64,48,138,169,190,121,1,+49,57,75,94,64,6,0,49,128,78,138,22,227,155,4,0,57,134,130,192,+18,1,64,80,81,79,0,51,64,91,172,205,227,75,8,97,171,64,77,206,+82,242,153,19,208,245,2,55,32,35,184,252,241,81,8,0,58,128,133,224,+74,14,226,83,5,237,113,10,70,113,0,48,65,197,64,12,154,193,1,50,+48,123,244,239,187,9,64,106,244,162,17,132,126,0,48,176,102,1,57,52,+101,63,231,113,0,224,77,13,132,36,237,219,1,66,69,225,220,16,185,60,+194,84,0,48,113,77,227,190,15,192,59,131,46,114,195,228,33,8,192,67,+161,233,224,15,1,226,167,5,109,101,226,71,26,160,69,64,48,162,216,224,+48,12,129,31,0,56,109,227,96,62,64,41,1,54,48,149,48,0,50,252,+208,3,4,85,73,100,101,110,117,42,247,55,11,138,243,100,33,173,236,171,+222,139,31,0,54,66,29,1,95,52,72,243,235,30,10,137,33,89,10,1,+50,32,192,30,98,151,96,159,224,187,16,245,247,16,0,50,97,7,1,50,+48,67,42,224,24,3,2,50,48,55,66,194,2,50,48,54,238,109,5,160,+107,227,111,4,153,85,64,6,0,52,129,27,205,134,239,249,11,224,97,0,+247,16,11,229,190,15,247,17,50,224,83,14,124,54,229,105,15,240,179,22,+156,106,64,118,239,4,3,4,105,110,102,105,120,219,180,224,45,3,0,57,+222,134,224,45,8,0,114,240,179,10,2,49,54,54,240,227,10,96,46,128,+45,239,166,5,241,207,11,226,147,12,3,100,105,103,105,226,146,11,97,126,+194,146,0,75,109,231,112,152,185,60,82,67,128,237,242,77,11,65,28,160,+32,224,33,8,170,239,160,91,194,190,224,36,0,160,0,228,94,4,224,64,+12,240,225,7,0,48,193,78,230,212,2,227,247,7,249,206,1,0,80,160,+71,121,168,97,243,66,183,187,83,194,62,128,12,101,76,0,54,238,160,5,+131,103,138,207,64,63,133,69,240,84,0,230,63,1,130,195,0,54,135,223,+205,49,65,76,237,71,1,239,124,0,233,126,1,64,68,145,3,205,221,224,+30,3,228,26,0,192,14,112,125,160,74,96,56,224,16,0,149,105,224,67,+2,182,235,233,131,4,253,120,0,230,214,3,165,101,233,127,3,107,148,203,+153,224,8,0,224,91,0,112,59,160,159,225,2,5,160,21,0,66,133,234,+226,168,6,224,29,2,233,68,3,245,174,0,224,169,2,0,39,131,160,105,+35,174,186,233,57,0,103,78,247,184,5,137,92,241,0,3,240,251,3,160,+115,253,139,6,96,101,198,93,167,92,238,204,9,65,242,166,234,225,71,2,+224,242,2,64,166,66,204,237,4,2,232,102,3,229,60,9,178,17,225,70,+5,255,93,2,224,18,0,255,99,10,121,206,64,132,192,221,224,218,22,76,+223,161,152,96,201,0,54,160,201,206,128,160,138,241,223,0,180,115,142,160,+81,93,224,17,0,129,133,229,45,1,229,46,5,231,220,4,0,56,176,175,+224,50,8,234,104,3,242,48,2,154,165,176,48,101,10,71,147,224,83,12,+225,13,5,247,116,7,232,66,40,80,124,224,8,1,65,32,250,119,29,224,+9,29,236,67,2,226,16,2,68,112,248,67,18,192,185,103,152,181,200,226,+66,1,127,29,193,13,225,247,5,241,18,2,233,138,13,0,83,98,18,160,+38,64,34,0,54,72,200,224,54,0,250,61,0,252,135,1,1,50,48,188,+106,103,74,131,85,231,63,3,104,166,254,48,6,69,146,102,11,248,76,5,+104,30,236,134,11,80,119,161,245,224,89,0,64,73,0,48,158,141,0,48,+108,126,224,100,10,136,173,230,22,5,224,100,16,219,22,233,1,16,184,35,+224,194,6,2,50,48,56,136,72,224,126,3,1,50,48,105,151,128,109,224,+197,19,2,49,51,48,230,56,0,224,92,4,114,204,227,40,3,224,52,9,+108,30,224,52,4,149,244,224,51,13,0,54,68,12,225,35,10,128,197,225,+35,16,165,119,224,194,5,231,72,7,64,111,137,231,224,93,7,174,251,225,+231,2,227,4,2,230,21,3,226,142,13,165,113,131,16,227,235,4,90,64,+251,103,20,227,35,2,0,53,103,178,249,17,9,193,186,227,35,6,1,50,+48,198,21,0,95,250,35,2,0,48,131,8,241,119,5,1,46,46,233,108,+11,193,44,239,74,10,65,44,139,128,114,101,64,14,252,239,10,96,128,136,+128,2,55,57,32,64,15,174,76,237,208,6,86,30,0,58,96,35,235,210,+14,192,243,173,173,0,53,164,214,227,160,5,74,224,2,50,48,55,198,168,+64,8,64,84,251,161,19,224,9,11,228,199,0,1,50,48,117,75,70,215,+139,172,2,50,48,54,98,69,64,25,203,116,161,41,1,50,48,86,184,226,+79,7,64,130,239,137,6,65,177,243,31,21,1,50,48,138,47,230,235,8,+1,95,53,64,12,150,69,134,226,64,159,224,219,47,194,58,224,219,48,174,+59,224,201,1,225,181,9,226,254,1,75,13,64,72,145,161,226,141,0,107,+44,64,47,254,130,4,0,111,246,110,0,230,75,4,91,92,1,48,53,162,+233,118,216,232,70,0,232,64,13,83,116,106,220,119,225,225,82,12,1,49,+54,130,47,96,209,238,227,19,4,81,117,97,108,68,96,152,238,227,19,96,+151,106,168,238,203,3,74,171,224,7,3,97,135,255,189,1,224,249,8,238,+232,0,169,25,64,12,105,183,152,46,2,52,48,55,240,179,5,192,0,64,+195,131,148,231,151,2,232,54,4,228,157,15,1,50,52,190,149,132,89,237,+138,4,0,102,128,147,196,100,132,149,64,41,224,9,3,231,70,0,229,109,+3,224,74,7,3,116,104,101,110,164,103,192,77,224,76,49,2,101,108,115,+184,150,224,154,1,228,15,4,111,208,224,237,13,114,248,224,237,22,130,110,+99,113,246,163,16,242,44,9,230,83,9,64,7,109,156,2,80,32,35,95,+41,69,26,64,22,165,25,224,160,14,233,12,4,224,160,3,1,108,101,110,+213,224,161,1,189,189,224,206,14,129,111,193,33,64,119,217,117,224,119,13,+226,6,16,1,99,97,161,110,232,40,4,224,39,9,0,111,225,64,7,97,+21,0,58,132,94,228,47,4,1,49,57,70,29,187,36,230,211,2,160,208,+142,25,235,167,2,141,144,226,204,2,235,115,0,231,34,3,103,79,100,230,+135,112,136,66,160,96,232,206,0,226,202,3,224,61,1,2,50,48,54,164,+142,224,255,21,224,217,3,231,51,7,64,233,180,123,241,108,13,233,76,0,+141,46,128,146,96,54,237,121,0,232,77,1,64,36,157,238,230,66,3,86,+11,161,247,228,209,10,98,221,128,81,0,54,224,81,0,232,92,9,225,117,+3,224,232,3,3,119,104,101,114,227,88,1,98,177,245,19,12,0,54,236,+61,0,225,168,7,110,156,97,127,96,173,106,142,237,13,4,0,39,76,151,+92,56,96,75,100,195,69,16,99,252,227,204,2,227,72,6,65,8,99,72,+225,88,15,226,68,3,1,49,50,96,184,234,14,5,70,59,160,31,168,211,+224,120,10,64,105,165,68,111,42,96,200,0,89,248,215,0,223,2,222,126,+184,219,64,41,110,125,240,88,3,161,133,180,60,225,193,3,0,48,232,4,+25,140,141,97,223,224,39,20,138,64,96,40,239,27,7,198,107,143,128,167,+6,64,169,104,66,65,16,96,59,145,178,168,93,109,39,224,186,0,244,217,+9,237,239,1,232,115,31,232,135,20,228,124,2,109,154,2,95,50,48,97,+79,224,25,10,205,178,64,35,237,159,53,65,231,226,7,5,192,13,236,217,+11,173,156,237,148,14,0,50,181,209,160,19,237,123,20,2,50,48,53,230,+120,4,237,123,2,74,250,128,69,120,156,0,53,171,232,224,147,5,224,82,+13,239,55,7,192,82,0,53,139,8,192,82,64,97,224,82,7,227,149,3,+194,14,167,135,130,161,224,87,8,229,90,3,130,121,225,58,18,64,58,0,+51,65,121,0,53,188,57,0,49,111,125,224,85,1,228,119,3,8,95,112,+114,105,109,105,116,105,118,229,102,0,211,42,225,140,3,0,56,72,224,224,+150,4,208,38,186,119,228,52,7,166,238,233,211,12,5,115,116,114,105,110,+103,233,211,10,97,217,246,36,1,169,130,131,19,64,149,231,207,0,65,1,+135,207,65,59,248,34,3,65,193,68,91,1,56,52,211,182,3,95,56,52,+56,236,189,4,96,54,133,244,67,169,64,79,96,102,149,187,65,215,237,12,+13,173,54,226,14,11,138,32,135,89,235,103,2,64,117,0,52,128,117,193,+174,130,247,64,103,133,199,192,129,97,198,160,129,171,15,228,184,2,67,57,+229,241,10,224,16,33,243,99,0,226,92,7,209,228,224,108,6,103,245,106,+197,182,41,64,167,224,85,0,224,23,40,244,214,4,225,54,0,229,61,0,+177,129,212,84,165,219,160,6,226,251,2,224,185,8,230,181,1,232,166,0,+224,92,1,71,241,164,113,96,53,239,121,11,224,64,10,193,188,128,64,144,+244,239,180,12,166,37,229,250,3,224,205,3,244,12,9,249,84,8,243,142,+10,218,130,231,81,41,233,85,9,86,163,224,253,34,224,250,2,64,60,128,+136,224,249,16,224,247,3,224,244,0,224,236,3,233,159,8,69,176,195,193,+131,226,96,21,203,167,96,23,100,76,163,6,231,4,7,244,234,2,235,69,+12,0,55,73,52,64,112,101,119,220,43,207,93,241,170,0,244,181,18,0,+55,94,216,129,195,0,55,98,184,172,18,229,59,15,236,20,15,237,74,5,+224,55,9,236,30,6,97,45,224,200,4,136,38,96,28,229,89,7,65,250,+241,172,15,225,172,4,1,60,45,128,100,209,189,1,56,53,64,157,97,156,+0,58,129,23,146,17,1,52,55,82,33,65,46,242,33,3,98,135,0,50,+104,1,64,29,177,80,224,116,11,226,94,0,242,33,23,78,235,131,84,0,+53,128,84,0,54,228,231,9,235,116,6,233,160,12,98,240,132,105,248,209,+3,129,183,248,206,10,154,63,0,49,99,202,144,145,64,131,164,248,241,235,+21,96,166,133,168,0,85,233,208,1,2,67,32,60,166,172,0,83,224,18,+5,126,18,230,209,4,96,17,181,159,102,210,192,121,224,39,6,134,55,160,+38,0,90,224,38,3,80,211,220,36,64,141,245,42,0,134,239,73,145,231,+69,6,100,47,149,221,64,114,1,85,32,224,165,6,65,134,224,48,4,136,+36,224,48,0,160,135,224,162,13,224,37,10,225,40,0,131,223,226,153,13,+234,37,13,88,124,64,23,107,116,224,19,3,96,79,228,25,4,97,14,132,+25,65,201,160,24,96,26,129,171,64,12,70,121,89,136,64,36,221,156,71,+93,64,82,132,110,66,139,219,103,237,240,2,99,194,0,57,237,241,7,100,+42,226,237,9,159,251,255,249,1,226,69,8,3,83,32,95,51,151,3,0,+52,130,244,96,121,163,97,225,30,9,224,113,2,73,176,227,0,4,225,75,+9,255,194,2,111,85,227,123,0,242,151,0,224,35,2,1,50,48,70,62,+241,74,17,231,53,9,73,60,0,52,106,85,64,224,135,128,160,9,64,196,+164,8,246,72,0,133,101,91,85,64,29,0,54,224,29,0,0,52,68,84,+64,22,227,225,6,74,46,227,225,23,138,82,227,155,23,64,95,131,12,236,+245,149,65,50,192,30,236,245,24,64,73,140,248,128,9,103,83,184,197,242,+233,0,237,19,17,98,144,192,19,160,191,230,63,6,65,92,2,10,65,32,+71,76,0,83,106,25,166,251,0,52,83,25,191,133,64,121,161,209,175,68,+235,199,12,6,108,105,116,101,114,97,108,139,200,228,100,11,224,18,5,201,+20,228,168,5,245,194,1,101,190,64,12,144,0,76,193,98,192,223,185,224,+35,18,0,51,199,70,0,83,64,207,229,144,2,224,90,19,1,49,51,170,+95,228,231,10,224,149,22,2,49,50,57,192,149,129,84,196,145,68,108,228,+107,1,228,130,2,65,15,128,21,64,207,226,180,6,248,30,2,121,229,227,+192,2,2,56,52,56,227,184,9,210,189,224,41,18,0,61,224,41,1,98,+19,226,5,6,67,183,232,69,28,192,71,232,69,0,0,54,77,113,200,69,+64,91,224,70,28,192,184,232,140,2,173,24,96,70,0,54,224,70,18,170,+234,230,57,14,93,85,226,241,0,198,57,65,68,251,34,2,69,2,135,51,+64,63,232,195,12,233,157,3,4,102,111,114,97,108,98,213,224,175,2,0,+55,67,138,165,94,76,140,228,179,7,0,50,193,88,231,4,17,195,228,133,+97,100,64,68,107,2,95,49,49,122,239,64,69,124,166,71,15,68,64,234,+227,11,128,55,224,40,1,230,142,4,0,50,132,80,64,133,163,182,100,17,+64,15,182,245,225,167,24,1,58,58,224,247,7,79,119,225,167,0,194,208,+248,221,5,235,72,4,0,83,116,104,174,116,67,137,174,131,239,234,7,129,+191,233,24,1,136,89,211,22,100,135,68,148,128,20,99,134,230,42,8,235,+206,5,224,134,2,72,2,96,176,71,210,225,249,1,165,118,96,121,1,50,+48,67,112,64,34,227,9,16,128,34,161,141,1,50,48,96,177,64,48,162,+243,137,129,1,49,57,66,117,69,173,154,242,1,49,57,101,139,64,39,162,+212,229,58,12,4,76,73,100,101,110,108,60,250,214,19,225,72,1,0,67,+65,72,79,81,97,83,1,95,49,167,70,0,54,109,165,0,52,100,12,251,+117,0,2,50,48,48,134,176,251,10,2,164,195,144,168,129,95,250,237,0,+128,173,208,142,64,233,0,50,100,148,139,97,146,147,132,253,230,216,2,239,+148,4,255,231,1,250,67,13,238,11,9,77,170,102,133,66,28,85,35,133,+9,136,138,97,214,65,122,0,53,64,73,64,74,96,54,64,29,72,15,160,+23,160,191,64,76,166,210,247,111,15,236,36,0,160,148,0,49,115,22,64,+171,233,255,0,224,37,12,104,103,245,218,5,224,40,11,82,235,224,77,8,+232,224,0,1,54,49,225,254,0,204,138,236,180,1,65,246,0,66,99,54,+65,95,96,14,98,5,96,121,5,66,32,85,32,64,90,162,4,220,185,0,+49,70,84,0,35,86,219,228,246,0,128,12,97,102,3,50,48,48,57,97,+129,132,9,224,187,6,97,43,203,84,1,95,56,66,67,0,85,96,45,64,+192,64,27,132,37,197,54,64,22,128,42,0,52,72,75,98,17,4,95,52,+57,53,32,99,161,2,95,53,48,160,54,0,48,230,208,9,246,143,51,0,+57,214,38,239,55,9,4,109,111,100,117,108,180,167,172,52,64,9,229,40,+11,0,57,78,38,201,197,197,81,0,57,138,226,224,51,29,252,99,10,224,+45,5,0,57,138,251,168,68,224,26,9,224,194,12,5,112,97,116,116,101,+114,175,255,234,100,0,224,144,22,224,71,10,2,116,121,112,245,176,0,170,+195,224,176,22,1,50,48,194,179,224,77,9,5,100,101,102,97,117,108,176,+204,192,149,232,51,7,78,131,3,10,65,32,90,96,1,0,85,64,33,64,+20,232,1,16,1,50,48,128,138,165,62,73,55,96,48,0,54,224,48,18,+67,214,0,50,106,245,64,41,172,61,229,64,12,136,80,229,60,19,138,123,+0,83,244,139,1,255,249,11,237,9,0,128,35,195,101,96,37,232,166,5,+229,46,0,142,118,196,148,64,152,139,213,224,23,15,128,245,239,182,4,168,+213,230,52,10,65,1,230,52,17,0,81,230,53,28,192,202,230,40,40,224,+194,22,132,57,140,56,4,67,32,95,54,50,97,214,64,122,224,162,1,178,+217,224,36,21,4,100,101,114,105,118,184,1,224,42,22,4,99,108,97,115,+115,128,39,209,195,225,163,4,224,42,2,248,200,6,224,38,15,254,80,0,+64,224,101,39,224,89,24,3,100,97,116,97,224,83,20,227,62,3,224,87,+2,224,217,20,234,101,2,224,128,25,0,111,224,126,20,1,101,108,224,210,+40,5,102,111,114,101,105,103,161,172,224,44,23,1,105,102,224,126,20,4,+105,109,112,111,114,224,252,0,224,254,30,3,110,101,119,116,196,194,226,82,+23,3,102,105,120,114,224,169,30,64,43,224,172,21,224,77,1,225,45,33,+6,105,110,115,116,97,110,99,160,173,224,45,23,214,21,224,31,15,230,197,+2,225,46,32,2,116,104,101,225,172,30,0,111,225,172,21,230,127,3,225,+0,33,225,170,0,224,32,15,3,119,104,101,114,224,210,0,68,44,172,112,+0,52,192,43,68,227,0,57,204,26,224,5,3,160,24,160,137,172,6,160,+6,224,45,25,224,52,3,224,45,18,224,84,3,160,52,224,45,25,224,98,+4,0,53,114,238,97,149,1,95,53,105,99,232,254,0,137,38,5,115,99,+109,112,32,58,128,66,167,37,2,66,32,90,73,97,65,17,136,18,148,120,+235,70,6,233,23,21,243,237,1,0,57,210,151,249,145,12,64,24,138,175,+2,49,57,56,197,190,168,244,178,226,0,57,242,130,0,231,217,5,137,22,+230,117,16,5,83,121,109,79,112,101,99,50,241,229,8,64,113,230,136,4,+111,141,231,129,2,220,141,98,52,138,187,211,221,96,229,224,23,2,0,49,+102,156,236,180,1,134,134,1,67,32,140,179,0,79,75,144,244,225,0,224,+31,12,64,88,192,30,224,150,6,237,85,37,103,29,96,96,0,56,73,199,+135,53,98,250,2,49,55,57,194,251,64,29,64,7,237,102,34,97,106,0,+54,225,106,18,231,223,36,109,155,224,160,1,231,196,27,130,35,139,211,1,+49,57,76,42,98,91,86,175,0,53,97,136,130,17,108,120,76,170,224,129,+7,175,163,236,152,4,225,71,0,228,26,5,128,251,239,212,0,160,125,169,+5,240,134,11,75,205,226,178,1,194,152,169,14,233,54,4,137,45,64,29,+212,156,226,73,5,1,64,35,82,162,83,164,74,156,64,39,164,140,225,115,+13,226,223,200,233,255,11,226,210,45,226,75,18,97,87,132,249,0,79,242,+63,8,224,17,3,0,60,124,134,224,17,3,132,179,224,17,3,139,133,224,+17,3,148,118,0,79,242,130,5,128,14,235,146,0,128,14,244,143,0,225,+26,1,0,58,128,199,176,18,155,248,139,0,0,54,66,143,64,30,197,140,+239,169,2,70,5,64,47,252,82,4,65,18,252,80,8,239,86,4,64,77,+133,62,222,69,0,54,119,181,240,172,5,79,50,64,41,0,54,230,4,0,+145,87,64,6,248,61,5,229,168,0,108,17,99,16,131,177,0,90,65,192,+96,6,224,7,0,114,231,64,35,227,87,18,0,55,178,195,160,248,163,80,+240,158,0,2,49,57,56,71,247,66,201,247,174,0,134,123,189,54,206,63,+66,44,100,102,4,51,53,32,95,56,248,203,0,96,232,128,203,97,45,224,+205,7,242,38,6,249,1,13,157,159,192,104,0,85,226,7,2,1,91,93,+102,223,224,88,4,152,236,160,11,175,63,165,114,242,103,6,128,246,224,239,+4,241,142,3,250,95,5,77,37,0,55,112,231,0,79,195,103,64,64,215,+217,97,126,192,4,199,212,80,170,144,250,146,198,97,51,64,73,135,189,64,+141,160,189,100,145,239,161,8,3,58,49,57,55,130,169,117,83,0,66,129,+68,244,209,10,154,2,97,79,224,106,20,131,251,226,195,3,96,125,163,213,+240,32,8,64,127,131,10,230,17,7,83,75,230,18,4,1,95,53,96,135,+2,53,57,56,64,25,2,50,32,75,132,118,100,122,230,50,13,151,153,230,+50,4,229,165,3,96,0,64,128,168,124,224,179,0,64,19,0,54,229,177,+18,0,85,231,38,39,99,245,231,37,35,67,51,164,30,0,66,68,17,97,+44,96,47,2,52,48,55,68,117,253,107,1,100,66,0,50,92,232,226,55,+5,64,78,231,104,78,231,102,4,231,101,10,66,196,100,13,3,50,48,32,+85,64,107,0,54,67,48,0,80,96,117,0,49,64,79,247,138,7,99,79,+65,134,1,64,85,147,219,160,71,131,59,0,75,65,234,64,14,167,69,3,+49,57,54,57,74,232,67,242,191,133,148,32,100,69,96,170,97,21,64,97,+2,64,95,52,69,173,224,25,9,132,104,192,30,99,83,192,25,0,66,96,+53,98,60,0,53,144,159,161,122,153,242,192,19,160,15,0,58,96,142,129,+173,192,2,64,31,224,13,5,64,180,66,189,0,51,127,142,0,73,96,207,+0,54,130,248,0,75,224,39,2,97,96,227,92,1,1,95,52,196,106,0,+54,64,142,96,131,133,179,0,54,139,82,0,52,103,46,64,75,130,195,88,+200,227,198,0,98,20,3,66,32,95,55,88,48,132,90,160,201,64,25,231,+50,2,1,94,42,139,195,224,27,10,11,32,32,102,111,117,110,100,58,32,+32,32,32,128,36,129,37,224,92,0,98,212,66,227,96,16,133,156,99,168,+231,77,4,2,69,79,70,64,61,167,33,160,62,72,113,0,48,162,177,224,+120,10,8,101,120,112,101,99,116,101,100,58,128,120,96,200,77,29,2,55,+50,49,233,227,1,226,43,0,65,16,194,12,1,49,57,96,29,129,74,65,+44,64,249,160,25,0,54,129,238,1,95,55,236,231,1,90,171,125,52,96,+4,65,110,197,26,65,117,216,36,158,171,243,206,0,199,5,69,136,243,232,+6,233,191,7,64,22,247,96,13,224,65,0,162,127,110,10,233,179,6,198,+95,224,69,12,196,251,224,69,5,138,22,96,22,163,177,224,91,6,97,61,+225,107,1,240,15,5,159,129,192,114,133,247,102,154,104,197,130,69,3,64,+83,32,83,67,169,67,172,64,100,0,66,227,88,2,224,159,3,102,18,132,+69,161,251,65,85,196,153,0,89,155,175,224,176,0,224,13,1,104,87,164,+253,1,85,32,99,53,224,174,1,7,108,97,121,111,117,116,76,83,160,176,+128,240,225,125,6,64,144,192,25,224,2,0,128,47,64,37,128,1,225,169,+4,128,170,224,132,0,96,199,160,43,224,59,0,224,56,12,120,188,224,29,+1,98,117,225,3,3,224,31,6,103,185,135,66,192,99,129,63,64,7,64,+247,226,192,0,69,58,215,70,167,249,129,99,0,80,97,201,71,8,217,136,+224,52,1,192,0,224,140,14,192,229,224,139,2,65,37,64,91,225,57,0,+66,49,96,239,196,194,225,9,1,228,209,2,193,240,192,202,224,24,2,225,+36,0,100,135,93,143,162,119,0,53,169,110,128,34,192,91,96,11,241,16,+1,1,32,95,94,147,0,54,231,161,0,224,245,3,72,20,120,218,98,135,+224,252,13,96,121,224,44,10,128,32,64,73,228,32,0,228,28,0,64,0,+64,11,138,49,227,43,0,128,28,198,192,96,0,224,213,0,96,7,130,114,+195,107,226,21,3,129,183,193,100,226,128,1,104,16,129,103,64,5,102,132,+163,57,161,123,97,47,64,125,1,54,53,161,6,163,230,192,122,225,8,11,+96,33,224,219,4,72,22,128,192,232,23,2,224,230,3,129,165,132,201,161,+235,193,140,161,201,225,164,0,96,185,225,22,1,224,152,0,128,226,224,151,+24,160,106,225,164,0,129,209,193,94,64,81,170,91,224,158,3,224,88,43,+128,172,192,88,234,207,1,64,94,226,59,13,96,46,64,30,1,95,55,125,+234,224,0,0,128,89,229,182,14,225,60,1,99,65,228,197,2,99,43,224,+29,0,131,15,192,13,239,165,5,189,221,224,31,0,225,94,1,229,253,11,+129,50,132,30,224,240,1,64,97,226,165,1,2,48,54,32,162,41,64,0,+227,188,3,98,96,229,35,1,192,23,227,150,3,5,95,49,53,55,32,95,+109,171,2,51,50,50,224,72,2,160,59,224,122,7,227,57,2,0,67,131,+110,74,230,0,56,230,86,3,133,167,7,32,101,114,114,111,114,32,125,205,+70,84,187,96,59,132,220,228,226,1,128,0,224,232,13,227,169,5,160,146,+96,38,64,23,170,170,228,4,1,164,147,226,3,2,160,239,102,87,225,216,+3,97,191,224,16,3,96,89,128,22,225,184,0,131,33,224,13,9,225,71,+1,64,159,1,56,52,164,224,193,59,224,166,3,76,190,0,50,231,64,3,+229,176,8,161,69,108,45,226,165,0,225,76,1,5,115,121,110,116,97,120,+129,76,225,74,25,71,101,139,132,64,125,139,96,0,85,138,116,171,83,0,+50,75,65,68,214,170,53,0,65,168,241,139,83,0,73,64,29,64,157,96,+29,229,220,1,194,84,130,217,228,51,3,199,194,162,198,192,39,225,40,0,+225,101,0,96,8,74,219,2,49,57,53,129,10,224,70,3,234,73,0,96,+22,165,51,226,202,3,64,36,65,157,97,92,68,216,129,72,80,240,131,12,+0,53,115,191,0,53,111,241,151,71,141,113,237,120,0,229,14,2,199,122,+226,37,6,163,235,229,194,5,224,7,3,162,4,226,102,1,226,13,0,165,+195,64,178,64,60,224,88,4,226,90,2,224,57,6,129,32,160,45,98,45,+230,54,0,224,38,13,130,44,101,26,161,245,105,181,137,186,173,65,128,226,+205,78,164,32,0,64,66,7,65,235,64,7,206,64,100,6,0,55,64,118,+238,13,9,64,91,238,13,4,174,18,184,92,138,114,164,71,0,55,80,171,+224,0,3,129,153,225,148,6,66,140,64,12,145,252,78,61,78,39,225,160,+2,3,95,56,52,56,233,238,2,5,80,114,101,108,117,100,170,158,66,150,+141,54,224,37,6,8,77,104,115,46,66,117,105,108,116,158,0,64,39,141,+18,0,75,98,202,0,54,236,29,0,129,73,64,75,224,11,2,192,8,210,+207,0,53,210,243,1,80,32,97,1,131,59,66,101,160,69,160,44,64,20,+195,103,128,1,132,57,226,177,7,194,29,233,57,0,64,12,134,50,102,48,+160,36,192,153,130,220,227,20,3,99,56,160,37,2,95,49,51,69,167,97,+94,65,118,0,56,144,66,165,37,110,96,64,42,228,209,2,195,72,163,83,+227,89,1,227,209,2,233,199,1,128,76,224,25,10,97,29,228,251,3,224,+174,3,64,201,160,17,128,6,224,60,0,128,32,64,154,150,2,1,55,50,+81,83,0,50,85,246,226,54,2,1,95,54,114,162,110,83,0,48,142,91,+110,76,1,49,57,113,172,1,95,56,132,21,224,32,1,194,191,224,15,1,+130,215,128,159,1,95,49,110,45,160,241,1,95,55,98,251,128,146,0,95,+64,10,129,108,3,95,51,54,56,226,183,1,1,67,39,76,146,64,25,0,+80,128,91,160,252,227,224,1,171,32,141,101,132,42,64,18,64,44,131,128,+160,162,161,12,163,114,128,143,129,166,135,178,0,56,112,174,2,95,49,51,+85,143,96,0,163,167,161,5,5,66,32,95,56,51,52,67,32,0,55,232,+2,0,77,114,96,202,77,63,2,95,49,53,131,77,0,54,78,189,64,14,+80,1,64,7,84,17,100,35,103,28,96,96,64,6,97,60,226,63,0,0,+48,233,46,3,65,102,132,85,106,143,177,233,65,175,152,197,128,164,192,68,+66,116,233,41,0,194,182,225,111,1,224,20,4,0,89,225,74,0,197,105,+194,56,161,25,194,81,64,0,96,24,234,129,2,224,36,0,128,53,232,133,+0,64,129,1,52,57,226,246,1,224,100,11,192,9,96,10,246,176,3,192,+153,199,196,226,228,0,192,107,226,233,1,2,95,55,50,238,19,0,224,0,+1,194,148,140,202,67,255,135,80,111,14,73,227,192,128,224,117,7,224,7,+3,224,205,2,64,18,134,86,131,244,227,119,2,224,2,7,224,140,0,128,+15,227,176,1,224,36,12,224,37,20,224,40,4,224,41,34,235,147,0,0,+39,131,240,228,194,2,97,87,199,231,195,44,132,182,225,118,1,141,44,100,+170,128,92,167,46,224,5,3,231,58,1,192,148,235,83,4,99,189,161,227,+132,86,0,53,236,206,0,66,181,2,52,54,50,227,209,1,131,133,242,154,+1,196,51,3,95,55,52,50,64,12,93,29,224,22,2,192,228,224,88,3,+224,85,9,192,50,165,117,66,144,236,190,0,229,12,1,224,2,17,226,244,+3,225,25,2,161,53,225,113,5,224,28,19,225,176,3,230,72,0,161,24,+229,250,4,224,20,0,224,8,2,1,95,49,247,4,1,225,171,0,225,109,+1,224,198,3,64,15,226,31,3,0,89,160,32,224,102,0,225,251,7,171,+101,160,42,192,19,197,173,96,130,160,173,226,106,7,192,92,160,62,192,196,+98,27,224,5,3,193,66,224,57,3,162,48,224,25,10,160,2,224,25,17,+226,168,1,225,113,3,192,164,64,19,226,246,1,225,39,5,133,233,69,98,+233,0,6,160,68,231,182,2,130,139,238,234,0,224,224,7,68,213,165,164,+64,39,134,176,64,53,202,116,228,56,0,64,126,156,84,71,241,230,193,7,+224,28,16,71,73,228,208,4,102,181,150,141,192,0,224,246,2,226,20,3,+232,163,4,128,210,160,247,224,128,7,224,215,0,224,236,3,224,218,0,198,+231,224,249,2,200,48,226,93,11,226,193,1,228,1,2,226,92,255,226,92,+45,226,90,1,96,0,226,2,14,225,67,3,64,13,226,8,29,159,201,224,+166,3,96,27,193,5,231,205,4,128,156,192,150,74,20,64,28,244,241,3,+64,0,96,150,64,107,227,3,14,0,51,72,136,224,121,8,224,138,11,237,+138,3,96,59,174,100,227,108,19,128,215,160,187,79,221,157,68,92,198,226,+241,4,230,205,2,160,3,234,69,5,225,79,2,224,90,1,232,142,3,98,+150,225,178,3,240,166,1,226,249,3,200,181,229,238,1,161,8,98,124,227,+145,17,64,84,243,98,3,128,0,225,105,4,128,179,64,40,0,80,138,3,+239,120,4,232,148,3,204,136,233,105,1,193,42,224,98,1,226,85,6,233,+160,1,224,89,8,163,82,64,251,64,66,65,62,135,86,224,80,4,224,75,+16,225,207,1,161,172,203,143,64,67,196,18,224,72,2,203,100,2,52,48,+49,76,52,0,51,124,108,238,67,1,2,110,111,116,90,117,4,111,114,116,+101,100,217,13,128,0,73,231,223,135,0,82,64,108,110,250,66,71,2,56,+57,48,202,138,0,95,75,213,1,95,56,124,21,129,116,219,36,251,111,6,+0,32,145,192,0,56,139,133,128,93,191,199,225,22,4,225,116,3,132,96,+229,37,0,228,143,4,226,218,5,164,66,224,26,0,224,69,0,225,205,1,+64,0,224,71,3,224,25,5,227,234,1,229,23,0,193,179,224,46,0,226,+148,0,224,11,1,84,222,168,83,229,158,28,162,188,228,238,0,98,0,144,+116,247,202,1,128,1,243,142,5,163,48,128,16,96,142,229,200,2,165,188,+192,156,227,62,4,228,129,2,96,56,172,77,0,49,86,21,224,0,3,230,+139,5,225,85,0,230,132,7,224,38,50,225,92,5,64,38,228,53,21,225,+39,14,99,42,192,108,244,202,0,164,39,224,21,14,165,147,161,11,129,246,+65,186,133,137,245,142,7,225,74,1,225,181,25,250,232,6,225,182,5,224,+146,2,237,125,1,224,13,11,245,122,14,161,42,230,71,2,98,148,224,185,+1,224,0,3,230,55,0,224,183,29,224,182,18,224,171,88,224,170,37,225,+97,19,224,170,93,96,142,226,209,4,224,84,0,227,232,1,224,19,3,232,+232,3,128,1,224,219,14,224,109,1,224,60,1,192,183,224,19,5,233,201,+2,224,23,0,228,7,14,224,137,4,132,13,224,75,5,231,24,2,224,20,+1,96,254,249,159,0,229,94,2,224,180,0,179,160,198,119,129,16,232,156,+1,137,15,2,54,53,49,228,249,0,159,153,75,153,0,50,72,247,1,48,+52,230,145,5,196,132,102,54,2,49,53,53,117,28,113,226,224,0,4,210,+15,2,95,49,50,119,211,163,191,193,146,128,8,160,5,239,71,4,192,184,+169,182,160,191,137,129,146,56,177,213,224,137,0,196,9,225,236,0,102,30,+230,47,1,192,173,192,123,224,238,3,192,68,210,59,0,90,83,233,128,176,+96,240,84,193,182,88,82,83,0,58,113,208,230,255,4,192,97,230,166,5,+160,17,96,196,100,200,153,49,243,143,2,2,95,55,57,64,102,231,153,18,+231,142,8,15,117,110,100,101,102,105,110,101,100,32,109,111,100,117,108,101,+231,158,7,111,233,97,192,0,79,225,141,0,192,244,199,104,226,34,4,231,+188,6,128,2,162,143,224,21,6,160,81,226,80,1,96,69,163,123,3,95,+49,48,48,134,153,131,160,80,179,231,133,0,201,253,104,222,245,69,2,1,+49,57,162,89,225,68,1,96,61,65,29,202,233,99,85,96,209,236,89,7,+224,149,1,171,97,99,5,192,136,244,185,1,137,92,1,90,32,254,90,3,+130,202,64,12,226,58,4,171,230,246,167,0,213,8,224,78,4,96,203,248,+203,0,224,134,38,1,64,75,224,58,0,192,64,66,81,152,38,97,187,118,+116,0,56,224,94,1,194,38,96,39,152,38,248,78,6,1,46,46,184,69,+65,77,247,243,8,65,157,160,20,237,26,5,132,62,2,95,51,55,96,93,+224,11,2,129,223,128,12,138,195,65,46,197,29,170,79,133,151,64,20,192,+65,128,0,224,48,16,224,40,7,131,122,73,131,64,164,152,173,226,146,1,+226,17,1,226,67,1,224,9,4,224,29,1,224,9,4,233,251,1,234,5,+2,228,68,3,107,184,75,119,65,153,2,51,55,57,167,83,98,200,1,50,+57,130,209,118,29,98,194,1,95,54,215,212,1,95,56,109,192,64,0,66,+155,6,51,54,53,32,95,57,49,151,243,0,50,245,224,1,141,234,0,57,+66,1,147,182,97,3,250,128,3,133,94,128,21,224,23,10,140,88,246,39,+13,167,11,228,197,1,169,22,132,91,226,222,2,161,93,233,30,8,224,148,+6,224,128,0,96,15,225,216,6,224,7,9,235,36,27,224,166,2,96,16,+231,179,1,239,85,3,161,181,229,231,1,238,69,1,133,142,193,79,66,253,+182,217,224,223,8,224,0,3,65,133,128,236,2,95,57,49,101,205,0,57,+217,81,225,173,19,195,178,225,176,36,225,24,5,239,78,4,97,35,130,106,+0,80,225,196,13,224,84,1,129,79,193,6,129,1,192,39,227,168,7,64,+195,0,52,67,35,243,23,0,226,3,30,160,228,224,85,25,150,21,226,89,+50,68,182,69,243,165,175,224,239,9,228,53,6,193,250,193,75,226,54,1,+224,13,5,199,65,96,153,160,43,236,159,2,236,162,1,226,72,5,160,34,+224,61,0,126,168,227,85,15,236,119,0,226,241,7,160,132,224,10,2,225,+175,1,133,99,225,49,6,70,228,173,33,166,20,233,72,9,193,73,66,233,+206,60,161,65,0,56,123,71,0,57,126,98,160,119,163,92,224,157,13,241,+140,17,192,54,193,57,227,124,1,225,52,0,193,41,133,19,64,52,224,93,+2,0,83,160,53,124,177,226,121,3,0,85,96,43,235,228,4,0,95,105,+31,0,85,101,244,192,216,227,194,1,64,0,226,151,12,224,166,26,160,146,+64,169,228,23,7,224,80,6,228,40,2,224,0,2,64,180,97,98,229,213,+5,89,66,105,41,133,2,227,167,16,225,218,6,124,164,224,213,2,224,104,+4,1,51,50,138,36,0,52,102,38,161,195,130,179,224,5,0,64,64,0,+57,121,223,131,64,224,6,5,224,14,0,100,173,102,120,87,26,160,9,66,+64,166,130,2,95,55,54,64,7,71,54,0,51,103,54,3,85,32,75,52,+96,191,64,18,155,226,64,183,93,77,228,249,1,2,56,51,48,167,12,132,+4,129,214,126,186,93,142,65,103,160,18,157,79,0,48,66,183,169,159,64,+188,137,148,228,51,0,98,216,224,57,26,160,212,98,27,204,64,98,230,64,+171,210,166,128,72,64,17,146,90,122,181,98,130,77,223,96,117,96,11,138,+152,128,13,227,98,1,227,230,2,184,80,65,162,96,150,1,49,50,97,150,+225,129,0,96,31,0,50,98,40,227,162,2,96,87,65,63,64,160,228,220,+1,160,85,64,204,0,49,76,50,0,50,165,35,64,87,224,18,2,192,48,+128,167,129,113,1,49,52,190,181,77,32,97,10,160,251,64,101,94,211,0,+51,102,117,129,246,157,165,0,56,64,251,64,94,226,142,1,131,149,130,127,+132,71,133,97,105,255,204,28,2,79,32,35,64,71,99,12,6,95,49,49,+56,32,95,50,70,205,96,13,1,53,53,206,23,7,95,50,49,50,32,95,+50,56,159,142,75,71,124,102,2,50,50,32,240,82,0,96,103,67,208,224,+43,2,81,181,67,68,96,249,0,58,131,77,129,177,2,56,56,55,127,156,+99,19,0,50,107,206,1,56,48,137,204,68,39,94,101,65,116,137,136,161,+174,230,131,0,161,137,182,215,164,204,0,83,97,141,64,251,65,26,234,224,+3,1,45,62,148,225,129,175,107,63,0,48,99,69,0,57,99,16,196,7,+160,68,128,71,164,56,224,74,7,0,61,160,74,225,254,2,64,36,0,57,+66,145,192,72,228,122,3,160,76,160,162,192,79,3,79,32,35,49,65,250,+192,121,226,142,5,192,41,1,53,55,99,174,135,104,226,68,4,228,190,1,+79,189,0,55,70,6,66,41,96,8,64,6,162,128,128,94,225,25,5,0,+55,100,208,225,9,1,96,15,64,192,65,74,224,48,11,160,175,3,56,53,+57,52,192,176,225,71,20,224,200,1,224,241,6,3,56,54,53,56,224,242,+0,225,62,16,193,18,225,19,1,98,223,224,16,3,98,19,238,99,22,65,+52,135,97,97,63,227,116,8,230,1,3,136,0,163,120,97,67,65,77,0,+50,220,64,64,36,227,114,7,226,234,23,101,23,240,255,6,225,199,20,102,+96,1,57,57,96,5,64,98,225,215,0,199,20,65,223,99,190,65,116,103,+53,128,87,99,203,66,79,0,48,195,196,67,65,141,231,3,35,49,53,32,+64,13,0,54,133,20,160,96,99,212,160,6,64,29,141,223,129,166,4,95,+49,54,56,56,128,22,141,81,224,52,6,224,65,9,96,43,134,70,0,75,+233,12,0,0,83,163,71,130,74,224,5,4,65,34,132,49,193,164,0,95,+175,197,102,97,64,134,0,50,96,5,66,17,224,37,0,175,91,224,41,20,+96,137,134,189,203,150,0,51,100,229,1,49,48,69,0,1,95,52,97,114,+154,48,100,120,0,35,192,77,196,119,134,78,71,221,0,75,64,83,64,18,+166,79,0,54,71,4,0,54,239,56,7,10,80,114,105,109,105,116,105,118,+101,115,46,164,98,98,204,70,30,2,95,54,49,165,35,229,45,15,224,79,+21,164,103,224,79,25,200,77,0,58,142,126,97,134,0,75,96,206,64,54,+175,184,129,15,0,56,65,46,1,50,53,104,95,1,51,54,65,65,96,12,+82,152,174,154,253,156,2,66,171,224,34,0,66,109,0,56,203,226,224,78,+24,0,56,234,127,3,166,213,224,74,5,0,56,169,84,131,152,224,76,6,+102,182,3,67,32,95,57,64,232,192,96,0,49,82,225,131,38,0,56,80,+206,242,217,8,10,101,120,112,97,110,100,101,100,58,94,42,146,210,2,49,+48,54,201,207,134,59,64,84,66,129,218,204,224,190,2,0,49,147,46,224,+171,11,105,136,166,111,224,164,3,104,116,224,41,1,64,40,98,94,0,49,+67,221,160,35,135,81,224,15,4,97,152,131,157,100,147,225,133,3,0,55,+73,169,148,44,224,179,2,96,147,235,103,1,192,13,96,5,237,147,2,164,+234,161,79,144,160,0,60,247,240,1,192,21,80,213,224,35,9,129,175,227,+104,1,248,230,7,99,213,238,211,0,237,124,5,165,103,235,4,9,199,170,+128,44,246,250,6,196,41,192,69,64,7,238,207,9,130,31,237,139,0,224,+26,7,240,15,0,0,83,69,71,133,254,66,126,0,50,239,232,16,160,78,+224,228,6,193,34,224,146,1,237,184,2,237,64,2,237,195,0,166,89,224,+83,1,238,3,2,224,38,0,160,13,240,221,7,224,27,1,162,253,137,155,+205,36,105,10,227,28,0,206,177,2,95,55,50,67,255,148,187,181,28,192,+0,226,98,2,248,181,0,128,1,226,93,10,86,130,96,0,203,21,238,197,+0,131,25,96,54,2,49,57,50,101,83,247,31,0,132,14,135,135,167,131,+129,212,137,157,247,254,9,107,58,1,54,52,236,187,0,108,186,0,56,98,+77,222,52,131,51,192,142,109,78,142,84,245,105,3,225,229,1,138,229,1,+54,55,237,163,0,67,72,0,54,99,72,0,80,70,228,64,73,195,84,1,+49,51,96,38,129,93,1,95,56,71,162,1,49,57,66,21,1,95,51,151,+152,226,75,0,101,133,96,136,99,160,64,71,134,247,3,85,32,75,51,70,+5,77,223,102,12,160,29,134,233,3,95,56,49,51,110,3,193,105,225,216,+1,225,125,1,224,1,7,226,50,2,224,37,16,224,35,4,224,32,23,224,+29,20,224,26,17,224,23,14,180,205,224,0,0,64,237,135,77,70,253,235,+174,2,7,52,48,49,32,95,52,48,51,111,175,229,128,1,1,37,84,139,+25,231,78,0,66,201,231,139,0,230,44,16,1,57,48,97,145,237,170,0,+164,163,248,100,5,229,146,3,233,207,2,1,48,55,224,85,1,130,59,65,+240,64,150,133,176,226,221,1,227,235,1,128,67,130,87,0,57,87,98,234,+8,2,164,230,64,1,82,210,220,128,96,165,130,119,236,142,2,171,224,98,+110,1,52,56,87,101,229,69,2,163,43,64,30,128,144,160,145,160,221,160,+57,229,132,4,232,239,0,229,168,19,193,1,196,29,224,213,3,145,70,128,+29,196,199,129,41,225,244,2,196,125,96,24,243,22,2,207,25,96,46,129,+29,74,218,1,64,95,96,219,184,111,0,57,163,61,160,0,128,81,224,136,+4,64,196,192,135,160,31,101,24,128,88,228,112,5,235,157,3,148,188,80,+7,167,69,0,55,111,131,106,247,121,84,0,50,197,23,224,253,10,224,252,+13,225,164,3,224,225,0,160,77,224,200,4,142,100,74,154,0,52,73,50,+71,216,65,188,100,59,146,19,0,67,68,120,0,57,250,59,3,97,210,102,+177,64,94,182,206,128,105,161,110,230,253,14,234,213,2,230,51,4,166,110,+224,180,3,230,243,9,135,230,232,197,0,192,36,226,143,3,254,15,1,129,+36,129,85,181,142,205,52,128,246,99,89,77,48,161,109,231,50,5,227,101,+0,227,122,1,105,124,96,13,132,6,66,225,227,132,4,65,88,224,224,4,+227,246,2,64,27,133,236,226,11,0,227,213,3,227,206,7,224,61,9,0,+48,98,16,64,70,132,165,96,33,1,51,54,77,149,1,50,53,96,27,170,+19,192,154,96,0,225,26,1,64,112,124,17,226,35,0,206,74,128,17,227,+140,10,128,20,98,10,227,133,9,227,130,12,0,49,76,128,64,27,220,116,+160,4,100,87,225,90,1,227,53,11,160,58,226,193,2,201,25,64,43,146,+225,227,24,3,224,129,8,224,128,8,230,144,3,65,93,116,81,252,14,0,+129,115,116,212,233,187,82,178,124,64,17,206,201,192,0,70,34,141,94,133,+236,110,225,78,118,221,229,1,49,52,101,68,213,19,166,35,224,162,5,225,+189,12,229,171,1,229,71,23,192,178,230,31,7,230,9,4,191,205,224,49,+14,128,108,161,241,128,1,235,213,17,161,22,133,120,195,157,236,111,4,0,+53,81,36,161,100,129,64,236,64,4,160,62,3,95,49,56,48,245,48,0,+0,49,192,91,128,55,226,179,12,98,208,224,187,8,96,21,0,85,66,6,+0,50,96,132,239,74,0,224,231,10,225,24,2,128,89,197,200,224,191,3,+138,10,1,55,32,232,23,2,13,116,121,112,101,32,115,105,103,110,97,116,+117,114,101,136,35,128,218,249,54,4,231,240,21,130,20,0,55,120,222,0,+49,233,195,0,161,73,237,202,5,155,191,224,153,6,225,135,7,225,91,11,+132,34,1,49,48,96,14,225,88,9,96,0,224,49,4,0,58,132,139,148,+207,224,106,8,0,52,95,56,64,85,79,195,235,161,5,228,20,1,64,133,+224,238,5,64,56,225,172,5,103,140,0,52,158,67,1,57,51,88,194,175,+136,239,1,6,26,67,97,110,110,111,116,32,115,97,116,105,115,102,121,32,+99,111,110,115,116,114,97,105,110,116,58,32,97,117,245,49,0,149,229,2,+49,50,54,133,12,224,70,6,2,94,42,32,64,0,14,102,117,108,108,121,+32,113,117,97,108,105,102,105,101,100,160,67,79,187,171,189,64,0,65,1,+144,101,195,155,82,183,156,12,249,112,5,0,73,106,18,65,80,213,254,97,+142,115,66,150,190,150,90,0,52,70,91,234,68,2,64,74,114,134,225,65,+3,64,23,139,238,105,92,229,227,2,227,198,5,230,32,6,233,233,2,154,+133,245,163,1,96,9,225,133,4,66,197,128,188,226,202,21,194,75,162,206,+160,13,238,61,0,192,91,65,124,227,231,4,0,57,165,199,192,61,192,63,+167,151,192,211,224,32,1,160,14,224,31,3,97,117,99,1,226,125,2,0,+52,164,64,224,92,5,96,129,66,105,240,195,5,98,90,120,226,102,12,1,+57,52,193,176,251,166,11,101,8,193,208,0,85,101,28,83,43,192,108,224,+115,10,231,161,7,160,32,225,176,1,191,223,224,5,3,215,214,128,156,0,+57,97,201,103,187,2,32,95,55,66,47,72,114,197,13,225,46,18,150,9,+64,9,131,64,160,51,225,52,0,96,31,228,66,1,0,49,117,238,236,11,+4,100,13,0,53,71,79,116,17,96,21,174,133,64,79,117,124,2,49,52,+54,173,51,137,75,192,73,0,79,117,37,201,84,64,63,0,65,96,38,161,+45,252,126,4,110,250,128,21,2,95,49,54,225,130,1,224,0,1,66,239,+142,150,119,115,0,55,224,168,2,64,26,142,147,97,47,228,240,18,242,60,+2,140,194,133,197,226,16,4,97,30,165,133,107,17,1,49,55,132,113,96,+143,64,159,0,56,158,114,214,212,129,164,229,19,2,138,97,253,193,6,64,+214,182,42,66,245,68,46,64,49,0,49,96,173,169,56,64,213,64,31,213,+131,226,126,4,160,35,226,127,5,227,193,2,224,251,7,227,3,0,225,224,+0,179,193,230,86,5,0,89,133,93,102,95,64,4,107,87,97,246,0,55,+91,126,2,95,49,53,87,84,194,12,230,242,15,119,212,225,38,1,133,164,+1,49,50,194,24,128,157,237,5,4,132,109,1,49,53,224,206,1,226,72,+2,224,52,7,192,223,137,205,226,238,7,128,82,224,154,1,195,67,245,79,+7,0,85,227,137,4,166,133,99,96,0,48,87,209,107,210,64,134,71,98,+128,147,234,144,0,224,131,2,225,99,3,0,57,203,100,128,209,224,132,3,+235,217,6,97,33,236,56,0,70,67,98,59,230,233,0,225,24,1,109,168,+228,218,3,228,46,1,128,13,160,38,225,199,6,133,94,1,49,57,65,173,+100,209,81,254,227,99,3,128,234,128,118,106,102,87,77,254,99,1,160,115,+103,108,96,106,171,118,226,53,13,160,76,211,25,97,201,0,53,64,79,1,+48,54,97,68,128,204,132,197,165,31,229,38,1,232,230,2,225,163,5,96,+191,96,63,128,82,227,83,2,128,136,155,81,2,95,49,54,83,252,224,220,+1,160,88,0,85,132,96,2,95,49,56,131,240,130,149,1,55,52,64,130,+132,122,97,178,211,121,100,198,0,56,139,86,160,0,67,124,139,142,76,35,+72,108,112,184,0,58,98,33,228,96,0,237,146,10,225,36,9,161,33,193,+241,205,143,101,134,237,227,2,228,108,0,98,55,237,141,53,225,192,0,232,+1,5,198,165,86,187,228,32,9,96,167,230,160,4,225,106,1,0,80,239,+16,11,224,99,6,192,151,237,236,1,224,247,12,162,16,224,251,10,130,107,+237,147,0,224,163,49,0,75,224,35,4,133,77,64,0,142,47,230,80,5,+224,198,8,225,41,0,225,35,53,229,159,5,226,23,0,232,112,5,74,31,+2,54,56,48,224,38,0,66,69,0,52,192,32,230,162,2,236,199,20,226,+7,51,131,24,92,63,229,174,3,139,83,235,75,8,31,105,110,102,101,114,+32,114,101,99,117,114,115,105,118,101,32,112,97,116,116,101,114,110,32,115,+121,110,111,110,121,109,32,74,16,0,115,202,7,225,91,12,173,97,128,215,+225,11,4,237,116,5,247,196,9,226,114,13,196,132,110,158,99,56,96,210,+228,78,11,229,202,9,224,100,12,225,184,9,229,231,11,141,26,241,160,4,+236,190,21,198,21,224,30,5,229,167,20,96,147,232,149,10,234,152,4,229,+29,8,229,19,10,64,0,162,125,197,244,209,252,96,62,128,162,128,10,147,+224,163,161,0,52,86,153,0,53,163,138,230,70,8,230,90,12,160,182,128,+0,69,44,141,15,0,83,168,78,224,170,6,242,17,1,235,183,8,174,53,+95,186,196,236,136,39,225,10,2,252,116,5,0,95,77,5,65,112,102,54,+229,231,0,96,204,224,93,5,225,150,9,239,51,5,0,52,134,52,225,91,+12,1,52,52,230,219,1,235,238,3,230,78,1,64,245,141,216,236,237,2,+89,240,70,101,103,110,65,158,171,16,64,57,2,53,54,53,96,134,64,35,+170,72,225,131,0,1,50,51,75,87,117,104,129,145,0,50,181,119,64,11,+65,171,246,11,0,64,118,0,54,142,29,225,70,2,0,54,71,118,0,75,+225,89,9,0,54,149,214,166,244,239,158,0,226,189,7,244,205,4,194,39,+230,245,4,1,53,57,64,47,133,96,225,46,5,0,95,131,208,232,86,2,+64,162,142,168,193,148,130,255,130,214,65,6,96,34,139,219,0,67,129,220,+64,195,128,22,139,215,154,205,0,67,218,199,1,52,51,74,153,154,199,67,+215,64,135,64,44,139,87,236,2,18,166,113,229,98,1,222,66,199,110,229,+81,8,97,32,224,25,12,104,250,229,133,13,169,2,229,133,7,162,162,194,+126,128,117,128,146,130,148,96,9,67,174,243,107,0,224,68,8,96,117,66,+130,228,16,4,224,43,13,96,187,2,85,32,83,192,157,96,169,64,1,253,+215,1,161,15,2,95,49,50,185,220,228,203,9,137,228,64,21,255,235,6,+137,169,162,63,224,27,3,101,120,237,195,10,128,134,224,240,1,193,116,225,+56,1,128,45,192,153,225,61,5,224,27,1,254,160,21,195,127,224,98,0,+249,240,1,224,13,3,228,33,0,222,4,230,63,8,254,32,2,105,146,160,+64,238,22,12,224,122,3,196,46,0,54,121,198,224,119,1,224,23,4,232,+158,1,224,85,0,2,95,49,52,74,101,67,106,67,159,218,8,66,188,64,+149,253,255,0,234,178,3,193,38,128,95,0,53,172,83,238,120,3,128,51,+1,49,56,133,32,224,112,1,68,66,227,19,0,224,66,1,0,54,161,221,+224,66,4,128,129,219,3,254,134,9,0,64,253,145,7,225,161,17,130,250,+226,9,0,225,112,6,129,91,161,139,226,82,3,225,70,2,146,34,245,42,+5,225,164,2,224,40,1,225,170,16,226,39,4,164,143,225,178,5,225,149,+1,182,105,224,30,17,199,93,161,72,129,75,193,99,1,51,54,177,41,97,+217,225,185,1,225,182,40,226,4,20,226,97,2,161,211,224,139,4,216,196,+192,33,138,209,251,182,18,184,209,176,50,161,141,155,62,193,192,224,80,0,+80,235,240,233,6,130,204,74,223,0,55,152,186,130,61,70,190,102,210,99,+211,136,116,99,213,115,88,224,0,0,226,122,38,222,87,226,45,7,192,75,+192,19,175,237,248,209,0,128,249,234,12,8,232,92,5,236,214,2,237,224,+15,245,34,11,2,63,63,63,139,15,2,95,49,56,106,116,160,70,0,67,+226,138,11,160,0,70,190,145,246,96,87,230,192,15,160,135,174,43,1,67,+32,164,161,66,229,64,144,101,73,224,99,6,226,26,6,226,13,1,152,167,+199,221,0,49,100,113,97,89,96,215,77,140,147,140,83,193,0,51,201,88,+64,44,168,217,168,181,243,17,2,96,242,146,230,64,21,226,21,4,64,224,+175,90,82,213,96,179,77,8,1,56,50,169,147,233,235,0,3,49,54,57,+48,180,111,227,250,0,130,117,163,71,98,142,96,160,0,85,64,34,96,153,+128,158,192,38,99,81,64,35,100,204,244,175,16,64,63,96,125,160,230,0,+58,128,200,104,135,106,186,168,30,225,116,1,226,251,0,163,49,166,156,128,+195,130,18,238,39,5,96,35,212,177,65,40,98,197,162,204,160,14,192,58,+68,217,229,25,0,136,89,227,202,2,228,228,9,128,237,229,54,2,130,22,+128,26,96,40,224,53,5,224,26,0,192,207,246,152,8,228,151,3,130,95,+192,232,192,75,128,85,181,73,203,111,241,225,7,203,134,97,168,0,50,66,+185,64,9,108,121,105,224,0,56,170,206,98,121,1,49,52,93,148,236,78,+2,225,160,1,192,80,100,153,192,84,99,168,64,4,224,245,5,224,232,42,+224,226,0,225,95,4,115,112,224,18,0,96,92,128,7,224,229,5,224,6,+0,160,234,224,162,3,102,21,64,246,224,179,4,186,126,0,55,68,248,66,+17,226,11,0,75,237,160,180,102,141,230,113,11,224,29,1,80,59,97,30,+160,18,224,42,6,224,30,0,98,205,141,136,130,249,90,106,5,51,32,95,+53,50,51,184,204,64,32,250,140,0,228,113,9,154,228,129,8,228,248,10,+0,48,64,36,160,18,1,67,39,230,79,6,161,155,234,227,1,65,86,233,+147,2,193,184,233,222,1,193,153,128,31,250,73,5,193,137,160,19,230,152,+1,198,149,228,32,0,234,160,3,236,198,4,94,82,233,172,5,64,196,237,+230,2,160,189,192,222,128,42,132,219,230,82,3,225,203,0,225,50,11,0,+55,65,90,224,65,1,165,7,104,4,110,166,156,20,96,0,65,123,0,54,+193,123,108,221,64,42,140,222,0,56,81,13,172,222,96,40,141,62,6,95,+56,49,51,32,75,32,76,64,224,1,13,138,216,192,0,64,85,226,8,1,+141,94,132,197,97,56,71,87,101,248,77,202,128,237,253,90,4,104,107,124,+3,0,49,253,24,2,5,101,120,112,111,114,116,102,221,64,85,0,51,96,+85,82,82,251,43,11,2,51,52,51,224,58,2,6,116,121,81,73,100,101,+110,128,60,1,64,85,117,88,160,70,237,183,11,0,50,166,153,115,46,1,+51,55,110,252,1,50,53,181,67,67,209,116,45,161,246,74,69,97,123,1,+95,51,102,137,97,217,129,140,128,97,135,90,1,80,32,72,112,125,60,64,+246,134,140,226,222,13,156,16,224,29,15,245,214,24,70,215,160,47,224,45,+9,226,154,6,0,56,123,234,164,29,240,146,3,240,230,3,1,49,56,80,+63,97,186,232,158,3,224,92,25,0,56,224,134,32,0,56,169,84,2,58,+49,56,68,65,222,89,232,48,3,195,172,229,187,0,227,64,1,242,35,4,+104,238,231,208,0,224,176,15,2,49,53,53,129,172,227,156,11,186,44,229,+152,1,230,251,1,229,222,3,160,2,192,24,224,43,2,192,5,227,168,11,+1,53,54,199,119,224,112,1,98,106,231,232,6,225,250,4,192,94,135,165,+161,17,0,64,246,182,0,113,228,245,83,1,64,235,88,254,227,0,1,85,+76,7,97,32,99,108,97,115,115,32,99,4,1,95,56,72,205,234,167,5,+224,147,9,225,14,2,224,25,10,227,243,0,224,48,7,228,12,1,236,234,+5,224,2,4,224,237,3,251,46,6,64,219,224,5,0,212,55,73,69,210,+16,0,85,98,26,241,49,14,133,144,240,137,4,213,128,248,42,3,1,95,+54,66,116,128,125,101,201,0,67,74,130,0,57,232,30,0,192,192,224,76,+4,131,95,224,76,9,224,68,21,225,101,4,100,123,247,7,15,1,49,50,+68,109,235,207,2,26,115,117,112,101,114,102,108,111,117,115,32,105,110,115,+116,97,110,99,101,32,98,105,110,100,105,110,103,246,247,3,64,0,64,133,+129,13,161,89,129,151,219,182,225,112,0,225,175,0,187,222,128,1,109,55,+240,129,5,225,208,1,3,95,49,53,56,163,33,227,22,6,159,230,224,69,+1,224,95,0,195,25,224,9,0,0,67,235,185,4,1,64,64,248,186,3,+224,105,1,224,115,3,226,152,8,232,168,6,224,2,6,160,138,128,79,192,+160,239,16,0,225,6,30,128,68,128,11,139,235,246,218,7,232,250,0,140,+61,239,131,1,128,28,225,29,4,225,32,1,224,82,0,160,60,0,48,192,+215,224,240,3,2,53,49,55,206,108,128,26,227,60,4,64,32,66,121,101,+239,140,77,0,49,236,251,0,160,216,165,45,220,254,64,43,76,129,103,108,+224,57,2,71,238,140,20,1,55,56,140,62,224,138,1,128,48,192,13,255,+2,2,177,78,132,217,234,77,0,224,166,1,64,191,65,9,192,205,1,54,+51,253,161,0,224,120,0,128,64,96,29,107,15,128,26,1,56,50,128,11,+237,182,4,74,198,225,88,1,64,40,227,91,7,133,102,0,89,224,114,0,+169,255,193,106,225,229,2,204,217,130,13,249,204,6,192,48,233,247,2,191,+197,129,193,240,126,0,160,73,0,66,75,66,230,10,2,204,179,104,44,1,+52,56,65,8,1,52,52,128,90,224,179,8,0,89,224,166,0,192,160,224,+154,14,135,150,192,148,160,140,64,234,130,98,128,115,96,166,96,139,224,135,+2,160,174,0,67,128,24,224,0,2,193,159,160,0,250,129,3,253,106,5,+106,121,0,56,130,133,228,150,0,96,144,2,95,49,54,88,15,240,66,2,+71,176,139,232,97,214,98,85,162,125,64,68,175,225,128,14,0,52,71,121,+194,146,97,46,0,54,89,109,64,136,1,35,54,175,11,0,56,139,249,96,+87,140,31,69,247,0,57,72,20,64,28,119,176,96,35,172,90,0,57,66,+52,0,49,128,21,138,170,229,59,1,69,48,0,34,128,26,170,130,1,32,+83,65,115,179,230,161,87,246,5,10,128,20,230,93,8,0,49,96,163,193,+127,232,145,1,96,22,188,219,233,208,18,68,41,64,42,104,217,230,87,6,+96,67,2,95,53,48,65,38,0,54,77,24,224,197,1,69,237,165,234,98,+12,229,2,2,232,209,3,69,89,129,58,65,39,230,124,4,162,200,246,209,+9,224,79,20,175,54,128,86,202,107,192,209,234,111,3,96,65,64,116,64,+18,105,158,251,159,5,224,103,64,192,99,135,126,128,36,234,6,13,65,242,+140,31,227,216,2,195,229,224,126,4,224,112,1,224,31,0,224,117,6,128,+119,3,48,32,95,51,174,39,64,92,204,53,98,33,225,240,2,0,83,101,+30,133,105,2,53,54,57,195,42,67,81,106,112,0,75,239,165,0,136,194,+99,179,0,83,142,93,64,77,116,252,160,7,132,95,0,83,173,51,224,77,+2,1,95,53,139,46,192,217,224,56,3,225,17,5,128,19,135,125,100,41,+2,95,54,54,231,79,4,128,91,232,134,11,65,21,226,132,1,9,109,97,+108,102,111,114,109,101,100,32,72,131,11,100,97,108,111,110,101,32,100,101,+114,105,118,232,136,2,128,127,225,107,6,235,2,11,0,54,101,239,224,52,+1,230,230,1,227,66,10,131,133,170,17,139,135,138,247,162,85,64,26,227,+197,11,226,243,13,78,193,201,177,225,40,3,165,204,64,46,104,165,140,102,+226,200,6,224,60,15,224,56,3,226,156,1,224,85,0,225,96,17,235,168,+13,12,100,97,116,97,47,110,101,119,116,121,112,101,32,235,173,5,64,0,+225,89,1,171,152,160,187,230,20,3,233,0,0,96,33,232,143,1,224,173,+0,131,177,109,9,229,204,1,163,162,151,87,152,25,96,0,66,241,246,32,+1,224,123,6,97,148,224,96,0,237,40,0,166,216,198,222,192,11,192,82,+224,20,0,224,64,0,224,55,20,83,240,224,56,6,130,20,225,15,2,128,+22,64,32,224,40,8,224,94,1,233,130,0,0,66,192,30,65,179,0,51,+163,100,0,49,71,170,0,51,110,25,107,209,158,13,230,242,2,0,79,225,+170,2,4,68,97,116,97,46,224,4,0,65,167,224,29,8,7,84,121,112,+101,97,98,108,101,224,8,0,224,37,7,11,71,72,67,46,71,101,110,101,+114,105,99,115,192,8,224,35,7,29,76,97,110,103,117,97,103,101,46,72,+97,115,107,101,108,108,46,84,72,46,83,121,110,116,97,120,46,76,105,102,+112,211,224,46,3,17,84,101,120,116,46,82,101,97,100,46,73,110,116,101,+114,110,97,108,96,13,224,38,12,3,83,104,111,119,96,4,64,29,232,3,+4,228,56,0,96,5,73,139,153,41,226,74,1,226,92,4,233,3,0,224,+48,2,100,163,72,255,71,219,153,104,229,67,0,224,93,14,225,157,3,65,+160,226,99,3,224,115,58,160,36,99,74,224,106,7,105,128,224,108,7,160,+20,224,110,36,195,79,2,95,49,56,102,223,67,60,145,239,200,32,239,219,+11,96,79,0,52,104,229,107,255,230,217,6,108,71,153,94,138,96,64,35,+129,176,0,58,128,209,163,156,192,212,224,183,9,225,65,5,224,27,25,224,+2,4,195,156,224,25,7,128,22,197,126,205,108,227,179,4,195,158,163,151,+224,14,2,225,4,4,193,6,192,141,128,8,64,20,224,118,2,240,47,0,+1,49,54,147,114,1,49,56,111,47,65,144,152,21,230,253,5,91,109,241,+27,6,227,1,1,2,66,97,100,230,194,8,239,169,4,224,150,1,225,15,+9,192,2,224,195,6,128,49,224,194,5,224,5,27,228,223,1,234,157,6,+164,163,224,67,23,252,31,12,1,56,52,70,99,236,6,3,198,41,225,74,+2,239,24,30,239,36,4,224,244,5,225,156,98,96,0,192,133,224,141,0,+249,96,7,227,221,7,231,26,7,207,186,207,37,250,59,0,64,0,230,149,+6,102,22,239,225,1,224,119,4,82,152,242,149,0,96,8,79,16,159,115,+154,87,170,212,239,210,1,160,68,193,135,224,150,6,107,192,92,104,160,110,+227,73,2,248,109,2,102,147,0,51,168,227,96,62,0,85,240,53,0,226,+160,0,112,118,224,44,4,192,227,224,95,2,97,162,97,53,225,67,5,162,+34,64,2,244,193,21,233,184,2,160,166,228,215,7,194,201,135,173,180,176,+64,182,225,247,4,244,175,49,193,140,239,186,0,240,168,1,224,10,17,212,+161,225,229,3,230,88,10,193,3,227,227,6,192,67,236,71,21,129,179,236,+72,5,192,55,128,172,224,95,0,225,39,1,224,21,9,232,229,0,228,136,+12,224,25,17,132,54,224,144,3,192,1,129,212,243,92,10,128,30,229,201,+11,0,83,243,231,2,227,87,3,243,29,10,225,244,2,236,222,0,96,17,+162,85,67,76,2,32,95,53,66,5,127,247,160,5,224,88,2,151,249,197,+6,164,85,254,237,9,171,251,107,225,130,78,0,52,89,167,80,90,111,138,+96,17,0,50,66,180,82,120,73,218,240,251,2,192,238,67,54,64,80,64,+45,0,51,101,45,99,11,250,59,4,14,109,107,77,101,116,104,111,100,58,+32,97,114,105,116,121,228,140,2,225,118,12,128,2,244,139,4,225,88,0,+163,43,96,2,244,2,2,224,74,40,224,1,1,3,95,49,50,51,66,131,+228,96,4,96,55,226,196,0,229,232,4,225,100,0,230,66,9,2,95,49,+52,81,38,110,170,1,50,49,240,129,3,4,99,111,101,114,99,106,186,224,+134,7,68,63,226,219,2,132,214,224,33,2,64,31,193,176,224,17,1,242,+219,1,225,129,1,128,63,225,134,1,130,44,101,158,174,179,240,84,7,225,+194,0,0,54,178,101,101,65,101,169,98,223,244,73,13,96,64,128,69,191,+32,165,253,0,83,147,143,98,118,238,53,3,130,112,98,111,0,90,96,177,+67,188,194,218,224,42,5,209,84,239,149,1,180,131,225,117,2,224,47,9,+224,48,2,110,91,96,4,78,74,66,202,3,95,49,52,54,237,249,1,160,+0,8,95,49,50,54,52,32,67,32,80,160,224,64,15,134,57,174,85,130,+208,97,23,80,119,196,152,161,35,238,245,4,194,97,170,89,129,25,144,112,+0,55,229,158,3,129,200,193,189,144,196,192,141,244,19,5,238,224,5,161,+100,96,57,134,161,129,20,64,138,69,132,132,223,197,108,64,121,224,19,2,+96,18,64,14,3,80,32,64,83,64,4,193,81,233,35,6,128,39,6,64,+66,32,82,32,64,75,96,134,148,220,224,51,4,239,186,0,225,107,2,224,+47,0,128,0,128,11,160,17,228,6,6,175,143,2,68,101,114,163,8,75,+119,148,249,100,176,227,116,1,226,58,6,0,80,227,158,0,66,105,137,141,+64,59,148,221,190,187,149,59,0,52,99,135,104,109,73,208,135,156,65,140,+82,126,97,79,64,30,126,142,2,48,48,55,225,115,0,98,72,128,241,1,+95,55,120,17,64,95,0,54,224,155,9,224,153,6,2,85,32,75,127,242,+162,52,64,52,149,66,117,155,3,49,52,51,54,149,156,64,183,227,201,0,+64,37,149,77,66,165,1,35,49,64,110,0,85,117,100,68,9,159,74,105,+19,135,232,147,219,133,137,128,19,64,41,255,116,0,224,41,8,0,50,64,+116,224,41,2,240,118,1,243,45,2,127,151,1,49,56,99,25,205,102,228,+99,2,135,22,224,11,2,192,8,225,124,1,255,128,0,151,157,239,242,19,+64,104,0,56,96,224,64,111,5,10,65,32,79,32,80,239,231,7,6,66,+111,117,110,100,101,100,192,7,66,33,64,151,64,196,224,45,10,5,69,110,+117,109,95,67,72,219,96,10,192,45,65,94,224,45,10,240,97,4,64,39,+78,116,224,85,11,3,113,46,69,113,160,35,0,54,65,17,224,35,10,6,+70,117,110,99,116,111,114,192,7,192,45,224,167,14,4,73,120,46,73,120,+224,35,22,2,79,114,100,64,3,192,37,65,49,224,37,10,241,7,12,64,+47,68,133,224,47,5,241,17,15,224,131,13,241,27,26,64,56,225,90,9,+1,84,101,241,37,16,64,48,67,17,224,48,10,241,47,4,64,39,239,134,+1,192,0,66,39,217,16,164,198,237,194,5,128,11,0,83,101,182,0,55,+137,10,144,57,162,168,130,231,226,183,0,234,195,9,133,42,238,126,11,176,+66,168,58,246,66,0,224,12,0,165,101,111,204,224,13,1,234,251,4,224,+20,7,224,21,7,234,143,14,236,167,0,192,28,224,29,4,224,83,1,170,+92,253,219,14,224,49,7,224,2,3,233,6,2,234,44,2,224,2,8,166,+199,224,83,26,233,87,6,224,81,11,201,164,221,46,226,13,1,7,115,104,+111,119,115,80,114,101,98,154,224,109,21,221,79,192,104,224,1,1,138,232,+224,25,11,140,158,224,22,17,224,104,11,178,191,237,147,2,224,202,4,240,+45,7,106,56,130,33,82,90,97,15,137,10,226,207,4,224,210,12,128,2,+192,34,224,208,2,235,241,1,208,75,64,22,71,112,103,131,67,49,235,133,+2,224,220,5,224,224,4,224,28,22,224,243,3,128,28,245,231,1,96,2,+240,244,1,224,67,14,224,65,8,241,6,0,224,8,13,64,44,160,218,97,+67,130,29,2,56,50,54,65,53,226,23,5,4,80,97,114,101,110,194,23,+192,100,128,70,141,0,128,52,2,79,32,35,69,46,161,109,161,31,0,50,+90,182,103,210,228,18,3,162,155,96,51,88,95,193,161,169,54,169,78,253,+248,0,225,105,4,223,208,2,85,32,35,152,211,224,150,1,224,2,0,241,+245,4,128,239,64,71,192,235,64,8,236,44,4,161,252,225,238,2,193,70,+128,75,132,118,128,137,235,198,1,128,146,3,79,32,35,49,82,30,226,101,+0,128,116,64,50,96,223,73,4,224,223,1,96,215,163,64,128,13,111,59,+228,215,1,224,111,27,70,55,192,82,1,85,32,229,108,0,64,12,96,141,+0,53,225,133,1,65,159,108,129,139,125,0,54,149,225,160,44,138,201,127,+29,72,47,96,59,0,48,236,147,4,96,10,64,4,161,177,104,225,3,64,+95,55,49,187,175,0,95,209,122,224,31,1,1,49,48,64,110,226,67,7,+2,83,116,114,242,248,1,194,27,105,218,224,59,4,0,56,226,127,11,228,+151,3,226,86,6,224,51,2,65,106,0,54,224,188,0,2,95,49,51,112,+191,137,146,173,70,174,8,235,211,8,175,82,2,56,52,56,97,63,87,94,+228,51,3,169,145,71,8,138,227,68,233,68,114,0,54,89,103,1,95,52,+64,127,177,240,64,132,193,65,0,67,161,183,64,19,225,176,1,69,33,137,+149,64,79,0,54,160,79,198,71,193,250,66,160,231,78,7,234,24,0,130,+55,64,128,126,61,134,117,64,29,143,51,227,7,0,231,78,15,96,110,237,+56,16,64,128,166,116,128,17,101,92,230,54,14,3,114,101,97,100,225,157,+0,128,46,64,61,239,195,2,128,61,66,18,238,206,0,239,145,10,2,101,+114,114,137,189,176,186,65,187,130,32,224,107,9,0,32,124,82,3,101,102,+105,110,138,152,64,0,226,167,0,128,4,225,222,5,136,195,140,9,3,75,+32,75,52,224,249,3,204,202,64,33,140,5,0,75,133,85,109,131,168,218,+225,140,18,173,251,221,68,244,90,8,0,51,142,36,65,27,132,125,232,43,+8,228,185,3,135,194,232,126,0,240,122,2,232,6,0,163,44,161,83,197,+39,98,222,65,57,240,37,2,224,92,4,181,62,167,42,225,205,14,6,116,+121,112,101,82,101,112,161,84,192,120,4,53,49,55,32,79,127,239,229,221,+2,128,87,160,128,96,83,241,108,15,8,109,107,84,121,67,111,110,65,112,+224,87,1,137,178,224,55,29,128,52,177,74,195,210,132,58,131,70,224,30,+26,78,93,66,15,1,48,48,65,251,242,90,0,226,47,0,130,46,1,56,+57,231,202,1,66,14,0,51,234,244,119,64,43,226,49,10,225,211,7,227,+176,2,227,198,2,225,233,21,5,99,111,109,112,97,114,179,2,70,36,0,+55,116,247,97,151,160,153,235,109,14,235,119,4,249,68,2,96,234,235,17,+0,128,5,245,99,0,167,241,64,22,201,167,64,49,100,110,243,5,3,241,+6,5,0,83,184,128,247,150,4,134,123,229,214,0,193,241,228,97,24,1,+60,62,234,217,1,160,140,96,48,0,53,68,24,224,78,41,225,64,4,64,+0,199,77,224,53,20,1,69,81,192,48,200,106,225,173,0,225,26,1,97,+17,227,112,6,224,84,19,1,76,84,233,155,4,224,79,8,75,15,160,76,+225,109,3,224,82,19,0,71,192,82,161,152,180,82,232,49,22,160,37,224,+29,5,232,170,2,227,111,0,229,159,8,231,100,5,145,76,1,75,52,96,+195,230,226,9,229,189,14,145,88,227,174,205,1,61,61,227,169,0,64,38,+104,86,99,182,106,73,230,170,2,0,67,227,190,3,171,220,235,77,0,227,+120,0,237,27,2,64,46,237,40,7,227,133,82,1,38,38,227,133,68,193,+23,64,0,227,128,28,2,84,114,117,227,179,0,226,205,22,226,198,15,232,+229,5,227,90,0,227,176,34,3,70,97,108,115,192,133,128,45,227,25,31,+179,229,65,134,94,108,226,183,0,97,254,78,34,2,95,49,53,64,116,111,+134,98,8,193,252,140,114,96,10,235,15,1,164,38,138,190,98,114,231,9,+5,244,195,1,105,142,92,28,1,50,57,192,152,74,241,4,49,50,32,95,+50,183,149,0,55,149,209,4,95,51,50,50,32,184,9,72,254,84,119,85,+224,64,4,128,0,0,58,129,86,1,10,65,96,193,163,125,234,202,22,64,+137,227,117,11,227,108,5,129,154,65,113,99,94,164,29,161,183,64,118,146,+199,64,52,1,56,53,65,6,128,54,253,172,8,11,87,97,114,110,105,110,+103,58,32,99,97,110,138,108,4,114,105,118,101,32,97,178,227,127,0,129,+15,184,169,224,66,8,4,32,121,101,116,44,128,49,99,45,225,91,0,225,+218,2,64,145,204,80,130,109,99,214,96,210,97,194,64,32,0,54,246,47,+0,10,73,79,46,112,101,114,102,111,114,109,73,203,167,65,182,65,130,97,+53,5,51,57,48,32,95,52,143,37,97,21,96,22,96,68,183,5,229,27,+51,115,99,129,174,229,20,0,224,31,3,132,216,3,64,95,54,56,65,21,+0,56,159,119,229,55,5,239,149,5,225,207,12,232,114,12,132,205,224,13,+2,211,149,164,168,224,2,2,229,124,7,224,130,1,224,2,6,168,154,128,+142,171,83,128,2,243,112,3,192,218,235,142,7,241,73,0,197,212,129,192,+189,0,128,189,66,178,164,214,249,175,4,172,42,65,64,160,234,199,247,96,+149,163,155,164,131,102,43,205,13,174,243,64,0,3,95,53,54,54,163,122,+239,254,1,129,59,160,168,128,165,224,5,0,230,100,26,1,116,111,215,188,+96,194,230,104,4,224,207,29,97,90,230,110,6,225,110,1,224,204,10,132,+242,196,141,224,216,12,229,110,14,96,57,128,205,238,91,59,128,251,12,58,+32,111,117,116,32,111,102,32,114,97,110,103,230,39,0,164,63,97,231,231,+2,2,170,223,194,34,225,86,16,6,101,110,117,109,70,114,111,225,88,1,+161,14,235,37,0,233,246,3,198,60,135,21,237,27,16,192,83,1,84,111,+160,164,224,255,3,96,127,241,203,6,192,195,227,5,13,224,215,3,131,67,+224,203,22,1,84,104,244,16,1,224,83,14,236,7,0,130,61,224,17,7,+247,88,0,196,14,195,100,236,31,20,96,22,193,55,164,87,224,110,0,194,+122,162,240,224,78,0,0,52,233,135,0,201,14,242,113,3,225,98,15,0,+62,200,90,129,90,98,51,231,53,0,224,17,7,192,151,160,183,102,193,163,+172,192,176,224,27,9,124,173,0,90,64,130,0,48,206,145,225,199,9,224,+144,1,1,120,49,225,235,15,224,35,2,0,50,232,86,3,193,53,64,7,+4,67,32,95,53,56,95,15,224,114,6,226,92,19,2,104,101,110,194,96,+224,106,9,64,9,228,47,1,232,183,21,92,9,166,196,225,59,0,64,31,+97,123,64,31,0,51,96,31,2,85,32,75,64,67,104,51,106,114,202,120,+64,34,140,20,129,72,235,222,57,198,192,226,76,0,230,158,32,226,189,3,+230,172,1,224,16,0,224,13,13,128,173,224,93,2,230,170,13,224,48,3,+128,2,198,166,128,51,198,165,230,162,2,193,10,130,215,128,92,230,147,0,+94,84,230,147,2,224,81,1,0,82,241,200,7,160,23,224,52,20,4,66,+32,82,32,64,130,69,226,95,3,96,5,226,31,9,2,109,97,120,126,60,+226,63,15,2,109,105,110,224,31,2,226,63,6,119,21,138,225,97,139,244,+80,3,128,243,64,20,106,234,129,1,0,95,100,52,234,111,9,230,91,4,+128,104,226,149,1,174,49,133,191,0,90,116,232,165,202,2,52,51,48,211,+69,224,152,7,233,233,8,0,67,234,35,9,167,0,1,53,55,115,149,96,+171,228,47,7,96,128,203,206,129,100,162,205,120,139,192,138,231,90,2,232,+162,0,226,154,3,66,151,131,113,194,89,2,95,51,54,96,175,201,128,194,+57,87,39,94,53,165,7,101,26,0,56,236,5,1,128,58,138,215,183,211,+96,18,1,55,50,64,108,0,52,128,40,3,67,39,32,89,128,146,0,80,+142,60,96,92,233,23,2,239,54,14,96,2,224,37,2,0,66,64,70,194,+188,229,182,4,154,230,224,50,3,128,47,128,121,224,206,0,192,52,128,46,+195,3,142,243,195,108,96,190,0,52,89,125,160,10,100,75,130,45,6,49,+52,54,50,32,95,55,98,35,97,239,1,55,48,231,128,4,153,44,2,49,+52,54,152,160,225,53,1,224,97,15,225,34,2,97,237,193,229,65,99,130,+180,64,9,202,86,132,252,224,36,0,171,174,161,210,0,58,132,106,3,10,+65,32,80,129,145,1,95,56,88,102,217,192,160,14,160,20,96,45,140,213,+0,83,96,151,109,138,1,54,57,194,189,99,72,193,47,69,235,1,50,48,+64,132,115,238,224,155,1,224,250,1,64,78,140,146,0,83,149,162,233,226,+1,3,95,49,54,56,85,85,2,49,54,49,98,71,96,43,0,54,165,184,+97,10,226,150,0,246,252,7,129,195,241,22,7,161,202,195,199,108,247,246,+189,3,161,132,0,56,89,80,192,111,140,200,138,199,227,5,3,2,53,53,+52,160,56,2,95,49,54,89,143,69,34,96,124,193,174,229,207,3,64,123,+128,21,224,181,11,0,53,89,229,128,182,165,91,193,245,129,96,3,64,95,+55,57,130,56,155,188,64,7,203,205,224,7,13,128,55,128,43,225,80,1,+199,146,0,64,132,230,225,30,4,98,218,104,32,194,34,192,0,163,170,228,+162,19,228,160,6,68,157,7,97,32,99,108,97,115,115,32,100,158,2,95,+56,48,130,215,80,12,92,16,132,172,224,79,0,82,12,177,75,97,90,96,+44,192,237,225,183,0,243,8,7,98,127,228,198,1,210,139,150,80,64,5,+64,4,78,213,192,3,226,23,1,111,71,69,13,1,95,49,192,154,196,239,+98,118,224,233,1,66,18,0,85,223,12,66,57,226,233,0,227,69,6,224,+92,0,229,14,5,64,162,161,123,1,49,56,106,24,79,66,0,49,97,2,+97,10,2,95,49,54,97,220,160,0,66,115,232,188,3,2,80,32,35,162,+253,97,5,2,32,64,64,64,139,64,37,0,51,163,9,98,91,5,32,67,+32,61,61,32,190,244,224,150,2,96,246,67,45,129,69,160,69,168,46,224,+9,0,64,154,192,131,64,90,136,250,128,128,96,211,227,104,16,228,168,0,+229,119,0,235,30,3,128,2,229,135,4,192,123,239,75,9,224,55,3,224,+27,0,134,56,128,104,224,143,1,129,8,224,46,16,192,28,233,46,5,224,+107,9,192,82,240,79,4,160,16,246,9,6,230,8,1,98,88,67,236,114,+182,230,243,2,104,53,0,50,97,22,224,101,1,237,115,3,138,90,224,132,+0,104,226,224,161,0,147,75,228,142,3,136,80,69,35,224,23,6,250,79,+1,224,121,0,128,70,239,136,1,224,187,5,98,148,227,57,1,99,86,128,+228,132,182,224,201,1,128,197,136,51,251,218,8,96,0,192,190,231,41,4,+243,44,8,162,20,226,112,3,65,2,232,39,4,192,70,160,32,224,29,5,+224,28,3,224,25,4,160,43,227,192,0,66,187,0,51,128,174,0,48,73,+138,194,166,1,53,53,224,187,3,224,15,6,224,43,4,131,65,228,21,4,+99,99,224,67,7,193,29,229,52,4,64,125,83,105,231,190,7,64,23,160,+11,65,71,64,10,238,241,0,71,186,64,68,102,54,160,85,1,51,54,96,+63,132,139,132,45,134,164,230,147,7,192,47,245,93,0,198,16,64,196,100,+166,224,103,20,135,82,224,97,10,245,163,0,232,132,4,162,161,180,127,232,+27,2,3,64,64,64,89,233,149,0,201,146,163,125,162,27,228,147,0,234,+46,1,224,171,1,137,92,225,229,2,233,140,1,227,135,2,168,215,0,67,+197,127,192,146,231,184,7,68,179,139,91,0,85,110,108,130,192,64,21,138,+240,162,69,69,110,96,87,0,83,69,130,104,143,107,196,0,51,84,254,224,+142,2,2,95,57,49,97,8,167,151,0,58,129,203,1,10,65,64,53,2,+51,32,75,168,125,224,1,5,180,158,64,0,224,28,9,128,1,228,117,0,+224,37,18,224,35,4,224,32,23,64,210,225,170,0,64,165,246,109,0,98,+30,97,111,193,144,64,59,65,69,249,195,2,3,95,51,54,56,202,147,128,+253,224,25,14,96,91,214,55,224,134,3,224,11,2,192,8,97,169,64,47,+0,54,169,212,0,73,128,131,164,113,69,204,2,67,32,60,70,169,64,40,+224,157,1,230,193,1,128,77,247,101,4,242,168,3,100,187,236,162,5,227,+186,4,98,218,180,70,241,201,2,98,198,2,49,56,51,113,123,241,224,6,+224,82,46,160,78,193,32,202,41,232,95,5,0,52,83,252,197,15,228,119,+4,128,64,0,51,104,9,140,244,2,50,55,57,96,5,193,122,136,32,227,+105,11,233,213,3,142,71,0,83,134,66,181,27,67,93,227,92,1,64,24,+224,57,1,64,1,67,136,224,243,0,229,159,1,99,109,227,107,5,224,222,+0,136,148,133,42,163,163,224,79,1,96,245,232,36,22,128,2,231,158,0,+232,54,6,110,132,226,243,4,232,16,1,232,41,13,224,83,1,224,89,1,+232,126,0,161,201,224,23,1,224,61,8,160,62,224,29,7,96,2,238,212,+9,128,0,129,103,241,188,11,224,16,0,224,192,2,224,42,0,162,59,128,+0,193,58,96,105,225,65,1,224,81,8,145,136,161,10,65,156,0,54,73,+150,226,127,3,229,232,2,143,105,160,40,134,69,64,55,64,24,130,181,225,+212,3,224,236,6,245,146,0,128,105,101,117,167,199,224,35,0,166,111,226,+61,13,192,7,201,70,162,138,160,57,247,149,12,64,100,2,53,51,50,240,+160,1,166,91,215,108,241,235,0,224,172,3,234,71,2,233,83,0,224,91,+33,209,9,160,87,96,69,163,23,0,64,228,239,6,167,17,131,124,128,0,+224,141,8,224,139,1,130,65,129,124,224,5,18,143,183,235,174,6,97,182,+1,95,49,102,127,212,140,226,113,4,96,101,225,88,2,226,126,6,227,46,+3,129,31,224,18,3,194,68,225,242,5,224,60,11,243,223,2,226,85,0,+128,2,241,197,0,228,38,0,160,250,162,197,160,151,64,38,0,55,96,230,+246,41,5,64,23,128,88,101,68,153,11,185,12,160,131,143,145,225,176,9,+232,145,14,225,236,9,248,58,4,64,112,96,44,249,198,19,192,104,96,12,+230,9,0,225,36,3,224,2,6,193,71,224,249,3,225,79,18,245,122,5,+225,94,85,0,51,138,24,225,94,63,228,31,20,96,148,135,29,225,116,7,+0,51,200,43,224,55,0,228,51,57,64,38,225,184,0,228,66,49,228,67,+8,224,12,3,128,157,165,167,128,119,224,116,3,232,43,5,192,53,193,11,+129,118,228,62,6,96,152,1,49,57,229,171,5,228,152,26,228,118,16,128,+66,205,246,224,47,0,65,116,96,162,98,51,107,207,73,164,246,241,2,6,+114,101,99,83,101,108,69,252,141,1,145,183,1,56,57,128,111,242,255,9,+1,56,48,130,76,71,239,0,51,232,206,2,224,37,1,3,95,56,52,56,+241,233,2,2,103,101,116,215,78,224,74,3,64,63,144,67,224,42,1,6,+115,101,116,70,105,101,108,87,126,64,30,139,174,224,30,1,13,68,97,116,+97,46,82,101,99,111,114,100,115,46,83,224,43,5,139,196,224,117,4,224,+30,2,67,238,224,74,17,2,72,97,115,224,43,3,203,33,128,215,250,23,+0,0,56,77,34,64,31,234,229,1,192,29,160,7,64,28,0,54,172,98,+225,204,18,227,85,10,64,57,138,27,66,84,237,144,0,64,22,209,232,107,+37,175,146,235,14,7,97,145,97,132,235,15,11,98,138,243,231,2,227,95,+1,247,37,4,96,175,233,159,19,224,38,1,224,106,5,160,28,195,248,164,+179,214,72,248,72,6,128,5,137,201,233,87,3,117,252,224,101,3,100,12,+224,13,0,231,17,4,164,191,64,130,239,121,6,224,56,11,224,90,1,224,+112,3,224,248,4,138,16,228,2,2,97,101,193,60,228,10,15,233,20,4,+165,68,233,128,8,254,198,3,239,108,6,160,57,207,111,234,141,1,246,124,+22,229,149,15,224,191,3,202,25,160,241,229,54,0,165,67,161,253,233,197,+0,97,92,224,56,0,194,187,0,50,68,43,64,143,164,242,244,147,4,96,+184,84,149,65,113,181,154,245,151,0,196,130,2,95,49,49,122,110,64,15,+0,54,100,121,97,22,0,67,133,73,100,139,228,111,3,164,92,246,37,3,+5,77,101,116,104,111,100,228,159,2,64,89,224,180,1,1,95,54,77,15,+165,86,240,109,32,130,181,64,228,131,22,162,130,236,219,9,96,173,67,250,+97,127,130,134,1,95,55,217,179,224,125,46,0,49,240,236,7,224,126,16,+96,0,224,87,3,0,83,192,87,199,16,224,92,8,172,68,130,90,231,80,+12,96,195,250,12,1,96,0,244,47,5,100,119,133,219,98,130,153,97,0,+56,95,144,64,25,133,181,108,176,2,95,49,52,78,193,225,176,1,2,100,+102,108,101,237,64,39,133,190,228,84,18,96,205,245,142,1,227,89,1,239,+254,3,244,133,0,224,28,6,225,145,2,235,42,1,139,41,192,110,215,207,+111,187,206,218,163,14,163,121,117,139,244,197,11,225,157,1,232,142,7,224,+23,5,193,187,0,56,71,205,245,15,13,224,74,66,65,86,242,174,2,225,+88,8,0,54,130,168,161,254,64,74,104,40,146,172,64,61,64,90,129,148,+146,234,73,157,146,229,0,49,116,162,146,229,64,40,135,5,242,205,8,64,+168,192,95,224,1,9,242,121,3,224,37,15,224,35,4,224,32,23,224,29,+20,224,26,17,224,23,14,224,20,11,224,17,8,243,49,4,96,0,65,14,+231,244,3,0,52,98,53,170,15,225,131,0,64,57,2,55,57,48,227,152,+0,247,95,5,106,236,247,96,2,64,43,99,171,160,43,224,70,2,99,158,+242,3,2,65,156,65,214,96,124,227,75,9,0,56,196,78,130,217,96,7,+252,90,8,97,225,0,52,224,17,0,98,120,197,230,247,39,3,0,52,96,+105,193,23,224,196,6,64,108,216,159,224,162,5,232,158,1,199,41,228,239,+3,104,158,241,45,6,163,149,131,192,171,113,232,63,2,128,123,225,20,18,+224,193,17,199,236,192,196,128,1,241,172,8,160,223,97,244,131,121,128,189,+123,238,67,5,229,136,6,224,105,6,65,79,0,53,128,245,192,242,228,134,+1,97,145,71,21,71,16,241,214,5,254,33,5,223,167,88,69,192,37,66,+109,0,54,162,109,0,89,220,167,230,82,5,159,241,229,45,7,128,104,224,+33,18,238,69,5,224,177,4,192,25,255,152,2,136,173,224,184,1,224,49,+5,230,196,0,97,198,64,43,202,10,224,44,11,224,43,1,234,190,1,203,+60,133,165,160,248,245,32,1,69,25,231,64,5,175,52,233,78,1,65,240,+128,13,130,27,96,35,160,55,194,132,65,208,64,39,162,93,70,29,225,218,+2,224,96,34,69,8,192,103,234,74,2,224,57,41,226,231,1,128,140,2,+64,95,57,173,220,97,1,253,216,1,85,160,128,160,192,100,66,172,199,252,+0,80,141,207,5,49,32,64,95,55,54,96,89,224,245,23,0,95,166,13,+224,67,1,224,251,9,224,8,10,160,205,224,244,0,142,219,99,46,160,5,+224,68,8,224,50,19,224,44,18,225,25,1,225,31,4,98,82,166,170,232,+181,1,65,43,168,163,142,220,195,39,195,203,193,60,163,13,128,113,227,16,+5,225,14,9,227,89,13,128,134,161,242,224,33,12,196,212,226,250,9,228,+238,2,96,223,64,34,145,173,228,180,0,67,11,0,55,75,0,1,95,49,+167,237,132,41,248,9,5,128,216,229,22,6,193,51,155,170,105,167,1,55,+57,105,92,227,96,0,240,12,0,244,87,6,98,18,1,53,48,73,196,0,+54,64,50,233,196,1,2,98,105,110,79,11,228,195,0,237,234,6,1,64,+64,107,2,7,95,49,53,50,49,32,95,53,74,41,224,59,1,2,78,117,+109,171,167,228,79,7,64,251,253,166,6,229,81,6,179,0,64,161,69,18,+0,52,64,19,141,43,224,213,0,233,222,3,128,0,226,96,2,225,189,0,+129,98,193,155,210,252,228,27,0,131,163,162,137,130,134,69,244,192,39,226,+134,5,225,169,4,0,85,97,169,235,42,0,228,4,8,129,182,230,104,4,+224,159,3,224,29,8,225,27,33,134,147,96,8,96,32,225,7,5,231,29,+12,97,235,195,13,98,114,224,96,17,101,17,110,16,226,114,3,224,18,13,+232,94,9,66,66,0,53,226,66,4,5,102,117,110,100,101,112,98,9,93,+108,226,65,8,224,176,9,136,64,227,138,0,163,202,230,222,7,192,216,231,+248,10,1,56,48,96,95,233,79,9,226,79,4,1,48,54,128,45,135,151,+231,121,3,227,188,1,227,36,2,177,251,225,107,5,224,130,16,111,253,224,+130,50,225,29,1,228,71,8,215,32,160,123,226,54,3,224,129,1,97,5,+103,202,224,112,18,128,0,193,104,133,54,228,209,9,230,229,0,229,20,15,+234,117,3,224,169,4,232,24,4,225,37,18,224,162,22,224,89,10,229,74,+2,195,85,163,183,227,92,0,229,84,5,0,51,133,84,0,56,157,95,96,+9,230,64,1,167,251,228,50,12,160,104,228,49,4,228,46,12,228,45,4,+228,42,8,224,205,1,225,177,3,227,138,7,224,189,11,64,96,181,202,1,+56,48,235,115,13,72,88,167,31,224,171,119,0,54,140,131,227,212,7,224,+187,0,224,188,22,227,98,7,3,95,51,52,54,114,166,71,227,144,109,106,+253,130,76,167,8,227,100,9,128,156,224,132,7,192,21,241,11,8,96,42,+224,62,0,80,201,163,134,128,26,130,30,237,69,8,66,175,182,230,166,155,+66,197,0,55,89,75,230,26,3,192,96,162,255,224,69,1,229,214,6,115,+65,236,8,0,224,58,4,160,178,224,16,3,143,124,232,9,1,230,124,0,+197,149,64,16,192,231,206,134,133,252,166,2,238,146,3,129,200,0,52,174,+22,65,222,2,67,32,95,83,180,99,139,0,35,98,51,96,243,2,52,51,+48,208,136,147,173,2,49,50,55,65,240,229,238,1,11,66,97,100,32,100,+101,114,105,118,105,110,103,231,254,1,224,168,0,231,31,4,192,163,226,104,+4,234,78,6,224,171,8,225,197,4,162,198,213,38,97,97,245,25,15,0,+67,82,168,227,244,1,195,1,96,250,239,159,6,143,60,202,73,160,5,64,+4,70,152,192,3,242,95,9,128,127,226,191,3,0,67,255,74,0,128,238,+238,199,5,64,44,226,69,8,226,59,0,95,154,64,174,233,119,4,205,34,+64,58,3,55,52,32,95,97,125,117,141,224,6,0,224,223,3,224,112,3,+0,83,161,111,224,212,20,226,148,5,65,69,1,56,48,66,208,186,103,133,+55,246,133,1,231,14,6,224,253,8,67,220,98,61,171,166,148,8,1,80,+32,64,11,146,189,0,90,160,1,130,225,0,58,128,110,108,246,133,219,169,+161,96,2,64,79,2,52,51,52,140,238,1,50,55,96,13,135,56,0,52,+83,11,96,0,236,152,11,91,97,100,150,233,165,27,228,243,3,224,29,8,+224,20,0,228,243,5,98,85,233,144,1,240,96,5,151,104,129,28,225,90,+1,0,52,82,31,129,111,233,174,11,231,44,8,233,150,0,2,53,52,56,+96,209,0,48,64,255,231,199,2,224,96,8,152,74,224,96,14,131,63,163,+133,232,63,11,160,129,0,54,138,16,130,197,224,126,19,96,0,65,190,251,+51,3,1,80,32,231,64,2,67,234,165,202,70,208,3,10,65,32,83,108,+57,128,79,64,86,64,25,0,54,224,62,0,1,80,32,135,230,0,80,128,+24,240,15,1,96,26,201,5,224,87,5,239,50,1,64,122,96,156,160,62,+142,32,225,13,7,237,44,8,64,42,134,103,128,105,128,72,162,92,128,16,+229,86,0,192,120,96,52,214,226,241,156,0,138,188,239,177,1,244,30,5,+0,54,153,29,192,100,130,253,128,11,101,218,236,155,7,226,194,0,197,19,+192,86,230,153,6,199,25,129,176,224,94,5,230,41,7,192,29,231,60,8,+229,173,9,79,158,236,66,0,2,95,49,52,102,228,254,30,3,64,19,100,+181,0,67,83,95,165,128,103,11,0,85,154,16,64,0,235,255,12,97,61,+132,11,68,241,2,57,32,58,128,55,225,199,2,98,67,97,199,110,23,96,+41,69,220,1,95,56,254,94,4,19,80,114,105,109,105,116,105,118,101,115,+46,67,111,110,115,116,114,97,105,110,158,112,64,56,245,182,1,64,82,226,+89,1,111,110,161,186,237,37,2,164,43,235,17,45,238,104,0,193,69,239,+106,1,192,25,3,85,32,64,90,129,236,167,202,234,230,22,160,37,138,167,+194,4,234,164,3,163,216,224,80,0,224,15,7,230,175,10,224,34,1,237,+201,9,64,211,2,95,51,52,68,17,105,14,225,185,5,3,67,32,95,55,+104,175,99,56,198,193,64,0,65,80,227,170,3,233,87,3,254,71,6,171,+118,98,101,64,70,0,51,132,134,99,163,144,167,99,99,152,254,192,91,227,+225,1,224,93,22,226,222,0,247,42,19,236,254,4,232,127,10,227,180,5,+237,158,0,224,90,1,64,172,183,10,226,18,1,131,157,227,57,2,229,100,+2,65,181,96,237,65,61,130,109,93,104,183,111,158,42,230,130,6,255,34,+0,132,17,64,60,65,108,225,28,6,224,75,14,161,54,132,254,0,75,96,+177,218,105,192,102,212,117,186,27,96,47,133,3,224,47,7,1,66,32,224,+43,11,132,250,132,120,233,173,6,65,30,1,52,51,84,153,137,149,136,69,+233,12,12,231,7,39,0,55,156,139,134,136,0,52,177,178,128,72,226,169,+1,2,95,49,55,123,66,253,147,34,138,33,224,247,1,160,171,253,146,7,+64,248,132,181,194,64,71,43,232,161,25,96,207,66,130,154,58,64,161,98,+62,0,58,128,208,224,79,1,232,238,21,135,86,64,60,0,55,100,196,64,+67,101,23,2,55,56,54,69,65,64,22,181,16,132,163,224,9,1,161,166,+213,26,161,7,230,79,2,160,39,226,230,1,228,219,11,226,236,2,224,47,+22,195,105,224,47,0,165,53,224,47,15,219,113,160,89,224,47,23,184,176,+225,207,1,224,47,23,204,2,128,27,229,115,9,224,31,5,174,44,129,62,+103,250,66,115,232,16,2,224,64,9,160,144,192,61,231,202,16,227,230,5,+234,147,1,231,140,4,161,226,224,27,0,206,31,249,147,2,224,136,15,193,+73,192,136,197,233,100,54,77,201,237,182,6,15,116,121,112,101,32,97,112,+112,108,105,99,97,116,105,111,110,237,190,1,225,183,0,232,55,2,247,73,+15,93,31,224,51,1,193,52,128,40,230,181,5,229,76,4,173,206,160,194,+128,56,184,125,104,114,129,5,132,96,1,49,53,64,218,0,67,68,236,100,+228,5,67,32,95,53,54,51,64,47,246,232,0,118,139,96,0,105,226,65,+147,224,236,1,1,36,120,192,218,225,26,1,194,249,237,161,9,235,82,2,+146,61,228,171,7,2,95,49,53,68,226,192,79,128,248,230,57,6,0,51,+79,90,1,53,51,128,242,225,26,1,108,26,226,10,5,224,237,2,137,73,+1,49,53,129,232,226,9,0,225,53,2,225,243,9,195,109,225,85,2,237,+69,4,224,155,7,128,227,254,199,0,225,1,6,243,153,18,244,173,3,227,+122,3,144,132,128,126,171,44,224,13,0,128,30,64,57,226,154,2,224,1,+1,200,168,234,169,3,160,85,255,163,9,182,211,224,49,12,224,131,5,69,+248,96,36,225,116,0,232,238,9,96,46,160,28,129,108,131,228,84,163,97,+125,0,75,104,223,128,5,225,231,0,133,247,224,70,1,145,35,0,53,70,+239,241,29,3,0,79,74,195,0,53,231,145,1,225,237,5,225,243,5,197,+168,64,73,176,174,195,55,71,219,96,97,117,54,226,254,1,231,250,2,65,+20,2,95,49,48,194,150,0,49,102,52,96,86,96,41,233,88,0,192,0,+227,216,0,227,205,16,160,240,227,205,11,224,40,5,161,70,228,39,1,129,+162,160,7,224,42,4,222,98,229,31,0,160,128,128,49,228,99,0,199,157,+165,130,128,1,160,31,225,39,2,225,181,2,225,243,3,226,29,2,224,42,+4,224,123,0,224,36,5,225,147,2,224,181,1,160,29,225,155,0,226,4,+3,194,10,192,56,160,36,67,77,1,50,51,65,251,1,48,48,128,5,67,+249,129,131,64,43,0,79,77,155,236,190,2,2,79,32,35,75,47,162,26,+233,179,0,160,161,227,191,6,226,54,6,227,170,7,129,100,162,178,64,136,+0,54,70,43,226,138,4,145,229,64,0,131,84,194,244,244,26,3,64,26,+160,33,235,25,32,0,50,227,208,8,142,115,224,68,20,224,74,21,224,75,+2,224,77,0,226,94,5,244,36,4,227,243,5,227,222,9,78,161,130,251,+224,67,11,194,71,228,57,7,228,35,8,129,48,128,170,192,80,226,60,5,+224,70,0,160,67,97,76,224,79,0,244,202,5,64,67,234,23,1,234,187,+5,64,29,1,50,52,192,121,64,0,195,16,224,182,4,232,45,6,0,54,+81,72,232,91,32,160,45,224,124,26,64,32,236,56,4,225,182,6,1,54,+55,160,8,230,164,0,228,9,27,242,29,1,224,91,21,168,242,224,91,0,+128,176,230,221,10,0,80,66,255,0,50,255,166,1,224,132,1,160,51,196,+235,225,145,0,130,89,225,90,2,96,170,164,84,229,24,2,71,10,67,40,+163,247,192,140,136,128,233,84,13,19,98,97,100,32,102,105,110,97,108,32,+100,111,32,115,116,97,116,101,109,101,176,145,226,100,4,166,247,224,16,8,+231,86,3,192,138,229,179,3,228,205,9,163,185,224,74,2,230,165,10,65,+80,230,5,0,229,27,4,224,2,0,224,29,3,241,10,0,169,142,97,5,+224,8,40,230,226,3,160,90,224,158,1,160,32,128,47,226,172,0,192,66,+96,68,169,217,193,140,224,16,2,128,34,240,51,5,74,158,112,189,160,15,+239,38,1,160,0,128,52,160,129,234,80,8,224,33,5,109,126,0,51,228,+2,1,193,38,227,85,2,0,50,109,152,226,53,1,71,139,128,168,136,123,+128,161,1,54,51,105,213,1,49,54,144,163,231,188,0,0,80,106,241,0,+79,64,182,70,27,0,53,118,56,224,48,0,97,213,129,195,128,242,224,236,+0,138,218,0,49,255,109,4,2,97,105,108,162,96,64,160,2,95,49,51,+74,179,2,95,49,50,83,82,249,167,3,3,98,105,110,100,160,40,64,135,+230,162,0,102,73,224,86,8,2,62,62,61,128,44,235,77,11,0,98,194,+209,193,21,226,77,0,226,2,5,226,11,13,229,189,1,160,34,225,236,69,+225,109,0,224,213,12,225,42,0,230,159,9,237,120,4,130,2,144,249,192,+80,224,0,2,228,234,5,196,98,128,171,233,37,4,171,157,227,216,1,224,+39,14,229,66,4,195,231,224,39,10,160,230,224,79,0,237,107,15,231,157,+4,233,79,2,197,65,160,2,224,101,14,162,250,224,141,24,174,248,224,39,+11,224,141,4,161,5,224,130,2,225,128,11,226,40,9,96,17,177,24,114,+74,225,202,1,9,70,114,111,109,84,104,101,110,84,111,226,253,2,0,66,+203,51,0,66,64,7,227,222,5,224,125,23,235,143,2,96,16,224,115,18,+163,25,224,101,83,160,213,224,99,13,225,151,24,174,156,225,151,24,236,220,+2,224,179,12,192,173,64,18,224,169,14,96,167,224,159,4,224,77,2,196,+199,228,31,0,233,93,5,229,61,0,0,89,224,44,3,192,127,64,53,147,+252,224,147,1,234,58,12,96,23,232,202,3,136,21,241,46,1,230,206,0,+231,86,7,224,21,1,96,18,128,185,231,86,13,224,124,5,183,35,160,0,+226,204,17,96,77,96,97,224,249,7,160,25,105,146,74,16,111,148,84,114,+79,254,207,211,225,179,1,96,95,65,130,0,55,205,119,224,66,1,101,101,+229,71,0,68,179,128,40,211,39,226,108,0,172,81,236,69,17,0,48,64,+177,236,69,20,98,9,128,115,128,107,64,104,160,174,224,101,4,96,25,176,+254,224,52,11,149,12,139,17,229,117,0,228,170,4,201,169,194,37,232,38,+14,235,95,5,128,44,234,1,1,128,135,125,166,225,97,11,97,213,226,58,+5,102,108,92,61,149,133,79,121,224,0,1,224,151,2,130,53,194,219,173,+72,95,163,189,230,128,1,226,50,12,195,14,232,79,1,247,69,6,224,200,+40,227,73,0,226,102,4,199,73,242,186,2,240,223,0,224,247,5,224,244,+0,142,191,160,237,224,85,77,128,67,129,69,229,236,1,225,89,5,231,92,+0,162,156,116,125,65,92,186,249,227,200,1,168,16,96,146,87,50,81,139,+2,64,95,56,224,5,1,224,198,18,130,237,1,55,52,243,217,3,177,253,+224,200,5,64,191,231,201,1,172,125,227,213,7,96,75,120,156,192,52,206,+217,194,12,226,207,5,162,0,224,29,0,226,204,9,226,4,8,226,252,0,+226,13,2,162,178,0,53,105,31,64,82,74,2,65,115,160,253,224,202,17,+160,206,164,254,160,130,230,28,1,249,23,5,229,157,4,195,218,227,154,8,+238,110,7,129,221,128,161,227,101,2,233,91,0,224,96,2,196,207,229,232,+18,224,43,5,164,105,236,231,4,0,55,99,184,224,76,1,225,245,8,160,+18,226,189,5,101,46,174,251,224,171,12,193,143,225,50,2,160,2,224,51,+0,64,1,231,131,4,196,55,230,118,0,64,2,224,46,17,192,98,230,165,+1,230,149,8,224,46,3,195,77,192,28,130,90,128,11,110,76,192,24,253,+12,13,227,140,0,224,154,1,224,160,2,226,162,3,160,2,167,51,224,158,+4,199,159,224,47,6,96,18,224,39,4,224,245,7,133,47,224,79,2,224,+2,7,192,157,224,196,1,160,57,225,47,9,224,67,6,224,153,0,224,67,+27,227,7,2,224,35,3,96,199,247,99,3,224,39,14,129,115,64,19,240,+146,5,226,195,12,192,44,128,128,236,57,2,225,120,4,224,132,2,224,193,+0,224,114,11,224,239,2,228,67,4,226,52,0,224,53,2,224,242,4,201,+18,225,142,5,248,80,4,225,56,9,160,117,224,16,1,245,147,0,224,70,+3,228,30,1,224,75,0,220,57,225,55,15,224,79,77,225,81,1,104,220,+130,109,1,95,49,67,197,103,210,3,55,32,95,55,134,32,2,49,55,51,+100,87,224,22,8,233,129,1,64,13,102,83,224,0,1,224,121,8,224,120,+3,128,173,224,78,6,111,223,96,0,195,38,64,239,160,89,64,6,226,205,+1,230,95,17,133,219,101,9,103,88,240,16,15,8,114,111,109,83,116,114,+105,110,103,251,206,0,224,174,5,224,97,5,239,135,2,229,187,6,1,52,+57,229,17,1,224,238,12,146,180,225,111,0,194,122,229,200,2,217,84,64,+166,207,224,224,0,1,224,88,1,227,113,8,225,15,1,224,125,10,224,192,+2,227,106,19,227,105,12,224,209,4,227,99,0,224,100,10,128,1,227,29,+8,226,129,0,224,50,16,226,4,14,1,56,52,92,86,0,55,149,126,96,+0,226,10,10,104,66,155,123,1,55,53,92,9,0,55,171,125,128,0,226,+27,60,0,82,125,234,0,97,210,52,226,29,144,224,89,2,226,32,10,227,+145,2,224,39,3,229,146,114,224,17,1,226,52,17,224,56,12,230,187,6,+224,121,1,224,45,4,0,83,228,85,9,245,211,1,66,75,224,67,46,226,+143,1,230,83,15,225,10,11,224,73,11,217,197,224,56,6,229,14,10,0,+56,225,16,0,229,92,1,227,13,21,0,53,75,86,1,55,54,192,172,136,+144,226,89,0,133,178,0,54,128,49,1,50,56,104,233,64,49,163,60,64,+127,2,52,48,56,99,85,211,201,224,110,14,224,60,9,128,0,227,121,60,+6,73,110,116,101,103,101,114,227,120,152,193,148,6,80,32,75,32,95,51,+54,112,5,70,193,1,95,51,158,28,64,231,68,204,2,50,53,48,64,75,+0,57,64,20,2,95,49,52,80,52,128,199,224,118,2,128,146,0,83,167,+223,226,98,0,160,2,224,184,5,232,170,6,241,4,6,228,4,10,224,33,+8,129,9,225,6,2,226,189,0,226,49,0,170,126,193,3,183,47,226,35,+3,0,52,141,86,224,122,21,233,37,8,224,122,62,234,214,2,250,214,0,+81,122,250,227,1,192,100,96,112,192,109,67,84,160,30,192,27,233,65,1,+226,68,10,1,54,55,129,180,207,125,161,153,131,15,160,242,192,95,96,66,+234,65,8,224,132,10,192,7,225,254,1,64,96,120,141,248,107,1,224,55,+2,228,177,1,224,106,1,0,83,64,166,0,48,77,126,0,55,204,164,228,+213,1,224,38,5,0,48,130,141,227,56,3,224,232,6,3,95,49,54,53,+238,55,0,224,172,2,160,211,224,42,2,2,83,32,73,184,197,129,51,193,+230,0,50,98,98,242,33,6,0,85,65,205,64,67,0,95,143,236,67,74,+2,95,55,50,68,156,2,95,49,52,178,243,160,236,227,10,2,195,117,64,+0,128,19,64,45,252,63,4,29,95,32,99,97,110,110,111,116,32,98,101,+32,117,115,101,100,32,97,115,32,97,32,118,97,114,105,97,98,108,101,164,+56,224,189,9,110,209,0,52,106,75,115,180,0,56,126,166,225,66,1,128,+132,242,99,8,194,212,96,209,0,90,64,24,130,98,64,75,64,247,240,56,+8,153,130,224,220,1,1,95,51,79,52,187,13,224,197,1,6,116,99,69,+120,112,114,58,192,203,7,104,97,110,100,108,101,58,32,96,190,64,132,123,+59,96,92,100,69,0,54,96,93,244,109,4,160,82,4,79,32,35,51,50,+182,88,224,45,0,224,131,0,224,50,4,8,58,49,55,56,54,32,64,10,+65,97,220,86,79,226,93,12,130,200,228,140,6,230,237,2,224,49,2,226,+42,1,228,151,6,228,29,0,226,152,0,228,205,27,226,21,0,225,117,1,+192,33,240,68,19,241,37,3,228,134,10,224,31,6,226,225,0,226,115,1,+0,55,70,209,224,34,0,224,64,8,160,150,192,60,231,232,4,224,109,9,+224,108,9,99,8,163,122,228,102,15,192,85,128,56,196,151,163,208,160,104,+228,95,7,224,144,0,118,58,182,251,118,219,224,130,3,224,134,0,230,118,+2,232,254,4,224,38,1,228,88,10,224,52,1,228,245,2,192,58,224,55,+3,196,105,228,106,2,228,109,19,224,59,0,230,19,3,160,92,228,115,89,+225,81,2,226,219,3,175,98,96,210,225,215,7,164,149,224,180,2,192,38,+233,190,10,2,56,52,56,227,235,2,8,68,97,116,97,46,70,117,110,99,+76,84,1,46,36,232,219,0,0,82,192,8,160,141,226,141,8,64,25,67,+206,0,52,137,199,64,104,89,180,163,224,248,119,1,224,38,31,225,157,1,+227,94,1,225,157,5,244,67,2,227,41,21,68,75,0,53,100,75,100,133,+69,14,0,50,101,172,65,117,64,28,0,52,228,104,0,132,106,230,130,6,+150,150,226,214,0,228,94,7,227,81,4,243,199,19,224,207,4,162,230,192,+39,96,95,169,85,225,243,4,162,202,250,135,7,186,207,224,40,25,96,31,+64,27,193,110,224,197,0,96,13,1,83,32,154,9,169,246,0,85,96,44,+233,21,1,65,97,170,38,1,85,32,160,35,224,0,1,196,44,224,2,0,+225,170,1,245,167,13,196,32,140,110,0,52,70,127,134,134,2,95,49,49,+204,253,227,248,0,224,63,6,108,61,88,117,71,119,72,126,2,95,49,53,+153,128,251,188,7,224,148,2,105,159,193,101,160,86,2,49,52,55,65,165,+128,13,94,94,0,80,252,235,0,183,136,0,53,242,32,6,231,113,2,98,+91,226,30,5,96,99,225,109,1,226,164,5,1,55,56,161,50,225,230,1,+225,249,4,228,159,0,161,32,192,2,98,134,226,30,5,64,1,160,22,229,+31,8,130,56,224,39,1,224,20,2,226,99,7,65,252,128,0,224,114,6,+224,138,0,199,74,197,69,231,82,4,251,172,1,128,36,225,165,4,97,65,+224,73,1,224,87,0,97,172,139,35,1,52,53,202,58,229,124,4,226,60,+3,226,188,4,237,155,7,109,148,247,236,2,3,66,32,95,57,92,176,2,+95,49,54,145,139,254,39,2,227,167,8,227,31,13,224,98,3,224,94,7,+64,176,233,37,2,96,206,226,226,1,192,2,161,105,225,104,2,254,111,6,+225,170,0,233,177,5,205,73,225,201,7,160,52,230,65,5,192,22,230,73,+4,129,112,3,95,49,54,48,67,170,128,71,226,211,7,170,13,224,53,3,+128,0,225,172,4,128,113,225,169,0,96,0,163,75,1,95,53,110,52,174,+90,0,67,169,241,128,0,2,95,54,49,143,91,236,72,5,64,1,196,239,+192,75,225,46,5,225,26,5,225,70,3,225,72,4,225,7,4,252,115,2,+225,137,2,228,230,4,96,50,226,164,1,239,108,14,224,97,0,131,140,160,+231,255,120,9,185,15,225,69,0,160,28,227,226,4,0,52,230,178,2,237,+25,1,255,110,6,70,102,0,51,102,102,2,75,32,89,96,121,67,202,128,+131,104,56,226,92,11,226,11,12,161,3,199,207,136,209,0,52,123,126,96,+240,232,103,5,71,92,227,16,0,192,240,131,71,233,130,6,224,225,29,160,+224,64,206,0,50,167,53,161,60,251,185,14,224,31,3,240,101,1,66,101,+0,49,220,144,102,136,87,187,101,220,76,33,161,48,0,49,135,180,2,49,+51,57,149,107,0,57,135,174,0,48,224,22,6,0,56,96,22,82,175,224,+22,3,82,25,64,22,0,56,96,22,232,225,1,15,80,114,105,109,105,116,+105,118,101,115,46,87,111,114,100,34,128,37,0,55,224,60,5,168,25,70,+147,64,22,93,153,0,95,146,175,3,95,50,49,52,65,175,64,14,0,57,+96,103,97,144,224,22,0,1,54,57,114,218,224,21,6,245,254,0,96,22,+64,89,168,144,192,89,0,55,96,36,0,55,101,34,1,55,55,106,214,134,+165,243,154,2,6,57,50,54,32,95,53,51,98,96,64,31,65,40,224,31,+19,65,128,224,31,16,67,182,8,54,57,54,32,80,32,95,53,57,69,63,+0,53,165,62,160,56,109,217,224,227,4,115,23,147,183,135,126,0,49,80,+228,224,22,11,139,53,224,61,4,96,111,128,34,2,38,49,46,66,1,1,+38,48,96,6,224,39,6,128,28,224,27,14,96,21,192,27,65,68,137,184,+64,114,5,32,95,51,50,50,32,100,131,128,9,64,35,64,34,131,116,224,+34,2,98,125,224,34,4,130,200,67,70,64,108,67,134,96,209,2,64,95,+55,102,178,224,88,0,96,44,130,147,2,102,47,32,64,12,130,137,4,85,+32,75,32,75,65,140,0,58,128,64,64,111,2,52,49,32,225,252,0,0,+56,67,23,129,29,226,17,3,0,52,224,21,10,0,52,224,42,11,225,58,+1,226,103,4,68,94,224,21,7,1,50,51,224,43,11,225,159,3,96,164,+131,19,96,164,1,49,55,70,223,64,6,130,130,73,73,64,6,3,57,32,+64,83,130,59,105,158,0,55,75,177,193,123,114,192,224,149,3,68,157,108,+88,0,54,130,205,224,43,2,225,248,9,192,25,160,14,64,28,0,54,99,+109,64,35,97,78,199,231,96,140,1,80,32,128,40,128,162,162,3,160,73,+0,64,69,74,0,80,160,20,196,106,192,211,96,8,0,54,66,218,112,145,+130,169,64,82,128,22,64,21,1,95,50,244,27,2,96,130,0,54,96,130,+3,105,116,111,102,65,224,64,61,97,40,99,61,0,57,66,18,103,191,128,+225,64,7,128,152,0,54,155,246,1,54,50,128,6,86,115,160,103,96,39,+0,53,98,194,96,11,64,84,130,181,2,102,62,61,96,98,0,51,160,13,+96,12,130,138,1,102,60,128,26,162,107,0,60,96,12,130,107,3,102,110,+101,103,64,14,65,159,64,14,0,42,96,12,164,227,0,45,96,12,129,69,+1,102,43,96,12,128,207,0,85,66,159,0,65,128,126,82,10,101,183,1,+80,32,112,0,0,85,97,123,87,150,192,21,69,151,160,21,128,156,229,106,+1,133,83,77,62,96,44,240,239,1,134,199,102,176,241,64,1,241,10,20,+203,177,166,223,166,239,240,200,7,160,30,244,151,8,230,109,3,235,255,1,+184,54,224,87,19,98,175,224,87,51,130,103,192,220,192,25,203,201,205,197,+225,25,6,224,248,3,135,192,240,214,1,224,32,8,135,108,224,32,18,231,+56,0,224,220,7,192,24,135,201,249,38,2,245,175,0,160,27,101,220,0,+52,71,252,2,95,49,53,73,214,224,44,4,233,102,0,224,73,11,192,28,+224,159,18,136,110,224,32,18,131,116,224,192,10,192,24,224,118,9,226,15,+1,224,27,9,218,169,224,27,10,104,108,128,0,245,15,0,66,193,163,90,+232,21,11,2,73,110,116,136,20,64,59,224,36,4,0,68,81,28,185,245,+4,95,84,121,112,101,192,12,128,47,64,135,224,84,15,5,70,108,111,97,+116,87,160,39,232,146,7,96,87,3,66,121,116,101,159,231,96,85,3,114,+110,97,108,224,19,2,160,57,131,219,137,163,65,89,139,98,139,178,1,95,+56,185,185,152,134,64,46,0,54,227,190,6,0,52,128,69,132,1,224,167,+12,2,67,104,97,192,205,241,21,1,67,37,225,172,1,3,95,49,55,49,+104,90,234,174,2,238,244,6,70,133,128,141,128,29,234,147,3,139,82,64,+96,132,92,202,30,140,197,98,193,1,95,53,69,120,64,34,132,104,154,184,+112,133,139,59,138,196,66,80,226,127,18,131,254,240,205,3,103,249,179,251,+224,70,1,96,217,235,12,5,96,26,128,57,3,95,49,50,50,68,11,160,+55,179,68,163,235,137,87,112,45,0,95,74,173,192,38,241,41,2,235,48,+1,75,133,224,204,5,241,109,7,224,64,1,0,85,132,70,224,192,6,136,+186,219,180,224,162,0,243,208,6,2,49,55,51,241,182,2,224,139,3,128,+134,235,62,5,0,53,65,134,0,58,128,51,197,211,96,121,65,230,1,54,+32,167,97,78,75,228,218,5,97,250,160,128,96,156,245,42,1,130,46,64,+1,112,174,226,39,2,109,169,98,0,173,174,130,29,97,119,0,67,128,24,+224,0,1,231,206,0,236,86,3,239,155,2,64,160,132,214,132,105,128,151,+239,96,3,77,23,228,139,0,96,109,128,41,238,20,4,160,130,239,243,2,+210,108,1,49,56,193,7,0,57,225,7,34,133,189,225,7,3,209,206,225,+8,47,238,159,0,109,42,2,95,49,54,159,111,224,200,5,225,26,7,207,+161,64,10,201,247,86,86,97,227,0,95,99,89,64,26,137,121,64,33,96,+24,118,150,70,182,230,179,11,226,141,6,137,2,134,89,162,141,0,90,129,+149,162,111,224,45,4,161,143,64,45,1,85,32,69,163,0,79,240,161,0,+96,129,0,54,96,129,74,112,0,66,119,69,224,131,14,230,49,8,96,21,+84,155,1,55,50,97,12,0,57,166,159,224,40,8,97,217,0,85,226,222,+1,225,58,3,0,54,73,161,228,176,2,129,185,0,90,131,128,226,49,7,+206,171,128,48,238,176,0,228,232,8,2,95,49,48,162,98,128,0,224,28,+3,64,241,133,133,229,203,1,64,85,136,117,137,101,79,14,250,255,2,131,+81,241,83,3,128,58,226,252,3,130,140,192,141,192,1,231,93,1,231,216,+0,131,50,208,107,229,67,5,96,8,99,59,200,78,224,122,0,225,6,2,+252,163,7,2,49,50,54,102,99,0,50,99,112,230,91,1,4,102,99,110,+83,34,192,118,160,236,160,2,128,171,224,167,1,244,74,10,230,26,1,0,+55,179,4,160,42,227,176,5,97,59,193,134,98,137,194,65,0,85,64,201,+243,47,5,254,220,5,192,79,224,35,3,224,163,0,83,73,224,33,0,1,+50,51,77,69,169,73,246,2,2,64,25,152,206,0,79,131,213,160,36,221,+96,130,229,64,67,65,51,115,58,2,95,49,54,101,163,160,105,64,102,162,+45,163,18,195,25,96,0,193,31,210,171,160,156,169,95,132,245,226,205,3,+0,53,76,56,224,58,5,128,125,96,199,225,194,2,193,193,225,173,4,0,+68,225,173,0,228,120,2,245,158,3,162,131,97,160,104,123,0,56,201,127,+225,219,7,160,121,117,11,192,133,225,228,5,96,151,96,138,224,173,1,225,+139,19,229,199,0,99,154,249,153,1,128,144,225,20,1,224,113,1,120,240,+224,202,0,203,162,183,179,129,212,161,186,161,175,193,129,98,78,128,5,229,+128,2,224,49,17,231,55,1,226,14,26,225,247,23,227,83,11,225,33,1,+98,8,131,173,227,253,1,128,34,224,21,2,225,130,2,247,245,0,225,111,+4,160,27,102,236,1,53,49,132,27,225,144,9,193,78,161,2,100,169,245,+255,2,68,168,137,200,64,44,191,168,228,90,8,192,128,192,189,194,187,64,+163,64,224,0,54,137,83,192,18,128,153,231,166,6,98,108,74,90,160,71,+229,108,6,97,151,225,37,3,219,78,64,11,227,174,2,160,76,130,13,226,+176,0,224,41,0,224,22,1,0,64,161,82,192,21,224,83,3,224,22,4,+192,75,253,130,10,224,63,7,185,251,225,122,2,96,147,109,142,129,130,226,+25,1,99,158,71,167,228,13,1,224,52,4,68,77,248,77,3,128,134,81,+236,108,250,130,109,192,7,64,0,193,94,67,144,106,51,225,49,1,96,30,+192,247,69,250,80,215,130,131,229,209,8,23,66,97,100,32,114,101,113,117,+105,114,101,100,32,116,121,112,101,32,97,114,103,117,109,101,109,54,128,0,+66,20,208,35,225,240,0,193,128,161,199,109,208,225,244,24,229,234,8,64,+58,97,92,128,27,226,2,2,128,210,166,226,64,129,139,111,192,129,193,59,+64,209,229,123,2,224,123,16,2,95,49,54,75,42,224,103,9,236,192,0,+64,135,71,193,162,221,72,132,201,13,192,104,149,32,224,118,3,129,165,65,+151,129,150,0,58,128,23,136,9,0,83,130,65,135,133,129,225,229,216,4,+0,50,232,166,1,96,32,205,152,96,44,129,212,141,155,224,103,0,128,18,+239,208,2,224,83,5,98,120,64,231,160,86,64,167,0,54,77,249,248,190,+5,120,159,98,251,64,77,199,136,137,8,0,56,224,146,0,192,32,0,50,+202,111,64,254,5,10,65,32,90,32,90,96,169,64,17,202,104,0,89,230,+74,0,165,145,100,31,0,67,120,175,249,67,0,227,88,2,160,44,228,211,+2,225,172,4,226,185,1,89,224,249,123,6,192,49,195,126,192,84,227,179,+0,225,53,1,224,114,0,162,23,101,10,110,33,225,179,3,160,221,0,54,+225,254,4,71,211,139,190,224,153,2,242,78,5,0,54,101,54,224,188,5,+3,95,49,51,55,85,96,0,52,155,92,225,247,10,65,147,0,52,88,221,+6,95,51,51,53,32,95,56,69,110,224,41,17,249,98,0,1,95,52,112,+6,236,23,7,250,63,1,96,135,231,107,6,100,90,66,224,229,226,3,96,+236,212,53,224,185,3,0,50,84,53,230,114,1,226,171,4,1,55,50,130,+19,229,97,4,161,89,162,234,224,132,0,139,186,0,52,164,168,128,18,100,+248,199,83,239,114,2,4,67,32,95,55,57,174,231,79,152,236,130,2,96,+56,2,50,51,54,183,173,160,72,97,179,129,41,1,54,56,195,143,64,25,+0,54,69,39,224,244,0,1,95,51,118,231,0,51,130,51,128,163,229,94,+4,129,46,1,53,57,68,19,229,164,1,64,21,71,226,0,49,90,42,129,+129,125,38,229,119,0,101,187,226,4,8,0,75,226,1,16,225,147,5,1,+95,52,100,66,224,0,4,226,162,0,65,167,224,168,10,64,73,118,150,130,+110,168,195,224,85,2,225,49,3,0,95,69,222,176,57,160,89,163,154,142,+236,201,83,229,64,0,164,156,225,112,0,75,67,227,95,10,175,106,231,18,+3,200,196,224,44,11,231,89,2,224,61,0,129,249,231,85,13,192,53,231,+81,0,224,70,14,227,230,4,205,5,226,216,0,224,67,5,237,69,0,233,+56,4,64,10,230,181,0,241,237,0,96,32,242,50,4,224,0,0,157,203,+227,208,1,67,60,141,201,3,85,32,75,52,160,2,87,139,128,26,201,59,+226,15,9,0,53,153,91,64,134,230,231,6,98,191,142,19,128,174,226,9,+1,161,171,230,21,0,173,211,68,149,0,51,74,76,161,233,128,86,212,61,+128,196,225,43,3,166,138,163,106,0,66,67,29,0,51,106,220,68,22,232,+10,1,16,103,101,116,83,117,112,101,114,67,108,97,115,115,101,115,58,32,+104,1,1,95,49,68,133,1,56,49,193,173,193,98,175,81,237,127,9,64,+7,128,125,64,121,173,34,68,1,81,116,65,101,1,53,55,230,161,0,160,+217,91,173,115,152,240,72,2,144,127,132,57,224,0,5,97,147,230,87,0,+65,118,136,157,3,95,56,57,52,90,111,172,17,230,55,0,97,103,0,90,+64,30,230,71,4,64,56,200,84,240,71,12,0,55,125,17,162,59,98,85,+194,70,234,119,4,169,189,97,106,160,33,227,193,4,229,39,0,2,95,52,+49,92,37,0,50,89,112,193,34,1,95,49,84,72,3,66,32,95,52,103,+167,164,32,224,15,7,97,72,105,199,214,22,224,203,3,225,193,1,30,101,+120,105,115,116,101,110,116,105,97,108,115,32,110,111,116,32,97,108,108,111,+119,101,100,32,105,110,32,112,97,116,86,135,4,32,98,105,110,100,150,130,+160,0,224,189,1,96,144,231,136,2,65,172,232,78,2,226,190,11,225,73,+0,244,135,1,86,45,112,242,83,104,97,93,162,128,226,134,8,227,36,2,+153,155,224,94,8,179,59,229,36,0,224,157,3,161,62,104,159,244,9,9,+149,72,0,53,70,211,67,18,156,155,0,53,91,46,96,7,129,86,224,111,+13,64,186,136,235,0,83,93,112,225,29,1,242,166,5,224,56,4,252,230,+1,97,151,97,226,231,192,5,178,204,83,240,165,216,225,70,4,64,116,137,+78,93,168,195,93,163,98,228,78,9,0,51,163,249,228,23,0,230,221,10,+0,51,103,18,130,177,2,95,56,49,64,31,0,51,84,108,1,95,51,153,+57,132,70,4,53,32,95,57,49,96,4,228,252,0,64,84,225,75,2,160,+217,224,96,2,224,93,0,224,88,14,224,220,7,160,223,0,54,170,64,96,+215,170,67,74,127,171,215,228,64,3,65,136,64,29,133,107,244,65,6,227,+104,1,230,150,8,228,165,3,64,1,230,150,3,226,134,0,163,92,1,49,+50,131,224,160,225,205,133,117,145,235,5,0,232,27,0,0,67,103,161,132,+155,237,248,1,161,27,228,54,3,161,223,229,193,0,246,198,16,224,149,0,+224,62,4,233,224,2,96,141,226,65,0,65,19,252,196,1,224,62,0,224,+176,6,227,44,14,75,20,140,255,155,84,183,19,249,217,1,96,0,149,238,+224,18,0,65,128,198,209,0,89,239,211,0,230,157,1,232,70,1,69,111,+101,20,224,242,0,240,196,0,193,137,161,187,185,211,235,203,1,247,204,2,+253,96,12,177,46,177,26,224,33,12,130,101,96,23,161,115,192,25,150,160,+0,75,243,233,1,129,179,232,67,7,192,64,84,95,230,113,0,236,205,0,+224,81,4,166,181,0,85,166,166,224,9,1,64,0,167,178,224,170,0,224,+253,15,224,139,1,241,94,3,225,79,2,224,112,2,130,209,64,23,66,117,+70,218,208,180,225,123,0,233,151,4,160,91,192,48,228,67,1,128,216,128,+50,97,204,0,80,96,185,130,222,1,95,53,75,77,128,200,253,90,0,160,+72,103,78,224,189,2,68,39,225,84,5,162,85,128,48,225,208,23,140,178,+226,34,1,224,32,8,130,224,243,251,1,224,32,8,218,156,227,253,8,250,+181,9,207,83,228,38,12,225,240,6,163,215,165,82,225,250,8,169,191,224,+50,3,224,87,8,184,191,0,75,67,194,226,113,0,226,23,3,128,67,226,+17,9,128,42,226,60,0,224,39,15,231,134,2,226,197,9,224,27,1,64,+199,235,115,4,169,235,160,30,226,10,0,226,83,9,160,225,226,150,1,160,+55,139,7,128,28,0,82,224,220,4,234,78,16,7,112,97,116,86,97,114,+115,32,170,69,1,50,54,131,243,111,95,64,209,112,173,72,253,165,136,2,+95,49,48,189,110,106,193,96,113,68,129,242,122,1,235,87,13,228,246,0,+227,73,0,177,112,231,18,6,2,95,51,54,229,103,3,1,53,56,128,194,+101,10,230,236,19,64,42,66,146,231,176,10,138,62,93,118,64,46,2,55,+48,57,136,247,137,11,229,51,2,66,230,229,25,1,64,63,229,65,5,129,+247,130,112,186,14,160,43,96,2,202,110,226,16,1,225,234,1,226,36,10,+229,92,0,160,68,224,121,5,224,54,16,246,151,1,224,54,3,228,201,0,+224,54,16,231,227,0,129,58,228,206,1,160,57,224,51,11,168,106,128,47,+226,199,7,224,28,2,228,193,2,0,90,64,34,3,95,49,54,57,243,53,+0,227,98,4,224,75,14,160,156,192,75,228,202,0,225,106,1,161,137,66,+140,1,50,57,227,34,0,112,29,4,49,54,32,95,53,230,28,0,189,248,+96,229,65,147,0,80,248,22,1,84,170,2,56,32,79,106,112,0,50,165,+70,66,15,68,102,204,205,225,23,0,222,24,96,113,85,56,253,61,4,236,+222,0,1,55,48,239,98,1,161,89,228,146,8,230,141,2,64,34,235,32,+8,123,60,192,206,226,189,4,225,43,1,160,89,138,250,3,95,49,51,48,+232,14,1,225,54,1,164,151,245,92,14,99,210,119,99,163,121,201,201,232,+219,7,244,242,14,228,170,1,232,179,6,0,52,76,229,224,47,3,128,49,+227,235,3,224,149,5,237,119,4,116,10,0,48,232,207,2,161,126,236,95,+9,224,27,0,236,145,8,226,30,2,224,241,4,96,21,77,29,233,65,1,+2,95,49,52,68,0,224,100,9,0,67,106,57,160,100,161,170,224,236,8,+96,78,100,65,3,95,49,53,48,230,107,1,128,216,225,191,33,162,195,192,+0,227,254,9,192,80,228,50,5,195,72,195,244,235,98,2,128,138,160,178,+226,123,2,171,106,128,26,239,30,2,239,75,12,0,54,255,147,2,224,132,+2,160,56,224,16,1,136,68,162,241,139,145,224,76,7,224,46,3,128,61,+192,44,224,2,3,224,126,5,1,55,48,192,57,228,165,6,130,176,247,161,+2,239,185,7,101,124,192,49,242,117,5,137,39,226,93,5,168,111,98,64,+0,57,235,149,3,224,182,4,225,204,33,242,144,6,224,41,1,233,240,7,+199,182,161,231,224,139,1,254,79,8,227,131,2,224,37,1,227,179,1,192,+15,224,239,5,64,100,224,239,15,129,81,135,72,1,49,53,90,42,65,72,+100,218,71,246,110,252,101,23,224,199,3,242,55,7,163,81,227,254,4,2,+53,51,52,80,75,224,61,1,85,155,224,131,5,224,78,1,225,24,9,163,+8,224,212,3,227,118,7,228,160,7,1,55,48,64,113,64,92,131,133,208,+50,176,51,224,119,2,225,177,3,239,126,7,96,28,64,66,1,55,48,87,+226,160,51,152,153,252,74,2,161,174,194,96,161,188,231,111,23,249,253,0,+227,218,0,244,225,2,227,229,21,206,57,228,128,0,128,167,224,60,3,235,+99,6,192,152,225,89,5,224,27,2,227,249,4,224,10,0,225,139,8,228,+43,2,225,138,1,229,109,10,225,86,24,160,238,229,218,7,114,9,71,86,+73,139,170,103,226,80,8,101,98,252,126,3,193,143,117,250,0,55,115,135,+96,151,227,157,4,227,154,7,129,60,79,139,185,146,128,6,96,130,0,48,+68,102,64,6,225,164,0,192,0,196,168,228,120,6,237,243,13,195,209,225,+44,1,249,143,8,98,155,161,59,180,167,225,132,3,161,219,229,198,2,97,+231,192,22,160,25,160,26,231,55,7,225,103,2,128,168,231,72,8,129,37,+0,53,121,19,131,246,0,51,96,249,0,56,246,142,0,225,67,3,66,63,+100,155,0,80,101,201,97,47,109,35,128,41,192,15,152,161,193,72,160,19,+151,90,64,0,161,162,160,0,226,99,10,129,115,97,0,128,91,64,0,230,+255,3,226,240,2,224,251,2,161,94,231,11,2,224,100,4,230,89,0,192,+59,224,47,8,193,18,224,144,8,192,24,103,242,226,140,7,2,95,49,54,+66,137,230,31,13,130,45,192,13,199,19,64,1,227,174,0,143,191,229,166,+6,148,229,69,129,160,119,146,31,88,232,0,55,129,155,117,20,75,233,237,+167,1,5,110,101,103,97,116,101,246,15,1,235,101,19,224,158,2,225,83,+1,192,146,151,199,141,196,161,121,195,201,226,229,1,243,123,6,224,108,15,+193,120,231,198,12,161,151,232,97,18,192,165,227,188,4,231,221,11,64,113,+0,56,224,56,4,226,185,3,0,67,124,13,64,146,236,107,5,206,37,224,+155,9,84,220,224,65,28,96,106,239,56,13,5,116,99,80,97,116,58,119,+191,7,104,97,110,100,108,101,100,32,97,157,68,4,111,141,96,98,116,23,+0,54,96,123,248,216,4,160,78,2,79,32,35,66,7,172,138,160,45,245,+225,4,103,178,100,89,170,52,133,31,69,62,99,130,67,221,226,46,10,1,+61,61,162,42,236,162,1,224,128,5,0,58,138,198,143,24,0,50,199,52,+239,30,1,65,248,149,211,65,152,131,24,87,111,100,82,128,40,64,167,68,+83,102,104,133,179,96,57,151,32,3,85,32,75,51,128,15,0,54,246,29,+0,96,2,105,53,195,37,137,128,228,243,4,234,69,6,192,41,130,195,64,+47,70,64,0,55,97,165,82,221,225,197,0,144,252,64,112,150,172,234,225,+0,161,33,2,52,51,52,128,8,67,104,1,49,52,113,48,64,7,194,102,+96,41,0,95,184,170,102,162,66,251,64,79,150,222,66,34,0,53,64,59,+195,4,226,63,1,64,36,0,51,224,229,2,196,129,109,114,224,237,10,224,+16,3,0,56,65,62,64,64,209,65,225,212,17,2,84,114,117,132,1,64,+46,219,20,224,46,17,3,70,97,108,115,224,47,1,208,238,156,197,229,104,+1,232,139,7,253,205,2,232,235,1,232,176,34,224,46,2,224,43,10,240,+83,36,68,116,160,92,224,47,12,224,27,0,133,137,224,37,0,225,132,1,+224,130,11,230,253,0,224,81,10,224,27,2,203,51,79,49,104,122,235,228,+1,193,5,230,0,3,129,71,98,94,248,175,12,230,84,5,0,53,99,51,+224,231,10,101,108,168,102,66,156,75,150,228,56,11,225,229,1,2,66,97,+100,252,53,0,97,236,228,71,7,0,58,101,186,65,252,206,54,232,102,3,+193,40,227,128,3,64,242,242,220,6,130,199,161,52,161,82,179,3,193,13,+234,128,8,131,72,224,34,3,225,169,0,192,14,128,139,132,20,68,46,232,+18,0,224,49,1,225,221,5,192,126,198,47,96,133,233,24,6,225,122,2,+192,2,164,215,224,69,3,97,149,165,83,89,156,136,152,192,23,109,32,164,+115,96,16,1,54,57,204,115,97,174,64,53,233,11,0,160,0,64,87,129,+42,233,148,1,64,19,244,225,6,65,31,0,66,245,188,1,225,46,1,96,+129,96,238,0,90,123,126,200,145,224,36,9,101,91,228,250,8,192,0,65,+251,1,52,32,102,211,165,212,130,11,255,85,2,225,77,5,231,193,8,0,+54,238,209,0,225,133,8,224,16,1,99,28,224,151,4,1,95,53,77,73,+3,49,54,57,55,228,134,3,94,202,232,183,1,224,81,17,233,64,3,128,+95,65,74,227,56,5,0,52,233,136,0,224,39,1,227,254,11,240,14,3,+225,242,2,230,89,5,242,208,2,229,176,1,67,116,96,252,64,14,236,99,+4,101,177,200,39,224,111,0,139,251,225,70,13,1,53,54,252,66,3,236,+178,7,192,174,164,167,128,184,71,28,130,131,252,205,6,64,97,167,247,165,+241,224,0,2,225,10,8,192,241,160,149,225,17,2,226,140,4,98,136,0,+89,105,250,66,66,64,31,251,155,13,176,33,128,90,194,148,225,254,2,96,+231,226,119,26,96,160,182,37,99,86,3,55,52,32,95,128,28,235,209,2,+160,0,193,19,228,151,3,225,193,5,234,58,4,242,36,5,129,71,0,89,+192,13,160,212,132,181,225,137,6,179,247,225,51,2,96,16,228,104,10,224,+5,10,226,160,8,245,11,2,224,85,1,128,1,226,167,1,228,159,5,224,+100,0,239,8,5,240,137,6,224,73,11,224,254,16,226,247,1,69,184,160,+6,224,49,6,225,200,0,224,91,1,141,118,224,249,5,130,147,250,154,0,+224,10,3,98,138,228,82,1,96,0,192,70,129,85,192,172,224,182,2,193,+203,224,161,7,227,162,11,248,9,2,193,190,224,193,7,236,45,13,243,213,+3,227,118,5,227,115,0,138,74,225,172,2,128,131,224,45,7,224,205,3,+224,0,6,231,62,1,253,77,0,80,112,2,54,32,95,131,44,161,71,133,+198,64,150,1,54,53,160,26,229,187,8,132,120,224,180,0,236,102,2,16,+111,111,32,109,97,110,121,32,97,114,103,117,109,101,110,116,115,165,75,224,+49,20,2,102,101,119,224,48,8,232,71,5,112,5,72,26,139,231,2,95,+53,48,74,252,96,145,140,240,64,27,139,201,100,28,227,244,10,134,139,225,+47,4,222,112,130,19,64,66,0,54,136,121,109,11,2,57,32,64,76,240,+0,55,140,240,64,29,139,169,0,75,161,70,232,156,1,162,155,224,11,8,+194,59,138,95,224,13,1,165,69,234,214,4,234,217,0,224,39,5,224,75,+0,224,25,3,230,37,4,224,34,8,170,79,224,69,2,160,88,226,2,0,+224,23,0,224,105,3,226,50,1,224,31,3,252,41,0,227,116,0,232,53,+3,224,24,6,64,1,226,122,0,224,154,1,192,92,228,70,2,160,23,162,+177,192,8,72,216,65,139,96,69,81,176,234,102,0,224,233,3,134,108,227,+89,6,129,121,192,86,64,72,108,101,80,60,0,54,93,148,251,15,1,231,+17,0,224,96,0,82,47,76,232,3,95,51,51,53,109,55,144,236,128,98,+0,79,201,81,0,56,109,110,239,116,1,160,62,96,58,192,83,137,97,240,+112,8,229,58,3,96,74,66,138,128,240,0,50,102,178,129,34,107,142,0,+50,158,22,241,31,4,224,71,1,2,95,49,52,90,29,1,49,54,204,124,+224,26,17,129,22,72,223,99,221,1,95,51,67,206,186,78,224,58,4,224,+148,41,64,57,224,110,5,224,13,4,224,40,1,225,182,2,97,179,160,114,+136,54,96,107,1,56,48,167,81,147,231,67,173,161,177,103,97,213,228,161,+136,130,23,0,53,82,122,72,89,3,51,50,50,32,160,33,170,219,106,106,+128,11,171,7,0,49,115,243,0,51,147,244,232,155,2,116,104,97,241,111,+71,104,163,3,95,49,52,54,161,30,2,85,32,75,202,187,0,50,180,86,+64,229,0,54,133,126,228,32,3,79,219,160,113,224,21,3,0,56,192,21,+64,52,68,109,68,64,143,154,224,39,3,65,117,196,94,0,51,164,191,235,+112,26,234,12,0,129,160,234,4,2,230,190,6,241,17,0,167,33,224,78,+6,224,43,4,64,8,74,214,227,167,4,224,96,4,224,46,8,130,100,224,+24,1,96,11,192,8,230,133,9,233,115,24,65,6,144,89,131,187,0,50,+80,103,234,197,1,0,85,131,10,67,162,113,87,142,230,161,230,128,61,144,+104,234,23,0,134,231,225,75,7,130,51,192,201,194,232,98,234,244,214,0,+150,127,159,171,194,134,129,206,65,186,64,106,208,163,248,38,0,64,6,64,+5,78,208,0,51,70,142,64,44,100,98,0,58,128,53,1,10,65,239,10,+2,13,80,114,105,109,105,116,105,118,101,115,46,61,62,34,96,82,64,44,+114,140,64,174,245,129,11,0,85,224,164,26,64,71,135,10,225,147,14,64,+32,0,54,224,32,2,0,80,195,68,224,36,7,134,239,160,34,132,86,0,+80,128,167,130,200,2,83,32,83,162,170,166,100,64,42,240,189,5,135,90,+224,33,18,82,4,230,115,1,224,33,12,136,219,129,249,0,83,98,245,224,+30,4,98,25,163,23,236,179,6,230,35,0,226,246,1,167,248,65,181,112,+119,0,53,124,74,0,54,161,77,249,201,2,64,20,235,184,1,224,115,6,+161,139,162,140,224,72,0,97,143,64,27,224,60,1,224,37,13,239,200,1,+192,98,128,213,162,173,225,64,2,160,221,236,232,7,64,70,224,90,15,163,+19,192,90,225,3,8,128,83,0,85,228,68,0,224,63,3,69,53,98,203,+1,54,56,67,159,250,135,3,250,228,4,1,53,51,237,0,1,131,63,225,+150,6,0,49,164,145,225,150,11,227,198,2,96,22,65,49,225,144,6,0,+52,73,212,224,197,1,2,95,51,54,224,42,1,128,0,226,83,18,217,181,+128,31,224,28,6,152,34,160,178,224,25,4,101,250,228,43,8,178,251,110,+9,240,227,11,99,58,226,80,7,102,82,251,184,4,226,91,17,142,177,224,+16,0,130,229,225,75,4,142,213,225,33,6,122,206,224,86,18,167,123,224,+170,3,250,205,2,81,179,227,44,7,224,52,0,226,133,9,225,51,16,135,+14,227,101,8,129,19,225,229,25,87,132,225,229,2,224,204,3,226,221,11,+68,152,225,59,5,224,100,26,141,243,224,100,2,227,116,3,228,53,12,96,+66,249,71,13,9,100,115,69,70,105,101,108,100,115,32,244,189,11,69,26,+135,197,165,52,131,106,165,52,215,50,69,76,64,106,0,85,128,22,215,26,+96,198,238,79,0,3,95,49,51,55,66,69,0,51,107,17,225,100,2,239,+203,2,238,75,3,91,251,98,170,64,36,238,150,2,161,30,224,42,2,64,+83,137,207,224,245,4,64,138,230,209,0,1,51,54,224,65,1,3,66,32,+95,57,153,68,0,53,111,223,0,58,128,105,160,179,212,124,128,11,145,234,+96,130,151,223,225,62,6,3,101,110,117,109,173,224,64,70,134,238,193,43,+99,73,129,43,73,84,168,4,199,193,229,27,10,97,25,224,26,12,134,85,+226,177,13,226,178,14,194,179,140,69,97,79,133,72,225,37,0,2,95,49,+49,196,244,142,57,128,33,229,159,18,224,36,4,229,135,9,96,191,0,85,+99,137,224,37,0,228,184,17,98,74,224,210,12,228,210,0,224,94,4,96,+21,100,90,160,91,228,164,8,72,38,228,65,8,224,136,1,238,224,3,228,+16,11,228,98,11,192,24,228,98,0,1,54,55,108,118,236,206,0,227,114,+0,224,24,7,225,105,5,98,83,66,8,0,54,162,34,0,89,222,240,192,+143,185,249,239,36,5,131,69,224,170,10,230,158,0,232,166,19,224,207,11,+192,25,96,181,224,73,1,224,245,16,96,154,242,24,4,225,83,0,205,105,+106,234,73,199,249,164,4,166,91,161,220,254,210,5,224,82,10,254,153,2,+160,119,0,90,164,21,246,5,5,159,176,246,252,4,129,245,255,209,2,128,+119,149,207,160,71,96,4,239,11,0,0,90,64,127,77,123,98,50,0,75,+66,46,239,35,0,129,231,130,75,0,64,89,22,224,27,3,64,0,227,65,+13,225,237,9,97,238,189,12,65,219,208,172,247,29,0,230,93,4,224,235,+9,97,92,246,114,6,96,222,226,199,1,226,41,1,160,9,130,4,226,55,+2,253,205,7,101,62,129,181,0,50,255,209,3,100,226,148,88,128,71,78,+223,90,22,224,56,1,129,203,130,166,96,91,226,51,13,236,131,1,165,221,+162,225,141,121,1,57,51,224,118,2,229,178,7,243,86,18,91,103,13,115,+101,99,116,105,111,110,32,102,105,120,105,116,121,243,136,2,0,53,77,252,+224,43,1,1,36,120,128,27,147,114,0,56,217,77,65,142,139,231,215,113,+195,107,225,145,14,128,30,225,149,6,195,108,70,61,0,57,64,210,209,135,+195,14,135,158,134,60,225,187,4,96,29,96,170,224,152,3,224,182,9,225,+228,57,128,203,225,227,6,162,96,99,163,214,29,227,160,0,248,160,0,225,+214,14,160,84,239,39,2,100,60,224,21,6,224,60,30,64,58,249,253,8,+85,161,226,28,4,128,174,227,251,4,225,115,9,224,0,1,226,57,87,233,+6,1,232,213,13,160,234,224,215,3,225,152,6,194,31,236,119,2,227,46,+0,246,193,0,148,135,224,100,5,197,31,225,73,0,161,75,224,13,0,251,+187,7,227,86,7,128,21,132,242,160,14,100,7,180,150,228,91,0,100,4,+1,49,54,123,55,64,7,228,246,4,226,134,1,193,181,66,96,64,42,96,+142,129,125,227,211,8,65,58,177,0,96,51,226,204,10,102,232,224,13,5,+160,174,128,2,160,14,227,9,13,0,89,225,21,3,103,85,225,10,3,129,+78,241,58,0,64,5,71,47,128,58,131,97,129,18,245,105,0,128,36,96,+117,166,100,73,59,0,52,80,236,191,30,96,5,255,41,0,224,184,2,224,+2,3,192,29,192,130,199,159,224,2,0,214,109,225,154,0,238,113,3,99,+222,129,142,2,85,32,95,74,59,128,141,97,5,169,155,128,58,65,249,224,+7,7,101,161,227,35,6,224,9,0,224,165,2,250,122,2,160,252,96,86,+224,210,6,96,17,194,47,64,92,65,225,182,29,228,88,2,192,224,228,71,+2,224,229,0,160,99,183,182,224,113,2,97,24,1,85,32,71,100,224,72,+2,162,15,96,35,232,86,7,225,235,3,193,91,248,13,0,224,26,3,224,+143,4,219,125,225,173,15,129,10,224,66,9,226,132,0,224,127,14,224,106,+0,96,170,224,35,21,128,1,169,114,192,0,233,236,1,96,2,128,178,226,+154,0,160,14,224,50,4,224,88,15,0,67,98,56,224,0,3,224,234,14,+224,2,3,224,246,0,64,0,228,130,9,253,116,16,193,217,128,122,225,231,+0,130,35,128,181,2,95,49,51,97,212,227,129,0,147,229,0,53,101,38,+123,116,224,227,0,2,95,49,52,96,21,224,42,2,1,56,52,100,135,96,+65,64,44,190,174,64,65,192,22,64,8,181,242,128,0,163,32,168,116,253,+137,0,226,232,5,224,173,2,225,74,2,161,98,192,44,224,62,4,128,166,+225,32,6,224,181,12,252,121,1,96,223,225,13,0,96,186,225,13,23,224,+225,14,213,167,163,126,227,13,7,160,190,227,166,13,96,16,154,9,170,237,+252,130,3,8,95,52,48,49,32,95,52,48,51,105,9,231,2,1,28,97,+109,98,105,103,117,111,117,115,32,111,112,101,114,97,116,111,114,32,101,120,+112,114,101,115,115,105,111,110,167,57,226,92,10,161,83,96,127,64,228,129,+57,96,21,224,244,1,88,232,225,33,2,224,213,10,224,176,42,9,98,97,+100,32,112,114,101,102,105,120,224,168,11,228,251,2,3,95,51,50,48,239,+186,2,14,92,34,115,114,99,47,77,105,99,114,111,72,115,47,70,104,25,+9,46,104,115,92,34,44,54,53,58,55,192,64,251,28,0,250,43,3,97,+214,171,45,170,236,3,95,55,52,50,164,205,235,35,1,129,28,247,213,1,+0,54,78,33,0,54,177,91,96,0,0,80,89,139,79,87,96,167,165,234,+1,64,89,100,83,64,230,229,40,3,233,85,1,96,64,139,163,64,79,249,+176,0,202,56,128,113,96,122,192,115,141,117,64,9,0,57,225,87,6,103,+198,194,103,154,177,135,8,233,168,0,171,247,100,96,64,139,198,147,64,34,+0,80,192,180,130,138,193,200,96,183,242,170,1,128,7,193,62,224,63,3,+225,28,0,224,34,1,225,7,1,161,29,186,234,160,21,72,81,146,98,77,+206,99,34,1,35,54,145,100,248,192,1,104,211,137,224,0,49,233,224,3,+5,110,101,103,97,116,101,97,220,0,58,129,11,4,10,65,32,65,32,64,+11,145,187,0,90,65,66,64,14,145,176,0,75,96,26,0,54,233,251,2,+234,247,0,67,98,184,88,0,54,223,72,0,65,128,59,140,101,2,95,52,+56,99,6,139,15,143,156,64,178,78,50,174,34,206,41,128,24,64,11,174,+81,224,24,11,160,49,142,113,1,95,51,121,155,132,42,64,115,202,159,0,+89,165,162,98,62,227,167,2,225,163,1,240,77,11,227,183,0,248,143,20,+79,190,188,79,226,152,13,128,41,244,106,14,10,103,101,116,65,112,112,67,+111,110,58,32,244,107,11,160,99,167,33,0,85,128,191,96,218,212,103,5,+66,32,95,55,50,56,225,246,1,253,57,7,222,9,3,67,32,95,55,123,+64,64,60,130,42,1,75,50,97,200,194,32,235,194,13,134,78,129,47,107,+114,154,241,0,53,67,59,0,58,139,129,115,195,65,148,224,214,1,3,118,+97,108,117,98,81,224,18,1,2,116,121,112,130,99,224,18,1,3,107,105,+110,100,224,18,6,3,115,111,114,116,64,18,64,90,244,56,1,245,51,25,+102,83,129,105,224,12,1,64,167,64,242,65,146,171,138,236,196,5,164,154,+131,115,238,207,7,66,199,100,29,0,53,89,43,236,252,5,128,160,180,191,+228,12,0,68,224,170,204,233,241,4,162,52,129,74,231,49,0,226,84,19,+128,145,159,162,64,129,160,234,226,96,1,226,94,0,247,238,4,90,153,196,+49,224,43,10,132,208,224,96,2,140,229,64,96,203,186,98,166,225,142,2,+9,101,116,83,76,111,99,69,120,112,114,196,31,65,13,81,189,96,245,210,+78,129,97,1,50,50,150,114,128,78,128,98,0,54,97,81,224,98,0,192,+20,64,182,192,20,64,84,252,133,1,235,189,7,196,82,96,38,208,170,179,+6,64,35,164,110,64,102,96,26,129,8,0,56,83,89,96,23,227,40,1,+241,130,0,96,83,200,134,237,76,1,64,8,0,95,86,246,189,119,193,204,+228,41,1,224,12,1,224,25,0,6,95,53,49,53,32,95,55,179,13,96,+19,177,225,224,25,4,163,124,160,6,67,180,64,8,3,95,49,54,52,131,+160,96,48,103,229,128,10,228,37,5,9,117,110,100,101,102,105,110,101,100,+32,135,130,97,110,103,106,224,42,8,196,71,0,56,196,148,130,135,140,105,+96,228,72,67,237,187,3,128,33,224,126,0,192,13,224,86,5,233,1,1,+208,40,179,51,135,240,224,49,10,160,136,168,27,128,39,160,149,160,14,2,+79,32,35,65,28,103,166,130,21,80,169,96,33,71,236,0,80,104,1,232,+56,1,194,18,232,61,0,95,127,207,205,224,0,2,160,220,65,251,217,117,+228,154,3,1,91,93,96,151,224,229,2,2,79,32,35,65,140,169,18,225,+194,1,224,219,0,166,62,0,80,73,105,233,110,2,64,55,0,51,244,13,+2,224,82,2,224,40,8,66,142,238,111,0,131,47,224,97,1,128,0,64,+176,133,139,0,83,66,91,0,95,69,227,67,208,97,54,68,254,0,53,120,+112,128,13,106,44,0,83,65,203,192,175,71,216,107,41,64,49,0,35,144,+190,90,19,73,163,1,95,56,126,138,96,99,66,112,131,191,203,184,241,84,+5,1,52,57,67,57,128,203,113,81,238,51,2,236,3,3,241,198,7,130,+205,131,55,231,97,18,1,95,52,100,36,225,47,1,229,219,5,0,54,248,+43,0,128,102,235,57,1,224,111,3,96,53,1,49,52,191,95,235,252,0,+231,125,1,161,97,224,17,6,251,76,5,96,20,64,254,1,51,54,77,89,+156,86,192,158,229,59,0,134,58,68,15,234,32,5,226,239,8,21,110,111,+116,32,112,111,108,121,109,111,114,112,104,105,99,32,101,110,111,117,103,104,+163,5,67,240,83,165,1,95,51,66,28,227,155,1,242,24,6,107,51,106,+166,64,149,0,56,228,136,1,224,42,9,97,202,135,33,167,17,1,54,32,+128,93,1,49,54,138,96,105,10,66,7,231,43,0,64,50,134,179,90,143,+0,90,160,47,0,56,141,134,96,29,0,54,160,29,137,179,64,71,103,220,+2,95,49,52,88,162,130,218,1,49,54,72,201,224,248,1,3,66,111,111,+108,198,28,66,230,1,10,65,225,21,2,4,68,97,116,97,46,64,33,6,+95,84,121,112,101,46,34,128,87,197,171,67,83,0,35,96,154,156,17,76,+46,130,155,251,25,3,71,186,65,226,65,137,0,53,64,34,2,95,49,55,+152,137,226,165,21,221,65,226,222,4,0,53,104,185,195,131,66,92,194,95,+226,27,3,130,189,226,25,4,64,134,97,77,171,135,64,66,163,68,64,5,+224,101,2,96,167,73,99,226,49,5,227,23,4,143,46,227,66,3,232,25,+1,226,177,1,164,255,64,182,100,211,227,104,2,229,170,0,246,14,14,173,+8,103,225,228,120,0,129,163,133,21,224,136,0,227,200,6,128,83,0,54,+97,113,227,210,0,0,85,102,237,97,147,0,32,163,34,224,123,8,143,171,+64,55,64,62,128,174,244,247,8,64,183,2,10,65,32,229,223,11,160,141,+131,206,131,119,0,48,164,20,0,51,129,179,96,65,64,89,128,190,0,79,+101,66,2,49,50,51,68,245,174,145,1,54,51,64,7,0,75,98,77,64,+53,128,41,64,36,0,52,193,20,75,42,96,45,64,126,128,10,64,44,131,+24,234,105,11,0,52,141,133,96,240,226,36,1,3,95,49,53,57,64,42,+164,176,96,176,226,3,3,228,215,6,133,232,161,94,224,98,15,231,86,0,+226,145,9,129,110,64,114,107,203,230,56,0,225,134,8,149,187,161,43,0,+54,132,32,224,111,14,72,19,129,205,224,217,8,168,165,224,56,8,0,53,+90,45,227,31,0,226,57,2,129,186,247,198,2,234,102,0,224,40,5,64,+123,96,66,194,105,235,118,5,64,255,64,193,64,131,202,147,224,64,5,111,+139,98,161,125,59,240,137,3,160,6,0,85,230,55,1,225,66,3,193,61,+239,189,0,226,202,2,225,109,6,2,95,51,54,224,112,0,95,92,72,81,+250,51,1,96,234,255,97,0,225,141,1,225,229,0,251,194,9,224,19,5,+194,52,65,161,197,98,172,9,100,83,64,161,225,32,15,235,16,2,160,33,+154,167,228,92,5,164,98,225,64,1,224,28,10,228,181,5,225,224,0,0,+56,224,180,3,204,206,192,49,235,50,0,64,2,224,39,1,128,136,128,1,+226,193,1,64,205,233,58,0,169,229,195,238,64,147,229,178,1,160,64,136,+45,160,59,165,110,164,243,246,240,6,224,117,6,224,150,0,228,203,4,96,+137,64,74,129,10,129,229,1,52,50,146,5,224,152,25,136,65,64,143,142,+9,224,132,4,65,235,96,101,238,24,4,111,158,177,155,96,0,225,62,6,+245,100,8,163,172,129,55,201,45,160,9,128,147,162,232,155,153,224,126,0,+224,65,1,154,244,129,226,232,232,1,192,2,244,129,3,224,32,0,201,195,+237,14,0,192,99,228,87,3,224,26,0,253,27,2,224,31,4,224,131,2,+176,158,224,84,1,224,133,1,224,219,0,128,192,160,203,224,92,5,163,243,+251,116,1,97,68,97,151,68,112,252,190,0,131,48,136,97,0,79,75,141,+0,54,73,74,102,111,1,50,50,195,225,64,7,64,28,203,14,137,65,2,+95,56,52,67,176,0,52,137,7,64,39,64,105,224,39,16,1,53,57,99,+159,3,95,49,54,49,68,31,224,39,16,0,54,71,106,96,39,107,154,224,+39,17,83,112,130,52,253,204,1,96,194,64,29,178,220,1,54,49,198,148,+192,234,137,38,227,115,1,64,26,129,113,250,55,5,130,89,161,163,225,249,+2,160,43,96,17,226,105,2,128,1,227,250,10,79,218,128,0,224,38,1,+230,25,6,0,54,171,189,232,174,1,64,5,236,31,8,233,115,13,230,221,+0,224,51,35,224,139,0,229,212,14,1,54,50,226,145,0,227,109,0,239,+180,2,224,63,3,169,59,0,50,171,125,65,142,65,182,228,212,3,225,86,+3,225,102,1,225,15,2,164,37,229,85,6,134,82,224,41,6,131,0,251,+5,0,64,19,229,66,4,224,106,0,227,52,13,185,31,107,125,163,24,224,+11,3,224,191,1,207,199,128,60,225,70,3,105,67,231,147,7,234,180,13,+2,95,49,52,192,51,128,1,230,195,6,192,253,130,71,64,122,204,153,224,+42,5,64,13,66,223,128,224,73,107,1,48,48,76,52,134,241,248,50,1,+192,0,160,187,2,95,49,50,67,6,66,245,209,176,67,174,73,180,206,195,+163,69,64,34,138,193,225,238,3,229,248,4,229,13,3,148,181,99,90,64,+18,0,79,64,80,254,5,0,225,194,4,225,142,0,64,1,133,86,224,71,+13,65,6,0,79,97,153,254,78,1,77,76,0,54,107,236,179,74,64,166,+138,235,129,9,64,166,230,212,0,111,224,135,238,226,180,2,225,125,1,160,+29,180,22,233,233,2,192,144,243,210,0,224,28,3,64,179,243,26,0,129,+133,160,225,64,173,0,80,240,128,4,224,74,10,184,238,224,73,37,160,215,+200,133,224,204,182,99,220,132,105,247,191,4,2,95,51,49,97,213,96,76,+131,169,160,118,224,40,14,224,120,0,195,214,160,48,2,95,49,51,84,18,+99,58,128,15,79,228,113,227,167,89,228,159,1,228,169,2,128,0,96,187,+163,65,0,58,128,28,235,220,12,1,54,50,64,131,88,114,234,197,3,171,+143,224,178,9,227,188,1,152,93,235,184,0,179,110,165,166,97,64,224,12,+4,192,4,193,124,64,121,99,168,0,51,68,114,71,156,68,192,137,113,112,+142,128,15,224,24,6,224,0,6,1,95,56,104,34,64,223,215,255,131,64,+64,93,132,96,97,56,230,189,17,128,32,65,91,198,26,166,57,1,95,57,+124,36,67,131,64,242,0,54,192,126,64,107,218,217,142,57,64,25,164,131,+2,51,55,56,132,131,0,49,65,123,1,54,50,76,116,0,51,154,110,64,+40,139,190,6,95,56,49,51,32,75,32,65,100,193,56,224,134,0,224,1,+7,235,54,2,224,37,16,224,35,4,224,32,23,224,29,20,224,26,17,224,+23,14,224,20,11,224,17,8,224,14,5,65,36,226,168,4,129,26,215,171,+0,89,165,93,97,200,108,221,232,154,1,167,76,192,79,138,72,231,234,2,+96,13,230,176,2,227,228,5,230,129,1,128,1,133,180,224,173,1,171,27,+224,65,3,224,68,9,253,229,0,224,55,8,195,187,64,62,96,233,166,43,+132,231,164,41,199,166,233,245,3,176,189,0,49,248,74,1,102,205,93,138,+230,51,3,224,0,3,139,1,66,152,64,13,128,8,65,68,138,2,75,13,+1,75,52,115,179,64,1,0,75,139,68,161,103,135,47,243,114,6,5,67,+111,101,114,99,101,128,6,2,105,98,108,91,121,64,43,231,56,4,161,134,+168,228,128,250,206,76,96,11,225,119,15,224,126,0,225,106,10,128,1,193,+200,224,30,10,224,85,16,236,88,10,224,85,12,231,148,2,65,127,104,144,+75,178,74,47,216,209,128,0,167,176,64,248,135,138,225,36,6,84,146,13,+76,105,116,115,46,75,110,111,119,110,83,121,109,98,116,201,0,58,139,215,+225,40,144,194,246,225,40,75,76,239,253,116,18,1,53,56,231,88,2,224,+34,6,224,44,2,0,50,91,168,0,83,163,58,242,198,10,0,50,124,208,+99,37,133,87,0,52,105,225,133,87,69,108,0,48,158,194,2,64,35,49,+88,235,96,161,234,141,2,64,47,236,134,0,225,40,0,161,37,134,44,187,+94,241,114,1,199,152,224,185,0,129,50,225,225,5,233,149,0,224,5,7,+209,73,192,60,192,1,236,13,1,224,28,8,224,149,5,228,109,8,224,77,+11,225,199,0,64,0,164,108,224,2,4,192,108,224,52,5,229,187,12,64,+22,236,122,0,224,77,13,224,56,9,226,114,3,102,245,156,174,224,36,1,+224,58,7,224,17,8,224,14,5,192,157,133,15,1,54,49,92,2,1,49,+54,103,133,160,62,236,58,17,108,106,243,216,5,96,0,226,185,0,224,143,+74,133,81,67,10,115,147,76,189,66,146,0,75,123,136,96,119,101,135,192,+12,64,43,0,54,235,227,0,192,2,241,231,11,162,63,224,38,3,128,2,+2,95,49,54,162,225,192,46,224,168,4,64,157,162,242,226,202,9,192,47,+128,109,225,187,5,193,8,128,8,64,120,128,126,166,202,161,236,66,218,250,+241,1,239,155,1,238,23,11,224,205,0,238,24,12,193,187,225,151,2,224,+84,0,64,102,68,124,129,117,0,48,86,122,241,235,0,128,165,75,136,64,+182,149,249,1,54,49,69,55,231,36,1,224,116,8,224,110,2,162,168,226,+42,1,224,51,2,138,191,128,7,160,221,90,74,242,79,1,96,71,251,197,+5,31,77,117,108,116,105,112,108,101,32,99,111,110,115,116,114,97,105,110,+116,32,115,111,108,117,116,105,111,110,115,32,102,111,0,114,222,214,128,131,+1,53,55,138,81,0,53,242,185,1,98,21,138,22,255,117,1,96,217,130,+185,69,17,128,47,64,64,5,51,48,51,32,95,53,146,189,104,41,75,131,+64,65,201,61,225,150,3,0,83,100,72,129,215,141,82,160,93,173,122,228,+111,10,171,1,64,173,237,7,2,249,2,1,230,6,1,139,252,193,207,149,+33,226,195,4,181,42,224,19,4,228,255,1,227,121,3,160,2,160,26,227,+24,3,227,27,18,96,12,246,247,1,163,6,162,72,160,244,66,27,0,50,+76,204,245,97,0,192,68,201,250,227,91,5,181,47,96,101,161,30,66,41,+137,164,224,104,3,161,101,181,232,91,249,77,141,67,156,74,216,180,140,192,+0,165,164,65,165,137,158,195,75,198,70,141,248,96,71,67,72,1,54,48,+97,101,139,7,227,127,1,193,200,128,232,160,15,131,194,224,202,1,231,190,+0,141,119,64,1,224,83,3,96,162,227,158,1,97,42,128,157,144,142,174,+106,161,237,110,18,224,21,0,227,53,7,128,93,236,187,2,236,198,4,64,+104,0,53,64,58,231,70,4,129,39,131,180,166,41,65,22,209,194,64,1,+97,45,193,33,192,197,209,177,192,198,224,99,1,110,192,224,21,0,134,133,+3,49,54,48,55,98,179,64,235,226,185,1,239,15,3,192,0,192,174,224,+98,7,64,7,244,80,5,132,154,225,97,0,224,142,3,192,139,220,230,252,+173,9,128,205,193,149,131,89,248,164,6,2,95,49,51,219,212,224,151,4,+225,132,5,224,28,4,64,79,181,167,227,246,3,163,139,128,35,195,133,160,+49,163,78,64,11,224,147,5,227,76,0,234,26,1,215,247,227,28,9,227,+5,9,194,250,224,0,0,225,139,1,0,49,232,195,2,65,236,140,83,129,+164,192,74,64,66,64,27,139,118,122,6,129,253,100,176,229,154,7,195,229,+96,197,128,209,228,46,0,163,86,225,36,1,166,182,146,78,203,96,228,96,+3,224,46,18,78,147,160,47,225,9,1,231,112,0,224,44,7,242,170,37,+64,31,1,95,55,103,75,3,67,32,95,54,77,251,0,53,233,60,3,114,+57,128,69,144,129,160,23,224,90,8,128,163,96,48,197,158,224,174,1,227,+63,1,224,168,1,196,205,224,73,8,192,24,149,244,162,234,167,129,229,239,+2,64,104,128,12,149,133,252,233,1,65,195,66,6,191,177,135,199,231,121,+1,228,160,2,228,232,5,224,42,8,226,169,0,227,119,1,98,132,228,3,+3,128,222,229,35,1,197,177,85,54,225,78,2,129,169,200,109,128,11,250,+163,5,228,38,3,129,62,224,8,4,128,25,64,217,204,235,188,11,162,254,+125,240,160,59,224,22,2,224,25,6,224,26,6,224,29,7,199,136,192,37,+192,183,128,11,224,196,0,252,212,4,64,146,202,122,151,183,67,134,128,170,+0,54,227,72,7,100,41,64,234,66,46,160,87,1,95,53,72,120,128,72,+136,129,112,56,70,31,64,18,136,82,65,157,96,71,192,145,228,66,0,227,+112,5,128,29,227,109,11,252,206,0,245,228,27,128,154,227,55,5,237,140,+7,100,162,130,23,225,251,9,227,76,6,161,57,229,66,4,228,209,4,137,+107,96,22,224,99,1,224,131,4,64,198,245,168,8,169,25,212,224,224,50,+35,194,183,116,164,82,5,0,57,96,151,192,47,229,238,8,160,157,242,93,+7,225,72,10,228,36,0,224,144,8,224,96,3,225,70,4,192,41,226,102,+2,224,58,20,224,35,0,233,65,4,226,185,8,227,169,4,160,101,232,108,+1,224,19,0,199,9,225,68,12,70,55,225,68,10,225,63,9,147,51,225,+63,20,66,207,137,124,1,95,49,160,28,1,85,32,160,49,64,168,117,224,+135,249,224,62,2,64,53,136,155,229,138,0,87,122,0,56,131,99,179,28,+227,200,1,83,107,96,151,0,67,193,150,96,245,1,83,32,237,51,0,64,+232,202,141,202,37,64,195,0,55,99,121,0,85,115,173,0,85,225,5,10,+157,243,86,47,2,95,56,56,72,242,248,2,0,3,95,49,53,54,64,11,+2,49,52,53,103,103,1,95,56,238,31,0,96,0,0,83,104,12,65,61,+168,9,129,138,231,52,5,196,101,238,12,1,77,60,0,55,229,66,1,82,+6,2,57,32,95,64,105,0,64,105,195,1,95,54,86,231,96,0,128,45,+228,153,0,166,39,65,32,199,205,5,80,32,95,51,52,51,237,53,2,18,+109,105,110,105,109,117,109,58,32,101,109,112,116,121,32,108,105,115,116,205,+37,2,95,51,54,75,73,1,54,57,64,106,0,58,96,118,128,68,98,85,+238,74,4,192,19,133,217,131,212,166,243,224,13,1,99,220,194,226,166,203,+128,8,0,54,65,53,0,49,64,95,160,226,96,27,64,203,0,51,69,13,+8,95,49,49,52,54,32,79,32,35,82,88,203,207,240,95,6,64,159,134,+20,244,41,20,1,78,97,64,222,64,44,133,174,162,37,97,57,140,3,132,+191,206,244,163,84,128,187,229,98,1,68,222,183,18,64,174,72,18,65,151,+100,107,160,7,193,19,67,125,243,136,5,0,55,165,140,192,91,99,141,224,+9,0,97,246,64,250,1,53,57,171,159,240,62,9,128,45,253,56,3,97,+52,254,46,77,1,52,56,194,79,224,42,5,193,239,128,183,254,46,20,226,+50,25,224,116,1,224,70,4,224,69,1,226,69,0,80,112,228,196,0,111,+155,192,102,254,143,4,201,9,65,234,0,54,228,55,1,193,108,0,83,169,+87,97,194,133,38,191,158,65,120,132,138,128,7,192,222,252,97,74,225,128,+1,169,181,194,113,160,65,188,228,192,252,252,243,8,128,237,252,89,3,98,+51,104,60,224,125,4,135,186,146,250,68,221,164,196,128,49,136,91,131,8,+226,84,21,163,185,226,74,9,225,221,8,231,201,0,226,50,19,138,104,96,+100,99,229,132,204,228,16,0,196,214,68,197,226,7,1,64,177,198,61,3,+52,55,52,32,64,15,134,23,227,105,10,0,54,160,116,246,198,1,64,20,+226,164,2,253,102,2,87,33,0,55,235,64,1,64,87,134,85,64,160,252,+74,5,0,52,87,35,252,74,1,0,53,69,32,229,24,0,227,242,12,0,+54,128,84,226,198,1,237,233,6,96,54,247,108,3,242,245,1,64,149,235,+33,0,76,168,225,126,1,161,143,224,55,2,64,46,65,53,227,210,6,3,+58,49,53,56,197,188,224,204,7,1,53,54,224,204,5,64,63,96,40,190,+74,226,19,5,67,37,100,190,229,11,3,143,177,103,88,99,71,128,95,251,+45,1,64,100,163,90,132,75,64,102,133,127,234,184,0,226,119,3,180,110,+0,53,139,70,98,13,196,32,224,40,4,143,220,229,32,3,161,215,128,153,+201,162,0,64,193,108,238,186,3,224,7,3,241,47,4,233,138,0,199,140,+237,147,6,224,38,7,231,194,0,192,52,228,37,0,252,237,31,243,137,0,+224,64,2,144,60,252,236,29,96,67,172,206,134,60,200,51,0,55,137,141,+2,49,53,55,162,8,64,44,163,231,226,109,3,102,110,232,69,0,224,0,+4,162,99,1,49,56,96,45,137,1,236,250,3,160,194,224,80,5,65,232,+197,140,1,53,56,172,216,97,251,127,169,96,81,227,36,9,0,56,128,164,+128,81,64,15,231,70,0,238,38,4,64,73,132,229,227,106,18,226,190,0,+243,11,8,98,253,225,125,4,227,8,11,232,197,8,128,42,192,131,160,134,+133,58,97,61,64,118,1,75,50,106,79,64,25,132,162,227,59,7,229,76,+2,74,64,233,241,3,196,21,224,103,3,65,148,246,242,1,231,206,3,134,+187,134,199,224,170,1,162,206,128,13,129,233,64,52,224,33,16,128,27,128,+113,236,116,0,232,255,1,226,160,64,224,219,4,237,50,4,250,232,0,192,+49,232,139,10,64,58,202,58,177,136,2,32,95,57,95,59,162,183,74,54,+232,110,3,247,25,2,128,10,160,16,224,149,5,224,165,1,224,117,8,224,+249,2,243,214,1,192,16,128,123,1,95,55,102,91,226,38,4,168,155,244,+0,2,234,241,0,161,42,207,39,138,93,246,170,0,70,199,128,73,224,17,+6,135,40,0,95,70,178,128,59,149,246,0,54,160,241,0,53,128,242,0,+95,69,93,1,95,50,131,46,0,64,232,31,4,227,103,13,97,169,128,247,+0,53,100,33,0,67,139,235,6,95,57,49,53,32,95,56,89,102,1,57,+51,211,111,98,206,214,21,227,111,21,0,90,225,80,2,227,102,32,192,30,+193,237,227,99,7,135,132,227,99,1,0,51,107,190,64,195,71,243,2,56,+49,56,72,2,66,3,167,129,235,112,17,192,154,0,53,126,159,99,93,169,+53,64,171,234,33,7,239,222,2,160,10,160,13,227,123,0,202,61,224,228,+3,192,13,241,104,9,131,236,99,234,162,82,195,254,192,23,224,71,1,245,+7,5,230,197,2,226,183,4,230,160,8,238,109,1,224,36,1,227,132,0,+199,177,160,186,224,112,5,224,98,62,230,135,2,160,217,225,48,4,64,32,+2,95,49,51,67,56,174,154,192,95,192,131,225,44,3,92,223,0,54,94,+199,128,115,242,87,0,225,161,1,65,226,66,182,192,34,164,27,242,76,8,+224,22,13,224,174,0,192,121,193,235,224,44,13,224,198,0,233,186,10,243,+77,2,232,12,3,225,63,18,225,57,5,224,136,37,224,102,2,232,112,22,+224,99,2,128,94,64,5,225,167,5,224,55,12,224,56,5,192,155,118,254,+131,51,225,126,0,160,14,224,0,2,160,199,163,208,128,59,148,11,173,96,+229,32,1,70,218,230,223,0,2,95,56,57,85,250,0,50,131,156,96,70,+253,224,6,1,105,110,93,217,20,105,115,116,101,110,116,32,116,121,112,101,+32,101,113,117,97,108,105,116,121,32,208,178,65,49,64,52,96,153,138,54,+224,68,6,1,32,126,128,44,192,32,160,0,64,234,141,146,1,83,32,66,+155,194,130,195,183,211,213,96,156,194,6,225,54,1,96,22,252,107,0,225,+247,16,193,84,164,63,96,103,143,237,117,39,0,55,101,140,227,28,0,1,+64,64,77,13,107,111,2,95,49,50,122,210,68,171,139,56,64,26,0,57,+75,212,2,95,49,48,82,26,64,25,0,54,233,21,32,234,249,1,229,171,+47,224,194,1,229,173,3,65,188,233,17,6,65,19,64,25,137,43,3,95,+49,51,57,74,74,0,52,73,194,64,22,169,40,128,50,0,55,113,71,239,+249,2,64,33,198,123,0,89,199,252,224,2,0,133,38,224,21,7,224,24,+1,229,170,4,224,28,8,224,55,10,64,2,224,29,21,229,242,0,64,0,+193,47,225,55,1,192,25,96,42,232,241,2,192,57,224,99,6,224,39,9,+233,134,0,224,57,4,224,148,3,229,195,2,192,23,224,129,1,162,172,96,+8,160,5,3,95,49,50,50,232,215,0,224,178,8,226,44,13,227,211,4,+229,120,3,192,126,230,40,11,165,152,224,24,4,234,44,3,3,32,64,95,+55,79,82,128,0,228,84,2,224,8,0,128,54,239,17,15,160,79,3,95,+52,49,52,96,21,100,52,163,23,228,82,2,1,49,50,66,180,129,28,101,+54,3,95,55,50,57,110,38,0,50,78,132,1,95,56,189,4,68,106,96,+250,164,112,226,199,1,225,25,0,234,21,5,226,4,3,201,232,225,162,7,+225,179,0,193,198,227,32,0,162,214,233,156,0,192,100,192,1,199,66,225,+162,11,108,193,224,28,26,128,123,193,158,128,30,224,19,0,231,248,5,224,+75,13,239,132,4,224,36,16,238,11,1,1,95,52,81,184,224,0,0,225,+15,2,226,199,9,226,50,8,97,232,224,97,6,242,111,5,224,30,8,232,+103,8,224,89,2,192,234,221,36,194,67,176,63,98,42,232,189,7,159,232,+235,63,2,231,56,3,139,139,128,10,171,144,96,94,64,50,178,172,171,138,+224,84,5,192,90,236,82,14,96,146,166,121,192,17,226,60,23,224,0,1,+192,49,129,245,224,83,3,225,148,11,225,252,0,225,26,0,225,93,6,224,+64,1,237,170,0,225,87,6,225,84,5,102,27,2,49,53,54,114,99,166,+173,68,55,225,69,6,248,246,2,64,70,135,146,124,208,224,152,0,224,21,+2,173,174,185,140,167,69,142,251,128,14,153,164,3,95,49,53,53,65,109,+70,19,185,239,96,219,191,185,227,250,12,131,243,99,235,203,243,65,177,64,+66,140,64,0,75,253,84,8,97,8,225,53,1,193,139,232,8,7,128,179,+64,23,134,82,224,31,6,100,148,130,166,232,3,0,97,52,182,3,241,186,+6,246,39,21,96,33,96,90,241,123,3,231,204,0,182,62,234,35,2,246,+15,1,64,237,172,217,199,62,65,50,2,49,53,49,98,184,227,177,0,247,+85,0,98,158,130,64,197,162,225,28,2,186,184,224,183,0,224,51,2,96,+151,224,13,0,131,115,136,221,161,143,250,198,3,2,95,49,49,233,125,2,+66,11,72,111,98,60,65,248,1,32,95,65,174,4,95,51,50,50,32,162,+75,64,62,1,55,52,128,23,225,125,0,64,139,192,107,3,95,56,52,56,+233,230,2,1,36,120,105,229,65,1,141,219,98,103,1,75,52,96,2,130,+253,64,27,137,75,242,145,16,175,227,192,213,79,135,160,14,242,145,7,66,+102,233,123,28,126,119,192,80,239,36,51,236,18,3,64,128,137,121,3,95,+56,49,51,124,190,192,82,224,1,3,230,42,2,224,114,0,224,1,7,232,+155,1,224,37,17,224,35,4,64,197,197,4,64,135,243,19,7,131,223,64,+25,137,234,0,85,65,127,161,136,130,230,64,27,189,218,119,92,155,76,92,+224,64,25,131,234,225,217,1,3,97,100,105,99,187,195,64,34,125,246,0,+73,162,219,141,9,195,75,0,50,145,85,1,32,83,64,85,1,51,54,132,+19,131,26,242,46,0,65,40,96,171,100,90,224,222,2,130,223,65,98,227,+115,3,68,141,224,48,16,160,46,100,214,225,15,0,64,38,240,153,17,0,+53,128,89,233,98,0,227,163,3,232,252,8,67,134,233,250,5,192,126,238,+114,1,175,228,160,154,228,146,4,242,81,0,224,32,15,129,47,166,134,228,+209,8,122,67,225,102,0,225,100,1,236,250,0,230,241,2,236,192,0,98,+244,161,230,224,58,8,96,110,99,151,224,58,11,162,233,224,236,0,224,174,+8,131,27,232,93,1,238,196,6,96,122,240,95,1,225,78,4,224,159,2,+133,97,197,197,228,171,0,138,169,224,151,8,99,67,116,180,69,143,66,86,+71,112,110,185,0,56,92,102,1,64,64,226,168,1,14,98,97,100,32,115,+121,110,111,110,121,109,32,117,115,101,142,162,96,0,156,161,133,6,225,227,+4,143,82,0,53,98,154,66,59,242,150,3,65,253,160,158,194,34,225,34,+0,148,82,0,85,250,215,0,236,249,8,172,243,130,47,97,73,203,194,226,+53,3,224,2,0,224,45,8,225,119,4,226,222,0,134,32,236,23,1,160,+197,224,51,10,162,90,64,29,224,46,0,231,90,15,130,81,225,254,2,226,+110,9,225,184,3,97,144,2,95,49,53,124,220,224,183,2,240,188,0,194,+1,74,111,128,5,154,170,226,146,2,80,154,236,153,0,224,119,12,192,244,+224,119,4,224,48,5,225,62,0,162,176,225,65,18,224,169,5,227,146,18,+195,145,240,79,8,244,209,1,224,141,0,192,12,225,195,1,224,78,8,128,+196,224,222,10,192,24,0,85,219,179,227,86,21,254,130,5,224,197,0,224,+47,11,192,30,242,75,2,116,9,242,219,1,224,69,4,224,42,0,192,44,+192,193,97,81,96,16,174,76,227,164,0,136,28,225,255,0,224,69,5,192,+49,242,234,0,230,31,8,227,140,0,224,169,6,129,225,195,65,232,234,1,+160,136,227,91,7,129,196,192,38,160,28,161,49,249,184,3,128,129,148,183,+70,191,235,71,2,224,66,4,65,179,233,246,1,1,52,52,202,17,97,55,+172,141,204,140,128,61,225,4,1,160,81,236,163,12,64,67,235,40,26,235,+142,7,0,75,103,112,68,153,135,194,2,52,32,90,224,1,0,0,75,248,+42,3,70,209,113,231,73,150,1,95,56,233,148,4,13,80,114,105,109,105,+116,105,118,101,115,46,84,121,112,133,17,64,50,178,52,240,17,5,3,95,+51,52,55,229,28,1,3,95,49,53,52,96,198,69,31,152,2,95,132,103,+89,147,177,164,84,225,169,0,225,230,6,128,83,231,129,2,237,47,1,1,+49,53,128,6,135,147,0,51,156,175,193,238,229,162,5,101,250,67,79,129,+153,64,58,65,106,128,175,1,51,53,136,192,65,171,64,25,193,178,65,130,+90,49,97,149,142,76,0,48,65,119,255,32,1,198,144,98,124,129,84,238,+63,8,64,241,137,65,161,91,139,66,64,22,211,33,0,83,227,245,0,254,+225,3,228,220,0,64,42,137,77,0,85,128,98,98,31,0,54,170,131,64,+29,137,79,106,234,160,196,1,52,56,96,98,65,123,141,112,130,200,96,231,+90,34,203,214,1,49,52,104,245,3,95,49,52,50,247,139,2,101,90,0,+55,95,234,64,74,172,146,64,82,105,181,102,131,228,173,18,128,151,224,32,+18,165,148,232,210,25,224,33,19,132,130,228,191,10,224,25,0,0,85,232,+194,17,128,95,0,85,224,60,0,161,107,192,237,224,51,12,214,44,98,9,+0,52,98,139,224,45,6,232,239,13,131,197,230,11,10,192,24,198,11,192,+7,224,40,8,246,132,5,66,47,156,136,99,46,220,149,130,244,0,52,69,+154,130,8,77,137,247,155,5,224,176,0,253,105,2,104,125,224,199,0,167,+228,225,112,12,225,145,23,129,178,235,18,2,199,33,160,31,96,98,96,194,+128,22,64,118,65,170,192,186,1,51,48,65,83,224,177,4,133,16,165,15,+225,108,1,231,87,148,226,107,9,64,28,66,106,161,161,87,24,192,205,80,+196,143,155,204,14,198,131,218,64,140,204,224,253,3,128,0,101,40,227,84,+4,113,116,192,101,113,246,192,53,224,61,2,224,174,4,134,79,109,93,121,+203,230,77,8,67,245,134,58,98,82,70,165,66,98,151,224,65,188,184,208,+128,19,64,102,0,52,128,26,248,78,0,0,56,141,181,0,53,67,47,64,+24,184,77,77,107,86,224,1,57,32,235,120,2,1,91,93,70,89,64,37,+133,47,97,16,2,95,49,53,192,111,174,107,235,75,0,235,81,4,96,44,+224,251,2,64,27,160,10,0,83,98,109,95,40,67,25,64,174,211,20,160,+9,128,8,78,104,98,149,0,50,68,9,162,135,1,54,56,236,33,10,8,+99,111,109,112,111,115,101,83,101,78,207,161,86,65,30,89,213,1,53,56,+178,66,226,181,0,67,189,1,95,54,176,146,103,145,102,54,136,191,187,68,+64,222,243,27,0,224,149,23,128,143,224,142,1,7,104,97,115,70,105,101,+108,100,128,140,64,42,0,50,129,48,175,102,224,81,41,2,115,101,116,224,+81,12,64,225,97,152,131,190,0,51,65,219,224,64,2,1,95,56,117,169,+224,71,1,10,114,101,99,67,111,110,69,114,114,111,114,161,218,0,51,166,+68,164,37,244,162,2,66,185,68,4,160,167,0,53,124,13,252,3,5,26,+67,111,110,116,114,111,108,46,69,120,99,101,112,116,105,111,110,46,73,110,+116,101,114,110,97,108,46,193,136,128,88,64,62,101,7,0,67,180,173,252,+79,9,4,44,32,97,116,32,188,81,136,83,193,161,64,165,130,244,133,13,+165,237,224,160,3,3,95,49,50,57,144,70,83,116,0,51,161,89,0,48,+137,155,0,79,225,104,3,193,103,224,196,2,1,104,97,97,12,130,9,128,+110,131,73,67,233,103,60,0,85,129,108,131,68,234,134,0,247,229,3,64,+85,0,57,194,60,132,216,235,0,2,172,228,224,21,8,64,193,228,150,1,+132,25,232,173,0,244,189,0,224,56,4,196,205,96,62,235,87,2,139,61,+224,29,7,128,100,64,2,139,53,239,188,3,132,174,89,214,1,48,54,67,+133,235,76,4,244,60,7,133,91,67,171,70,1,232,235,0,165,215,211,144,+107,2,0,90,161,163,0,51,254,145,6,226,211,7,7,78,101,115,116,101,+100,32,102,66,215,11,115,32,110,111,116,32,97,108,108,111,119,101,162,228,+96,0,241,10,13,198,52,240,138,4,96,22,0,32,71,60,224,50,5,160,+162,224,147,19,226,140,9,4,101,120,116,114,97,128,154,2,40,115,41,130,+150,3,66,32,95,55,85,236,132,71,131,89,192,145,234,153,4,234,14,5,+193,189,64,36,234,137,4,224,22,1,226,52,0,102,44,131,201,96,18,96,+30,153,61,64,26,247,163,1,254,232,7,160,0,64,56,97,189,132,234,1,+51,57,94,246,169,126,231,181,0,0,51,235,9,0,98,212,212,102,230,189,+0,0,85,104,191,229,21,15,64,61,70,48,84,133,164,41,64,21,203,57,+64,71,108,70,75,23,224,242,5,235,167,4,224,26,6,99,164,84,94,0,+53,80,151,227,173,0,197,188,160,53,64,255,227,114,14,226,131,1,200,208,+163,7,227,94,5,133,104,226,6,8,167,94,229,39,4,11,111,114,100,32,+119,105,108,100,99,97,114,100,226,157,9,138,117,224,193,1,84,84,200,57,+231,242,0,0,54,107,149,160,212,224,254,0,160,219,225,176,4,225,143,2,+134,117,67,73,153,175,64,3,0,75,64,163,203,246,64,48,107,246,64,88,+0,56,236,24,0,0,58,97,14,129,133,96,127,225,41,0,69,47,202,218,+231,160,0,252,161,4,97,251,97,80,96,152,228,69,3,224,39,3,64,32,+64,132,226,204,8,247,189,0,64,143,184,7,245,164,9,0,52,69,197,128,+93,148,80,96,26,75,197,224,78,5,86,186,96,41,227,48,5,64,94,200,+251,0,90,66,166,96,17,0,54,224,242,0,237,170,3,64,144,64,29,197,+177,168,100,135,19,65,72,64,28,130,249,231,141,42,0,103,231,141,14,0,+50,131,27,0,83,161,98,119,46,102,169,165,143,199,89,176,185,102,185,96,+117,102,188,228,82,0,230,172,19,4,80,114,111,120,121,165,32,224,156,3,+64,125,195,131,97,77,0,57,105,39,138,217,142,73,224,248,1,130,98,1,+95,56,240,83,4,1,66,64,168,17,64,45,111,28,0,53,71,134,96,212,+0,58,154,230,208,91,97,30,0,49,138,152,1,53,49,128,84,0,49,245,+98,3,91,4,2,95,49,50,72,91,144,239,64,36,160,155,2,80,32,35,+194,51,64,24,129,191,239,15,13,0,52,121,193,97,37,239,15,1,226,221,+9,208,110,177,61,130,228,231,26,3,85,241,229,93,1,101,71,109,162,104,+153,244,176,0,128,88,203,246,237,123,1,224,2,3,128,24,242,137,4,96,+2,165,58,65,121,69,32,239,204,15,64,205,195,250,247,81,1,245,79,1,+224,5,0,102,174,227,161,3,64,19,0,83,128,154,238,141,13,228,246,0,+128,24,128,127,0,55,134,143,220,35,67,88,198,148,193,71,1,49,52,197,+24,64,12,100,73,64,8,107,227,64,72,3,80,32,95,55,153,231,98,157,+2,95,49,52,111,118,96,20,224,0,0,193,89,161,92,65,38,66,25,180,+84,207,22,64,158,193,149,173,77,177,228,224,68,7,148,100,225,1,4,224,+172,3,224,11,3,64,234,96,181,128,179,192,159,224,152,0,130,2,244,117,+0,215,235,135,76,2,49,53,49,98,106,230,152,1,64,42,254,33,7,224,+164,3,248,24,0,66,187,196,93,226,142,13,128,61,226,116,0,232,172,3,+97,97,0,49,105,227,2,51,53,32,135,112,192,44,224,244,2,166,72,224,+56,2,71,211,129,134,232,74,4,64,140,173,200,1,51,54,224,138,1,1,+57,49,103,240,106,70,64,34,132,158,224,175,21,194,22,128,103,235,190,1,+0,48,196,79,136,237,64,83,230,200,1,64,92,228,125,1,224,96,15,193,+151,225,148,18,251,171,5,64,187,96,133,225,23,27,104,41,225,23,10,167,+79,99,160,68,21,64,203,69,109,128,188,64,33,211,172,224,185,25,192,35,+97,32,136,154,231,45,4,135,68,0,48,169,161,129,37,128,134,64,114,255,+32,0,210,93,3,66,32,95,57,129,65,128,82,255,9,5,64,70,3,10,+65,32,90,64,46,64,14,173,2,253,163,14,129,39,131,249,0,48,97,156,+106,66,240,230,2,147,78,163,118,228,135,0,0,85,228,44,7,0,56,230,+21,4,2,75,105,110,235,143,0,64,132,0,54,130,101,118,81,100,220,131,+238,168,86,227,222,0,96,9,66,57,164,66,110,102,0,95,110,174,224,6,+6,106,100,64,3,100,223,192,76,0,83,123,132,143,170,192,32,224,106,19,+109,71,224,108,1,111,247,64,114,224,108,31,0,82,224,108,26,65,70,96,+100,0,83,172,89,224,110,6,160,103,224,117,2,224,106,9,224,63,3,224,+113,2,173,139,151,14,192,147,224,40,0,224,108,18,224,115,2,128,67,224,+61,13,160,106,3,95,51,50,48,225,219,2,31,92,34,115,114,99,47,77,+105,99,114,111,72,115,47,84,67,77,111,110,97,100,46,104,115,92,34,44,+50,51,55,58,50,0,51,237,136,2,130,51,67,92,199,143,1,53,48,231,+157,3,1,53,48,74,162,224,13,1,0,52,224,13,1,0,53,79,204,192,+11,0,57,224,11,0,66,77,197,64,74,9,73,242,64,19,172,143,132,35,+231,197,1,96,61,101,230,102,86,130,222,64,47,132,212,224,47,11,224,57,+2,0,54,99,17,160,57,224,64,6,242,197,1,224,54,7,224,152,1,224,+53,9,242,28,0,224,2,0,131,184,241,72,2,228,225,2,231,204,5,70,+68,227,246,0,239,215,3,224,50,4,71,0,229,14,4,64,55,229,253,11,+64,22,0,57,128,149,228,202,1,72,243,128,71,254,163,2,232,203,4,133,+17,96,112,64,0,192,44,130,230,249,242,5,160,59,196,230,233,10,0,160,+94,130,186,68,16,132,84,224,96,4,96,17,224,137,1,164,158,224,38,4,+96,35,224,75,6,192,37,193,20,96,150,97,35,225,20,9,0,56,99,6,+225,20,4,192,112,156,188,128,85,252,83,1,230,121,11,225,160,6,0,57,+224,71,5,192,73,96,26,239,216,7,224,100,72,192,14,162,135,224,17,0,+224,15,0,224,133,3,224,47,2,159,74,164,170,226,128,31,64,115,224,104,+1,224,141,3,224,143,0,224,19,2,191,173,226,13,6,98,68,128,32,226,+24,2,129,175,131,12,0,64,162,103,224,73,1,234,199,8,226,108,2,224,+37,1,224,131,18,224,70,0,195,112,192,136,224,119,0,134,216,124,89,184,+185,96,5,64,0,226,87,9,226,93,12,231,222,7,199,228,130,115,242,87,+0,126,70,64,74,248,63,11,236,82,0,224,189,2,224,21,15,160,132,248,+107,6,201,103,192,0,254,174,2,252,222,8,226,0,57,69,155,100,81,228,+224,0,226,212,10,196,57,128,12,224,94,6,160,222,192,86,66,173,81,205,+2,49,52,57,204,53,192,54,129,202,164,193,96,119,136,245,128,243,232,140,+6,12,99,97,110,110,111,116,45,104,97,112,112,101,110,102,156,64,48,246,+26,0,237,144,1,64,13,224,144,3,64,95,250,144,1,128,1,162,86,197,+6,226,60,0,192,34,67,181,224,46,0,237,142,7,224,178,1,161,23,226,+35,6,236,186,11,0,57,65,177,64,38,0,79,236,114,5,229,252,30,224,+103,0,75,227,71,94,0,50,159,23,96,93,0,52,148,21,84,31,66,57,+0,67,64,35,0,56,244,30,4,225,137,0,64,18,225,82,1,5,83,117,+98,115,117,109,119,187,11,32,99,104,101,99,107,32,102,97,105,108,101,201,+243,226,93,7,65,111,0,54,199,47,224,227,2,3,95,49,48,55,224,173,+0,77,47,131,15,241,213,6,95,173,96,66,135,247,2,75,32,89,97,120,+65,49,134,162,252,171,0,134,95,64,218,166,16,254,133,4,225,112,1,228,+59,7,97,214,84,120,161,41,226,3,6,244,41,0,64,60,238,96,8,116,+65,129,172,230,74,7,71,219,184,184,224,0,1,225,249,3,224,136,0,240,+76,2,188,235,0,67,232,14,0,197,10,230,221,0,229,69,1,226,47,7,+195,147,226,85,3,226,129,4,192,36,128,177,224,179,7,228,2,0,164,225,+224,191,3,242,133,0,160,168,225,14,40,164,150,65,81,76,214,224,0,1,+224,42,5,0,80,212,179,162,55,137,216,64,80,232,155,1,108,205,229,141,+11,228,91,2,230,31,8,163,45,194,32,64,112,129,78,160,174,224,197,0,+240,239,1,225,37,0,224,27,10,227,125,0,162,107,230,1,7,227,156,8,+68,25,232,117,1,129,3,225,39,8,207,210,225,151,6,226,160,31,228,27,+0,65,57,138,226,250,117,12,227,118,3,117,99,0,57,109,230,1,52,54,+129,152,225,192,13,65,52,96,159,129,245,166,190,130,50,166,90,184,44,160,+71,160,13,230,134,1,64,149,207,240,225,83,4,118,104,224,115,8,224,186,+0,158,125,249,122,3,160,117,98,155,181,1,160,14,2,79,32,35,64,20,+97,9,156,18,0,50,101,66,192,127,139,129,225,217,11,246,110,4,227,168,+1,170,105,228,100,0,96,42,114,45,193,38,0,52,146,213,75,229,160,105,+96,58,225,239,2,96,121,213,32,4,52,56,56,32,58,128,24,226,217,2,+230,81,1,129,98,97,111,132,197,134,96,226,111,0,226,114,0,199,122,192,+204,224,50,2,132,248,249,229,1,227,41,6,171,67,224,172,1,224,60,10,+192,203,224,32,1,228,181,8,224,34,9,135,30,160,77,167,25,232,12,5,+192,231,231,53,4,227,173,2,192,82,128,21,129,66,226,129,1,224,101,3,+235,58,8,225,61,0,225,62,2,85,170,92,167,150,5,224,24,1,142,241,+102,219,0,54,252,189,1,226,124,0,132,95,224,133,11,224,18,11,224,23,+0,234,156,8,246,36,4,96,182,133,8,104,110,224,13,5,224,56,12,224,+57,3,235,60,3,228,87,1,228,119,6,192,184,160,58,134,16,64,9,226,+192,0,224,103,5,129,23,224,42,1,197,35,193,28,241,226,1,253,85,12,+225,81,0,165,145,162,88,228,251,2,225,183,1,225,227,13,96,195,227,133,+8,247,150,0,167,214,226,239,1,227,6,4,96,35,224,17,9,225,52,2,+65,165,67,157,241,17,1,225,69,1,171,146,64,220,96,133,253,204,5,138,+54,6,32,117,110,105,102,121,32,136,216,228,117,4,2,49,50,54,132,4,+224,55,6,3,32,97,110,100,128,47,192,34,224,236,3,162,3,226,66,9,+68,17,138,196,234,147,1,229,180,5,0,52,129,227,193,76,64,16,128,93,+64,70,69,21,64,66,217,49,64,19,153,15,133,60,1,49,52,116,142,64,+34,0,54,96,34,250,28,3,10,105,109,105,116,105,118,101,115,46,126,34,+80,16,96,42,250,19,0,135,246,224,9,0,197,207,64,38,231,155,1,230,+101,12,0,52,146,97,235,44,4,134,224,64,142,0,50,162,201,229,38,6,+65,16,229,160,0,226,86,8,228,58,32,235,204,7,133,167,0,57,235,67,+6,160,39,229,226,6,66,248,107,8,110,2,102,159,131,38,226,59,33,4,+121,99,108,105,99,226,53,10,110,92,66,20,252,173,0,226,63,9,0,61,+226,61,17,229,96,5,233,125,7,225,113,1,192,216,0,67,129,112,224,193,+0,192,192,161,112,224,132,0,161,122,247,140,3,227,147,18,225,6,8,126,+140,128,141,163,27,1,52,56,101,80,224,217,6,5,101,114,114,111,114,58,+161,22,96,113,222,182,2,67,32,80,224,40,2,3,116,121,112,101,64,36,+224,17,1,0,107,214,80,224,18,1,3,115,111,114,116,224,18,6,4,114,+101,97,108,109,156,143,96,128,236,112,47,65,68,0,58,130,46,153,28,0,+53,140,115,235,147,5,226,150,3,129,201,226,78,1,167,67,225,48,1,224,+39,21,202,163,193,180,234,165,0,224,36,4,130,13,231,135,17,98,29,130,+203,128,107,205,208,130,199,250,156,1,230,221,3,140,13,0,90,64,208,0,+90,64,49,192,25,224,100,8,237,42,2,0,75,179,138,169,29,165,153,224,+215,10,230,254,2,224,79,8,236,242,9,64,29,128,34,160,25,64,106,128,+11,2,95,49,50,65,163,154,74,129,164,100,169,65,170,164,239,0,51,64,+11,68,239,0,49,65,225,0,52,118,241,0,51,156,76,64,40,133,24,78,+60,96,165,132,88,196,81,196,84,163,85,236,58,7,200,49,140,54,148,175,+99,35,235,186,9,225,82,1,231,174,3,237,34,5,67,118,80,216,106,208,+2,49,50,55,163,229,64,45,141,231,237,105,1,225,161,6,130,123,235,254,+6,192,63,160,232,0,54,163,82,161,136,143,228,236,5,24,87,109,236,246,+5,237,191,9,242,178,2,235,239,12,64,0,224,53,3,64,141,134,73,4,+83,32,85,32,95,127,250,1,90,32,76,198,0,89,249,35,3,129,143,97,+127,227,80,1,231,202,5,226,86,6,212,195,226,127,0,224,46,21,253,218,+0,133,137,224,47,2,224,44,10,225,243,1,168,84,227,138,49,162,187,96,+11,160,238,227,42,0,160,92,160,135,224,13,0,232,194,0,225,6,0,224,+53,2,224,175,2,140,138,0,39,241,194,0,97,132,0,48,241,186,8,96,+59,226,217,3,226,230,4,127,187,129,209,193,75,64,30,129,37,98,59,1,+49,52,91,255,4,64,95,53,54,53,148,119,0,90,64,49,222,214,226,19,+4,224,35,1,194,171,166,122,136,46,160,0,128,121,64,172,0,50,160,172,+64,11,194,118,96,145,144,111,104,225,192,10,178,4,242,254,11,230,134,3,+96,171,97,10,160,211,224,57,0,130,167,1,56,51,169,108,1,67,39,66,+129,64,137,149,116,226,130,3,128,161,247,20,1,193,21,161,19,129,190,107,+175,100,109,3,49,49,55,57,225,118,3,129,84,221,38,239,4,1,227,34,+2,229,11,11,226,53,2,96,180,0,52,160,169,139,244,226,132,13,207,171,+196,104,224,77,0,239,196,1,209,234,228,145,5,235,252,14,207,223,227,37,+0,64,12,129,174,0,48,91,47,224,11,0,111,246,64,32,2,79,32,64,+193,143,198,18,224,198,5,0,55,236,198,1,226,205,1,225,101,1,227,83,+5,128,42,227,208,5,224,39,10,231,83,0,173,55,116,8,128,50,160,33,+169,87,178,137,64,177,65,94,97,136,192,141,225,129,8,230,221,10,227,221,+11,224,37,1,229,222,1,64,231,145,129,128,98,64,15,193,190,128,69,97,+79,224,166,8,97,27,224,75,8,133,251,231,161,9,98,88,0,55,195,237,+0,54,226,117,5,96,41,1,95,51,66,53,234,79,8,3,115,117,98,115,+108,198,8,109,112,108,101,109,101,110,116,101,236,158,0,81,29,2,49,50,+54,226,172,1,69,177,203,212,179,224,66,4,64,22,0,51,234,27,0,1,+80,32,129,7,0,80,135,129,202,52,1,80,32,101,151,0,85,128,21,137,+216,169,58,99,55,129,216,130,96,228,234,3,129,226,128,16,176,234,245,208,+3,226,11,1,227,154,0,227,5,10,229,48,2,227,197,2,226,106,16,231,+113,0,161,145,232,191,15,0,50,161,26,160,24,225,195,9,0,50,226,107,+1,229,237,0,193,179,160,10,217,162,160,167,224,43,3,224,223,1,224,226,+20,230,191,0,224,227,22,224,153,5,230,199,0,224,143,4,64,141,160,43,+175,78,64,13,65,9,171,186,228,174,8,224,93,2,228,180,12,224,242,25,+225,89,1,228,167,11,224,244,1,236,219,5,224,13,3,228,185,14,224,44,+14,174,100,194,102,197,189,228,211,0,224,155,0,228,180,3,225,142,7,193,+145,224,98,0,228,134,13,226,205,3,161,151,224,49,0,225,210,18,205,117,+129,126,128,26,226,132,2,225,201,4,237,210,2,225,101,0,232,15,4,224,+19,5,228,221,30,224,179,0,230,97,1,224,236,17,228,103,0,229,157,1,+224,53,26,225,93,0,192,29,229,79,14,225,199,8,225,21,0,129,186,129,+194,134,114,68,36,231,206,7,225,7,4,227,32,1,192,56,225,25,3,128,+36,227,244,1,160,105,64,146,250,251,5,128,31,130,5,224,27,6,196,8,+152,66,201,126,237,89,2,224,4,1,128,116,229,152,14,9,102,114,101,101,+84,121,86,97,114,115,175,18,229,144,7,97,50,166,88,208,10,2,85,32,+65,101,100,100,65,0,75,134,108,174,181,133,120,142,246,96,32,0,58,131,+198,1,10,65,190,95,254,101,1,128,246,128,180,119,95,0,56,166,124,2,+54,32,35,125,108,247,57,7,7,64,95,53,54,54,32,95,50,80,2,162,+13,224,67,11,233,161,4,1,95,50,141,137,1,54,55,67,235,64,4,1,+49,50,65,240,64,150,189,174,5,50,48,55,32,95,50,85,160,128,38,3,+64,95,50,52,108,137,160,12,88,195,1,95,50,176,170,2,54,52,32,122,+28,64,27,64,6,96,155,64,8,0,54,224,23,11,1,50,56,132,199,128,+72,0,56,224,98,1,64,126,253,252,0,98,33,227,126,1,227,251,5,162,+132,119,241,1,52,50,246,68,0,243,159,1,64,8,135,243,65,220,80,76,+161,152,193,188,96,85,74,200,1,49,51,161,60,224,64,2,64,50,0,53,+224,50,0,139,21,162,39,78,182,129,233,128,0,224,114,90,66,200,224,114,+3,224,43,6,224,15,7,65,69,0,54,193,196,0,57,66,42,1,51,32,+101,149,128,9,4,49,49,49,52,49,111,124,64,40,206,4,132,52,180,218,+224,196,13,196,66,130,60,160,191,64,206,143,18,131,18,224,13,1,224,192,+17,128,81,64,125,136,208,0,95,121,116,64,44,213,31,0,54,108,125,71,+193,64,24,250,151,0,0,53,160,80,0,51,76,183,2,95,57,50,174,201,+64,45,192,57,0,53,98,144,192,57,131,113,196,175,78,232,156,191,64,171,+199,110,192,7,143,8,188,223,224,32,9,255,138,0,103,144,0,51,98,175,+128,0,0,58,128,117,122,64,100,36,0,53,76,214,147,191,187,64,64,34,+209,14,73,163,65,34,137,141,64,36,96,22,244,47,8,179,0,251,8,12,+176,132,166,223,140,32,164,250,1,95,54,81,79,101,76,0,90,150,138,237,+228,0,164,22,224,101,4,96,7,133,116,248,174,4,246,196,1,65,86,243,+131,3,0,48,192,79,0,85,112,47,224,28,14,96,219,130,133,132,139,114,+3,161,104,210,8,1,53,52,242,8,1,238,51,3,197,179,213,32,96,237,+64,80,130,173,7,95,56,49,51,32,75,32,85,230,218,0,224,1,5,142,+30,160,0,224,34,13,233,0,2,96,0,64,158,168,242,64,102,130,150,129,+2,143,7,1,53,50,129,173,130,163,230,40,1,2,100,105,99,84,233,64,+26,245,161,1,253,63,9,160,134,241,183,5,97,142,65,118,98,115,64,13,+246,136,0,64,7,64,117,186,250,253,41,7,64,148,1,10,65,125,79,0,+54,101,212,64,19,188,195,224,123,2,0,50,64,200,0,83,83,51,135,250,+130,100,225,229,3,128,148,0,50,161,231,3,83,32,95,51,110,22,193,159,+120,158,193,159,254,248,5,83,205,80,212,64,57,2,95,49,53,90,138,106,+162,2,50,50,32,200,146,64,64,181,174,65,4,166,250,82,101,224,1,3,+0,75,233,173,0,128,219,64,50,225,227,3,66,99,225,194,27,224,35,26,+224,32,23,224,29,20,224,26,17,224,23,14,224,20,11,224,17,8,224,14,+5,224,11,2,192,8,96,5,226,158,2,224,0,2,65,44,132,61,3,95,+57,51,50,181,129,64,20,0,54,193,108,0,52,192,2,96,59,64,26,131,+64,0,67,145,81,231,79,1,64,109,234,85,5,228,96,0,224,33,15,172,+196,228,130,3,224,33,7,128,67,234,91,11,192,25,112,7,250,13,5,217,+41,132,172,0,80,64,252,226,118,2,229,39,15,228,193,10,64,26,101,136,+227,115,3,96,0,0,85,224,145,0,64,98,0,95,71,141,1,49,50,67,+191,233,57,1,229,199,0,96,70,99,19,245,147,3,64,65,224,40,11,64,+67,192,146,64,0,224,11,2,225,4,8,129,98,68,196,115,170,224,72,2,+70,222,64,57,224,198,0,192,78,235,217,1,225,176,9,225,175,23,204,103,+237,175,8,192,24,139,127,180,33,128,12,226,32,18,225,219,16,225,218,2,+84,145,225,124,5,238,170,11,224,47,19,96,0,224,50,13,225,130,0,226,+12,11,224,24,14,129,178,224,98,2,247,207,3,224,132,17,248,225,4,67,+69,253,92,1,1,80,32,161,199,145,113,65,178,3,10,65,32,80,72,207,+66,12,251,178,0,71,244,225,104,1,65,193,177,188,66,91,231,35,20,249,+44,3,225,10,0,2,95,49,51,67,67,64,30,104,135,64,72,165,255,231,+27,13,231,19,0,224,22,5,224,1,1,229,76,127,228,234,6,0,58,129,+0,250,71,0,0,54,145,15,73,254,1,49,51,65,121,193,2,64,40,134,+57,196,247,230,90,0,64,26,133,39,130,51,226,71,4,2,95,51,49,65,+213,0,85,215,31,224,32,15,196,172,96,38,129,196,224,41,3,131,183,128,+41,227,75,2,128,33,68,153,0,49,65,232,78,148,0,49,232,61,2,1,+61,62,222,78,224,22,4,255,245,2,160,33,224,91,5,1,95,49,98,137,+0,67,177,49,225,43,3,0,54,130,4,1,52,56,103,243,97,44,111,37,+96,132,96,7,77,143,66,77,66,66,99,26,224,6,3,224,33,0,64,13,+128,39,224,33,21,160,26,224,40,3,224,33,13,224,40,3,3,64,95,51,+48,100,225,117,245,64,182,134,150,0,75,98,11,254,221,17,98,39,0,83,+64,208,96,39,111,186,128,10,239,189,5,22,97,115,115,101,114,116,84,67,+77,111,100,101,58,32,101,120,112,101,99,116,101,100,61,255,242,13,175,215,+96,142,160,190,139,231,0,79,96,18,0,51,160,8,1,50,48,192,8,0,+49,248,232,2,224,122,8,4,44,32,103,111,116,128,105,160,90,160,85,225,+162,1,132,60,1,75,51,68,35,64,94,108,55,3,49,57,32,75,191,107,+3,95,50,57,57,224,81,2,5,84,67,69,120,112,114,128,81,224,25,7,+0,84,191,140,224,26,10,0,75,223,149,224,26,9,0,83,223,157,98,121,+70,252,128,163,65,117,224,12,0,64,156,132,192,122,202,1,49,52,231,35,+0,65,3,86,225,0,57,66,243,135,189,3,49,52,51,48,197,31,157,58,+1,56,57,157,136,225,30,6,15,77,117,108,116,105,112,108,121,32,100,101,+102,105,110,101,100,209,93,1,56,48,99,243,1,95,52,117,213,64,123,182,+164,2,56,57,48,97,39,205,200,64,124,3,56,32,64,95,77,54,0,58,+96,136,192,162,112,234,250,58,0,194,139,132,94,141,218,193,136,196,116,250,+70,0,224,2,1,194,102,200,27,64,16,96,20,194,185,128,10,80,251,64,+125,254,225,0,226,178,15,226,207,15,199,36,224,31,15,242,101,2,235,180,+8,64,31,148,119,179,43,232,250,8,101,42,65,158,162,80,78,16,68,128,+167,10,125,236,96,20,224,100,19,1,52,49,192,100,140,165,231,77,1,224,+183,18,167,75,129,65,0,66,112,75,224,185,12,224,214,13,98,81,195,160,+224,140,10,232,29,9,64,25,0,57,98,20,238,118,2,79,252,210,193,196,+139,99,191,163,189,96,7,98,170,68,65,249,141,3,2,99,99,32,227,30,+3,210,241,96,92,129,69,161,74,131,53,128,23,1,49,52,131,54,128,13,+178,219,192,12,100,87,194,212,64,7,130,173,178,49,252,234,8,226,120,0,+175,0,145,129,96,0,201,183,128,29,2,52,50,52,241,130,0,177,114,160,+6,64,103,133,78,77,109,71,10,98,246,64,22,132,121,210,111,224,123,33,+96,20,244,100,1,224,106,4,132,192,1,75,50,81,221,64,15,132,51,1,+75,50,180,228,65,111,101,217,64,133,64,15,213,3,237,252,4,0,58,97,+198,195,225,105,5,78,95,137,0,0,49,238,132,2,64,40,238,31,6,130,+140,224,1,1,239,253,1,224,25,7,192,1,232,234,101,232,208,5,64,192,+244,225,0,66,242,249,215,1,1,51,57,66,44,0,48,118,181,86,162,0,+79,132,198,0,57,98,130,0,49,65,40,0,79,129,250,72,9,97,165,115,+5,96,33,131,9,81,77,1,49,52,106,143,214,131,96,112,0,54,129,49,+96,48,3,95,56,52,56,232,106,13,226,247,0,64,50,130,65,224,39,12,+166,89,64,37,203,7,224,203,24,66,189,0,79,64,181,224,210,1,1,51,+57,97,21,158,170,128,22,150,75,0,48,68,5,96,191,224,52,9,1,52,+48,98,6,224,52,1,96,16,224,52,24,135,215,224,52,2,104,153,224,52,+22,100,101,224,52,3,145,207,224,52,1,128,27,128,52,0,52,126,199,224,+45,3,161,140,64,175,225,140,0,130,44,225,194,15,97,82,236,64,2,64,+36,97,183,1,52,49,69,106,96,121,224,12,7,96,141,64,43,167,47,3,+49,52,48,57,96,59,231,48,2,67,205,128,6,64,5,129,123,132,198,64,+164,96,62,71,126,128,46,128,36,119,153,114,151,64,28,163,113,96,173,64,+15,165,95,109,59,64,15,194,95,193,57,0,52,128,54,226,67,18,0,45,+74,214,64,35,130,65,224,35,12,1,78,97,179,89,65,120,224,36,15,5,+83,121,109,98,111,108,160,39,129,47,224,39,12,8,67,111,110,115,116,114,+97,105,110,192,83,193,47,227,19,21,233,69,0,64,50,129,82,224,39,12,+169,136,0,58,130,196,100,158,1,52,55,193,104,64,21,161,66,2,53,50,+50,224,64,2,6,98,117,105,108,116,105,110,64,96,76,64,64,3,64,43,+214,17,108,111,142,38,67,79,64,20,167,27,0,57,144,32,154,13,1,51,+57,71,21,1,51,57,69,44,1,51,57,133,80,224,21,12,64,70,181,64,+76,31,134,5,0,90,69,106,224,9,0,176,212,0,50,83,206,123,81,64,+60,199,157,199,118,171,189,128,85,64,84,129,196,77,66,240,146,8,0,83,+168,158,255,147,3,73,139,120,152,138,48,135,241,237,115,6,231,152,4,5,+103,101,116,73,100,101,97,186,182,118,224,142,3,1,85,32,123,207,64,136,+130,40,65,32,70,235,216,6,65,4,129,60,187,172,64,32,110,59,0,56,+74,87,2,64,95,55,88,86,64,39,248,71,1,230,131,5,0,51,122,230,+230,131,0,104,168,230,131,7,216,45,224,1,11,239,92,127,224,23,14,224,+20,11,224,17,8,224,14,5,224,11,2,244,156,11,0,58,129,50,225,76,+14,231,208,4,106,18,231,208,13,167,202,224,16,1,224,1,5,225,85,170,+225,43,8,64,255,208,155,1,75,51,247,24,15,64,37,0,54,192,37,0,+50,144,220,224,34,4,64,32,233,244,5,96,2,192,26,227,160,0,227,104,+3,64,135,235,81,2,99,68,129,125,235,217,10,172,45,139,181,1,51,54,+236,12,2,141,57,65,214,107,82,1,49,49,70,4,195,217,160,127,195,151,+226,12,0,97,28,242,227,0,1,51,56,70,204,242,227,8,0,57,72,184,+64,29,226,41,0,131,199,97,3,248,68,17,64,40,206,61,226,82,0,180,+212,224,1,11,226,70,170,224,17,8,224,14,5,224,11,2,192,8,227,164,+11,97,41,200,39,224,1,15,225,29,5,225,68,245,243,110,7,97,82,164,+227,0,50,91,147,71,174,198,140,66,230,236,233,2,226,173,15,96,42,199,+241,160,70,103,71,64,108,64,75,64,31,0,54,130,206,0,49,78,143,64,+15,131,234,99,65,1,49,49,81,42,96,162,171,123,0,49,143,70,96,17,+1,49,49,113,135,176,34,0,55,120,159,67,92,66,14,67,222,0,56,177,+248,0,48,64,98,160,140,246,220,1,148,195,152,1,248,77,11,148,92,224,+25,6,106,201,224,25,12,74,147,64,80,231,238,5,185,58,191,150,104,243,+231,76,1,149,109,161,139,102,14,239,6,3,65,147,241,3,1,160,119,241,+204,6,206,237,128,7,96,54,128,148,174,229,228,111,1,112,176,96,32,65,+122,129,37,228,204,2,64,12,131,65,128,74,2,95,49,49,65,42,161,132,+65,77,165,29,1,49,49,69,138,2,95,49,49,147,45,161,148,154,94,96,+0,224,164,3,159,181,64,0,226,125,0,133,79,0,53,72,168,128,229,0,+39,128,145,224,196,0,224,110,3,161,229,79,169,224,100,0,160,186,64,157,+224,120,5,160,99,148,251,128,39,96,111,0,89,232,186,0,176,12,224,119,+0,224,50,0,161,44,96,50,96,227,229,229,2,73,205,243,254,0,160,103,+1,95,50,69,217,112,46,254,29,13,0,95,133,213,130,227,76,107,235,129,+3,1,36,102,137,234,64,122,0,89,224,150,0,192,237,64,138,82,32,94,+41,244,97,8,1,36,120,245,124,2,255,52,1,195,16,224,150,23,242,125,+0,254,219,0,139,6,192,173,241,55,10,226,165,2,130,89,193,56,226,227,+0,243,21,0,64,1,67,84,226,208,3,128,10,65,130,251,29,2,225,241,+0,226,235,0,209,148,231,95,8,224,0,3,227,89,4,176,21,139,113,195,+198,226,120,0,0,79,64,63,161,206,98,239,162,141,0,64,65,111,94,31,+65,213,0,50,220,233,235,157,5,149,73,68,217,224,29,6,131,203,160,29,+0,67,236,72,5,225,225,5,237,59,2,1,73,79,182,140,192,0,97,35,+130,135,130,218,64,5,99,68,1,52,54,224,66,2,9,73,79,46,112,101,+114,102,111,114,109,224,65,1,98,76,225,151,0,131,26,162,235,225,74,3,+0,50,111,220,67,102,0,55,85,195,97,239,111,79,176,177,98,210,229,164,+1,224,227,4,64,22,225,86,0,131,144,96,233,82,249,160,23,193,219,100,+161,137,28,1,54,52,128,38,0,49,75,22,226,173,2,0,103,224,251,5,+228,17,1,64,67,237,77,8,194,158,101,91,237,88,4,181,151,0,85,225,+225,7,196,51,132,210,229,5,1,64,146,137,93,0,54,128,177,3,95,49,+51,53,67,21,247,189,2,240,180,1,229,179,7,229,178,7,0,90,201,97,+96,11,160,13,224,133,1,128,9,64,130,229,81,7,225,214,0,2,79,32,+35,68,211,160,111,209,43,128,0,224,98,3,133,232,229,35,8,227,86,2,+65,120,162,215,64,2,225,246,1,224,127,8,64,0,229,252,7,65,163,1,+51,55,227,242,2,164,15,101,50,65,0,0,95,119,245,90,9,66,230,96,+168,225,10,1,133,236,0,54,106,225,64,71,74,220,65,101,96,22,0,56,+89,236,192,0,245,78,2,99,53,130,185,64,0,71,130,242,4,1,64,67,+64,11,134,207,97,205,1,67,39,91,4,5,95,49,56,52,32,95,72,45,+128,58,231,165,8,89,34,1,95,54,131,145,1,50,56,165,168,1,51,54,+139,245,1,51,55,96,116,118,206,64,100,139,47,166,146,225,177,0,128,116,+193,97,230,246,4,160,21,226,82,1,100,54,0,39,98,154,96,139,230,218,+1,128,61,156,128,130,75,192,51,225,175,2,231,5,1,224,29,5,230,227,+2,0,53,76,136,228,8,11,2,115,101,113,250,206,0,230,238,0,224,82,+1,192,13,194,7,103,251,160,196,128,92,108,211,103,19,195,177,64,5,164,+190,97,98,96,246,131,19,230,68,4,97,187,64,41,1,55,52,166,47,198,+71,232,11,28,230,246,16,230,244,1,198,93,193,42,160,87,231,3,46,65,+250,65,65,226,125,7,98,4,140,10,0,90,161,212,136,214,97,37,129,231,+166,26,225,227,143,128,65,1,51,54,67,123,128,79,117,156,166,1,67,3,+245,208,2,224,42,0,225,146,5,228,238,0,225,127,104,65,128,67,155,131,+133,234,82,1,226,68,10,226,51,6,215,179,96,206,240,0,4,236,114,19,+69,245,180,79,100,54,104,212,229,92,3,65,227,136,143,132,247,65,217,65,+15,154,77,64,55,192,162,199,111,170,134,225,114,0,129,99,115,102,118,165,+192,121,0,54,172,95,1,80,32,139,252,0,85,100,130,64,40,250,156,2,+225,100,0,96,106,0,80,134,169,193,192,0,83,234,178,35,64,11,0,83,+201,78,194,36,160,73,220,163,1,49,50,69,155,183,142,196,253,134,185,96,+124,128,34,97,132,160,34,230,161,1,167,250,96,195,187,96,1,32,83,128,+196,229,147,8,71,169,96,62,224,25,12,108,93,224,25,12,125,185,108,106,+231,244,4,181,77,97,156,64,134,96,195,245,89,2,131,82,104,151,245,111,+4,133,3,65,114,236,74,1,64,63,71,255,227,15,4,70,89,235,129,30,+3,79,32,35,49,91,220,167,17,226,249,7,235,120,25,96,0,197,167,232,+106,1,96,249,74,102,160,24,214,161,93,75,193,201,224,7,7,64,0,203,+135,242,238,4,206,96,169,38,225,103,9,225,253,0,224,131,4,128,130,226,+59,3,128,61,79,144,96,208,1,48,48,94,15,1,48,48,74,170,136,11,+96,0,64,51,64,35,116,239,155,23,224,159,0,192,237,224,131,8,96,62,+224,131,8,96,21,128,79,65,177,230,56,16,2,95,53,54,64,138,238,16,+2,224,42,14,224,145,10,139,204,74,8,225,91,2,160,168,131,69,224,171,+7,195,144,224,197,9,208,31,96,25,226,180,4,98,19,161,135,64,107,0,+55,234,14,0,106,122,1,49,50,103,70,193,244,138,233,101,129,198,150,163,+210,224,109,8,224,32,19,139,213,132,207,225,87,4,192,24,176,119,229,100,+2,161,198,224,49,8,96,107,161,137,196,230,102,91,1,95,50,203,53,227,+170,10,65,41,88,247,1,51,54,131,130,226,100,15,64,33,195,16,236,188,+0,160,24,75,159,192,59,226,186,37,224,140,0,196,150,224,37,10,96,255,+145,241,193,113,236,61,0,165,89,237,231,4,229,79,0,235,121,0,224,52,+22,180,126,224,52,6,224,10,0,224,52,13,233,77,0,224,41,2,192,229,+139,179,107,148,238,104,17,9,68,97,116,97,46,76,105,115,116,95,91,163,+2,46,43,43,237,112,0,128,83,230,87,3,227,210,1,224,0,6,196,117,+163,86,228,109,9,65,159,233,214,2,5,49,50,54,52,32,67,94,24,98,+218,64,15,143,188,162,220,70,43,139,227,138,140,231,55,1,110,236,227,181,+9,96,197,4,82,97,116,105,111,128,198,2,95,109,107,96,13,1,110,97,+92,251,64,0,128,201,127,12,0,49,142,196,224,17,4,65,124,64,117,140,+77,70,161,159,179,66,183,67,130,0,53,69,202,2,95,54,49,76,54,102,+70,96,20,128,10,2,51,53,57,69,222,0,48,76,246,160,5,204,250,129,+29,140,107,96,66,165,211,7,50,49,52,55,52,56,51,54,163,69,224,219,+25,11,73,110,116,101,103,101,114,46,95,105,110,116,65,173,1,84,111,160,+17,224,222,2,101,72,237,100,0,195,127,233,217,0,64,237,226,152,0,224,+111,30,161,77,1,105,110,224,112,12,227,223,6,230,183,0,64,0,65,76,+173,53,129,76,131,138,0,95,93,153,225,9,3,96,145,195,86,103,57,97,+101,64,70,227,119,0,0,85,225,122,3,64,0,0,89,169,120,148,92,108,+133,0,51,127,177,225,149,1,224,92,1,229,158,0,234,151,2,224,170,1,+2,85,32,65,96,36,99,156,74,27,161,177,5,50,51,50,32,95,53,103,+161,65,225,208,246,129,176,64,220,140,13,3,83,32,85,32,224,107,2,128,+150,99,128,64,2,163,141,160,250,237,46,1,224,226,7,224,255,0,224,229,+2,99,204,104,132,137,237,83,113,128,26,65,69,224,12,0,224,156,0,3,+95,49,57,55,64,138,101,99,224,254,3,0,58,98,160,64,172,128,21,2,+51,50,55,75,10,64,22,139,17,143,51,170,211,224,194,4,64,184,132,186,+64,8,3,95,49,51,48,64,175,129,169,1,50,50,96,201,138,26,96,54,+0,79,227,251,0,202,241,110,52,232,78,0,206,96,177,107,170,66,64,85,+0,55,233,23,0,0,51,164,36,64,157,139,130,134,178,98,66,234,188,1,+165,74,96,13,229,24,13,196,164,128,47,165,27,224,13,0,192,63,224,64,+3,241,12,0,224,67,0,106,183,224,69,4,192,71,193,20,129,44,224,88,+4,97,42,231,109,0,192,178,225,93,3,193,7,210,198,147,1,1,48,49,+231,232,14,128,32,171,94,0,49,90,144,131,115,65,127,98,85,0,51,104,+142,1,48,48,72,174,233,93,1,225,144,9,226,151,1,178,250,96,89,0,+80,97,156,128,42,0,48,232,108,0,236,51,1,0,95,110,48,200,246,235,+218,4,64,0,142,225,160,248,135,66,182,0,181,180,99,124,114,107,236,99,+0,224,51,1,226,96,0,131,1,198,99,0,49,132,177,192,130,232,184,5,+68,79,225,113,0,193,200,225,87,14,65,140,129,144,224,16,1,218,1,96,+142,132,152,160,93,128,156,192,200,0,95,78,49,199,52,1,49,49,114,180,+224,164,11,224,17,3,231,26,0,142,6,96,29,226,159,0,132,121,0,51,+77,212,0,80,67,139,0,48,229,116,2,7,92,34,92,34,44,48,58,48,+101,93,161,97,96,219,224,41,21,132,187,96,0,69,255,0,49,234,200,3,+0,109,229,169,0,96,118,0,52,64,204,250,250,2,67,155,0,83,91,141,+225,58,7,180,7,160,239,160,62,155,39,96,11,1,52,48,66,151,212,95,+66,23,133,36,224,126,6,0,112,245,185,2,123,89,64,41,97,49,67,219,+0,54,174,228,132,26,251,63,14,131,143,227,210,4,245,86,4,66,220,202,+218,224,39,2,133,22,182,129,226,240,1,129,135,174,173,245,204,10,161,117,+64,157,239,107,0,96,152,128,105,111,163,65,0,144,229,234,11,1,177,188,+248,60,3,194,73,227,114,2,238,81,7,230,150,0,164,66,99,63,64,58,+97,8,165,107,250,65,0,154,145,243,31,6,96,14,140,148,101,84,204,177,+227,197,1,229,81,3,149,6,169,169,132,51,162,218,225,184,6,210,72,129,+38,143,247,0,53,173,82,227,251,1,65,38,143,206,100,131,0,49,105,248,+65,115,64,24,137,187,76,4,66,38,141,45,100,61,64,7,64,116,64,36,+181,184,236,194,3,194,4,193,57,133,214,97,22,100,41,194,170,96,45,202,+95,131,106,128,5,225,80,1,161,117,229,126,4,152,96,129,14,64,21,138,+1,97,141,98,250,133,136,1,52,57,96,242,144,199,193,6,120,253,133,124,+136,31,160,200,161,9,136,233,73,116,0,52,143,120,225,83,6,0,118,210,+132,64,72,98,248,165,36,164,204,164,225,224,179,0,253,151,4,228,207,0,+133,46,160,186,64,15,231,125,0,131,43,160,2,229,221,1,133,114,128,21,+64,43,67,44,224,35,1,128,30,65,210,230,55,0,211,253,0,80,73,42,+73,170,213,214,177,223,229,252,0,225,169,0,229,57,2,229,141,1,128,13,+237,71,8,210,229,192,192,231,147,3,161,181,64,166,0,48,225,58,3,0,+68,74,141,13,66,111,111,108,46,111,116,104,101,114,119,105,115,101,228,88,+0,212,220,224,249,0,245,107,4,65,132,129,28,245,87,0,225,53,1,129,+220,128,24,0,58,129,243,191,212,99,69,1,80,32,91,189,0,90,101,174,+202,133,64,11,0,50,149,228,244,250,15,250,214,1,255,61,0,192,0,133,+131,74,164,72,215,96,115,137,125,68,39,77,30,196,215,122,39,96,4,161,+252,196,60,183,128,64,47,216,209,229,183,1,167,93,226,65,1,194,243,107,+34,102,201,215,168,0,51,89,114,192,208,96,19,96,246,128,221,132,135,66,+29,161,233,224,144,5,224,37,0,163,156,226,197,0,97,247,199,234,192,151,+225,4,0,100,249,96,8,232,160,2,65,15,170,233,64,107,203,136,64,22,+128,53,65,35,234,3,3,163,210,232,72,2,96,144,0,51,102,168,224,28,+0,190,41,128,1,212,252,224,16,0,233,248,4,192,1,169,211,224,19,2,+65,198,224,16,16,197,223,232,80,1,193,235,192,21,101,142,224,163,3,143,+51,229,240,5,194,180,224,176,4,169,52,226,211,3,226,220,4,224,42,2,+228,33,0,68,111,70,89,205,221,224,60,4,248,69,2,194,18,128,33,224,+191,1,161,58,128,24,196,134,235,107,2,227,229,1,229,129,1,220,15,220,+21,96,27,64,42,67,194,76,170,249,236,4,224,100,1,192,198,224,71,8,+167,4,96,70,100,51,250,51,9,1,95,49,245,159,0,162,197,225,255,0,+227,148,13,241,70,2,195,159,161,201,225,186,6,129,173,224,0,0,129,89,+224,198,1,224,43,0,237,96,1,224,159,4,245,178,8,167,113,66,248,99,+46,164,250,96,68,224,53,0,103,126,245,221,4,167,163,224,222,0,226,220,+0,64,183,249,25,8,224,116,7,229,93,1,73,174,0,51,129,151,129,10,+163,189,196,156,224,20,2,162,215,64,0,67,110,0,54,134,199,73,216,0,+80,103,202,79,225,230,175,3,70,24,131,194,225,205,1,128,9,128,90,227,+11,1,64,60,215,239,94,12,0,57,97,174,2,52,52,49,193,182,111,176,+1,51,52,97,31,64,44,0,51,195,234,64,28,103,131,100,242,64,35,0,+49,128,139,136,49,250,125,13,225,207,4,166,248,64,0,64,62,0,48,128,+62,135,164,132,34,128,203,100,28,194,225,195,138,195,26,98,157,164,106,229,+104,0,226,48,5,229,76,0,160,171,64,101,199,224,100,243,246,50,0,1,+50,52,173,194,1,64,67,69,93,228,149,0,161,226,101,221,96,181,229,33,+0,0,58,129,5,111,182,67,221,1,57,49,105,220,0,50,176,145,88,219,+64,34,134,68,136,185,0,51,114,204,0,51,142,15,169,139,65,102,225,131,+3,224,169,1,64,38,64,93,3,49,51,51,52,95,73,64,22,168,196,146,+65,223,166,72,98,64,31,201,238,132,223,128,97,129,118,70,47,0,80,160,+213,240,77,0,228,123,6,64,72,131,23,192,33,227,166,1,224,27,0,230,+211,3,192,20,129,143,134,255,0,85,162,230,160,149,224,28,8,198,226,169,+21,224,29,6,96,98,224,29,16,96,20,224,29,1,100,60,130,38,131,185,+228,14,1,145,127,131,196,227,132,6,238,0,0,65,48,130,209,99,59,132,+82,103,143,232,44,5,229,197,2,236,80,3,192,7,236,22,2,107,5,225,+50,0,123,66,230,56,4,230,162,0,225,68,2,64,56,234,51,4,224,56,+1,224,19,3,224,62,2,161,22,111,176,230,32,3,160,108,192,28,64,16,+115,203,198,116,130,231,232,244,0,128,41,227,142,0,225,252,1,128,0,238,+211,8,27,115,114,99,47,77,105,99,114,111,72,115,47,73,110,116,77,97,+112,46,104,115,92,34,44,55,51,58,49,238,72,2,97,86,132,6,131,21,+64,129,130,212,64,135,0,95,67,141,64,34,131,234,236,128,5,64,20,75,+216,64,145,64,35,195,168,80,226,97,243,132,0,129,13,231,148,0,193,159,+81,38,227,159,4,160,40,234,114,0,235,15,0,160,239,0,49,213,218,225,+225,2,193,80,235,62,0,0,80,244,115,2,226,250,4,253,218,0,64,73,+0,56,64,37,137,29,192,7,167,108,192,60,97,112,192,92,64,131,96,130,+134,170,228,165,1,160,12,0,50,67,215,0,58,132,14,132,0,1,49,57,+96,46,132,49,64,30,128,22,1,50,50,68,23,64,22,193,40,96,42,160,+224,68,137,70,175,64,34,0,54,224,50,0,0,52,114,48,64,19,198,57,+165,87,194,103,136,223,224,237,3,164,15,225,46,1,243,55,2,99,124,96,+88,130,103,224,47,5,131,193,193,118,245,96,2,160,25,96,237,237,32,2,+133,138,199,40,229,246,0,226,226,3,233,25,10,160,24,236,240,1,232,199,+2,227,88,3,128,134,224,133,1,231,160,15,224,75,59,232,54,2,224,75,+23,167,158,224,75,17,227,152,2,224,248,1,229,156,0,181,249,117,237,137,+160,160,36,236,122,1,224,32,7,224,124,0,228,53,4,96,41,224,40,6,+224,41,8,224,11,0,160,48,224,47,7,98,204,65,209,64,7,133,108,66,+107,168,104,161,174,111,40,225,139,27,224,40,26,129,104,244,221,0,225,69,+23,128,175,131,59,96,12,224,6,1,194,200,224,30,7,224,31,1,187,171,+224,34,2,224,35,14,192,37,224,30,8,224,38,1,136,91,66,235,225,49,+6,65,46,134,152,0,75,131,222,201,85,64,1,171,28,224,10,6,225,144,+1,0,32,200,250,64,56,133,100,234,93,4,64,28,64,26,133,91,0,73,+64,95,68,48,3,10,65,32,80,96,11,232,173,0,177,161,128,157,137,229,+64,183,0,75,74,187,65,114,64,44,132,119,224,44,3,133,88,147,10,1,+52,51,250,179,10,70,55,0,33,134,47,0,73,96,234,68,248,162,25,133,+197,171,145,194,193,192,132,249,154,1,128,31,204,107,228,32,9,228,27,11,+231,40,7,129,54,228,16,33,224,63,0,163,116,227,254,32,128,56,166,88,+227,229,28,225,66,1,224,11,5,224,12,17,227,113,7,65,85,133,219,91,+38,0,50,74,46,102,104,72,251,64,27,244,21,1,237,47,1,192,27,130,+120,0,90,73,90,64,14,194,122,0,90,104,252,64,17,188,50,132,47,243,+197,3,234,52,3,64,5,128,25,245,45,0,151,122,169,179,89,28,0,52,+231,51,1,251,94,1,168,50,136,39,134,0,192,99,108,243,226,240,1,247,+222,9,128,21,0,51,126,59,149,57,64,118,149,92,237,149,2,129,212,109,+199,231,157,0,64,54,0,57,128,223,188,53,103,249,235,102,4,96,11,136,+135,0,58,128,46,225,7,3,198,188,127,9,166,184,246,78,5,96,223,160,+143,3,67,32,95,54,151,24,128,135,237,49,3,128,82,253,8,0,0,56,+82,133,118,16,0,53,94,195,0,49,67,185,96,180,65,0,2,32,95,50,+125,0,128,0,3,95,50,49,50,238,122,14,162,142,64,184,210,212,105,73,+193,57,138,115,230,165,1,192,176,226,233,0,151,244,200,165,224,40,24,134,+18,227,157,3,224,40,15,229,12,0,168,42,227,42,2,160,33,248,78,1,+237,148,0,194,104,252,8,7,184,174,101,89,0,48,160,89,224,20,3,225,+45,0,96,108,72,196,224,111,10,185,129,224,52,2,235,51,3,224,120,6,+161,17,224,158,3,225,29,25,172,131,224,39,24,170,199,246,105,2,204,94,+224,38,4,73,240,64,22,204,86,224,156,0,192,24,249,10,1,251,197,1,+224,40,4,201,186,64,243,105,149,203,186,1,49,48,80,95,128,6,85,149,+131,76,1,49,50,78,248,224,0,0,64,88,224,82,8,235,131,2,64,116,+129,221,195,24,1,53,54,93,63,96,91,226,240,1,1,51,48,249,241,0,+221,90,131,198,131,35,224,104,15,161,76,224,229,3,242,86,0,254,121,13,+162,3,224,41,4,226,125,0,104,72,237,56,1,146,3,197,154,128,196,128,+174,1,48,48,67,214,192,11,132,220,142,170,236,209,1,91,136,64,6,235,+220,0,160,0,128,72,230,79,9,163,101,161,141,226,108,9,225,166,1,238,+66,1,193,71,193,37,226,138,4,65,171,199,174,95,196,99,249,0,80,143,+5,133,208,64,155,168,93,160,23,72,35,64,24,204,30,97,68,69,177,65,+210,128,179,161,198,1,49,50,108,169,131,225,248,176,5,64,141,205,137,65,+1,144,161,65,38,231,236,2,80,243,199,13,243,128,0,224,25,9,138,94,+67,139,0,56,176,209,1,95,50,81,86,69,238,244,130,5,0,35,149,198,+232,124,7,10,116,117,112,108,101,67,111,110,115,116,114,174,170,85,3,64,+75,224,35,1,1,40,41,218,1,64,171,225,17,1,132,89,161,18,187,17,+225,123,0,161,163,120,201,227,108,1,65,212,164,245,242,177,0,224,52,0,+227,231,1,137,167,224,40,0,160,226,2,49,50,57,82,110,188,206,147,142,+194,249,130,108,1,50,53,115,152,74,130,0,50,157,175,128,58,181,219,239,+226,0,239,8,0,250,236,8,0,120,224,234,0,243,113,0,166,185,230,162,+0,225,32,9,16,67,111,110,116,114,111,108,46,69,120,99,101,112,116,105,+111,110,73,206,8,101,114,110,97,108,46,112,97,116,64,9,8,77,97,116,+99,104,70,97,105,108,129,100,135,14,0,53,128,84,1,50,57,114,218,70,+178,1,49,50,155,209,96,128,207,227,1,80,32,99,150,98,147,96,43,193,+103,161,53,64,65,73,51,103,133,2,49,50,57,153,162,97,43,240,71,1,+207,175,100,195,0,75,200,29,196,4,188,226,212,227,90,63,71,255,227,42,+0,193,68,167,182,0,50,138,95,224,46,7,255,208,5,1,57,51,103,185,+143,52,224,106,1,225,214,2,230,248,5,242,40,1,192,5,128,74,230,10,+1,224,55,0,230,25,1,96,0,128,66,224,1,1,231,69,5,202,110,64,+0,226,158,9,224,140,5,224,77,9,224,75,5,199,55,228,131,4,248,78,+5,216,18,253,189,3,231,176,6,96,23,69,92,124,236,224,116,4,192,83,+231,189,7,224,34,2,153,240,161,3,129,21,224,84,0,96,66,96,111,128,+17,231,70,12,243,124,6,231,26,8,235,217,2,224,115,5,224,165,3,138,+123,1,95,52,67,25,2,95,49,48,152,41,224,34,0,219,210,225,112,3,+249,42,2,221,217,131,144,234,137,0,128,0,99,203,241,68,1,237,182,1,+233,49,6,225,188,3,228,50,0,193,114,225,208,0,192,77,64,80,115,6,+249,224,15,242,182,4,1,50,57,128,214,223,71,192,10,234,116,11,0,54,+234,116,16,96,142,169,43,196,214,171,86,192,102,117,189,227,55,1,128,41,+226,162,4,64,27,129,84,231,8,10,243,161,10,233,173,16,224,129,14,0,+54,224,129,5,225,64,1,231,93,9,226,183,0,97,77,226,129,0,224,83,+5,231,117,0,160,85,243,244,16,224,81,4,163,9,135,146,1,95,56,187,+43,135,53,235,176,12,165,193,248,113,2,100,248,230,156,2,96,253,102,156,+96,228,224,25,2,96,64,160,25,199,201,231,226,6,98,0,236,11,1,193,+59,245,69,5,226,169,0,225,10,19,225,95,1,225,9,17,64,111,199,89,+166,109,128,6,134,37,64,5,0,54,230,164,2,2,115,101,113,167,171,64,+56,250,88,1,192,168,226,15,1,0,85,231,13,8,227,195,0,151,50,224,+13,9,132,44,228,70,0,128,197,224,66,2,134,2,141,236,224,65,3,160,+119,2,39,32,85,79,55,247,32,17,6,68,101,115,117,103,97,114,151,33,+5,52,49,49,58,49,48,247,35,2,227,212,3,129,85,227,204,3,64,0,+240,212,4,224,2,6,224,71,1,230,52,3,229,39,1,192,83,230,58,1,+224,191,1,224,197,6,192,10,111,127,224,85,11,229,68,8,224,96,4,224,+102,8,224,103,6,224,55,5,230,170,11,224,50,14,96,98,230,32,4,224,+52,26,224,195,3,224,31,11,253,72,2,225,95,12,249,116,13,224,23,1,+205,96,233,198,3,194,60,224,8,10,96,242,224,11,2,169,183,195,25,128,+68,228,148,8,225,154,1,131,114,230,85,4,192,66,128,11,226,174,2,101,+217,163,81,0,51,169,92,192,83,229,109,5,231,189,4,138,167,198,74,146,+83,236,170,2,192,165,225,6,1,128,204,140,228,228,25,2,76,236,120,221,+64,187,199,105,187,155,157,253,228,69,3,225,215,11,64,41,141,188,0,90,+209,238,216,87,237,59,4,204,205,194,177,64,77,196,126,229,114,1,192,209,+1,95,54,152,106,96,15,64,164,224,103,2,128,137,224,136,5,180,226,224,+38,5,66,54,1,95,57,251,27,4,226,96,12,226,179,8,248,76,2,224,+48,12,226,175,2,224,26,7,226,170,1,226,159,7,192,33,226,180,9,226,+155,26,226,134,27,226,48,13,130,42,128,35,224,122,3,128,86,226,16,1,+196,51,96,21,129,112,64,43,130,30,128,24,226,31,2,160,62,162,34,192,+122,226,37,9,193,73,128,46,175,176,128,36,255,253,0,128,110,66,48,1,+50,53,78,147,192,0,226,49,0,96,54,226,37,1,226,30,0,3,95,54,+32,85,226,11,5,109,119,130,10,64,47,182,239,224,0,2,225,148,9,228,+79,3,224,168,0,224,11,15,228,24,39,128,86,228,178,6,64,56,0,48,+230,243,4,196,214,227,177,10,226,60,9,85,250,0,50,224,62,4,226,63,+8,160,101,224,104,5,132,132,109,202,0,50,222,88,230,208,7,193,205,192,+1,224,170,10,226,192,5,97,125,161,59,143,220,105,6,109,233,235,53,0,+194,102,169,234,192,232,103,252,129,226,128,66,66,17,170,185,96,164,225,187,+1,128,141,232,42,5,64,17,64,49,64,41,160,104,162,132,80,127,130,82,+83,15,0,52,189,169,228,202,2,100,249,1,49,50,86,28,128,8,93,162,+80,179,2,49,50,56,234,148,1,99,204,182,77,128,167,96,17,192,93,224,+83,0,225,184,1,163,77,66,175,226,174,0,224,186,13,153,23,0,57,161,+134,226,209,5,0,83,161,187,231,117,3,226,229,4,164,241,97,57,0,85,+90,105,228,253,0,224,39,5,131,13,192,38,224,37,2,160,152,192,227,129,+122,160,227,0,90,111,21,1,83,32,82,5,161,219,229,246,4,244,111,2,+235,41,3,233,223,0,192,59,192,249,228,52,3,226,90,3,196,58,192,19,+193,155,224,111,13,224,59,5,165,127,225,122,2,238,224,9,106,193,224,55,+0,96,93,194,99,230,155,3,228,128,19,160,0,74,196,241,108,0,169,54,+97,101,227,112,0,160,203,224,216,5,234,30,9,233,190,4,195,53,129,73,+163,94,192,224,234,252,13,224,61,0,206,159,228,88,3,174,95,160,232,101,+182,128,97,160,101,187,225,1,49,56,162,3,0,75,64,7,96,4,96,13,+160,128,67,1,121,77,98,155,160,242,64,76,194,146,86,1,0,55,213,96,+2,49,50,56,123,12,0,50,128,84,64,8,140,244,2,50,56,56,96,68,+64,75,244,136,1,4,64,85,32,95,55,101,47,224,215,2,225,209,2,224,+21,24,224,236,0,239,96,5,166,73,224,60,6,160,49,195,241,64,250,102,+234,64,27,163,168,192,99,128,48,82,46,164,43,224,90,0,180,2,64,28,+227,229,0,98,66,96,29,117,55,96,90,1,55,52,97,94,116,219,64,14,+96,70,131,31,161,167,194,42,129,71,229,212,5,195,10,224,118,0,226,56,+6,224,25,1,229,226,4,241,87,7,134,169,224,17,1,226,69,5,232,155,+0,230,28,0,224,132,1,232,103,1,143,207,98,160,132,234,2,32,95,55,+65,228,160,88,128,135,208,139,192,249,192,0,130,83,130,74,247,249,0,128,+23,161,248,1,75,51,192,9,96,0,66,34,254,182,1,128,209,167,74,162,+193,192,5,235,38,0,224,209,0,86,103,187,159,96,17,128,208,251,179,2,+160,79,161,75,228,206,0,134,130,160,88,66,170,142,205,102,172,192,7,136,+183,162,223,134,35,1,56,53,129,167,97,70,133,54,224,14,5,2,95,54,+50,163,23,160,0,252,23,1,233,66,1,228,43,2,225,236,0,196,140,225,+2,1,98,99,64,115,235,64,3,96,0,113,222,246,14,2,0,110,142,155,+224,22,7,1,116,116,182,38,99,144,126,49,0,80,130,0,64,130,153,154,+131,202,183,148,0,54,132,29,0,56,87,146,129,238,189,59,225,189,13,64,+88,0,54,196,31,64,60,239,222,1,79,95,208,128,194,82,132,155,194,130,+224,7,1,193,21,160,59,81,74,128,57,161,207,112,209,0,79,198,104,161,+50,227,2,1,193,56,230,123,2,99,175,226,13,1,244,86,2,229,84,15,+229,86,0,68,231,230,164,5,224,48,11,225,164,3,229,98,0,130,163,143,+78,128,44,233,206,0,131,146,228,65,6,227,123,4,196,204,160,79,130,174,+224,28,6,160,104,96,97,131,88,64,47,237,97,2,192,94,226,75,0,128,+23,240,233,8,12,108,105,98,47,68,97,116,97,47,76,105,115,116,144,227,+4,53,51,54,58,53,240,226,2,224,0,5,225,156,21,101,2,225,162,0,+228,239,3,208,94,128,215,240,114,0,224,215,26,233,78,2,128,204,64,44,+154,161,226,10,0,224,39,12,64,15,224,142,3,160,0,66,171,243,69,1,+66,32,227,121,0,224,2,1,225,70,2,128,1,105,132,200,161,224,23,2,+192,189,224,26,0,235,186,5,229,88,2,224,52,0,228,128,1,224,74,7,+226,62,4,197,189,230,50,1,160,52,224,41,1,167,202,96,82,224,23,0,+224,17,6,96,8,128,43,251,135,1,133,171,251,112,0,245,48,0,224,93,+2,96,36,233,131,1,224,89,1,224,8,0,92,51,193,103,69,40,94,99,+0,49,243,254,10,1,61,61,162,77,96,38,158,132,1,50,56,236,64,0,+131,99,233,155,2,128,1,166,156,224,16,16,64,117,126,127,84,137,173,6,+83,201,64,145,253,233,1,253,73,1,224,1,1,132,146,245,184,6,225,212,+8,160,110,224,22,7,239,234,0,224,45,28,224,22,0,193,193,228,172,1,+224,14,0,224,51,3,179,129,193,119,172,154,189,159,225,107,17,2,79,32,+35,70,104,162,228,225,102,13,64,94,226,65,1,226,125,3,226,87,4,99,+87,160,50,192,0,160,142,199,112,231,228,0,67,73,214,118,1,80,32,103,+35,155,244,64,117,1,10,65,92,6,64,12,149,240,0,80,134,42,91,121,+128,3,70,6,2,90,32,90,166,125,232,19,21,139,110,2,95,52,56,64,+172,159,217,98,216,0,90,129,99,128,193,64,20,66,156,160,20,232,172,6,+237,22,2,64,96,236,251,1,128,65,194,226,1,85,32,224,29,2,224,71,+10,224,59,4,96,31,160,129,103,219,224,28,0,224,109,2,224,36,1,233,+62,7,69,143,0,48,65,201,142,101,64,232,139,100,226,45,5,66,196,0,+58,110,148,129,106,229,128,8,229,83,0,134,134,64,102,160,23,229,19,8,+230,34,1,64,81,233,106,0,119,36,96,39,66,223,161,99,229,163,1,228,+78,0,128,230,224,70,1,128,135,224,86,2,192,148,160,154,64,100,216,229,+96,182,128,90,197,48,237,63,3,197,43,250,12,4,128,23,161,15,252,147,+3,0,85,174,83,232,4,2,238,146,19,224,37,10,129,132,96,36,195,165,+97,58,0,54,75,185,162,79,137,117,0,54,129,56,0,50,133,42,96,211,+0,54,130,143,2,56,57,52,239,159,9,0,49,67,27,239,179,11,224,19,+7,224,39,11,139,70,224,239,11,2,95,56,57,66,93,1,50,54,131,25,+67,65,192,18,160,152,224,57,9,144,124,4,75,32,95,53,50,132,7,64,+12,0,83,163,38,224,61,5,131,137,160,98,159,217,0,57,160,85,160,90,+224,168,5,66,218,224,110,7,64,99,224,168,2,96,69,192,155,96,134,224,+175,7,224,196,12,225,19,7,0,49,64,240,224,19,7,64,155,224,126,7,+132,127,192,81,0,56,91,68,128,100,224,98,7,224,56,6,0,49,74,215,+224,183,5,224,60,2,224,161,11,225,12,6,0,49,64,24,224,84,7,64,+64,224,122,8,224,78,12,224,37,2,229,173,0,224,239,6,225,2,11,64,+238,224,19,7,225,149,10,0,49,129,149,225,223,3,225,127,10,224,240,0,+224,62,8,146,45,224,60,9,0,85,114,87,226,72,3,161,240,133,27,224,+86,7,225,51,7,65,115,224,106,6,65,211,225,11,2,141,219,225,189,9,+226,97,15,225,13,8,64,248,224,18,6,225,168,10,129,167,226,252,7,0,+55,197,163,227,103,27,64,169,179,223,243,230,0,226,34,7,226,175,10,225,+88,16,226,35,18,225,80,2,100,136,138,200,228,136,13,64,255,224,134,6,+64,169,224,134,6,64,97,226,30,24,224,20,23,224,237,31,224,56,6,227,+14,22,225,223,7,64,240,136,111,160,240,225,181,8,118,155,226,135,4,160,+54,0,51,224,54,1,136,119,224,118,5,224,13,13,226,10,4,64,69,136,+201,160,69,219,34,243,14,4,225,82,0,224,25,13,101,82,230,209,8,100,+63,227,139,12,230,180,7,96,63,229,74,3,228,172,4,224,49,11,96,139,+225,41,7,224,49,3,224,141,8,130,205,225,228,11,224,91,7,100,173,224,+183,11,72,216,1,52,51,236,2,2,25,72,97,115,76,111,99,32,69,68,+101,102,58,32,117,110,105,109,112,108,101,109,101,110,116,101,100,140,26,65,+92,137,227,80,141,1,57,52,65,56,214,141,96,92,160,35,137,30,225,253,+6,192,119,0,58,134,179,224,68,4,0,80,198,251,224,74,7,0,54,136,+251,226,17,0,0,75,224,78,8,224,15,9,224,232,8,64,71,136,222,3,+95,49,49,57,84,69,120,56,200,48,73,83,86,67,224,19,0,64,47,0,+54,128,47,3,54,32,95,57,85,13,4,95,49,48,53,48,105,223,64,45,+174,148,97,61,136,252,120,253,225,72,1,11,105,109,112,111,115,115,105,98,+108,101,58,32,129,58,130,95,153,36,169,233,0,49,135,191,96,234,97,10,+0,51,157,84,186,135,224,86,0,2,79,32,35,74,162,209,77,96,56,96,+40,239,45,0,64,150,163,113,224,224,4,134,83,204,166,249,162,0,160,120,+3,32,95,51,48,178,247,224,107,3,76,60,208,18,224,23,0,160,53,1,+50,57,98,101,224,44,1,87,120,96,44,224,31,4,64,0,225,81,0,64,+132,64,160,131,219,0,80,76,107,89,248,114,221,227,156,17,102,86,234,84,+15,89,20,178,171,226,238,9,96,57,185,95,192,36,224,37,9,100,45,161,+27,250,187,6,240,137,5,238,130,4,64,187,131,0,66,140,172,50,5,66,+32,95,55,50,56,130,13,226,2,1,7,99,111,110,65,114,105,116,121,175,+84,3,67,32,95,54,90,175,236,232,3,128,132,129,199,64,89,131,54,0,+66,251,187,2,64,6,106,127,130,61,0,56,252,64,2,130,67,1,50,53,+65,112,2,95,52,52,64,157,162,86,224,35,1,2,95,50,51,99,2,0,+58,156,65,96,182,178,168,140,43,121,60,236,236,0,247,1,0,65,204,64,+16,140,209,65,227,108,127,224,153,3,225,181,1,117,207,226,213,0,224,186,+4,96,76,236,246,0,252,146,3,155,227,220,107,64,32,224,186,6,248,245,+5,112,32,64,138,163,198,225,32,7,225,28,6,225,25,0,1,95,51,111,+10,224,91,5,216,46,64,79,0,54,193,114,1,49,50,81,112,67,134,2,+32,64,80,140,181,64,31,167,184,96,29,0,83,76,104,192,136,195,110,96,+27,0,50,205,188,96,68,212,20,96,157,0,52,73,65,96,26,96,9,225,+183,1,224,40,12,0,90,224,40,2,2,95,51,54,101,216,97,34,64,114,+167,28,128,230,0,48,96,172,128,71,189,78,224,224,1,0,49,125,19,183,+26,100,10,128,11,0,50,129,55,192,80,131,133,0,73,67,145,64,70,64,+92,0,51,96,143,225,169,3,69,2,225,152,4,0,95,128,80,175,10,64,+7,129,65,0,54,66,225,64,186,160,194,3,58,49,50,52,130,116,96,97,+64,18,96,97,0,54,158,100,111,80,80,254,96,47,0,54,128,47,229,165,+0,241,51,3,66,92,99,142,64,33,129,176,224,33,7,0,57,224,33,2,+197,159,0,89,98,22,214,34,64,214,66,241,97,53,0,48,145,118,64,6,+2,95,49,50,253,132,1,163,28,160,5,224,21,10,225,193,0,129,183,96,+80,132,167,192,105,96,39,131,27,224,42,4,180,120,192,16,208,55,232,50,+5,224,33,3,242,195,0,224,16,16,224,67,8,248,196,0,224,50,17,252,+111,1,64,210,197,21,224,168,2,252,145,0,224,17,0,97,34,129,250,225,+12,1,187,69,192,38,69,13,224,13,1,64,48,102,7,180,157,64,42,103,+227,2,49,48,52,98,77,196,101,128,38,165,106,252,212,0,160,126,228,55,+0,160,168,96,29,224,183,2,224,17,11,134,43,224,137,1,128,155,96,16,+224,39,6,225,224,1,225,11,19,128,80,64,168,233,51,0,224,71,9,225,+11,0,224,118,5,151,214,163,52,224,208,0,244,46,1,0,79,99,246,3,+51,56,32,79,96,96,194,194,224,100,5,130,76,160,94,160,148,182,169,193,+105,109,162,224,133,0,226,222,15,204,239,160,229,88,224,127,79,99,129,224,+64,3,194,201,160,90,128,21,192,76,224,82,2,225,204,6,128,96,224,82,+2,193,213,224,22,6,128,54,96,204,133,135,67,253,0,49,251,4,3,0,+104,246,134,2,96,43,224,41,16,1,118,115,248,255,1,226,121,0,113,195,+224,14,0,1,48,48,167,44,151,87,231,38,2,1,48,48,64,143,65,12,+248,124,10,226,232,2,224,77,1,99,9,105,241,130,217,102,36,224,26,2,+162,35,130,111,68,137,213,116,64,1,1,80,32,143,226,161,197,0,32,83,+131,128,37,133,214,192,35,64,34,0,80,133,12,133,158,134,59,101,144,244,+149,1,158,226,128,51,96,182,130,93,192,218,64,136,96,10,0,56,102,75,+98,138,233,197,9,64,0,5,95,53,54,54,32,95,118,31,128,123,64,120,+235,226,0,0,53,73,180,106,231,97,126,0,49,220,68,0,52,171,224,1,+49,50,64,147,2,49,50,50,66,196,67,223,2,50,51,48,164,135,192,15,+215,225,96,165,160,32,244,117,1,66,245,200,90,2,49,50,51,188,213,2,+49,50,51,147,221,0,79,70,219,160,45,64,64,224,56,2,134,77,106,77,+64,54,225,65,1,97,132,129,65,65,144,181,56,224,82,22,64,44,134,55,+128,81,225,185,1,0,80,87,30,224,81,1,167,131,224,248,43,0,49,224,+248,4,206,163,0,52,65,143,0,51,99,85,3,50,57,32,64,235,82,3,+64,38,167,150,224,38,7,227,4,1,1,91,93,222,50,64,129,1,10,65,+227,31,2,4,68,97,116,97,46,92,48,6,95,84,121,112,101,46,34,96,+193,64,61,226,148,0,117,81,224,10,6,194,154,96,44,129,101,97,5,171,+122,96,22,199,166,1,50,50,120,58,67,156,96,38,104,201,71,218,96,37,+169,59,132,36,77,143,254,236,5,0,102,191,3,66,100,184,179,138,16,224,+40,14,96,83,193,152,0,67,106,119,65,132,0,51,74,217,224,45,1,1,+40,41,96,45,3,80,32,95,51,83,102,66,89,202,228,0,49,97,163,153,+27,96,28,100,98,75,215,66,33,1,56,48,187,101,250,149,1,96,158,64,+32,135,89,1,95,56,77,46,64,133,162,5,5,54,32,95,55,48,54,134,+33,66,25,68,168,128,198,0,48,192,94,96,15,98,220,1,48,56,96,24,+64,6,128,87,100,169,64,77,205,12,64,18,227,29,0,64,24,129,252,246,+185,95,196,57,64,171,0,57,204,240,208,57,128,154,64,0,246,188,16,117,+74,128,11,135,186,0,95,133,187,132,120,3,51,51,53,32,243,117,0,224,+78,2,242,148,8,246,178,19,2,49,50,49,101,8,160,60,128,118,224,74,+0,237,205,0,128,196,96,22,224,105,3,246,176,53,224,91,3,185,163,224,+135,5,168,33,246,181,13,225,31,3,224,165,12,1,49,48,176,223,192,19,+225,142,0,1,53,56,98,50,253,10,11,246,224,34,192,172,225,205,6,129,+84,207,37,246,206,72,200,242,224,237,4,208,87,225,166,13,225,105,20,224,+102,8,66,246,66,186,67,193,225,154,13,224,77,2,0,51,69,69,65,16,+219,7,226,80,0,97,57,225,82,11,246,255,16,0,83,78,35,233,77,0,+112,202,235,131,1,64,81,184,173,226,178,6,193,114,224,158,0,224,32,9,+247,30,50,225,88,4,160,217,113,14,225,16,14,226,126,4,64,5,204,133,+247,57,13,78,97,227,228,1,224,53,1,202,226,246,95,32,224,130,15,225,+251,21,224,57,16,226,204,3,221,55,101,64,135,17,225,23,7,64,131,194,+245,0,58,128,244,229,102,11,64,213,247,151,31,226,231,56,224,30,39,247,+201,32,192,50,225,247,21,194,254,226,143,10,65,33,136,6,226,95,13,227,+72,6,98,110,64,51,136,35,224,51,13,172,9,128,99,64,44,0,54,167,+2,0,80,225,170,13,224,253,4,224,107,5,64,61,136,104,247,234,77,226,+80,0,195,235,247,228,8,227,21,1,224,36,10,96,120,96,72,175,18,224,+109,11,131,94,224,249,17,224,88,11,99,115,227,47,13,227,149,7,96,19,+244,194,3,65,56,225,155,16,102,94,64,8,195,30,0,51,233,236,0,0,+48,73,236,64,32,1,10,65,67,255,244,239,5,246,242,1,202,144,69,156,+209,137,64,103,75,23,97,40,236,172,0,64,121,160,43,131,170,0,75,167,+4,72,39,96,3,160,177,0,48,131,163,101,116,0,90,239,5,0,1,95,+49,76,170,73,84,64,71,148,99,96,18,233,241,4,0,64,107,81,238,3,+0,224,31,10,106,18,116,67,224,29,4,1,55,56,98,110,2,56,52,54,+224,230,2,171,111,224,45,30,170,141,224,36,21,1,45,62,238,198,1,65,+121,0,48,103,142,64,245,195,119,101,108,96,228,64,21,131,89,171,1,78,+197,3,104,101,97,100,96,74,249,208,8,0,68,76,2,4,84,101,120,116,+46,64,35,4,58,32,101,109,112,182,145,64,72,0,54,128,72,109,30,2,+55,32,95,116,146,0,95,107,136,70,198,64,33,131,89,115,191,0,48,237,+19,4,98,252,141,19,79,97,226,77,0,247,95,4,171,101,94,130,135,36,+224,32,14,218,69,147,37,64,97,224,41,4,97,50,160,41,96,29,82,212,+96,37,147,130,194,6,1,50,48,240,29,3,161,85,224,22,7,10,80,114,+105,109,105,116,105,118,101,115,46,193,119,224,91,4,140,16,0,64,210,208,+192,0,64,231,207,143,0,85,130,131,225,209,8,160,38,130,245,139,4,79,+111,0,57,235,5,0,236,211,2,4,115,117,112,101,114,160,160,239,146,3,+64,64,131,10,150,255,236,219,4,1,36,67,64,49,3,58,49,49,57,131,+14,67,45,0,66,64,140,225,95,2,1,95,56,140,224,2,49,49,57,169,+213,64,47,130,72,5,98,115,43,43,46,32,64,15,194,66,64,49,97,65,+6,49,57,53,32,95,55,57,64,203,88,206,1,48,54,96,127,1,56,52,+248,26,9,75,200,181,232,113,1,110,58,116,87,64,76,0,80,64,142,0,+90,96,83,2,56,57,48,196,115,251,143,3,225,11,8,20,100,117,112,108,+105,99,97,116,101,32,100,101,102,105,110,105,116,105,111,110,32,129,26,0,+56,67,247,192,0,249,95,7,6,104,101,99,107,68,117,112,162,205,0,49,+64,92,246,136,0,64,192,0,95,128,195,0,54,64,174,134,55,0,53,65,+175,108,140,0,50,217,124,141,237,129,134,92,138,64,72,130,244,64,194,140,+192,0,49,98,18,0,95,111,13,160,15,88,121,0,53,133,32,96,54,224,+47,3,164,237,1,83,32,71,76,186,128,64,16,66,175,245,37,1,79,111,+224,7,1,194,249,229,41,2,128,57,96,73,117,147,242,162,2,180,154,195,+44,241,242,0,224,64,1,96,8,224,61,0,71,21,192,14,192,115,224,13,+11,247,46,2,150,55,224,48,19,180,162,227,176,0,64,2,128,153,128,108,+160,46,214,164,84,112,233,18,0,165,254,192,113,192,43,182,46,197,222,64,+74,178,188,233,214,1,192,62,192,18,181,221,3,95,51,50,48,226,28,2,+13,92,34,115,114,99,47,77,105,99,114,111,72,115,47,81,3,9,46,104,+115,92,34,44,51,51,58,53,229,108,2,224,0,5,225,126,21,114,58,225,+132,0,129,136,128,167,136,87,128,169,160,14,160,185,224,232,1,243,148,0,+96,65,244,111,5,224,39,10,64,15,244,150,10,66,109,133,109,130,134,132,+246,112,45,98,163,231,109,7,192,196,128,167,130,47,199,58,224,103,0,128,+10,207,155,98,137,0,85,254,131,1,1,95,54,102,22,128,123,132,218,103,+133,245,29,1,226,53,2,129,42,1,75,32,183,203,194,44,192,7,161,214,+128,9,128,2,161,56,160,13,160,81,225,18,5,224,23,8,224,17,17,193,+121,226,171,1,162,84,224,123,0,224,119,4,224,61,8,224,64,2,224,65,+2,96,218,224,46,14,160,93,130,215,247,219,0,65,17,194,6,96,23,105,+183,228,139,2,249,170,1,225,63,0,224,60,3,96,2,230,128,0,224,137,+3,221,111,104,177,160,121,64,132,193,215,163,129,224,5,15,70,82,224,58,+0,225,35,2,138,7,128,87,225,252,0,227,151,1,225,108,14,100,99,227,+36,0,160,196,160,136,225,216,8,129,67,227,31,0,224,83,0,160,98,102,+140,226,236,0,227,72,2,224,72,14,225,129,5,224,31,4,129,193,128,87,+100,199,164,82,152,134,132,72,98,160,128,4,192,33,196,150,64,62,228,181,+0,129,22,103,82,229,206,1,229,216,2,224,58,9,196,158,84,242,224,42,+5,195,200,225,119,1,128,222,96,249,101,55,64,163,224,18,1,64,14,64,+63,159,36,224,177,6,251,45,1,224,245,0,224,8,0,226,174,18,224,28,+1,224,29,41,224,190,8,65,182,227,47,0,227,2,0,160,138,225,227,3,+224,51,0,194,70,227,44,0,64,35,149,60,235,35,2,132,112,129,74,160,+20,1,51,48,224,25,2,0,95,251,142,1,225,59,0,98,221,0,52,121,+223,225,222,8,121,168,215,124,168,182,176,196,128,67,1,95,53,69,86,96,+112,177,212,98,219,129,216,193,81,225,35,5,252,151,5,128,219,226,194,3,+225,4,0,226,191,91,226,174,3,240,25,0,235,212,1,100,109,133,121,132,+63,224,24,4,2,64,95,54,73,169,100,151,129,26,96,4,226,238,13,0,+90,232,213,3,128,233,226,200,31,0,75,183,70,226,200,13,225,15,15,224,+13,4,101,18,226,103,0,161,171,237,130,3,98,31,165,92,64,151,137,221,+96,9,1,53,55,77,240,168,51,2,95,53,54,121,75,226,110,4,64,138,+224,162,0,160,8,160,7,226,61,3,165,31,194,61,0,89,161,211,161,188,+199,99,96,150,131,30,64,39,128,229,132,43,135,37,160,63,132,44,135,129,+197,119,64,24,106,43,224,116,1,64,237,69,188,120,160,107,130,164,22,106,+185,96,9,236,48,0,4,79,32,35,54,52,232,55,2,64,8,71,189,204,+87,236,43,7,192,91,110,63,236,200,0,96,74,173,240,1,95,56,125,188,+64,36,136,108,64,43,112,20,2,49,56,54,76,80,64,22,172,96,96,14,+0,54,128,30,249,218,2,64,21,235,88,0,0,66,134,137,121,50,197,96,+64,5,96,214,5,52,54,32,79,32,35,64,125,192,193,197,76,64,67,139,+108,64,61,0,50,96,105,0,51,192,83,241,218,3,64,48,149,36,170,70,+96,25,226,39,6,236,210,0,230,103,1,227,131,1,129,154,224,13,10,196,+22,163,166,231,28,0,98,142,226,81,6,227,164,8,201,39,227,21,0,173,+107,228,251,8,64,155,65,142,254,98,0,73,62,231,18,0,99,6,65,2,+0,49,129,64,236,75,6,109,207,206,5,97,56,160,0,96,77,160,55,65,+59,202,49,140,45,224,238,5,231,127,10,228,96,0,163,243,74,6,225,1,+7,229,196,9,228,156,2,192,150,255,56,4,233,1,4,193,175,225,73,6,+232,14,0,170,178,233,93,3,5,67,32,95,51,54,56,224,43,0,193,57,+163,88,192,255,96,107,128,221,64,70,224,24,1,228,77,0,193,0,193,32,+227,96,1,160,170,1,95,52,123,60,225,39,1,237,98,0,64,1,191,135,+228,186,3,109,160,224,32,0,200,237,224,191,3,97,91,196,203,163,134,1,+55,57,224,203,3,112,93,192,56,224,53,40,224,50,13,239,217,5,228,92,+0,237,98,0,65,169,2,56,52,56,97,177,79,170,2,79,32,35,80,48,+96,223,240,173,5,125,189,3,54,32,95,50,67,150,234,211,3,164,114,64,+96,181,153,0,80,140,249,100,218,138,109,156,23,160,172,224,180,0,229,15,+1,224,18,0,82,253,191,55,96,17,254,190,0,157,93,69,16,1,54,56,+98,209,0,55,132,178,224,111,21,98,30,226,38,8,127,206,226,114,1,224,+31,0,224,124,3,64,17,227,48,2,193,248,229,165,0,226,96,0,230,181,+1,131,241,162,172,224,220,2,163,4,64,84,191,76,65,113,65,105,0,53,+128,180,64,25,0,54,224,205,2,64,135,122,237,118,111,0,51,98,153,224,+10,3,192,30,64,55,215,15,1,95,51,102,229,229,60,0,75,221,96,191,+0,90,64,149,96,4,132,52,191,239,96,40,255,178,0,1,52,57,129,46,+132,44,0,55,132,44,0,83,147,116,67,250,225,90,2,255,189,0,64,44,+224,7,0,96,8,65,193,0,75,128,65,246,14,2,228,104,1,225,48,1,+128,75,143,106,135,218,0,83,229,81,5,96,104,72,182,227,154,0,64,8,+99,198,228,99,4,0,54,82,52,97,94,128,82,224,135,0,0,64,87,207,+96,65,128,237,199,16,164,116,2,95,49,49,74,87,247,156,0,101,170,64,+20,167,36,160,99,99,111,138,128,250,49,0,160,37,233,123,2,2,49,51,+55,160,42,0,53,114,195,160,143,128,107,244,230,0,224,74,1,224,42,2,+161,82,181,142,133,50,99,107,1,49,49,66,231,224,246,0,0,58,128,234,+230,254,3,96,79,165,249,0,54,65,25,202,166,224,113,10,192,34,64,7,+162,224,64,94,129,228,225,1,12,192,187,128,68,215,52,226,242,2,131,17,+225,3,2,96,174,228,244,0,166,40,234,38,0,64,230,75,250,64,41,64,+249,161,53,99,74,97,1,98,135,0,53,164,107,162,22,97,225,225,18,3,+0,54,129,9,163,70,192,53,1,54,53,128,22,0,54,192,22,232,92,3,+64,44,100,206,64,33,131,45,64,50,89,0,224,39,1,242,77,1,1,67,+39,146,51,64,45,179,236,225,33,33,224,252,1,224,23,0,129,21,224,207,+3,199,44,224,190,1,66,223,64,111,163,145,224,191,5,72,245,224,191,0,+131,152,224,191,19,0,83,224,191,2,195,132,227,183,2,192,118,96,31,131,+19,224,223,13,230,218,1,160,216,102,126,225,203,9,249,110,3,192,19,66,+114,64,102,129,185,224,207,6,69,183,167,62,96,36,133,205,67,13,226,220,+2,196,16,128,139,130,100,232,139,0,227,134,4,224,169,7,224,162,0,226,+116,11,228,195,0,226,137,12,226,127,0,226,191,2,224,79,16,71,51,224,+79,9,166,110,238,178,0,64,82,139,69,64,231,196,128,228,53,2,226,4,+0,226,178,4,0,54,225,34,1,0,73,128,61,130,241,225,200,3,160,7,+64,28,0,54,226,55,12,0,48,226,55,1,64,214,128,33,135,226,192,27,+64,26,235,100,0,225,164,4,226,116,2,68,126,230,73,6,0,90,182,52,+64,29,226,146,0,139,215,0,53,122,77,100,208,224,86,10,166,240,96,33,+229,145,0,96,151,1,52,32,184,97,97,120,129,125,226,153,2,226,92,8,+97,178,224,38,18,225,137,3,224,38,18,226,0,3,224,77,26,64,7,224,+77,26,64,7,224,38,17,0,52,169,4,224,77,22,90,232,224,194,26,192,+38,113,14,224,38,26,166,41,230,67,9,104,216,139,158,226,244,0,226,238,+5,225,126,2,169,5,225,223,3,228,131,1,1,75,52,215,119,224,31,14,+0,51,224,31,22,0,50,224,31,21,2,67,39,66,224,32,11,66,216,0,+50,228,92,4,224,59,10,0,66,165,31,224,58,9,194,155,224,26,9,79,+77,224,26,14,70,81,224,26,3,162,1,96,7,0,58,128,7,227,120,4,+164,252,64,26,231,127,11,132,247,240,76,8,144,81,67,253,157,14,230,122,+1,189,54,129,141,224,32,5,237,160,1,0,51,69,93,227,126,3,98,40,+224,110,12,192,89,128,64,247,227,5,96,4,192,99,206,225,224,135,19,128,+35,0,80,96,71,224,44,3,128,149,127,144,96,147,233,45,1,238,110,0,+224,186,4,160,180,224,35,21,2,79,32,35,68,82,224,223,0,101,196,128,+154,224,38,7,0,49,224,38,0,65,170,240,142,5,226,197,11,224,38,21,+226,204,0,224,38,21,226,211,0,160,0,243,21,1,224,58,1,98,23,197,+234,1,80,32,97,78,0,85,128,21,0,54,96,21,93,111,83,150,133,66,+81,168,229,153,1,240,27,5,203,230,64,85,226,129,0,224,181,7,64,31,+133,221,224,31,8,96,174,64,31,229,223,0,174,29,161,99,64,26,229,227,+0,224,58,4,137,65,64,31,133,225,224,58,0,201,137,0,58,133,33,224,+26,4,166,241,64,26,242,110,0,128,26,198,138,64,26,233,247,0,160,26,+237,63,1,68,151,97,10,237,65,1,109,44,237,65,13,0,64,98,159,130,+143,226,187,4,192,32,96,31,226,54,3,129,76,78,85,237,165,5,96,46,+64,7,69,86,96,97,237,164,3,96,10,64,55,129,132,0,79,82,197,64,+41,127,207,64,11,129,92,179,166,192,1,65,190,232,215,4,168,138,96,103,+108,219,64,58,233,220,3,162,235,128,217,224,14,3,224,11,2,192,8,154,+106,64,65,169,254,94,203,68,151,0,95,72,21,67,44,72,108,159,54,192,+108,0,50,207,107,132,25,209,192,224,109,1,224,182,2,224,19,20,99,150,+0,39,86,87,79,10,224,47,9,117,197,3,50,32,95,57,109,250,0,51,+110,229,128,0,225,13,2,241,106,5,100,20,128,53,1,49,49,81,181,224,+54,3,160,111,224,2,0,128,39,1,56,49,78,193,224,38,1,160,73,224,+86,1,3,67,32,95,57,150,62,65,115,93,116,160,130,243,193,1,241,84,+4,96,0,65,39,240,52,1,160,251,192,88,65,117,64,32,208,0,7,49,+51,32,75,32,85,32,90,192,197,224,43,3,96,5,1,95,55,236,40,0,+96,56,0,54,128,56,3,54,32,95,55,64,153,214,23,0,50,71,188,64,+31,130,153,0,85,172,128,177,0,1,56,48,66,187,160,14,227,161,1,2,+32,61,32,100,140,145,224,2,49,49,50,147,30,64,70,228,45,0,5,57,+32,95,51,51,57,224,29,0,64,120,0,57,98,37,2,49,49,50,130,243,+0,50,128,128,176,111,64,7,227,26,0,4,95,49,48,48,48,130,210,64,+10,136,153,96,13,2,57,57,56,224,67,3,128,7,128,250,224,41,11,108,+86,1,48,48,116,251,128,8,3,95,57,57,57,100,135,231,233,0,160,108,+0,64,192,25,69,42,229,222,1,224,96,0,96,30,64,44,105,1,64,177,+131,124,3,80,32,35,51,106,123,64,18,196,209,2,48,55,57,224,202,1,+0,55,65,36,0,48,86,231,192,155,0,51,80,223,192,25,1,49,50,99,+38,224,14,6,224,42,12,128,68,224,42,8,224,15,0,0,49,97,136,64,+136,210,250,128,138,228,175,1,224,2,3,99,7,227,62,2,128,107,128,123,+227,44,13,224,33,0,224,29,3,224,26,5,192,22,224,19,2,224,201,26,+1,48,56,78,143,2,48,56,55,129,49,64,28,224,14,3,97,243,0,48,+78,201,192,0,224,56,5,1,49,49,163,98,224,22,7,173,71,225,32,1,+224,28,3,208,24,160,30,129,57,0,49,216,201,0,89,226,127,0,65,64,+232,130,1,64,4,0,80,118,206,207,173,224,217,12,224,84,1,225,119,4,+225,61,4,224,2,1,96,134,225,137,1,68,145,225,140,0,224,63,2,225,+110,1,66,216,225,140,4,215,112,224,23,1,128,156,224,16,1,68,117,160,+146,224,171,1,129,82,224,187,7,224,188,1,224,52,2,161,31,199,94,65,+22,68,46,225,238,43,1,49,49,137,181,225,174,14,64,102,199,170,192,102,+224,83,32,64,60,0,54,224,60,24,161,253,224,14,6,96,60,206,235,128,+60,243,182,0,5,67,32,60,32,64,35,96,39,224,19,6,67,245,224,19,+8,224,39,11,100,1,65,50,224,19,2,137,162,224,211,1,136,44,224,180,+36,224,84,9,65,9,224,84,3,129,229,225,173,33,73,164,227,156,8,0,+57,162,143,224,126,9,244,203,1,160,127,101,134,224,147,6,64,131,224,147,+3,129,241,160,66,225,225,14,69,164,224,112,11,225,30,38,225,136,7,100,+45,224,19,7,111,115,224,179,6,65,6,226,124,30,224,200,0,224,18,8,+224,84,6,67,64,225,8,8,227,120,0,224,217,28,193,144,229,15,1,225,+128,6,99,10,224,119,7,64,97,224,158,9,225,74,38,224,64,2,0,48,+217,215,225,74,7,225,93,11,65,73,224,19,7,226,37,10,102,192,226,167,+32,224,165,14,225,148,10,225,194,35,224,147,8,64,126,225,151,30,225,197,+20,1,48,57,72,241,230,31,5,227,9,0,0,48,226,172,0,225,204,7,+113,229,224,146,5,66,171,225,137,3,128,81,226,123,10,227,112,16,225,141,+8,65,120,224,18,6,226,68,10,130,67,225,77,13,128,198,230,80,5,225,+130,22,226,215,13,167,246,96,28,226,103,4,224,142,8,64,61,224,142,15,+226,26,6,163,43,224,45,28,195,95,161,205,227,95,10,228,43,10,226,36,+33,224,228,3,168,234,225,151,2,227,145,49,226,126,0,166,200,203,139,230,+200,12,65,84,224,18,6,130,104,224,18,4,229,20,10,99,202,228,191,9,+139,38,226,28,20,192,36,224,195,0,0,48,205,195,224,78,16,224,143,7,+231,65,10,231,64,7,224,142,6,224,88,15,224,25,17,231,182,8,225,22,+9,66,76,226,138,12,224,83,1,128,77,227,146,3,64,101,157,119,224,25,+7,160,121,225,104,7,229,175,6,128,57,224,99,3,229,255,0,65,237,0,+51,225,237,2,64,28,0,49,224,90,0,64,29,209,133,108,152,202,18,210,+217,0,53,118,190,239,178,2,74,221,64,53,208,35,128,55,248,173,0,64,+127,141,80,1,56,55,86,45,0,80,151,123,107,36,0,80,131,179,141,165,+110,62,96,73,140,143,2,85,32,65,109,39,64,23,96,14,157,237,64,45,+224,187,3,226,225,2,64,29,234,10,5,228,183,10,225,157,6,64,55,225,+75,6,137,16,230,86,92,227,168,18,224,46,36,228,114,31,224,57,7,228,+132,34,230,116,2,230,40,18,65,130,0,54,235,141,26,64,54,228,214,1,+224,95,1,224,76,3,224,127,7,162,193,64,98,235,118,3,79,56,225,44,+33,224,227,22,128,99,64,98,229,16,20,68,253,232,161,11,224,19,7,64,+99,227,169,7,194,94,225,22,11,234,39,15,235,139,32,224,212,6,231,96,+14,233,73,53,239,121,8,97,204,203,241,224,109,8,224,156,1,136,209,128,+45,230,125,0,232,254,42,226,110,1,234,58,12,233,146,50,96,94,194,104,+193,17,129,20,240,186,47,224,177,3,225,65,30,224,61,6,227,39,5,129,+19,224,13,5,224,53,11,224,198,1,234,16,13,225,217,21,241,68,5,224,+143,7,192,115,226,152,34,225,251,2,166,238,224,85,2,225,229,5,225,223,+18,64,24,224,18,6,231,229,25,83,138,226,104,17,235,216,30,227,181,19,+225,20,3,224,72,8,229,201,38,232,80,13,224,138,4,195,172,224,204,24,+227,107,7,225,244,23,227,206,28,232,122,14,228,59,70,85,133,226,210,10,+233,144,1,224,111,69,192,95,160,23,224,118,15,64,0,70,27,233,62,3,+228,191,15,228,89,10,224,140,1,158,231,225,244,1,64,84,233,117,3,228,+121,64,192,234,224,209,6,192,121,226,56,6,225,127,2,0,48,228,114,4,+160,183,81,98,228,205,4,224,214,6,245,137,5,224,45,5,224,233,2,234,+41,6,138,8,234,43,0,105,232,119,68,192,15,0,65,96,64,64,57,219,+228,225,35,5,161,38,161,39,225,41,1,246,121,58,0,57,108,117,224,14,+1,236,148,5,230,159,8,230,181,4,224,22,8,225,23,4,193,159,213,46,+64,224,100,170,232,216,24,227,229,13,224,138,7,224,36,7,96,14,64,98,+235,63,3,0,67,160,90,139,195,96,237,233,186,28,230,208,7,207,119,64,+67,0,54,225,221,5,0,66,183,0,128,42,128,34,233,190,5,65,139,121,+125,0,83,224,5,0,64,4,64,52,192,3,224,103,0,128,119,192,174,233,+163,3,225,45,17,225,30,11,231,249,12,192,36,192,94,237,37,11,130,2,+64,29,227,175,7,225,168,24,193,52,64,60,249,251,5,225,132,5,226,228,+3,128,213,227,240,35,227,140,7,200,5,224,148,6,224,250,14,226,111,40,+249,195,48,234,154,5,192,182,97,35,228,52,3,0,58,150,230,225,44,15,+72,168,250,187,8,0,83,224,146,9,228,93,7,228,94,9,96,77,226,255,+27,226,56,6,226,248,0,64,224,224,166,16,248,39,5,225,209,38,228,116,+7,225,58,7,204,180,96,155,226,177,9,96,31,64,29,226,207,12,96,93,+64,29,130,207,0,75,224,186,8,197,173,250,227,6,64,11,131,217,160,187,+224,209,7,161,95,224,8,2,96,78,207,220,0,58,128,71,96,11,125,16,+96,36,190,208,254,67,6,7,84,109,111,100,117,108,101,32,126,72,0,64,+154,242,126,116,95,194,80,31,2,95,56,51,97,36,224,59,0,1,79,32,+108,11,129,235,134,6,128,49,1,64,67,91,154,64,146,66,143,224,38,4,+96,131,130,1,3,85,32,75,52,98,23,64,18,129,215,1,80,32,73,139,+160,169,129,206,0,67,191,226,0,57,98,180,159,226,64,29,161,133,2,57,+51,56,96,229,129,118,64,154,0,89,252,27,1,64,5,0,80,68,233,0,+95,64,54,2,95,49,52,146,222,226,186,3,96,8,64,41,0,95,113,103,+96,26,224,20,6,97,121,94,182,161,112,163,147,64,117,222,112,68,65,128,+94,160,100,160,6,97,7,160,63,96,66,0,48,97,181,252,32,7,128,111,+231,90,0,220,147,225,240,4,0,80,224,124,2,224,132,0,224,8,0,64,+140,130,67,131,224,65,110,1,95,49,97,175,64,26,196,237,5,49,57,32,+95,51,51,98,152,0,54,140,161,0,90,226,10,11,226,9,4,163,52,97,+216,130,8,66,17,224,48,5,12,40,46,46,46,41,32,119,104,101,114,101,+94,42,96,54,64,97,199,117,2,95,49,50,103,155,96,114,0,58,128,7,+64,142,3,54,32,95,57,68,119,64,26,0,55,97,243,64,50,132,105,0,+57,70,191,3,95,51,51,53,80,21,65,69,139,176,0,83,163,20,235,190,+4,129,213,225,73,1,95,231,1,61,61,224,24,2,3,85,32,64,90,96,+128,161,186,224,42,10,132,97,160,42,224,44,4,97,173,2,95,49,48,90,+123,160,22,3,95,57,57,57,164,226,96,181,194,207,240,192,79,0,57,72,+79,64,133,96,8,160,16,96,132,225,130,1,6,100,101,102,97,117,108,116,+129,179,2,95,49,48,73,198,128,168,224,35,1,1,58,58,128,30,64,31,+0,53,137,189,3,85,32,75,50,192,98,224,81,8,14,114,105,118,105,110,+103,32,105,110,115,116,97,110,99,101,224,91,0,160,59,240,226,15,223,153,+162,208,0,90,64,44,226,241,2,0,39,164,193,96,204,194,94,224,226,27,+6,112,97,116,116,101,114,110,224,134,1,65,76,96,35,3,79,32,35,54,+98,243,224,221,0,99,205,96,80,1,51,52,96,72,65,100,0,66,98,115,+3,49,48,50,51,128,90,4,79,32,35,53,57,224,54,0,96,29,127,94,+103,213,132,44,64,75,239,227,0,225,146,7,225,137,27,224,126,1,193,148,+167,23,76,139,96,8,67,173,128,8,67,16,224,74,4,0,44,163,131,99,+8,225,120,3,64,0,241,150,33,96,93,93,239,224,176,13,225,223,16,64,+57,96,237,128,61,232,135,6,225,191,9,224,94,13,4,99,108,97,115,115,+224,91,1,199,218,97,189,96,8,218,78,241,66,13,130,75,166,94,224,115,+14,104,148,228,147,6,4,105,110,102,105,120,96,118,101,157,2,52,48,49,+64,4,0,51,103,77,102,146,0,56,161,249,224,26,9,67,145,130,20,224,+27,5,162,40,224,115,0,6,95,49,49,56,32,95,50,68,170,160,22,225,+205,36,162,13,129,105,225,90,12,224,243,19,225,103,8,19,102,111,114,101,+105,103,110,32,105,109,112,111,114,116,32,99,99,97,108,108,226,132,9,160,+149,160,187,5,49,50,54,32,95,51,224,136,1,228,56,33,242,55,53,238,+87,18,1,49,48,176,33,224,30,3,224,27,6,226,135,44,129,23,166,212,+77,18,185,108,2,49,48,53,64,167,64,7,103,186,132,43,224,60,6,13,+123,45,35,32,83,79,85,82,67,69,32,35,45,125,161,13,1,64,80,193,+85,224,44,5,8,113,117,97,108,105,102,105,101,100,192,39,225,236,0,226,+57,0,65,145,0,75,129,142,226,182,5,2,32,97,115,130,38,1,95,56,+225,150,0,192,102,228,125,0,129,7,192,76,0,80,64,73,224,65,2,5,+104,105,100,105,110,103,160,123,228,107,22,3,79,32,35,52,226,237,1,196,+102,147,204,192,0,230,135,36,2,116,121,112,228,72,1,226,75,23,222,4,+244,7,19,224,116,8,224,197,31,161,62,226,202,25,224,106,14,68,245,193,+219,230,96,15,244,74,35,64,147,64,165,160,154,224,87,10,225,105,50,231,+11,19,163,176,244,82,25,96,108,231,145,35,2,110,101,119,224,133,31,0,+54,97,234,64,8,133,45,104,38,0,83,64,88,123,87,227,192,27,3,100,+97,116,97,224,106,5,224,79,1,64,59,72,104,192,7,224,215,53,224,105,+9,224,212,10,229,238,23,2,32,92,124,160,67,162,144,129,2,225,5,4,+128,0,74,67,0,54,235,19,0,1,49,48,107,106,192,52,68,140,64,32,+141,14,97,54,230,21,35,201,197,228,247,3,228,182,14,4,115,116,111,99,+107,160,178,225,231,19,224,27,5,2,97,110,121,231,225,2,0,75,160,90,+64,0,228,122,41,96,253,67,90,2,95,56,51,233,117,0,224,179,8,165,+158,224,6,2,224,250,13,1,118,105,225,196,2,131,4,65,72,142,57,230,+129,1,230,95,2,129,84,226,60,23,64,195,129,155,100,4,232,212,3,132,+115,0,80,133,163,110,116,193,198,96,127,96,22,0,54,225,17,3,96,31,+192,139,198,223,228,142,15,228,54,0,228,206,13,96,99,225,90,9,128,0,+64,249,143,36,224,104,1,128,6,192,49,0,49,73,227,161,141,224,18,0,+0,53,160,18,64,62,142,237,73,146,131,178,193,86,198,144,192,53,65,186,+160,71,193,120,64,62,142,159,1,75,50,79,175,65,57,111,220,0,80,228,+6,0,0,85,235,33,1,99,194,96,4,230,239,4,224,30,1,226,87,3,+0,53,65,27,233,81,9,224,229,5,225,56,9,3,40,46,46,41,225,58,+1,64,32,0,58,134,248,227,133,0,144,51,226,174,13,64,43,142,171,0,+65,64,206,72,56,64,55,1,52,56,225,28,0,0,80,175,135,175,133,96,+15,64,9,128,21,66,240,0,48,130,237,72,123,64,66,0,54,96,66,2,+83,32,85,195,65,78,135,226,216,3,97,143,224,129,0,227,83,31,231,71,+23,225,58,5,224,68,0,193,247,224,104,2,225,100,10,161,9,132,154,224,+186,6,224,106,5,66,6,64,59,68,246,225,137,6,1,61,62,161,135,96,+75,131,157,64,177,1,80,32,103,58,1,64,80,129,154,130,188,140,146,160,+145,226,30,1,149,135,136,110,160,166,246,8,1,69,192,147,147,1,53,48,+97,173,246,24,0,0,52,81,10,65,149,64,21,162,146,0,39,82,65,247,+40,1,119,55,241,140,0,160,12,167,73,160,15,114,54,128,2,0,67,121,+102,234,206,2,2,66,32,83,147,191,98,146,192,68,224,61,0,138,251,224,+46,3,240,145,0,235,102,0,151,188,111,53,66,88,128,5,103,50,160,81,+241,23,2,109,45,128,10,210,229,224,80,0,161,182,128,102,0,85,128,62,+224,132,1,192,11,96,74,160,208,197,25,160,96,160,58,128,35,2,95,54,+52,138,37,146,163,241,152,2,0,66,66,252,229,69,6,128,90,225,26,5,+163,196,235,233,13,229,137,0,96,59,160,14,98,56,164,86,128,205,0,75,+128,64,224,176,46,224,161,6,96,158,224,155,6,224,128,13,224,119,0,225,+245,0,226,10,0,193,2,129,128,193,150,68,140,69,22,236,115,0,0,51,+64,191,99,171,160,145,160,24,101,46,64,13,86,150,85,2,3,64,95,56,+49,194,13,96,10,193,66,128,94,236,198,1,0,51,107,181,227,86,1,1,+91,93,195,86,224,43,0,224,100,4,224,87,2,175,99,64,244,125,52,1,+48,48,167,193,245,200,0,186,122,3,64,95,52,50,68,175,118,18,147,15,+79,70,192,43,192,4,96,159,66,97,161,61,96,246,213,55,161,97,195,22,+160,202,129,49,161,54,234,164,2,96,136,198,34,235,105,5,96,186,224,26,+13,96,53,129,246,224,26,7,96,133,99,102,224,22,4,142,150,64,207,194,+36,0,85,130,23,226,11,2,248,242,4,0,49,167,170,129,186,128,12,231,+155,8,199,156,228,1,0,224,117,6,140,232,98,238,240,194,11,0,95,136,+191,240,102,6,241,150,3,194,164,232,175,8,136,163,232,250,3,160,192,225,+17,9,224,219,0,64,26,224,159,5,101,127,225,10,0,192,111,160,11,101,+129,192,11,230,127,1,243,81,2,101,138,128,122,250,51,0,96,100,96,99,+232,55,18,224,27,9,80,168,232,207,3,225,159,24,129,6,129,158,227,188,+2,225,92,1,0,45,198,118,193,156,226,75,13,0,49,116,6,224,26,13,+98,42,225,57,13,175,237,0,85,232,194,6,232,149,13,76,87,233,174,4,+160,221,225,2,5,224,34,7,237,207,7,64,227,179,235,235,116,1,88,146,+65,133,224,76,7,0,52,225,78,0,160,136,224,121,3,230,11,0,229,134,+1,225,89,14,128,203,234,47,2,225,194,1,226,35,0,226,32,7,239,169,+9,96,186,234,118,12,96,0,133,91,225,124,7,98,89,225,124,12,0,49,+163,227,129,67,64,174,232,214,10,226,66,13,224,232,16,226,66,12,243,22,+12,163,207,242,126,9,0,102,236,140,0,1,50,57,224,28,7,226,140,0,+192,0,64,128,229,22,17,226,147,18,97,202,224,26,13,227,232,17,145,135,+225,16,2,225,18,2,224,17,3,163,206,227,104,2,183,204,0,79,237,132,+16,192,246,227,159,6,224,48,17,2,116,104,101,183,226,200,24,224,43,17,+2,101,108,115,174,148,227,60,9,225,215,6,225,209,1,226,240,4,194,91,+225,14,5,97,203,226,31,21,229,103,1,192,76,243,157,2,66,191,213,116,+239,140,4,0,111,96,173,236,155,23,0,46,160,39,195,69,1,50,49,125,+23,128,117,240,27,2,134,204,128,0,229,219,12,99,87,228,41,8,151,88,+65,206,131,119,228,109,2,168,214,229,242,38,238,107,2,229,242,2,160,73,+226,199,19,216,84,224,25,9,227,221,17,227,220,3,225,112,4,192,8,225,+76,6,1,108,101,181,243,225,74,21,160,249,226,105,15,0,105,226,147,0,+160,124,228,41,4,128,128,162,174,162,25,224,71,13,1,99,97,226,177,0,+224,25,6,0,111,195,40,224,167,20,0,51,245,154,1,225,213,6,72,243,+2,85,32,75,130,230,157,85,0,52,177,67,160,22,230,23,2,230,9,2,+1,57,50,230,9,2,1,52,52,64,23,242,26,9,228,159,8,249,146,0,+202,248,131,40,228,112,5,192,207,129,166,231,37,10,225,202,0,128,33,4,+64,95,53,54,51,138,58,161,86,69,176,163,46,64,10,64,6,226,243,2,+96,37,74,103,240,48,1,66,215,191,230,128,32,64,92,192,117,96,131,225,+54,1,128,3,194,123,140,31,234,224,0,193,70,162,132,64,121,89,47,75,+183,250,20,5,226,35,3,2,115,116,36,129,39,202,219,161,115,160,74,236,+64,1,235,64,8,247,237,2,225,76,0,227,144,0,224,14,0,132,152,97,+44,92,217,99,106,235,89,2,65,231,0,65,96,11,64,9,129,212,125,224,+101,31,64,15,0,58,110,243,174,231,226,191,1,0,51,94,194,3,64,95,+56,56,185,8,65,65,64,42,144,226,79,216,0,79,161,87,96,84,79,220,+96,143,143,118,129,111,64,47,145,6,0,66,79,186,64,205,0,85,128,69,+0,54,239,210,3,96,193,143,210,65,209,160,24,154,150,245,201,0,160,218,+225,222,1,225,1,0,164,93,162,81,230,77,3,96,146,99,122,225,42,0,+227,220,0,236,206,0,230,79,0,135,133,230,53,0,64,141,212,23,247,209,+6,64,112,255,216,10,106,195,229,83,5,233,144,7,129,2,97,38,106,219,+97,141,113,211,96,18,212,185,1,53,56,70,148,1,54,54,237,72,0,0,+85,173,26,224,98,6,251,76,16,96,45,64,104,251,209,10,224,22,14,248,+182,13,229,155,8,228,98,12,128,80,192,75,170,113,64,226,98,67,96,28,+1,53,50,64,4,0,57,227,170,0,224,36,2,135,52,96,146,1,48,52,+197,116,248,154,12,224,50,0,130,10,224,12,2,160,100,224,95,0,224,43,+6,237,47,7,97,221,0,51,177,243,0,49,81,242,1,50,49,96,126,106,+186,74,179,192,139,0,95,74,121,192,12,64,53,210,57,64,53,1,51,51,+64,58,192,53,1,48,52,99,190,160,47,64,19,64,47,146,89,4,102,115,+104,111,119,82,105,64,35,182,107,195,208,135,244,98,145,234,9,21,0,58,+133,236,226,146,11,129,154,224,18,4,64,79,225,69,6,64,254,238,42,2,+0,51,97,45,230,182,6,182,110,102,182,224,13,0,224,27,2,232,169,4,+119,152,231,242,10,177,141,232,196,7,0,46,235,28,2,233,34,0,224,140,+3,224,119,86,224,111,10,224,97,24,224,190,21,225,116,7,96,182,230,210,+9,162,142,64,115,224,101,32,224,171,14,100,207,232,83,0,225,11,6,246,+13,2,228,243,1,128,8,237,109,19,234,53,3,138,6,159,4,160,228,66,+119,133,247,224,143,3,160,11,234,0,33,64,70,134,14,234,237,5,232,120,+2,251,74,0,224,17,0,206,61,64,60,0,54,213,164,1,51,52,183,74,+64,21,198,50,218,14,129,127,71,202,64,41,82,189,1,57,56,65,131,102,+127,64,48,214,79,149,212,232,176,11,178,160,1,51,55,247,173,2,128,30,+168,149,64,12,129,247,64,2,224,59,4,227,128,5,224,25,1,224,27,5,+229,185,16,6,75,51,32,95,51,52,51,226,16,2,8,115,101,112,49,32,+65,98,111,118,202,37,224,37,17,4,66,101,115,105,100,224,38,0,224,124,+1,228,6,12,1,95,57,154,172,224,37,0,214,0,128,168,100,19,192,26,+66,119,0,55,134,175,128,79,64,189,231,116,1,64,88,0,67,64,34,103,+253,161,47,64,51,65,120,199,197,128,0,129,93,225,56,2,224,97,0,230,+125,8,128,28,224,144,1,224,142,1,224,205,4,170,209,224,195,2,224,79,+0,74,63,0,57,189,87,160,55,224,182,1,128,11,3,95,49,55,52,181,+86,192,113,224,71,15,138,67,224,71,10,97,1,66,108,96,181,137,8,224,+85,0,245,161,0,96,59,224,202,1,224,199,8,128,38,192,124,128,123,2,+95,57,54,106,28,225,103,39,224,196,4,137,6,0,55,166,95,66,254,160,+0,1,95,55,64,210,67,18,135,10,99,18,161,160,224,161,5,96,184,0,+64,152,153,225,146,2,225,195,21,221,174,128,26,198,102,248,124,0,224,30,+5,225,112,0,223,178,226,99,0,224,66,18,226,191,12,160,135,64,234,64,+31,64,14,64,11,65,94,193,202,1,56,48,166,238,132,25,252,189,2,115,+219,235,86,0,193,205,1,57,55,69,38,97,111,226,213,12,164,104,97,74,+221,18,227,240,6,65,117,228,3,49,7,111,110,101,76,105,110,101,114,228,+7,25,224,41,0,228,11,6,228,2,20,74,131,193,35,64,0,234,10,12,+227,116,8,136,195,131,96,224,61,1,224,21,0,84,103,224,83,1,233,207,+12,0,75,228,132,1,64,140,0,55,230,111,2,137,54,0,83,65,175,197,+164,217,202,225,254,6,164,153,224,64,1,64,62,137,101,238,55,3,118,185,+64,7,74,110,0,58,139,235,64,97,98,194,118,128,224,94,0,98,231,128,+174,230,26,5,96,196,96,205,195,143,224,19,0,128,17,167,148,64,5,102,+193,239,69,0,250,156,4,186,42,160,48,170,203,103,36,64,159,205,58,64,+168,192,195,233,163,4,96,99,232,2,1,160,17,232,70,6,2,32,92,124,+240,227,2,232,6,39,192,177,64,134,167,178,1,32,80,202,178,96,117,232,+129,3,72,116,224,126,6,1,60,45,233,43,6,192,7,129,139,241,146,54,+64,150,0,54,160,150,64,212,112,219,189,180,81,118,253,218,3,64,156,225,+231,0,98,14,208,24,160,206,1,49,48,87,154,69,86,161,187,224,151,3,+3,119,104,101,114,195,68,224,154,28,128,156,133,79,76,128,0,54,96,131,+132,20,229,136,1,132,67,64,25,130,231,224,198,2,168,214,64,147,169,112,+187,23,162,141,231,153,6,229,11,7,211,89,163,53,231,200,7,224,46,7,+1,95,57,81,236,65,23,99,131,96,189,64,135,225,241,19,130,72,0,55,+226,81,10,248,65,1,161,21,174,17,192,32,0,54,233,223,0,226,15,5,+224,76,36,235,48,14,64,184,131,49,80,57,0,56,105,248,0,54,96,83,+75,31,2,51,54,53,103,57,78,32,165,201,170,45,96,56,240,165,1,178,+43,103,10,97,124,126,4,0,67,80,33,128,141,240,99,1,182,232,177,109,+97,194,108,182,96,0,64,85,0,54,160,85,227,170,22,5,102,111,114,97,+108,108,227,173,6,249,8,0,234,69,0,96,53,170,220,64,7,1,83,32,+114,83,242,122,15,206,53,224,31,5,225,88,4,96,164,131,46,0,85,229,+8,2,133,103,194,57,226,49,6,64,241,136,159,192,135,64,164,98,252,225,+162,2,161,23,114,171,227,102,0,237,99,8,246,231,10,249,63,3,152,130,+96,164,131,195,66,51,0,49,67,79,64,25,96,180,0,75,254,235,0,0,+55,71,211,4,64,95,56,52,54,108,54,249,213,1,64,46,175,179,226,23,+24,103,245,226,23,3,198,133,0,73,229,130,3,225,17,0,101,46,108,118,+96,246,70,249,192,35,2,95,57,57,108,214,141,40,160,118,128,115,128,219,+129,40,64,99,131,232,67,109,0,75,135,134,129,68,224,10,4,224,12,2,+0,58,158,144,240,67,0,1,95,56,69,200,96,7,0,54,163,69,4,48,+55,32,95,56,99,215,1,95,55,180,101,64,53,131,29,2,75,32,89,100,+83,65,60,233,114,4,138,151,130,198,208,24,162,17,119,169,129,103,0,51,+253,204,0,99,45,106,65,64,134,193,135,117,14,98,99,170,94,130,131,1,+52,51,96,33,0,56,77,184,105,150,128,34,128,0,64,156,198,101,192,103,+128,71,2,56,54,53,179,89,224,22,5,0,53,97,162,1,95,54,131,200,+171,9,230,2,0,64,190,212,116,137,81,96,21,238,40,1,244,138,2,0,+48,206,13,1,80,32,185,5,96,21,130,96,238,167,15,81,196,238,167,5,+81,230,206,167,66,245,133,211,1,57,57,105,4,192,150,130,77,247,145,4,+161,159,64,29,194,7,2,95,57,54,66,140,104,204,0,58,96,37,224,76,+4,102,31,100,77,230,30,93,65,166,230,30,2,96,133,160,121,97,52,129,+198,128,60,117,198,64,35,129,128,227,112,4,0,57,79,202,227,111,1,0,+50,229,135,9,103,79,64,54,64,250,0,58,96,21,227,124,18,98,91,227,+124,21,167,167,128,130,96,127,96,109,164,86,96,8,224,201,3,237,223,2,+224,201,1,129,203,206,5,65,42,193,101,225,60,2,161,61,225,63,9,224,+24,0,224,168,1,192,19,97,83,192,85,96,71,129,101,225,103,0,130,45,+0,65,65,9,130,26,2,95,57,56,65,71,86,27,2,58,57,56,130,23,+6,95,57,56,55,32,35,49,66,60,1,80,32,75,149,104,156,0,58,96,+36,5,10,65,32,80,32,58,64,32,130,65,77,20,1,57,56,145,16,136,+131,74,122,0,75,96,77,129,176,0,85,88,43,0,58,96,23,162,168,64,+13,195,33,133,200,226,105,1,203,143,71,8,253,201,4,139,73,79,19,0,+57,68,45,235,46,2,1,95,57,81,82,209,145,96,37,99,98,68,88,138,+125,2,95,52,48,239,142,0,0,58,96,173,194,3,64,87,237,44,10,192,+138,1,95,57,68,110,224,89,0,226,50,0,229,173,5,224,47,3,79,152,+224,47,1,0,58,96,9,138,41,227,34,0,238,227,2,129,181,237,211,8,+241,50,3,224,39,15,164,233,239,51,0,240,201,15,165,46,226,31,2,64,+8,207,16,224,7,5,224,190,7,224,54,4,224,145,0,227,218,2,192,13,+133,233,163,75,101,238,69,87,1,57,55,184,107,224,89,8,160,165,225,220,+0,2,95,57,55,65,211,128,37,129,194,139,61,160,15,224,51,0,224,219,+5,242,115,7,192,171,161,17,226,76,1,242,105,0,224,88,7,224,104,11,+225,119,1,160,226,238,180,5,224,94,0,160,32,224,145,4,242,206,1,209,+111,130,166,128,224,242,55,2,224,118,7,224,50,7,133,176,160,130,229,140,+0,227,37,3,160,217,228,29,7,224,225,9,128,88,144,160,160,0,164,104,+224,193,11,224,53,5,225,61,0,88,64,146,54,224,188,10,132,100,0,58,+96,16,209,242,128,86,130,17,164,225,225,85,15,193,52,227,93,8,192,24,+0,85,199,25,224,33,8,165,166,239,230,1,138,195,112,41,2,79,32,35,+70,11,201,178,96,255,99,247,0,95,65,139,0,58,97,145,68,237,1,52,+56,97,68,64,143,1,95,52,72,247,139,2,1,51,48,69,24,98,194,0,+58,96,6,227,198,3,192,193,242,210,6,227,114,3,225,209,5,228,79,3,+225,66,2,232,205,0,227,200,2,225,221,12,163,238,225,0,0,158,45,115,+180,97,4,195,90,128,54,227,231,20,224,67,5,97,221,104,27,96,64,224,+76,4,161,56,64,164,221,202,226,52,0,130,138,246,209,9,98,239,132,22,+224,210,0,228,235,22,160,25,224,27,5,242,200,34,0,97,82,191,3,78,+101,115,116,242,201,25,224,42,1,246,214,58,225,178,13,228,108,1,129,250,+97,47,193,238,161,198,224,24,16,64,0,225,54,24,161,155,224,126,1,224,+39,1,228,140,10,226,18,7,197,170,246,196,19,224,151,7,246,208,7,224,+82,2,132,223,131,235,224,74,0,78,197,72,24,132,195,130,47,134,41,193,+48,225,54,2,225,55,0,232,232,10,160,151,224,138,2,224,205,4,131,3,+224,150,0,101,56,247,37,11,230,187,0,225,42,15,160,40,224,92,4,128,+1,228,246,2,225,179,16,192,52,183,16,96,0,108,168,0,58,96,36,197,+18,227,64,29,192,153,225,79,0,129,56,128,60,226,21,18,225,237,2,229,+72,14,224,167,0,129,179,2,64,95,56,233,22,1,229,91,29,96,125,225,+76,0,192,72,1,95,49,107,12,133,59,71,252,3,54,53,32,95,99,48,+128,67,225,70,2,193,33,96,16,0,55,96,253,0,50,92,6,101,169,225,+55,1,65,56,138,47,128,240,230,68,34,192,48,224,28,4,96,227,224,224,+8,96,21,232,63,5,225,57,14,97,54,128,198,152,242,225,57,4,225,58,+26,253,209,0,137,25,1,53,49,229,182,0,99,132,70,112,0,58,96,90,+140,170,2,50,32,58,100,67,172,73,1,80,32,133,42,0,80,98,81,206,+9,1,67,39,98,84,194,200,98,151,228,19,0,76,105,226,195,0,135,159,+128,39,201,19,226,73,25,227,52,11,224,39,4,229,190,4,254,179,6,64,+213,65,19,225,108,4,229,140,6,0,98,69,135,0,103,213,164,229,101,4,+160,84,164,97,192,135,197,102,160,198,110,214,96,172,105,31,226,223,1,160,+169,228,228,2,194,241,251,152,7,163,146,224,227,17,228,24,0,164,178,231,+239,11,234,211,1,224,124,8,103,222,65,162,99,110,233,236,11,228,95,0,+226,48,5,128,138,225,3,0,192,193,225,223,0,97,187,224,37,0,225,190,+11,225,55,1,193,194,224,46,13,196,177,192,28,225,200,50,0,49,225,201,+11,224,88,0,226,133,3,225,208,4,227,173,0,132,232,64,61,97,82,225,+213,2,229,148,0,72,192,160,70,225,187,5,224,220,13,225,113,1,226,205,+11,225,197,10,224,109,5,160,79,253,170,3,195,235,78,160,102,111,228,10,+0,253,148,2,224,68,8,225,231,2,226,138,14,229,104,4,0,64,111,52,+104,194,64,6,64,4,0,58,110,229,111,126,68,57,0,73,100,10,207,195,+3,54,56,32,58,96,95,210,117,64,137,82,117,64,25,160,34,0,54,64,+34,241,103,1,0,80,152,114,132,83,71,167,128,37,0,52,64,37,210,212,+96,37,98,78,128,37,132,159,129,113,129,164,64,138,0,58,99,132,234,32,+1,226,112,8,1,95,57,87,163,128,13,224,246,3,3,95,54,57,48,166,+40,97,236,0,58,96,82,208,86,167,28,1,52,54,230,75,3,128,123,230,+14,2,64,109,230,14,11,195,147,131,42,230,14,36,199,136,230,14,11,192,+86,230,14,0,96,217,98,7,255,157,12,252,161,15,150,21,128,110,222,22,+227,84,6,3,102,105,116,115,246,183,0,115,237,96,108,130,1,0,53,162,+1,65,25,85,127,0,50,230,15,1,96,240,225,132,1,233,109,0,225,148,+0,193,166,198,9,65,229,227,166,8,227,48,2,230,38,15,225,37,3,229,+26,2,224,35,4,235,7,2,228,67,3,64,22,224,238,6,10,100,105,115,+112,108,97,121,32,108,97,121,203,148,192,141,195,49,231,116,5,192,29,65,+79,173,227,225,178,0,229,167,13,129,103,192,55,97,191,2,50,51,53,78,+39,87,47,224,67,0,211,51,195,250,0,66,64,5,96,41,232,174,9,160,+240,64,157,96,32,224,172,0,228,26,15,225,101,7,233,237,7,225,97,10,+225,187,1,225,94,61,0,50,225,95,7,133,83,225,23,3,224,210,36,225,+118,70,65,207,100,252,64,9,97,1,96,5,99,254,0,58,115,251,229,4,+5,87,204,189,7,128,134,192,131,96,7,128,16,128,143,1,95,49,87,81,+86,47,91,46,0,53,105,200,224,11,1,2,95,57,53,130,91,74,193,0,+49,155,7,117,219,1,53,54,96,102,133,58,96,147,1,75,52,224,2,1,+128,170,96,154,0,54,192,154,0,54,192,154,182,123,112,97,0,66,137,157,+228,140,8,97,195,228,166,17,129,250,225,82,6,178,26,0,85,85,223,225,+249,4,64,24,164,192,228,90,3,224,43,12,97,197,224,43,10,224,114,13,+171,182,224,70,9,97,70,224,114,30,98,152,224,114,11,224,115,0,225,0,+4,96,30,224,141,12,98,23,224,97,11,64,24,224,141,31,98,12,224,141,+11,224,44,11,107,173,224,186,12,178,41,98,79,0,58,96,6,185,229,0,+48,66,232,138,167,0,52,66,183,1,95,52,102,200,94,15,0,49,128,26,+1,95,51,124,229,66,155,192,44,1,95,56,90,61,130,205,2,95,56,50,+192,21,0,52,109,22,70,102,160,58,2,64,95,49,120,139,130,122,231,128,+0,0,83,98,101,167,21,210,174,83,17,98,232,0,55,131,180,132,46,3,+95,56,49,50,64,183,126,24,128,207,190,118,131,164,68,64,227,175,2,228,+75,1,17,114,101,99,117,114,115,105,118,101,32,109,111,100,117,108,101,58,+32,132,81,160,180,100,53,1,95,56,92,80,64,176,224,59,5,13,44,32,+105,109,112,111,114,116,32,99,104,97,105,110,160,57,4,66,32,95,55,49,+65,32,126,159,128,57,161,91,0,56,64,177,2,58,57,53,189,109,4,56,+49,51,32,75,186,237,195,228,227,237,3,101,162,0,55,136,110,193,27,212,+148,0,66,97,100,0,55,77,87,7,95,55,57,52,32,95,52,51,128,39,+234,241,0,98,100,130,132,224,42,0,161,1,64,48,128,168,90,80,1,95,+57,193,255,128,57,167,74,191,188,71,78,200,168,193,130,1,95,56,72,235,+189,64,2,56,57,51,64,11,240,208,3,225,38,6,0,77,97,88,9,32,+110,111,116,32,102,111,117,110,100,193,98,161,186,225,101,0,2,49,49,56,+65,20,137,66,224,71,10,13,94,42,115,101,97,114,99,104,32,112,97,116,+104,61,128,67,128,178,165,220,65,51,96,69,125,215,64,145,224,69,12,6,+112,97,99,107,97,103,101,224,70,3,224,57,3,225,14,0,98,67,0,50,+95,10,64,4,0,51,223,186,160,228,230,246,3,161,191,225,105,3,193,102,+1,95,52,90,94,128,0,96,237,114,144,135,38,0,39,131,20,161,154,224,+31,1,82,109,112,127,235,160,1,225,37,0,197,254,1,50,51,128,223,122,+30,233,173,6,128,5,101,243,1,95,52,90,46,1,57,52,200,105,192,171,+226,61,2,209,230,224,157,3,169,108,217,4,1,95,56,95,27,227,73,22,+193,86,3,100,111,101,115,97,236,6,99,111,110,116,97,105,110,163,88,161,+244,97,105,193,174,199,59,246,218,0,227,47,4,224,169,8,226,231,3,224,+201,1,68,68,225,66,0,162,82,240,51,0,130,96,99,74,0,80,66,234,+0,52,153,197,65,237,239,61,6,128,0,65,78,0,55,94,59,1,95,56,+126,213,1,57,52,158,126,1,57,53,138,156,224,238,1,2,46,116,120,79,+236,0,58,96,33,103,42,2,95,57,52,123,96,64,5,0,58,96,105,108,+134,75,244,0,49,96,25,0,55,76,91,128,5,0,58,96,37,163,202,65,+109,108,148,95,242,224,100,4,161,83,75,59,0,58,97,196,165,24,226,57,+5,163,69,1,52,49,64,209,81,82,101,132,104,32,1,95,55,178,153,1,+52,49,215,93,226,155,1,65,205,127,100,225,200,5,7,76,111,97,100,105,+110,103,32,193,208,201,98,228,73,4,226,223,0,0,55,72,179,195,135,224,+148,2,132,121,224,147,2,98,169,4,56,52,32,95,51,124,243,1,95,57,+70,46,1,95,52,102,52,226,90,22,0,80,160,137,29,99,111,109,112,105,+108,101,32,118,101,114,115,105,111,110,32,109,105,115,109,97,116,99,104,58,+32,102,105,108,101,163,203,102,14,98,97,229,176,10,160,211,128,42,64,145,+132,122,128,139,224,44,7,160,110,0,114,96,45,192,169,96,0,96,163,0,+56,100,40,1,95,57,96,181,66,35,67,179,223,11,97,13,102,147,0,49,+135,27,199,255,224,24,0,1,56,49,65,62,160,24,70,215,192,47,224,22,+2,161,217,0,57,67,236,2,95,57,51,68,73,1,95,57,75,180,130,219,+4,32,95,51,54,53,96,81,0,57,65,222,1,95,56,67,72,2,95,57,+51,98,179,1,95,55,101,160,229,30,0,3,95,57,52,48,96,5,163,64,+228,91,4,135,43,67,52,2,95,57,52,64,54,0,58,96,214,138,36,70,+166,96,17,134,184,0,85,106,45,160,36,134,144,128,36,65,7,0,58,96,+101,3,10,65,32,90,69,31,0,58,96,139,192,32,74,94,0,58,96,190,+191,60,64,71,64,140,0,58,96,218,245,33,0,224,5,1,67,141,79,169,+225,8,0,0,49,99,97,197,168,64,6,224,25,6,162,90,255,85,2,192,+26,0,50,148,163,96,6,224,26,0,1,50,49,65,93,105,246,0,57,100,+148,160,6,0,58,97,114,203,35,160,184,163,127,204,63,0,66,244,128,1,+64,1,236,121,1,67,207,128,96,140,73,162,47,1,57,50,65,51,101,0,+65,182,2,95,57,49,72,32,1,51,48,152,78,229,110,0,245,124,9,96,+62,140,111,144,43,224,43,27,133,197,129,74,149,168,137,48,160,249,231,194,+15,231,189,9,16,117,108,116,105,112,108,101,32,105,110,115,116,97,110,99,+101,115,232,232,3,65,89,232,1,4,224,0,4,1,95,56,97,90,97,118,+0,52,65,104,165,165,65,76,170,90,128,200,0,90,64,198,192,9,2,95,+57,51,67,30,234,17,1,64,54,80,24,1,32,89,97,92,129,116,128,217,+235,100,6,96,109,224,25,12,0,50,101,233,129,50,235,96,1,236,54,2,+139,40,160,133,224,37,22,246,248,1,160,0,224,49,6,236,70,2,128,48,+0,90,192,232,224,38,23,128,89,0,57,198,228,160,0,240,148,18,128,40,+130,107,224,90,2,100,153,209,252,226,62,2,97,252,128,17,224,49,19,160,+32,104,225,212,219,192,49,128,28,153,39,244,216,1,225,64,19,236,110,2,+225,63,3,171,192,160,0,0,58,65,245,65,230,238,97,21,206,71,224,25,+9,101,21,237,122,12,100,12,237,122,12,138,108,224,184,16,96,30,224,185,+10,134,193,224,244,2,129,86,225,83,8,100,140,225,133,7,128,44,225,82,+0,161,72,224,88,5,162,6,130,180,224,104,3,224,164,10,101,11,224,163,+20,225,21,13,99,175,225,21,12,191,214,224,111,14,102,132,225,19,26,224,+58,10,239,209,2,224,170,15,224,59,16,227,132,14,224,59,3,227,249,14,+224,231,3,224,25,4,98,192,240,32,22,227,183,28,128,138,1,49,51,204,+33,224,58,17,129,234,224,58,8,0,57,76,97,0,53,103,223,224,65,23,+64,58,224,65,11,224,124,1,226,234,14,224,210,20,227,253,3,224,85,2,+224,146,2,224,58,16,227,35,14,229,29,2,240,86,0,100,214,0,58,96,+6,163,232,5,95,50,49,52,32,73,225,6,1,136,185,224,20,0,74,46,+160,20,0,58,96,225,192,54,1,57,50,135,211,0,56,72,99,64,32,75,+54,3,47,61,32,58,96,18,64,12,0,61,96,12,203,100,118,76,99,110,+75,151,64,189,132,200,163,185,228,228,14,228,230,1,96,159,224,7,2,160,+210,64,150,1,50,54,224,150,0,1,75,50,209,77,160,240,99,192,0,58,+96,6,202,24,244,139,1,144,219,71,71,0,53,76,18,107,0,105,231,113,+18,2,64,95,55,104,170,0,58,71,58,128,61,96,198,160,152,81,120,76,+66,201,200,205,181,233,214,2,162,235,171,17,177,13,101,174,0,58,96,98,+236,125,7,72,158,193,44,194,60,149,202,0,83,194,74,64,171,0,55,184,+195,2,95,56,49,174,114,100,165,160,124,160,81,64,204,89,122,105,126,113,+66,162,159,200,18,0,58,73,122,233,96,0,138,95,64,239,202,25,66,78,+0,58,105,199,202,61,64,14,129,219,128,151,224,148,26,91,126,72,162,97,+233,233,117,3,107,46,224,141,1,0,58,96,37,113,147,0,51,73,22,96,+107,129,214,2,85,32,58,96,192,241,176,3,129,129,105,239,241,159,0,0,+58,107,183,224,37,7,64,35,128,45,97,30,241,205,1,0,58,108,22,245,+131,2,96,18,235,95,3,224,2,0,169,51,0,58,112,151,128,253,161,235,+129,245,129,162,225,238,0,2,95,56,56,199,9,128,2,124,136,162,205,211,+152,111,105,65,98,226,59,0,223,102,224,55,23,98,75,96,59,207,199,2,+79,32,35,78,68,182,251,226,140,1,192,80,192,14,227,84,2,224,78,11,+208,11,0,49,80,106,160,76,130,230,244,95,5,164,136,227,175,2,3,95,+51,52,55,192,80,122,57,0,95,102,103,1,56,56,132,76,241,128,0,97,+106,0,95,116,123,224,70,9,224,68,3,241,179,2,161,88,244,254,15,194,+241,161,61,164,98,235,91,32,0,70,78,204,243,23,7,147,7,242,115,6,+224,168,23,196,90,225,92,2,2,95,56,57,96,28,170,60,96,2,225,121,+2,65,232,196,38,236,176,2,133,28,216,93,0,56,81,10,96,146,226,56,+1,0,57,181,12,245,191,3,160,14,96,242,129,245,66,175,131,206,225,243,+5,3,95,57,48,50,225,1,2,6,109,104,115,105,110,46,104,220,28,162,+32,106,119,128,10,100,136,246,59,8,131,209,194,184,224,30,1,128,53,3,+67,32,95,56,86,69,160,150,225,115,5,9,35,108,105,110,101,32,49,32,+92,34,240,46,7,224,40,6,3,92,34,94,42,192,150,128,72,224,194,16,+2,111,117,116,224,195,1,192,192,165,64,227,72,5,224,169,2,1,95,57,+101,145,192,226,225,182,0,161,211,97,143,64,60,224,252,2,0,57,115,134,+226,102,0,224,23,6,225,165,3,160,0,0,58,97,172,247,194,9,0,49,+101,147,1,57,48,64,105,64,26,113,166,69,144,96,28,71,117,103,190,135,+219,251,124,5,5,114,101,109,111,118,101,98,185,5,102,97,105,108,101,100,+128,246,0,58,96,131,11,10,65,32,94,117,110,108,105,110,107,32,58,96,+93,225,255,9,2,51,53,54,238,93,3,6,72,83,67,80,80,72,83,225,+255,5,224,46,4,161,239,252,191,1,96,2,225,249,8,161,20,224,201,4,+146,244,168,249,146,235,226,15,8,7,82,117,110,32,99,112,112,104,206,214,+227,126,12,1,95,57,88,200,224,160,1,160,108,130,54,7,55,50,56,32,+95,52,48,49,64,4,0,51,72,183,0,64,224,93,1,96,89,226,69,0,+224,222,1,224,131,5,7,32,45,45,115,116,114,105,112,128,129,225,252,3,+65,156,136,45,96,54,120,89,226,213,1,2,95,57,48,238,214,0,160,39,+3,67,39,32,79,224,229,0,224,149,15,1,45,73,162,251,0,32,118,31,+224,25,2,10,115,114,99,47,114,117,110,116,105,109,101,128,34,101,137,65,+60,1,51,53,192,117,85,176,197,240,230,4,2,224,19,0,70,231,179,19,+227,130,3,245,231,3,227,117,17,2,32,45,79,225,46,1,98,86,0,54,+98,69,0,79,224,35,2,8,45,68,95,95,77,72,83,95,95,64,41,0,+75,71,172,65,6,135,26,226,229,11,64,14,133,198,226,231,19,128,169,244,+131,16,8,99,97,108,108,67,111,109,109,97,69,168,130,249,161,174,225,125,+2,130,60,0,50,89,86,97,53,224,66,5,0,44,226,97,18,96,234,136,+65,6,94,115,121,115,116,101,109,67,65,201,165,227,190,3,117,219,64,217,+73,39,131,190,0,54,97,241,160,20,125,196,1,95,56,66,236,128,44,228,+89,0,0,51,93,195,228,60,8,100,110,230,227,7,79,154,1,95,57,96,+157,96,46,228,90,1,165,222,64,29,122,205,71,187,161,122,2,54,53,49,+102,59,65,87,141,12,0,35,74,208,120,133,0,49,170,83,141,133,176,231,+109,188,226,164,5,130,30,103,248,2,51,50,48,229,142,4,4,108,105,98,+47,83,97,26,13,47,73,79,46,104,115,92,34,44,51,48,56,58,56,129,+133,0,90,129,38,87,229,96,109,97,17,2,48,54,32,128,130,160,19,96,+0,0,67,64,36,180,119,64,195,82,90,115,227,0,58,96,240,65,129,8,+116,109,112,110,97,109,101,32,58,97,70,255,42,5,0,90,224,1,0,105,+182,193,189,103,42,97,172,0,95,97,222,85,107,2,54,32,89,135,94,134,+8,65,58,131,255,72,214,240,22,0,235,105,3,192,13,97,36,238,87,3,+1,35,49,197,217,96,36,96,46,96,10,204,185,65,120,224,45,1,217,240,+96,33,249,12,1,224,42,11,100,93,192,0,109,215,224,129,15,153,155,96,+123,224,117,13,190,73,96,112,224,33,14,130,240,224,33,19,139,176,224,67,+20,138,224,64,33,148,58,98,86,224,36,7,96,138,242,209,1,224,0,3,+225,132,8,131,20,225,133,26,193,44,225,132,71,0,49,241,234,3,239,192,+7,224,133,9,192,181,163,81,74,236,90,101,99,115,255,207,4,132,14,132,+41,66,243,230,153,4,132,141,126,167,0,54,68,26,138,81,76,253,106,58,+108,204,91,115,0,56,68,207,0,58,106,196,173,158,64,13,133,114,0,85,+67,35,132,183,0,85,67,192,0,58,74,240,160,58,0,49,64,27,132,30,+0,73,64,10,163,107,135,1,133,104,231,72,5,97,250,229,52,6,254,45,+0,0,58,75,86,96,89,0,54,71,8,79,41,227,95,14,68,59,232,179,+4,72,146,1,116,58,90,46,0,115,90,216,10,92,92,101,110,100,123,99,+111,100,101,125,160,91,128,134,242,33,3,228,160,16,228,145,2,224,70,12,+207,104,165,55,1,48,54,129,123,0,85,226,108,1,226,126,2,239,193,1,+237,213,1,160,30,192,135,5,54,56,56,32,95,54,209,135,202,245,246,11,+6,224,173,28,4,98,101,103,105,110,224,175,4,176,130,224,76,6,98,213,+128,11,128,152,106,192,160,150,98,139,224,13,2,227,40,23,224,41,2,160,+57,224,16,0,217,50,224,75,3,227,199,8,248,50,0,177,172,225,94,0,+224,56,1,227,81,13,0,54,195,247,128,55,3,66,39,32,85,226,22,22,+13,98,108,97,110,107,32,98,101,102,111,114,101,32,62,234,145,3,71,99,+96,119,134,81,161,199,65,210,227,106,1,225,224,5,96,40,230,217,11,224,+54,6,227,159,4,0,65,104,64,109,120,0,54,67,44,1,64,58,110,195,+146,57,108,213,0,56,192,222,225,229,15,236,134,0,175,45,173,147,1,95,+56,69,119,0,58,112,26,140,13,129,49,111,125,0,56,64,216,135,31,128,+6,0,58,64,103,128,118,114,10,129,65,224,183,2,192,18,129,84,224,246,+2,96,85,192,29,193,159,243,67,7,99,203,64,116,135,45,255,223,0,1,+56,48,91,15,0,56,96,76,96,55,126,96,128,10,1,56,56,156,5,196,+42,100,180,0,56,225,138,0,96,81,177,165,2,51,56,57,75,235,100,198,+64,53,224,101,34,0,51,105,52,224,101,21,196,221,0,56,68,221,64,70,+209,177,64,28,180,216,1,50,57,67,221,0,56,78,170,2,95,56,55,70,+173,116,205,65,138,0,85,64,23,64,101,2,58,56,56,242,238,0,188,97,+96,24,64,63,2,49,49,57,142,68,98,120,74,175,64,13,64,35,1,95,+51,147,109,65,76,80,88,96,92,0,95,70,61,160,11,0,58,96,6,97,+7,2,48,32,75,75,183,68,24,1,48,49,226,246,2,25,67,111,110,116,+114,111,108,46,69,120,99,101,112,116,105,111,110,46,73,110,116,101,114,110,+97,108,66,58,224,39,1,3,83,111,109,101,224,35,0,98,85,137,52,96,+215,123,187,132,139,64,227,101,190,168,245,0,52,177,120,70,145,202,54,1,+95,52,69,188,64,59,193,247,130,123,0,53,129,123,99,246,164,74,1,95,+56,70,139,2,95,56,55,119,102,85,93,96,55,171,225,164,36,163,16,1,+52,57,182,128,168,3,224,22,3,98,170,224,22,9,97,202,224,22,9,174,+67,160,137,160,20,105,223,2,95,51,48,71,3,1,53,56,96,154,185,159,+128,19,0,54,96,19,0,54,224,19,10,0,55,180,237,224,19,4,131,60,+224,19,5,96,142,1,95,56,66,154,0,58,96,242,9,10,65,32,105,115,+105,110,116,32,58,96,20,71,48,0,51,64,11,130,105,149,25,0,58,96,+75,138,183,103,140,64,110,234,198,1,96,145,226,135,2,82,170,1,95,56,+116,122,3,95,56,54,54,160,124,64,11,0,55,224,11,0,1,51,49,224,+11,0,0,58,96,6,129,164,145,75,66,93,127,134,243,131,4,131,50,84,+246,134,150,105,142,132,202,194,166,224,15,7,96,92,240,22,1,0,95,69,+174,128,89,64,141,104,101,0,54,130,32,2,80,32,58,96,16,224,198,3,+0,50,96,198,140,202,99,197,192,147,96,210,160,11,224,81,0,0,58,96,+6,227,78,37,128,92,131,78,96,11,0,58,96,6,227,78,64,4,65,115,+121,110,99,227,83,12,64,220,192,171,0,75,97,119,0,80,64,248,0,57,+224,104,2,13,115,116,97,99,107,32,111,118,101,114,102,108,111,119,137,188,+224,33,5,3,104,101,97,112,224,32,5,224,33,7,9,116,104,114,101,97,+100,32,107,105,108,241,185,0,224,33,6,5,117,115,101,114,32,105,64,193,+3,114,117,112,116,167,5,193,30,98,66,161,30,134,160,64,6,225,30,60,+225,26,18,130,220,1,80,32,67,164,106,98,67,133,226,24,2,0,53,70,+192,1,56,53,106,60,130,24,67,172,194,24,192,11,66,24,96,11,0,58,+96,6,225,108,1,2,85,32,83,200,250,252,23,1,202,83,252,16,2,228,+161,0,254,137,1,0,85,225,163,7,19,82,97,116,105,111,90,101,114,111,+68,101,110,111,109,105,110,97,116,111,114,161,67,224,43,8,64,34,1,114,+109,129,7,224,32,13,6,105,118,105,100,101,66,121,64,79,192,36,224,151,+6,65,132,224,151,6,67,160,224,74,8,11,76,111,115,115,79,102,80,114,+101,99,105,115,193,94,224,38,10,2,85,110,100,226,60,3,224,33,10,0,+79,226,93,4,64,0,162,27,129,126,130,27,96,11,0,58,96,6,226,27,+61,3,114,105,116,104,226,27,12,65,250,250,68,4,102,60,9,10,65,32,+99,97,116,99,104,32,58,102,96,104,241,100,111,240,226,8,1,56,53,198,+15,244,77,6,136,71,246,112,0,0,58,118,80,229,128,2,64,55,250,171,+4,0,56,82,73,104,25,92,159,0,56,70,63,2,58,56,53,130,186,224,+201,1,96,223,4,97,99,116,105,118,83,95,0,58,96,38,128,52,93,50,+64,123,0,58,64,63,128,178,113,216,3,95,56,52,52,96,5,0,54,96,+27,197,60,1,95,56,78,93,1,116,111,96,86,64,24,129,8,77,103,64,+24,165,65,64,58,160,46,73,186,113,121,2,56,49,50,64,61,64,253,0,+51,137,207,125,12,2,95,56,52,97,10,1,58,56,77,152,225,83,5,64,+25,96,165,250,218,0,0,90,169,230,102,70,84,66,64,0,0,58,96,85,+245,242,0,236,204,0,64,8,77,155,0,58,96,41,251,207,1,0,56,84,+50,104,72,115,155,96,231,0,55,157,159,245,255,0,5,55,53,57,32,95,+55,153,108,0,66,250,14,4,0,55,70,41,248,198,1,225,188,1,246,208,+5,115,46,96,237,0,55,70,121,246,21,0,96,81,105,241,238,112,6,3,+76,111,97,100,76,14,11,115,97,118,101,100,32,99,97,99,104,101,32,66,+114,243,182,8,192,150,102,188,205,160,224,159,7,2,58,56,51,225,206,0,+209,55,176,101,0,67,96,11,1,95,55,136,63,140,101,1,51,54,202,168,+207,222,122,204,171,72,234,196,0,0,55,105,28,128,23,144,44,64,44,64,+24,79,125,96,131,96,40,125,237,240,222,2,203,148,224,73,0,235,3,4,+71,235,83,206,225,11,1,249,153,2,132,118,128,64,242,200,1,249,169,0,+252,233,1,180,74,128,94,192,91,1,95,56,247,64,12,65,179,224,40,6,+131,111,128,41,161,1,97,204,0,55,137,42,212,95,0,51,146,4,224,0,+1,1,95,54,106,255,128,96,255,39,1,224,141,7,75,254,64,7,70,25,+110,73,1,95,56,224,73,0,128,49,122,63,224,114,3,193,64,64,253,196,+37,225,162,0,96,198,224,45,2,248,117,8,96,213,248,125,16,9,105,110,+118,97,108,105,100,97,116,101,130,105,182,83,130,107,0,56,75,78,160,0,+192,203,225,49,4,99,212,2,95,56,50,138,128,171,83,226,66,3,96,157,+120,159,176,106,96,220,0,55,110,92,2,95,56,51,138,144,128,0,2,95,+56,51,100,97,66,200,173,250,65,232,68,0,242,142,0,102,101,161,38,111,+187,225,162,0,143,149,98,25,1,95,56,237,46,0,143,223,64,168,145,223,+110,139,0,58,96,104,68,78,67,73,109,97,110,31,159,139,0,58,96,42,+100,20,64,128,131,44,112,58,224,105,4,150,133,192,135,196,3,206,126,80,+144,64,169,96,32,96,55,222,42,224,61,3,100,159,97,108,65,27,0,58,+96,126,100,156,107,67,64,147,96,13,181,231,0,58,96,214,102,206,2,54,+53,32,101,50,131,176,98,79,67,58,0,51,100,179,106,79,0,67,89,132,+175,240,1,95,55,74,66,0,58,97,109,229,27,0,66,160,242,108,0,189,+129,128,225,160,169,64,162,2,95,56,49,66,154,130,100,195,225,0,56,72,+212,0,55,74,46,98,98,128,10,193,12,225,152,0,161,45,134,215,224,2,+1,193,239,196,12,129,96,224,126,0,226,228,1,225,232,0,96,8,1,95,+54,66,117,109,193,161,207,212,174,128,155,96,181,65,2,122,158,224,125,2,+68,46,224,44,1,0,58,65,34,129,3,230,135,0,76,62,230,135,0,110,+18,0,50,77,24,194,42,66,218,208,136,224,178,0,134,200,0,85,161,6,+226,6,1,160,117,133,92,210,142,0,55,71,231,225,39,7,160,45,225,27,+10,225,52,0,225,18,8,78,233,225,18,25,128,73,128,134,233,152,0,0,+64,104,34,216,48,224,34,4,192,110,73,106,224,38,11,110,240,64,31,66,+188,0,54,85,169,102,122,0,56,108,183,160,6,64,165,195,40,160,45,129,+138,103,194,105,197,0,75,146,97,96,9,122,32,65,150,103,63,141,228,107,+1,224,52,0,128,34,224,61,9,96,53,197,158,225,227,15,65,191,99,191,+0,80,68,134,192,226,168,3,193,134,0,90,225,120,6,226,174,0,227,8,+1,160,2,97,27,194,221,102,110,224,80,4,225,91,6,128,38,66,138,160,+167,160,16,160,168,128,28,250,196,0,224,182,4,208,212,224,182,68,226,64,+0,164,139,224,180,12,192,36,101,222,161,148,224,181,18,192,14,96,5,96,+234,248,59,1,0,58,96,64,228,102,5,224,178,0,168,121,229,47,0,159,+75,229,91,2,1,53,55,162,95,198,216,0,56,70,74,226,105,2,160,6,+134,220,224,89,2,118,33,128,114,225,23,6,192,114,224,227,1,234,22,1,+224,11,0,160,9,160,133,128,207,128,19,228,238,17,225,61,0,225,44,1,+224,200,0,137,95,0,82,220,236,224,75,23,251,201,2,225,222,5,225,39,+1,64,15,137,161,227,132,8,71,255,161,38,1,95,56,152,193,128,24,224,+78,17,227,210,18,224,77,18,165,94,225,188,3,162,171,0,75,104,20,128,+114,129,13,198,6,224,13,19,224,156,1,226,194,1,224,35,1,128,17,128,+243,1,52,54,224,164,18,0,50,224,24,2,96,0,1,95,56,107,120,2,+95,56,50,193,170,226,27,1,224,176,10,224,177,65,162,112,96,158,224,177,+39,136,129,0,50,194,7,128,21,97,111,0,58,98,143,236,213,2,224,195,+17,169,19,128,1,231,13,0,192,8,0,58,96,94,224,72,33,224,234,1,+224,86,1,226,57,0,224,5,1,71,7,192,61,229,148,4,96,49,233,176,+0,233,185,1,225,57,0,224,167,5,160,58,129,26,90,72,227,106,1,96,+16,224,15,0,192,224,224,168,0,224,119,34,192,35,225,39,19,128,26,228,+225,4,192,24,129,69,0,51,173,80,196,81,227,5,16,225,143,2,224,124,+3,224,79,0,224,103,17,0,58,98,188,224,101,34,226,154,3,225,181,2,+225,46,6,160,67,224,24,3,192,152,225,150,76,224,98,10,225,129,60,138,+202,3,35,50,32,58,99,76,87,152,224,249,0,224,180,2,96,2,165,255,+160,13,132,81,160,5,135,36,224,225,1,224,51,1,235,189,0,71,241,171,+7,231,51,4,231,65,7,224,108,3,192,188,169,180,101,247,230,209,8,102,+105,230,222,5,134,214,228,24,0,79,60,0,58,96,248,99,179,176,242,65,+90,144,204,64,148,193,5,69,169,227,217,0,228,202,21,225,228,3,227,217,+0,64,8,167,222,0,58,96,174,168,138,80,166,2,75,50,32,128,153,0,+75,113,54,64,32,183,24,241,143,8,224,81,6,1,95,55,117,165,160,85,+204,222,0,58,64,54,128,10,117,77,87,210,146,36,0,55,88,71,64,60,+249,184,1,109,211,144,70,0,58,110,110,213,55,3,95,51,51,57,206,162,+2,95,56,48,66,153,147,252,96,17,0,58,96,6,179,32,1,95,55,123,+87,0,58,96,37,215,250,78,224,0,55,124,202,1,56,48,99,18,65,160,+142,154,235,253,0,79,153,114,201,65,236,96,171,64,42,96,17,156,117,0,+75,220,147,0,58,111,204,224,197,17,110,186,65,96,96,202,0,58,112,5,+97,98,3,95,52,56,50,95,101,64,207,64,8,1,56,48,129,98,80,174,+13,10,65,32,94,109,100,53,66,70,73,76,69,32,58,96,25,228,17,2,+64,172,142,213,105,178,113,202,92,117,2,95,56,48,160,145,225,87,0,78,+229,75,99,254,161,4,1,64,35,83,179,96,144,1,95,52,146,62,221,166,+64,64,225,59,8,244,74,6,0,58,96,24,65,141,2,55,57,55,64,13,+129,43,207,171,0,83,160,106,0,51,87,43,107,189,173,51,2,51,50,48,+240,127,2,31,92,34,109,104,115,47,83,121,115,116,101,109,47,70,105,108,+101,80,97,116,104,46,104,115,92,34,44,49,49,56,58,49,0,52,177,254,+194,198,228,218,1,130,99,1,95,52,96,196,129,188,157,52,158,249,84,132,+64,209,175,16,96,231,0,58,64,169,160,216,2,51,32,90,224,1,14,233,+139,0,192,0,0,58,97,97,161,121,126,133,179,97,186,140,238,202,5,245,+227,4,64,252,1,95,52,179,166,196,250,64,185,66,10,113,9,96,157,226,+242,8,64,14,98,131,163,147,96,232,96,69,0,58,96,50,226,104,2,96,+249,192,115,226,117,8,128,63,0,58,114,4,226,249,9,0,55,100,124,226,+249,10,115,198,245,131,0,160,18,194,78,239,10,7,0,80,91,133,64,35,+192,224,133,77,238,254,3,160,32,160,212,225,206,1,129,50,230,22,5,229,+187,2,139,214,64,107,64,79,238,241,3,160,73,164,24,96,187,66,138,86,+197,96,113,113,31,0,90,145,38,1,90,32,128,58,158,22,97,22,224,28,+4,73,171,224,28,16,76,146,224,28,16,107,61,224,29,17,0,52,224,117,+4,1,95,53,65,119,96,191,0,95,118,84,158,145,96,6,224,187,1,97,+150,115,100,151,254,1,55,55,66,205,96,161,116,38,128,16,128,149,224,16,+2,160,137,224,17,3,128,125,128,17,96,122,128,80,96,122,96,10,0,58,+96,6,224,122,0,95,252,2,95,55,56,117,222,0,56,119,10,0,56,100,+94,0,56,88,4,3,55,56,55,32,192,70,122,207,128,70,122,206,96,6,+8,10,65,32,98,115,62,61,32,58,96,41,128,13,64,12,0,54,160,12,+0,60,96,26,130,186,2,98,115,60,64,12,130,146,4,98,115,99,109,112,+64,14,196,221,96,2,227,234,0,141,74,98,75,2,64,95,50,79,219,231,+175,9,96,143,96,159,99,35,1,95,53,87,215,96,7,88,154,65,77,128,+229,0,56,193,154,225,161,0,130,161,130,82,123,188,97,104,101,62,96,6,+160,54,161,81,96,45,65,38,225,99,0,86,9,160,17,0,58,96,71,224,+48,1,64,143,0,55,86,18,0,58,96,32,96,233,0,47,65,4,64,19,+96,13,0,61,96,13,129,45,0,73,64,10,129,43,84,243,80,255,69,123,+69,149,0,58,99,165,101,104,1,55,48,227,223,4,0,83,67,222,134,80,+119,144,103,26,64,38,0,50,166,127,100,32,243,35,0,228,38,1,71,152,+65,73,191,70,160,13,196,121,224,53,28,0,90,224,53,2,3,95,51,54,+51,160,118,64,137,129,200,0,95,106,167,121,244,231,17,12,100,153,0,95,+83,131,150,43,0,95,93,32,128,67,0,95,106,86,128,10,0,50,118,76,+160,89,213,0,132,199,128,167,202,94,224,220,15,224,118,6,184,61,96,182,+96,101,129,236,64,6,193,134,129,198,224,85,13,103,18,224,77,2,0,58,+121,61,160,57,64,32,219,147,0,52,230,91,28,0,58,122,19,97,219,1,+54,49,183,36,160,5,117,181,224,11,0,0,53,66,71,89,208,128,43,66,+118,96,31,224,5,8,0,58,96,43,237,228,2,233,224,6,0,58,64,60,+160,69,0,50,64,179,129,173,0,75,96,11,197,225,224,59,2,233,214,11,+97,64,0,58,105,219,252,92,4,3,46,109,104,115,120,69,92,90,122,156,+136,16,231,18,15,102,58,231,77,7,130,115,251,76,0,185,143,166,182,73,+212,165,250,1,95,55,127,76,64,136,191,142,225,174,3,71,91,92,219,160,+105,224,132,3,1,95,55,93,74,225,222,7,248,99,1,233,36,6,0,49,+144,69,225,244,2,253,169,4,1,95,55,93,119,2,95,55,53,65,146,93,+251,160,32,224,109,2,115,204,98,134,224,213,7,226,73,3,96,200,212,186,+170,21,0,55,94,94,0,58,96,65,66,98,14,79,46,100,101,115,101,114,+105,97,108,105,122,101,32,58,96,29,74,35,20,97,100,100,95,108,122,55,+55,95,100,101,99,111,109,112,114,101,115,115,111,114,64,31,194,9,0,83,+107,65,171,165,241,191,0,1,95,51,186,210,243,26,1,225,17,3,129,138,+202,107,224,207,0,0,51,173,238,224,53,1,224,216,5,156,77,2,64,95,+52,64,157,192,215,130,114,0,83,160,215,161,13,225,34,2,67,132,169,62,+255,3,2,74,209,94,231,1,95,50,106,226,227,119,5,191,15,6,94,117,+110,103,101,116,98,64,237,130,189,192,100,228,187,5,1,95,52,70,95,225,+229,0,235,10,1,96,122,0,95,67,124,69,101,180,88,66,6,118,248,224,+35,2,95,145,66,241,5,35,50,48,57,53,49,124,77,2,35,53,53,128,+153,228,97,3,1,95,52,70,229,104,13,127,196,71,61,0,51,71,19,252,+214,2,17,104,71,101,116,67,104,97,114,58,32,115,117,114,114,111,103,97,+116,67,50,224,52,6,0,55,95,188,224,52,10,160,41,0,58,97,53,102,+47,1,35,52,140,157,96,49,239,11,0,228,186,2,0,52,64,24,201,179,+86,78,2,52,55,57,65,38,0,48,253,107,3,9,111,112,101,110,66,105,+110,97,114,121,75,135,128,101,230,2,7,1,95,52,65,101,230,28,0,64,+73,97,230,1,95,52,227,140,0,67,117,203,98,229,5,10,229,1,5,1,+58,55,95,110,102,183,71,74,131,74,75,209,78,119,1,58,55,68,252,130,+248,18,112,101,114,102,111,114,109,73,79,32,94,119,97,110,116,95,103,109,+112,96,32,0,54,228,177,2,192,165,1,95,52,188,88,196,200,224,24,0,+2,51,53,54,228,174,2,4,77,72,83,67,67,222,94,226,26,1,99,6,+240,38,4,227,1,5,83,202,1,51,51,159,221,1,95,52,92,75,0,64,+156,70,2,52,52,56,253,89,4,3,99,108,117,100,193,215,96,0,227,79,+1,224,2,0,224,86,40,3,99,98,105,116,255,19,0,192,184,247,76,3,+96,13,64,250,96,190,224,96,2,2,64,95,55,124,231,128,137,224,1,3,+120,213,224,22,7,241,194,5,224,1,5,225,80,0,229,147,0,125,227,2,+52,48,49,64,4,0,51,100,109,109,243,225,113,9,11,69,88,84,82,65,+67,67,70,76,65,71,83,224,198,4,237,72,4,141,37,128,193,224,5,24,+192,54,228,61,7,96,169,127,26,118,15,255,25,0,105,238,255,17,16,8,+69,120,101,99,117,116,101,58,32,255,8,2,1,49,50,79,159,79,1,225,+19,1,229,228,5,143,63,64,23,166,88,224,136,1,131,65,224,135,4,138,+55,74,157,64,58,185,113,2,95,51,52,65,82,224,141,5,13,99,111,109,+109,97,110,100,32,102,97,105,108,101,100,160,148,192,130,226,240,7,229,173,+1,224,245,15,128,54,96,248,128,10,224,109,5,1,67,32,70,63,7,105,+108,97,116,105,111,110,32,192,0,128,115,160,215,143,79,96,59,4,55,51,+57,32,35,250,46,0,129,41,0,50,142,208,64,227,0,55,103,17,128,175,+224,98,1,0,109,226,188,5,160,0,227,25,10,192,2,1,95,55,87,56,+103,140,226,96,5,224,83,1,2,36,73,78,224,84,5,227,18,4,224,2,+6,224,80,3,224,66,2,2,79,85,84,129,240,1,55,52,132,60,224,151,+0,224,2,10,98,238,224,35,1,128,1,224,193,1,240,116,1,224,29,1,+128,1,225,111,6,15,32,45,119,32,45,87,97,108,108,32,45,79,51,32,+45,73,224,197,2,231,167,2,225,10,1,224,87,1,224,86,20,11,47,115,+114,99,47,114,117,110,116,105,109,101,226,49,1,224,169,8,224,78,14,96,+22,2,79,32,35,146,223,224,59,3,231,242,4,96,60,65,77,118,20,100,+169,224,133,5,224,206,4,224,97,2,224,95,12,224,30,6,225,233,15,8,+45,68,95,95,77,72,83,95,95,224,90,1,224,88,30,0,67,224,238,2,+224,48,19,229,77,5,224,229,1,1,52,50,224,155,13,64,62,210,225,66,+246,96,48,224,190,15,0,39,225,141,0,1,95,55,67,236,128,140,225,142,+6,224,155,2,225,210,13,5,47,101,118,97,108,45,160,73,224,219,5,224,+57,10,1,46,99,160,116,165,16,225,183,5,1,52,50,105,174,227,217,0,+225,208,4,192,87,224,134,2,2,42,46,99,160,120,226,197,2,10,36,73,+78,32,45,108,109,32,45,111,32,227,71,0,224,0,19,2,95,55,52,104,+5,1,58,55,83,165,210,102,237,45,9,232,51,13,64,0,0,58,96,65,+232,102,2,232,105,2,224,45,2,0,58,97,101,210,180,64,254,76,112,72,+85,193,119,197,255,160,45,138,66,0,85,237,190,15,237,192,11,68,46,232,+130,0,126,239,194,94,116,238,160,109,197,64,179,254,217,158,224,19,3,132,+90,224,63,0,128,11,1,95,54,139,110,64,37,116,217,64,73,227,187,3,+0,58,68,205,64,128,171,62,128,23,229,172,0,145,47,64,59,229,142,0,+1,95,56,68,224,98,244,138,53,66,191,241,31,0,118,168,0,64,109,151,+0,49,150,223,96,40,128,69,64,207,96,14,235,23,2,241,54,0,96,107,+0,58,96,6,237,140,9,0,49,88,50,2,95,55,51,65,62,235,45,3,+246,149,3,96,78,102,167,1,95,55,96,197,199,27,0,58,103,94,78,165,+1,32,58,96,18,3,10,65,32,90,72,181,0,58,96,39,76,5,0,115,+118,65,64,30,172,106,236,204,6,1,95,55,92,251,99,0,234,12,13,234,+9,0,163,126,234,50,18,232,187,4,193,236,224,48,18,2,79,78,70,227,+18,0,230,72,4,96,20,130,10,128,175,122,118,162,31,224,8,13,1,95,+55,94,12,2,95,55,50,173,92,231,54,5,232,118,2,66,11,232,5,2,+76,202,84,34,158,147,0,52,122,109,143,130,233,6,0,99,247,2,66,32,+79,225,20,3,12,111,117,108,100,32,110,111,116,32,102,105,110,100,96,196,+3,67,39,32,79,192,128,224,42,3,3,105,110,32,102,172,54,230,52,1,+225,31,3,238,234,3,226,246,2,0,39,238,14,0,2,55,50,55,224,79,+2,6,100,101,102,97,117,108,116,167,147,0,50,235,2,4,164,130,96,22,+229,120,0,231,146,1,192,114,234,216,0,232,91,8,234,42,24,225,46,15,+234,54,17,11,70,111,117,110,100,32,116,97,114,103,101,116,234,59,9,2,+55,50,57,100,122,64,11,138,71,234,83,8,160,0,224,188,1,225,51,6,+225,53,7,64,32,220,112,128,192,144,191,130,69,97,77,128,77,225,61,14,+100,21,1,53,49,86,54,131,210,0,54,78,19,121,174,230,190,15,192,58,+192,167,225,128,1,224,76,44,3,102,108,97,103,234,13,3,133,145,161,200,+224,81,43,2,111,110,102,230,123,4,231,174,10,224,45,1,3,117,110,105,+120,135,68,234,185,2,0,95,116,14,96,0,0,58,109,45,69,23,1,53,+48,107,173,77,151,114,163,68,177,98,228,1,95,53,66,49,160,159,0,53,+116,191,96,11,0,58,96,6,213,3,106,185,114,179,165,66,217,44,224,12,+2,249,239,0,213,7,107,208,149,7,128,10,117,7,96,10,0,58,96,6,+213,7,249,124,0,224,66,1,116,215,114,188,0,58,96,6,198,255,127,2,+66,28,98,89,0,57,85,195,245,35,3,0,52,64,109,156,205,132,149,198,+152,0,95,208,226,83,9,84,220,129,172,96,24,3,95,50,57,57,73,66,+71,142,163,247,224,41,1,86,197,193,138,0,49,98,199,125,162,64,151,72,+118,190,98,134,132,65,244,244,181,19,66,206,250,144,0,103,239,160,2,160,+99,0,58,100,145,231,234,6,244,82,0,64,73,122,76,229,124,0,175,39,+250,94,1,198,133,98,98,224,225,0,180,107,0,53,96,182,128,102,189,185,+99,114,238,4,4,0,52,87,217,192,97,163,124,123,184,104,51,224,44,7,+121,59,186,252,96,44,134,8,1,95,55,96,31,170,21,228,165,2,196,121,+228,119,6,2,67,97,110,69,159,3,112,97,114,115,235,235,1,167,254,228,+225,44,174,29,245,151,1,232,193,0,243,160,10,224,85,32,229,55,16,2,+82,101,97,197,54,0,115,102,65,9,46,32,80,111,115,115,105,98,108,101,+192,22,165,78,206,98,101,56,229,61,4,0,89,97,237,66,9,193,231,64,+151,80,192,97,128,201,54,160,0,229,85,5,224,231,9,221,107,224,163,1,+160,135,0,46,228,96,0,0,58,104,77,184,36,246,75,0,5,52,57,49,+32,95,54,194,114,1,95,55,64,253,115,207,0,53,67,14,116,90,148,95,+65,51,91,245,1,95,55,182,91,0,52,91,136,0,58,97,249,184,63,97,+88,0,55,79,184,240,222,0,0,79,96,104,235,166,2,88,25,0,54,121,+59,224,170,1,2,58,94,42,229,222,1,96,51,225,113,8,2,32,32,102,+70,171,225,85,1,0,52,67,57,141,193,0,53,95,32,161,235,224,59,13,+5,101,120,112,101,99,116,240,138,0,236,47,0,2,55,50,49,227,59,1,+227,148,2,216,82,2,95,55,50,101,7,67,199,0,58,64,44,227,171,7,+235,150,0,206,249,193,183,195,10,128,27,1,95,55,96,21,132,124,163,90,+160,106,180,252,235,117,1,75,176,3,95,55,49,56,134,87,97,56,96,84,+138,251,128,53,64,188,228,53,7,1,52,51,224,242,2,16,102,111,108,100,+114,49,58,32,101,109,112,116,121,32,108,105,115,136,147,224,169,0,0,83,+68,233,160,14,179,53,224,10,2,101,68,160,105,132,225,0,85,139,98,244,+93,1,1,95,52,230,240,0,100,139,192,168,242,120,9,96,255,225,144,5,+210,17,224,83,0,235,76,9,224,26,13,246,242,6,224,90,10,2,108,105,+110,196,81,163,232,224,152,2,177,231,224,52,8,4,44,32,99,111,108,128,+53,224,40,4,238,48,4,6,101,110,100,45,111,102,45,202,47,224,26,3,+5,110,111,32,108,111,99,114,127,196,204,224,28,17,0,58,99,3,119,2,+129,241,225,231,1,173,45,0,35,84,156,71,213,172,71,64,7,193,237,244,+54,0,64,4,0,85,99,92,74,217,0,53,66,155,130,192,165,157,171,169,+129,213,65,241,65,180,250,34,1,226,77,0,224,46,30,96,146,162,215,230,+39,0,224,39,11,132,162,230,34,3,224,39,12,131,114,224,205,4,231,231,+0,0,83,224,82,6,164,246,152,223,192,130,66,162,250,244,4,0,35,79,+150,129,221,0,54,67,97,3,67,32,95,54,78,36,0,35,195,54,224,109,+29,224,69,0,192,108,200,84,224,108,12,128,228,224,77,5,1,67,39,156,+33,0,49,136,171,131,239,1,95,54,88,98,1,64,64,232,96,1,96,52,+1,95,54,121,47,98,2,96,173,71,60,73,52,66,227,169,32,78,249,200,+192,111,92,1,53,49,238,125,0,187,238,160,141,160,228,171,96,225,121,3,+0,54,153,1,128,14,225,150,2,99,202,0,54,130,11,225,30,29,140,175,+193,30,224,109,12,103,80,224,157,1,1,95,54,91,210,1,35,49,68,234,+224,160,15,224,50,14,169,215,192,142,68,149,106,15,224,43,10,0,57,128,+152,70,186,65,249,107,114,3,51,50,50,32,129,254,72,2,0,49,80,244,+225,56,7,100,196,224,19,6,169,74,224,76,11,96,100,1,95,54,104,41,+224,32,12,131,179,2,95,54,54,235,146,0,248,31,0,97,77,161,114,0,+50,102,178,133,136,225,108,18,177,57,1,32,83,225,47,0,229,172,2,167,+198,64,126,130,226,192,105,134,131,71,194,65,20,160,69,231,219,1,163,22,+224,160,0,224,134,24,177,180,166,208,189,144,221,149,234,132,2,69,162,160,+86,128,155,114,7,128,68,236,208,15,229,175,3,64,201,130,218,88,105,161,+141,132,120,65,62,118,194,128,194,65,206,104,159,120,128,113,35,2,95,54,+54,95,32,64,7,0,52,224,134,3,242,67,2,96,36,129,25,128,36,96,+90,128,42,160,48,2,95,54,54,247,35,1,225,24,25,228,152,29,165,106,+225,158,7,96,134,66,56,135,247,85,147,0,51,197,196,225,173,8,228,196,+3,128,150,131,62,96,9,162,25,218,254,200,139,229,171,0,133,224,96,122,+64,98,2,95,54,55,64,249,228,154,8,160,91,232,180,0,136,202,130,69,+96,76,129,9,227,68,8,140,109,0,54,153,54,226,103,26,228,148,0,96,+119,224,21,8,0,55,170,63,195,48,96,21,225,78,3,105,62,197,150,65,+3,224,29,4,214,26,135,25,197,90,0,56,96,254,231,246,5,16,85,110,+114,101,99,111,103,110,105,122,101,100,32,105,110,112,117,241,3,5,200,193,+144,43,97,227,4,83,32,95,54,56,230,91,3,96,220,192,171,130,5,131,+38,102,4,65,21,127,87,0,75,97,190,96,53,0,56,235,163,3,7,73,+108,108,101,103,97,108,32,95,33,7,32,108,105,116,101,114,97,108,168,65,+206,8,0,90,132,98,224,225,7,174,37,109,234,2,95,49,53,79,125,72,+230,132,131,225,113,0,0,95,132,142,226,200,1,162,56,230,211,13,129,88,+97,81,64,187,226,206,16,128,38,225,17,14,99,18,2,95,54,56,64,120,+192,195,98,57,224,67,9,160,195,224,37,37,225,15,10,224,37,2,225,15,+12,242,139,0,129,19,0,54,176,179,225,212,21,224,194,6,224,118,42,225,+134,9,226,180,2,227,94,9,227,54,14,98,76,133,25,227,168,0,167,66,+131,170,163,252,204,120,98,126,66,144,228,92,4,236,151,2,192,105,232,116,+14,107,102,119,108,224,0,2,96,130,1,55,48,207,252,229,19,2,64,3,+196,217,64,5,101,113,128,216,1,54,53,101,74,224,113,2,128,109,229,10,+1,224,48,6,1,55,48,96,29,224,48,11,64,0,65,171,1,95,55,65,+111,70,66,238,249,0,225,32,3,0,55,170,166,225,32,5,225,18,1,0,+55,72,80,225,18,6,225,17,42,192,48,1,95,54,79,114,160,18,96,20,+184,41,192,29,160,52,225,220,15,0,58,96,21,109,254,101,200,197,194,64,+7,77,158,227,129,3,5,67,32,61,61,32,64,136,128,139,250,202,17,104,+219,64,202,96,102,133,223,66,242,65,37,0,58,96,146,108,60,0,80,136,+189,120,128,64,37,242,183,2,225,60,5,198,98,230,104,0,194,98,196,63,+224,16,2,235,28,14,162,238,224,39,4,206,114,224,20,1,64,1,134,177,+224,115,5,129,186,152,104,224,123,2,246,46,1,234,184,5,203,131,230,64,+0,105,14,228,187,2,131,54,0,85,227,63,1,0,85,224,236,2,64,0,+192,43,96,169,193,119,130,106,226,19,27,64,252,218,228,224,172,0,233,155,+0,227,200,1,134,148,128,166,143,96,162,153,130,151,130,67,0,52,98,52,+224,82,2,160,83,162,162,224,50,0,131,25,129,20,224,151,0,224,163,15,+227,208,6,224,138,2,228,65,14,164,60,128,140,160,153,227,35,7,224,84,+0,0,58,97,41,162,79,170,18,136,39,192,237,227,241,0,235,133,1,1,+51,54,71,98,113,122,249,145,3,1,108,101,112,169,224,18,3,3,119,104,+101,114,111,114,224,20,3,1,100,111,224,17,7,0,111,114,229,237,38,0,+161,25,104,240,194,157,128,110,224,50,1,0,105,183,121,77,174,66,74,91,+158,64,55,227,109,0,100,131,156,60,77,129,230,2,7,0,49,83,80,192,+32,246,133,0,160,127,225,79,0,134,213,165,19,0,55,177,251,129,96,0,+58,97,248,155,249,129,25,130,189,224,14,2,64,91,224,14,1,108,55,233,+126,6,165,34,0,58,98,210,161,133,2,80,32,35,96,104,0,80,64,99,+69,86,118,182,225,149,3,141,75,0,80,70,172,242,57,4,2,105,109,112,+180,201,8,58,32,102,105,114,115,116,32,99,72,156,8,105,115,32,97,32,+100,105,103,105,178,72,64,100,67,206,225,226,0,228,43,8,170,154,227,238,+3,228,45,23,224,42,5,228,48,1,228,49,4,228,51,1,224,22,2,228,+28,0,95,253,212,14,226,5,0,228,86,1,96,24,163,66,102,18,160,69,+143,18,65,13,116,227,224,92,3,128,131,160,96,250,201,5,196,165,225,4,+0,160,13,96,33,194,249,128,95,224,107,3,106,26,149,62,227,177,4,64,+188,224,11,0,232,0,4,160,133,224,239,2,224,163,1,228,188,3,137,182,+68,69,96,92,99,171,6,52,48,32,95,54,57,54,80,147,0,53,122,45,+0,53,175,195,2,95,55,48,77,109,0,80,71,217,0,52,224,30,8,128,+13,192,14,136,219,224,70,11,168,235,229,77,2,96,128,224,199,0,224,224,+25,96,0,98,156,244,94,1,192,5,170,181,64,53,96,176,85,237,195,66,+172,146,166,19,87,0,224,36,10,96,140,224,232,21,0,51,126,150,183,253,+224,231,30,96,86,212,140,192,242,229,195,0,85,237,194,134,66,144,95,253,+160,0,225,138,13,192,0,226,72,13,160,86,226,163,9,194,24,226,21,5,+226,170,5,226,19,11,226,21,22,225,63,1,226,34,78,226,29,2,224,247,+0,182,201,64,175,219,1,227,189,1,244,72,19,128,70,128,59,119,70,192,+61,232,83,1,230,228,2,239,46,2,170,193,244,1,15,224,49,1,228,215,+5,228,127,0,128,67,160,73,239,102,10,242,211,14,0,48,135,145,228,165,+0,192,68,251,183,0,232,254,1,96,240,0,80,96,81,66,107,0,53,105,+214,124,76,225,29,1,227,92,13,236,139,7,161,17,70,196,167,33,64,10,+220,234,98,178,229,52,1,225,55,25,227,156,0,225,55,4,205,103,225,55,+128,193,42,225,41,19,129,26,225,24,29,224,185,2,107,146,224,183,41,226,+156,1,224,190,63,96,93,224,190,29,0,64,124,102,226,38,19,229,146,0,+224,24,7,163,187,1,95,54,64,22,227,206,1,160,213,0,58,110,26,152,+210,250,135,6,15,114,111,109,74,117,115,116,58,32,78,111,116,104,105,110,+103,104,61,127,59,64,152,251,77,13,165,5,225,19,0,129,1,235,16,0,+0,58,123,76,122,148,0,65,96,72,237,67,2,75,75,1,48,50,73,55,+0,57,109,16,221,88,129,66,206,24,160,2,96,77,231,62,2,118,135,162,+151,129,132,99,121,68,97,195,135,151,189,82,73,0,50,108,17,151,151,114,+89,0,48,97,176,161,64,224,9,1,200,149,206,41,224,15,6,224,66,3,+224,82,21,192,45,99,158,235,91,7,103,2,0,95,73,73,224,163,33,130,+176,1,53,55,224,35,5,224,51,21,226,13,3,73,197,245,157,0,160,130,+128,149,160,23,76,254,98,81,224,8,0,224,238,46,254,173,0,65,152,230,+21,1,70,158,68,115,64,136,64,198,224,9,3,224,104,35,0,58,70,220,+130,139,225,237,52,0,58,96,142,239,87,2,196,50,114,71,96,31,141,39,+162,133,226,224,0,66,234,205,32,225,212,8,1,49,52,118,231,224,139,25,+224,208,1,225,216,36,224,54,0,227,233,4,241,161,1,64,8,1,95,54,+67,231,230,121,0,233,121,3,65,219,0,57,140,129,134,166,224,116,37,160,+77,224,71,4,128,250,230,250,0,0,55,85,135,192,123,224,60,1,225,18,+37,0,58,72,201,132,52,1,75,51,100,53,223,120,228,15,5,242,153,2,+0,83,194,123,227,89,34,225,131,68,98,60,0,89,228,181,12,225,158,5,+224,169,3,70,129,128,107,118,242,224,178,35,224,179,60,160,172,168,67,224,+172,13,98,80,0,56,224,70,6,98,250,195,2,69,171,165,34,200,112,101,+165,229,210,0,141,204,96,34,82,231,227,47,3,70,88,224,89,1,224,211,+51,162,237,225,128,1,224,129,9,139,74,226,158,0,96,139,224,138,84,224,+68,0,160,114,128,30,199,184,231,126,6,31,68,97,116,97,46,73,110,116,+101,103,114,97,108,46,92,94,58,32,110,101,103,97,116,105,118,101,32,101,+120,112,111,110,1,101,110,175,206,160,76,0,58,99,130,135,76,133,109,226,+81,31,128,184,225,44,0,80,170,77,86,224,242,24,224,55,0,224,230,4,+224,54,39,96,11,0,58,98,83,131,226,0,50,96,37,0,58,100,182,245,+95,0,200,33,81,73,232,26,28,160,13,232,11,0,224,11,3,232,29,61,+166,205,66,240,176,158,102,219,174,240,232,60,8,103,6,232,78,64,225,3,+151,93,185,225,4,88,225,5,20,64,38,195,248,170,24,104,130,224,177,1,+225,2,61,234,36,73,108,49,137,134,231,150,34,224,68,21,1,57,51,224,+69,46,0,90,134,159,234,24,0,96,44,224,146,37,234,171,48,236,210,0,+224,129,7,224,77,38,224,129,55,0,58,108,145,204,240,231,36,1,64,28,+232,116,14,2,49,54,53,224,77,0,224,125,34,205,253,231,151,5,234,95,+3,234,110,2,137,104,232,228,1,224,110,62,225,238,46,192,75,224,238,57,+204,146,228,206,0,131,179,67,174,236,150,44,224,153,0,228,30,0,96,30,+243,173,1,236,149,0,236,255,1,108,142,143,127,224,9,1,64,83,2,54,+57,52,224,83,1,192,7,0,58,100,67,172,29,236,240,14,98,59,128,22,+160,118,226,59,16,231,180,38,231,113,44,161,103,146,29,135,240,169,2,139,+206,114,16,224,9,1,224,90,24,0,58,97,24,135,193,0,52,232,145,0,+141,83,1,95,54,103,191,0,73,137,239,97,131,248,73,8,159,216,0,83,+69,133,249,168,6,244,124,0,1,95,54,69,85,0,55,233,35,2,2,92,+92,110,105,3,64,25,2,51,51,53,124,227,3,95,54,56,56,90,229,65,+177,126,108,2,52,48,49,64,55,0,51,64,127,186,99,0,95,116,232,112,+178,64,138,144,158,65,252,64,68,99,78,77,184,3,95,54,56,57,163,115,+197,10,160,4,221,118,128,101,161,199,102,63,192,35,96,86,3,54,57,48,+32,182,155,118,96,160,0,97,172,241,185,3,0,48,96,0,128,32,129,130,+192,208,0,89,243,142,0,161,60,96,108,226,197,1,211,175,142,120,225,79,+4,128,78,230,249,0,225,112,8,122,248,224,65,0,97,2,192,19,242,107,+8,248,208,2,130,208,1,95,50,65,40,66,120,1,50,51,98,164,103,240,+96,44,126,169,87,57,0,50,64,195,98,87,158,249,192,93,0,85,226,129,+0,128,7,2,95,54,57,160,94,1,58,54,66,5,105,243,0,85,210,81,+2,90,32,90,97,110,1,54,55,251,192,5,83,157,161,123,98,50,0,79,+159,84,0,90,96,160,129,208,224,88,1,96,90,238,67,0,0,50,66,161,+99,184,0,58,65,161,229,216,0,129,106,79,237,232,213,6,2,95,51,55,+164,116,160,75,87,141,176,115,66,111,148,29,65,17,0,58,66,124,98,242,+2,51,54,53,180,91,156,92,0,58,96,38,251,226,1,96,80,91,226,2,+54,56,54,224,23,3,97,35,128,23,132,82,228,76,0,193,242,165,31,232,+226,3,160,2,78,111,224,17,5,219,52,224,17,2,192,69,224,21,3,246,+44,2,197,124,224,104,4,226,114,0,224,26,0,224,61,1,226,143,0,97,+56,226,35,2,224,33,6,188,81,225,90,0,192,2,160,23,224,42,4,224,+21,0,192,147,67,114,192,64,224,19,2,160,187,228,73,11,224,84,1,169,+255,224,87,3,224,84,8,230,13,0,225,99,1,128,1,195,89,163,233,227,+112,2,224,121,11,250,221,1,96,36,161,18,224,172,28,224,30,1,128,35,+0,54,94,26,0,35,165,123,131,157,96,43,224,12,0,158,190,224,23,0,+224,0,1,224,73,13,98,111,224,47,6,132,80,225,37,4,130,11,96,177,+70,190,128,186,213,190,129,215,96,20,2,95,54,56,147,190,0,66,79,201,+77,149,192,124,161,30,2,95,55,49,118,165,96,125,64,134,101,82,224,110,+0,226,77,4,193,108,225,142,2,226,88,3,225,145,13,225,68,11,226,62,+0,224,53,27,230,87,0,224,53,36,165,87,224,106,38,249,94,5,226,10,+13,197,144,225,184,11,161,171,225,218,4,1,95,54,157,52,129,211,225,91,+2,224,32,2,64,60,128,32,224,237,0,224,93,12,240,123,6,13,98,97,+100,32,115,116,114,105,110,103,32,103,97,112,144,102,227,185,4,101,115,0,+39,69,116,96,73,2,56,32,64,224,60,1,18,117,110,116,101,114,109,105,+110,97,116,101,100,32,67,104,97,114,47,83,128,74,6,108,105,116,101,114,+97,108,96,78,135,135,225,69,2,64,15,225,170,24,224,46,30,161,12,224,+92,31,161,156,227,6,2,106,105,225,38,9,106,9,152,200,225,142,64,107,+181,202,77,210,58,210,146,128,5,135,9,2,58,54,56,137,96,232,185,0,+224,250,12,64,49,64,115,199,2,99,166,64,7,64,24,0,58,96,14,199,+96,225,243,5,12,66,97,100,32,92,92,32,101,115,99,97,112,101,129,242,+130,218,225,52,13,171,37,224,33,17,191,66,224,32,18,104,21,224,99,19,+87,114,224,133,22,101,113,224,33,20,164,185,224,33,18,224,135,23,66,222,+224,66,21,0,50,225,12,23,104,2,66,131,118,179,64,29,253,130,8,134,+60,101,2,128,34,116,168,64,8,168,70,74,52,0,49,98,141,0,54,64,+42,0,67,94,84,160,17,255,74,0,133,126,129,251,74,198,72,67,108,30,+201,157,91,246,66,23,64,5,128,71,130,29,228,160,1,96,114,76,187,156,+32,64,204,64,75,133,155,238,137,6,100,204,133,180,98,234,228,217,0,192,+26,224,23,2,7,95,54,55,57,32,95,51,53,131,26,164,75,0,79,162,+173,100,72,169,194,96,143,97,80,107,104,131,113,224,162,1,224,101,3,145,+107,224,94,9,224,82,8,224,81,22,227,46,7,96,29,0,49,131,165,253,+63,1,64,17,0,56,224,16,0,160,33,0,54,224,16,3,231,174,4,97,+242,224,81,0,231,183,0,224,20,11,100,130,224,21,9,66,254,224,21,8,+66,140,224,20,8,106,129,224,63,8,100,143,160,21,0,58,100,1,202,234,+129,51,161,197,198,149,234,45,11,96,17,238,167,2,224,25,0,229,81,1,+128,10,98,249,160,26,64,128,98,178,0,54,239,172,0,0,52,75,40,228,+243,0,170,35,96,70,98,176,236,105,0,96,43,224,12,0,97,85,0,53,+232,123,2,161,166,98,215,224,218,3,139,219,2,79,32,80,228,208,2,2,+78,85,76,68,198,97,157,224,25,5,2,83,79,72,96,25,64,156,224,25,+6,1,84,88,96,25,65,121,224,25,5,0,69,160,25,64,113,224,25,6,+1,79,84,96,25,67,76,224,25,6,1,78,81,96,25,64,172,224,25,5,+2,65,67,75,96,25,64,218,224,25,5,1,66,69,128,181,65,209,224,25,+6,0,83,96,24,65,255,224,24,5,0,72,128,127,66,89,224,24,5,1,+76,70,128,230,225,1,9,0,86,128,50,98,162,224,25,5,0,70,160,51,+225,1,9,1,67,82,128,25,225,1,9,1,83,79,128,25,225,1,9,1,+83,73,128,25,225,1,9,2,68,76,69,128,26,225,2,9,2,68,67,49,+128,26,225,3,9,2,68,67,50,128,26,225,5,9,2,68,67,51,128,26,+225,7,9,2,68,67,52,96,26,101,166,224,26,5,1,78,65,129,136,0,+50,226,11,10,1,89,78,128,26,226,12,11,0,66,128,26,225,11,9,1,+67,65,160,53,226,14,10,0,77,128,25,225,12,9,1,83,85,160,79,225,+12,9,2,69,83,67,128,26,225,12,9,0,70,130,16,82,37,224,25,6,+0,71,160,25,225,10,9,0,82,128,25,70,113,224,25,6,0,85,160,25,+225,8,10,0,80,128,25,225,7,9,0,68,162,172,70,198,233,211,0,224,+0,20,0,58,101,136,238,214,1,230,33,1,196,10,1,54,55,64,75,197,+212,105,48,64,93,2,95,54,55,103,134,1,95,51,98,154,73,43,1,95,+49,139,248,0,58,69,250,64,83,114,146,0,58,96,40,239,211,3,1,80,+32,160,52,196,246,224,95,0,64,92,224,67,0,143,158,114,66,231,150,2,+105,212,224,20,8,65,36,224,20,7,112,108,224,20,8,66,33,224,20,7,+0,49,98,55,224,21,9,66,24,224,106,8,135,235,224,20,5,102,229,0,+67,241,16,5,0,35,71,215,2,64,95,49,97,166,144,115,224,7,55,3,+58,54,55,54,170,46,242,128,0,69,240,185,104,230,19,1,106,226,3,67,+32,61,61,231,46,1,134,28,0,85,64,12,64,8,0,90,249,155,8,198,+116,134,75,241,113,2,237,23,1,103,205,226,109,1,2,99,97,115,170,152,+231,179,5,154,106,171,44,129,203,181,141,96,1,168,138,104,149,137,154,198,+216,166,192,137,144,2,67,32,60,178,188,230,159,0,224,218,7,224,28,0,+128,216,179,232,233,31,3,192,234,224,34,1,240,41,1,160,68,134,216,224,+67,7,224,245,2,226,35,3,192,0,106,5,169,212,0,54,82,140,2,95,+54,55,64,31,175,193,224,104,93,0,58,97,105,140,129,7,54,55,50,32,+64,90,32,85,157,150,225,63,1,64,116,224,18,6,148,15,224,18,4,130,+190,224,18,4,102,164,104,20,192,191,168,190,64,104,1,64,85,117,188,251,+118,1,192,15,224,68,6,67,1,98,81,224,18,1,68,76,160,45,224,60,+1,206,125,224,61,5,64,104,224,80,6,131,167,224,80,4,66,108,160,65,+224,80,7,224,41,6,67,73,224,41,1,194,157,65,70,141,132,2,95,53,+50,126,235,88,201,149,58,64,49,67,64,0,58,96,245,100,195,0,80,137,+220,0,85,96,20,136,230,228,13,7,105,100,228,77,9,228,56,11,142,30,+224,63,7,224,41,11,73,191,228,98,8,0,49,102,160,228,99,44,2,58,+54,55,213,106,133,147,164,40,131,156,116,242,3,64,58,54,54,213,88,246,+1,6,98,222,130,152,248,135,0,2,54,54,56,249,137,1,0,95,86,32,+0,95,243,165,0,82,147,0,51,192,15,0,58,96,41,181,175,0,53,98,+211,82,142,64,245,0,58,64,54,97,139,0,54,153,67,173,36,2,54,54,+53,86,188,119,156,64,81,3,58,54,54,54,198,182,3,95,53,54,51,171,+65,211,12,74,190,0,53,99,39,202,191,160,13,107,10,0,57,68,202,129,+57,170,204,249,135,1,0,58,64,105,160,88,142,60,65,114,235,45,0,129,+36,0,67,184,7,70,200,239,179,4,17,33,33,58,32,105,110,100,101,120,+32,116,111,111,32,108,97,114,103,197,32,164,15,227,236,1,64,247,224,78,+0,144,218,238,20,1,253,105,1,242,9,7,64,97,7,110,101,103,97,116,+105,118,101,128,106,96,96,1,58,54,66,52,132,10,224,48,5,15,105,110,+105,116,58,32,101,109,112,116,121,32,108,105,115,116,96,46,225,207,4,249,+37,7,165,197,65,84,131,30,64,9,231,191,3,66,133,67,85,199,171,128,+20,134,47,80,198,135,219,64,22,225,145,0,96,8,232,89,2,97,3,200,+59,160,101,184,106,66,87,71,207,238,238,0,128,14,239,119,11,112,210,239,+119,5,176,163,239,165,12,135,206,224,45,3,67,2,128,124,131,201,224,54,+11,0,52,185,63,224,54,2,0,53,64,73,1,58,54,66,17,248,16,3,+210,217,205,120,214,232,130,104,161,106,207,177,129,102,122,184,0,56,218,120,+231,170,0,173,92,117,178,242,243,6,175,45,64,37,0,85,190,251,243,35,+0,96,52,128,31,128,86,129,154,181,250,97,220,96,74,250,74,4,225,129,+1,71,221,248,248,1,97,254,120,248,64,73,96,23,128,230,176,109,132,139,+67,151,155,81,251,68,6,128,203,193,225,128,153,98,46,245,162,1,64,102,+229,137,0,243,118,1,243,119,2,97,11,231,38,0,224,5,0,153,89,224,+15,3,66,142,228,186,0,134,49,128,2,151,241,225,162,0,246,198,0,248,+188,9,155,214,128,21,224,48,0,247,124,0,160,54,104,180,224,53,3,160,+202,224,74,8,128,146,229,234,4,207,65,233,91,1,181,187,242,94,1,218,+209,224,126,3,103,131,126,186,225,181,2,252,178,8,224,91,0,230,244,0,+96,74,224,51,28,96,199,165,242,225,42,11,225,176,0,224,46,1,224,1,+3,208,167,128,125,225,56,11,129,53,160,47,240,170,2,197,20,225,65,134,+129,66,224,62,0,225,68,42,66,195,98,204,168,110,64,4,227,22,2,227,+43,13,160,180,230,195,47,0,58,100,98,203,101,228,200,0,3,49,51,54,+32,228,195,0,64,12,1,64,35,132,138,224,38,10,197,79,128,38,197,74,+133,237,224,39,3,197,73,128,39,133,68,230,118,6,8,100,105,103,105,116,+84,111,73,110,134,112,64,218,244,244,9,224,16,0,180,254,134,250,161,13,+224,49,27,96,176,224,49,21,96,39,96,255,65,33,0,54,225,33,0,1,+95,54,79,89,96,9,0,49,78,83,65,84,1,49,49,65,84,0,48,224,+198,2,10,92,34,108,105,98,47,68,97,116,97,47,89,57,9,46,104,115,+92,34,44,49,57,49,58,113,17,97,124,108,236,106,207,95,134,78,95,64,+135,226,48,0,245,237,18,98,206,224,200,2,96,161,136,125,2,95,54,50,+73,46,1,53,51,101,127,135,218,2,79,32,67,69,151,64,54,144,179,138,+40,160,22,103,80,145,27,224,23,4,74,118,107,135,224,21,4,64,241,98,+118,179,89,128,42,224,19,255,224,19,195,0,51,98,90,224,81,58,0,51,+224,241,150,224,159,151,224,19,255,224,19,37,115,217,160,21,0,49,224,81,+50,69,5,96,19,0,52,182,116,224,81,45,0,52,183,135,224,61,20,109,+217,0,52,183,229,224,83,16,226,175,0,0,49,107,169,224,83,7,1,52,+48,229,220,3,224,21,1,150,145,224,189,25,224,127,4,224,63,1,184,19,+224,43,6,183,82,224,43,7,224,151,11,225,83,13,224,63,12,183,61,224,+107,7,224,85,22,226,35,40,0,52,72,133,225,19,29,224,41,3,228,47,+20,224,83,28,129,231,0,51,225,81,11,224,187,33,225,99,31,224,19,2,+220,243,186,225,224,247,26,224,39,70,224,19,142,230,1,171,224,179,0,225,+123,51,0,49,120,213,224,61,7,147,238,224,83,47,224,19,255,224,19,88,+122,59,224,201,178,228,141,0,3,50,49,53,57,64,8,160,23,226,113,20,+0,51,189,116,224,41,6,2,49,53,56,227,7,2,227,207,20,1,51,56,+225,55,2,226,243,1,229,79,12,1,49,52,224,65,2,227,9,92,65,8,+224,41,28,229,223,11,83,236,128,19,189,226,96,21,77,222,96,21,92,3,+224,82,3,64,35,0,35,123,115,224,83,7,0,49,231,107,3,64,42,102,+177,152,52,160,21,65,99,127,242,238,76,5,65,212,64,59,238,52,5,224,+88,1,224,65,2,224,173,1,225,79,82,224,19,130,80,242,129,4,0,49,+226,129,2,226,171,20,1,49,51,224,20,1,226,126,11,64,60,97,197,228,+12,4,97,154,145,18,117,97,192,64,64,128,80,187,225,156,5,95,198,225,+135,228,224,19,91,75,67,225,24,255,224,19,255,224,19,9,86,156,192,20,+233,103,131,241,17,255,224,19,255,224,19,255,224,19,159,67,191,0,51,120,+225,88,52,224,41,0,0,57,119,233,128,24,2,49,52,53,233,227,3,126,+39,96,70,224,24,6,232,180,1,224,23,5,1,55,50,64,100,0,55,159,+12,1,55,55,224,26,3,104,80,168,126,224,125,2,1,50,48,228,226,11,+64,145,107,100,2,35,54,48,104,179,160,23,0,52,120,172,224,23,9,0,+51,96,119,225,224,247,224,19,255,224,19,255,224,19,255,224,19,255,224,19,+175,237,54,1,3,49,53,50,50,242,223,182,224,19,255,224,19,255,224,19,+243,99,216,138,120,245,191,3,74,93,138,41,224,21,7,224,43,13,224,65,+31,244,242,0,224,21,3,224,151,0,224,20,45,75,33,224,127,8,85,103,+224,171,36,224,21,13,149,94,224,129,6,128,20,0,52,64,49,224,151,8,+224,20,2,94,88,75,241,64,21,249,183,2,245,114,1,224,43,7,224,108,+18,0,57,247,26,3,64,65,224,43,17,0,50,75,136,224,152,9,224,20,+2,224,108,1,1,50,53,224,65,12,0,53,224,174,2,224,218,12,1,50,+57,248,35,0,3,49,53,48,51,224,91,2,246,80,2,1,55,54,225,77,+3,224,23,1,0,53,224,160,3,226,16,0,0,53,236,146,2,0,52,97,+122,98,61,247,47,3,0,51,76,122,226,192,7,0,56,85,179,0,35,120,+124,1,35,53,226,216,3,1,56,54,64,69,97,165,0,35,237,109,3,64,+11,227,26,18,2,49,52,56,224,182,11,1,55,54,77,163,224,22,8,3,+50,49,52,53,224,205,2,237,2,61,1,49,53,246,52,3,224,107,3,0,+57,224,131,13,0,53,225,105,12,64,23,224,155,2,224,115,11,224,175,11,+65,78,130,6,1,49,54,231,233,255,224,19,255,224,19,255,224,19,211,251,+253,31,229,140,11,3,51,49,48,53,252,255,11,225,107,255,224,19,168,251,+45,255,224,19,7,1,49,51,232,69,21,224,19,101,227,114,255,224,19,255,+224,19,83,0,49,253,15,40,2,55,48,54,234,135,3,253,79,91,230,155,+11,224,39,0,1,56,52,235,95,4,235,179,31,227,100,200,2,56,52,54,+238,239,4,224,23,2,122,138,224,23,10,236,15,3,224,23,3,0,48,224,+23,14,239,187,12,2,56,52,53,224,119,14,236,175,4,224,23,3,0,50,+238,144,2,238,73,1,0,56,238,51,3,226,86,91,224,19,60,0,57,225,+115,14,239,161,4,192,23,3,55,48,55,54,237,243,12,224,108,30,2,56,+52,54,238,206,12,224,43,2,226,215,11,230,220,60,2,56,53,49,225,183,+3,79,162,224,44,9,1,50,51,113,103,143,191,1,54,52,224,170,2,0,+50,79,186,124,255,0,64,124,185,224,24,0,0,55,64,48,80,11,224,23,+6,0,57,64,121,82,207,2,64,35,55,252,245,2,144,237,64,89,224,22,+5,64,69,66,63,224,21,4,80,214,110,252,224,42,4,1,55,55,64,67,+0,53,96,90,0,49,253,81,3,1,50,48,64,48,96,229,224,188,4,1,+50,56,112,101,0,51,224,24,9,1,49,57,105,83,224,25,9,3,51,49,+52,50,65,138,113,76,1,35,54,64,100,2,75,32,64,224,0,255,224,0,+255,224,0,136,1,58,54,82,255,12,10,65,32,83,39,32,95,49,52,49,+32,64,95,102,37,9,67,32,95,49,50,55,32,95,49,51,99,53,100,244,+1,58,54,83,160,16,10,65,32,66,32,89,32,64,66,32,66,32,83,32,+85,32,80,64,55,2,55,32,64,128,5,64,0,1,67,39,64,27,1,67,+39,64,83,0,66,64,18,64,16,2,67,32,64,192,41,192,17,96,32,1,+80,32,128,13,7,95,49,48,54,32,64,85,32,99,52,2,85,32,65,163,+59,1,58,54,84,204,192,115,128,80,64,119,3,64,66,32,85,96,165,0,+55,70,139,224,87,0,64,85,96,124,3,32,64,67,39,64,97,0,64,224,+198,2,132,92,2,64,64,64,128,52,96,92,0,48,96,92,2,67,32,83,+224,239,3,131,216,224,20,7,68,159,224,20,8,0,54,68,8,224,20,7,+0,52,68,3,224,20,8,64,114,224,20,7,0,53,68,39,224,83,8,64,+166,224,20,8,224,125,11,85,104,224,20,8,100,129,224,20,8,224,125,11,+77,4,224,20,9,65,73,224,251,8,225,16,11,0,51,224,188,11,0,52,+224,167,12,224,83,11,0,49,69,47,224,21,10,224,148,11,104,88,224,20,+7,1,56,55,106,7,224,22,8,0,54,225,85,12,1,56,53,224,196,12,+1,56,53,225,215,12,2,56,55,48,64,45,99,21,65,80,5,66,32,95,+52,52,52,98,105,65,157,227,45,2,65,131,2,95,54,52,64,114,3,64,+64,95,49,75,95,224,7,183,3,58,54,52,57,132,20,97,21,64,241,1,+95,54,161,195,1,95,54,66,53,31,102,114,111,109,85,84,70,56,32,34,+33,92,34,35,37,38,39,40,41,42,44,45,46,47,58,59,63,64,91,92,+92,93,3,95,123,125,34,64,79,0,58,97,24,99,97,6,95,50,57,48,+32,64,83,67,243,1,83,39,67,186,0,60,199,215,224,19,7,162,0,224,+19,4,96,124,100,70,3,67,32,61,61,192,17,1,95,49,120,95,1,85,+32,192,191,224,10,3,0,67,164,97,192,66,67,1,224,30,1,224,40,2,+224,128,8,130,16,224,61,5,66,128,224,61,12,224,149,5,64,19,224,149,+9,65,7,0,55,225,81,9,131,147,225,81,7,10,36,43,60,61,62,92,+94,96,92,124,126,193,67,0,54,225,67,19,72,144,225,47,7,104,210,224,+153,4,96,17,225,47,20,0,83,224,241,6,67,91,224,30,1,224,230,5,+66,237,224,230,13,0,53,198,77,101,163,67,86,133,149,101,152,230,86,5,+132,148,0,64,65,9,65,93,97,10,68,62,105,193,1,58,54,67,110,97,+49,160,150,101,213,0,66,160,90,192,72,0,51,68,2,225,59,1,5,83,+79,85,82,67,69,97,54,160,118,134,87,1,64,95,139,159,64,20,6,95,+51,51,53,32,95,54,100,103,5,66,32,95,53,55,55,65,130,64,29,3,+95,52,52,51,64,11,230,199,2,224,147,4,96,75,160,181,0,58,96,180,+102,152,102,154,68,18,192,159,70,119,96,8,166,125,70,194,107,58,96,37,+70,193,64,5,0,80,102,163,0,79,96,203,0,54,69,75,224,198,1,18,+85,110,99,108,111,115,101,100,32,123,45,32,99,111,109,109,101,110,116,96,+211,138,81,129,233,71,89,135,131,128,7,225,37,0,0,83,230,244,6,123,+174,96,249,193,143,192,47,225,146,10,98,147,231,195,0,128,251,96,159,123,+165,161,165,4,56,48,32,95,55,107,192,161,247,224,147,39,192,101,224,146,+28,0,49,108,92,224,147,23,2,49,55,52,224,148,14,64,85,192,97,130,+62,232,22,14,224,46,30,67,23,224,187,0,224,231,4,224,84,4,226,110,+0,224,175,5,192,156,192,24,1,95,54,102,80,224,16,4,224,192,0,168,+168,0,58,96,24,7,10,65,32,85,32,66,32,90,66,54,129,100,1,95,+51,126,152,128,177,2,95,53,50,194,167,225,163,11,0,58,96,86,96,67,+193,102,128,49,67,35,0,52,192,44,131,48,67,87,167,134,224,71,2,125,+137,67,248,96,4,64,80,201,60,105,147,192,85,224,154,4,160,99,224,73,+5,64,59,65,11,163,60,142,175,2,64,64,80,70,120,67,7,229,38,6,+168,186,229,38,7,10,32,94,41,94,42,94,43,94,44,94,45,165,38,67,+183,234,157,3,74,111,100,162,170,22,96,20,135,182,225,170,3,160,144,0,+54,128,204,65,0,64,26,1,54,51,70,154,133,112,1,95,50,80,169,0,+58,96,137,5,10,65,32,95,52,56,128,244,196,229,230,61,5,96,226,224,+26,12,129,10,224,26,13,97,2,224,26,13,97,110,196,94,229,163,4,113,+207,139,10,65,214,229,238,3,64,25,229,161,10,224,44,13,229,206,14,224,+117,15,101,31,224,72,12,231,148,13,224,44,14,101,151,224,117,11,225,7,+14,65,144,224,145,14,97,115,224,100,12,64,25,224,145,32,97,242,225,7,+33,99,226,224,72,12,102,77,224,117,31,64,37,225,7,13,226,97,14,194,+16,225,35,10,98,207,224,173,13,96,86,224,128,12,131,16,224,173,30,64,+97,225,35,33,104,69,224,72,12,96,25,224,117,31,232,112,15,224,118,2,+225,34,5,195,78,224,145,10,226,189,16,234,82,14,224,44,14,226,189,16,+224,45,12,226,134,15,225,200,15,96,164,225,253,13,96,58,224,26,13,98,+144,224,245,13,99,60,224,154,12,226,244,15,224,44,12,226,216,15,224,117,+14,64,39,224,72,13,226,244,15,224,44,12,226,160,15,225,7,14,98,115,+224,144,13,99,31,224,99,12,226,215,15,224,44,11,226,186,15,224,116,13,+99,174,224,70,11,226,212,15,224,43,11,226,155,15,225,3,15,194,10,224,+25,9,198,159,224,168,9,99,52,224,124,11,226,235,15,224,43,11,226,233,+16,224,114,12,226,150,16,226,149,35,226,148,16,228,28,14,225,0,16,226,+174,16,226,173,36,228,24,35,229,77,16,73,59,2,51,48,54,200,136,0,+58,96,6,233,25,6,103,110,243,184,6,1,95,54,96,76,0,58,108,209,+233,73,7,96,109,0,54,86,188,0,58,96,38,211,247,64,43,1,95,53,+105,16,74,163,0,54,169,113,224,17,0,1,64,35,73,6,64,52,138,67,+238,137,15,238,116,8,224,221,12,225,0,26,0,58,96,171,160,190,75,221,+127,175,1,49,55,99,5,0,54,136,175,0,54,68,185,0,58,96,244,224,+146,2,225,138,25,0,58,96,63,224,197,22,227,76,9,224,18,6,114,75,+226,176,25,224,10,13,240,92,7,224,51,4,225,6,4,65,226,193,197,96,+240,225,207,1,74,203,1,49,49,75,170,1,48,32,235,22,1,25,92,34,+108,105,98,47,68,97,116,97,47,67,104,97,114,46,104,115,92,34,44,49,+57,54,58,49,143,21,1,95,54,137,44,0,73,130,234,3,95,50,57,51,+140,3,235,158,0,107,2,237,77,0,1,95,50,89,10,96,5,1,35,57,+102,149,128,11,98,35,96,161,0,54,139,20,1,54,50,79,59,73,66,0,+58,96,98,2,10,65,32,185,26,64,54,0,35,186,33,65,73,217,171,0,+52,161,254,3,35,49,52,56,252,9,2,79,87,137,20,224,46,4,121,93,+121,240,224,21,3,64,90,96,67,0,50,116,120,192,43,224,89,0,224,19,+255,224,19,206,0,52,226,33,4,224,81,50,66,115,224,241,147,224,159,151,+224,19,255,224,19,27,225,203,51,212,73,2,35,53,57,71,151,224,21,7,+0,51,103,167,224,103,38,224,39,11,229,155,1,224,19,1,71,130,224,59,+17,121,93,224,61,18,224,163,1,111,248,224,21,7,2,56,53,49,101,243,+224,87,7,0,50,123,13,225,57,58,224,59,11,0,53,225,13,50,225,73,+51,224,59,1,109,7,160,21,225,95,11,225,53,1,224,121,21,224,39,71,+224,19,131,224,179,0,1,49,53,72,128,224,181,158,224,19,11,226,31,11,+225,145,31,226,131,31,224,19,255,224,19,87,225,143,171,77,220,224,19,7,+66,147,64,14,2,35,50,49,142,32,224,23,2,224,43,7,229,47,11,224,+163,71,227,15,0,3,50,49,53,54,230,41,11,64,23,224,167,2,224,23,+4,230,131,2,224,23,0,0,52,116,105,224,21,9,224,135,6,97,3,1,+52,48,224,43,2,225,1,0,2,52,48,51,224,179,10,1,52,48,76,210,+224,87,7,1,56,52,120,195,192,23,226,37,0,224,89,4,224,45,4,224,+203,2,224,91,1,115,104,224,45,10,237,40,3,224,23,2,225,17,13,2,+56,52,54,116,166,224,93,9,229,71,2,225,17,1,118,7,224,67,22,225,+109,2,237,180,4,224,47,4,224,139,2,225,67,1,224,93,3,224,137,0,+3,50,49,52,57,225,45,2,224,139,2,225,91,2,224,67,2,224,183,2,+0,56,224,67,2,0,53,225,247,2,224,45,1,122,56,224,113,7,64,159,+226,37,12,224,45,3,225,181,0,65,89,224,45,24,224,21,0,0,49,126,+57,224,21,2,130,83,126,91,224,135,7,154,134,160,21,231,249,0,0,52,+224,65,4,225,224,3,233,28,3,224,23,3,225,156,4,0,54,239,14,0,+1,49,54,226,132,3,228,171,31,224,39,11,64,19,111,140,233,137,4,0,+52,228,74,0,112,37,224,152,2,96,43,0,55,224,242,2,64,64,96,165,+239,184,4,66,130,128,64,0,54,226,118,6,124,98,224,42,3,228,181,1,+225,255,3,225,95,0,158,31,160,21,228,181,1,121,131,225,48,7,0,49,+227,87,3,224,237,0,81,2,224,42,9,0,48,227,36,11,119,200,225,65,+18,224,19,211,225,4,1,125,219,225,26,9,228,225,11,227,108,12,0,50,+84,71,224,106,9,0,57,224,21,2,230,126,11,230,146,12,64,20,96,78,+226,51,4,83,135,129,172,224,151,6,227,33,1,225,80,121,224,19,191,69,+240,225,24,255,224,19,255,224,19,0,239,179,51,224,19,71,228,128,1,228,+18,2,225,104,191,224,19,255,224,19,255,224,19,223,0,53,70,125,107,55,+1,35,57,233,157,3,0,57,74,45,0,35,122,22,2,35,54,48,235,39,+3,0,52,78,199,224,23,10,0,55,72,65,126,192,233,231,5,0,49,250,+170,2,1,50,53,234,23,13,1,50,53,238,14,12,3,49,50,52,56,234,+180,13,2,52,56,51,224,215,11,2,50,52,56,224,71,14,233,116,13,1,+50,51,235,63,7,96,23,2,55,48,53,124,138,225,75,19,125,235,160,45,+0,54,236,230,3,224,237,0,0,55,157,106,192,92,233,59,0,2,55,48,+55,236,95,3,0,49,65,45,225,231,88,224,19,255,224,19,255,224,19,255,+224,19,255,224,19,255,224,19,71,250,150,1,244,54,3,250,172,11,225,65,+255,224,19,255,224,19,255,224,19,139,74,41,107,51,246,64,5,234,255,0,+224,21,7,224,43,13,224,65,31,246,151,2,224,150,11,224,20,44,74,189,+224,127,13,64,230,2,35,49,52,234,161,2,64,64,0,51,96,21,0,55,+235,21,2,118,153,64,21,1,50,48,64,93,224,43,2,128,21,0,53,224,+130,6,128,21,0,50,235,41,2,224,43,2,224,87,6,225,47,35,224,197,+19,224,21,2,241,73,1,235,123,4,224,21,0,0,52,250,99,4,235,146,+1,224,45,3,251,237,0,224,110,25,224,64,1,245,194,3,237,9,1,224,+86,2,1,51,52,225,224,0,0,53,247,140,3,97,96,98,13,245,240,4,+244,46,11,0,56,120,164,119,202,1,35,53,226,167,3,1,56,56,89,233,+64,96,237,223,5,248,129,1,224,45,2,224,157,0,3,50,49,53,56,246,+142,11,64,23,0,51,224,138,2,227,45,30,224,19,11,246,73,11,255,224,+12,225,161,1,224,120,61,224,19,255,224,19,255,224,19,255,224,19,119,228,+144,11,224,39,11,241,44,11,101,152,146,196,2,49,52,53,252,231,3,241,+165,1,224,24,6,235,129,1,224,48,6,2,48,57,57,235,157,255,224,19,+188,251,93,255,224,19,7,1,49,51,226,230,131,233,24,1,225,65,161,224,+19,255,224,19,167,234,82,32,253,124,91,230,206,11,248,15,31,224,199,0,+70,177,224,180,99,225,165,92,224,160,151,225,165,31,225,144,11,228,238,11,+229,142,52,237,78,11,0,56,90,219,160,21,0,56,238,89,3,95,191,1,+35,55,77,224,3,35,55,55,55,232,253,3,3,50,49,52,53,64,74,142,+73,91,208,192,25,1,49,50,64,65,105,79,160,59,192,24,0,55,64,184,+0,51,96,48,224,23,4,0,57,123,174,96,126,0,55,251,196,3,64,191,+111,20,224,22,5,64,69,66,198,224,21,4,78,188,64,209,224,42,5,1,+55,57,64,163,92,185,91,194,224,25,4,64,69,0,50,96,49,224,188,3,+1,50,56,105,211,111,70,224,24,5,1,49,57,104,32,224,25,9,3,51,+49,52,50,96,51,64,19,1,35,54,64,100,2,75,32,64,224,0,255,224,+0,255,224,0,152,1,58,54,83,112,12,10,65,32,67,39,32,83,32,64,+67,39,32,67,128,5,18,39,32,89,32,64,64,83,39,32,66,32,64,66,+39,32,66,39,32,80,66,222,1,66,32,128,1,0,67,64,23,64,0,128,+43,1,67,39,64,14,160,26,96,11,224,41,1,96,82,224,42,3,192,2,+128,21,224,98,3,64,2,64,134,5,95,52,54,32,95,54,67,191,160,33,+224,101,3,224,131,2,128,85,0,66,64,55,128,33,9,64,66,32,83,39,+32,64,95,53,55,192,63,7,67,32,95,56,48,32,95,55,68,127,96,14,+160,64,2,95,52,56,64,18,64,61,224,32,1,2,95,54,50,84,104,128,+0,224,55,4,101,38,2,64,95,50,82,246,3,58,54,50,51,97,51,9,+83,39,32,95,49,56,50,32,95,54,68,36,64,106,2,54,50,49,192,13,+100,151,4,66,32,95,54,49,160,69,5,67,32,95,49,53,57,224,30,4,+64,74,0,50,96,74,3,85,32,75,52,224,2,1,2,90,32,90,64,6,+160,136,0,58,64,85,64,36,5,95,49,54,48,32,95,83,191,1,95,51,+69,187,1,95,54,83,254,1,95,54,69,27,1,95,54,86,6,3,95,49,+54,56,192,97,2,95,49,55,224,140,1,0,48,64,27,3,55,50,32,80,+160,17,160,216,2,95,49,55,224,145,0,2,95,49,56,224,47,0,3,95,+49,56,51,224,11,2,0,54,224,55,7,129,190,65,171,1,67,32,225,172,+1,129,36,224,27,4,1,49,52,65,30,96,70,0,55,96,241,1,95,54,+116,218,161,79,1,49,56,69,56,128,19,224,83,51,111,218,224,82,5,97,+13,0,56,224,221,2,1,57,48,224,11,0,11,54,49,57,32,64,75,32,+95,49,57,50,32,160,67,0,75,160,8,64,21,74,0,65,117,0,48,97,+117,9,112,111,112,99,111,117,110,116,32,58,96,54,5,10,65,32,115,104,+108,64,12,0,56,96,12,2,105,110,118,64,12,0,55,96,12,2,120,111,+114,64,12,0,54,96,12,128,11,0,53,226,42,1,70,43,98,154,0,49,+112,118,70,165,66,21,224,17,0,70,173,66,127,1,58,54,70,255,1,10,+65,98,229,144,250,2,64,64,80,66,120,80,200,66,8,0,52,64,184,2,+53,48,50,67,42,224,10,1,5,53,49,57,32,95,53,67,208,1,95,54,+86,172,2,95,54,48,66,68,224,6,0,64,215,1,58,54,71,96,64,67,+66,74,0,48,65,37,1,54,49,64,10,119,120,0,85,99,99,5,67,32,+67,32,61,61,199,157,3,95,53,48,53,66,117,64,102,96,36,13,102,114,+111,109,85,84,70,56,32,34,101,111,102,34,98,165,7,85,32,75,32,95,+51,54,51,160,137,0,73,162,186,0,58,96,114,96,200,3,95,52,57,51,+97,227,67,222,0,53,64,88,2,66,32,90,228,112,0,64,30,99,128,0,+53,120,43,96,57,129,125,1,95,49,192,84,2,95,49,56,64,38,64,177,+0,53,72,127,224,249,3,1,54,48,65,90,128,231,64,7,0,56,64,232,+65,2,64,65,0,54,96,191,161,22,96,240,64,39,0,58,96,37,224,97,+14,0,80,96,37,65,139,3,95,53,50,54,225,95,0,3,57,57,32,35,+67,120,64,28,72,139,0,58,96,79,128,99,193,67,225,29,1,4,118,97,+108,117,101,65,31,225,85,7,64,64,0,51,65,134,129,55,66,133,161,46,+64,85,69,140,66,47,132,206,128,5,1,95,53,99,233,0,53,99,59,129,+232,64,67,225,112,0,1,95,49,119,194,0,58,64,234,96,143,1,53,48,+64,26,64,207,129,179,0,95,82,196,224,160,7,2,92,92,110,224,158,10,+64,98,2,95,49,51,224,158,1,99,14,160,159,130,151,226,116,4,225,31,+6,73,214,225,60,1,96,17,73,34,0,58,97,162,129,42,2,49,32,58,+96,31,225,56,15,2,107,101,121,224,151,10,98,139,225,54,0,0,50,225,+55,5,194,102,133,218,96,113,230,89,2,226,116,1,230,133,7,134,197,198,+182,230,29,0,96,68,65,225,134,94,64,24,1,83,39,99,196,1,52,57,+97,31,0,53,99,95,0,53,129,26,2,67,32,79,68,78,96,139,226,208,+17,64,8,164,9,225,140,1,97,219,130,211,0,57,97,172,2,50,32,75,+128,235,132,206,3,64,66,32,85,130,6,225,9,2,96,88,129,161,128,31,+2,90,32,95,74,231,2,95,49,51,128,52,2,64,64,58,65,121,228,66,+2,101,181,68,66,64,102,64,23,2,85,32,83,64,138,71,45,2,67,32,+60,171,91,224,18,6,66,100,98,138,224,18,1,97,67,0,67,65,59,224,+19,2,65,4,66,42,225,193,1,3,84,82,97,119,132,25,224,24,6,2,+69,79,70,160,23,96,24,5,66,32,95,50,51,53,224,31,2,3,123,45,+35,32,96,32,0,67,128,25,226,21,2,3,32,35,45,125,192,59,224,151,+8,133,74,224,150,4,65,167,224,149,6,5,73,110,100,101,110,116,224,152,+12,4,84,66,114,97,99,99,173,128,27,0,65,128,9,225,17,6,66,87,+224,121,6,65,196,224,121,6,65,108,64,93,0,67,166,175,225,154,1,0,+35,102,182,224,23,11,65,204,226,71,1,224,151,1,6,125,32,108,97,121,+111,117,160,180,225,40,2,224,23,4,227,170,0,98,67,64,4,130,189,224,+25,6,224,20,0,225,213,7,224,195,9,227,254,2,3,56,32,95,51,162,+197,224,18,2,0,49,67,247,224,23,0,193,206,67,56,7,48,55,32,79,+32,35,52,54,195,19,105,99,97,204,227,40,3,64,0,0,58,98,250,101,+131,102,186,1,51,51,72,104,0,53,94,91,1,95,53,99,63,3,64,95,+49,50,68,201,96,185,2,95,49,50,69,201,96,11,0,58,96,6,96,58,+1,48,56,96,53,0,55,69,224,1,53,56,134,178,72,202,128,65,1,95,+53,73,161,160,11,94,94,224,11,1,96,76,128,35,0,57,64,60,1,50,+51,96,106,64,17,0,73,99,42,133,76,68,62,70,209,102,176,131,79,3,+95,51,52,51,226,60,2,21,73,110,116,101,103,101,114,58,32,100,105,118,+105,115,105,111,110,32,98,121,32,48,161,154,160,54,70,236,100,143,96,79,+0,85,64,68,4,49,57,57,32,95,127,29,165,191,224,17,9,128,64,96,+61,224,7,0,132,146,164,144,70,40,64,39,132,181,2,83,32,95,157,129,+228,184,0,68,225,2,95,53,56,134,3,125,180,160,42,0,85,64,10,192,+36,235,192,2,236,8,0,1,95,53,69,95,227,9,0,192,36,107,109,160,+5,160,88,164,159,76,32,193,233,66,13,161,228,72,225,133,144,224,0,2,+0,58,97,113,133,14,0,83,140,91,1,95,50,86,113,3,95,52,52,50,+97,123,134,45,201,248,98,157,0,89,161,61,224,19,0,66,174,96,8,64,+63,226,92,4,224,173,2,236,156,5,64,31,103,92,224,28,0,64,238,128,+69,71,107,100,120,102,210,102,200,160,220,66,101,66,117,67,181,0,48,69,+187,192,28,96,241,76,40,112,90,101,247,224,12,0,1,95,50,103,4,103,+176,95,79,0,64,64,220,103,29,97,219,0,58,97,95,226,193,3,0,57,+65,247,0,50,135,219,0,50,75,243,1,95,50,74,15,194,181,96,58,162,+181,160,11,224,138,0,194,187,128,11,104,223,96,12,128,94,0,57,98,109,+64,148,1,95,53,96,129,3,66,32,95,51,76,196,128,42,64,43,134,156,+161,84,129,94,96,7,129,159,129,64,64,11,107,133,192,7,68,197,1,53,+52,99,119,0,55,167,92,65,83,73,61,0,53,109,94,160,6,194,33,96,+26,70,241,64,21,64,59,69,14,2,95,53,55,161,38,64,32,160,49,64,+28,0,53,104,236,192,85,66,144,165,61,2,95,53,54,128,26,132,177,65,+211,137,47,0,83,142,181,128,162,231,251,0,128,33,97,251,98,214,65,124,+2,95,53,54,97,145,160,117,136,14,66,8,226,112,0,137,128,98,97,232,+47,0,2,95,53,56,101,65,192,95,160,163,128,220,160,12,64,158,128,37,+64,253,99,195,139,14,224,197,16,64,39,162,60,96,66,225,16,3,228,17,+2,64,139,165,70,96,8,141,50,3,95,49,55,52,206,189,0,56,115,81,+205,10,1,67,39,67,16,3,95,53,56,56,227,22,0,224,77,3,224,13,+5,0,58,100,27,1,10,65,228,219,9,14,108,97,115,116,58,32,101,109,+112,116,121,32,108,105,115,134,112,129,44,104,121,0,90,64,239,128,200,0,+58,96,8,98,114,224,89,0,0,79,116,144,64,127,0,58,97,13,227,211,+0,133,115,0,75,66,168,64,253,104,146,0,65,96,13,197,117,132,163,207,+253,227,195,1,240,136,0,2,95,53,53,132,215,107,147,65,141,130,204,68,+148,3,10,65,32,89,160,45,170,52,162,184,129,230,192,93,96,70,138,72,+132,69,229,31,0,69,105,224,10,7,64,133,73,133,167,186,140,10,0,49,+109,191,99,92,3,51,50,50,32,169,183,192,116,133,244,240,133,3,128,48,+64,10,128,47,228,73,0,176,102,0,58,101,193,161,39,130,187,1,95,50,+73,236,129,29,132,51,224,27,7,129,71,163,240,2,50,48,55,64,164,64,+113,1,53,55,69,121,224,104,2,64,188,66,49,224,24,8,96,10,1,64,+95,135,69,0,55,68,100,128,33,1,53,55,69,12,192,11,167,106,110,200,+71,166,96,20,100,94,224,20,4,0,58,103,135,133,222,224,170,1,198,178,+129,213,224,2,0,225,103,0,192,11,99,128,2,95,49,54,102,71,230,126,+0,99,61,165,205,129,253,117,244,224,46,0,70,55,224,46,0,160,23,111,+93,168,244,224,65,24,1,53,55,224,64,21,134,211,0,58,64,239,160,218,+96,71,100,23,224,72,17,96,15,231,17,1,0,58,65,67,130,223,166,206,+69,154,135,235,133,34,165,110,0,82,224,22,4,166,127,96,63,227,69,0,+129,92,164,241,161,66,224,41,1,230,241,0,140,227,229,17,2,67,125,105,+39,128,177,98,16,96,49,104,245,64,238,224,159,3,224,82,1,192,76,133,+81,96,66,114,212,69,79,226,202,4,0,58,96,241,230,123,2,226,28,3,+134,121,0,58,105,175,110,75,73,170,132,247,134,14,69,22,2,95,53,53,+109,96,69,165,67,113,99,117,0,54,73,200,128,67,134,111,1,95,53,113,+179,224,13,1,67,114,128,196,131,66,228,136,5,0,49,196,136,64,39,224,+29,0,0,51,71,105,224,29,4,199,55,233,140,6,0,58,96,102,147,172,+229,152,4,1,64,58,96,167,66,19,130,18,234,39,1,233,208,10,234,15,+1,234,88,11,224,48,20,97,126,228,196,5,76,75,232,239,8,132,201,130,+78,234,8,3,98,244,64,97,229,52,1,102,135,97,87,199,15,0,75,100,+183,160,60,227,167,1,226,101,1,160,114,231,22,0,245,250,3,165,67,224,+115,21,224,113,5,224,111,3,224,49,18,203,13,224,0,0,0,58,98,40,+166,41,2,95,53,54,68,212,0,53,165,232,96,16,0,53,167,46,3,95,+51,51,53,66,62,103,50,144,70,5,53,54,54,32,95,50,70,39,165,174,+105,17,96,44,224,155,4,0,58,96,119,245,159,0,112,200,64,59,227,32,+4,64,180,0,85,227,173,0,224,18,0,1,66,39,224,21,3,168,36,224,+29,0,160,165,227,172,0,96,88,198,249,231,132,8,5,102,111,108,100,108,+49,231,134,8,64,173,99,75,0,54,212,47,227,179,0,226,1,3,96,91,+131,16,234,250,1,0,85,66,78,238,135,2,97,104,136,56,235,72,0,192,+189,233,79,0,164,117,128,182,1,95,50,81,210,201,50,101,6,78,198,1,+95,50,81,141,64,0,169,52,235,30,1,235,31,5,128,151,230,207,1,212,+13,128,144,1,53,51,103,219,99,157,64,83,103,25,64,164,96,45,201,110,+132,39,0,58,100,57,99,127,0,73,194,240,136,159,227,60,4,140,48,227,+245,2,233,17,7,64,144,64,79,115,130,128,189,0,64,227,4,0,138,68,+171,33,225,92,1,236,143,10,233,182,5,64,163,136,10,203,57,128,89,199,+6,101,24,0,50,162,246,72,194,192,155,106,15,130,61,106,65,162,84,179,+144,224,46,1,224,102,1,227,35,0,160,155,235,31,1,224,184,3,224,134,+15,107,204,64,169,224,137,8,192,90,224,134,27,224,181,2,225,11,3,224,+73,1,170,219,65,218,0,48,226,226,2,10,92,34,108,105,98,47,68,97,+116,97,47,175,78,96,7,13,114,110,97,108,46,104,115,92,34,44,53,52,+58,49,98,245,0,58,97,249,116,229,0,53,72,155,67,171,0,58,96,115,+162,224,97,148,128,236,240,213,0,98,186,96,23,162,95,98,240,163,253,225,+236,0,64,41,227,206,4,132,156,128,5,227,149,8,19,105,109,112,111,115,+115,105,98,108,101,58,32,120,115,32,62,61,32,121,115,96,161,84,157,224,+221,38,3,57,48,58,54,242,221,0,237,130,2,64,145,226,86,0,227,125,+3,168,96,227,124,2,0,53,96,21,227,184,4,195,81,0,53,95,156,228,+213,0,196,131,224,80,12,168,247,224,80,6,97,176,96,69,97,127,0,54,+229,120,0,98,76,141,213,106,87,159,98,163,179,160,6,208,144,100,13,224,+37,1,64,106,224,14,3,228,40,1,239,57,0,0,58,96,114,163,241,145,+55,231,33,21,166,55,96,172,0,51,228,220,11,64,82,252,241,0,1,95,+51,69,114,234,160,1,131,14,163,23,129,116,153,181,3,64,95,52,50,151,+23,101,175,160,120,200,22,1,53,51,194,142,72,202,162,142,132,215,228,27,+6,129,43,229,119,9,161,154,229,121,8,225,244,15,96,188,64,110,161,159,+230,102,1,99,126,105,70,199,208,226,76,46,224,91,0,226,76,10,224,95,+3,226,76,32,224,80,1,161,159,193,142,247,187,3,129,32,130,58,226,57,+0,100,69,230,69,2,224,11,3,0,58,96,71,1,10,65,77,119,0,58,+96,147,106,83,102,64,111,231,0,52,138,121,108,214,0,52,131,5,145,7,+96,29,85,21,170,81,84,128,96,10,0,58,96,6,230,148,6,192,251,96,+78,151,123,165,1,128,6,0,58,96,80,224,52,27,224,59,2,0,58,96,+139,224,52,20,224,98,2,160,59,0,58,96,198,224,52,27,224,112,2,0,+58,97,1,102,215,134,208,226,149,3,142,162,224,19,0,115,6,166,10,2,+95,53,52,197,34,167,255,101,28,0,53,124,174,230,49,1,97,136,64,123,+135,57,96,86,75,246,73,113,69,12,160,47,198,59,64,65,128,87,194,57,+160,128,134,142,96,18,135,203,145,58,171,249,102,65,96,17,192,118,0,58,+96,7,193,241,99,75,1,95,49,127,32,0,49,67,128,1,95,49,67,154,+1,95,49,67,241,1,95,49,133,3,97,241,131,115,97,241,64,10,0,58,+96,6,3,10,65,32,75,144,130,64,155,64,13,2,50,32,58,96,185,96,+25,111,98,64,208,96,110,64,70,138,47,84,181,0,58,98,108,202,139,0,+52,65,107,64,25,0,53,96,25,161,226,235,139,1,234,236,9,132,99,232,+247,2,192,13,0,51,84,109,132,35,96,238,64,82,160,127,225,103,2,97,+240,218,17,64,15,64,9,219,184,2,95,51,48,71,37,96,86,0,58,96,+6,105,40,2,95,53,50,109,97,130,29,64,128,96,164,64,24,88,146,101,+170,71,83,65,239,67,181,85,217,64,49,224,15,3,64,40,239,49,1,174,+3,130,47,2,95,53,51,98,224,64,94,96,111,255,214,6,96,38,64,67,+85,232,241,28,0,242,205,1,5,95,50,57,54,32,35,69,158,160,43,134,+46,224,46,6,96,36,144,114,64,107,129,196,137,174,246,207,0,243,212,0,+169,198,228,255,2,229,28,1,175,179,100,158,224,250,49,128,13,203,43,134,+74,208,227,224,105,0,67,242,224,105,55,129,16,119,194,241,97,8,160,10,+167,49,224,240,7,96,20,244,211,1,123,244,128,11,233,34,0,224,161,3,+67,226,174,40,224,171,53,233,58,6,31,78,117,109,101,114,105,99,46,115,+104,111,119,73,110,116,65,116,66,97,115,101,58,32,110,101,103,97,116,105,+118,101,32,4,97,114,103,117,109,251,171,1,242,48,5,70,101,240,227,2,+163,84,128,12,65,240,160,177,197,26,70,146,237,132,0,224,46,27,87,255,+160,118,224,236,33,224,10,1,224,234,29,14,117,110,115,117,112,112,111,114,+116,101,100,32,98,97,115,220,122,128,148,113,211,226,199,6,194,189,3,83,+32,95,51,112,246,192,179,225,253,4,224,49,2,194,121,160,83,192,11,226,+133,8,224,70,4,110,154,160,49,89,226,160,124,193,49,128,60,97,79,224,+250,1,97,97,129,50,224,10,2,224,55,2,242,123,2,1,95,49,94,128,+144,40,128,65,149,21,224,92,1,97,125,225,87,2,67,216,244,76,0,224,+222,3,96,7,227,94,82,96,146,227,93,8,163,39,64,116,129,83,128,5,+64,248,1,54,53,196,221,243,129,4,175,230,0,35,71,182,64,0,65,99,+67,105,226,121,1,224,40,7,228,239,0,224,62,13,199,47,224,70,6,160,+38,194,26,226,187,35,0,58,102,12,208,65,237,52,2,125,152,96,136,143,+76,167,192,65,103,64,24,224,245,5,163,100,98,166,198,218,65,9,106,235,+77,109,101,168,160,22,3,95,50,57,57,227,37,2,2,32,37,32,163,1,+224,45,5,64,0,126,3,96,6,65,2,0,58,94,224,199,107,64,136,156,+92,249,241,3,70,215,134,52,226,216,2,194,59,194,154,119,203,225,101,0,+1,95,52,159,28,167,154,198,45,1,95,52,66,174,3,64,95,53,48,103,+44,135,81,252,105,3,130,26,1,95,52,94,43,1,95,53,176,71,2,58,+53,50,242,54,0,0,51,72,70,96,18,0,54,96,18,3,80,32,58,53,+64,199,108,48,3,50,48,32,80,117,31,0,50,76,57,160,229,107,109,125,+17,0,49,104,90,0,50,181,40,2,53,50,50,65,191,66,157,152,39,64,+47,161,7,64,201,0,80,96,19,135,111,2,66,32,80,167,138,0,85,96,+21,135,25,96,123,219,233,198,166,1,95,49,92,57,109,112,0,95,95,216,+0,52,95,147,227,208,1,225,240,0,0,53,75,141,2,95,53,49,97,150,+88,94,73,147,165,88,1,58,53,66,13,226,63,8,107,248,0,48,83,152,+96,94,128,14,97,40,89,28,225,252,1,114,214,97,254,225,209,2,228,242,+0,138,9,115,124,229,164,0,193,208,77,153,90,71,163,169,91,147,97,138,+65,139,97,171,225,219,2,192,18,160,50,104,164,0,49,137,169,0,49,64,+198,0,58,96,219,136,172,135,17,2,95,53,49,128,173,98,197,110,47,129,+3,106,85,97,167,0,58,96,59,225,234,0,128,17,129,233,0,85,65,249,+161,252,64,71,192,89,195,89,224,74,0,132,168,0,56,128,21,128,112,130,+9,129,131,129,121,0,58,96,171,212,138,64,14,193,253,1,95,53,105,224,+97,138,225,63,4,226,215,51,0,58,97,162,236,101,0,131,79,1,90,32,+224,34,1,0,58,96,52,183,13,64,13,194,87,67,219,90,137,64,92,0,+56,64,25,64,98,251,222,1,64,19,119,93,162,21,224,177,2,229,105,1,+224,173,0,161,170,224,25,3,227,205,1,97,222,160,33,226,0,39,225,20,+0,0,95,91,37,97,59,0,95,152,157,0,54,227,14,0,0,58,96,23,+163,55,65,139,224,197,2,252,164,1,195,126,193,113,228,84,0,163,147,96,+71,225,186,0,0,51,101,116,0,58,97,210,65,6,0,50,163,112,193,4,+228,79,11,225,34,40,96,25,227,31,4,224,20,1,97,35,128,110,102,80,+225,39,27,1,95,49,76,152,164,34,77,53,128,10,0,50,97,58,161,41,+203,231,213,18,197,140,230,199,2,189,73,225,196,2,160,177,64,34,255,177,+6,128,186,0,54,166,90,224,51,4,64,15,250,205,3,160,45,236,94,3,+231,38,2,136,198,194,239,120,16,160,0,0,58,96,230,109,77,0,57,100,+247,67,10,99,213,209,216,65,126,80,90,1,49,48,192,0,1,32,58,96,+38,229,117,6,96,92,64,72,0,51,230,146,3,224,174,1,128,164,225,170,+0,225,124,2,193,96,0,57,162,6,64,75,130,115,0,90,71,113,0,58,+96,31,226,104,0,254,136,1,162,90,0,58,96,71,3,10,65,32,73,64,+152,130,100,96,10,130,93,152,181,128,39,227,205,3,1,82,32,127,183,0,+52,95,243,128,133,70,79,1,52,57,209,137,0,90,72,28,64,16,128,255,+160,138,64,45,179,55,0,48,72,66,161,115,67,235,1,95,52,97,118,1,+95,52,95,226,2,58,52,56,199,160,0,89,100,111,99,148,0,56,163,235,+224,62,3,1,95,52,94,234,236,181,3,64,33,243,28,1,79,201,0,64,+72,221,106,35,205,95,193,77,96,41,69,57,224,42,0,0,67,69,161,72,+58,4,50,48,57,53,49,67,116,3,64,35,53,53,78,36,229,1,0,224,+123,3,129,139,104,228,160,20,138,220,82,31,1,52,56,194,40,124,122,1,+51,56,127,223,64,222,230,183,2,21,104,71,101,116,67,111,110,116,101,110,+116,115,58,32,115,117,114,114,111,103,97,116,203,202,69,102,71,36,160,110,+93,183,64,174,224,18,0,65,60,92,137,1,95,52,64,92,79,175,128,24,+203,148,65,72,130,11,134,89,0,58,96,39,99,100,148,0,144,221,66,209,+4,35,49,49,49,52,177,246,236,125,5,29,68,97,116,97,46,67,104,97,+114,46,99,104,114,58,32,105,110,118,97,108,105,100,32,99,111,100,101,112,+111,105,205,96,143,87,0,58,96,244,166,83,125,211,96,19,130,86,6,94,+103,101,116,98,32,58,97,177,98,234,6,55,51,32,79,32,95,52,75,95,+0,79,64,14,0,53,198,24,97,234,255,251,0,225,112,0,2,64,95,52,+89,91,139,250,2,95,52,55,66,242,94,66,224,171,1,6,111,112,101,110,+70,105,108,129,63,225,148,2,0,58,98,99,101,135,66,3,93,224,96,57,+234,3,1,0,51,97,203,200,172,190,46,5,51,56,53,32,95,51,70,198,+96,152,64,3,160,14,161,245,67,19,108,118,164,22,96,6,224,142,1,1,+58,32,206,125,0,58,64,173,226,251,11,126,164,130,251,113,134,128,26,177,+137,225,236,4,129,255,224,34,2,135,114,64,90,180,108,226,247,2,0,52,+91,21,64,88,64,213,81,58,117,87,75,217,224,33,6,0,51,100,213,224,+54,8,132,83,0,52,127,214,1,95,52,181,52,192,122,83,64,0,58,96,+141,96,117,1,95,51,119,113,0,52,65,191,0,58,96,43,65,236,4,102,+108,117,115,104,65,238,191,200,64,128,227,57,1,93,20,161,221,224,224,0,+212,58,244,146,3,122,84,0,83,128,114,64,3,224,131,4,224,13,6,227,+46,7,159,249,1,95,52,115,211,0,52,127,224,227,50,3,95,224,96,199,+130,157,135,87,0,58,96,22,211,108,0,90,132,201,96,51,225,108,0,165,+6,2,32,95,52,75,132,107,71,96,29,64,244,4,99,108,111,115,101,96,+244,223,231,133,38,90,221,2,52,54,56,238,23,0,0,58,96,156,12,10,+65,32,116,111,70,117,110,80,116,114,32,58,64,30,128,50,0,75,64,50,+0,51,97,137,64,40,129,102,3,95,51,57,54,64,67,99,85,64,178,226,+101,1,5,115,116,100,101,114,114,66,105,0,58,97,184,69,193,1,79,46,+128,21,64,87,172,42,160,64,66,58,99,114,224,64,4,1,105,110,160,63,+166,1,96,63,1,105,110,64,62,163,173,1,52,56,163,40,69,227,136,247,+97,89,224,9,1,128,30,72,252,221,25,116,127,251,174,2,74,101,130,98,+0,58,96,6,132,5,0,50,64,101,181,61,0,51,64,11,239,171,3,227,+252,4,0,48,128,100,227,40,3,163,142,230,24,8,64,138,85,209,96,36,+0,52,134,6,0,52,253,69,0,131,189,0,56,69,170,67,73,99,198,233,+16,4,90,159,64,6,174,65,0,58,99,167,182,154,0,80,164,179,129,135,+224,6,2,98,255,188,89,3,75,52,32,58,96,37,100,98,230,57,8,69,+119,166,171,226,180,5,98,41,155,37,207,44,224,55,2,0,51,140,118,192,+192,228,223,0,201,244,0,51,136,20,96,176,226,9,0,11,112,101,114,102,+111,114,109,73,79,32,94,38,162,160,64,31,130,22,2,102,112,102,97,230,+186,210,4,102,112,110,101,119,64,14,129,245,8,94,97,100,100,95,70,73,+76,69,64,18,129,176,96,18,3,117,116,102,56,64,18,223,76,229,166,5,+98,18,0,49,76,135,160,191,128,11,161,58,1,48,49,64,4,0,51,77,+145,4,64,79,32,35,49,76,148,101,246,224,26,10,0,57,198,203,224,27,+8,72,227,224,26,11,226,213,1,1,119,43,165,124,1,95,52,154,104,229,+31,3,130,149,1,95,51,97,135,225,74,3,194,12,226,97,8,0,58,98,+126,100,217,70,101,1,32,58,96,85,165,209,0,52,81,112,1,95,52,105,+243,0,52,185,251,76,197,0,52,69,113,128,8,181,221,128,12,0,51,160,+29,88,85,0,52,82,111,96,165,99,53,0,58,96,69,108,223,123,221,81,+103,1,95,52,81,186,0,58,96,41,74,77,1,52,54,64,126,129,192,247,+188,5,0,58,96,83,201,57,195,44,155,125,98,218,119,241,139,214,207,160,+0,58,64,143,130,220,160,27,89,149,0,55,209,147,64,4,224,70,2,69,+19,96,206,102,52,215,108,233,90,0,135,91,185,83,0,89,105,139,74,102,+130,8,96,50,160,117,171,33,96,245,100,95,1,51,57,64,212,129,99,2,+95,52,51,66,95,185,57,98,79,103,96,96,61,1,95,52,89,42,1,64,+58,64,35,129,14,0,55,64,43,230,142,0,162,121,227,110,3,88,179,225,+254,16,231,101,6,128,103,231,101,7,231,154,7,96,127,129,142,133,245,1,+100,105,69,108,185,93,0,94,66,34,160,17,193,143,149,147,236,118,2,125,+199,176,16,254,135,1,131,244,96,149,65,138,1,95,52,64,110,129,127,137,+227,161,63,64,127,235,163,2,110,19,96,43,129,62,76,103,184,205,11,94,+71,69,84,84,73,77,69,77,73,76,76,75,218,181,11,139,218,96,2,70,+164,0,90,112,20,128,0,1,58,52,179,204,194,92,91,129,128,247,0,58,+126,198,160,208,193,97,0,95,82,96,228,206,1,193,119,73,22,167,34,229,+93,0,165,213,231,244,1,164,229,231,79,3,129,146,171,69,183,73,169,152,+228,100,3,244,35,2,224,78,1,224,71,5,229,34,3,96,187,207,141,234,+227,6,5,104,101,97,100,58,32,114,68,3,32,108,105,115,138,211,107,48,+179,115,8,65,46,119,114,105,116,101,32,58,96,92,167,166,225,63,0,64,+2,198,229,1,58,52,179,109,145,188,225,98,1,225,94,0,1,58,52,64,+145,128,33,0,51,224,68,4,192,30,161,197,68,255,2,75,32,85,165,95,+224,2,43,193,208,224,0,3,224,68,40,224,2,3,224,80,11,224,81,53,+224,84,15,224,85,56,96,2,217,229,224,0,9,135,67,224,1,31,246,110,+9,5,70,108,97,103,115,123,250,93,0,224,0,10,162,178,224,2,52,96,+192,224,126,11,7,118,101,114,98,111,115,101,61,173,125,86,239,1,95,50,+71,253,248,122,0,224,0,10,224,231,25,224,1,1,192,114,2,79,32,35,+70,82,238,82,0,224,0,9,224,231,56,224,228,16,4,114,117,110,73,116,+224,226,4,0,52,85,43,224,226,18,224,215,25,192,1,224,223,32,224,222,+50,100,234,66,129,224,112,3,224,222,1,5,109,104,115,100,105,114,160,223,+144,37,152,183,224,223,16,224,212,23,192,1,224,220,31,224,219,44,64,213,+219,66,224,221,18,4,112,97,116,104,115,224,220,34,224,209,21,192,1,224,+217,30,224,216,48,224,208,18,4,111,117,116,112,117,194,142,224,209,26,224,+202,23,64,1,224,206,29,224,205,45,227,85,15,6,108,111,97,100,105,110,+103,227,87,32,224,197,62,224,196,41,224,193,16,4,115,112,101,101,100,224,+191,31,224,188,59,224,187,38,224,184,16,7,114,101,97,100,67,97,99,104,+229,183,5,224,188,17,224,185,56,224,184,35,224,181,16,104,250,224,182,34,+224,179,53,224,178,32,224,175,16,6,117,115,101,84,105,99,107,196,124,224,+173,21,224,170,50,224,169,29,224,166,16,4,100,111,67,80,80,224,163,27,+224,160,47,224,159,20,229,197,30,5,99,112,112,65,114,103,229,199,27,224,+163,44,224,162,17,224,159,31,224,157,29,224,154,41,225,60,21,225,211,15,+6,99,111,109,112,114,101,115,226,122,25,224,142,38,224,141,8,225,30,2,+126,12,225,36,20,6,98,117,105,108,100,80,107,197,242,225,39,16,224,146,+35,224,145,5,251,41,3,224,140,22,77,95,224,139,25,224,134,29,224,132,+2,238,13,2,232,147,18,5,107,103,80,97,116,104,224,123,20,224,117,23,+224,115,3,226,6,15,6,105,110,115,116,97,108,108,224,230,1,226,8,11,+224,102,20,96,101,236,193,0,224,205,13,4,116,97,114,103,101,232,144,18,+224,92,14,224,74,11,3,100,117,109,112,108,209,224,175,4,1,49,50,81,+109,0,49,85,4,233,182,16,224,0,11,192,115,0,49,79,44,128,116,128,+75,0,51,158,142,128,12,224,17,3,79,232,0,48,224,18,6,96,39,0,+51,79,207,115,56,64,76,160,11,0,58,96,6,210,229,120,52,81,43,115,+199,0,57,130,4,0,80,224,225,7,6,78,111,116,104,105,110,103,161,44,+245,90,0,0,52,64,48,65,56,1,52,50,210,240,177,241,225,115,13,4,+74,117,115,116,32,225,113,0,161,111,160,49,160,176,160,171,96,166,145,106,+120,194,96,79,80,212,0,35,82,228,64,61,92,213,128,16,216,92,64,140,+239,249,3,121,183,147,145,3,60,32,64,35,64,91,224,18,6,64,103,225,+0,0,128,18,66,48,0,85,224,183,7,3,68,97,108,108,160,182,224,27,+9,8,99,111,109,98,105,110,97,116,111,120,69,128,218,224,82,4,80,154,+224,54,9,6,116,111,112,108,101,118,101,224,87,17,5,100,101,115,117,103,+97,224,84,0,244,124,1,128,85,120,72,224,104,5,81,69,224,104,10,7,+121,112,101,99,104,101,99,107,224,105,18,2,114,105,118,221,54,224,31,10,+3,112,97,114,115,224,30,0,226,88,0,98,217,162,88,96,11,0,58,96,+6,225,129,1,226,69,8,2,70,97,108,160,71,224,24,6,2,84,114,117,+192,95,192,92,83,209,192,92,148,176,64,6,157,28,2,49,54,53,162,110,+1,95,52,84,174,1,58,52,83,221,250,49,0,224,1,17,243,164,1,224,+0,0,0,58,96,65,96,87,0,85,244,82,1,155,164,87,92,87,214,224,+167,0,6,118,56,46,48,94,42,34,96,113,217,217,1,48,56,64,162,0,+49,96,19,212,64,1,49,48,67,192,0,48,93,153,0,35,64,40,224,12,+0,0,48,228,163,0,0,58,96,51,128,65,85,187,89,75,96,193,0,58,+64,15,128,10,67,97,1,48,55,100,127,0,54,160,56,3,95,51,51,53,+65,95,0,56,65,91,152,174,0,58,64,130,128,193,96,48,125,74,0,52,+83,255,0,58,64,61,128,25,246,129,0,131,187,181,8,246,231,10,229,160,+1,213,44,224,47,2,160,110,129,108,1,95,51,65,134,182,89,150,142,64,+123,64,25,64,20,1,95,52,68,137,253,211,6,9,94,42,79,112,116,105,+111,110,115,58,97,70,248,126,16,2,45,104,32,224,0,7,14,80,114,105,+110,116,32,117,115,97,103,101,94,42,45,63,224,31,22,4,45,104,101,108,+112,224,31,10,7,116,104,105,115,32,109,101,115,192,38,6,118,101,114,115,+105,111,110,224,38,9,1,101,32,160,26,64,37,6,110,117,109,101,114,105,+99,224,45,1,224,37,8,10,32,110,117,109,98,101,114,94,42,45,118,224,+116,3,96,0,6,73,110,99,114,101,97,115,96,43,31,98,111,115,105,116,+121,32,40,102,108,97,103,32,99,97,110,32,98,101,32,114,101,112,101,97,+116,101,100,41,94,42,45,0,113,224,61,8,1,68,101,224,61,33,0,108,+224,61,8,27,83,104,111,119,32,101,118,101,114,121,32,116,105,109,101,32,+97,32,109,111,100,117,108,101,32,105,115,32,78,202,5,101,100,94,42,45,+115,224,54,13,73,142,2,105,108,97,65,175,0,32,110,52,14,32,105,110,+32,108,105,110,101,115,47,115,94,42,45,114,224,53,8,16,82,117,110,32,+100,105,114,101,99,116,108,121,94,42,45,67,82,224,32,8,2,101,97,100,+224,86,4,0,99,77,23,64,42,0,87,224,42,7,0,87,118,49,224,43,+12,224,42,7,128,86,3,97,110,100,32,150,102,224,52,11,3,88,67,80,+80,224,52,6,8,117,110,32,99,112,112,104,115,32,64,222,9,111,117,114,+99,101,32,102,105,108,101,64,218,3,68,120,120,120,224,45,5,4,80,97,+115,115,32,128,23,1,116,111,128,55,3,94,42,45,73,224,39,14,96,23,+224,39,2,0,84,224,36,5,23,32,32,32,71,101,110,101,114,97,116,101,+32,100,121,110,97,109,105,99,32,102,117,110,99,96,177,98,193,9,32,115,+116,97,116,105,115,116,105,99,64,62,0,122,224,62,8,0,67,171,41,64,+235,166,124,6,32,99,111,100,101,32,103,160,87,97,171,66,159,1,46,99,+96,213,7,94,42,45,105,80,65,84,72,224,69,4,3,65,100,100,32,96,+20,1,116,111,194,22,6,115,101,97,114,99,104,32,82,126,3,94,42,45,+111,124,189,224,0,3,0,79,113,198,64,48,64,26,1,94,42,224,28,4,+128,0,1,73,102,96,27,4,32,101,110,100,115,64,133,0,46,64,163,6,+32,112,114,111,100,117,99,66,128,224,178,2,128,153,224,67,28,224,64,2,+0,67,224,55,17,7,79,116,104,101,114,119,105,115,194,4,0,101,97,3,+224,113,1,5,115,32,116,111,103,101,64,36,4,32,119,105,116,104,96,29,+2,114,117,110,99,26,5,115,121,115,116,101,109,64,218,224,106,1,15,114,+101,103,117,108,97,114,32,101,120,101,99,117,116,97,98,97,72,0,97,224,+118,8,9,67,108,101,97,114,32,112,97,99,107,97,187,225,67,4,0,97,+225,118,20,224,51,13,3,76,80,75,71,224,50,4,8,32,76,105,115,116,+32,97,108,108,161,167,3,115,32,111,102,224,59,0,6,80,75,71,94,42,+45,80,224,51,8,0,66,76,184,224,37,6,0,81,64,7,5,32,91,68,+73,82,93,160,37,0,73,139,109,224,39,6,5,116,84,65,82,71,69,226,+183,3,6,83,101,108,101,99,116,32,139,54,225,124,12,7,68,105,115,116,+114,105,98,117,66,125,128,38,21,115,58,32,100,101,102,97,117,108,116,44,+32,101,109,115,99,114,105,112,116,101,110,224,60,12,0,84,128,48,196,213,+4,100,101,102,105,110,162,197,128,25,4,46,99,111,110,102,66,147,9,112,+116,99,32,79,80,84,73,79,78,160,58,166,82,3,32,102,111,114,97,208,+0,67,193,252,69,142,0,100,75,156,4,45,80,65,83,83,192,105,7,68,+101,98,117,103,44,32,112,101,194,9,65,83,84,32,97,102,116,101,114,32,+64,34,224,153,12,16,80,111,115,115,105,98,108,101,32,112,97,115,115,101,+115,58,32,105,14,1,44,32,137,53,1,44,32,233,95,0,64,18,105,178,+1,44,32,201,220,0,44,226,123,2,0,44,65,191,134,246,103,69,136,92,+0,75,70,254,0,50,102,254,0,58,71,7,232,4,0,136,75,0,85,64,+25,0,58,71,37,232,137,5,0,85,68,37,14,58,32,109,104,115,32,91,+45,104,92,124,63,93,32,91,134,244,96,8,166,149,96,11,230,188,6,64,+19,0,118,64,4,0,113,64,4,0,108,64,4,0,115,64,4,0,114,64,+4,6,67,91,82,92,124,87,93,64,10,69,49,64,7,3,68,68,69,70,+64,7,0,73,66,178,64,8,0,84,64,4,0,122,64,4,100,81,64,8,+100,39,64,8,1,97,91,96,18,64,10,0,76,96,10,4,92,124,80,75,+71,96,15,66,159,64,7,226,129,2,64,14,162,104,96,69,225,217,1,64,+14,225,185,1,16,93,32,91,77,79,68,85,76,69,78,65,77,69,46,46,+92,124,96,110,105,134,72,99,104,139,1,57,48,64,4,5,56,32,64,58,+51,57,172,7,1,51,57,77,15,8,57,55,32,64,95,51,55,52,32,232,+94,2,4,115,116,100,111,117,124,167,0,58,96,51,5,10,65,32,73,79,+46,128,21,1,32,58,96,50,169,79,0,66,64,65,108,96,236,244,0,255,+24,0,1,51,57,253,184,0,109,60,253,148,3,64,115,201,159,64,135,192,+79,91,174,0,80,96,164,137,42,78,163,0,52,96,44,1,50,32,107,210,+2,66,32,95,73,80,1,51,57,64,74,0,58,96,98,64,157,64,149,130,+28,6,65,46,97,108,108,111,99,64,16,170,110,1,51,50,64,12,130,33,+0,83,155,184,253,210,1,2,95,51,56,141,163,2,51,56,56,76,53,75,+53,0,58,65,45,128,145,2,95,51,54,224,207,1,64,33,0,58,96,47,+96,153,113,38,0,67,74,32,0,83,96,84,127,252,0,53,140,119,2,95,+51,54,77,187,4,50,48,57,53,49,66,201,4,64,35,53,53,50,64,231,+170,47,1,51,55,94,127,1,51,55,138,83,79,92,1,51,56,96,17,0,+56,64,17,225,137,1,17,104,80,117,116,67,104,97,114,58,32,115,117,114,+114,111,103,97,116,172,8,0,95,96,77,0,58,96,147,126,116,0,35,75,+93,67,12,96,66,225,158,2,0,56,97,133,188,180,159,251,224,9,2,110,+216,1,51,56,106,164,65,48,107,70,1,95,51,64,76,192,6,0,58,96,+154,224,81,0,193,166,240,205,2,128,14,224,11,2,225,202,2,97,225,64,+95,97,138,3,56,51,32,58,96,145,107,6,0,56,64,17,0,50,96,179,+172,46,1,50,57,127,63,1,55,56,97,11,111,154,2,51,48,53,160,38,+64,144,66,178,192,11,0,55,192,11,0,58,96,6,205,89,108,169,192,154,+0,90,96,129,97,246,242,67,3,178,73,253,196,0,129,20,64,174,139,236,+64,20,253,228,2,144,177,2,51,55,57,64,11,237,155,5,0,58,239,176,+0,128,43,96,30,224,36,16,193,27,131,42,0,54,66,121,0,83,162,57,+2,51,53,57,140,196,224,72,28,128,162,192,185,242,156,3,160,171,0,56,+176,7,224,94,8,240,120,11,1,32,40,128,86,224,122,9,77,92,0,49,+242,57,1,224,118,0,206,137,161,164,110,137,128,11,0,58,96,6,238,230,+1,0,66,128,108,0,64,240,112,8,65,76,224,18,6,78,81,224,19,8,+97,139,224,19,6,67,37,239,221,6,111,99,0,85,224,212,2,10,105,110,+116,101,114,114,117,112,116,101,100,128,221,224,28,3,1,114,101,170,211,5,+118,97,110,105,115,104,192,34,224,35,4,72,246,165,7,240,181,9,79,22,+224,45,4,7,117,110,115,117,112,112,111,114,71,222,1,111,112,74,101,2,+105,111,110,224,120,9,8,104,97,114,100,119,97,114,101,32,103,247,194,22,+224,243,7,132,69,224,19,5,66,233,224,132,7,68,152,224,243,5,7,97,+112,112,114,111,112,114,105,75,60,71,122,224,129,9,14,105,110,118,97,108,+105,100,32,97,114,103,117,109,101,110,192,131,224,34,3,3,102,97,105,108,+225,18,0,224,115,7,66,88,224,44,3,11,112,114,111,116,111,99,111,108,+32,101,114,114,209,228,224,31,3,170,56,224,29,2,224,240,9,225,247,10,+225,246,10,225,245,10,225,244,7,2,117,110,115,76,25,2,102,105,101,77,+73,8,110,115,116,114,97,105,110,116,115,224,149,9,3,117,115,101,114,224,+147,4,224,210,4,4,101,114,109,105,115,110,184,3,100,101,110,105,225,10,+15,226,2,7,6,105,108,108,101,103,97,108,225,254,19,2,101,110,100,74,+155,75,161,225,251,14,225,230,10,225,229,7,226,188,0,5,101,120,104,97,+117,115,226,224,21,3,98,117,115,121,225,201,14,224,86,6,12,100,111,101,+115,32,110,111,116,32,101,120,105,115,162,22,224,31,3,1,97,108,92,98,+0,121,128,30,161,82,128,0,196,11,114,115,164,11,135,73,64,6,196,11,+2,95,51,51,64,4,101,69,3,85,32,75,50,100,26,240,255,4,5,72,+97,110,100,108,101,132,140,0,67,177,60,228,129,8,96,94,96,68,0,58,+96,6,102,88,0,48,74,41,1,51,51,68,232,1,48,49,224,81,2,0,+83,98,124,4,46,73,79,46,69,193,235,224,28,1,5,73,79,69,120,99,+101,107,30,96,114,96,99,0,58,102,125,9,10,65,32,94,112,117,116,98,+32,58,103,164,96,99,3,55,51,32,79,64,6,0,52,64,148,2,95,51,+55,214,127,0,58,103,205,74,172,0,50,64,2,64,15,134,239,3,75,32,+75,51,96,14,134,240,72,40,218,117,70,151,230,161,2,167,59,0,39,233,+62,3,0,54,66,9,242,113,1,96,29,232,184,1,166,157,4,51,54,52,+32,95,118,183,136,117,71,82,0,54,65,27,4,64,95,51,52,51,225,8,+2,3,66,97,100,32,129,94,77,35,226,124,0,2,95,51,55,128,102,64,+166,135,132,118,59,96,151,96,4,130,50,224,151,0,182,90,1,51,55,65,+223,168,203,0,49,72,61,233,223,1,96,75,167,144,1,55,57,65,65,171,+158,2,112,50,112,64,13,162,18,1,52,56,98,142,128,97,224,5,0,86,+207,98,161,64,1,71,138,69,11,2,95,49,51,103,243,224,6,11,224,42,+2,64,15,128,48,224,42,30,160,28,224,49,10,224,42,15,224,49,10,224,+42,22,224,49,3,72,205,72,193,97,161,0,58,96,6,212,152,1,51,54,+181,210,84,41,65,199,128,25,71,171,1,51,54,103,215,84,218,64,26,194,+142,84,94,0,49,67,26,128,99,0,58,96,38,160,78,0,89,244,202,0,+72,211,104,32,64,32,213,202,0,82,65,96,245,202,2,66,69,64,25,0,+85,66,178,69,139,0,58,96,27,98,12,0,95,88,110,85,153,0,58,98,+145,1,10,65,114,74,0,58,106,224,224,109,2,156,50,98,168,0,80,96,+93,64,240,64,92,232,162,5,128,138,85,62,104,159,98,252,0,58,75,100,+194,18,2,95,51,53,105,252,97,39,72,179,1,64,58,96,6,10,10,65,+32,115,101,113,117,97,108,32,58,96,33,97,2,1,52,55,130,116,1,95,+51,96,57,0,52,72,181,226,136,1,3,95,51,53,54,227,1,2,5,77,+72,83,68,73,82,98,248,2,58,51,53,129,69,227,113,3,96,179,108,92,+0,53,98,219,75,214,233,60,0,97,196,1,51,53,64,39,76,204,0,56,+85,242,235,51,0,2,95,51,53,108,203,224,123,0,171,57,64,103,129,147,+236,199,0,1,53,52,107,113,96,102,64,188,153,174,0,58,96,64,1,10,+65,112,101,6,67,83,116,114,105,110,103,64,231,171,40,1,57,55,119,26,+0,58,96,127,227,58,0,98,54,96,158,0,49,65,139,64,92,224,6,4,+129,65,64,135,0,58,96,6,6,10,65,32,116,111,73,110,77,193,64,33,+68,225,5,103,101,116,101,110,118,64,16,229,166,0,128,192,247,83,2,0,+58,97,86,108,99,0,58,65,102,129,244,1,95,51,64,31,65,196,0,58,+65,133,96,227,64,31,128,238,193,83,2,95,50,52,99,216,225,99,3,194,+78,155,81,228,237,0,92,66,96,108,129,8,76,5,228,191,4,11,116,97,+105,108,58,32,101,109,112,116,121,32,93,229,97,199,0,65,96,126,197,93,+140,80,122,239,2,95,51,52,99,18,0,52,129,48,78,31,64,16,236,98,+2,0,51,98,101,97,126,172,98,160,56,108,98,192,11,65,251,96,11,0,+58,96,6,230,201,6,128,61,230,194,5,104,82,171,166,166,171,96,38,0,+58,96,6,3,10,65,32,90,131,239,102,219,66,49,122,26,64,79,96,93,+230,200,16,6,67,111,110,116,114,111,108,230,198,11,96,18,0,67,219,131,+166,146,64,223,78,240,133,204,230,112,1,64,7,133,210,238,12,1,1,95,+51,64,226,132,134,0,51,65,135,77,189,184,211,153,81,1,51,51,171,247,+131,209,0,58,64,160,64,94,103,198,64,14,129,247,249,48,10,255,59,0,+249,35,0,0,58,100,200,96,155,0,85,225,229,7,4,109,100,53,67,111,+82,17,0,101,161,235,134,167,64,143,68,200,90,164,64,164,1,50,32,68,+111,1,95,56,99,134,65,71,0,89,96,115,140,222,1,67,39,100,144,228,+117,1,197,2,249,165,2,160,235,67,28,96,48,112,144,0,51,98,161,67,+169,2,48,32,95,71,194,1,64,95,76,202,1,95,51,69,147,192,0,0,+58,97,33,67,60,9,109,100,53,65,114,114,97,121,32,58,96,57,130,130,+194,248,0,55,192,154,2,95,51,50,65,225,138,202,231,191,2,231,83,3,+2,95,51,51,94,159,224,46,2,163,221,224,46,0,0,95,112,23,227,49,+5,97,180,128,145,130,218,66,229,64,20,132,111,144,153,97,223,67,118,1,+53,55,222,130,142,24,240,5,2,168,122,225,52,0,192,25,168,149,234,157,+0,2,95,52,54,220,87,0,49,64,78,65,34,3,95,51,50,50,100,156,+128,0,229,234,3,134,17,192,69,232,64,1,64,51,104,161,224,44,2,96,+95,0,66,134,55,1,55,52,161,125,106,160,133,151,193,184,232,102,3,224,+43,10,194,116,229,136,1,128,16,0,58,65,96,226,175,0,220,232,0,58,+96,135,99,211,0,48,67,111,0,50,68,209,193,251,129,245,108,95,0,95,+72,191,0,58,97,152,2,10,65,32,78,144,0,58,96,28,128,57,0,56,+100,78,68,232,1,95,50,113,107,0,95,82,61,1,95,51,68,231,3,95,+50,50,52,160,88,64,11,67,72,192,11,192,112,68,63,75,59,128,11,65,+77,64,106,0,54,96,93,2,114,101,109,64,106,177,60,1,49,48,100,185,+96,156,97,133,99,9,102,109,64,53,64,54,130,153,102,200,128,131,179,53,+0,58,96,39,96,26,98,135,162,19,69,216,97,187,236,130,2,0,95,70,+177,165,159,98,111,80,76,1,50,48,227,163,2,31,92,34,108,105,98,47,+68,97,116,97,47,73,110,116,101,103,101,114,95,84,121,112,101,46,104,115,+92,34,44,51,57,58,0,49,170,91,100,5,0,51,106,155,64,169,64,182,+1,52,51,226,43,1,96,30,0,50,84,160,70,178,130,24,2,49,57,57,+160,19,253,111,0,106,35,113,174,0,67,99,244,164,184,98,96,64,233,73,+41,160,83,171,41,96,69,128,13,0,79,64,209,0,79,236,60,0,132,4,+64,29,224,21,3,1,95,50,86,62,64,6,66,87,0,58,97,76,84,72,+65,122,200,227,134,90,159,210,2,51,49,57,97,163,130,81,67,116,64,16,+230,90,2,86,155,1,95,51,96,77,166,90,192,56,70,90,192,11,66,0,+165,252,64,6,128,102,102,14,82,192,0,65,128,36,65,23,0,58,64,43,+128,31,178,216,1,95,51,113,40,99,181,0,80,128,47,179,182,97,71,224,+15,7,64,65,130,80,0,85,172,144,191,211,65,15,132,151,136,229,95,89,+101,0,0,51,66,62,224,68,0,65,29,224,21,2,160,154,131,112,136,232,+97,86,96,245,112,145,0,58,96,159,102,206,0,55,65,30,130,123,0,75,+64,10,228,169,1,191,223,151,193,96,90,200,217,236,127,6,224,14,5,192,+170,101,84,129,191,136,233,96,188,0,58,96,6,202,74,2,50,49,52,64,+93,192,50,233,41,0,65,236,192,26,0,56,67,160,224,26,3,0,58,96,+91,198,204,172,253,72,247,138,191,172,159,204,153,1,75,50,171,246,96,0,+133,73,98,133,0,85,224,23,2,197,98,235,3,5,133,22,0,49,102,117,+171,248,224,8,4,64,214,96,142,234,170,0,229,177,0,192,9,128,44,236,+142,4,0,58,96,54,136,74,2,52,32,58,66,127,64,13,73,188,185,82,+243,151,0,179,153,227,217,1,11,110,111,32,109,97,116,99,104,32,97,116,+32,131,196,147,186,96,104,68,164,130,211,136,213,163,45,185,147,232,184,26,+207,106,0,46,68,53,2,114,110,97,104,174,224,39,1,2,80,97,116,64,+22,0,77,64,128,2,70,97,105,232,204,4,185,237,142,34,183,195,0,49,+162,121,99,53,135,29,163,64,2,95,49,50,98,16,228,21,1,137,109,96,+5,234,217,2,64,0,72,207,98,128,186,66,161,28,245,55,1,0,49,70,+57,0,35,73,158,181,57,3,49,51,49,32,128,15,99,20,149,46,74,76,+224,24,2,246,37,8,4,39,92,92,39,39,165,23,193,75,165,194,224,82,+0,102,147,136,200,224,17,3,248,100,0,229,161,0,224,151,1,0,64,160,+35,168,46,224,139,0,98,138,245,230,9,3,92,92,92,34,241,182,2,0,+58,96,131,100,184,3,51,53,32,58,97,234,105,150,160,106,100,24,66,158,+1,95,49,74,187,224,14,1,0,50,67,235,64,136,67,60,160,136,109,8,+97,18,64,39,138,221,130,168,174,29,168,14,64,168,151,103,161,150,1,79,+32,96,59,129,144,160,200,96,62,193,205,0,50,122,40,152,240,143,108,207,+106,0,90,64,28,99,45,64,61,224,231,3,0,38,192,230,131,101,100,67,+129,75,99,131,200,230,136,159,113,92,225,89,7,224,60,1,104,125,192,223,+128,77,160,223,96,224,112,171,135,82,195,206,225,163,6,101,172,100,49,128,+180,121,239,226,92,2,113,129,240,40,6,224,210,18,2,64,64,79,89,239,+0,48,251,177,3,2,78,85,76,96,30,96,25,0,49,224,25,3,2,83,+79,72,224,25,1,0,50,224,25,4,1,84,88,224,25,1,0,51,224,25,+3,0,69,224,25,3,252,25,4,2,69,79,84,224,25,1,0,53,224,25,+4,1,78,81,224,25,1,0,54,224,25,3,2,65,67,75,224,25,1,0,+55,110,91,65,180,97,240,96,19,0,56,128,19,0,56,224,19,3,0,57,+96,19,0,49,70,183,224,20,1,70,36,96,21,0,48,224,21,4,0,49,+160,21,224,64,4,68,29,64,21,68,58,224,21,2,142,219,0,49,65,146,+224,108,2,128,43,226,134,0,128,42,224,248,4,1,83,79,225,95,2,224,+248,4,1,83,73,224,25,2,224,248,4,2,68,76,69,224,26,2,0,55,+224,26,4,0,67,137,37,128,26,0,56,224,26,5,0,50,224,26,2,0,+57,224,26,5,0,51,225,203,2,226,0,4,2,68,67,52,224,26,2,226,+1,4,1,78,65,225,127,2,72,220,224,187,2,1,89,78,224,26,2,226,+3,6,0,66,224,26,2,225,11,4,1,67,65,224,53,3,226,5,5,0,+77,224,25,2,225,12,4,1,83,85,224,79,3,225,12,4,2,69,83,67,+224,26,2,225,12,4,1,70,83,224,25,2,225,11,4,0,71,224,25,2,+67,69,224,25,1,0,82,224,25,3,225,9,4,0,85,224,25,2,103,57,+225,63,2,0,69,131,64,198,23,224,0,21,111,5,140,149,0,58,101,112,+158,90,165,30,77,27,0,49,70,8,0,35,104,54,173,124,96,17,1,64,+35,82,120,64,52,172,63,2,50,56,57,69,121,0,54,230,124,1,74,215,+237,114,10,209,50,0,50,94,242,2,95,54,49,172,247,235,34,5,198,32,+1,54,53,192,53,101,51,228,197,1,81,93,101,75,255,154,0,160,23,100,+242,224,39,7,135,58,96,112,128,21,164,154,198,195,165,153,104,15,128,11,+0,58,96,6,191,104,64,139,160,201,224,154,10,224,195,0,154,81,235,190,+0,192,114,109,246,237,37,0,224,36,0,238,12,1,224,10,1,96,50,0,+51,133,127,206,17,97,89,129,128,64,41,0,50,104,18,224,74,4,0,58,+96,102,5,10,65,32,99,104,114,65,131,136,200,0,83,103,249,65,15,2,+95,50,57,64,239,225,215,11,101,170,225,215,5,72,115,128,84,168,171,64,+147,71,53,225,204,1,121,221,64,37,224,19,7,130,37,161,197,160,19,64,+84,234,67,1,234,77,2,224,40,7,66,79,224,40,12,224,102,8,65,243,+224,61,7,65,180,224,102,13,108,27,3,67,32,61,61,64,38,137,247,102,+154,224,97,3,0,58,97,34,107,43,73,49,97,42,66,36,226,184,8,65,+171,1,52,50,240,61,0,1,52,52,84,250,143,198,65,188,96,15,208,226,+1,50,52,66,78,68,222,65,196,72,0,160,41,84,78,65,22,97,218,64,+123,136,189,4,111,114,100,32,58,96,18,9,10,65,32,98,115,105,110,100,+101,120,64,16,182,36,0,50,66,68,0,50,64,142,128,97,1,95,50,108,+26,96,11,233,230,1,85,17,160,169,224,18,4,108,251,224,18,5,129,251,+224,18,4,64,159,224,18,6,129,108,224,18,4,105,18,224,18,5,66,13,+224,18,6,224,151,10,130,31,224,18,4,109,169,224,170,6,224,190,11,224,+191,10,190,72,224,19,5,224,193,10,104,182,224,19,7,224,195,10,223,160,+224,19,4,224,197,10,110,236,224,19,7,224,199,10,97,249,224,19,7,225,+135,11,224,199,10,182,100,224,19,5,224,199,10,98,247,224,19,7,224,199,+10,99,93,224,19,7,163,174,224,19,4,98,151,246,177,6,9,111,69,110,+117,109,58,32,111,117,116,93,242,3,114,97,110,103,187,118,162,199,2,64,+95,50,120,105,64,7,143,77,0,50,119,174,64,7,142,20,0,50,88,1,+96,7,165,183,81,156,96,7,146,230,0,50,89,9,96,7,160,79,99,95,+64,7,160,79,156,67,1,95,50,89,205,96,7,160,79,90,9,96,7,160,+79,122,124,64,7,160,79,188,66,0,50,123,229,64,7,160,79,156,44,1,+95,50,92,42,96,7,160,79,134,139,1,95,50,93,8,96,7,160,79,93,+74,1,64,85,230,209,3,126,120,64,45,228,157,7,64,89,229,44,53,128,+7,96,8,141,3,229,42,13,128,7,96,8,134,72,229,40,34,128,7,96,+8,96,249,224,38,8,65,23,64,29,97,31,64,8,165,41,224,99,7,99,+12,224,119,7,130,248,224,80,5,133,114,128,7,96,8,199,7,224,38,4,+99,71,0,85,138,47,128,8,177,31,231,129,0,160,39,130,227,224,59,5,+161,22,96,7,96,8,129,22,64,9,168,98,224,169,7,64,41,224,208,7,+103,43,224,19,6,131,141,224,109,5,65,55,64,90,97,63,64,8,133,220,+224,38,7,65,55,64,29,166,151,128,95,224,137,9,132,63,224,58,5,65,+33,64,49,97,41,0,85,108,75,224,96,9,130,152,96,6,64,7,96,251,+224,94,9,64,155,224,18,6,132,57,224,75,4,65,47,0,85,108,245,96,+7,129,52,224,35,6,160,246,192,245,166,209,225,158,7,226,0,10,161,255,+193,6,193,154,130,6,168,220,0,49,88,39,198,221,64,238,64,85,149,46,+174,238,231,126,3,135,96,96,46,224,12,5,142,206,2,95,50,49,73,219,+160,78,99,193,224,25,12,196,195,0,56,224,64,0,2,95,50,56,231,102,+0,0,58,96,6,138,9,190,24,64,8,250,31,0,107,104,243,20,2,218,+110,72,11,160,217,145,232,143,165,96,11,192,42,160,134,164,123,106,171,224,+6,5,0,58,64,136,224,124,5,224,121,35,224,108,6,97,92,224,108,10,+0,58,64,250,232,99,0,70,37,183,83,2,95,50,55,130,151,0,95,92,+116,184,154,230,28,5,17,73,110,116,46,115,117,99,99,58,32,111,118,101,+114,102,108,111,119,134,26,224,69,4,0,56,169,58,72,255,224,69,16,8,+112,114,101,100,58,32,117,110,100,224,70,3,0,73,127,123,66,26,122,193,+128,143,226,20,3,183,232,225,216,0,0,56,85,189,128,112,224,19,1,113,+235,96,58,64,13,0,49,192,59,130,178,66,162,224,70,0,128,64,160,51,+65,24,139,89,129,193,0,83,105,215,224,119,1,98,251,0,83,194,230,98,+158,65,162,203,205,242,53,1,209,166,96,65,178,90,210,67,128,84,113,140,+167,28,138,37,128,27,236,25,1,145,250,161,138,129,97,248,16,2,129,91,+224,243,0,204,181,128,163,224,41,1,218,70,96,222,224,215,16,96,134,224,+215,67,135,100,224,215,68,132,189,224,215,9,245,96,0,185,101,76,238,0,+53,118,254,163,55,224,123,1,160,189,96,199,160,177,162,177,64,90,155,196,+226,247,1,249,201,0,192,9,0,58,98,73,67,53,3,54,51,32,95,78,+14,1,50,50,78,9,0,48,132,211,100,233,154,180,98,142,192,40,224,36,+9,0,58,98,154,118,219,64,20,85,197,100,173,128,17,0,49,192,17,132,+133,146,252,128,17,0,54,192,17,0,51,192,17,215,35,69,158,128,17,130,+191,146,228,128,17,129,249,146,220,128,17,129,51,146,212,128,17,128,216,146,+210,128,17,128,193,146,208,96,17,73,89,160,161,192,180,73,116,160,18,192,+181,73,143,160,18,192,182,73,170,160,18,192,183,73,197,160,18,192,184,73,+224,160,18,192,185,73,251,160,18,192,186,74,22,160,18,192,187,74,49,160,+18,192,188,70,45,160,18,192,189,74,103,128,18,72,135,128,18,224,189,0,+72,163,128,18,225,115,1,192,189,68,37,160,18,192,189,66,95,160,18,192,+189,74,238,160,18,192,189,67,4,160,18,192,189,75,36,160,18,192,189,75,+63,160,18,192,189,75,90,160,18,192,189,66,163,177,169,119,42,69,240,183,+39,1,52,55,167,91,229,219,0,80,58,12,10,65,32,115,117,98,116,114,+97,99,116,32,58,64,35,224,62,14,0,52,189,103,224,61,2,128,239,123,+112,126,109,0,58,96,25,254,130,8,96,68,102,66,0,52,94,178,67,55,+0,58,110,239,15,10,65,32,34,94,95,94,44,94,41,94,66,94,57,94,+59,96,5,18,53,94,54,94,57,94,58,94,57,94,52,94,57,94,57,94,+73,94,38,96,7,0,66,96,19,30,57,94,89,94,32,94,53,94,57,94,+54,94,60,94,51,94,60,94,89,94,33,94,53,94,58,94,54,94,58,124,+32,96,75,22,57,94,67,94,59,94,61,94,57,94,60,94,61,94,50,94,+55,94,58,94,45,94,61,96,13,8,58,94,40,94,40,94,60,94,33,96,+75,31,60,94,40,94,50,94,56,94,66,94,40,94,57,94,86,94,32,94,+58,94,70,94,32,94,87,94,33,94,58,94,71,94,2,33,94,32,224,3,+102,224,33,59,224,3,53,224,9,1,0,66,224,15,6,64,5,0,66,96,+5,2,33,94,67,224,19,6,224,43,3,224,79,13,224,69,9,224,15,1,+2,33,94,50,160,67,0,67,96,9,0,34,96,25,224,5,3,224,3,21,+224,33,25,192,37,192,77,224,129,3,224,3,99,0,70,96,5,128,11,64,+5,128,23,193,77,224,3,2,1,124,68,97,21,28,90,94,33,94,81,94,+49,94,67,94,60,94,75,94,49,94,77,94,60,94,68,94,49,94,70,94,+60,94,49,96,3,6,80,94,60,124,111,94,35,224,57,0,64,21,64,7,+4,48,94,48,94,49,97,83,8,57,94,32,94,67,94,48,94,60,96,25,+67,73,2,32,94,48,160,3,64,41,0,80,96,11,3,72,94,32,124,193,+29,225,211,3,224,3,35,64,179,64,9,0,58,160,15,96,75,5,124,50,+94,32,124,47,224,75,40,224,3,13,8,61,94,68,94,35,94,37,94,37,+224,73,56,224,3,37,224,29,19,224,67,31,224,3,145,1,48,124,65,79,+130,49,4,69,94,57,124,40,98,53,0,52,96,17,18,61,94,61,94,59,+94,48,124,44,94,35,94,52,94,35,94,57,94,35,224,5,4,6,71,94,+48,94,90,94,50,98,97,67,189,69,87,6,74,94,48,94,69,94,45,229,+179,0,0,59,96,5,64,73,0,74,96,53,64,25,14,57,94,95,94,50,+94,49,94,73,94,50,94,84,94,35,101,231,10,67,94,57,94,50,94,50,+94,35,124,98,96,73,4,50,94,70,94,35,101,187,6,69,94,35,94,49,+94,49,96,117,4,61,94,67,94,35,96,39,64,51,2,66,94,50,96,89,+8,50,94,77,94,57,94,48,94,45,64,63,1,94,93,99,59,0,35,64,+193,3,124,88,94,50,96,119,64,33,0,48,64,51,5,124,32,94,50,94,+72,160,81,0,61,96,139,0,49,96,235,6,35,94,59,94,59,94,85,96,+205,64,29,128,35,0,66,96,5,66,119,64,35,0,78,96,101,64,83,64,+23,64,17,64,15,16,74,94,50,94,68,94,48,94,87,94,50,94,60,94,+69,94,50,96,137,0,45,96,19,3,72,94,35,124,70,103,2,49,94,87,+96,205,6,95,94,35,94,36,124,53,96,167,0,36,96,151,8,66,94,36,+94,71,94,35,94,67,96,15,2,36,94,36,160,249,65,27,129,103,199,7,+2,49,94,78,160,55,4,36,94,48,94,71,96,103,0,48,97,11,64,7,+64,185,2,48,94,70,96,5,64,85,129,145,128,217,128,101,64,215,64,15,+128,63,128,7,64,27,65,197,64,29,192,75,65,85,64,121,64,35,64,121,+64,21,65,27,2,69,94,40,98,15,65,157,128,29,64,37,64,75,64,243,+224,63,1,224,139,7,224,5,7,64,55,64,101,64,125,64,247,128,71,64,+23,65,85,64,185,2,35,94,70,224,191,0,65,13,128,135,64,37,128,155,+65,17,224,125,1,0,72,224,181,0,224,121,11,0,68,225,5,6,129,203,+192,59,129,3,129,71,0,78,160,51,224,251,3,66,191,64,127,0,50,98,+133,64,55,225,125,27,224,119,7,129,217,225,127,13,64,93,128,141,225,129,+17,66,225,65,125,128,245,64,33,65,113,65,41,128,245,65,41,64,13,193,+101,128,9,192,17,192,39,64,7,0,75,161,169,128,123,64,5,128,29,64,+145,129,145,128,213,0,69,96,35,163,51,105,35,0,69,97,251,69,131,64,+131,128,43,129,5,128,131,0,86,96,5,0,79,225,109,4,130,213,129,215,+64,165,224,237,1,192,53,128,173,225,119,9,64,39,2,57,94,70,98,113,+194,243,0,57,224,111,10,67,37,225,107,9,0,68,96,117,193,171,128,235,+128,123,64,11,64,219,226,143,1,224,117,3,128,17,2,36,94,75,225,147,+0,0,36,226,93,3,99,201,64,23,227,79,3,225,59,3,68,141,65,93,+64,45,0,36,96,189,225,201,7,0,72,96,209,132,35,192,159,0,81,161,+155,68,63,194,205,128,207,66,79,131,15,128,85,65,173,130,133,66,129,128,+201,128,183,128,217,0,57,64,185,1,124,47,96,115,64,201,68,71,64,57,+67,187,68,131,68,103,235,85,0,0,124,64,123,226,49,1,129,67,128,131,+193,89,128,69,69,9,128,143,128,35,69,47,64,89,224,123,1,66,127,0,+95,96,55,2,66,94,61,101,37,75,129,64,11,64,251,66,57,64,41,0,+73,96,251,69,195,128,3,75,237,64,3,64,185,97,217,0,124,64,103,64,+175,0,77,97,27,67,169,134,107,64,119,69,197,64,33,128,251,64,63,64,+87,134,163,0,68,107,247,64,115,96,213,1,124,42,97,127,129,161,65,37,+133,107,129,111,129,191,64,143,2,69,94,57,97,23,192,21,131,69,193,221,+129,63,65,113,134,17,0,76,226,135,0,128,211,129,239,0,36,163,31,64,+13,2,61,94,61,167,75,73,13,137,101,64,139,71,79,137,141,1,66,124,+129,221,197,153,196,47,224,17,0,98,97,224,13,1,70,171,224,45,18,102,+15,2,48,124,56,224,51,4,195,87,64,201,4,72,94,57,94,83,98,133,+131,153,0,73,98,123,2,48,124,85,167,241,0,69,170,43,4,52,94,68,+124,107,98,189,10,57,94,80,94,50,94,41,94,89,94,50,97,155,3,66,+94,48,124,70,223,71,39,2,66,94,39,97,167,67,71,130,179,65,15,4,+72,94,48,94,82,162,229,66,129,0,57,96,17,64,31,64,17,67,73,65,+57,195,181,160,19,1,124,51,224,49,0,66,73,66,203,129,91,65,229,135,+147,142,21,64,37,195,59,130,237,68,137,64,185,72,163,72,51,64,133,0,+45,168,67,64,219,0,34,66,233,1,124,52,160,167,66,57,3,35,94,35,+124,75,79,65,175,3,68,94,48,124,65,243,69,73,0,94,160,151,199,123,+132,213,229,29,1,65,227,128,29,66,101,65,67,199,139,72,97,195,15,4,+74,94,48,124,43,162,183,65,53,195,147,97,117,0,124,74,181,68,169,226,+125,1,64,55,66,167,64,161,128,245,131,75,130,163,131,11,128,123,0,73,+160,45,224,219,0,224,7,0,0,70,97,33,65,3,64,31,67,45,5,37,+94,79,94,35,124,131,139,72,97,0,46,162,173,67,67,197,17,192,93,64,+187,192,201,64,73,66,21,67,227,0,72,169,15,128,171,64,227,195,65,195,+61,131,29,99,61,96,243,128,91,198,13,128,31,128,99,64,135,0,57,99,+207,65,219,64,209,192,69,65,71,67,175,131,55,130,23,193,83,2,69,94,+49,162,65,138,155,65,173,0,42,162,171,76,149,0,71,102,3,129,179,2,+57,94,76,225,61,0,66,251,65,51,196,177,128,105,129,237,8,43,94,33,+124,62,94,49,94,76,77,31,0,124,76,147,4,36,94,49,124,63,237,53,+2,224,3,255,224,3,17,193,143,224,3,181,64,197,2,71,94,32,228,245,+0,0,69,162,89,81,235,64,23,192,7,224,31,11,207,51,192,3,192,43,+0,77,160,43,128,15,0,34,224,7,8,79,21,0,48,241,53,0,0,34,+114,125,2,66,94,60,102,13,224,23,3,64,19,0,67,160,75,192,21,66,+231,0,60,96,73,0,68,111,145,0,60,163,7,224,81,7,64,23,8,74,+94,41,94,68,94,45,94,69,179,57,6,55,94,56,94,53,94,55,224,7,+0,67,57,2,42,94,43,96,35,0,41,102,23,64,25,69,63,2,51,94,+51,99,245,0,58,101,239,0,74,179,127,4,51,94,73,94,57,160,83,68,+119,2,45,94,40,173,39,74,135,77,219,64,45,77,193,224,13,1,69,233,+69,183,70,183,0,59,107,77,67,161,2,67,94,37,99,245,4,37,94,75,+94,35,96,21,71,177,80,149,64,5,64,11,242,89,1,128,7,192,23,0,+58,96,247,71,229,64,15,192,3,64,245,64,51,145,55,67,249,64,49,64,+17,65,227,71,121,80,129,65,75,64,65,128,25,8,61,94,79,94,40,124,+34,94,39,160,51,0,39,104,137,137,171,64,47,0,68,96,43,0,58,96,+147,128,51,192,5,0,70,96,5,0,94,160,31,192,25,128,17,2,66,94,+75,116,41,0,61,232,201,0,0,83,160,39,64,53,4,53,94,54,124,80,+96,15,8,93,94,61,94,88,94,58,124,39,103,125,1,58,124,64,49,0,+85,97,179,10,61,94,84,94,48,124,59,94,40,124,77,96,19,4,40,94,+65,124,54,96,51,69,139,10,58,124,53,94,61,94,71,94,58,124,110,96,+19,2,65,124,119,224,107,2,224,3,11,4,93,94,40,124,43,105,15,129,+145,0,94,160,7,224,3,7,0,79,64,77,5,92,95,94,61,94,65,225,+189,0,224,3,30,1,124,62,224,47,2,0,95,160,11,6,66,94,65,94,+58,124,47,96,207,129,37,64,231,76,183,66,49,64,103,6,48,124,104,94,+61,124,47,242,13,2,193,243,227,163,3,243,11,1,64,5,67,135,79,165,+243,175,111,224,3,73,0,33,162,205,128,13,70,197,64,7,74,43,67,137,+86,135,2,57,124,37,163,223,64,21,100,15,1,124,55,168,203,71,27,77,+145,0,35,104,81,73,101,138,17,224,5,33,80,125,196,29,64,3,67,247,+64,7,128,5,68,21,132,61,64,5,128,23,196,73,226,7,5,71,191,67,+251,64,41,137,133,64,49,2,53,94,76,177,233,215,203,224,3,3,1,52,+124,64,205,0,89,98,11,2,88,94,61,106,25,6,65,124,85,94,61,94,+89,106,157,0,61,184,9,6,61,94,49,94,50,94,39,226,123,11,96,91,+224,87,8,96,5,64,27,2,72,94,39,232,175,0,0,52,117,41,128,139,+0,39,96,81,128,153,74,251,137,187,72,33,69,59,66,97,3,50,94,52,+124,73,187,74,77,64,13,136,119,75,91,137,233,132,43,79,127,0,61,82,+185,1,124,37,96,109,64,23,2,79,94,50,100,11,138,153,67,233,0,71,+100,91,2,78,94,40,98,247,2,73,94,40,99,7,64,15,2,66,124,63,+78,205,2,124,51,124,64,47,0,50,128,13,5,94,65,124,35,124,125,176,+65,4,49,94,72,124,118,141,243,100,7,4,72,94,48,124,39,233,23,2,+68,113,64,37,65,39,64,121,73,55,72,239,0,83,102,147,226,155,53,224,+3,19,73,87,69,193,73,181,66,65,0,49,224,73,48,179,199,171,131,0,+39,173,75,137,213,4,86,94,60,94,72,118,195,150,197,224,3,13,246,153,+41,224,3,69,79,69,224,17,3,224,35,13,224,195,3,88,213,64,9,224,+185,35,70,249,192,5,224,3,19,248,61,3,64,5,66,217,128,7,128,3,+224,47,5,0,84,104,63,129,189,66,71,2,49,94,33,100,25,211,87,139,+71,68,93,235,243,1,71,19,139,181,147,255,146,5,77,105,77,195,67,251,+148,63,1,36,124,67,57,0,79,160,55,64,19,204,99,76,177,0,81,171,+159,66,185,149,221,64,105,64,29,0,91,108,35,132,151,64,121,78,1,142,+9,64,65,0,92,242,191,0,236,213,3,236,151,5,76,125,68,121,69,33,+64,81,71,213,64,77,141,251,85,201,131,41,112,189,111,97,144,17,192,225,+128,7,67,207,129,5,77,33,64,23,65,75,64,55,141,85,131,113,77,117,+144,229,173,189,96,245,144,51,140,123,64,75,174,117,160,25,0,87,177,103,+131,195,79,77,224,121,1,64,17,129,137,64,19,78,149,146,27,224,7,5,+229,235,6,112,83,74,47,64,219,194,109,6,67,94,48,124,79,94,33,110,+255,128,211,224,5,1,0,57,96,9,192,207,65,143,2,50,124,87,101,143,+0,50,101,135,65,119,64,63,64,15,65,61,2,46,94,70,100,147,2,46,+94,46,192,7,1,94,71,160,9,2,47,124,49,96,9,4,47,94,66,124,+109,128,163,1,124,105,101,19,64,157,0,33,96,79,74,245,70,191,129,227,+2,50,94,58,176,3,146,63,128,3,224,5,0,112,121,4,80,94,60,94,+79,65,129,3,124,106,94,50,101,217,4,79,94,61,124,63,160,95,87,47,+71,1,69,125,148,195,94,47,69,125,83,213,222,55,64,215,64,17,134,149,+74,215,230,67,11,224,3,3,65,125,64,7,144,71,139,7,129,235,134,85,+192,3,139,31,0,52,105,43,66,91,152,211,138,61,64,161,0,65,161,157,+87,247,66,69,254,207,58,160,59,192,165,65,69,2,49,124,44,162,43,80,+185,131,145,226,43,9,140,35,128,31,87,181,0,58,126,251,64,9,65,63,+0,67,169,159,66,105,0,66,121,93,137,163,65,83,144,191,145,205,193,161,+114,97,112,99,0,50,66,47,1,124,122,184,235,64,221,66,49,0,44,178,+93,4,72,94,61,124,52,103,127,1,40,94,74,245,95,105,65,161,76,3,+145,59,2,61,124,46,96,47,68,77,4,65,94,65,94,48,195,219,98,117,+76,23,4,35,94,90,94,40,97,85,90,29,64,73,66,247,0,83,104,13,+67,147,0,39,103,151,0,37,96,129,67,99,0,48,177,135,144,103,64,55,+64,37,67,247,2,39,124,41,103,57,6,32,124,39,94,33,124,77,160,195,+210,33,73,117,64,187,0,35,101,63,135,97,0,71,164,207,132,117,0,74,+109,125,0,78,96,5,0,70,253,45,0,75,177,67,51,0,78,96,5,66,+235,141,135,64,195,64,59,66,249,2,66,124,54,163,175,71,207,65,101,64,+147,68,1,71,195,2,48,124,41,109,69,3,72,94,49,124,64,191,193,175,+67,5,81,79,129,117,65,45,128,23,150,227,69,97,0,40,96,11,65,173,+86,85,65,255,69,97,4,72,94,40,124,47,225,177,4,64,85,2,68,94,+40,96,125,141,169,64,63,65,215,64,25,2,57,124,63,170,79,65,45,65,+163,64,51,2,79,94,40,99,101,77,227,132,199,137,29,138,151,134,21,211,+191,65,179,130,97,147,23,69,55,0,40,99,155,74,61,64,7,64,33,64,+89,197,187,73,7,129,5,0,61,101,235,64,89,131,57,64,55,116,45,99,+223,64,169,64,15,201,159,64,243,64,215,64,133,64,11,84,81,154,21,118,+229,65,7,3,124,79,94,48,85,81,3,124,54,94,48,94,105,1,94,76,+96,7,70,211,102,173,162,23,134,141,243,67,3,64,209,69,183,85,7,146,+143,92,223,2,49,94,85,111,181,0,48,109,195,0,65,64,93,1,94,94,+65,27,1,124,41,96,147,64,185,157,23,129,53,97,19,64,123,96,99,64,+237,74,3,129,153,64,197,70,201,66,197,75,45,77,239,64,193,129,79,75,+229,2,48,94,84,96,209,0,40,105,189,203,209,134,83,84,27,0,78,164,+219,65,43,85,195,64,183,230,97,1,128,45,135,21,68,21,216,143,198,205,+68,51,0,45,97,43,134,85,68,151,156,185,219,77,65,11,2,66,94,35,+97,35,148,37,71,133,193,31,70,149,64,75,131,25,70,83,128,83,128,119,+102,189,120,103,64,119,84,59,135,147,136,15,64,135,134,113,138,159,64,53,+133,89,64,199,67,97,65,9,221,71,244,53,1,64,5,202,15,160,233,107,+41,246,247,7,132,147,69,17,101,243,168,21,64,73,64,193,66,47,192,223,+199,101,251,175,33,129,91,128,141,154,187,251,175,1,153,233,64,47,64,91,+85,91,128,53,192,31,84,137,194,77,64,229,154,155,192,119,132,185,64,9,+64,71,156,77,192,95,64,217,64,5,225,5,1,136,57,65,113,136,203,66,+83,64,155,2,92,94,48,98,29,192,237,64,49,129,63,131,167,213,89,192,+57,137,217,0,93,186,21,192,121,192,221,129,31,128,243,129,167,195,41,0,+65,66,161,97,89,194,89,64,169,224,51,5,0,86,97,235,98,143,102,27,+192,97,245,237,1,128,39,137,243,129,17,129,151,73,173,0,82,173,99,128,+37,64,47,192,153,161,215,224,45,0,0,83,106,37,2,48,94,90,161,75,+224,49,1,130,241,65,111,67,37,64,47,134,119,77,235,65,219,2,65,124,+56,165,89,226,167,1,99,29,1,124,99,102,101,4,32,94,95,94,33,96,+55,68,197,68,85,226,39,1,132,131,226,31,1,91,25,87,149,226,15,1,+193,9,66,1,137,211,64,121,67,31,87,31,64,185,160,77,0,124,67,5,+225,71,3,133,3,192,235,64,59,0,90,96,103,2,73,94,35,173,239,64,+89,196,187,65,197,65,151,234,183,1,67,183,2,45,94,50,183,1,225,99,+1,65,253,69,3,74,241,131,231,4,57,94,65,124,53,186,73,144,61,193,+85,122,137,0,124,128,185,152,129,225,127,1,130,69,128,43,0,82,230,69,+0,0,57,248,247,0,0,85,162,189,64,55,226,17,2,0,124,234,167,1,+137,217,66,241,64,85,64,63,198,85,131,39,139,103,224,141,1,135,9,129,+105,71,253,221,193,128,103,194,75,228,189,1,0,66,64,213,250,119,2,139,+73,222,93,64,211,106,113,121,247,64,29,66,35,64,133,224,75,1,66,131,+101,83,0,124,77,21,136,129,2,84,94,40,115,207,2,67,94,59,104,197,+0,76,167,125,10,89,94,50,124,101,94,48,124,110,94,39,184,189,66,205,+1,65,124,66,253,1,84,124,90,207,0,96,163,173,64,49,0,72,99,9,+0,79,122,149,64,215,69,201,65,77,0,95,98,193,100,53,5,124,70,94,+50,124,53,66,157,97,83,85,25,197,9,64,147,0,77,98,61,0,68,123,+217,64,211,154,169,133,153,154,61,197,3,129,61,250,143,1,157,223,131,139,+65,103,221,25,76,43,67,21,193,213,103,63,166,131,64,145,65,73,0,67,+104,75,2,66,94,49,98,131,147,121,129,35,0,65,96,143,195,47,0,86,+105,165,2,57,124,100,188,27,136,7,71,9,66,17,135,13,0,76,121,99,+77,145,64,119,79,243,65,49,65,125,66,131,4,50,124,47,124,117,97,117,+98,3,81,147,0,124,64,141,65,255,64,65,4,50,124,69,124,102,96,73,+158,107,64,5,64,73,73,95,70,139,65,171,0,50,69,11,168,149,64,13,+64,87,65,143,154,123,74,207,0,82,105,221,76,79,64,225,66,15,138,169,+194,69,128,57,158,163,65,37,3,45,94,94,124,68,103,2,65,124,111,190,+177,64,245,4,67,124,51,94,61,97,227,65,207,64,49,0,86,142,45,4,+124,115,94,61,124,75,85,2,65,124,117,129,89,212,241,0,124,79,33,197,+153,75,5,68,55,2,71,94,45,101,25,137,195,0,35,114,43,3,67,94,+35,124,75,157,86,5,0,65,107,39,4,35,94,61,124,121,167,41,68,143,+160,7,1,124,86,178,113,0,88,86,35,96,191,76,59,76,47,64,7,138,+139,0,81,160,13,64,21,234,179,1,190,135,224,13,0,152,89,88,187,152,+111,234,203,1,74,221,224,63,1,64,37,128,43,128,45,203,9,224,29,7,+80,163,64,93,137,191,192,33,224,157,3,224,7,23,0,91,176,183,10,88,+94,32,94,58,94,88,94,33,94,58,117,251,224,15,55,177,15,1,124,49,+67,55,86,237,1,124,54,101,119,1,61,124,66,143,67,231,1,35,94,87,+119,129,147,67,41,66,87,67,67,72,99,2,35,94,72,106,1,0,73,113,+43,0,83,117,187,68,167,2,33,94,65,100,49,133,51,0,80,162,19,221,+195,64,5,172,157,4,124,61,94,49,124,65,15,2,35,124,111,108,249,202,+227,73,215,153,75,195,209,75,27,84,29,131,201,2,35,94,80,254,83,0,+132,15,66,191,2,59,94,67,96,143,68,67,0,49,224,25,0,85,65,192,+53,68,247,228,35,1,2,67,124,95,229,141,0,137,55,237,209,3,1,65,+124,136,239,108,67,64,147,67,127,3,124,33,94,32,93,33,96,163,64,99,+228,115,4,1,94,70,96,151,0,58,114,5,75,215,0,59,74,221,99,25,+78,5,148,227,1,65,124,77,217,128,111,135,175,128,117,195,165,195,119,192,+145,134,213,64,5,129,7,224,3,1,131,217,224,61,7,224,3,9,224,31,+1,128,83,224,241,3,224,101,1,128,117,0,80,238,189,0,64,13,129,1,+0,80,85,145,171,243,0,66,68,69,121,65,68,57,0,99,182,165,0,78,+175,35,128,7,96,5,1,124,36,165,75,0,76,96,243,4,32,94,61,124,+55,108,251,102,51,192,65,121,197,144,183,0,61,100,159,87,253,0,65,118,+239,2,65,124,122,98,115,4,60,94,69,124,87,160,45,70,113,66,33,175,+49,1,124,118,160,135,86,95,65,35,0,75,160,39,65,105,224,13,0,1,+124,55,118,115,64,225,147,149,90,101,64,15,68,95,64,181,224,53,1,0,+61,107,77,1,66,124,90,165,64,215,66,251,64,33,207,161,64,65,66,183,+64,81,64,181,192,247,90,167,136,49,128,23,2,65,94,82,97,3,0,91,+165,37,0,72,161,193,4,66,124,77,124,93,96,9,66,121,2,50,124,32,+97,19,193,223,0,65,101,91,161,201,2,124,44,92,96,35,166,13,0,58,+80,27,229,215,0,2,68,124,107,96,7,0,83,114,161,0,68,135,33,1,+124,97,96,41,0,38,104,99,129,197,64,97,96,111,5,124,43,124,56,124,+80,108,229,74,233,2,95,94,45,96,93,69,199,4,35,94,67,124,124,109,+171,0,47,68,3,1,124,123,96,9,64,131,224,15,2,31,34,32,58,50,+52,50,32,64,10,65,32,95,54,32,95,49,52,54,32,64,95,54,32,89,+32,66,32,66,32,83,32,85,64,18,5,55,32,64,64,64,64,64,16,1,+90,32,224,7,1,12,83,39,32,83,32,64,66,32,67,39,32,83,39,64,+8,14,83,32,64,95,49,50,55,32,95,53,49,32,64,35,49,160,52,0,+67,64,23,224,38,0,9,66,32,64,64,67,32,67,32,95,52,64,108,12,+53,54,32,64,64,95,49,53,55,32,95,49,57,64,120,7,51,50,50,32,+35,49,50,56,96,59,128,53,64,110,10,95,49,48,54,32,64,67,32,95,+56,48,160,41,224,53,19,3,85,32,35,48,224,64,0,31,66,32,80,32,+95,51,50,48,32,102,114,111,109,85,84,70,56,32,34,92,34,108,105,98,+47,68,97,116,97,47,67,104,21,97,114,47,85,110,105,99,111,100,101,46,+104,115,92,34,44,50,48,50,58,56,34,128,62,64,225,96,228,96,71,128,+13,64,133,224,187,28,128,185,2,64,67,39,64,249,7,95,49,55,52,32,+95,55,53,64,27,160,210,64,202,96,16,64,80,192,11,192,63,3,95,49,+57,56,64,184,4,50,51,52,32,64,160,55,224,28,0,129,76,64,70,96,+151,2,95,50,51,64,31,96,8,0,56,225,37,0,160,78,128,140,225,17,+2,64,71,64,11,2,95,50,52,64,6,3,58,50,52,49,129,252,2,50,+51,57,66,10,0,48,96,13,9,98,115,117,110,112,97,99,107,32,58,64,+22,64,17,64,110,2,95,50,51,64,232,5,50,51,55,32,64,58,96,108,+5,10,65,32,66,32,89,65,247,65,160,0,58,96,25,64,44,65,41,0,+67,129,44,65,32,0,54,64,106,96,118,97,142,130,81,129,220,128,57,128,+189,129,227,225,42,1,192,190,0,64,128,49,0,58,96,33,96,139,64,115,+64,61,0,80,128,6,160,68,64,33,0,53,128,205,1,49,48,129,63,64,+23,2,95,50,50,96,241,6,49,57,53,32,95,50,50,64,84,192,11,0,+50,97,9,1,50,52,161,105,64,11,64,23,192,11,0,55,224,11,1,1,+51,51,224,11,0,0,54,64,87,65,151,1,50,48,64,165,0,58,96,22,+1,10,65,162,222,99,7,129,245,66,57,129,8,64,2,64,160,162,81,226,+87,0,66,13,225,201,1,192,37,64,16,128,52,64,77,96,5,99,88,97,+37,66,3,4,66,32,85,32,65,161,53,1,50,57,128,15,0,75,128,166,+225,231,0,0,67,64,175,97,64,64,145,1,95,54,64,10,224,19,1,7,+64,64,83,32,73,32,64,75,65,0,162,145,224,134,0,1,83,39,65,87,+194,102,99,226,129,149,66,72,64,102,96,181,98,250,224,121,0,224,137,16,+163,22,160,149,128,80,130,162,96,16,224,63,24,0,64,128,233,96,17,0,+50,98,3,0,51,97,108,64,38,2,75,52,32,128,192,0,58,96,27,224,+21,2,160,20,130,218,2,85,32,90,96,1,0,75,64,193,96,23,130,228,+96,105,0,58,96,118,224,37,11,65,104,129,213,128,2,97,19,3,95,49,+48,55,98,81,98,238,65,147,128,72,0,50,224,57,0,0,58,96,27,130,+165,161,208,6,95,50,50,51,32,64,65,96,49,130,159,224,27,7,128,136,+130,70,96,77,224,196,1,64,30,8,10,65,32,117,114,101,109,32,58,98,+177,64,13,3,113,117,111,116,64,14,195,188,1,48,55,101,104,65,168,66,+181,1,49,53,131,227,5,48,56,32,95,50,49,97,73,229,61,22,129,108,+3,95,51,52,51,229,41,2,19,87,111,114,100,56,46,115,117,99,99,58,+32,111,118,101,114,102,108,111,119,133,27,224,108,11,1,49,49,224,108,3,+99,198,224,109,42,8,112,114,101,100,58,32,117,110,100,224,110,3,102,154,+0,57,67,115,100,235,64,14,1,54,51,227,129,0,66,214,1,49,50,66,+65,224,245,8,131,103,128,5,64,148,1,52,50,197,186,162,139,2,95,50,+49,67,217,160,57,224,194,2,224,31,12,224,89,2,64,25,0,52,67,67,+160,123,1,49,57,98,31,224,20,1,64,54,128,20,0,58,96,62,225,167,+6,1,54,56,96,191,96,80,134,23,161,160,0,55,64,157,129,34,225,32,+10,225,141,19,128,82,128,195,192,82,129,134,224,83,22,225,115,13,65,106,+97,102,97,95,101,72,224,174,2,225,89,7,0,53,97,137,193,51,99,36,+224,137,2,224,25,1,224,246,7,64,19,0,54,192,72,227,108,0,128,187,+96,83,128,77,160,58,1,64,58,97,83,131,151,165,98,135,154,160,133,100,+15,0,83,96,26,101,56,101,68,68,173,134,33,131,120,0,89,160,170,224,+66,0,64,13,168,157,136,247,128,7,96,81,99,213,1,95,54,96,6,128,+28,192,76,64,32,136,208,1,95,54,128,203,3,64,67,32,79,99,205,128,+11,160,53,160,252,64,177,224,165,2,224,42,1,167,16,0,58,96,225,224,+218,17,96,75,224,218,68,97,44,224,218,70,64,22,224,218,11,168,25,192,+46,106,44,64,44,128,179,224,125,5,229,30,1,134,154,129,1,66,222,64,+91,73,85,128,150,164,72,234,162,0,232,40,0,66,81,131,111,0,57,104,+250,2,95,55,48,137,2,0,58,98,117,5,10,65,32,75,32,95,136,198,+0,49,229,117,5,102,108,0,58,67,189,229,139,10,0,49,230,101,1,64,+13,229,124,0,0,57,132,157,137,88,96,9,0,50,98,186,0,58,100,43,+5,10,65,32,80,32,58,64,37,128,60,102,8,0,48,201,61,224,1,3,+103,253,64,0,224,20,11,224,17,8,224,14,5,224,11,2,192,8,102,177,+96,184,70,180,137,22,0,57,105,128,101,138,170,194,0,54,75,31,69,76,+232,215,6,64,54,129,70,0,73,64,189,129,54,0,83,98,156,65,128,129,+163,162,134,161,157,138,101,128,33,65,181,224,22,4,64,149,1,95,49,68,+19,235,142,16,10,73,110,116,101,103,101,114,95,84,121,112,171,142,3,53,+52,58,49,171,141,128,63,1,57,57,64,165,134,100,1,39,66,66,103,226,+151,3,105,41,224,34,1,224,26,3,224,23,2,194,47,2,95,50,48,106,+12,2,50,48,51,97,146,130,9,66,197,1,54,50,65,15,74,22,1,48,+50,162,102,0,58,96,37,109,38,0,54,102,193,1,95,55,104,143,64,32,+128,53,1,54,57,224,20,1,130,26,0,75,65,56,226,1,0,64,128,97,+67,170,39,137,65,168,223,96,184,96,14,130,107,76,0,226,151,9,96,34,+64,131,1,52,49,64,47,0,53,163,157,160,10,106,157,96,10,2,49,55,+51,96,11,0,55,64,11,103,131,0,73,97,179,231,179,7,231,152,7,166,+217,231,175,13,224,45,14,96,185,108,166,64,115,0,58,96,31,162,217,128,+24,64,19,130,61,96,243,140,163,1,49,53,99,52,64,50,195,44,96,44,+98,165,0,54,71,7,74,177,161,137,0,49,103,236,0,49,64,224,67,201,+64,10,0,56,192,61,2,95,49,55,97,11,96,73,96,27,1,55,50,130,+227,96,51,102,249,64,7,224,110,0,2,95,49,56,224,48,0,3,95,49,+56,51,224,11,2,0,54,224,56,8,132,134,162,203,77,247,236,202,1,224,+27,5,104,89,96,28,1,95,55,135,103,0,54,103,115,96,41,2,95,49,+56,102,194,64,18,224,81,51,72,77,224,81,6,66,115,1,49,56,224,220,+2,0,57,105,228,160,11,0,49,66,254,4,95,49,57,50,32,160,67,0,+75,160,8,64,21,75,51,65,117,130,214,3,90,32,85,32,64,13,130,206,+7,112,111,112,99,111,117,110,116,66,181,130,203,99,239,0,66,96,109,71,+194,1,54,49,173,164,0,58,64,113,129,182,3,56,56,32,58,64,139,226,+183,3,139,84,224,1,9,171,102,224,0,2,0,58,96,88,64,72,232,161,+5,9,97,114,105,116,104,109,101,116,105,99,232,245,4,0,58,97,1,231,+45,0,68,239,103,27,228,148,1,192,5,3,95,49,56,52,160,7,0,53,+227,96,0,164,63,198,91,66,142,134,215,1,49,55,143,100,236,226,0,131,+160,226,241,3,128,66,0,58,66,47,128,234,224,228,15,224,1,3,224,240,+9,64,0,0,58,96,147,230,22,0,96,169,192,211,129,108,98,255,64,147,+0,58,66,171,161,90,0,51,224,108,42,0,58,96,75,224,92,4,64,244,+132,141,1,95,49,77,145,160,252,0,58,67,33,160,105,225,193,17,224,103,+14,0,58,96,73,224,102,4,0,55,74,13,160,195,0,55,226,30,0,0,+52,224,92,15,224,84,7,0,58,96,58,237,103,1,224,1,21,225,103,12,+0,58,96,131,197,56,69,51,101,45,133,39,165,38,99,240,229,38,7,111,+54,97,246,101,4,135,225,64,52,0,58,96,47,103,17,143,27,98,68,64,+232,226,40,1,0,58,64,88,160,184,238,31,1,96,45,5,10,65,32,42,+32,58,96,126,129,42,1,95,49,68,28,130,89,226,122,12,99,190,0,58,+68,220,160,49,176,66,130,195,228,75,9,234,59,2,102,209,70,32,224,29,+2,1,95,49,100,77,137,106,129,165,66,0,227,214,0,64,106,226,4,0,+137,3,224,2,2,225,85,0,239,73,1,224,30,3,225,133,3,0,58,96,+104,224,178,62,234,29,1,96,178,0,54,65,111,224,178,3,72,109,195,33,+224,141,2,226,23,6,0,58,96,56,224,183,7,226,66,14,0,58,96,117,+226,178,0,134,227,66,65,7,10,65,32,120,111,114,32,58,102,150,2,10,+65,32,128,11,129,208,2,97,110,100,64,12,181,87,1,52,56,173,155,2,+49,52,57,66,57,66,84,233,251,8,224,1,21,234,25,0,224,0,6,224,+57,25,192,1,224,65,14,224,56,25,128,1,224,62,13,224,55,25,64,1,+224,59,12,224,54,25,224,56,13,224,53,44,224,50,41,224,47,38,224,44,+35,224,41,32,224,38,29,224,35,26,224,32,23,224,29,20,224,26,17,224,+23,14,224,20,11,224,17,8,224,14,5,224,11,2,192,8,204,188,224,0,+6,0,58,74,28,229,83,1,224,1,23,227,202,4,224,68,2,70,249,140,+217,106,144,228,11,1,171,103,69,125,99,186,203,43,1,95,49,67,197,0,+49,88,218,224,11,0,118,61,160,11,137,112,128,11,139,135,128,11,107,158,+0,53,96,10,109,109,106,246,96,10,0,58,96,6,5,10,65,32,117,62,+61,64,134,132,82,1,117,62,64,11,132,81,1,117,60,96,24,132,82,1,+117,60,64,11,179,254,2,99,109,112,64,13,174,128,96,105,196,100,192,121,+68,106,64,99,129,45,0,47,64,73,64,18,160,244,0,52,128,244,0,75,+64,10,206,27,1,52,53,64,13,128,147,1,98,115,151,254,64,20,160,29,+0,51,64,13,128,152,7,98,115,108,101,110,103,116,104,64,17,232,147,0,+101,30,149,142,74,186,64,21,0,82,141,240,64,16,170,68,152,15,0,49,+88,84,88,207,79,129,0,49,184,115,129,107,85,155,1,95,49,120,246,0,+49,114,128,0,49,120,115,0,49,79,172,1,95,49,88,115,129,77,96,65,+129,77,96,10,0,58,96,6,225,77,0,184,156,97,77,184,148,129,77,184,+66,97,77,184,44,0,105,129,77,183,197,90,241,118,105,0,49,182,105,65,+35,182,94,112,159,1,58,49,182,87,129,119,86,38,1,95,49,86,68,0,+58,96,188,193,108,182,86,0,61,96,11,226,98,1,1,64,58,96,245,217,+56,111,71,145,206,1,95,49,82,217,0,90,64,82,171,226,79,149,64,6,+139,102,182,86,120,11,97,30,86,11,0,58,96,29,96,22,71,52,192,73,+3,48,54,32,35,75,183,153,152,0,35,108,14,227,116,2,224,32,2,143,+175,122,168,183,254,82,65,219,120,0,80,64,103,224,65,2,224,64,5,66,+13,64,0,96,58,163,88,182,196,139,145,128,163,128,244,129,76,105,88,92,+30,0,48,96,20,241,79,0,128,202,232,112,0,99,134,0,58,97,8,167,+40,164,18,0,58,97,36,194,112,96,36,179,52,0,66,80,87,137,134,81,+226,112,214,64,16,1,95,49,82,12,96,40,129,119,11,94,109,100,53,83,+116,114,105,110,103,32,58,96,27,186,221,2,66,32,95,97,86,82,16,85,+81,0,39,96,15,219,174,64,170,0,95,141,115,168,107,178,72,73,172,128,+55,0,51,73,176,1,90,32,224,31,0,129,9,4,110,101,119,67,65,128,+111,2,76,101,110,64,114,129,9,224,212,5,129,8,0,65,64,30,129,4,+129,148,2,115,101,113,142,15,96,8,101,19,1,58,49,242,83,1,81,206,+192,75,224,1,1,229,136,78,0,58,91,83,193,122,229,91,2,0,58,121,+18,3,10,65,32,79,64,144,129,79,2,95,56,57,83,97,98,97,192,7,+1,95,57,79,106,114,90,0,95,112,163,128,10,1,49,48,78,176,192,11,+87,158,192,11,107,154,81,148,0,58,96,18,65,186,3,112,111,107,101,86,+177,64,105,129,94,4,94,112,101,101,107,192,18,162,99,65,177,117,23,128,+118,99,154,177,166,241,78,6,177,167,192,49,152,173,160,48,226,123,1,0,+95,81,117,67,87,68,214,0,95,81,152,1,64,58,177,203,2,116,111,73,+79,36,177,172,6,116,111,80,116,114,32,58,177,164,244,60,5,177,22,245,+47,1,142,170,97,102,67,182,1,64,95,113,43,189,21,99,90,0,95,144,+131,3,73,32,64,58,177,64,229,102,5,177,47,237,104,0,79,187,65,179,+128,61,1,67,32,96,63,0,95,76,249,64,44,229,168,0,202,197,175,234,+0,95,80,49,75,235,0,35,77,160,175,237,154,95,175,217,226,51,1,226,+55,2,226,94,72,176,56,203,221,64,31,1,95,48,92,176,64,32,0,95,+79,38,163,149,224,20,0,163,154,0,56,89,126,101,42,131,159,120,118,132,+175,0,58,176,82,64,37,114,182,64,226,176,55,6,94,102,114,101,101,32,+58,175,196,140,157,224,91,5,0,95,78,119,0,95,79,11,140,115,96,33,+224,109,0,97,171,64,31,135,238,224,116,0,0,58,175,209,128,50,64,226,+64,165,133,85,96,244,0,39,92,228,224,48,0,0,73,160,255,224,247,3,+193,209,225,62,1,224,118,3,1,64,95,80,8,128,162,253,77,0,255,49,+6,101,95,176,76,205,13,64,154,226,4,0,0,50,133,61,176,18,0,89,+109,145,65,138,2,66,32,90,134,11,113,61,2,83,32,95,79,176,65,121,+98,80,224,104,8,128,103,197,183,228,21,1,0,58,176,4,68,183,0,58,+175,243,96,199,103,172,130,164,192,75,226,169,7,175,237,242,6,6,90,157,+4,102,105,110,101,100,113,252,175,206,253,180,7,175,147,111,229,99,172,72,+158,99,14,0,95,72,200,0,83,238,118,11,65,128,238,68,2,143,254,85,+206,211,126,143,244,192,33,128,249,240,18,1,0,95,79,206,0,58,175,232,+0,66,188,151,112,33,175,231,0,85,97,203,91,162,112,116,142,204,0,80,+96,7,97,114,225,113,0,112,151,64,120,97,11,99,226,128,212,129,180,2,+95,54,55,163,167,73,81,176,7,0,89,162,99,143,57,247,137,7,194,83,+249,51,0,0,57,192,191,65,5,214,217,161,2,0,55,185,34,97,210,175,+251,4,105,110,118,32,58,175,228,4,115,104,114,32,58,175,203,72,213,175,+107,0,97,128,23,129,143,4,115,104,108,32,58,175,47,2,43,32,58,175,+38,2,45,32,58,175,35,2,73,32,58,175,33,230,68,7,175,43,130,171,+100,158,175,37,106,22,74,233,0,95,74,252,0,95,75,13,0,95,75,31,+0,95,75,48,0,95,75,66,106,16,149,40,74,15,96,9,0,58,172,37,+131,180,98,189,131,193,96,37,0,55,131,118,69,88,172,8,224,29,1,224,+49,1,224,39,5,230,251,0,195,75,172,34,74,110,171,200,2,62,32,58,+171,197,74,106,171,196,2,60,32,58,171,193,138,103,171,194,106,60,75,144,+0,95,75,161,0,58,171,202,74,57,171,177,65,98,171,176,2,80,32,58,+171,175,196,14,164,73,194,34,224,20,11,224,17,8,224,14,5,224,11,2,+192,8,229,137,0,172,17,179,110,163,208,172,24,4,110,101,103,32,58,172,+20,2,42,32,58,172,16,2,45,32,58,172,8,2,43,32,58,171,252,224,+148,68,0,58,172,64,199,83,64,17,225,225,0,73,127,68,90,66,26,75,+223,64,12,66,28,69,237,1,64,58,172,23,91,238,0,58,172,22,2,73,+32,58,172,20,64,54,66,76,76,10,0,58,172,27,64,29,128,224,64,9,+168,102,7,109,97,108,108,111,99,32,58,172,20,13,73,79,46,112,101,114,+102,111,114,109,73,79,32,58,172,30,224,179,2,0,58,172,35,2,85,32,+58,172,20,224,219,14,0,58,172,39,64,19,0,95,75,226,1,64,95,109,+21,236,50,2,103,237,0,58,172,53,6,114,97,105,115,101,32,58,172,12,+7,65,46,114,101,97,100,32,58,172,4,13,73,79,46,103,101,116,65,114,+103,82,101,102,32,58,171,138,0,95,127,133,69,1,91,218,99,67,64,95,+224,199,0,3,62,62,32,58,171,136,0,95,105,126,128,33,1,95,49,231,+86,0,1,49,55,128,65,88,81,192,9,0,50,71,41,64,9,0,58,171,+181,186,213,73,119,64,52,119,110,64,69,108,188,171,200,214,107,0,51,121,+6,224,32,1,0,95,150,117,161,168,0,55,88,69,224,47,12,107,103,96,+155,143,64,129,18,78,207,129,14,70,14,130,28,171,156,183,85,231,7,0,+0,50,211,192,128,253,233,57,0,69,139,224,11,2,96,197,101,26,0,58,+253,242,1,0,50,172,148,164,150,0,51,97,196,108,34,130,110,73,193,129,+62,74,61,96,36,64,180,101,204,128,226,0,58,128,224,2,75,32,58,225,+220,1,1,64,58,194,136,0,58,162,125,9,79,46,114,101,116,117,114,110,+32,58,225,212,0,0,62,68,100,128,196,2,80,32,58,128,187,227,74,47,+0,58,227,157,3,226,142,9,237,130,1,130,118,64,200,2,95,50,51,112,+247,224,0,255,224,0,255,224,0,255,224,0,255,224,0,255,224,0,255,224,+0,255,224,0,255,224,0,229,1,32,125,+};+unsigned char *combexpr = data;+int combexprlen = 127791; #include "mhsffi.h" static struct ffi_entry table[] = { { 0,0 }
lib/AllOfLib.hs view
@@ -4,6 +4,11 @@ -- Only used to save the compilation cache. import Control.Applicative import Control.Category+import Control.Concurrent+import Control.Concurrent.Chan+import Control.Concurrent.MVar+import Control.Concurrent.QSem+import Control.Concurrent.QSemN import Control.DeepSeq import Control.DeepSeq.Class import Control.Error
+ lib/Control/Concurrent.hs view
@@ -0,0 +1,116 @@+module Control.Concurrent (+ ThreadId, myThreadId,++ forkIO, forkFinally, forkIOWithUnmask,+ killThread, throwTo,++ yield,+ threadDelay,++ threadStatus,+ ThreadStatus(..),+ BlockReason(..),++ module Control.Concurrent.MVar,+ module Control.Concurrent.Chan,+ module Control.Concurrent.QSem,+ module Control.Concurrent.QSemN,++{-+ forkOn, forkOnWithUnmask, getNumCapabilities, setNumCapabilities, threadCapability,+ threadWaitRead, threadWaitWrite,+ threadWaitReadSTM, threadWaitWriteSTM,+ rtsSupportsBoundThreads,+ forkOS, forkOSWithUnmask,+ isCurrentThreadBound,+ runInBoundThread, runInUnboundThread,+ mkWeakThreadId,+-}+ ) where+import Primitives+import Control.Concurrent.MVar+import Control.Concurrent.Chan+import Control.Concurrent.QSem+import Control.Concurrent.QSemN+import Control.Exception+import Control.Exception.Internal(unsafeUnmask)+import Data.Word++instance Show ThreadId where+ show i = "ThreadId#" ++ show (primThreadNum i)++instance Eq ThreadId where+ i == i' = primThreadNum i == primThreadNum i'++instance Ord ThreadId where+ i `compare` i' = primThreadNum i `compare` primThreadNum i'++forkIO :: IO () -> IO ThreadId+forkIO action = --primForkIO (catch action childHandler)+ primForkIO action++childHandler :: SomeException -> IO ()+childHandler err = catch (realHandler err) childHandler++realHandler :: SomeException -> IO ()+realHandler se+ | Just BlockedIndefinitelyOnMVar <- fromException se = return ()+-- | Just BlockedIndefinitelyOnSTM <- fromException se = return ()+ | Just ThreadKilled <- fromException se = return ()+ | otherwise = throw se++myThreadId :: IO ThreadId+myThreadId = primMyThreadId++forkFinally :: IO a -> (Either SomeException a -> IO ()) -> IO ThreadId+forkFinally action and_then =+ mask $ \restore ->+ forkIO $ try (restore action) >>= and_then++forkIOWithUnmask :: ((forall a . IO a -> IO a) -> IO ()) -> IO ThreadId+forkIOWithUnmask io = forkIO (io unsafeUnmask)++killThread :: ThreadId -> IO ()+killThread tid = throwTo tid ThreadKilled++primThrowTo :: ThreadId -> SomeException -> IO ()+primThrowTo = _primitive "IO.throwto"++throwTo :: Exception e => ThreadId -> e -> IO ()+throwTo thid ex = primThrowTo thid (toException ex)++yield :: IO ()+yield = primYield++threadDelay :: Int -> IO ()+threadDelay = primThreadDelay++---------------------------------------++data BlockReason+ = BlockedOnMVar+ | BlockedOnBlackHole+ | BlockedOnException+ | BlockedOnSTM+ | BlockedOnForeignCall+ | BlockedOnOther+ deriving (Eq, Ord, Show)++data ThreadStatus+ = ThreadRunning+ | ThreadFinished+ | ThreadBlocked BlockReason+ | ThreadDied+ deriving (Eq, Ord, Show)++-- XXX Does not do BlockedOnException correctly+threadStatus :: ThreadId -> IO ThreadStatus+threadStatus thr = do+ st <- primThreadStatus thr+ return $+ case st of+ 0 -> ThreadRunning -- ts_runnable+ 1 -> ThreadBlocked BlockedOnMVar -- ts_wait_mvar+ 2 -> ThreadBlocked BlockedOnOther -- ts_wait_time+ 3 -> ThreadFinished -- ts_finished+ 4 -> ThreadDied -- ts_died
+ lib/Control/Concurrent/Chan.hs view
@@ -0,0 +1,137 @@+-----------------------------------------------------------------------------+-- |+-- Module : Control.Concurrent.Chan+-- Copyright : (c) The University of Glasgow 2001+-- License : BSD-style (see the file libraries/base/LICENSE)+--+-- Maintainer : libraries@haskell.org+-- Stability : stable+-- Portability : non-portable (concurrency)+--+-- Unbounded channels.+--+-- The channels are implemented with 'Control.Concurrent.MVar's and therefore inherit all the+-- caveats that apply to @MVar@s (possibility of races, deadlocks etc). The+-- @stm@ (software transactional memory) library has a more robust implementation+-- of channels called @TChan@s.+--+-----------------------------------------------------------------------------++module Control.Concurrent.Chan+ (+ -- * The 'Chan' type+ Chan, -- abstract++ -- * Operations+ newChan,+ writeChan,+ readChan,+ dupChan,++ -- * Stream interface+ getChanContents,+ writeList2Chan,+ ) where++import System.IO.Unsafe ( unsafeInterleaveIO )+import Control.Concurrent.MVar+import Control.Exception (mask_)++-- A channel is represented by two @MVar@s keeping track of the two ends+-- of the channel contents, i.e., the read- and write ends. Empty @MVar@s+-- are used to handle consumers trying to read from an empty channel.++-- |'Chan' is an abstract type representing an unbounded FIFO channel.+data Chan a+ = Chan !(MVar (Stream a))+ !(MVar (Stream a)) -- Invariant: the Stream a is always an empty MVar+ deriving Eq -- ^ @since 4.4.0.0++type Stream a = MVar (ChItem a)++data ChItem a = ChItem a !(Stream a)+ -- benchmarks show that unboxing the MVar here is worthwhile, because+ -- although it leads to higher allocation, the channel data takes up+ -- less space and is therefore quicker to GC.++-- See the Concurrent Haskell paper for a diagram explaining+-- how the different channel operations proceed.++-- @newChan@ sets up the read and write end of a channel by initialising+-- these two @MVar@s with an empty @MVar@.++-- |Build and return a new instance of 'Chan'.+newChan :: IO (Chan a)+newChan = do+ hole <- newEmptyMVar+ readVar <- newMVar hole+ writeVar <- newMVar hole+ return (Chan readVar writeVar)++-- To put an element on a channel, a new hole at the write end is created.+-- What was previously the empty @MVar@ at the back of the channel is then+-- filled in with a new stream element holding the entered value and the+-- new hole.++-- |Write a value to a 'Chan'.+writeChan :: Chan a -> a -> IO ()+writeChan (Chan _ writeVar) val = do+ new_hole <- newEmptyMVar+ mask_ $ do+ old_hole <- takeMVar writeVar+ putMVar old_hole (ChItem val new_hole)+ putMVar writeVar new_hole++-- The reason we don't simply do this:+--+-- modifyMVar_ writeVar $ \old_hole -> do+-- putMVar old_hole (ChItem val new_hole)+-- return new_hole+--+-- is because if an asynchronous exception is received after the 'putMVar'+-- completes and before modifyMVar_ installs the new value, it will set the+-- Chan's write end to a filled hole.++-- |Read the next value from the 'Chan'. Blocks when the channel is empty. Since+-- the read end of a channel is an 'MVar', this operation inherits fairness+-- guarantees of 'MVar's (e.g. threads blocked in this operation are woken up in+-- FIFO order).+--+-- Throws 'Control.Exception.BlockedIndefinitelyOnMVar' when the channel is+-- empty and no other thread holds a reference to the channel.+readChan :: Chan a -> IO a+readChan (Chan readVar _) =+ modifyMVar readVar $ \read_end -> do+ (ChItem val new_read_end) <- readMVar read_end+ -- Use readMVar here, not takeMVar,+ -- else dupChan doesn't work+ return (new_read_end, val)++-- |Duplicate a 'Chan': the duplicate channel begins empty, but data written to+-- either channel from then on will be available from both. Hence this creates+-- a kind of broadcast channel, where data written by anyone is seen by+-- everyone else.+--+-- (Note that a duplicated channel is not equal to its original.+-- So: @fmap (c /=) $ dupChan c@ returns @True@ for all @c@.)+dupChan :: Chan a -> IO (Chan a)+dupChan (Chan _ writeVar) = do+ hole <- readMVar writeVar+ newReadVar <- newMVar hole+ return (Chan newReadVar writeVar)++-- Operators for interfacing with functional streams.++-- |Return a lazy list representing the contents of the supplied+-- 'Chan', much like 'GHC.Internal.System.IO.hGetContents'.+getChanContents :: Chan a -> IO [a]+getChanContents ch+ = unsafeInterleaveIO (do+ x <- readChan ch+ xs <- getChanContents ch+ return (x:xs)+ )++-- |Write an entire list of items to a 'Chan'.+writeList2Chan :: Chan a -> [a] -> IO ()+writeList2Chan ch ls = mapM_ (writeChan ch) ls
+ lib/Control/Concurrent/MVar.hs view
@@ -0,0 +1,110 @@+module Control.Concurrent.MVar(+ MVar,+ newEmptyMVar,+ newMVar,+ takeMVar,+ putMVar,+ readMVar,+ swapMVar,+ tryTakeMVar,+ tryPutMVar,+ isEmptyMVar,+ withMVar,+ withMVarMasked,+ modifyMVar_,+ modifyMVar,+ modifyMVarMasked_,+ modifyMVarMasked,+ tryReadMVar,+ --mkWeakMVar,+ --addMVarFinalizer,+ ) where+import Primitives+import Control.Exception+import Data.Maybe(isNothing)++instance Eq (MVar a) where+ mv1 == mv2 = primMVarToWord mv1 == primMVarToWord mv2++newEmptyMVar :: IO (MVar a)+newEmptyMVar = primNewEmptyMVar++newMVar :: a -> IO (MVar a)+newMVar value = do+ mvar <- newEmptyMVar+ putMVar mvar value+ return mvar++takeMVar :: MVar a -> IO a+takeMVar mv = primTakeMVar mv++readMVar :: MVar a -> IO a+readMVar mv = primReadMVar mv++putMVar :: MVar a -> a -> IO ()+putMVar = primPutMVar++tryTakeMVar :: MVar a -> IO (Maybe a)+tryTakeMVar = primTryTakeMVar++tryPutMVar :: MVar a -> a -> IO Bool+tryPutMVar = primTryPutMVar++tryReadMVar :: MVar a -> IO (Maybe a)+tryReadMVar = primTryReadMVar++isEmptyMVar :: MVar a -> IO Bool+isEmptyMVar mv = isNothing <$> tryReadMVar mv++swapMVar :: MVar a -> a -> IO a+swapMVar mvar new =+ mask_ $ do+ old <- takeMVar mvar+ putMVar mvar new+ return old++withMVar :: MVar a -> (a -> IO b) -> IO b+withMVar m io =+ mask $ \restore -> do+ a <- takeMVar m+ b <- restore (io a) `onException` putMVar m a+ putMVar m a+ return b++withMVarMasked :: MVar a -> (a -> IO b) -> IO b+withMVarMasked m io =+ mask_ $ do+ a <- takeMVar m+ b <- io a `onException` putMVar m a+ putMVar m a+ return b++modifyMVar_ :: MVar a -> (a -> IO a) -> IO ()+modifyMVar_ m io =+ mask $ \restore -> do+ a <- takeMVar m+ a' <- restore (io a) `onException` putMVar m a+ putMVar m a'++modifyMVar :: MVar a -> (a -> IO (a,b)) -> IO b+modifyMVar m io =+ mask $ \restore -> do+ a <- takeMVar m+ (a',b) <- restore (io a >>= evaluate) `onException` putMVar m a+ putMVar m a'+ return b++modifyMVarMasked_ :: MVar a -> (a -> IO a) -> IO ()+modifyMVarMasked_ m io =+ mask_ $ do+ a <- takeMVar m+ a' <- io a `onException` putMVar m a+ putMVar m a'++modifyMVarMasked :: MVar a -> (a -> IO (a,b)) -> IO b+modifyMVarMasked m io =+ mask_ $ do+ a <- takeMVar m+ (a',b) <- (io a >>= evaluate) `onException` putMVar m a+ putMVar m a'+ return b
+ lib/Control/Concurrent/QSem.hs view
@@ -0,0 +1,129 @@+{-# LANGUAGE Safe #-}+{-# LANGUAGE BangPatterns #-}++-----------------------------------------------------------------------------+-- |+-- Module : Control.Concurrent.QSem+-- Copyright : (c) The University of Glasgow 2001+-- License : BSD-style (see the file libraries/base/LICENSE)+--+-- Maintainer : libraries@haskell.org+-- Stability : stable+-- Portability : non-portable (concurrency)+--+-- Simple quantity semaphores.+--+-----------------------------------------------------------------------------++module Control.Concurrent.QSem+ ( -- * Simple Quantity Semaphores+ QSem, -- abstract+ newQSem, -- :: Int -> IO QSem+ waitQSem, -- :: QSem -> IO ()+ signalQSem -- :: QSem -> IO ()+ ) where++import Control.Concurrent.MVar ( MVar, newEmptyMVar, takeMVar, tryTakeMVar+ , putMVar, newMVar, tryPutMVar)+import Control.Exception+import Data.Maybe++-- | 'QSem' is a quantity semaphore in which the resource is acquired+-- and released in units of one. It provides guaranteed FIFO ordering+-- for satisfying blocked `waitQSem` calls.+--+-- The pattern+--+-- > bracket_ waitQSem signalQSem (...)+--+-- is safe; it never loses a unit of the resource.+--+newtype QSem = QSem (MVar (Int, [MVar ()], [MVar ()]))++-- The semaphore state (i, xs, ys):+--+-- i is the current resource value+--+-- (xs,ys) is the queue of blocked threads, where the queue is+-- given by xs ++ reverse ys. We can enqueue new blocked threads+-- by consing onto ys, and dequeue by removing from the head of xs.+--+-- A blocked thread is represented by an empty (MVar ()). To unblock+-- the thread, we put () into the MVar.+--+-- A thread can dequeue itself by also putting () into the MVar, which+-- it must do if it receives an exception while blocked in waitQSem.+-- This means that when unblocking a thread in signalQSem we must+-- first check whether the MVar is already full; the MVar lock on the+-- semaphore itself resolves race conditions between signalQSem and a+-- thread attempting to dequeue itself.++-- |Build a new 'QSem' with a supplied initial quantity.+-- The initial quantity must be at least 0.+newQSem :: Int -> IO QSem+newQSem initial+ | initial < 0 = fail "newQSem: Initial quantity must be non-negative"+ | otherwise = do+ sem <- newMVar (initial, [], [])+ return (QSem sem)++-- |Wait for a unit to become available.+waitQSem :: QSem -> IO ()+waitQSem (QSem m) =+ mask_ $ do+ (i,b1,b2) <- takeMVar m+ if i == 0+ then do+ b <- newEmptyMVar+ putMVar m (i, b1, b:b2)+ wait b+ else do+ let !z = i-1+ putMVar m (z, b1, b2)+ return ()+ where+ wait b = takeMVar b `onException`+ uninterruptibleMask_ (do -- Note [signal uninterruptible]+ (i,b1,b2) <- takeMVar m+ r <- tryTakeMVar b+ r' <- if isJust r+ then signal (i,b1,b2)+ else do putMVar b (); return (i,b1,b2)+ putMVar m r')++-- |Signal that a unit of the 'QSem' is available.+signalQSem :: QSem -> IO ()+signalQSem (QSem m) =+ uninterruptibleMask_ $ do -- Note [signal uninterruptible]+ r <- takeMVar m+ r' <- signal r+ putMVar m r'++-- Note [signal uninterruptible]+-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~+-- If we have+--+-- bracket waitQSem signalQSem (...)+--+-- and an exception arrives at the signalQSem, then we must not lose+-- the resource. The signalQSem is masked by bracket, but taking+-- the MVar might block, and so it would be interruptible. Hence we+-- need an uninterruptibleMask here.+--+-- This isn't ideal: during high contention, some threads won't be+-- interruptible. The QSemSTM implementation has better behaviour+-- here, but it performs much worse than this one in some+-- benchmarks.++signal :: (Int,[MVar ()],[MVar ()]) -> IO (Int,[MVar ()],[MVar ()])+signal (i,a1,a2) =+ if i == 0+ then loop a1 a2+ else let !z = i+1 in return (z, a1, a2)+ where+ loop [] [] = return (1, [], [])+ loop [] b2 = loop (reverse b2) []+ loop (b:bs) b2 = do+ r <- tryPutMVar b ()+ if r then return (0, bs, b2)+ else loop bs b2
+ lib/Control/Concurrent/QSemN.hs view
@@ -0,0 +1,131 @@+{-# LANGUAGE Trustworthy #-}+{-# OPTIONS_GHC -funbox-strict-fields #-}++-----------------------------------------------------------------------------+-- |+-- Module : Control.Concurrent.QSemN+-- Copyright : (c) The University of Glasgow 2001+-- License : BSD-style (see the file libraries/base/LICENSE)+--+-- Maintainer : libraries@haskell.org+-- Stability : stable+-- Portability : non-portable (concurrency)+--+-- Quantity semaphores in which each thread may wait for an arbitrary+-- \"amount\".+--+-----------------------------------------------------------------------------++module Control.Concurrent.QSemN+ ( -- * General Quantity Semaphores+ QSemN, -- abstract+ newQSemN, -- :: Int -> IO QSemN+ waitQSemN, -- :: QSemN -> Int -> IO ()+ signalQSemN -- :: QSemN -> Int -> IO ()+ ) where++import Control.Concurrent.MVar ( MVar, newEmptyMVar, takeMVar+ , tryPutMVar, isEmptyMVar)+import Control.Exception+import Control.Monad (when)+import Data.IORef (IORef, newIORef, atomicModifyIORef)+import System.IO.Unsafe (unsafePerformIO)++-- | 'QSemN' is a quantity semaphore in which the resource is acquired+-- and released in arbitrary amounts. It provides guaranteed FIFO ordering+-- for satisfying blocked `waitQSemN` calls.+--+-- The pattern+--+-- > bracket_ (waitQSemN n) (signalQSemN n) (...)+--+-- is safe; it never loses any of the resource.+--+newtype QSemN = QSemN (IORef (Int, [(Int, MVar ())], [(Int, MVar ())]))++-- The semaphore state (i, xs, ys):+--+-- i is the current resource value+--+-- (xs,ys) is the queue of blocked threads, where the queue is+-- given by xs ++ reverse ys. We can enqueue new blocked threads+-- by consing onto ys, and dequeue by removing from the head of xs.+--+-- A blocked thread is represented by an empty (MVar ()). To unblock+-- the thread, we put () into the MVar.+--+-- A thread can dequeue itself by also putting () into the MVar, which+-- it must do if it receives an exception while blocked in waitQSemN.+-- This means that when unblocking a thread in signalQSemN we must+-- first check whether the MVar is already full.++-- |Build a new 'QSemN' with a supplied initial quantity.+-- The initial quantity must be at least 0.+newQSemN :: Int -> IO QSemN+newQSemN initial+ | initial < 0 = fail "newQSemN: Initial quantity must be non-negative"+ | otherwise = do+ sem <- newIORef (initial, [], [])+ return (QSemN sem)++-- An unboxed version of Maybe (MVar a)+data MaybeMV a = JustMV !(MVar a) | NothingMV++-- |Wait for the specified quantity to become available.+waitQSemN :: QSemN -> Int -> IO ()+-- We need to mask here. Once we've enqueued our MVar, we need+-- to be sure to wait for it. Otherwise, we could lose our+-- allocated resource.+waitQSemN qs@(QSemN m) sz = mask_ $ do+ -- unsafePerformIO and not unsafeDupablePerformIO. We must+ -- be sure to wait on the same MVar that gets enqueued.+ mmvar <- atomicModifyIORef m $ \ (i,b1,b2) -> unsafePerformIO $ do+ let z = i-sz+ if z < 0+ then do+ b <- newEmptyMVar+ return ((i, b1, (sz,b):b2), JustMV b)+ else return ((z, b1, b2), NothingMV)++ -- Note: this case match actually allocates the MVar if necessary.+ case mmvar of+ NothingMV -> return ()+ JustMV b -> wait b+ where+ wait :: MVar () -> IO ()+ wait b =+ takeMVar b `onException` do+ already_filled <- not <$> tryPutMVar b ()+ when already_filled $ signalQSemN qs sz++-- |Signal that a given quantity is now available from the 'QSemN'.+signalQSemN :: QSemN -> Int -> IO ()+-- We don't need to mask here because we should *already* be masked+-- here (e.g., by bracket). Indeed, if we're not already masked,+-- it's too late to do so.+--+-- What if the unsafePerformIO thunk is forced in another thread,+-- and receives an asynchronous exception? That shouldn't be a+-- problem: when we force it ourselves, presumably masked, we+-- will resume its execution.+signalQSemN (QSemN m) sz0 = do+ -- unsafePerformIO and not unsafeDupablePerformIO. We must not+ -- wake up more threads than we're supposed to.+ unit <- atomicModifyIORef m $ \(i,a1,a2) ->+ unsafePerformIO (loop (sz0 + i) a1 a2)++ -- Forcing this will actually wake the necessary threads.+ evaluate unit+ where+ loop 0 bs b2 = return ((0, bs, b2), ())+ loop sz [] [] = return ((sz, [], []), ())+ loop sz [] b2 = loop sz (reverse b2) []+ loop sz ((j,b):bs) b2+ | j > sz = do+ r <- isEmptyMVar b+ if r then return ((sz, (j,b):bs, b2), ())+ else loop sz bs b2+ | otherwise = do+ r <- tryPutMVar b ()+ if r then loop (sz-j) bs b2+ else loop sz bs b2
lib/Control/Exception.hs view
@@ -19,12 +19,31 @@ displaySomeException, evaluate, mapException,++ mask, mask_,++ allowInterrupt,++ uninterruptibleMask,+ uninterruptibleMask_,+ interruptible,+ MaskingState(..),+ getMaskingState,+ -- ArithException(..),+ SomeAsyncException(..), AsyncException(..),+ asyncExceptionToException,+ asyncExceptionFromException,+ --+ BlockedIndefinitelyOnMVar(..),+ --+ ioError, IOException, ) where import qualified Prelude(); import MiniPrelude import Control.Exception.Internal import {-# SOURCE #-} Data.Typeable+import System.IO.Error(ioError, IOException) import System.IO.Unsafe -- This is the function called by the runtime.@@ -89,6 +108,9 @@ return r -} +mask_ :: IO a -> IO a+mask_ io = mask $ const io+ finally :: IO a -> IO b -> IO a finally a sequel = mask $ \ restore -> do@@ -96,23 +118,36 @@ _ <- sequel return r -bracket_ :: IO a -> IO b -> IO c -> IO c-bracket_ before after thing = bracket before (const after) (const thing)- bracketOnError :: IO a -> (a -> IO b) -> (a -> IO c) -> IO c bracketOnError before after thing = mask $ \ restore -> do a <- before restore (thing a) `onException` after a +allowInterrupt :: IO ()+allowInterrupt = interruptible $ return ()++bracket_ :: IO a -> IO b -> IO c -> IO c+bracket_ :: forall a b c. IO a -> IO b -> IO c -> IO c+bracket_ before after thing = bracket before (const after) (const thing)+ ------------------- -data ArithException- = Overflow- | Underflow- | LossOfPrecision- | DivideByZero- | Denormal- | RatioZeroDenominator- deriving (Eq, Ord, Show, Typeable)-instance Exception ArithException+deriving instance Eq ArithException+deriving instance Ord ArithException+deriving instance Eq AsyncException+deriving instance Ord AsyncException+deriving instance Eq MaskingState+deriving instance Show MaskingState++--------------------++data BlockedIndefinitelyOnMVar = BlockedIndefinitelyOnMVar+ deriving (Typeable)++instance Exception BlockedIndefinitelyOnMVar++instance Show BlockedIndefinitelyOnMVar where+ showsPrec _ BlockedIndefinitelyOnMVar = showString "thread blocked indefinitely in an MVar operation"++-----
lib/Control/Exception/Internal.hs view
@@ -1,4 +1,4 @@--- Copyright 2024 Lennart Augustsson+-- Copyright 2024,2025 Lennart Augustsson -- See LICENSE file for full license. module Control.Exception.Internal( throw, catch,@@ -8,9 +8,23 @@ SomeException(..), PatternMatchFail, NoMethodError, RecSelError, RecConError(..), patternMatchFail, noMethodError, recSelError, recConError,+ AsyncException(..),+ ArithException(..),+ SomeAsyncException,+ asyncExceptionToException,+ asyncExceptionFromException,++ uninterruptibleMask,+ uninterruptibleMask_,+ MaskingState(..),+ getMaskingState,+ interruptible,++ unsafeUnmask, ) where import qualified Prelude()-import Primitives(IO, primThen, primBind, primReturn)+import Primitives+import Data.Bool import Data.Char_Type import Data.List_Type import Data.Maybe_Type@@ -32,10 +46,30 @@ -> (e -> IO a) -> IO a catch io handler = primCatch io handler'- where handler' e = case fromException e of+ where handler' e = case fromException (rtsExn e) of Just e' -> handler e' Nothing -> primRaise e +-- The runtime system sometimes needs to generate exceptions.+-- It is quite difficult to create SomeException value since+-- it involves an existential data type with several dictionaries.+-- So, instead, the runtime uses an INT value to convey that+-- RTS exception has happened. So the incoming SomeException+-- is sometimes just a regular Int. Here is where we translate that+-- back to a real SomeException.+-- The translation here has to be kept in sync with the enum rts_exn+-- in eval.c.+-- The magic primIsInt primitive returns the Int if it is one, otherwise -1.+rtsExn :: SomeException -> SomeException+rtsExn e =+ let n = primIsInt e+ in if primIntEQ n (0::Int) then SomeException StackOverflow+ else if primIntEQ n (1::Int) then SomeException HeapOverflow+ else if primIntEQ n (2::Int) then SomeException ThreadKilled+ else if primIntEQ n (3::Int) then SomeException UserInterrupt+ else if primIntEQ n (4::Int) then SomeException DivideByZero+ else e+ -- Throw an exception when executed, not when evaluated throwIO :: forall a e . Exception e => e -> IO a throwIO e = bad `primThen` bad -- we never reach the second 'bad'@@ -54,10 +88,6 @@ primReturn r ))) --- XXX we don't have masks yet-mask :: ((forall a. IO a -> IO a) -> IO b) -> IO b-mask io = io (\ x -> x)- ------------------ data SomeException = forall e . Exception e => SomeException e@@ -116,3 +146,122 @@ patternMatchFail s = throw (PatternMatchFail s) recSelError s = throw (RecSelError s) recConError s = throw (RecConError s)++-------------------++data ArithException+ = Overflow+ | Underflow+ | LossOfPrecision+ | DivideByZero+ | Denormal+ | RatioZeroDenominator+ deriving ({-Eq, Ord,-} Show, Typeable) -- Eq, Ord in Exception module+instance Exception ArithException++-------------------++data AsyncException+ = StackOverflow+ | HeapOverflow+ | ThreadKilled+ | UserInterrupt+ deriving ({-Eq, Ord,-} Typeable) -- Eq, Ord in Exception module++instance Show AsyncException where+ showsPrec _ StackOverflow = showString "stack overflow"+ showsPrec _ HeapOverflow = showString "heap overflow"+ showsPrec _ ThreadKilled = showString "thread killed"+ showsPrec _ UserInterrupt = showString "user interrupt"++instance Exception AsyncException where+ toException = asyncExceptionToException+ fromException = asyncExceptionFromException++data SomeAsyncException = forall e . Exception e => SomeAsyncException e+ deriving (Typeable)++instance Show SomeAsyncException where+ showsPrec p (SomeAsyncException e) = showsPrec p e++instance Exception SomeAsyncException++asyncExceptionToException :: Exception e => e -> SomeException+asyncExceptionToException e = toException (SomeAsyncException e)++asyncExceptionFromException :: Exception e => SomeException -> Maybe e+asyncExceptionFromException x =+ case fromException x of+ Just (SomeAsyncException a) -> cast a+ Nothing -> Nothing++---------++-- Must be in the same order as enum mask_state in eval.c.+data MaskingState+ = Unmasked+ | MaskedInterruptible+ | MaskedUninterruptible+-- deriving (Enum) causes circular import+-- deriving (Eq, Show) in Control.Exception++fromEnum :: MaskingState -> Int+fromEnum Unmasked = 0+fromEnum MaskedInterruptible = 1+fromEnum _ = 2++toEnum :: Int -> MaskingState+toEnum i | i `primIntEQ` 0 = Unmasked+ | i `primIntEQ` 1 = MaskedInterruptible+ | otherwise = MaskedUninterruptible++getMaskingState :: IO MaskingState+getMaskingState = primGetMaskingState `primBind` \ s -> primReturn (toEnum s)++withMaskingState :: MaskingState -> IO a -> IO a+withMaskingState s io =+ primGetMaskingState `primBind` \ os ->+ primSetMaskingState (fromEnum s) `primThen`+ io `primBind` \ a ->+ primSetMaskingState os `primThen`+ primReturn a++mask :: ((forall a. IO a -> IO a) -> IO b) -> IO b+mask io =+ getMaskingState `primBind` \ b ->+ case b of+ Unmasked -> block (io unblock)+ MaskedInterruptible -> io block+ MaskedUninterruptible -> io blockUninterruptible++uninterruptibleMask :: forall a . IO a -> IO a+uninterruptibleMask_ io = uninterruptibleMask (\ _ -> io)++uninterruptibleMask :: ((forall a. IO a -> IO a) -> IO b) -> IO b+uninterruptibleMask io =+ getMaskingState `primBind` \ b ->+ case b of+ Unmasked -> blockUninterruptible (io unblock)+ MaskedInterruptible -> blockUninterruptible (io block)+ MaskedUninterruptible -> io blockUninterruptible++unsafeUnmask :: IO a -> IO a+unsafeUnmask = withMaskingState Unmasked++block :: IO a -> IO a+block = withMaskingState MaskedInterruptible++blockUninterruptible :: IO a -> IO a+blockUninterruptible = withMaskingState MaskedUninterruptible++unblock :: IO a -> IO a+unblock = unsafeUnmask++interruptible :: IO a -> IO a+interruptible :: forall a. IO a -> IO a+interruptible act =+ getMaskingState `primBind` \ b ->+ case b of+ Unmasked -> act+ MaskedInterruptible -> unsafeUnmask act+ MaskedUninterruptible -> act
lib/Data/Double.hs view
@@ -1,93 +1,20 @@ module Data.Double(Double) where import qualified Prelude()-import Primitives-import Data.Bool+import Data.Enum import Data.Eq import Data.FloatW import Data.Floating import Data.Fractional-import Data.Function-import Data.List import Data.Num import Data.Ord import Data.Real import Data.RealFloat import Data.RealFrac+import Mhs.Builtin import Text.Show --- XXX I should really implement newtype deriving...- newtype Double = D FloatW-unD :: Double -> FloatW-unD (D x) = x--un :: (FloatW -> FloatW) -> (Double -> Double)-un f x = D (f (unD x))--bin :: (FloatW -> FloatW -> FloatW) -> (Double -> Double -> Double)-bin f x y = D (f (unD x) (unD y))--cmp :: (FloatW -> FloatW -> Bool) -> (Double -> Double -> Bool)-cmp f x y = f (unD x) (unD y)--instance Num Double where- (+) = bin (+)- (-) = bin (-)- (*) = bin (*)- negate = un negate- abs = un abs- signum = un signum- fromInteger = D . fromInteger--instance Fractional Double where- (/) = bin (/)- fromRational = D . fromRational--instance Eq Double where- (==) = cmp (==)- (/=) = cmp (/=)--instance Ord Double where- (<) = cmp (<)- (<=) = cmp (<=)- (>) = cmp (>)- (>=) = cmp (>=)+ deriving(Eq, Ord, Num, Fractional, Real, RealFrac, Floating, RealFloat, Enum) instance Show Double where- showsPrec p = showsPrec p . unD--{- in Text.Read.Internal-instance Read Double where- readsPrec p = map (\ (x, s) -> (D x, s)) . readsPrec p--}--instance Real Double where- toRational = toRational . unD--instance RealFrac Double where- properFraction x = (a, D b) where (a, b) = properFraction (unD x)--instance Floating Double where- pi = D pi- log = un log- exp = un exp- sqrt = un sqrt- sin = un sin- cos = un cos- tan = un tan- asin = un asin- acos = un acos- atan = un atan--instance RealFloat Double where- floatRadix = floatRadix . unD- floatDigits = floatDigits . unD- floatRange = floatRange . unD- decodeFloat = decodeFloat . unD- encodeFloat e = D . encodeFloat e- isNaN = isNaN . unD- isInfinite = isInfinite . unD- isDenormalized = isDenormalized . unD- isNegativeZero = isNegativeZero . unD- isIEEE = isIEEE . unD- atan2 = bin atan2+ showsPrec p (D x) = showsPrec p x
lib/Data/Enum.hs view
@@ -13,30 +13,13 @@ import Data.Bool import Data.Char_Type import Data.Bounded+import Data.Enum_Class import Data.Function import Data.Int import Data.List import Data.Num import Data.Ord -class Enum a where- succ :: a -> a- pred :: a -> a- toEnum :: Int -> a- fromEnum :: a -> Int-- enumFrom :: a -> [a]- enumFromThen :: a -> a -> [a]- enumFromTo :: a -> a -> [a]- enumFromThenTo :: a -> a -> a -> [a]-- succ = toEnum . (+ 1) . fromEnum- pred = toEnum . subtract 1 . fromEnum- enumFrom x = map toEnum [fromEnum x ..]- enumFromThen x y = map toEnum [fromEnum x, fromEnum y ..]- enumFromTo x y = map toEnum [fromEnum x .. fromEnum y]- enumFromThenTo x1 x2 y = map toEnum [fromEnum x1, fromEnum x2 .. fromEnum y]- boundedEnumFrom :: forall a . (Enum a, Bounded a) => a -> [a] boundedEnumFrom n = map toEnum [fromEnum n .. fromEnum (maxBound `asTypeOf` n)] @@ -66,49 +49,6 @@ takeWhile (<= h) (numericEnumFromThen l m) else takeWhile (>= h) (numericEnumFromThen l m)--eftInt :: Int -> Int -> [Int]-eftInt x y = if x `primIntGT` y then [] else go x- where- go n = n : if n `primIntEQ` y then [] else go (n `primIntAdd` 1)--efttIntUp :: Int -> Int -> Int -> [Int]--- x2 >= x1-efttIntUp x1 x2 y- | y `primIntLT` x2 = if y `primIntLT` x1 then [] else [x1]- | otherwise =- let- delta = x2 `primIntSub` x1- y' = y `primIntSub` delta- go x = if x `primIntGT` y' then [x] else x : go (x `primIntAdd` delta)- in x1 : go x2--efttIntDown :: Int -> Int -> Int -> [Int]--- x2 <= x1-efttIntDown x1 x2 y- | y `primIntGT` x2 = if y `primIntGT` x1 then [] else [x1]- | otherwise =- let- delta = x2 `primIntSub` x1- y' = y `primIntSub` delta- go x = if x `primIntLT` y' then [x] else x : go (x `primIntAdd` delta)- in x1 : go x2---- This instance is difficult to put in Data.Int,--- so it gets to live here.-instance Enum Int where- succ x = if x `primIntEQ` maxBound then error "Int.succ: overflow" else x + 1- pred x = if x `primIntEQ` minBound then error "Int.pred: underflow" else x - 1- toEnum x = x- fromEnum x = x- enumFrom n = eftInt n maxBound- enumFromThen x1 x2- | x2 `primIntGE` x1 = efttIntUp x1 x2 maxBound- | otherwise = efttIntDown x1 x2 minBound- enumFromTo = eftInt- enumFromThenTo x1 x2 y- | x2 `primIntGE` x1 = efttIntUp x1 x2 y- | otherwise = efttIntDown x1 x2 y -- Likewise for Bool instance Enum Bool where
+ lib/Data/Enum_Class.hs view
@@ -0,0 +1,72 @@+module Data.Enum_Class(Enum(..)) where+import qualified Prelude()+import Primitives+import Control.Error+import Data.Bool+import Data.Function((.))+import Data.List_Type++class Enum a where+ succ :: a -> a+ pred :: a -> a+ toEnum :: Int -> a+ fromEnum :: a -> Int++ enumFrom :: a -> [a]+ enumFromThen :: a -> a -> [a]+ enumFromTo :: a -> a -> [a]+ enumFromThenTo :: a -> a -> a -> [a]++ succ = toEnum . primIntAdd 1 . fromEnum+ pred = toEnum . primIntSubR 1 . fromEnum+ enumFrom x = [ toEnum i | i <- [fromEnum x ..] ]+ enumFromThen x y = [ toEnum i | i <- [fromEnum x, fromEnum y ..] ]+ enumFromTo x y = [ toEnum i | i <- [fromEnum x .. fromEnum y] ]+ enumFromThenTo x1 x2 y = [ toEnum i | i <- [fromEnum x1, fromEnum x2 .. fromEnum y] ]++eftInt :: Int -> Int -> [Int]+eftInt x y = if x `primIntGT` y then [] else go x+ where+ go n = n : if n `primIntEQ` y then [] else go (n `primIntAdd` 1)++efttIntUp :: Int -> Int -> Int -> [Int]+-- x2 >= x1+efttIntUp x1 x2 y+ | y `primIntLT` x2 = if y `primIntLT` x1 then [] else [x1]+ | otherwise =+ let+ delta = x2 `primIntSub` x1+ y' = y `primIntSub` delta+ go x = if x `primIntGT` y' then [x] else x : go (x `primIntAdd` delta)+ in x1 : go x2++efttIntDown :: Int -> Int -> Int -> [Int]+-- x2 <= x1+efttIntDown x1 x2 y+ | y `primIntGT` x2 = if y `primIntGT` x1 then [] else [x1]+ | otherwise =+ let+ delta = x2 `primIntSub` x1+ y' = y `primIntSub` delta+ go x = if x `primIntLT` y' then [x] else x : go (x `primIntAdd` delta)+ in x1 : go x2++-- This instance is difficult to put in Data.Int,+-- so it gets to live here.+instance Enum Int where+ succ x = if x `primIntEQ` maxInt then error "Int.succ: overflow" else x `primIntAdd` 1+ pred x = if x `primIntEQ` minInt then error "Int.pred: underflow" else x `primIntSub` 1+ toEnum x = x+ fromEnum x = x+ enumFrom n = eftInt n maxInt+ enumFromThen x1 x2+ | x2 `primIntGE` x1 = efttIntUp x1 x2 maxInt+ | otherwise = efttIntDown x1 x2 minInt+ enumFromTo = eftInt+ enumFromThenTo x1 x2 y+ | x2 `primIntGE` x1 = efttIntUp x1 x2 y+ | otherwise = efttIntDown x1 x2 y++minInt, maxInt :: Int+minInt = primWordToInt ((primWordInv (0::Word) `primWordQuot` 2) `primWordAdd` 1)+maxInt = primWordToInt (primWordInv (0::Word) `primWordQuot` 2)
lib/Data/Float.hs view
@@ -1,93 +1,20 @@ module Data.Float(Float) where import qualified Prelude()-import Primitives-import Data.Bool+import Data.Enum import Data.Eq import Data.FloatW import Data.Floating import Data.Fractional-import Data.Function-import Data.List import Data.Num import Data.Ord import Data.Real import Data.RealFloat import Data.RealFrac+import Mhs.Builtin import Text.Show --- XXX I should really implement newtype deriving...- newtype Float = D FloatW-unD :: Float -> FloatW-unD (D x) = x--un :: (FloatW -> FloatW) -> (Float -> Float)-un f x = D (f (unD x))--bin :: (FloatW -> FloatW -> FloatW) -> (Float -> Float -> Float)-bin f x y = D (f (unD x) (unD y))--cmp :: (FloatW -> FloatW -> Bool) -> (Float -> Float -> Bool)-cmp f x y = f (unD x) (unD y)--instance Num Float where- (+) = bin (+)- (-) = bin (-)- (*) = bin (*)- negate = un negate- abs = un abs- signum = un signum- fromInteger = D . fromInteger--instance Fractional Float where- (/) = bin (/)- fromRational = D . fromRational--instance Eq Float where- (==) = cmp (==)- (/=) = cmp (/=)--instance Ord Float where- (<) = cmp (<)- (<=) = cmp (<=)- (>) = cmp (>)- (>=) = cmp (>=)+ deriving(Eq, Ord, Num, Fractional, Real, RealFrac, Floating, RealFloat, Enum) instance Show Float where- showsPrec p = showsPrec p . unD--{- in Text.Read.Internal-instance Read Float where- readsPrec p = map (\ (x, s) -> (D x, s)) . readsPrec p--}--instance Real Float where- toRational = toRational . unD--instance RealFrac Float where- properFraction x = (a, D b) where (a, b) = properFraction (unD x)--instance Floating Float where- pi = D pi- log = un log- exp = un exp- sqrt = un sqrt- sin = un sin- cos = un cos- tan = un tan- asin = un asin- acos = un acos- atan = un atan--instance RealFloat Float where- floatRadix = floatRadix . unD- floatDigits = floatDigits . unD- floatRange = floatRange . unD- decodeFloat = decodeFloat . unD- encodeFloat e = D . encodeFloat e- isNaN = isNaN . unD- isInfinite = isInfinite . unD- isDenormalized = isDenormalized . unD- isNegativeZero = isNegativeZero . unD- isIEEE = isIEEE . unD- atan2 = bin atan2+ showsPrec p (D x) = showsPrec p x
lib/Data/FloatW.hs view
@@ -7,6 +7,7 @@ import Data.Bits import Data.Bool import Data.Char+import Data.Enum import Data.Eq import Data.Floating import Data.Fractional@@ -70,6 +71,16 @@ instance Read FloatW where readsPrec _ = readSigned $ \ r -> [ (primFloatWRead s, t) | (s@(c:_), t) <- lex r, isDigit c ] -}++instance Enum FloatW where+ succ x = x + 1+ pred x = x - 1+ toEnum n = fromIntegral n+ fromEnum = fromInteger . truncate+ enumFrom = numericEnumFrom+ enumFromThen = numericEnumFromThen+ enumFromTo = numericEnumFromTo+ enumFromThenTo = numericEnumFromThenTo instance Real FloatW where toRational x | isNaN x = rationalNaN
− lib/Data/Generics.hs
@@ -1,32 +0,0 @@-module Data.Generics(- ) where--type V1 :: forall (k::Kind) . k -> Type-data V1 p--type U1 :: forall (k::Kind) . k -> Type-data U1 p = U1--newtype Par1 p = Par1 p--type Rec1 :: forall (k::Kind) . (k -> Type) -> k -> Type-newtype Rec1 f p = Rec1 (f p)--type K1 :: forall (k::Kind) . Type -> Type -> k -> Type-newtype K1 i c p = K1 c--newtype M1 :: forall k . Type -> Type{-Meta-} -> (k -> Type) -> k -> Type-newtype M1 i c f p = M1 (f p)--infixr 5 :+:-type (:+:) :: forall k . (k -> Type) -> (k -> Type) -> k -> Type-data (:+:) f g p = L1 (f p) | R1 (g p)--infixr 6 :*:-type (:*:) :: forall k . (k -> Type) -> (k -> Type) -> k -> Type-data (:*:) f g p = f p :*: g p--infixr 7 :.:-type (:.:) :: forall k1 k2 . (k2 -> Type) -> (k1 -> k2) -> k1 -> Type-newtype (:.:) f g p = Comp1 (f (g p))-
lib/Data/IORef.hs view
@@ -4,6 +4,7 @@ readIORef, writeIORef, modifyIORef,+ atomicModifyIORef, ) where import qualified Prelude() -- do not import Prelude import Primitives@@ -28,3 +29,7 @@ modifyIORef :: forall a . IORef a -> (a -> a) -> IO () modifyIORef (R p) f = primArrRead p 0 `primBind` \ a -> primArrWrite p 0 (f a)++-- XXX WRONG+atomicModifyIORef :: forall a b . IORef a -> (a -> (a, b)) -> IO b+atomicModifyIORef r f = readIORef r `primBind` \ a -> let (a', b) = f a in writeIORef r a' `primThen` primReturn b
lib/Data/Int.hs view
@@ -36,8 +36,8 @@ toInteger = _intToInteger instance Bounded Int where- minBound = primWordToInt (primWordInv (0::Word) `primWordQuot` 2) + 1- maxBound = primWordToInt (primWordInv (0::Word) `primWordQuot` 2)+ minBound = primWordToInt ((primWordInv (0::Word) `primWordQuot` 2) `primWordAdd` 1)+ maxBound = primWordToInt (primWordInv (0::Word) `primWordQuot` 2) instance Real Int where toRational i = _integerToRational (_intToInteger i)@@ -54,26 +54,24 @@ (>=) = primIntGE instance Show Int where- show = showInt_---- XXX these should not be exported-showInt_ :: Int -> String-showInt_ n =- if n < 0 then- '-' : _showUnsignedNegInt n- else- _showUnsignedNegInt (- n)+ showsPrec p n r =+ if n < (0::Int) then+ if p > (6::Int) then+ '(' : '-' : showUnsignedNegInt n (')' : r)+ else+ '-' : showUnsignedNegInt n r+ else+ showUnsignedNegInt (- n) r -- Some trickery to show minBound correctly. -- To print the number n, pass -n.-_showUnsignedNegInt :: Int -> String-_showUnsignedNegInt n =- let- c = primChr (primOrd '0' - rem n 10)- in if n > -10 then- [c]+showUnsignedNegInt :: Int -> ShowS+showUnsignedNegInt n r =+ let c = primChr (primOrd '0' - rem n (10::Int))+ in if n > -(10::Int) then+ c : r else- _showUnsignedNegInt (quot n 10) ++ [c]+ showUnsignedNegInt (quot n (10::Int)) (c : r) --------------------------------
lib/Data/Integral.hs view
@@ -5,6 +5,7 @@ import Primitives import Control.Error import Data.Bool+import Data.Enum_Class import Data.Eq import Data.Integer_Type import Data.Num@@ -16,7 +17,7 @@ -- XXX Importing Data.Enum causes an import cycle. -- I don't really see the point of Enum as a superclass.-class (Real a{-, Enum a-}) => Integral a where+class (Real a, Enum a) => Integral a where quot :: a -> a -> a rem :: a -> a -> a div :: a -> a -> a
− lib/Data/MArray.hs
@@ -1,38 +0,0 @@-module Data.Array (- module Data.Ix,- Array,- array,- listArray,- accumArray,- (!),- bounds,- indices,- elems,- assocs,- (//),- accum,- ixmap,- ) where--import Data.Ix-- -- Array instances:- --- -- Ix a => Functor (Array a)- -- (Ix a, Eq b) => Eq (Array a b)- -- (Ix a, Ord b) => Ord (Array a b)- -- (Ix a, Show a, Show b) => Show (Array a b)- -- (Ix a, Read a, Read b) => Read (Array a b)- ---- array, -- :: (Ix a) => (a,a) -> [(a,b)] -> Array a b- listArray, -- :: (Ix a) => (a,a) -> [b] -> Array a b- accumArray, -- :: (Ix a) => (b -> c -> b) -> b -> (a,a) -> [(a,c)] -> Array a b- (!), -- :: (Ix a) => Array a b -> a -> b- bounds, -- :: (Ix a) => Array a b -> (a,a)- indices, -- :: (Ix a) => Array a b -> [a]- elems, -- :: (Ix a) => Array a b -> [b]- assocs, -- :: (Ix a) => Array a b -> [(a,b)]- (//), -- :: (Ix a) => Array a b -> [(a,b)] -> Array a b- accum, -- :: (Ix a) => (b -> c -> b) -> Array a b -> [(a,c)] -> Array a b- ixmap, -- :: (Ix a, Ix b) => (a,a) -> (a -> b) -> Array b c -> Array a b
lib/Data/Word.hs view
@@ -45,7 +45,16 @@ toRational i = _integerToRational (_wordToInteger i) instance Show Word where- showsPrec = showIntegral+ showsPrec _ = showUnsigned++-- Avoid showIntegral to avoid Integer+showUnsigned :: Word -> ShowS+showUnsigned n r =+ let c = primChr (primOrd '0' + primWordToInt (rem n (10::Word)))+ in if n < (10::Word) then+ c : r+ else+ showUnsigned (quot n (10::Word)) (c : r) {- in Text.Read.Internal instance Read Word where
lib/Foreign/C/Types.hs view
@@ -16,6 +16,7 @@ import Primitives import Data.Bool import Data.Coerce+import Data.Enum import Data.Eq import Data.Int import Data.Integral@@ -29,64 +30,47 @@ -- it is the same as the pointer difference type. -- And Int is the natural signed word size. newtype CChar = CChar Char- deriving (Eq, Ord)+ deriving (Eq, Ord, Enum) newtype CSChar = CSChar Int- deriving (Eq, Ord)+ deriving (Eq, Ord, Enum) newtype CUChar = CUChar Word- deriving (Eq, Ord)+ deriving (Eq, Ord, Enum) newtype CShort = CShort Int- deriving (Eq, Ord)+ deriving (Eq, Ord, Enum, Num, Integral, Real) newtype CUShort = CUShort Word- deriving (Eq, Ord)+ deriving (Eq, Ord, Enum, Num, Integral, Real) newtype CInt = CInt Int- deriving (Eq, Ord)+ deriving (Eq, Ord, Enum, Num, Integral, Real) newtype CUInt = CUInt Word- deriving (Eq, Ord)+ deriving (Eq, Ord, Enum, Num, Integral, Real) newtype CLong = CLong Int- deriving (Eq, Ord)+ deriving (Eq, Ord, Enum, Num, Integral, Real) newtype CULong = CULong Word- deriving (Eq, Ord)+ deriving (Eq, Ord, Enum, Num, Integral, Real) newtype CPtrdiff = CPtrdiff Word- deriving (Eq, Ord)+ deriving (Eq, Ord, Enum, Num, Integral, Real) newtype CSize = CSize Word- deriving (Eq, Ord)+ deriving (Eq, Ord, Enum, Num, Integral, Real) newtype CSSize = CSSize Int- deriving (Eq, Ord)+ deriving (Eq, Ord, Enum, Num, Integral, Real) newtype CLLong = CLLong Int- deriving (Eq, Ord)+ deriving (Eq, Ord, Enum, Num, Integral, Real) newtype CULLong = CULLong Word- deriving (Eq, Ord)+ deriving (Eq, Ord, Enum, Num, Integral, Real) newtype CIntPtr = CIntPtr Int- deriving (Eq, Ord)+ deriving (Eq, Ord, Enum, Num, Integral, Real) newtype CUIntPtr = CUIntPtr Word- deriving (Eq, Ord)+ deriving (Eq, Ord, Enum, Num, Integral, Real) -- XXX This is really platform specific newtype CTime = CTime Int deriving (Eq, Ord) --- XXX We really need GND-instance Num CInt where- CInt x + CInt y = CInt (x + y)- CInt x - CInt y = CInt (x - y)- CInt x * CInt y = CInt (x * y)- fromInteger x = CInt (fromInteger x)-instance Num CLong where- CLong x + CLong y = CLong (x + y)- CLong x - CLong y = CLong (x - y)- CLong x * CLong y = CLong (x * y)- fromInteger x = CLong (fromInteger x)-instance Integral CLong where- quotRem (CLong x) (CLong y) = (CLong q, CLong r) where (q, r) = quotRem q r- toInteger (CLong x) = toInteger x-instance Real CLong where- toRational (CLong x) = toRational x- -- XXX only one of these is actually correct newtype CFloat = CFloat FloatW- deriving (Eq, Ord)+ deriving (Eq, Ord, Num) newtype CDouble = CDouble FloatW- deriving (Eq, Ord)+ deriving (Eq, Ord, Num) -- Temporary conversion functions. intToCSize :: Int -> CSize
− lib/Interactive.hs
@@ -1,6 +0,0 @@-module Interactive(module Interactive) where-import Prelude-import System.IO.PrintOrRun-default Num (Integer, Double)-default IsString (String)-default Show (())
lib/Primitives.hs view
@@ -36,6 +36,8 @@ data ForeignPtr a data FunPtr a data IOArray a+data ThreadId+data MVar a -- (), (,), (,,), etc are built in to the compiler primIntAdd :: Int -> Int -> Int@@ -296,3 +298,46 @@ primAddFinalizer :: FunPtr (Ptr a -> IO ()) -> ForeignPtr a -> IO () primAddFinalizer = _primitive "fpfin"++primForkIO :: IO () -> IO ThreadId+primForkIO = _primitive "IO.fork"++primMyThreadId :: IO ThreadId+primMyThreadId = _primitive "IO.thid"+primThreadNum :: ThreadId -> Word+primThreadNum = _primitive "thnum"++primYield :: IO ()+primYield = _primitive "IO.yield"++primMVarToWord :: forall a . MVar a -> Word+primMVarToWord = _primitive "toInt"++primNewEmptyMVar :: forall a . IO (MVar a)+primNewEmptyMVar = _primitive "IO.newmvar"+primTakeMVar :: forall a . MVar a -> IO a+primTakeMVar = _primitive "IO.takemvar"+primReadMVar :: forall a . MVar a -> IO a+primReadMVar = _primitive "IO.readmvar"+primPutMVar :: forall a . MVar a -> a -> IO ()+primPutMVar = _primitive "IO.putmvar"+primTryTakeMVar :: MVar a -> IO b {-(Maybe a)-}+primTryTakeMVar = _primitive "IO.trytakemvar"+primTryPutMVar :: MVar a -> a -> IO Bool+primTryPutMVar = _primitive "IO.tryputmvar"+primTryReadMVar :: MVar a -> IO b {-(Maybe a)-}+primTryReadMVar = _primitive "IO.tryreadmvar"++primThreadDelay :: Int -> IO ()+primThreadDelay = _primitive "IO.threaddelay"++primThreadStatus :: ThreadId -> IO Int+primThreadStatus = _primitive "IO.threadstatus"++primIsInt :: a -> Int+primIsInt = _primitive "isint"++primGetMaskingState :: IO Int+primGetMaskingState = _primitive "IO.getmaskingstate"+primSetMaskingState :: Int -> IO ()+primSetMaskingState = _primitive "IO.setmaskingstate"
lib/System/IO.hs view
@@ -171,7 +171,15 @@ getChar = hGetChar stdin cprint :: forall a . a -> IO ()-cprint a = withHandleWr stdout $ \ p -> primRnfNoErr a `seq` primHPrint p a+cprint a = withHandleWr stdout $ \ p ->+ primRnfNoErr a `seq`+ primGC `primThen` -- Do GC reductions+ primGC `primThen`+ primGC `primThen`+ primGC `primThen`+ primGC `primThen`+ primGC `primThen`+ primHPrint p a cuprint :: forall a . a -> IO () cuprint a = withHandleWr stdout $ \ p -> primHPrint p a
lib/System/IO/Internal.hs view
@@ -35,9 +35,7 @@ pure (p == p') instance Show Handle where- show h = unsafePerformIO $- withHandleAny h $ \ p ->- return $ "Handle-" ++ show p+ show (Handle _ _ s) = "Handle(" ++ s ++ ")" -----
lib/System/IO/PrintOrRun.hs view
@@ -1,4 +1,4 @@--- Copyright 2023,2024 Lennart Augustsson+-- Copyright 2023-2025 Lennart Augustsson -- See LICENSE file for full license. module System.IO.PrintOrRun(PrintOrRun(..), _withArgs) where import qualified Prelude() -- do not import Prelude@@ -15,7 +15,12 @@ instance PrintOrRun (IO ()) where printOrRun a = a -instance forall a . Show a => PrintOrRun a where+{- Resolution of overlapping instances is not good enough for this. Yet.+instance Show a => PrintOrRun (IO a) where+ printOrRun a = a `primBind` print+-}++instance Show a => PrintOrRun a where printOrRun = print _withArgs :: [String] -> IO () -> IO ()
lib/System/Info.hs view
@@ -1,7 +1,7 @@ module System.Info(os, arch, compilerName, compilerVersion, fullCompilerVersion) where import Control.Monad import Data.Char-import Data.Version(Version(..))+import Data.Version import System.Cmd import System.Directory import System.Exit@@ -18,10 +18,7 @@ compilerName = "mhs" compilerVersion :: Version-compilerVersion = Version [0,9]--fullCompilerVersion :: Version-fullCompilerVersion = Version [0,9,0]+compilerVersion = fullCompilerVersion { versionBranch = take 2 (versionBranch fullCompilerVersion) } -- Assume the system has an uname command uname :: String -> String@@ -34,3 +31,5 @@ when (rc /= ExitSuccess) $ error "System.Into: uname failed" return $ map toLower $ filter (not . isSpace) res++fullCompilerVersion = makeVersion [0,13,0,0]
lib/dist-mcabal/autogen/Paths_libs.hs view
@@ -1,4 +1,4 @@ module Paths_libs where import Data.Version-version :: Version; version = makeVersion [0,12,5,4]-getDataDir :: IO FilePath; getDataDir = return "/Users/augustss/.mcabal/mhs-0.12.5.4/packages/base-0.12.5.4/data"+version :: Version; version = makeVersion [0,13,0,0]+getDataDir :: IO FilePath; getDataDir = return "/Users/augustss/.mcabal/mhs-0.13.0.0/packages/base-0.13.0.0/data"
mhs/MHSPrelude.hs view
@@ -38,8 +38,8 @@ import qualified Prelude() --import Primitives(primRnfNoErr, primRnfErr) import Control.Applicative(Applicative(..))-import Control.Error(error, undefined) import Control.DeepSeq.Class+import Control.Error(error, undefined) import Control.Monad(Monad(..), mapM, mapM_, sequence, sequence_, (=<<)) import Control.Monad.Fail(MonadFail(..)) import Data.Bool(Bool(..), (&&), (||), not, otherwise)
paths/Paths_MicroHs.hs view
@@ -10,4 +10,4 @@ getDataDir = return "." version :: Version-version = makeVersion [0,12,6,1]+version = makeVersion [0,13,0,0]
src/MicroHs/Compile.hs view
@@ -322,7 +322,7 @@ hasCPP <- hasLangCPP fn file' <- if hasCPP || doCPP flags then do- runCPPString flags file+ runCPPString flags fn file else return file return (Just (fn, file'))@@ -362,11 +362,11 @@ Nothing -> openFilePath dirs fileName -- If opening failed, try the next directory Just hdl -> return (Just (path, hdl)) -runCPPString :: Flags -> String -> IO String-runCPPString flags ifile = do+runCPPString :: Flags -> FilePath -> String -> IO String+runCPPString flags fn ifile = do (fni, hi) <- openTmpFile "mhsin.hs" hClose hi- writeFile fni ifile+ writeFile fni $ "#line 1 \"" ++ fn ++ "\"\n" ++ ifile (fno, ho) <- openTmpFile "mhsout.hs" runCPP flags fni fno ofile <- hGetContents ho
src/MicroHs/Deriving.hs view
@@ -42,7 +42,7 @@ derivers :: [(String, Deriver)] derivers = [("Data.Bounded.Bounded", derBounded)- ,("Data.Enum.Enum", derEnum)+ ,("Data.Enum_Class.Enum", derEnum) ,("Data.Data.Data", derData) ,("Data.Eq.Eq", derEq) ,("Data.Functor.Functor", derNotYet) -- derFunctor)@@ -423,7 +423,7 @@ nty = if length tvs /= length newtys then error "mkMethod: arity" else case subst (zip tvs newtys) mty of- EForall _ vks t -> EForall True (map (\ (IdKind i _) -> IdKind i (EVar dummyIdent)) vks) $ qvar t+ EForall q vks t -> EForall q (map (\ (IdKind i _) -> IdKind i (EVar dummyIdent)) vks) $ qvar t t -> qvar t vty = qvar $ dropContext $ dropForall $ subst (zip tvs (init newtys ++ [viaty])) mty
src/MicroHs/ExpPrint.hs view
@@ -15,7 +15,7 @@ -- Version number of combinator file. -- Must match version in eval.c. combVersion :: String-combVersion = "v7.2\n"+combVersion = "v8.0\n" -- Rename (to a numbers) top level definitions and remove unused ones. -- Also check for duplicated instances.
src/MicroHs/Expr.hs view
@@ -8,6 +8,7 @@ EDef(..), showEDefs, Deriving(..), DerStrategy(..), Expr(..), eLam, eLamWithSLoc, eEqn, eEqns, showExpr, eqExpr,+ QForm(..), Listish(..), Lit(..), showLit, CType(..),@@ -175,7 +176,7 @@ | ELazy Bool EPat -- True indicates ~p, False indicates !p | EOr [EPat] -- only in types- | EForall Bool [IdKind] EType -- True indicates explicit forall in the code+ | EForall QForm [IdKind] EType -- only while type checking | EUVar Int | EQVar Expr EType -- already resolved identifier@@ -213,7 +214,11 @@ rnf (EQVar a b) = rnf a `seq` rnf b rnf (ECon a) = rnf a +data QForm = QImpl | QExpl | QReqd +instance NFData QForm where+ rnf q = seq q ()+ data EField = EField [Ident] Expr -- a.b = e | EFieldPun [Ident] -- a.b@@ -577,7 +582,7 @@ --------------------------------- --- Enough to handle subsitution in types+-- Enough to handle subsitution in (undesguared) types subst :: [(Ident, Expr)] -> Expr -> Expr subst [] = id subst s =@@ -603,6 +608,7 @@ ELit _ _ -> ae ETuple ts -> ETuple (map sub ts) EOper t1 its -> EOper (sub t1) (map (second sub) its)+ EListish (LList [t]) -> EListish (LList [sub t]) EParen t -> EParen (sub t) _ -> error $ "subst unimplemented " ++ show ae in sub@@ -844,7 +850,7 @@ ppEqns name sepr = vcat . map (\ (Eqn ps alts) -> sep [name <+> hsep (map ppEPat ps), ppAlts sepr alts]) ppConstr :: Constr -> Doc-ppConstr (Constr iks ct c cs) = ppForall iks <+> ppCtx ct <+> ppIdent c <+> ppCs cs+ppConstr (Constr iks ct c cs) = ppForall QImpl iks <+> ppCtx ct <+> ppIdent c <+> ppCs cs where ppCs (Left ts) = hsep (map ppSType ts) ppCs (Right fs) = braces (hsep $ map f fs) where f (i, t) = ppIdent i <+> text "::" <+> ppSType t <> text ","@@ -926,7 +932,7 @@ EUVar i -> text ("_a" ++ show i) EQVar e t -> parens $ ppE e <> text ":::" <> ppE t ECon c -> {-text "***" <>-} ppCon c- EForall _ iks e -> parens $ ppForall iks <+> ppEType e+ EForall q iks e -> parens $ ppForall q iks <+> ppEType e ppApp :: [Expr] -> Expr -> Doc ppApp as (EApp f a) = ppApp (a:as) f@@ -946,9 +952,10 @@ ppField (EFieldPun is) = hcat (punctuate (text ".") (map ppIdent is)) ppField EFieldWild = text ".." -ppForall :: [IdKind] -> Doc+ppForall :: QForm -> [IdKind] -> Doc --ppForall [] = empty-ppForall iks = text "forall" <+> hsep (map ppIdKind iks) <+> text "."+ppForall q iks = text "forall" <+> hsep (map ppIdKind iks) <+> text qs+ where qs = case q of QReqd -> "->"; _ -> "." ppListish :: Listish -> Doc ppListish (LList es) = ppList ppExpr es@@ -1009,20 +1016,20 @@ ppList :: forall a . (a -> Doc) -> [a] -> Doc ppList pp xs = brackets $ hsep $ punctuate (text ",") (map pp xs) -getBindVars :: EBind -> [Ident]+getBindVars :: HasCallStack => EBind -> [Ident] getBindVars abind = case abind of Fcn i _ -> [i] PatBind p _ -> patVars p _ -> [] -getBindsVars :: [EBind] -> [Ident]+getBindsVars :: HasCallStack => [EBind] -> [Ident] getBindsVars = concatMap getBindVars eForall :: [IdKind] -> EType -> EType-eForall = eForall' True+eForall = eForall' QExpl -eForall' :: Bool -> [IdKind] -> EType -> EType+eForall' :: QForm -> [IdKind] -> EType -> EType eForall' _ [] t = t eForall' b vs t = EForall b vs t
src/MicroHs/FFI.hs view
@@ -24,7 +24,7 @@ map (\ fn -> "#include \"" ++ fn ++ "\"") includes ++ map mkHdr imps ++ ["static struct ffi_entry table[] = {"] ++- map (mkEntry . fst) imps +++ map mkEntry imps ++ ["{ 0,0 }", "};", "struct ffi_entry *xffi_table = table;"@@ -64,14 +64,14 @@ rest'' _ _ = errorMessage loc $ "bad foreign import " ++ show s loc = getSLoc i -mkEntry :: ImpEnt -> String-mkEntry (ImpStatic _ _ Func f) = "{ \"" ++ f ++ "\", mhs_" ++ f ++ "},"-mkEntry (ImpStatic _ _ Ptr f) = "{ \"&" ++ f ++ "\", mhs_addr_" ++ f ++ "},"-mkEntry (ImpStatic i _ Value _) = "{ \"" ++ f ++ "\", mhs_" ++ f ++ "}," where f = unIdent' i+mkEntry :: (ImpEnt, EType) -> String+mkEntry (ImpStatic _ _ Func f, t) = "{ \"" ++ f ++ "\", " ++ show (arity t) ++ ", mhs_" ++ f ++ "},"+mkEntry (ImpStatic _ _ Ptr f, _) = "{ \"&" ++ f ++ "\", 0, mhs_addr_" ++ f ++ "},"+mkEntry (ImpStatic i _ Value _, _) = "{ \"" ++ f ++ "\", 0, mhs_" ++ f ++ "}," where f = unIdent' i mkEntry _ = undefined mkMhsFun :: String -> String -> String-mkMhsFun fn body = "void mhs_" ++ fn ++ "(int s) { " ++ body ++ "; }"+mkMhsFun fn body = "from_t mhs_" ++ fn ++ "(int s) { " ++ body ++ "; }" checkIO :: EType -> EType checkIO iot =@@ -112,15 +112,18 @@ call = fn ++ "(" ++ intercalate ", " (zipWith mkArg as [0..]) ++ ")" fcall = if isUnit r then- call ++ "; mhs_from_Unit(s, " ++ show n ++ ")"+ call ++ "; return mhs_from_Unit(s, " ++ show n ++ ")" else- mkRet r n call+ "return " ++ mkRet r n call in mkMhsFun fn fcall mkHdr (ImpStatic i _ Value val, iot) = let r = checkIO iot body = mkRet r 0 val in mkMhsFun (unIdent' i) body mkHdr _ = undefined++arity :: EType -> Int+arity = length . fst . getArrows unIdent' :: Ident -> String unIdent' = unIdent . unQualIdent
src/MicroHs/Interactive.hs view
@@ -42,8 +42,11 @@ noSymbols = (stEmpty, stEmpty) preamble :: String-preamble = "module " ++ interactiveName ++ "(module " ++ interactiveName ++- ") where\nimport System.IO.PrintOrRun\ndefault Num (Integer, Double)\ndefault IsString (String)\ndefault Show (())\n"+preamble = "module " ++ interactiveName ++ " where\n\+ \import System.IO.PrintOrRun\n\+ \default Num (Integer, Double)\n\+ \default IsString (String)\n\+ \default Show (())\n" start :: I () start = do@@ -78,7 +81,7 @@ case words s of [] -> return True c : ws ->- case filter (isPrefixOf c . fst) commands of+ case filter (isPrefixOf c . (!!0) . words . fst) commands of [] -> do liftIO $ putStrLn "Unrecognized command" return True@@ -90,13 +93,15 @@ commands :: [(String, String -> I Bool)] commands =- [ ("quit", const $ return False)- , ("clear", const $ do+ [ ("quit quit MicroHs",+ const $ return False+ )+ , ("clear clear all definitions", const $ do updateLines (const preamble) modify $ \ is -> is{ isCache = emptyCache, isSymbols = noSymbols } return True )- , ("reload", const $ do+ , ("reload reload modules", const $ do flgs <- gets isFlags cash <- gets isCache cash' <- liftIO $ validateCache flgs cash@@ -104,26 +109,30 @@ reload return True )- , ("delete", \ del -> do- updateLines (unlines . filter (not . isPrefixOf del) . lines)+ , ("delete d delete definition(s) d", \ line -> do+ updateLines (unlines . filter (not . isPrefixOf line) . lines) return True )- , ("type", \ line -> do+ , ("type e show type of e", \ line -> do showType line return True )- , ("kind", \ line -> do+ , ("kind t show kind of t", \ line -> do showKind line return True )- , ("main", \ line -> do+ , ("main args run main with arguments", \ line -> do runMain line return True )- , ("help", \ _ -> do- liftIO $ putStrLn helpText+ , ("defs show current definitions", const $ do+ showDefs return True )+ , ("help this text", const $ do+ liftIO $ putStrLn $ helpText ++ unlines (map ((':' :) . fst) commands)+ return True+ ) ] reload :: I ()@@ -137,14 +146,6 @@ helpText :: String helpText = "\ \Commands:\n\- \:quit quit MicroHs\n\- \:reload reload modules\n\- \:clear clear all definitions\n\- \:delete d delete definition(s) d\n\- \:type e show type of e\n\- \:kind t show kind of t\n\- \:main args run main with arguments\n\- \:help this text\n\ \expr evaluate expression\n\ \defn add top level definition\n\ \"@@ -272,6 +273,11 @@ runMain :: String -> I () runMain line = oneline $ "_withArgs " ++ show (words line) ++ " main"++showDefs :: I ()+showDefs = do+ ls <- gets isLines+ liftIO $ putStrLn ls getCModule :: Cache -> TModule [LDef] getCModule cash =
src/MicroHs/Parse.hs view
@@ -545,15 +545,21 @@ -- Including '->' in pExprOp interacts poorly with '->' -- in lambda and 'case'. pType :: P EType-pType = do- vs <- pForall- t <- pTypeOp- pure $ if null vs then t else EForall True vs t+pType =+ do+ vs <- pForall'+ q <- (QExpl <$ pSymbol ".") <|> (QReqd <$ pSymbol "->")+ EForall q vs <$> pTypeOp+ <|>+ pTypeOp -pForall :: P [IdKind]-pForall = (forallKW *> some pIdKind <* pSymbol ".") <|> pure []+pForall' :: P [IdKind]+pForall' = forallKW *> some pIdKind where forallKW = pKeyword "forall" <|> pSymbol "\x2200" +pForall :: P [IdKind]+pForall = (pForall' <* pSymbol ".") <|> pure []+ pTypeOp :: P EType pTypeOp = pOperators pTypeOper pTypeArg @@ -706,8 +712,11 @@ pExprApp :: P Expr pExprApp = do f <- pAExpr- as <- many pAExpr+ as <- many pAExprArg pure $ foldl EApp f as++pAExprArg :: P Expr+pAExprArg = pAExpr <|> pLam <|> pCase <|> pLet <|> pIf <|> pDo pLam :: P Expr pLam = do
src/MicroHs/Translate.hs view
@@ -172,5 +172,20 @@ ("fpnew", _primitive "fpnew"), ("fpfin", _primitive "fpfin"), ("fp2bs", _primitive "fp2bs"),- ("bs2fp", _primitive "bs2fp")+ ("bs2fp", _primitive "bs2fp"),+ ("IO.fork", _primitive "IO.fork"),+ ("IO.thid", _primitive "IO.thid"),+ ("thnum", _primitive "thnum"),+ ("IO.throwto", _primitive "IO.throwto"),+ ("IO.yield", _primitive "IO.yield"),+ ("IO.newmvar", _primitive "IO.newmvar"),+ ("IO.takemvar", _primitive "IO.takemvar"),+ ("IO.putmvar", _primitive "IO.putmvar"),+ ("IO.readmvar", _primitive "IO.readmvar"),+ ("IO.trytakemvar", _primitive "IO.trytakemvar"),+ ("IO.tryputmvar", _primitive "IO.tryputmvar"),+ ("IO.tryreadmvar", _primitive "IO.tryreadmvar"),+ ("IO.threaddelay", _primitive "IO.threaddelay"),+ ("IO.threadstatus", _primitive "IO.threadstatus"),+ ("isint", _primitive "isint") ]
src/MicroHs/TypeCheck.hs view
@@ -543,11 +543,11 @@ tuple n = let i = tupleConstr builtinLoc n- in (i, [entry i $ EForall True [kk] $ foldr kArrow kv (replicate n kv)])+ in (i, [entry i $ EForall QExpl [kk] $ foldr kArrow kv (replicate n kv)]) -- (=>) :: forall k . Constraint -> k -> k- kImplies = EForall True [kk] $ kConstraint `kArrow` (kv `kArrow` kv)+ kImplies = EForall QExpl [kk] $ kConstraint `kArrow` (kv `kArrow` kv) -- (~) :: forall k . k -> k -> Constraint- kTypeEqual = EForall True [kk] $ kv `kArrow` (kv `kArrow` kConstraint)+ kTypeEqual = EForall QExpl [kk] $ kv `kArrow` (kv `kArrow` kConstraint) in [ -- The function arrow et al are bothersome to define in Primitives, so keep them here.@@ -577,7 +577,7 @@ vks = [IdKind (mkIdent ("a" ++ show i)) kType | i <- enumFromTo 1 n] ts = map tVarK vks r = tApps c ts- in (c, [Entry (ECon $ ConData [(c, n)] c []) $ EForall True vks $ EForall True [] $ foldr tArrow r ts ])+ in (c, [Entry (ECon $ ConData [(c, n)] c []) $ EForall QExpl vks $ EForall QExpl [] $ foldr tArrow r ts ]) in map tuple (0 : enumFromTo 2 maxTuple) kArrow :: EKind -> EKind -> EKind@@ -882,7 +882,7 @@ case etaReduce iks t of (iks', t') -> do senv <- gets synTable- putSynTable (M.insert i (EForall True iks' t') senv)+ putSynTable (M.insert i (EForall QExpl iks' t') senv) extData :: Ident -> EDef -> T () extData i d = do@@ -1086,9 +1086,9 @@ Newtype lhs c ds -> withLHS lhs $ \ lhs' -> cm kType <$> (Newtype lhs' <$> tcConstr c <*> mapM (tcDeriving lhs') ds) Type lhs t -> withLHS lhs $ \ lhs' -> first (Type lhs') <$> tInferTypeT t Class ctx lhs fds ms -> withLHS lhs $ \ lhs' -> cm kConstraint <$> (Class <$> tcCtx ctx <*> return lhs' <*> mapM tcFD fds <*> mapM tcMethod ms)- Sign is t -> Sign is <$> tCheckTypeTImpl False kType t- ForImp ie i t -> ForImp ie i <$> tCheckTypeTImpl False kType t- Instance ct m -> Instance <$> tCheckTypeTImpl True kConstraint ct <*> return m+ Sign is t -> Sign is <$> tCheckTypeTImpl QImpl kType t+ ForImp ie i t -> ForImp ie i <$> tCheckTypeTImpl QImpl kType t+ Instance ct m -> Instance <$> tCheckTypeTImpl QExpl kConstraint ct <*> return m Default mc ts -> Default (Just c) <$> mapM (tcDefault c) ts where c = fromMaybe num mc -- We cant't do this now, because the classTable has not been fully populated yet.@@ -1097,8 +1097,8 @@ _ -> return def where cm = flip (,)- tcMethod (Sign is t) = Sign is <$> (tCheckTypeTImpl False kType t >>= expandSyn)- tcMethod (DfltSign i t) = DfltSign i <$> (tCheckTypeTImpl False kType t >>= expandSyn)+ tcMethod (Sign is t) = Sign is <$> (tCheckTypeTImpl QImpl kType t >>= expandSyn)+ tcMethod (DfltSign i t) = DfltSign i <$> (tCheckTypeTImpl QImpl kType t >>= expandSyn) tcMethod m = return m tcFD (is, os) = (,) <$> mapM tcV is <*> mapM tcV os where tcV i = do { _ <- tLookup "fundep" i; return i }@@ -1112,7 +1112,7 @@ -- as the type in the instance head. tcStand :: DerStrategy -> EConstraint -> T EDef tcStand st ct = do- ct' <- tCheckTypeTImpl True kConstraint ct+ ct' <- tCheckTypeTImpl QExpl kConstraint ct -- We need the kind of the type in the instance head. -- It's needed for the number of arguments to "eta reduce", -- and also for kind checking the via type.@@ -1141,7 +1141,7 @@ -- Check that it is. k <- newUVar --traceM $ "tcDerive 1: " ++ show c- c' <- tCheckTypeTImpl True (k `kArrow` kConstraint) c+ c' <- tCheckTypeTImpl QExpl (k `kArrow` kConstraint) c --traceM $ "tcDerive 2: " ++ show c (ks, _) <- getArrows <$> derefUVar k -- get [k1,...,kn] and final kind -- Checking that the final kind is Type happens with the tc call below.@@ -1154,7 +1154,7 @@ -- The generated instance has the form 'instance ... => c ty'. -- Check that this has kind Constraint. -- Also check that any via type also fulfills this.- let tc t = do _ <- tCheckTypeTImpl True kConstraint (tApp c t); return ()+ let tc t = do _ <- tCheckTypeTImpl QExpl kConstraint (tApp c t); return () tc ty case strat of DerVia v -> tc v -- XXX should this allow implicit quantification?@@ -1247,7 +1247,7 @@ dflttys = [ (i, t) | DfltSign i t <- ms ] tCtx = tApps (qualIdent mn iCls) (map (EVar . idKindIdent) vks) mkDflt (Sign is t) = concatMap method is- where method methId = [ Sign [iDflt] $ EForall True vks $ tCtx `tImplies` ty, def $ lookup methId mdflts ]+ where method methId = [ Sign [iDflt] $ EForall QExpl vks $ tCtx `tImplies` ty, def $ lookup methId mdflts ] where ty = fromMaybe t $ lookup methId dflttys def Nothing = Fcn iDflt $ etaExp ty noDflt def (Just eqns) = Fcn iDflt eqns@@ -1466,7 +1466,7 @@ tret = tApps (qualIdent mn tycon) (map tVarK vks) addCon (Constr evks ectx c ets) = do let ts = either id (map snd) ets- cty = EForall True vks $ EForall True evks $ addConstraints ectx $ foldr (tArrow . snd) tret ts+ cty = EForall QExpl vks $ EForall QExpl evks $ addConstraints ectx $ foldr (tArrow . snd) tret ts fs = either (const []) (map fst) ets extValETop c cty (ECon $ ConData cti (qualIdent mn c) fs) mapM_ addCon cs@@ -1476,7 +1476,7 @@ t = snd $ head $ either id (map snd) ets tret = tApps (qualIdent mn tycon) (map tVarK vks) fs = either (const []) (map fst) ets- extValETop c (EForall True vks $ EForall True [] $ tArrow t tret) (ECon $ ConNew (qualIdent mn c) fs)+ extValETop c (EForall QExpl vks $ EForall QExpl [] $ tArrow t tret) (ECon $ ConNew (qualIdent mn c) fs) addConFields tycon con ForImp _ i t -> extValQTop i t Class ctx (i, vks) fds ms -> addValueClass ctx i vks fds ms@@ -1509,9 +1509,9 @@ tret = tApps qiCls (map tVarK vks) cti = [ (qualIdent mn iCon, length targs) ] iCon = mkClassConstructor iCls- iConTy = EForall True vks $ foldr tArrow tret targs+ iConTy = EForall QExpl vks $ foldr tArrow tret targs tvs = map (EVar . idKindIdent) vks- methIdTys' = map (\ (i, t) -> (i, EForall True vks $ tApps qiCls tvs `tImplies` t)) methIdTys+ methIdTys' = map (\ (i, t) -> (i, EForall QExpl vks $ tApps qiCls tvs `tImplies` t)) methIdTys addMethod (i, t) = extValETop i t (EVar $ qualIdent mn i) extValETop iCon iConTy (ECon $ ConData cti (qualIdent mn iCon) []) mapM_ addMethod methIdTys'@@ -1585,7 +1585,7 @@ ty1 = subst sub ty0 -- into rigid tyvars ty2 <- quantify (metaTvs [ty1]) (addConstraints ctx1' ty1) let (vs, ty3) = unForall ty2- ty4 = eForall' False (sks' ++ vs) ty3 -- add the skolems tyvars+ ty4 = eForall' QImpl (sks' ++ vs) ty3 -- add the skolems tyvars ty5 <- canonPatSynType ty4 -- traceM $ "tcPatSyn: tys " ++ show (ty0, ty1, ty2, ty3, ty4, ty5) addPatSyn ty5 ip@@ -1594,7 +1594,7 @@ tcPatSyn _ = impossible -- Add implicit forall-addForall :: Bool -> EType -> T EType+addForall :: QForm -> EType -> T EType addForall _ t@EForall{} = return t addForall expl t = do bvs <- stKeysLcl <$> gets valueTable -- bound outside@@ -1605,7 +1605,7 @@ return $ eForall' expl iks t -- Add implicit forall and kind check, in type mode-tCheckTypeTImpl :: HasCallStack => Bool -> EType -> EType -> T EType+tCheckTypeTImpl :: HasCallStack => QForm -> EType -> EType -> T EType tCheckTypeTImpl expl tchk t = tCheckTypeT tchk =<< addForall expl t -- Check type in type mode@@ -1913,7 +1913,7 @@ tcExpr mt $ ELet [Sign [i] t, Fcn i $ eEqns [] e] (EVar i) -} -- XXX wrong for kind signatures- t' <- withTypeTable $ tCheckTypeTImpl False kType t >>= expandSyn+ t' <- withTypeTable $ tCheckTypeTImpl QImpl kType t >>= expandSyn case splitContext t' of -- No context, handle this without a 'let' to avoid bloat. ([], [], _) -> do@@ -1983,9 +1983,14 @@ tcExprApFn :: HasCallStack => Expected -> Expr -> EType -> [Expr] -> T Expr --tcExprApFn mt fn fnt args | trace ("tcExprApFn: " ++ show (fn, fnt, args, mt)) False = undefined-tcExprApFn mt fn (EForall {-True-}_ (IdKind i k:iks) ft) (ETypeArg t : args) = do- t' <- if t `eqEType` EVar dummyIdent then newUVar else tcType (Check k) t >>= expandSyn- tcExprApFn mt fn (subst [(i, t')] $ eForall iks ft) args+tcExprApFn mt fn (EForall q (IdKind i k:iks) ft) (arg : args) | Just t <- qarg q arg = do+ t' <- if t `eqEType` EVar dummyIdent+ then newUVar+ else tcType (Check k) t >>= expandSyn+ tcExprApFn mt fn (subst [(i, t')] $ eForall' q iks ft) args+ where qarg QReqd t = Just t+ qarg _ (ETypeArg t) = Just t+ qarg _ _ = Nothing tcExprApFn mt fn atfn aargs = do -- traceM $ "tcExprApFn: " ++ show (mt, fn, tfn, aargs) -- xx <- gets ctxTables@@ -2080,6 +2085,10 @@ where proxy = EVar $ mkBuiltin loc "Proxy" loc = getSLoc i +dsEFieldsBind :: EBind -> T EBind+dsEFieldsBind (PatBind p e) = PatBind <$> dsEFields p <*> return e+dsEFieldsBind b = return b+ dsEField :: Expr -> EField -> T [EField] dsEField _ e@(EField _ _) = return [e] dsEField _ (EFieldPun is) = return [EField is $ EVar (last is)]@@ -2239,24 +2248,28 @@ ELam loc <$> tcEqns False t qs tcEqns :: HasCallStack => Bool -> EType -> [Eqn] -> T [Eqn]+tcEqns top t eqns = tcEqns' top t [] eqns++tcEqns' :: HasCallStack => Bool -> EType -> [IdKind] -> [Eqn] -> T [Eqn] --tcEqns _ t eqns | trace ("tcEqns: " ++ showEBind (Fcn dummyIdent eqns) ++ " :: " ++ show t) False = undefined-tcEqns top (EForall expl iks t) eqns | expl = withExtTyps iks $ tcEqns top t eqns- | otherwise = tcEqns top t eqns-tcEqns top t eqns | Just (ctx, t') <- getImplies t = do+tcEqns' top (EForall QExpl iks t) reqd eqns = withExtTyps iks $ tcEqns' top t reqd eqns+tcEqns' top (EForall QImpl _ t) reqd eqns = tcEqns' top t reqd eqns+tcEqns' top (EForall QReqd iks t) reqd eqns = tcEqns' top t (reqd ++ iks) eqns+tcEqns' top t reqd eqns | Just (ctx, t') <- getImplies t = do let loc = getSLoc eqns d <- newADictIdent loc f <- newIdent loc "fcnD" withDict d ctx $ do- eqns' <- tcEqns top t' eqns+ eqns' <- tcEqns' top t' reqd eqns let eqn = case eqns' of [Eqn [] alts] -> Eqn [EVar d] alts _ -> Eqn [EVar d] $ EAlts [([], EVar f)] [Fcn f eqns'] return [eqn]-tcEqns top t eqns = do+tcEqns' top t reqd eqns = do let loc = getSLoc eqns f <- newIdent loc "fcnS"- (eqns', ds) <- solveAndDefault top $ mapM (tcEqn t) eqns+ (eqns', ds) <- solveAndDefault top $ mapM (tcEqn t reqd) eqns -- tcTrace $ "tcEqns done: " ++ showEBind (Fcn dummyIdent eqns') case ds of [] -> return eqns'@@ -2266,14 +2279,19 @@ eqn = Eqn [] $ EAlts [([], EVar f)] (bs ++ [Fcn f eqns']) return [eqn] -tcEqn :: HasCallStack => EType -> Eqn -> T Eqn+tcEqn :: HasCallStack => EType -> [IdKind] -> Eqn -> T Eqn --tcEqn t eqn | trace ("tcEqn: " ++ show eqn ++ " :: " ++ show t) False = undefined-tcEqn t eqn =- case eqn of- Eqn ps alts -> tcPats t ps $ \ t' ps' -> do+tcEqn t (IdKind a k : iks) eqn@(Eqn ps alts) =+ case ps of+ EVar i : ps' -> withExtTyps [IdKind i k] $ do+ addEqDict (EVar a) (EVar i) -- This bound type variable is actually equal to the one in the signature+ tcEqn t iks (Eqn ps' alts)+ _ -> tcError (getSLoc eqn) "Bad required type argument"+tcEqn t [] (Eqn ps alts) =+ tcPats t ps $ \ t' ps' -> do -- tcTrace $ "tcEqn " ++ show ps ++ " ---> " ++ show ps'- alts' <- tcAlts t' alts- return (Eqn ps' alts')+ alts' <- tcAlts t' alts+ return (Eqn ps' alts') -- Only used above tcPats :: HasCallStack =>@@ -2560,13 +2578,14 @@ tcBinds :: HasCallStack => [EBind] -> ([EBind] -> T a) -> T a tcBinds xbs ta = withFixes [ (i, fx) | Infix fx is <- xbs, i <- is ] $ do+ xbs' <- mapM dsEFieldsBind xbs let- tmap = M.fromList [ (i, t) | Sign is t <- xbs, i <- is ]- xs = getBindsVars xbs+ tmap = M.fromList [ (i, t) | Sign is t <- xbs', i <- is ]+ xs = getBindsVars xbs' multCheck xs xts <- mapM (tcBindVarT tmap) xs withExtVals xts $ do- nbs <- mapM tcBind xbs+ nbs <- mapM tcBind xbs' ta nbs -- Temporarily extend the fixity table@@ -2586,7 +2605,7 @@ t <- newUVar return (x, t) Just t -> do- tt <- withTypeTable $ tCheckTypeTImpl False kType t >>= expandSyn+ tt <- withTypeTable $ tCheckTypeTImpl QImpl kType t >>= expandSyn return (x, tt) tcBind :: EBind -> T EBind@@ -2671,7 +2690,7 @@ mapM_ (uncurry setUVar) sub ty' <- derefUVar ty putUvarSubst osubst -- reset the setUVar we did above- return (EForall False newVarsK ty')+ return (EForall QImpl newVarsK ty') -- Skolemize the given variables shallowSkolemise :: [IdKind] -> EType -> T ([TyVar], EType)@@ -2886,8 +2905,8 @@ conn = ConData cti ni [] tycon = mkMatchDataTypeName qi tr = tApps tycon $ map (EVar . idKindIdent) vks1- tn = EForall True vks1 $ EForall True [] tr- tm = EForall True vks1 $ EForall True vks2 $ etImplies ctx2 $ foldr tArrow tr ats+ tn = EForall QExpl vks1 $ EForall QExpl [] tr+ tm = EForall QExpl vks1 $ EForall QExpl vks2 $ etImplies ctx2 $ foldr tArrow tr ats ddata = Data lhs [cm, cn] [] where lhs = (unQualIdent tycon, vks1)@@ -2915,13 +2934,13 @@ canonPatSynType :: EType -> T EType canonPatSynType at = do let mkTyp rVks rCtx pVks pCtx ty =- EForall True rVks $ tImplies rCtx $- EForall True pVks $ tImplies pCtx ty+ EForall QExpl rVks $ tImplies rCtx $+ EForall QExpl pVks $ tImplies pCtx ty getImplies' :: EType -> (EConstraint, EType) getImplies' ty = fromMaybe (emptyCtx, ty) $ getImplies ty case at of- EForall False vks t0 -> do+ EForall QImpl vks t0 -> do -- Implicit forall, the xs need to be split between required and provided. let (reqCtx, t1) = getImplies' t0 (proCtx, t2) = getImplies' t1@@ -2930,7 +2949,7 @@ -- traceM "%%% implicit" pure $ mkTyp reqVks reqCtx proVks proCtx t2 - EForall True reqVks t0 -> do+ EForall _ reqVks t0 -> do -- QExpl/QReqd -- Explicit forall let (reqCtx, t1) = getImplies' t0 (proVks, t2) = unForall t1@@ -3424,10 +3443,10 @@ -- v -> rhs -- where v is a type variable (rigid or skolem), and the rhs contains -- only type constructors and type variables that are not the LHS of any rule.--- To find out if two type are equal according to the known equalites,+-- To find out if two types are equal according to the known equalites, -- we just normalize both type using the rewrite rules (which is just a substitution). -- When we get TypeFamilies the LHS has to be a type expression as well.--- And the rewrite rules can probably be obtained with Knuth-Bendix completion+-- And then rewrite rules can probably be obtained with Knuth-Bendix completion -- of the equalities. -- Note: there should be no meta variables in t1 and t2. -- XXX This guaranteed by how it's called, but I'm not sure it always works properly.@@ -3448,7 +3467,7 @@ (_, EVar i2) | isVar i2 -> (i2, t1') : aeqs (EApp f1 a1, EApp f2 a2) -> addTypeEq f1 f2 (addTypeEq a1 a2 aeqs) _ | t1' `eqEType` t2 -> aeqs- _ -> errorMessage (getSLoc t1) $ "inconsisten type equality " ++ showEType t1' ++ " ~ " ++ showEType t2'+ _ -> errorMessage (getSLoc t1) $ "inconsistent type equality " ++ showEType t1' ++ " ~ " ++ showEType t2' -- Normalize a type with the known type equalties. -- For now, it's just substitution.
src/runtime/bfile.c view
@@ -945,21 +945,21 @@ flushb(p->bfile); } -#define MAXBYTE 256+#define MAX_BYTE 256 void decode_bwt(uint8_t *data, size_t len, uint8_t *odata, size_t zero) {- size_t count[MAXBYTE];+ size_t count[MAX_BYTE]; uint32_t *pred = MALLOC(len * sizeof(uint32_t));- for(size_t i = 0; i < MAXBYTE; i++) {+ for(size_t i = 0; i < MAX_BYTE; i++) { count[i] = 0; } for(size_t i = 0; i < len; i++) { pred[i] = count[data[i]]++; } size_t sum = 0;- for(size_t i = 0; i < MAXBYTE; i++) {+ for(size_t i = 0; i < MAX_BYTE; i++) { size_t s = count[i]; count[i] = sum; sum += s;
src/runtime/config-unix-64.h view
@@ -200,6 +200,32 @@ #define TMPNAME tmpname /*+ * Define CLOCK_INIT is there is a ticking clock.+ * CLOCK_INIT will be called for initializing the clock+ */+/* On Unix we just use gettimeofday() to get the clock,+ * so no initialization is needed.+ */+#define CLOCK_INIT() do { } while(0)+/* CLOCK_T is the type of the clock values. */+#define CLOCK_T int64_t /* large enough for 290Myears */+/* CLOCK_GET returns the current clock in microseconds. */+#define CLOCK_GET clock_get+/* CLOCK_SLEEP sleeps some number of microseconds */+#define CLOCK_SLEEP usleep+CLOCK_T CLOCK_GET(void)+{+ struct timeval tv;+ (void)gettimeofday(&tv, 0); /* this is very fast, about 16ns on an M4 MacMini */+ return (uint64_t)(tv.tv_sec * 1000000 + tv.tv_usec);+}++/*+ * We want a signal handler for SIGINT.+ */+#define WANT_SIGINT 1++/* * The ERR macro should report an error and exit. * If not defined, a generic one will be used. */
src/runtime/eval.c view
@@ -29,4940 +29,5939 @@ #if WANT_GMP #include <gmp.h> #endif--#if WANT_MD5-#include "md5.h"-#endif--#if !defined(WANT_LZ77)-#define WANT_LZ77 1-#endif--#if !defined(WANT_RLE)-#define WANT_RLE 1-#endif--#if !defined(WANT_BWT)-#define WANT_BWT 1-#endif--#if WANT_LZ77-size_t lz77d(uint8_t *src, size_t srclen, uint8_t **bufp);-size_t lz77c(uint8_t *src, size_t srclen, uint8_t **bufp);-#endif--#if defined(__GNUC__) && __GNUC__ >= 14 && defined(__aarch64__)-#define REGISTER(dcl, reg) register dcl asm(#reg)-#else-#define REGISTER(dcl, reg) dcl-#endif--#include "mhsffi.h"-struct ffi_entry ffi_table[];-int num_ffi;-#define FFI_IX(i) ((i) < num_ffi ? ffi_table[i] : xffi_table[i - num_ffi])--//#include "config.h"--#define VERSION "v7.2\n"--typedef intptr_t value_t; /* Make value the same size as pointers, since they are in a union */-#define PRIvalue PRIdPTR-typedef uintptr_t uvalue_t; /* Make unsigned value the same size as pointers, since they are in a union */-#define PRIuvalue PRIuPTR-typedef uintptr_t heapoffs_t; /* Heap offsets */-#define PRIheap PRIuPTR-typedef uintptr_t tag_t; /* Room for tag, low order bit indicates AP/not-AP */-typedef intptr_t stackptr_t; /* Index into stack */--typedef uintptr_t counter_t; /* Statistics counter, can be smaller since overflow doesn't matter */-#define PRIcounter PRIuPTR-typedef uintptr_t bits_t; /* One word of bits */--#if !defined(MALLOC)-#define MALLOC malloc-#endif--#if !defined(REALLOC)-#define REALLOC realloc-#endif--#if !defined(FREE)-#define FREE free-#endif--#if !defined(EXIT)-#define EXIT exit-#endif--#if !defined(PRINT)-#define PRINT printf-#endif--#if !defined(MAIN)-#define MAIN int main(int argc, char **argv)-#endif--#if !defined(PCOMMA)-#define PCOMMA "'"-#endif /* !defined(PCOMMA) */--#if !defined(GETRAW)-int GETRAW(void) { return -1; }-#endif /* !defined(getraw) */--#if !defined(GETTIMEMILLI)-value_t GETTIMEMILLI(void) { return 0; }-#endif /* !define(GETTIMEMILLI) */--#if !defined(TMPNAME)-/* This is a really bad implementation, since it doesn't check for anything. */-char* TMPNAME(const char* pre, const char* post) {- char *s = MALLOC(strlen(pre) + 3 + strlen(post) + 1);- strcpy(s, pre);- strcat(s, "TMP");- strcat(s, post);- return s;-}-#endif--#if !defined(FFS)-/* This is pretty bad, could use deBruijn multiplication instead. */-int-FFS(bits_t x)-{- int i;- if (!x)- return 0;- for(i = 1; !(x & 1); x >>= 1, i++)- ;- return i;-}-#endif /* !defined(FFS) */--#if defined(__has_builtin)--#if __has_builtin(__builtin_popcountl)-#define BUILTIN_POPCOUNT-#endif--#endif--#if !defined(POPCOUNT)-uvalue_t POPCOUNT(uvalue_t x) {-#if defined(BUILTIN_POPCOUNT)- return __builtin_popcountl(x);-#else- uvalue_t count = 0;- while (x) {- x = x & (x - 1); // clear lowest 1 bit- count += 1;- }- return count;-#endif-}-#endif--#if defined(__GNUC__)-#define BUILTIN_CLZ-#elif defined(__clang__)--#if __has_builtin(__builtin_clzl)-#define BUILTIN_CLZ-#endif--#endif---#if !defined(CLZ)-uvalue_t CLZ(uvalue_t x) {-#if defined(BUILTIN_CLZ)- if (x == 0) return WORD_SIZE;- return __builtin_clzl(x);-#else- value_t count = WORD_SIZE;- while (x) {- x = x >> 1;- count -= 1;- }- return count;-#endif-}-#endif--#if defined(__has_builtin)--#if __has_builtin(__builtin_ctzl)-#define BUILTIN_CTZ-#endif--#endif---#if !defined(CTZ)-uvalue_t CTZ(uvalue_t x) {- if (x == 0) return WORD_SIZE;-#if defined(BUILTIN_CLZ)- return __builtin_ctzl(x);-#else- uvalue_t count = 0;- while ((x & 1) == 0) {- x = x >> 1;- count += 1;- }- return count;-#endif-}-#endif--#if !defined(WANT_ARGS)-#define WANT_ARGS 1-#endif--#if !defined(INLINE)-#define INLINE inline-#endif /* !define(INLINE) */--#if !defined(NORETURN)-#define NORETURN __attribute__ ((noreturn))-#endif /* !defined(NORETURN) */--#if !defined(COUNT)-#define COUNT(n) ++(n)-#endif--value_t-iswindows(void)-{-#if defined(ISWINDOWS)- return 1;-#else- return 0;-#endif-}--/***************************************/--/* Keep permanent nodes for LOW_INT <= i < HIGH_INT */-#define LOW_INT (-10)-#define HIGH_INT 256--#if !defined(HEAP_CELLS)-#define HEAP_CELLS 50000000-#endif--#if !defined(STACK_SIZE)-#define STACK_SIZE 100000-#endif--#if !defined(ERR)-#if WANT_STDIO-#define ERR(s) do { fprintf(stderr,"ERR: "s"\n"); EXIT(1); } while(0)-#define ERR1(s,a) do { fprintf(stderr,"ERR: "s"\n",a); EXIT(1); } while(0)-#else /* WANT_STDIO */-#define ERR(s) EXIT(1)-#define ERR1(s,a) EXIT(1)-#endif /* WANT_STDIO */-#endif /* !define(ERR) */--enum node_tag { T_FREE, T_IND, T_AP, T_INT, T_DBL, T_PTR, T_FUNPTR, T_FORPTR, T_BADDYN, T_ARR,- T_S, T_K, T_I, T_B, T_C,- T_A, T_Y, T_SS, T_BB, T_CC, T_P, T_R, T_O, T_U, T_Z, T_J,- T_K2, T_K3, T_K4, T_CCB,- T_ADD, T_SUB, T_MUL, T_QUOT, T_REM, T_SUBR, T_UQUOT, T_UREM, T_NEG,- T_AND, T_OR, T_XOR, T_INV, T_SHL, T_SHR, T_ASHR,- T_POPCOUNT, T_CLZ, T_CTZ,- T_EQ, T_NE, T_LT, T_LE, T_GT, T_GE, T_ULT, T_ULE, T_UGT, T_UGE, T_ICMP, T_UCMP,- T_FPADD, T_FP2P, T_FPNEW, T_FPFIN, // T_FPSTR,- T_FP2BS, T_BS2FP,- T_TOPTR, T_TOINT, T_TODBL, T_TOFUNPTR,- T_BININT2, T_BININT1, T_UNINT1,- T_BINDBL2, T_BINDBL1, T_UNDBL1,- T_BINBS2, T_BINBS1,-#if WANT_FLOAT- T_FADD, T_FSUB, T_FMUL, T_FDIV, T_FNEG, T_ITOF,- T_FEQ, T_FNE, T_FLT, T_FLE, T_FGT, T_FGE, T_FSHOW, T_FREAD,-#endif- T_ARR_ALLOC, T_ARR_COPY, T_ARR_SIZE, T_ARR_READ, T_ARR_WRITE, T_ARR_EQ,- T_RAISE, T_SEQ, T_EQUAL, T_COMPARE, T_RNF,- T_TICK,- T_IO_BIND, T_IO_THEN, T_IO_RETURN,- T_IO_CCBIND,- T_IO_SERIALIZE, T_IO_DESERIALIZE,- T_IO_GETARGREF,- T_IO_PERFORMIO, T_IO_PRINT, T_CATCH,- T_IO_CCALL, T_IO_GC, T_DYNSYM,- T_NEWCASTRINGLEN, T_PACKCSTRING, T_PACKCSTRINGLEN,- T_BSAPPEND, T_BSEQ, T_BSNE, T_BSLT, T_BSLE, T_BSGT, T_BSGE, T_BSCMP,- T_BSPACK, T_BSUNPACK, T_BSREPLICATE, T_BSLENGTH, T_BSSUBSTR, T_BSINDEX,- T_BSFROMUTF8, T_BSTOUTF8, T_BSHEADUTF8, T_BSTAILUTF8,- T_BSAPPENDDOT,- T_IO_STDIN, T_IO_STDOUT, T_IO_STDERR,- T_LAST_TAG,-};-static const char* tag_names[T_LAST_TAG+1] =- { "FREE", "IND", "AP", "INT", "DBL", "PTR", "FUNPTR", "FORPTR", "BADDYN", "ARR", "THID" };--struct ioarray;-struct bytestring;-struct forptr;--typedef struct node {- union {- struct node *uufun;- intptr_t uuifun;- tag_t uutag; /* LSB=1 indicates that this is a tag, LSB=0 that this is a T_AP node */- } ufun;- union {- struct node *uuarg;- value_t uuvalue;- flt_t uufloatvalue;- const char *uucstring;- void *uuptr;- HsFunPtr uufunptr;- struct ioarray *uuarray;- struct forptr *uuforptr; /* foreign pointers and byte arrays */- } uarg;-} node;-#define BIT_TAG 1-#define BIT_IND 2-#define BIT_NOTAP (BIT_TAG | BIT_IND)-#define TAG_SHIFT 2--typedef struct node* NODEPTR;-#define NIL 0-#define HEAPREF(i) &cells[(i)]-#define GETTAG(p) ((p)->ufun.uutag & BIT_NOTAP ? ( (p)->ufun.uutag & BIT_IND ? T_IND : (int)((p)->ufun.uutag >> TAG_SHIFT) ) : T_AP)-#define SETTAG(p,t) do { if (t != T_AP) { if (t == T_IND) { (p)->ufun.uutag = BIT_IND; } else { (p)->ufun.uutag = ((t) << TAG_SHIFT) | BIT_TAG; } } } while(0)-#define GETVALUE(p) (p)->uarg.uuvalue-#define GETDBLVALUE(p) (p)->uarg.uufloatvalue-#define SETVALUE(p,v) (p)->uarg.uuvalue = v-#define SETDBLVALUE(p,v) (p)->uarg.uufloatvalue = v-#define FUN(p) (p)->ufun.uufun-#define ARG(p) (p)->uarg.uuarg-#define CSTR(p) (p)->uarg.uucstring-#define PTR(p) (p)->uarg.uuptr-#define FUNPTR(p) (p)->uarg.uufunptr-#define FORPTR(p) (p)->uarg.uuforptr-#define BSTR(p) (p)->uarg.uuforptr->payload-#define ARR(p) (p)->uarg.uuarray-#define ISINDIR(p) ((p)->ufun.uuifun & BIT_IND)-#define GETINDIR(p) ((struct node*) ((p)->ufun.uuifun & ~BIT_IND))-#define SETINDIR(p,q) do { (p)->ufun.uuifun = (intptr_t)(q) | BIT_IND; } while(0)-#define NODE_SIZE sizeof(node)-#define ALLOC_HEAP(n) do { cells = MALLOC(n * sizeof(node)); } while(0)-#define LABEL(n) ((heapoffs_t)((n) - cells))-node *cells; /* All cells */--/*- * byte arrays- */-struct bytestring {- size_t size;- void *string;-};--/*- * Arrays are allocated with MALLOC()/FREE().- * During GC they are marked, and all elements in the array are- * recursively marked.- * At the end of the the mark phase there is a scan of all- * arrays, and the unmarked ones are freed.- */-struct ioarray {- struct ioarray *next; /* all ioarrays are linked together */- int permanent; /* this array should never be GC-ed */- size_t marked; /* marked during GC */- size_t size; /* number of elements in the array */- NODEPTR array[1]; /* actual size may be bigger */-};-struct ioarray *array_root = 0; /* root of all allocated arrays, linked by next */--enum fptype {- FP_FORPTR = 0, /* a regular foreign pointer to unknown memory */- FP_BSTR, /* a bytestring */- FP_MPZ, /* a GMP MPZ pointer */-};--/*- * A Haskell ForeignPtr has a normal pointer, and a finalizer- * function that is to be called when there are no more references- * to the ForeignPtr.- * A complication is that using plusForeignPtr creates a new- * ForeignPtr that must share the same finalizer.- * There is one struct forptr for each ForeignPtr. It has pointer- * to the actual data, and to a struct final which is shared between- * all ForeignPtrs that have been created with plusForeignPtr.- * During GC the used bit is set for any references to the forptr.- * The scan phase will traverse the struct final chain and run- * the finalizer, and free associated structs.- */-struct final {- struct final *next; /* the next finalizer */- HsFunPtr final; /* function to call to release resource */- void *arg; /* argument to final when called */- size_t size; /* size of memory, if known, otherwise NOSIZE */-#define NOSIZE ~0 /* used as the size in payload for actual foreign pointers */- struct forptr *back; /* back pointer to the first forptr */- short marked; /* mark bit for GC */- enum fptype fptype; /* what kind of foreign pointer */-};--/*- * Foreign pointers are also used to represent bytestrings.- * The difference between a foreign pointer and a bytestring- * is that we can serialize the latter.- * The size field is non-zero only for bytestrings.- */-struct forptr {- struct forptr *next; /* the next ForeignPtr that shares the same finalizer */- struct final *finalizer; /* the finalizer for this ForeignPtr */- struct bytestring payload; /* the actual pointer to allocated data, and maybe a size */- // char *desc;-};-struct final *final_root = 0; /* root of all allocated foreign pointers, linked by next */--REGISTER(counter_t num_reductions,r19);-counter_t num_alloc = 0;-counter_t num_gc = 0;-uintptr_t gc_mark_time = 0;-uintptr_t gc_scan_time = 0;-uintptr_t run_time = 0;--#define MAXSTACKDEPTH 0-#if MAXSTACKDEPTH-stackptr_t max_stack_depth = 0;-counter_t max_c_stack = 0;-counter_t cur_c_stack = 0;-#define MAXSTACK if (stack_ptr > max_stack_depth) max_stack_depth = stack_ptr-#else-#define MAXSTACK-#endif--NODEPTR *topnode;-NODEPTR atptr;--REGISTER(NODEPTR *stack,r20);-REGISTER(stackptr_t stack_ptr,r21);-#if STACKOVL-#define PUSH(x) do { if (stack_ptr >= stack_size-1) stackerr(); stack[++stack_ptr] = (x); MAXSTACK; } while(0)-#else /* STACKOVL */-#define PUSH(x) do { stack[++stack_ptr] = (x); MAXSTACK; } while(0)-#endif /* STACKOVL */-#define TOP(n) stack[stack_ptr - (n)]-#define POP(n) stack_ptr -= (n)-#define POPTOP() stack[stack_ptr--]-#define GCCHECK(n) gc_check((n))--heapoffs_t heap_size; /* number of heap cells */-heapoffs_t heap_start; /* first location in heap that needs GC */-REGISTER(stackptr_t stack_size,r22); /* number of stack slots */--counter_t num_marked;-counter_t max_num_marked = 0;-counter_t num_free;-counter_t num_arr_alloc;-counter_t num_arr_free;-counter_t num_fin_alloc;-counter_t num_fin_free;-counter_t num_bs_alloc;-counter_t num_bs_alloc_max;-counter_t num_bs_free;-counter_t num_bs_bytes;-counter_t num_bs_inuse;-counter_t num_bs_inuse_max;--#define BITS_PER_WORD (sizeof(bits_t) * 8)-bits_t *free_map; /* 1 bit per node, 0=free, 1=used */-heapoffs_t free_map_nwords;-heapoffs_t next_scan_index;--int want_gc_red = 0;--NORETURN-void-memerr(void)-{- ERR("Out of memory");- EXIT(1);-}--NORETURN-void-stackerr(void)-{- ERR("stack overflow");- EXIT(1);-}--/***************************************/--#include "bfile.c"--/***************************************/--struct ioarray*-arr_alloc(size_t sz, NODEPTR e)-{- struct ioarray *arr = MALLOC(sizeof(struct ioarray) + (sz-1) * sizeof(NODEPTR));- size_t i;-- if (!arr)- memerr();- arr->next = array_root;- array_root = arr;- arr->marked = 0;- arr->permanent = 0;- arr->size = sz;- for(i = 0; i < sz; i++)- arr->array[i] = e;- //PRINT("arr_alloc(%d, %p) = %p\n", (int)sz, e, arr);- num_arr_alloc++;- return arr;-}--struct ioarray*-arr_copy(struct ioarray *oarr)-{- size_t sz = oarr->size;- struct ioarray *arr = MALLOC(sizeof(struct ioarray) + (sz-1) * sizeof(NODEPTR));-- if (!arr)- memerr();- arr->next = array_root;- array_root = arr;- arr->marked = 0;- arr->permanent = 0;- arr->size = sz;- memcpy(arr->array, oarr->array, sz * sizeof(NODEPTR));- num_arr_alloc++;- return arr;-}--/*****************************************************************************/--#if WANT_TICK-struct tick_entry {- struct bytestring tick_name;- counter_t tick_count;-} *tick_table = 0;-size_t tick_table_size;-size_t tick_index;--/* Allocate a new tick table entry and return the index. */-size_t-add_tick_table(struct bytestring name)-{- if (!tick_table) {- tick_table_size = 100;- tick_table = malloc(tick_table_size * sizeof(struct tick_entry));- if (!tick_table)- memerr();- tick_index = 0;- }- if (tick_index >= tick_table_size) {- tick_table_size *= 2;- tick_table = REALLOC(tick_table, tick_table_size * sizeof(struct tick_entry));- if (!tick_table)- memerr();- }- tick_table[tick_index].tick_name = name;- tick_table[tick_index].tick_count = 0;- return tick_index++;-}--/* Called with the tick index. */-static inline void-dotick(value_t i)-{- tick_table[i].tick_count++;-}--void-dump_tick_table(FILE *f)-{- if (!tick_table) {- fprintf(f, "Tick table empty\n");- return;- }- for (size_t i = 0; i < tick_index; i++) {- counter_t n = tick_table[i].tick_count;- if (n)- fprintf(f, "%-60s %10"PRIcounter"\n", (char *)tick_table[i].tick_name.string, n);- }-}-#endif--/*****************************************************************************/--struct handler {- jmp_buf hdl_buf; /* env storage */- struct handler *hdl_old; /* old handler */- stackptr_t hdl_stack; /* old stack pointer */- NODEPTR hdl_exn; /* used temporarily to pass the exception value */-} *cur_handler = 0;--/* Set FREE bit to 0 */-static INLINE void mark_used(NODEPTR n)-{- heapoffs_t i = LABEL(n);- if (i < heap_start)- return;-#if SANITY- if (i >= free_map_nwords * BITS_PER_WORD) ERR("mark_used");-#endif- free_map[i / BITS_PER_WORD] &= ~(1ULL << (i % BITS_PER_WORD));-}--/* Set FREE bit to 1, used to undo marking in GC */-static INLINE void mark_unused(NODEPTR n)-{- heapoffs_t i = LABEL(n);-#if SANITY- if (i < heap_start)- ERR("Unmarking invalid heap address.");- if (i >= free_map_nwords * BITS_PER_WORD) ERR("mark_used");-#endif- free_map[i / BITS_PER_WORD] |= 1ULL << (i % BITS_PER_WORD);-}--/* Test if FREE bit is 0 */-static INLINE int is_marked_used(NODEPTR n)-{- heapoffs_t i = LABEL(n);- if (i < heap_start)- return 1;-#if SANITY- if (i >= free_map_nwords * BITS_PER_WORD)- ERR("is_marked_used");-#endif- return (free_map[i / BITS_PER_WORD] & (1ULL << (i % BITS_PER_WORD))) == 0;-}--static INLINE void mark_all_free(void)-{- memset(free_map, ~0, free_map_nwords * sizeof(bits_t));- next_scan_index = heap_start;-}--#if WANT_ARGS-/* This single element array hold a list of the program arguments. */-struct ioarray *argarray;-#endif /* WANT_ARGS */--int verbose = 0;-int gcbell = 0;--static INLINE NODEPTR-alloc_node(enum node_tag t)-{- heapoffs_t i = next_scan_index / BITS_PER_WORD;- int k; /* will contain bit pos + 1 */- heapoffs_t pos;- NODEPTR n;- heapoffs_t word;-- /* This can happen if we run out of memory when parsing. */- if (num_free <= 0)- ERR("alloc_node");-- for(;;) {- word = free_map[i];- if (word)- break;- i++;-#if SANITY- if (i >= free_map_nwords) {-#if 0- fprintf(stderr, "wordsize=%u, num_free=%u next_scan_index=%u i=%u free_map_nwords=%u\n", (uint)BITS_PER_WORD,- (uint)num_free, (uint)next_scan_index, (uint)i, (uint)free_map_nwords);-#endif- ERR("alloc_node: free_map");- }-#endif- }- k = FFS(word);- pos = i * BITS_PER_WORD + k - 1; /* first free node */- n = HEAPREF(pos);- // mark_used(n); // equivalent to:- free_map[i] = word & (word-1);- next_scan_index = pos;-- SETTAG(n, t);- COUNT(num_alloc);- num_free--;- return n;-}--static INLINE NODEPTR-new_ap(NODEPTR f, NODEPTR a)-{- NODEPTR n = alloc_node(T_AP);- FUN(n) = f;- ARG(n) = a;- return n;-}--/* Needed during reduction */-NODEPTR intTable[HIGH_INT - LOW_INT];-NODEPTR combK, combTrue, combUnit, combCons, combPair;-NODEPTR combCC, combZ, combIOBIND, combIORETURN, combIOCCBIND, combB, combC;-NODEPTR combLT, combEQ, combGT;-NODEPTR combShowExn, combU, combK2, combK3;-NODEPTR combBININT1, combBININT2, combUNINT1;-NODEPTR combBINDBL1, combBINDBL2, combUNDBL1;-NODEPTR combBINBS1, combBINBS2;-NODEPTR comb_stdin, comb_stdout, comb_stderr;-#define combFalse combK--/* One node of each kind for primitives, these are never GCd. */-/* We use linear search in this, because almost all lookups- * are among the combinators.- */-struct {- const char *name;- const enum node_tag tag;- const enum node_tag flipped; /* What should (C op) reduce to? defaults to T_FREE */- NODEPTR node;-} primops[] = {- /* combinators */- /* sorted by frequency in a typical program */- { "B", T_B },- { "O", T_O },- { "K", T_K },- { "C'", T_CC },- { "C", T_C },- { "A", T_A },- { "S'", T_SS },- { "P", T_P },- { "R", T_R },- { "I", T_I },- { "S", T_S },- { "U", T_U },- { "Y", T_Y },- { "B'", T_BB },- { "Z", T_Z },- /* { "J", T_J },*/- { "K2", T_K2 },- { "K3", T_K3 },- { "K4", T_K4 },- { "C'B", T_CCB },-/* primops */- { "+", T_ADD, T_ADD },- { "-", T_SUB, T_SUBR },- { "*", T_MUL, T_MUL },- { "quot", T_QUOT },- { "rem", T_REM },- { "uquot", T_UQUOT },- { "urem", T_UREM },- { "subtract", T_SUBR, T_SUB },- { "neg", T_NEG },- { "and", T_AND, T_AND },- { "or", T_OR, T_OR },- { "xor", T_XOR, T_XOR },- { "inv", T_INV },- { "shl", T_SHL },- { "shr", T_SHR },- { "ashr", T_ASHR },- { "popcount", T_POPCOUNT },- { "clz", T_CLZ },- { "ctz", T_CTZ },-#if WANT_FLOAT- { "f+" , T_FADD, T_FADD},- { "f-" , T_FSUB },- { "f*" , T_FMUL, T_FMUL},- { "f/", T_FDIV},- { "fneg", T_FNEG},- { "itof", T_ITOF},- { "f==", T_FEQ, T_FEQ},- { "f/=", T_FNE, T_FNE},- { "f<", T_FLT, T_FGT},- { "f<=", T_FLE, T_FGE},- { "f>", T_FGT, T_FLT},- { "f>=", T_FGE, T_FLE},- { "fshow", T_FSHOW},- { "fread", T_FREAD},-#endif /* WANT_FLOAT */-- { "bs++", T_BSAPPEND },- { "bs++.", T_BSAPPENDDOT },- { "bs==", T_BSEQ, T_BSEQ },- { "bs/=", T_BSNE, T_BSNE },- { "bs<", T_BSLT, T_BSGT },- { "bs<=", T_BSLE, T_BSGE },- { "bs>", T_BSGT, T_BSLT },- { "bs>=", T_BSGE, T_BSLE },- { "bscmp", T_BSCMP },- { "bspack", T_BSPACK },- { "bsunpack", T_BSUNPACK },- { "bsreplicate", T_BSREPLICATE },- { "bslength", T_BSLENGTH },- { "bssubstr", T_BSSUBSTR },- { "bsindex", T_BSINDEX },-- { "ord", T_I },- { "chr", T_I },- { "==", T_EQ, T_EQ },- { "/=", T_NE, T_NE },- { "<", T_LT, T_GT },- { "u<", T_ULT, T_UGT },- { "u<=", T_ULE, T_UGE },- { "u>", T_UGT, T_ULT },- { "u>=", T_UGE, T_ULE },- { "<=", T_LE, T_GE },- { ">", T_GT, T_LT },- { ">=", T_GE, T_LE },- { "fp+", T_FPADD },- { "fp2p", T_FP2P },- { "fpnew", T_FPNEW },- { "fpfin", T_FPFIN },- // { "fpstr", T_FPSTR },- { "fp2bs", T_FP2BS },- { "bs2fp", T_BS2FP },- { "seq", T_SEQ },- { "equal", T_EQUAL, T_EQUAL },- { "sequal", T_EQUAL, T_EQUAL },- { "compare", T_COMPARE },- { "scmp", T_COMPARE },- { "icmp", T_ICMP },- { "ucmp", T_UCMP },- { "rnf", T_RNF },- { "fromUTF8", T_BSFROMUTF8 },- { "toUTF8", T_BSTOUTF8 },- { "headUTF8", T_BSHEADUTF8 },- { "tailUTF8", T_BSTAILUTF8 },- /* IO primops */- { "IO.>>=", T_IO_BIND },- { "IO.>>", T_IO_THEN },- { "IO.return", T_IO_RETURN },- { "IO.C'BIND", T_IO_CCBIND },- { "IO.serialize", T_IO_SERIALIZE },- { "IO.print", T_IO_PRINT },- { "IO.deserialize", T_IO_DESERIALIZE },- { "IO.stdin", T_IO_STDIN },- { "IO.stdout", T_IO_STDOUT },- { "IO.stderr", T_IO_STDERR },- { "IO.getArgRef", T_IO_GETARGREF },- { "IO.performIO", T_IO_PERFORMIO },- { "IO.gc", T_IO_GC },- { "raise", T_RAISE },- { "catch", T_CATCH },- { "A.alloc", T_ARR_ALLOC },- { "A.copy", T_ARR_COPY },- { "A.size", T_ARR_SIZE },- { "A.read", T_ARR_READ },- { "A.write", T_ARR_WRITE },- { "A.==", T_ARR_EQ },- { "dynsym", T_DYNSYM },- { "newCAStringLen", T_NEWCASTRINGLEN },- { "packCString", T_PACKCSTRING },- { "packCStringLen", T_PACKCSTRINGLEN },- { "toPtr", T_TOPTR },- { "toInt", T_TOINT },- { "toDbl", T_TODBL },- { "toFunPtr", T_TOFUNPTR },-};--#if GCRED-enum node_tag flip_ops[T_LAST_TAG+1];-#endif--#if WANT_STDIO-/* Create a dummy foreign pointer for the standard stdio handles. */-/* These handles are never gc():d. */-void-mk_std(NODEPTR n, FILE *f)-{- struct final *fin = calloc(1, sizeof(struct final));- struct forptr *fp = calloc(1, sizeof(struct forptr));- if (!fin || !fp)- memerr();- BFILE *bf = add_utf8(add_FILE(f));- SETTAG(n, T_FORPTR);- FORPTR(n) = fp;- fin->arg = bf;- fin->back = fp;- fp->payload.string = bf;- fp->finalizer = fin;-}-#endif--void-init_nodes(void)-{- enum node_tag t;- size_t j;- NODEPTR n;-- ALLOC_HEAP(heap_size);- free_map_nwords = (heap_size + BITS_PER_WORD - 1) / BITS_PER_WORD; /* bytes needed for free map */- free_map = MALLOC(free_map_nwords * sizeof(bits_t));- if (!free_map)- memerr();-- /* Set up permanent nodes */- heap_start = 0;- for(t = T_FREE; t < T_LAST_TAG; t++) {- NODEPTR n = HEAPREF(heap_start++);- SETTAG(n, t);- switch (t) {- case T_K: combK = n; break;- case T_A: combTrue = n; break;- case T_I: combUnit = n; break;- case T_O: combCons = n; break;- case T_P: combPair = n; break;- case T_CC: combCC = n; break;- case T_B: combB = n; break;- case T_C: combC = n; break;- case T_Z: combZ = n; break;- case T_U: combU = n; break;- case T_K2: combK2 = n; break;- case T_K3: combK3 = n; break;- case T_IO_BIND: combIOBIND = n; break;- case T_IO_RETURN: combIORETURN = n; break;- case T_IO_CCBIND: combIOCCBIND = n; break;- case T_BININT1: combBININT1 = n; break;- case T_BININT2: combBININT2 = n; break;- case T_UNINT1: combUNINT1 = n; break;- case T_BINDBL1: combBINDBL1 = n; break;- case T_BINDBL2: combBINDBL2 = n; break;- case T_UNDBL1: combUNDBL1 = n; break;- case T_BINBS1: combBINBS1 = n; break;- case T_BINBS2: combBINBS2 = n; break;-#if WANT_STDIO- case T_IO_STDIN: comb_stdin = n; mk_std(n, stdin); break;- case T_IO_STDOUT: comb_stdout = n; mk_std(n, stdout); break;- case T_IO_STDERR: comb_stderr = n; mk_std(n, stderr); break;-#endif- default:- break;- }- for (j = sizeof primops / sizeof primops[0]; j-- > 0; ) {- if (primops[j].tag == t) {- primops[j].node = n;- }- tag_names[primops[j].tag] = primops[j].name;- }- }--#if GCRED- for (j = 0; j < sizeof primops / sizeof primops[0]; j++) {- flip_ops[primops[j].tag] = primops[j].flipped;- }-#endif-- /* The representation of the constructors of- * data Ordering = LT | EQ | GT- * do not have single constructors.- * But we can make compound one, since they are irreducible.- */-#define NEWAP(c, f, a) do { n = HEAPREF(heap_start++); SETTAG(n, T_AP); FUN(n) = (f); ARG(n) = (a); (c) = n;} while(0)- NEWAP(combLT, combZ, combFalse); /* Z B */- NEWAP(combEQ, combFalse, combFalse); /* K K */- NEWAP(combGT, combFalse, combTrue); /* K A */- {- /* The displaySomeException compiles to (U (U (K2 A))) */- NODEPTR x;- NEWAP(x, combK2, combTrue); /* (K2 A) */- NEWAP(x, combU, x); /* (U (K2 A)) */- NEWAP(combShowExn, combU, x); /* (U (U (K2 A))) */- }-#undef NEWAP--#if INTTABLE- /* Allocate permanent Int nodes */- for (int i = LOW_INT; i < HIGH_INT; i++) {- NODEPTR n = HEAPREF(heap_start++);- intTable[i - LOW_INT] = n;- SETTAG(n, T_INT);- SETVALUE(n, i);- }-#endif-- /* Round up heap_start to the next bitword boundary to avoid the permanent nodes. */- heap_start = (heap_start + BITS_PER_WORD - 1) / BITS_PER_WORD * BITS_PER_WORD;-- mark_all_free();-- num_free = heap_size - heap_start;-}--#if GCRED-counter_t red_a, red_k, red_i, red_int, red_flip, red_bi, red_bxi, red_ccbi, red_cc;-#endif-counter_t red_bb, red_k4, red_k3, red_k2, red_ccb, red_z, red_r;--//counter_t mark_depth;-//counter_t max_mark_depth = 0;--/* Follow indirections */-static INLINE NODEPTR-indir(NODEPTR *np)-{- NODEPTR n = *np;- while (GETTAG(n) == T_IND)- n = GETINDIR(n);- *np = n;- return n;-}--/* Mark all used nodes reachable from *np, updating *np. */-void-mark(NODEPTR *np)-{- stackptr_t stk = stack_ptr;- NODEPTR n;- NODEPTR *to_push = 0; /* silence warning by initializing */-#if GCRED- value_t val;-#endif- enum node_tag tag;-- // mark_depth++;- // if (mark_depth % 10000 == 0)- // PRINT("mark depth %"PRIcounter"\n", mark_depth);- top:- n = *np;- tag = GETTAG(n);- if (tag == T_IND) {-#if SANITY- int loop = 0;- /* Skip indirections, and redirect start pointer */- while ((tag = GETTAG(n)) == T_IND) {- // PRINT("*"); fflush(stdout);- n = GETINDIR(n);- if (loop++ > 10000000) {- //PRINT("%p %p %p\n", n, GETINDIR(n), GETINDIR(GETINDIR(n)));- ERR("IND loop");- }- }- // if (loop)- // PRINT("\n");-#else /* SANITY */- while ((tag = GETTAG(n)) == T_IND) {- n = GETINDIR(n);- }-#endif /* SANITY */- *np = n;- }- if (n < cells || n > cells + heap_size)- ERR("bad n");- if (is_marked_used(n)) {- goto fin;- }- num_marked++;- mark_used(n);- switch (tag) {-#if GCRED- case T_INT:-#if INTTABLE- if (LOW_INT <= (val = GETVALUE(n)) && val < HIGH_INT) {- SETINDIR(n, intTable[val - LOW_INT]);- COUNT(red_int);- goto top;- }- goto fin;-#endif /* INTTABLE */- case T_AP:- if (want_gc_red) {- enum node_tag funt = GETTAG(indir(&FUN(n)));- enum node_tag argt = GETTAG(indir(&ARG(n)));- enum node_tag funfunt = funt == T_AP ? GETTAG(indir(&FUN(FUN(n)))) : T_FREE;-- /* This is really only fruitful just after parsing. It can be removed. */- if (funfunt == T_A) {- /* Do the A x y --> y reduction */- NODEPTR y = ARG(n);- SETINDIR(n, y);- COUNT(red_a);- goto top;- }-- if (funfunt == T_K) {- /* Do the K x y --> x reduction */- NODEPTR x = ARG(FUN(n));- SETINDIR(n, x);- COUNT(red_k);- goto top;- }-- if (funt == T_I) {- /* Do the I x --> x reduction */- NODEPTR x = ARG(n);- SETINDIR(n, x);- COUNT(red_i);- goto top;- }-- if(funt == T_B && argt == T_I) { - /* B I --> I */- SETTAG(n, T_I);- COUNT(red_bi);- goto top;- }-- if(funfunt == T_B && argt == T_I) { - /* B x I --> x */- NODEPTR x = ARG(FUN(n));- SETINDIR(n, x);- COUNT(red_bxi);- goto top;- }-- if(funfunt == T_CCB && argt == T_I) { - /* C'B x I --> x */- NODEPTR x = ARG(FUN(n));- SETINDIR(n, x);- COUNT(red_ccbi);- goto top;- }-- if(funt == T_C && argt == T_C) { - /* C C --> I */- SETTAG(n, T_I);- COUNT(red_cc);- goto top;- }--#if 0- /* Very rare */- if (funt == T_S && argt == T_AP && GETTAG(indir(&FUN(ARG(n)))) == T_K) {- /* S (K x) --> B x */- printf("SK"); fflush(stdout);- }-#endif--#if 0- /* Happens very rarely */- if (funt == T_C && argt == T_AP && GETTAG(indir(&FUN(ARG(n)))) == T_C) {- /* C (C a) --> a */- NODEPTR x = ARG(ARG(n));- SETINDIR(n, x);- //COUNT(red_cc);- goto top;- }-#endif-#if 0- /* Fairly frequent, but needs allocation */- if (funfunt == T_B && argt == T_AP && GETTAG(indir(&FUN(ARG(n)))) == T_K) {- /* B x (K y) --> K x y */- printf("BxK\n");- }-#endif--#if 0- /* This is broken.- * Probably because it can happen in the middle of the C reduction code.- */- DO NOT ENABLE- if (GETTAG(FUN(n)) == T_C) {- NODEPTR q = ARG(n);- enum node_tag tt, tf;- while ((tt = GETTAG(q)) == T_IND)- q = GETINDIR(q);- if ((tf = flip_ops[tt])) {- /* Do the C op --> flip_op reduction */- // PRINT("%s -> %s\n", tag_names[tt], tag_names[tf]);- SETINDIR(n, HEAPREF(tf));- COUNT(red_flip);- goto fin;- }- }-#endif- }-#else /* GCRED */- case T_AP:-#endif /* GCRED */- /* Avoid tail recursion */- np = &FUN(n);- to_push = &ARG(n);- break;- case T_ARR:- {- struct ioarray *arr = ARR(n);-- // arr->marked records marking progress through arr.- if (arr->marked >= arr->size) {- goto fin;- }- // We unmark the array as a whole and push it as long- // as there's more entries to scan.- mark_unused(n);- num_marked--;- to_push = np;- np = &arr->array[arr->marked++];- break;- }- case T_FORPTR:- FORPTR(n)->finalizer->marked = 1;- goto fin;-- default:- goto fin;- }-- if (!is_marked_used(*to_push)) {- // mark_depth++;- PUSH((NODEPTR)to_push);- }- goto top;- fin:- // if (mark_depth > max_mark_depth) {- // max_mark_depth = mark_depth;- // }- // mark_depth--;- if (stack_ptr > stk) {- np = (NODEPTR *)POPTOP();- goto top;- }- return;-}--/* Perform a garbage collection:- - First mark from all roots; roots are on the stack.-*/-void-gc(void)-{- stackptr_t i;-- num_gc++;- num_marked = 0;-#if WANT_STDIO- if (verbose > 1)- PRINT("gc mark\n");-#endif- gc_mark_time -= GETTIMEMILLI();- mark_all_free();- // mark everything reachable from the stack- for (i = 0; i <= stack_ptr; i++)- mark(&stack[i]);- // mark everything reachable from permanent array nodes- for (struct ioarray *arr = array_root; arr; arr = arr->next) {- if (arr->permanent) {- for (i = 0; i < arr->size; i++)- mark(&arr->array[i]);- }- }- gc_mark_time += GETTIMEMILLI();-- if (num_marked > max_num_marked)- max_num_marked = num_marked;- num_free = heap_size - heap_start - num_marked;- if (num_free < heap_size / 50)- ERR("heap exhausted");-- gc_scan_time -= GETTIMEMILLI();- /* Free unused arrays */- for (struct ioarray **arrp = &array_root; *arrp; ) {- struct ioarray *arr = *arrp;- if (arr->marked || arr->permanent) {- arr->marked = 0;- arrp = &arr->next;- } else {- *arrp = arr->next; /* unlink */- num_arr_free++;- FREE(arr); /* and FREE */- }- }-- /* Run finalizers on unused foreign pointers. */- for (struct final **finp = &final_root; *finp; ) {- struct final *fin = *finp;- if (fin->marked) {- fin->marked = 0;- finp = &fin->next;- } else {- /* Unused, run finalizer and free all associated memory */- if (fin->size == NOSIZE) {- num_fin_free++;- } else {- num_bs_free++;- num_bs_inuse -= fin->size;- if (num_bs_alloc - num_bs_free > num_bs_alloc_max)- num_bs_alloc_max = num_bs_alloc - num_bs_free;- }- void (*f)(void *) = (void (*)(void *))fin->final;- //printf("forptr free fin=%p, f=%p", fin, f);- //fflush(stdout);- if (f) {- //printf("finalizer fin=%p final=%p\n", fin, f);- (*f)(fin->arg);- }- for (struct forptr *p = fin->back; p; ) {- struct forptr *q = p->next;- //printf("free fp=%p\n", p);- //printf(" p=%p desc=%s", p, p->desc ? p->desc : "NONE");- //fflush(stdout);- FREE(p);- //memset(p, 0x55, sizeof *p);- p = q;- }- //printf("\n");- *finp = fin->next;- //printf("free fin=%p\n", fin);- FREE(fin);- //memset(fin, 0x77, sizeof *fin);- }- }- gc_scan_time += GETTIMEMILLI();--#if WANT_STDIO- if (verbose > 1) {- PRINT("gc done, %"PRIcounter" free\n", num_free);- /*PRINT(" GC reductions A=%"PRIcounter", K=%"PRIcounter", I=%"PRIcounter", int=%"PRIcounter" flip=%"PRIcounter"\n",- red_a, red_k, red_i, red_int, red_flip);*/- }- if (gcbell) {- fputc('\007', stderr); /* ring the bell */- fflush(stderr);- }-#endif /* !WANT_STDIO */--#if 0- /* For debugging only: mark all free cells */- for(int n = 0; n < heap_size; n++) {- NODEPTR p = HEAPREF(n);- if (!is_marked_used(p)) {- SETTAG(p, T_FREE);- }- }-#endif-}--/* Check that there are k nodes available, if not then GC. */-static INLINE void-gc_check(size_t k)-{- if (k < num_free)- return;-#if WANT_STDIO- if (verbose > 1)- PRINT("gc_check: %d\n", (int)k);-#endif- gc();-}--static INLINE-value_t-peekWord(value_t *p)-{- return *p;-}--static INLINE-void-pokeWord(value_t *p, value_t w)-{- *p = w;-}--static INLINE-void *-peekPtr(void **p)-{- return *p;-}--static INLINE-void-pokePtr(void **p, void *w)-{- *p = w;-}--static INLINE-uvalue_t-peek_uint8(uint8_t *p)-{- return *p;-}--static INLINE-void-poke_uint8(uint8_t *p, value_t w)-{- *p = (uint8_t)w;-}--static INLINE-uvalue_t-peek_uint16(uint16_t *p)-{- return *p;-}--static INLINE-void-poke_uint16(uint16_t *p, value_t w)-{- *p = (uint16_t)w;-}--#if WORD_SIZE >= 32-static INLINE-uvalue_t-peek_uint32(uint32_t *p)-{- return *p;-}--static INLINE-void-poke_uint32(uint32_t *p, value_t w)-{- *p = (uint32_t)w;-}-#endif /* WORD_SIZE >= 32 */--#if WORD_SIZE >= 64-static INLINE-uvalue_t-peek_uint64(uint64_t *p)-{- return *p;-}--static INLINE-void-poke_uint64(uint64_t *p, value_t w)-{- *p = (uint64_t)w;-}-#endif /* WORD_SIZE >= 64 */--static INLINE-value_t-peek_int8(int8_t *p)-{- return *p;-}--static INLINE-void-poke_int8(int8_t *p, value_t w)-{- *p = (int8_t)w;-}--static INLINE-value_t-peek_int16(int16_t *p)-{- return *p;-}--static INLINE-void-poke_int16(int16_t *p, value_t w)-{- *p = (int16_t)w;-}--#if WORD_SIZE >= 32-static INLINE-value_t-peek_int32(int32_t *p)-{- return *p;-}--static INLINE-void-poke_int32(int32_t *p, value_t w)-{- *p = (int32_t)w;-}-#endif /* WORD_SIZE >= 32 */--#if WORD_SIZE >= 64-static INLINE-value_t-peek_int64(int64_t *p)-{- return *p;-}--static INLINE-void-poke_int64(int64_t *p, value_t w)-{- *p = (int64_t)w;-}-#endif /* WORD_SIZE >= 64 */--static INLINE-value_t-peek_int(int *p)-{- return *p;-}--static INLINE-void-poke_int(int *p, value_t w)-{- *p = (int)w;-}--static INLINE-value_t-peek_uint(unsigned int *p)-{- return *p;-}--static INLINE-void-poke_uint(unsigned int *p, value_t w)-{- *p = (unsigned int)w;-}--static INLINE-value_t-peek_short(short *p)-{- return *p;-}--static INLINE-void-poke_short(short *p, value_t w)-{- *p = (short)w;-}--static INLINE-value_t-peek_ushort(unsigned short *p)-{- return *p;-}--static INLINE-void-poke_ushort(unsigned short *p, value_t w)-{- *p = (unsigned short)w;-}--static INLINE-value_t-peek_long(long *p)-{- return *p;-}--static INLINE-void-poke_long(long *p, value_t w)-{- *p = (long)w;-}--static INLINE-value_t-peek_ulong(unsigned long *p)-{- return *p;-}--static INLINE-void-poke_ulong(unsigned long *p, value_t w)-{- *p = (unsigned long)w;-}--static INLINE-value_t-peek_llong(long long *p)-{- return *p;-}--static INLINE-void-poke_llong(long long *p, value_t w)-{- *p = (long long)w;-}--static INLINE-value_t-peek_ullong(unsigned long long *p)-{- return *p;-}--static INLINE-void-poke_ullong(unsigned long long *p, value_t w)-{- *p = (unsigned long long)w;-}--#if WANT_FLOAT-static INLINE-flt_t-peek_flt(flt_t *p)-{- return *p;-}--static INLINE-void-poke_flt(flt_t *p, flt_t w)-{- *p = w;-}-#endif /* WANT_FLOAT */--/* Look up an FFI function by name */-value_t-lookupFFIname(const char *name)-{- size_t i;-- for(i = 0; ffi_table[i].ffi_name; i++)- if (strcmp(ffi_table[i].ffi_name, name) == 0)- return (value_t)i;- if (xffi_table) {- for(i = 0; xffi_table[i].ffi_name; i++)- if (strcmp(xffi_table[i].ffi_name, name) == 0)- return (value_t)(i + num_ffi);- }- return -1;-}--NODEPTR-ffiNode(const char *buf)-{- NODEPTR r;- value_t i = lookupFFIname(buf);- char *fun;-- if (i < 0) {- /* lookup failed, generate a node that will dynamically generate an error */- r = alloc_node(T_BADDYN);- fun = MALLOC(strlen(buf) + 1);- strcpy(fun, buf);- CSTR(r) = fun;- } else {- r = alloc_node(T_IO_CCALL);- SETVALUE(r, i);- }- return r;-}--/* If the next input character is c, then consume it, else leave it alone. */-int-gobble(BFILE *f, int c)-{- int d = getb(f);- if (c == d) {- return 1;- } else {- ungetb(d, f);- return 0;- }-}--/* Get a non-terminating character. ' ' and '\n' terminates a token. */-int-getNT(BFILE *f)-{- int c;-- c = getb(f);- if (c == ' ' || c == '\n') {- return 0;- } else {- return c;- }-}--value_t-parse_int(BFILE *f)-{- // Parse using uvalue_t, which wraps on overflow.- uvalue_t i = 0;- int neg = 1;- int c = getb(f);- if (c == '-') {- neg = -1;- c = getb(f);- }- for(;;) {- i = i * 10 + (c - '0');- c = getb(f);- if (c < '0' || c > '9') {- ungetb(c, f);- break;- }- }- // Multiply by neg without triggering undefined behavior.- return (value_t)(((uvalue_t)neg) * i);-}--#if WANT_FLOAT-flt_t-parse_double(BFILE *f)-{- // apparently longest float, when rendered, takes up 24 characters. We add one more for a potential- // minus sign, and another one for the final null terminator.- // https://stackoverflow.com/questions/1701055/what-is-the-maximum-length-in-chars-needed-to-represent-any-double-value- char buf[26];- for(int j = 0; (buf[j] = getNT(f)); j++)- ;-- return strtod(buf, NULL);-}-#endif--struct forptr *mkForPtr(struct bytestring bs);-NODEPTR mkFunPtr(HsFunPtr p);--/* Create a forptr that has a free() finalizer. */-struct forptr *-mkForPtrFree(struct bytestring str)-{- struct forptr *fp = mkForPtr(str); /* Create a foreign pointer */- fp->finalizer->final = (HsFunPtr)FREE; /* and set the finalizer to just free it */- return fp;-}--NODEPTR-mkStrNode(struct bytestring str)-{- NODEPTR n = alloc_node(T_FORPTR);- struct forptr *fp = mkForPtrFree(str);- FORPTR(n) = fp;- fp->finalizer->fptype = FP_BSTR;- //printf("mkForPtr n=%p fp=%p %d %s payload.string=%p\n", n, fp, (int)FORPTR(n)->payload.size, (char*)FORPTR(n)->payload.string, FORPTR(n)->payload.string);- return n;-}--NODEPTR mkInt(value_t i);-NODEPTR mkFlt(flt_t d);-NODEPTR mkPtr(void* p);--/* Table of labelled nodes for sharing during parsing. */-struct shared_entry {- heapoffs_t label;- NODEPTR node; /* NIL indicates unused */-} *shared_table;-heapoffs_t shared_table_size;--/* Look for the label in the table.- * If it's found, return the node.- * If not found, return the first empty entry.-*/-NODEPTR *-find_label(heapoffs_t label)-{- int i;-- for(i = (int)label; ; i++) {- i %= shared_table_size;- if (shared_table[i].node == NIL) {- /* The slot is empty, so claim and return it */- shared_table[i].label = label;- return &shared_table[i].node;- } else if (shared_table[i].label == label) {- /* Found the label, so return it. */- return &shared_table[i].node;- }- /* Not empty and not found, try next. */- }-}--/* The memory allocated here is never freed.- * This could be fixed by using a forptr and a- * finalizer for read UTF-8 strings.- * Fix this if there is a lot of deserialization.- */-struct bytestring-parse_string(BFILE *f)-{- struct bytestring bs;- size_t sz = 20;- uint8_t *buffer = MALLOC(sz);- size_t i;- int c;-- if (!buffer)- memerr();- for(i = 0;;) {- c = getb(f);- if (c == '"')- break;- if (i >= sz - 1) {- sz *= 2;- buffer = REALLOC(buffer, sz);- if (!buffer)- memerr();- }-#if 0- if (c == '\\') {- buffer[i++] = (uint8_t)parse_int(f);- if (!gobble(f, '&'))- ERR("parse string");- } else {- buffer[i++] = c;- }-#else- /* See src/MicroHs/ExpPrint.hs for how strings are encoded. */- switch (c) {- case '\\':- c = getb(f);- if (c == '?')- c = 0x7f;- else if (c == '_')- c = 0xff;- break;- case '^':- c = getb(f);- if (c < 0x40)- c &= 0x1f;- else- c = (c & 0x1f) | 0x80;- break;- case '|':- c = getb(f);- c |= 0x80;- break;- default:- /* Unencoded */- ;- }- buffer[i++] = c;-#endif- }- buffer[i] = 0; /* add a trailing 0 in case we need a C string */- buffer = REALLOC(buffer, i + 1);-- bs.size = i;- bs.string = buffer;- //printf("parse_string %d %s\n", (int)bs.size, (char*)bs.string);- return bs;-}--struct forptr *new_mpz(void);--NODEPTR-parse(BFILE *f)-{- stackptr_t stk = stack_ptr;- NODEPTR r, x, y;- NODEPTR *nodep;- heapoffs_t l;- value_t i;- int c;- size_t j;- char buf[80]; /* store names of primitives. */-- for(;;) {- c = getb(f);- if (c < 0) ERR("parse EOF");- switch (c) {- case ' ':- case '\n':- continue;- }- if (num_free < 3)- ERR("out of heap reading code");- GCCHECK(1);- switch(c) {- case '@':- x = TOP(0);- y = TOP(1);- POP(2);- PUSH(new_ap(y, x));- break;- case '}':- x = TOP(0);- POP(1);- if (stack_ptr != stk)- ERR("parse: stack");- return x;-#if WANT_GMP- case '%':- {- struct bytestring bs = parse_string(f); /* get all the digits, terminated by " */- struct forptr *fp = new_mpz(); /* a new mpz */- mpz_ptr op = fp->payload.string; /* get actual pointer */- mpz_set_str(op, bs.string, 10); /* convert to an mpz */- free(bs.string);- r = alloc_node(T_FORPTR);- FORPTR(r) = fp;- PUSH(r);- break;- }-#endif- case '&':-#if WANT_FLOAT- r = mkFlt(parse_double(f));-#else- while (getNT(f)) /* skip the float constant */- ;- r = alloc_node(T_DBL);- SETVALUE(r, 0);-#endif- PUSH(r);- break;- case '#':- i = parse_int(f);- r = mkInt(i);- PUSH(r);- break;- case '[':- {- size_t sz;- struct ioarray *arr;- size_t i;- sz = (size_t)parse_int(f);- if (!gobble(f, ']')) ERR("parse arr 1");- arr = arr_alloc(sz, NIL);- for (i = 0; i < sz; i++) {- arr->array[i] = TOP(sz - i - 1);- }- r = alloc_node(T_ARR);- ARR(r) = arr;- POP(sz);- PUSH(r);- break;- }- case '_':- /* Reference to a shared value: _label */- l = parse_int(f); /* The label */- nodep = find_label(l);- if (*nodep == NIL) {- /* Not yet defined, so make it an indirection */- *nodep = alloc_node(T_FREE);- SETINDIR(*nodep, NIL);- }- PUSH(*nodep);- break;- case ':':- /* Define a shared expression: :label e */- l = parse_int(f); /* The label */- if (!gobble(f, ' ')) ERR("parse ' '");- nodep = find_label(l);- x = TOP(0);- if (*nodep == NIL) {- /* not referenced yet, so add a direct reference */- *nodep = x;- } else {- /* Sanity check */- if (GETTAG(*nodep) != T_IND || GETINDIR(*nodep) != NIL) ERR("shared != NIL");- SETINDIR(*nodep, x);- }- break;- case '"':- /* Everything up to the next " is a string.- * Special characters are encoded as \NNN&,- * where NNN is the decimal value of the character */- PUSH(mkStrNode(parse_string(f)));- break;-#if WANT_TICK- case '!':- if (!gobble(f, '"'))- ERR("parse !");- i = add_tick_table(parse_string(f));- r = alloc_node(T_TICK);- SETVALUE(r, (value_t)i);- PUSH(r);- break;-#endif- case '^':- /* An FFI name */- for (j = 0; (buf[j] = getNT(f)); j++)- ;- r = ffiNode(buf);- PUSH(r);- break;- case ';':- /* <name is a C function pointer to name */- for (j = 0; (buf[j] = getNT(f)); j++)- ;- if (strcmp(buf, "0") == 0) {- PUSH(mkFunPtr((HsFunPtr)0));- } else if (strcmp(buf, "closeb") == 0) {- PUSH(mkFunPtr((HsFunPtr)closeb));- } else {- ERR1("unknown funptr '%s'", buf);- }- break;- default:- buf[0] = c;- /* A primitive, keep getting char's until end */- for (j = 1; (buf[j] = getNT(f)); j++)- ;- /* Look up the primop and use the preallocated node. */- for (j = 0; j < sizeof primops / sizeof primops[0]; j++) {- if (strcmp(primops[j].name, buf) == 0) {- r = primops[j].node;- goto found;- }- }- ERR1("no primop %s", buf);- found:- PUSH(r);- break;- }- }-}--void-checkversion(BFILE *f)-{- char *p = VERSION;- int c;-- while ((c = *p++)) {- if (c != getb(f))- ERR("version mismatch");- }- (void)gobble(f, '\r'); /* allow extra CR */-}--/* Parse a file */-NODEPTR-parse_top(BFILE *f)-{- heapoffs_t numLabels, i;- NODEPTR n;- checkversion(f);- numLabels = parse_int(f);- if (!gobble(f, '\n'))- ERR("size parse");- gobble(f, '\r'); /* allow extra CR */- shared_table_size = 3 * numLabels; /* sparsely populated hashtable */- shared_table = MALLOC(shared_table_size * sizeof(struct shared_entry));- if (!shared_table)- memerr();- for(i = 0; i < shared_table_size; i++)- shared_table[i].node = NIL;- n = parse(f);- FREE(shared_table);- return n;-}--#if WANT_STDIO-NODEPTR-parse_file(const char *fn, size_t *psize)-{- FILE *f = fopen(fn, "r");- if (!f)- ERR1("file not found %s", fn);-- /* And parse it */- BFILE *p = add_FILE(f);- NODEPTR n = parse_top(p);- *psize = ftell(f);- closeb(p);- return n;-}-#endif /* WANT_STDIO */--counter_t num_shared;--/* Two bits per node: marked, shared- * 0, 0 -- not visited- * 1, 0 -- visited once- * 1, 1 -- visited more than once- * 0, 1 -- printed- */-struct print_bits {- bits_t *marked_bits;- bits_t *shared_bits;-};-static INLINE void set_bit(bits_t *bits, NODEPTR n)-{- heapoffs_t i = LABEL(n);- bits[i / BITS_PER_WORD] |= (1ULL << (i % BITS_PER_WORD));-}-#if WANT_STDIO-static INLINE void clear_bit(bits_t *bits, NODEPTR n)-{- heapoffs_t i = LABEL(n);- bits[i / BITS_PER_WORD] &= ~(1ULL << (i % BITS_PER_WORD));-}-#endif-static INLINE int test_bit(bits_t *bits, NODEPTR n)-{- heapoffs_t i = LABEL(n);- return (bits[i / BITS_PER_WORD] & (1ULL << (i % BITS_PER_WORD))) != 0;-}--size_t strNodes(size_t len);-NODEPTR mkStringC(char *str);--#if WANT_STDIO-#if WORD_SIZE == 64-#define CONVDBL "%.16g"-#elif WORD_SIZE == 32-#define CONVDBL "%.8g"-#endif-void-convdbl(char *str, flt_t x)-{- /* Using 16 decimals will lose some precision.- * 17 would keep the precision, but it frequently looks very ugly.- */- (void)snprintf(str, 25, CONVDBL, x);- if (strcmp(str, "nan") != 0 && strcmp(str, "-nan") != 0 &&- strcmp(str, "inf") != 0 && strcmp(str, "-inf") != 0 &&- !strchr(str, '.') && !strchr(str, 'e') && !strchr(str, 'E')) {- /* There is no decimal point and no exponent, so add a decimal point */- strcat(str, ".0");- }-}--NODEPTR-dblToString(flt_t x)-{- char str[30];- convdbl(str, x);- // turn it into a mhs string- GCCHECK(strNodes(strlen(str)));- return mkStringC(str);-}--void-putdblb(flt_t x, BFILE *p)-{- char str[30];- convdbl(str, x);- putsb(str, p);-}--void printrec(BFILE *f, struct print_bits *pb, NODEPTR n, int prefix);--/* Mark all reachable nodes, when a marked node is reached, mark it as shared. */-void-find_sharing(struct print_bits *pb, NODEPTR n)-{- top:- while (GETTAG(n) == T_IND) {- n = GETINDIR(n);- }- if (n < cells || n >= cells + heap_size) abort();- //PRINT("find_sharing %p %llu ", n, LABEL(n));- tag_t tag = GETTAG(n);- if (tag == T_AP || tag == T_ARR || tag == T_FORPTR) {- if (test_bit(pb->shared_bits, n)) {- /* Alread marked as shared */- //PRINT("shared\n");- ;- } else if (test_bit(pb->marked_bits, n)) {- /* Already marked, so now mark as shared */- //PRINT("marked\n");- set_bit(pb->shared_bits, n);- num_shared++;- } else {- /* Mark as visited, and recurse */- //PRINT("unmarked\n");- set_bit(pb->marked_bits, n);- switch(tag) {- case T_AP:- find_sharing(pb, FUN(n));- n = ARG(n);- goto top;- case T_ARR:- for(size_t i = 0; i < ARR(n)->size; i++) {- find_sharing(pb, ARR(n)->array[i]);- }- break;- default:- break;- }- }- } else {- /* Not an sharable node, so do nothing */- //PRINT("not T_AP\n");- ;- }-}--void-print_string(BFILE *f, struct bytestring bs)-{- uint8_t *str = bs.string;- putb('"', f);- for (size_t i = 0; i < bs.size; i++) {- int c = str[i];-#if 0- if (c == '"' || c == '\\' || c < ' ' || c > '~') {- putb('\\', f);- putdecb(c, f);- putb('&', f);- } else {- putb(c, f);- }-#else- if (c < 0 || c > 0xff)- ERR("print_string");- if (c < 0x20) {- putb('^', f); putb(c + 0x20, f);- } else if (c == '"' || c == '^' || c == '|' || c == '\\') {- putb('\\', f); putb(c, f);- } else if (c < 0x7f) {- putb(c, f);- } else if (c == 0x7f) {- putb('\\', f); putb('?', f);- } else if (c < 0xa0) {- putb('^', f); putb(c - 0x80 + 0x40, f);- } else if (c < 0xff) {- putb('|', f); putb(c - 0x80, f);- } else { /* must be c == 0xff */- putb('\\', f); putb('_', f);- }-#endif- }- putb('"', f);-}--/*- * Recursively print an expression.- * This assumes that the shared nodes has been marked as such.- * The prefix flag is used to get a readable dump.- */-void-printrec(BFILE *f, struct print_bits *pb, NODEPTR n, int prefix)-{- int share = 0;- enum node_tag tag;-- while (GETTAG(n) == T_IND) {- //putb('*', f);- n = GETINDIR(n);- }-- if (test_bit(pb->shared_bits, n)) {- /* The node is shared */- if (test_bit(pb->marked_bits, n)) {- /* Not yet printed, so emit a label */- if (prefix) {- putb(':', f);- putdecb((value_t)LABEL(n), f);- putb(' ', f);- } else {- share = 1;- }- clear_bit(pb->marked_bits, n); /* mark as printed */- } else {- /* This node has already been printed, so just use a reference. */- putb('_', f);- putdecb((value_t)LABEL(n), f);- if (!prefix)- putb(' ', f);- return;- }- }-- //if (n == atptr) putb('@', f);- tag = GETTAG(n);- switch (tag) {- case T_AP:- if (prefix) {- putb('(', f);- printrec(f, pb, FUN(n), prefix);- putb(' ', f);- printrec(f, pb, ARG(n), prefix);- putb(')', f);- } else {- printrec(f, pb, FUN(n), prefix);- printrec(f, pb, ARG(n), prefix);- putb('@', f);- }- break;- case T_INT: putb('#', f); putdecb(GETVALUE(n), f); break;- case T_DBL: putb('&', f); putdblb(GETDBLVALUE(n), f); break;- case T_ARR:- if (prefix) {- /* Arrays serialize as '[sz] e_1 ... e_sz' */- putb('[', f);- putdecb((value_t)ARR(n)->size, f);- putb(']', f);- for(size_t i = 0; i < ARR(n)->size; i++) {- putb(' ', f);- printrec(f, pb, ARR(n)->array[i], prefix);- }- } else {- /* Arrays serialize as 'e_1 ... e_sz [sz]' */- for(size_t i = 0; i < ARR(n)->size; i++) {- printrec(f, pb, ARR(n)->array[i], prefix);- }- putb('[', f);- putdecb((value_t)ARR(n)->size, f);- putb(']', f);- }- break;- case T_PTR:- if (prefix) {- char b[200]; snprintf(b,200,"PTR<%p>",PTR(n));- putsb(b, f);- } else {- ERR("Cannot serialize pointers");- }- break;- case T_FUNPTR:- /* There are a few function pointers that happen without user FFI.- * We need to be able to serialize these.- * XXX Make a table if we need more.- */- if (FUNPTR(n) == 0) {- putsb(";0 ", f);- } else if (FUNPTR(n) == (HsFunPtr)closeb) {- putsb(";closeb ", f);- } else {- ERR1("Cannot serialize function pointers %p", FUNPTR(n));- }- break;- case T_FORPTR:- if (n == comb_stdin)- putsb("IO.stdin", f);- else if (n == comb_stdout)- putsb("IO.stdout", f);- else if (n == comb_stderr)- putsb("IO.stderr", f);-#if WANT_GMP- else if (FORPTR(n)->finalizer->fptype == FP_MPZ) {- /* Serialize as %99999" */- mpz_ptr op = FORPTR(n)->payload.string; /* get the mpz */- int sz = mpz_sizeinbase(op, 10); /* maximum length */- char *s = malloc(sz + 2);- if (!s)- memerr();- (void)mpz_get_str(s, 10, op); /* convert to a string */- putsb("%", f);- putsb(s, f);- putsb("\"", f); /* so we can use parse_string */- free(s);- }-#endif /* WANT_GMP */- else if (FORPTR(n)->finalizer->fptype == FP_BSTR) {- print_string(f, FORPTR(n)->payload);- } else {- ERR("Cannot serialize foreign pointers");- }- break;- case T_IO_CCALL: putb('^', f); putsb(FFI_IX(GETVALUE(n)).ffi_name, f); break;- case T_BADDYN: putb('^', f); putsb(CSTR(n), f); break;-- case T_TICK:- putb('!', f);- print_string(f, tick_table[GETVALUE(n)].tick_name);- break;- default:- putsb(tag_names[tag], f);- break;- }- if (!prefix) {- if (GETTAG(n) != T_AP)- putb(' ', f);- if (share) {- putb(':', f);- putdecb((value_t)LABEL(n), f);- putb(' ', f);- }- }-}--/* Serialize a graph to file. */-void-printb(BFILE *f, NODEPTR n, int header)-{- struct print_bits pb;- num_shared = 0;- pb.marked_bits = calloc(free_map_nwords, sizeof(bits_t));- if (!pb.marked_bits)- memerr();- pb.shared_bits = calloc(free_map_nwords, sizeof(bits_t));- if (!pb.shared_bits)- memerr();- find_sharing(&pb, n);- if (header) {- putsb(VERSION, f);- putdecb(num_shared, f);- putb('\n', f);- }- printrec(f, &pb, n, !header);- if (header) {- putb('}', f);- }- FREE(pb.marked_bits);- FREE(pb.shared_bits);-}--/* Show a graph. */-void-pp(FILE *f, NODEPTR n)-{- BFILE *bf = add_FILE(f);- printb(bf, n, 0);- putb('\n', bf);- freeb_file(bf);-}--#if 0-void-ppmsg(const char *msg, NODEPTR n)-{- printf("%s", msg);- pp(stdout, n);- printf("\n");-}-#endif--void-dump(const char *msg, NODEPTR at)-{-#if 0- atptr = at;- printf("dump: %s\n", msg);- pp(stdout, *topnode);-#endif-}--#else /* WANT_STDIO */-NODEPTR-dblToString(flt_t x)-{- return mkStringC("no dblToString");-}--#endif /* WANT_STDIO */--NODEPTR-mkInt(value_t i)-{-#if INTTABLE- if (LOW_INT <= i && i < HIGH_INT) {- return intTable[i - LOW_INT];- }-#endif-- NODEPTR n;- n = alloc_node(T_INT);- SETVALUE(n, i);- return n;-}--NODEPTR-mkFlt(flt_t d)-{- NODEPTR n;- n = alloc_node(T_DBL);- SETDBLVALUE(n, d);- return n;-}--NODEPTR-mkPtr(void* p)-{- NODEPTR n;- n = alloc_node(T_PTR);- PTR(n) = p;- return n;-}--NODEPTR-mkFunPtr(void (*p)(void))-{- NODEPTR n;- n = alloc_node(T_FUNPTR);- FUNPTR(n) = p;- return n;-}--struct forptr*-mkForPtr(struct bytestring bs)-{- struct final *fin = calloc(1, sizeof(struct final));- struct forptr *fp = calloc(1, sizeof(struct forptr));- if (!fin || !fp)- memerr();- if (bs.size == NOSIZE) {- num_fin_alloc++;- } else {- num_bs_alloc++;- num_bs_inuse += bs.size;- num_bs_bytes += bs.size;- if (num_bs_inuse > num_bs_inuse_max)- num_bs_inuse_max = num_bs_inuse;- }- //printf("mkForPtr p=%p fin=%p fp=%p\n", p, fin, fp);- fin->next = final_root;- final_root = fin;- fin->final = 0;- fin->arg = bs.string;- fin->size = bs.size; /* The size is not really needed */- fin->back = fp;- fin->marked = 0;- fp->next = 0;- fp->payload = bs;- fp->finalizer = fin;- // fp->desc = 0;- return fp;-}--struct forptr*-mkForPtrP(void *p)-{- struct bytestring bs = { NOSIZE, p };- return mkForPtr(bs);-}--struct forptr*-addForPtr(struct forptr *ofp, int s)-{- struct forptr *fp = malloc(sizeof(struct forptr));- struct final *fin = ofp->finalizer;- if (!fp)- memerr();- fp->next = ofp;- fin->back = fp;- if (ofp->payload.size != NOSIZE)- fp->payload.size = ofp->payload.size - s;- fp->payload.string = (uint8_t*)ofp->payload.string + s;- fp->finalizer = fin;- return fp;-}--struct forptr*-bssubstr(struct forptr *fp, value_t offs, value_t len)-{- struct forptr *res = addForPtr(fp, offs);- res->payload.size = len;- return res;-}--static INLINE NODEPTR-mkNil(void)-{- return combFalse;-}--static INLINE NODEPTR-mkCons(NODEPTR x, NODEPTR xs)-{- return new_ap(new_ap(combCons, x), xs);-}--size_t-strNodes(size_t len)-{- /* Each character will need a CHAR node and a CONS node, a CONS uses 2 T_AP nodes */- len *= (1 + 2);- /* And each string will need a NIL */- len += 1;- return len;-}--/* Turn a C string into a combinator string.- * Does NOT do UTF decoding.- */-NODEPTR-mkString(struct bytestring bs)-{- NODEPTR n, nc;- size_t i;- const unsigned char *str = bs.string; /* no sign bits, please */-- n = mkNil();- for(i = bs.size; i > 0; i--) {- nc = mkInt(str[i-1]);- n = mkCons(nc, n);- }- return n;-}--NODEPTR-mkStringC(char *str)-{- struct bytestring bs = { strlen(str), str };- return mkString(bs);-}--NODEPTR-mkStringU(struct bytestring bs)-{- BFILE *ubuf = add_utf8(openb_rd_buf(bs.string, bs.size));- NODEPTR n, *np, nc;-- //printf("mkStringU %d %s\n", (int)bs.size, (char*)bs.string);-- n = mkNil();- np = &n;- for(;;) {- int c = getb(ubuf);- if (c < 0)- break;- nc = mkInt(c);- *np = mkCons(nc, *np);- np = &ARG(*np);- }- closeb(ubuf);- return n;-}--NODEPTR-bsunpack(struct bytestring bs)-{- NODEPTR n, *np, nc;- size_t i;-- n = mkNil();- np = &n;- for(i = 0; i < bs.size; i++) {- nc = mkInt(((uint8_t *)bs.string)[i]);- *np = mkCons(nc, *np);- np = &ARG(*np);- }- return n;-}--/* XXX This should somehow be merged with other utf8 decoders */-value_t-headutf8(struct bytestring bs, void **ret)-{- uint8_t *p = bs.string;- if (bs.size == 0)- ERR("headUTF8 0");- int c1 = *p++;- if ((c1 & 0x80) == 0) {- if (ret)- *ret = p;- return c1;- }- if (bs.size == 1)- ERR("headUTF8 1");- int c2 = *p++;- if ((c1 & 0xe0) == 0xc0) {- if (ret)- *ret = p;- return ((c1 & 0x1f) << 6) | (c2 & 0x3f);- }- if (bs.size == 2)- ERR("headUTF8 2");- int c3 = *p++;- if ((c1 & 0xf0) == 0xe0) {- if (ret)- *ret = p;- return ((c1 & 0x0f) << 12) | ((c2 & 0x3f) << 6) | (c3 & 0x3f);- }- if (bs.size == 3)- ERR("headUTF8 3");- int c4 = *p++;- if ((c1 & 0xf8) == 0xf0) {- if (ret)- *ret = p;- return ((c1 & 0x07) << 18) | ((c2 & 0x3f) << 12) | ((c3 & 0x3f) << 6) | (c4 & 0x3f);- }- ERR("headUTF8 4");-}--NODEPTR evali(NODEPTR n);--/* Evaluate to an INT */-static INLINE value_t-evalint(NODEPTR n)-{- n = evali(n);-#if SANITY- if (GETTAG(n) != T_INT) {- ERR1("evalint, bad tag %d", GETTAG(n));- }-#endif- return GETVALUE(n);-}--/* Evaluate to a Flt_T */-static INLINE flt_t-evaldbl(NODEPTR n)-{- n = evali(n);-#if SANITY- if (GETTAG(n) != T_DBL) {- ERR1("evaldbl, bad tag %d", GETTAG(n));- }-#endif- return GETDBLVALUE(n);-}--/* Evaluate to a T_PTR */-void *-evalptr(NODEPTR n)-{- n = evali(n);-#if SANITY- if (GETTAG(n) != T_PTR) {- ERR1("evalptr, bad tag %d", GETTAG(n));- }-#endif- return PTR(n);-}--/* Evaluate to a T_FUNPTR */-HsFunPtr-evalfunptr(NODEPTR n)-{- n = evali(n);-#if SANITY- if (GETTAG(n) != T_FUNPTR) {- ERR1("evalfunptr, bad tag %d", GETTAG(n));- }-#endif- return FUNPTR(n);-}--/* Evaluate to a T_FORPTR */-struct forptr *-evalforptr(NODEPTR n)-{- n = evali(n);-#if SANITY- if (GETTAG(n) != T_FORPTR) {- ERR1("evalforptr, bad tag %d", GETTAG(n));- }-#endif- return FORPTR(n);-}--/* Evaluate to a bytestring */-struct forptr *-evalbstr(NODEPTR n)-{- n = evali(n);-#if SANITY- if (GETTAG(n) != T_FORPTR || FORPTR(n)->finalizer->fptype != FP_BSTR) {- ERR1("evalbstr, bad tag %d", GETTAG(n));- }-#endif- return FORPTR(n);-}--/* Evaluate a string, returns a newly allocated buffer.- * XXX this is cheating, should use continuations.- * XXX the malloc()ed string is leaked if we yield in here.- * Caller is responsible to free().- * Does UTF-8 encoding.- */-struct bytestring-evalstring(NODEPTR n)-{- size_t sz = 100;- char *buf = MALLOC(sz);- size_t offs;- uvalue_t c;- NODEPTR x;- struct bytestring bs;-- if (!buf)- memerr();- for (offs = 0;;) {- if (offs >= sz - 4) {- sz *= 2;- buf = REALLOC(buf, sz);- if (!buf)- memerr();- }- PUSH(n); /* protect the list from GC */- n = evali(n);- POP(1);- if (GETTAG(n) == T_K) /* Nil */- break;- else if (GETTAG(n) == T_AP && GETTAG(x = indir(&FUN(n))) == T_AP && GETTAG(indir(&FUN(x))) == T_O) { /* Cons */- PUSH(n); /* protect from GC */- c = evalint(ARG(x));- n = POPTOP();- if ((c & 0x1ff800) == 0xd800) {- // c is a surrogate- c = 0xfffd; // replacement character- }- if (c < 0x80) {- buf[offs++] = (char)c;- } else if (c < 0x800) {- buf[offs++] = ((c >> 6 ) ) | 0xc0;- buf[offs++] = ((c ) & 0x3f) | 0x80;- } else if (c < 0x10000) {- buf[offs++] = ((c >> 12) ) | 0xe0;- buf[offs++] = ((c >> 6 ) & 0x3f) | 0x80;- buf[offs++] = ((c ) & 0x3f) | 0x80;- } else if (c < 0x110000) {- buf[offs++] = ((c >> 18) ) | 0xf0;- buf[offs++] = ((c >> 12) & 0x3f) | 0x80;- buf[offs++] = ((c >> 6 ) & 0x3f) | 0x80;- buf[offs++] = ((c ) & 0x3f) | 0x80;- } else {- ERR("invalid char");- }- n = ARG(n);- } else {- ERR("evalstring not Nil/Cons");- }- }- buf[offs] = 0; /* in case we use it as a C string */- bs.size = offs;- bs.string = buf;- return bs;-}--/* Does not do UTF-8 encoding */-struct bytestring-evalbytestring(NODEPTR n)-{- size_t sz = 100;- uint8_t *buf = MALLOC(sz);- size_t offs;- uvalue_t c;- NODEPTR x;- struct bytestring bs;-- if (!buf)- memerr();- for (offs = 0;;) {- if (offs >= sz - 1) {- sz *= 2;- buf = REALLOC(buf, sz);- if (!buf)- memerr();- }- PUSH(n); /* protect list from GC */- n = evali(n);- POP(1);- if (GETTAG(n) == T_K) /* Nil */- break;- else if (GETTAG(n) == T_AP && GETTAG(x = indir(&FUN(n))) == T_AP && GETTAG(indir(&FUN(x))) == T_O) { /* Cons */- PUSH(n); /* protect from GC */- c = evalint(ARG(x));- n = POPTOP();- buf[offs++] = c;- n = ARG(n);- } else {- //pp(stdout, n);- ERR("evalbytestring not Nil/Cons");- }- }- buf[offs] = 0; /* in case we use it as a C string */- bs.size = offs;- bs.string = buf;- return bs;-}--struct bytestring-bsreplicate(size_t size, uint8_t value)-{- struct bytestring bs;- bs.size = size;- bs.string = MALLOC(size);- if (!bs.string)- memerr();- memset(bs.string, value, size);- return bs;-}--struct bytestring-bsappend(struct bytestring p, struct bytestring q)-{- struct bytestring r;- r.size = p.size + q.size;- r.string = MALLOC(r.size);- if (!r.string)- memerr();- memcpy(r.string, p.string, p.size);- memcpy((uint8_t *)r.string + p.size, q.string, q.size);- return r;-}--struct bytestring-bsappenddot(struct bytestring p, struct bytestring q)-{- struct bytestring r;- r.size = p.size + q.size + 1;- r.string = MALLOC(r.size);- if (!r.string)- memerr();- memcpy(r.string, p.string, p.size);- memcpy((uint8_t *)r.string + p.size, ".", 1);- memcpy((uint8_t *)r.string + p.size + 1, q.string, q.size);- return r;-}--/*- * Compare bytestrings.- * We can't use memcmp() directly for two reasons:- * - the two strings can have different lengths- * - the return value is only guaranteed to be ==0 or !=0- */-int-bscompare(struct bytestring bsp, struct bytestring bsq)-{- uint8_t *p = bsp.string;- uint8_t *q = bsq.string;- size_t len = bsp.size < bsq.size ? bsp.size : bsq.size;- while (len--) {- int r = (int)*p++ - (int)*q++;- if (r) {- /* Unequal bytes found. */- if (r < 0)- return -1;- if (r > 0)- return 1;- return 0;- }- }- /* Got to the end of the shorter string. */- /* The shorter string is considered smaller. */- if (bsp.size < bsq.size)- return -1;- if (bsp.size > bsq.size)- return 1;- return 0;-}--/* Compares anything, but really only works well on strings.- * if p < q return -1- * if p > q return 1- * if p == q return 0- *- * As we compare we update the argument pointers with any- * progress we make, in case we are interruped and resume from the top.- *- * XXX This is a rather dodgy comparison, since we are comparing- * functions, and the same data type could plausibly get different- * functions in the Scott encoding.- * But we only use it for lists, and it seems to work fine.- */-int-compare(NODEPTR cmp)-{- stackptr_t stk = stack_ptr;-#define CRET(x) do { stack_ptr = stk; return (x); } while(0)- value_t x, y;- flt_t xd, yd;- void *f, *g;- void (*ff)(void), (*fg)(void);- NODEPTR p, q;- NODEPTR *ap, *aq;- enum node_tag ptag, qtag;- int r;-- /* Since FUN(cmp) can be shared, allocate a copy for it. */- GCCHECK(1);- FUN(cmp) = new_ap(FUN(FUN(cmp)), ARG(FUN(cmp)));- aq = &ARG(cmp);- ap = &ARG(FUN(cmp));-- PUSH(*ap);- PUSH(*aq);- for(;;) {- if (stk == stack_ptr)- return 0;- q = evali(TOP(0));- p = evali(TOP(1));- POP(2);- if (stk == stack_ptr) {- /* We have made some progress, save this in the compare node. */- *ap = p;- *aq = q;- }-- ptag = GETTAG(p);- qtag = GETTAG(q);- if (ptag != qtag) {- /* Hack to make Nil < Cons */- if (ptag == T_K && qtag == T_AP)- CRET(-1);- if (ptag == T_AP && qtag == T_K)- CRET(1);- CRET(ptag < qtag ? -1 : 1);- }- switch (ptag) {- case T_AP:- PUSH(ARG(p)); /* compare arg part later */- PUSH(ARG(q));- PUSH(FUN(p)); /* compare fun part now */- PUSH(FUN(q));- break;- case T_INT:- case T_IO_CCALL:- x = GETVALUE(p);- y = GETVALUE(q);- if (x < y)- CRET(-1);- if (x > y)- CRET(1);- break;- case T_DBL:- xd = GETDBLVALUE(p);- yd = GETDBLVALUE(q);- if (xd < yd)- CRET(-1);- if (xd > yd)- CRET(1);- break;- case T_PTR:- f = PTR(p);- g = PTR(q);- if (f < g)- CRET(-1);- if (f > g)- CRET(1);- break;- case T_FUNPTR:- ff = FUNPTR(p);- fg = FUNPTR(q);- if ((intptr_t)ff < (intptr_t)fg)- CRET(-1);- if ((intptr_t)ff > (intptr_t)fg)- CRET(1);- break;- case T_FORPTR:- {- struct forptr *fp = FORPTR(p);- struct forptr *fq = FORPTR(q);-#if WANT_GMP- if (fp->finalizer->fptype == FP_MPZ && fq->finalizer->fptype == FP_MPZ) {- int i = mpz_cmp(fp->payload.string, fq->payload.string);- if (i < 0)- CRET(-1);- if (i > 0)- CRET(1);- } else-#endif- if (fp->finalizer->fptype == FP_BSTR && fq->finalizer->fptype == FP_BSTR) {- r = bscompare(BSTR(p), BSTR(q));- if (r)- CRET(r);- } else {- f = fp->payload.string;- g = fq->payload.string;- if (f < g)- CRET(-1);- if (f > g)- CRET(1);- }- }- break;- case T_ARR:- if (ARR(p) < ARR(q))- CRET(-1);- if (ARR(p) > ARR(q))- CRET(1);- break;- default:- break;- }- }-#undef CRET-}--void-rnf_rec(bits_t *done, NODEPTR n)-{- top:- if (test_bit(done, n))- return;- set_bit(done, n);- n = evali(n);- if (GETTAG(n) == T_AP) {- PUSH(ARG(n)); /* protect from GC */- rnf_rec(done, FUN(n));- n = POPTOP();- goto top;- }-}--/* Used to detect calls to error while we are already in a call to error. */-int in_raise = 0;--/* This is a yucky hack */-int doing_rnf = 0;--void-rnf(value_t noerr, NODEPTR n)-{- /* Mark visited nodes to avoid getting stuck in loops. */- bits_t *done = calloc(free_map_nwords, sizeof(bits_t));- if (!done)- memerr();- if (doing_rnf)- ERR("recursive rnf()");- doing_rnf = (int)noerr;- rnf_rec(done, n);- doing_rnf = 0;- FREE(done);-}--void execio(NODEPTR *);--/* Evaluate a node, returns when the node is in WHNF. */-NODEPTR-evali(NODEPTR an)-{- NODEPTR n = an;- stackptr_t stk = stack_ptr;- NODEPTR x, y, z, w;- value_t xi, yi, r;- struct forptr *xfp;-#if WANT_FLOAT- flt_t xd, rd;-#endif /* WANT_FLOAT */- char *msg;- heapoffs_t l;- enum node_tag tag;- struct ioarray *arr;- struct bytestring xbs, ybs, rbs;--#if MAXSTACKDEPTH- counter_t old_cur_c_stack = cur_c_stack;- if (++cur_c_stack > max_c_stack)- max_c_stack = cur_c_stack;-#endif--/* Reset stack pointer and return. */-#define RET do { goto ret; } while(0)-#define HASNARGS(n) (stack_ptr - stk >= (n))-/* Check that there are at least n arguments, return if not. */-#define CHECK(n) do { if (!HASNARGS(n)) RET; } while(0)--#define SETIND(n, x) SETINDIR(n, x)-#define GOIND(x) do { NODEPTR _x = (x); SETIND(n, _x); n = _x; goto top; } while(0)-#define GOAP(f,a) do { FUN((n)) = (f); ARG((n)) = (a); goto ap; } while(0)-#define GOAP2(f,a,b) do { FUN((n)) = new_ap((f), (a)); ARG((n)) = (b); goto ap2; } while(0)-/* CHKARGN checks that there are at least N arguments.- * It also- * - sets n to the "top" node- * - set x, y, ... to the arguments- * - pops N stack elements- * NOTE: No GC is allowed after these, since the stack has been popped.- */-#define CHKARG0 do { } while(0)-#define CHKARG1 do { CHECK(1); POP(1); n = TOP(-1); x = ARG(n); } while(0)-#define CHKARG2 do { CHECK(2); POP(2); n = TOP(-1); y = ARG(n); x = ARG(TOP(-2)); } while(0)-#define CHKARG3 do { CHECK(3); POP(3); n = TOP(-1); z = ARG(n); y = ARG(TOP(-2)); x = ARG(TOP(-3)); } while(0)-#define CHKARG4 do { CHECK(4); POP(4); n = TOP(-1); w = ARG(n); z = ARG(TOP(-2)); y = ARG(TOP(-3)); x = ARG(TOP(-4)); } while(0)-#define CHKARG5 do { CHECK(5); POP(5); n = TOP(-1); /*v = ARG(n);*/ w = ARG(TOP(-2)); z = ARG(TOP(-3)); y = ARG(TOP(-4)); x = ARG(TOP(-5)); } while(0)--/* Alloc a possible GC action, e, between setting x and popping */-#define CHKARGEV1(e) do { CHECK(1); x = ARG(TOP(0)); e; POP(1); n = TOP(-1); } while(0)--#define SETINT(n,r) do { SETTAG((n), T_INT); SETVALUE((n), (r)); } while(0)-#define SETDBL(n,d) do { SETTAG((n), T_DBL); SETDBLVALUE((n), (d)); } while(0)-#define SETPTR(n,r) do { SETTAG((n), T_PTR); PTR(n) = (r); } while(0)-#define SETFUNPTR(n,r) do { SETTAG((n), T_FUNPTR); FUNPTR(n) = (r); } while(0)-#define SETFORPTR(n,r) do { SETTAG((n), T_FORPTR); FORPTR(n) = (r); } while(0)-#define SETBSTR(n,r) do { SETTAG((n), T_FORPTR); FORPTR(n) = (r); FORPTR(n)->finalizer->fptype = FP_BSTR; } while(0)-#define OPINT1(e) do { CHECK(1); xi = evalint(ARG(TOP(0))); e; POP(1); n = TOP(-1); } while(0);-#define OPPTR2(e) do { CHECK(2); xp = evalptr(ARG(TOP(0))); yp = evalptr(ARG(TOP(1))); e; POP(2); n = TOP(-1); } while(0);-#define CMPP(op) do { OPPTR2(r = xp op yp); GOIND(r ? combTrue : combFalse); } while(0)-- top:- l = LABEL(n);- if (l < T_IO_STDIN) {- /* The node is one of the permanent nodes; the address offset is the tag */- tag = l;- } else {- /* Heap allocated node */- if (ISINDIR(n)) {- /* Follow indirections */- NODEPTR on = n;- do {- n = GETINDIR(n);- } while(ISINDIR(n));- SETINDIR(on, n); /* and short-circuit them */- }- tag = GETTAG(n);- }- COUNT(num_reductions);- switch (tag) {- ap2: PUSH(n); n = FUN(n);- ap:- case T_AP: PUSH(n); n = FUN(n); goto top;-- case T_INT: RET;- case T_DBL: RET;- case T_PTR: RET;- case T_FUNPTR: RET;- case T_FORPTR: RET;- case T_ARR: RET;- case T_BADDYN: ERR1("FFI unknown %s", CSTR(n));-- /*- * Some of these reductions, (e.g., Z x y = K (x y)) are there to avoid- * that increase in arity that some "optimizations" in Abstract.hs- * stop reductions from happening. This can be important for "full laziness".- * In practice, these reductions almost never happen, but there they are anyway. :)- */- case T_S: GCCHECK(2); CHKARG3; GOAP2(x, z, new_ap(y, z)); /* S x y z = x z (y z) */- case T_SS: GCCHECK(3); CHKARG4; GOAP2(x, new_ap(y, w), new_ap(z, w)); /* S' x y z w = x (y w) (z w) */- case T_K: CHKARG2; GOIND(x); /* K x y = *x */- case T_A: CHKARG2; GOIND(y); /* A x y = *y */- case T_U: CHKARG2; GOAP(y, x); /* U x y = y x */- case T_I: CHKARG1; GOIND(x); /* I x = *x */- case T_Y: CHKARG1; GOAP(x, n); /* n@(Y x) = x n */- case T_B: GCCHECK(1); CHKARG3; GOAP(x, new_ap(y, z)); /* B x y z = x (y z) */- case T_BB: if (!HASNARGS(4)) {- GCCHECK(1); CHKARG2; COUNT(red_bb); GOAP(combB, new_ap(x, y)); } else { /* B' x y = B (x y) */- GCCHECK(2); CHKARG4; GOAP2(x, y, new_ap(z, w)); } /* B' x y z w = x y (z w) */- case T_Z: if (!HASNARGS(3)) {- GCCHECK(1); CHKARG2; COUNT(red_z); GOAP(combK, new_ap(x, y)); } else { /* Z x y = K (x y) */- CHKARG3; GOAP(x, y); } /* Z x y z = x y */-//case T_J: CHKARG3; GOAP(z, x); /* J x y z = z x */- case T_C: GCCHECK(1); CHKARG3; GOAP2(x, z, y); /* C x y z = x z y */- case T_CC: GCCHECK(2); CHKARG4; GOAP2(x, new_ap(y, w), z); /* C' x y z w = x (y w) z */- case T_P: GCCHECK(1); CHKARG3; GOAP2(z, x, y); /* P x y z = z x y */- case T_R: if(!HASNARGS(3)) {- GCCHECK(1); CHKARG2; COUNT(red_r); GOAP2(combC, y, x); } else { /* R x y = C y x */- GCCHECK(1); CHKARG3; GOAP2(y, z, x); } /* R x y z = y z x */- case T_O: GCCHECK(1); CHKARG4; GOAP2(w, x, y); /* O x y z w = w x y */- case T_K2: if (!HASNARGS(3)) {- CHKARG2; COUNT(red_k2); GOAP(combK, x); } else { /* K2 x y = K x */- CHKARG3; GOIND(x); } /* K2 x y z = *x */- case T_K3: if (!HASNARGS(4)) {- CHKARG2; COUNT(red_k3); GOAP(combK2, x); } else { /* K3 x y = K2 x */- CHKARG4; GOIND(x); } /* K3 x y z w = *x */- case T_K4: if (!HASNARGS(5)) {- CHKARG2; COUNT(red_k4); GOAP(combK3, x); } else { /* K4 x y = K3 x */- CHKARG5; GOIND(x); } /* K4 x y z w v = *x */- case T_CCB: if (!HASNARGS(4)) {- GCCHECK(2); CHKARG3; COUNT(red_ccb); GOAP2(combB, new_ap(x, z), y);} else{ /* C'B x y z = B (x z) y */- GCCHECK(2); CHKARG4; GOAP2(x, z, new_ap(y, w)); } /* C'B x y z w = x z (y w) */-- /*- * Strict primitives require evaluating the arguments before we can proceed.- * The easiest way to do this is to just recursively call evali() for each argument.- * The drawback of this is that it uses a lot of C stack. (E.g., recompiling MicroHs- * uses a stack depth of 1800).- * Instead we use the following scheme:- * When we find a strict binary (int) primitive we push T_BININT2,- * set n=second argument.- * Continue evaluation of n.- * When n is finally evaluated and we are about to return we check if the stack top is T_BININT2.- * If so, change the stack top to T_BININT1,- * set n=first argument.- * Continue evaluation of n.- * When n is finally evaluated and we are about to return we check if the stack top is T_BININT1.- * If so, we know that both arguments are now evaluated, and we perform the strict operation.- *- * On my desktop machine this is about 3% slower, on my laptop (Apple M1) it is about 3% faster.- *- * Pictorially for BININT- * Before the code below:- * ----- * | --------> @- * ---- / \- * | ------> @ y- * ---- / \- * n ----> ADD x- *- * After- * ----- * | --------> @- * ---- / \- * | ------> @ y- * ---- / \- * | ->BI2 ADD x- * ---- ^- * n ----------|- *- * x becomes an INT, stack is not empty, BININT2 found on top- * ----- * | --------> @- * ---- / \- * | ------> @ y- * ---- / \- * | ->BI2 ADD INT- * ---- ^- * n ----------|- *- * After- * ----- * | --------> @- * ---- / \- * | ------> @ y- * ---- / \ \- * | ->BI1 ADD INT |- * ---- |- * n ---------------|- *- * y becomes an INT, stack is not empty, BININT1 found on top- * do arithmetic- * ----- * | --------> @- * ---- / \- * | ------> @ INT- * ---- / \ \- * | ->BI1 ADD INT |- * ---- |- * n ---------------|- *- * ----- * n -------> INT(x+y)- */- case T_ADD:- case T_SUB:- case T_MUL:- case T_QUOT:- case T_REM:- case T_SUBR:- case T_UQUOT:- case T_UREM:- case T_AND:- case T_OR:- case T_XOR:- case T_SHL:- case T_SHR:- case T_ASHR:- case T_EQ:- case T_NE:- case T_LT:- case T_LE:- case T_GT:- case T_GE:- case T_ICMP:- case T_ULT:- case T_ULE:- case T_UGT:- case T_UGE:- case T_UCMP:- CHECK(2);- n = ARG(TOP(1));- if (GETTAG(n) == T_INT) {- n = ARG(TOP(0));- PUSH(combBININT1);- if (GETTAG(n) == T_INT)- goto binint1;- } else {- PUSH(combBININT2);- }- goto top;- case T_NEG:- case T_INV:- case T_POPCOUNT:- case T_CLZ:- case T_CTZ:- CHECK(1);- n = ARG(TOP(0));- PUSH(combUNINT1);- goto top;--#if WANT_FLOAT- case T_FADD:- case T_FSUB:- case T_FMUL:- case T_FDIV:- case T_FEQ:- case T_FNE:- case T_FLT:- case T_FLE:- case T_FGT:- case T_FGE:- CHECK(2);- n = ARG(TOP(1));- PUSH(combBINDBL2);- goto top;- case T_FNEG:- CHECK(1);- n = ARG(TOP(0));- PUSH(combUNDBL1);- goto top;-- case T_ITOF: OPINT1(rd = (flt_t)xi); SETDBL(n, rd); RET;- case T_FREAD:- CHECK(1);- msg = evalstring(ARG(TOP(0))).string;-#if WORD_SIZE == 64- xd = strtod(msg, NULL);-#elif WORD_SIZE == 32- xd = strtof(msg, NULL);-#else /* WORD_SIZE */-#error Unknown WORD_SIZE-#endif /* WORD_SIZE */- FREE(msg);- POP(1);- n = TOP(-1);- SETDBL(n, xd);- RET;-- case T_FSHOW:- CHECK(1);- xd = evaldbl(ARG(TOP(0)));- POP(1);- n = TOP(-1);- GOIND(dblToString(xd));-#endif /* WANT_FLOAT */-- case T_BSAPPEND:- case T_BSAPPENDDOT:- case T_BSEQ:- case T_BSNE:- case T_BSLT:- case T_BSLE:- case T_BSGT:- case T_BSGE:- case T_BSCMP:- CHECK(2);- n = ARG(TOP(1));- PUSH(combBINBS2);- goto top;-- /* Retag a word sized value, keeping the value bits */-#define CONV(t) do { CHECK(1); x = evali(ARG(TOP(0))); n = POPTOP(); SETTAG(n, t); SETVALUE(n, GETVALUE(x)); RET; } while(0)- case T_TODBL: CONV(T_DBL);- case T_TOINT: CONV(T_INT);- case T_TOPTR: CONV(T_PTR);- case T_TOFUNPTR: CONV(T_FUNPTR);-#undef CONV-- case T_FPADD: CHECK(2); xfp = evalforptr(ARG(TOP(0))); yi = evalint(ARG(TOP(1))); POP(2); n = TOP(-1); SETFORPTR(n, addForPtr(xfp, yi)); RET;- case T_FP2P:- CHECK(1);- xfp = evalforptr(ARG(TOP(0)));- POP(1);- n = TOP(-1);- SETPTR(n, xfp->payload.string);- RET;-- case T_FP2BS:- CHECK(2);- xfp = evalforptr(ARG(TOP(0)));- xi = evalint(ARG(TOP(1)));- POP(2);- n = TOP(-1);- xfp->payload.size = xi;- SETBSTR(n, xfp);- RET;-- case T_BS2FP:- CHECK(1);- xfp = evalbstr(ARG(TOP(0)));- POP(1);- n = TOP(-1);- SETFORPTR(n, xfp);- RET;-- case T_ARR_EQ:- {- CHECK(2);- x = evali(ARG(TOP(0)));- arr = ARR(x);- y = evali(ARG(TOP(1)));- POP(2);- n = TOP(-1);- GOIND(arr == ARR(y) ? combTrue : combFalse);- }-- case T_BSTOUTF8:- {- CHECK(1);- n = ARG(TOP(0));- /* Zap the pointer to the list so it can be GC:ed.- * The actual list is protected from GC by evalbytestring().- */- // ARG(TOP(0)) = combK;- struct bytestring bs = evalstring(n);- POP(1);- n = TOP(-1);- SETBSTR(n, mkForPtrFree(bs));- RET;- }-- case T_BSHEADUTF8:- CHECK(1);- xfp = evalbstr(ARG(TOP(0)));- POP(1);- n = TOP(-1);- SETINT(n, headutf8(xfp->payload, (void**)0));- RET;-- case T_BSTAILUTF8:- CHECK(1);- xfp = evalbstr(ARG(TOP(0)));- POP(1);- n = TOP(-1);- { void *out;- (void)headutf8(xfp->payload, &out); /* skip one UTF8 character */- xi = (char*)out - (char*)xfp->payload.string; /* offset */- yi = xfp->payload.size - xi; /* remaining length */- SETBSTR(n, bssubstr(xfp, xi, yi)); /* make a substring */- }- RET;-- case T_BSFROMUTF8:- if (doing_rnf) RET;- CHECK(1);-- xfp = evalbstr(ARG(TOP(0)));- GCCHECK(strNodes(xfp->payload.size));- POP(1);- n = TOP(-1);- //printf("T_FROMUTF8 x = %p fp=%p payload.string=%p\n", x, x->uarg.uuforptr, x->uarg.uuforptr->payload.string);- GOIND(mkStringU(xfp->payload));-- case T_BSUNPACK:- if (doing_rnf) RET;- CHECK(1);- struct forptr *xfp = evalbstr(ARG(TOP(0)));- GCCHECK(strNodes(xfp->payload.size));- POP(1);- n = TOP(-1);- GOIND(bsunpack(xfp->payload));-- case T_BSPACK:- CHECK(1);- n = ARG(TOP(0));- /* Zap the pointer to the list so it can be GC:ed.- * The actual list is protected from GC by evalbytestring().- */- ARG(TOP(0)) = combK;- struct bytestring rbs = evalbytestring(n);- POP(1);- n = TOP(-1);- SETBSTR(n, mkForPtrFree(rbs));- RET;-- case T_BSREPLICATE:- CHECK(2);- xi = evalint(ARG(TOP(0)));- yi = evalint(ARG(TOP(1)));- POP(2);- n = TOP(-1);- SETBSTR(n, mkForPtrFree(bsreplicate(xi, yi)));- RET;-- case T_BSLENGTH:- CHECK(1);- xfp = evalbstr(ARG(TOP(0)));- POP(1);- n = TOP(-1);- SETINT(n, xfp->payload.size);- RET;-- case T_BSSUBSTR:- CHECK(3);- xfp = evalbstr(ARG(TOP(0)));- xi = evalint(ARG(TOP(1)));- yi = evalint(ARG(TOP(2)));- POP(3);- n = TOP(-1);- SETBSTR(n, bssubstr(xfp, xi, yi));- RET;-- case T_BSINDEX:- CHECK(2);- xfp = evalbstr(ARG(TOP(0)));- xi = evalint(ARG(TOP(1)));- POP(2);- n = TOP(-1);- SETINT(n, ((uint8_t *)xfp->payload.string)[xi]);- RET;-- case T_RAISE:- if (doing_rnf) RET;- if (cur_handler) {- /* Pass the exception to the handler */- CHKARG1;- cur_handler->hdl_exn = x;- longjmp(cur_handler->hdl_buf, 1);- } else {- /* No handler:- * First convert the exception to a string by calling displaySomeException.- * The display function compiles to combShowExn, so we need to build- * (combShowExn x) and evaluate it.- */- if (in_raise) {- ERR("recursive error");- EXIT(1);- }- in_raise = 1;- CHECK(1);- GCCHECK(1);- //TOP(0) = new_ap(combShowExn, TOP(0));- FUN(TOP(0)) = combShowExn; /* TOP(0) = (combShowExn exn) */- x = evali(TOP(0)); /* evaluate it */- msg = evalstring(x).string; /* and convert to a C string */- POP(1);-#if WANT_STDIO- /* A horrible hack until we get proper exceptions */- if (strcmp(msg, "ExitSuccess") == 0) {- EXIT(0);- } else {- fprintf(stderr, "mhs: %s\n", msg);- EXIT(1);- }-#else /* WANT_STDIO */- ERR1("mhs error: %s", msg);-#endif /* WANT_STDIO */- }--- case T_SEQ: CHECK(2); evali(ARG(TOP(0))); POP(2); n = TOP(-1); y = ARG(n); GOIND(y); /* seq x y = eval(x); y */-- case T_EQUAL:- CHECK(2); r = compare(TOP(1)); POP(2); n = TOP(-1); GOIND(r==0 ? combTrue : combFalse);- case T_COMPARE:- CHECK(2); r = compare(TOP(1)); POP(2); n = TOP(-1); GOIND(r < 0 ? combLT : r > 0 ? combGT : combEQ);-- case T_RNF:- if (doing_rnf) RET;- CHECK(2);- xi = evalint(ARG(TOP(0)));- rnf(xi, ARG(TOP(1))); POP(2); n = TOP(-1); GOIND(combUnit);-- case T_IO_PERFORMIO:- CHECK(1);- if (doing_rnf) RET;- execio(&ARG(TOP(0))); /* run IO action */- x = ARG(TOP(0)); /* should be RETURN e */- if (GETTAG(x) != T_AP || GETTAG(FUN(x)) != T_IO_RETURN)- ERR("PERFORMIO");- POP(1);- n = TOP(-1);- GOIND(ARG(x));-- case T_IO_CCBIND: /* We should never have to reduce this */- case T_IO_BIND:- case T_IO_THEN:- case T_IO_RETURN:- case T_IO_SERIALIZE:- case T_IO_PRINT:- case T_IO_DESERIALIZE:- case T_IO_GETARGREF:- case T_IO_CCALL:- case T_CATCH:- case T_NEWCASTRINGLEN:- case T_PACKCSTRING:- case T_PACKCSTRINGLEN:- case T_ARR_ALLOC:- case T_ARR_COPY:- case T_ARR_SIZE:- case T_ARR_READ:- case T_ARR_WRITE:- case T_FPNEW:- case T_FPFIN:- // case T_FPSTR:- case T_IO_GC:- RET;-- case T_DYNSYM:- /* A dynamic FFI lookup */- CHECK(1);- msg = evalstring(ARG(TOP(0))).string;- GCCHECK(1);- x = ffiNode(msg);- FREE(msg);- POP(1);- n = TOP(-1);- GOIND(x);--#if WANT_TICK- case T_TICK:- xi = GETVALUE(n);- CHKARG1;- dotick(xi);- GOIND(x);-#endif-- default:- ERR1("eval tag %s", tag_names[GETTAG(n)]);- }--- ret:- if (stack_ptr != stk) {- // In this case, n was an AP that got pushed and potentially- // updated.- uvalue_t xu, yu, ru;-#if WANT_FLOAT- flt_t xd, yd, rd;-#endif /* WANT_FLOAT */- NODEPTR p;-- tag = GETTAG(TOP(0));- switch (tag) {- case T_BININT2:- n = ARG(TOP(1));- TOP(0) = combBININT1;- goto top;-- case T_BININT1:- /* First argument */-#if SANITY- if (GETTAG(n) != T_INT)- ERR("BININT 0");-#endif /* SANITY */- binint1:- xu = (uvalue_t)GETVALUE(n);- /* Second argument */- y = ARG(TOP(2));- while (GETTAG(y) == T_IND)- y = GETINDIR(y);-#if SANITY- if (GETTAG(y) != T_INT)- ERR("BININT 1");-#endif /* SANITY */- yu = (uvalue_t)GETVALUE(y);- p = FUN(TOP(1));- POP(3);- n = TOP(-1);- binint:- switch (GETTAG(p)) {- case T_IND: p = GETINDIR(p); goto binint;- case T_ADD: ru = xu + yu; break;- case T_SUB: ru = xu - yu; break;- case T_MUL: ru = xu * yu; break;- case T_QUOT: ru = (uvalue_t)((value_t)xu / (value_t)yu); break;- case T_REM: ru = (uvalue_t)((value_t)xu % (value_t)yu); break;- case T_SUBR: ru = yu - xu; break;- case T_UQUOT: ru = xu / yu; break;- case T_UREM: ru = xu % yu; break;- case T_AND: ru = xu & yu; break;- case T_OR: ru = xu | yu; break;- case T_XOR: ru = xu ^ yu; break;- case T_SHL: ru = xu << yu; break;- case T_SHR: ru = xu >> yu; break;- case T_ASHR: ru = (uvalue_t)((value_t)xu >> yu); break;-- case T_EQ: GOIND(xu == yu ? combTrue : combFalse);- case T_NE: GOIND(xu != yu ? combTrue : combFalse);- case T_ULT: GOIND(xu < yu ? combTrue : combFalse);- case T_ULE: GOIND(xu <= yu ? combTrue : combFalse);- case T_UGT: GOIND(xu > yu ? combTrue : combFalse);- case T_UGE: GOIND(xu >= yu ? combTrue : combFalse);- case T_UCMP: GOIND(xu < yu ? combLT : xu > yu ? combGT : combEQ);- case T_LT: GOIND((value_t)xu < (value_t)yu ? combTrue : combFalse);- case T_LE: GOIND((value_t)xu <= (value_t)yu ? combTrue : combFalse);- case T_GT: GOIND((value_t)xu > (value_t)yu ? combTrue : combFalse);- case T_GE: GOIND((value_t)xu >= (value_t)yu ? combTrue : combFalse);- case T_ICMP: GOIND((value_t)xu < (value_t)yu ? combLT : (value_t)xu > (value_t)yu ? combGT : combEQ);-- default:- //fprintf(stderr, "tag=%d\n", GETTAG(FUN(TOP(0))));- ERR("BININT");- }- SETINT(n, (value_t)ru);- goto ret;-- case T_UNINT1:- /* The argument */-#if SANITY- if (GETTAG(n) != T_INT)- ERR("UNINT 0");-#endif- xu = (uvalue_t)GETVALUE(n);- p = FUN(TOP(1));- POP(2);- n = TOP(-1);- unint:- switch (GETTAG(p)) {- case T_IND: p = GETINDIR(p); goto unint;- case T_NEG: ru = -xu; break;- case T_INV: ru = ~xu; break;- case T_POPCOUNT: ru = POPCOUNT(xu); break;- case T_CLZ: ru = CLZ(xu); break;- case T_CTZ: ru = CTZ(xu); break;- default:- //fprintf(stderr, "tag=%d\n", GETTAG(FUN(TOP(0))));- ERR("UNINT");- }- SETINT(n, (value_t)ru);- goto ret;--#if WANT_FLOAT- case T_BINDBL2:- n = ARG(TOP(1));- TOP(0) = combBINDBL1;- goto top;-- case T_BINDBL1:- /* First argument */-#if SANITY- if (GETTAG(n) != T_DBL)- ERR("BINDBL 0");-#endif /* SANITY */- xd = GETDBLVALUE(n);- /* Second argument */- y = ARG(TOP(2));- while (GETTAG(y) == T_IND)- y = GETINDIR(y);-#if SANITY- if (GETTAG(y) != T_DBL)- ERR("BINDBL 1");-#endif /* SANITY */- yd = GETDBLVALUE(y);- p = FUN(TOP(1));- POP(3);- n = TOP(-1);- bindbl:- switch (GETTAG(p)) {- case T_IND: p = GETINDIR(p); goto bindbl;- case T_FADD: rd = xd + yd; break;- case T_FSUB: rd = xd - yd; break;- case T_FMUL: rd = xd * yd; break;- case T_FDIV: rd = xd / yd; break;-- case T_FEQ: GOIND(xd == yd ? combTrue : combFalse);- case T_FNE: GOIND(xd != yd ? combTrue : combFalse);- case T_FLT: GOIND(xd < yd ? combTrue : combFalse);- case T_FLE: GOIND(xd <= yd ? combTrue : combFalse);- case T_FGT: GOIND(xd > yd ? combTrue : combFalse);- case T_FGE: GOIND(xd >= yd ? combTrue : combFalse);-- default:- //fprintf(stderr, "tag=%d\n", GETTAG(FUN(TOP(0))));- ERR("BINDBL");- }- SETDBL(n, rd);- goto ret;-- case T_UNDBL1:- /* The argument */-#if SANITY- if (GETTAG(n) != T_DBL)- ERR("UNDBL 0");-#endif- xd = GETDBLVALUE(n);- p = FUN(TOP(1));- POP(2);- n = TOP(-1);- undbl:- switch (GETTAG(p)) {- case T_IND: p = GETINDIR(p); goto undbl;- case T_FNEG: rd = -xd; break;- default:- //fprintf(stderr, "tag=%d\n", GETTAG(FUN(TOP(0))));- ERR("UNDBL");- }- SETDBL(n, rd);- goto ret;-#endif /* WANT_FLOAT */-- case T_BINBS2:- n = ARG(TOP(1));- TOP(0) = combBINBS1;- goto top;-- case T_BINBS1:- /* First argument */-#if SANITY- if (GETTAG(n) != T_FORPTR || FORPTR(n)->finalizer->fptype != FP_BSTR)- ERR("BINBS 0");-#endif /* SANITY */- xbs = BSTR(n);- /* Second argument */- y = ARG(TOP(2));- while (GETTAG(y) == T_IND)- y = GETINDIR(y);-#if SANITY- if (GETTAG(y) != T_FORPTR || FORPTR(y)->finalizer->fptype != FP_BSTR)- ERR("BINBS 1");-#endif /* SANITY */- ybs = BSTR(y);- p = FUN(TOP(1));- POP(3);- n = TOP(-1);- binbs:- switch (GETTAG(p)) {- case T_IND: p = GETINDIR(p); goto binbs;-- case T_BSAPPEND: rbs = bsappend(xbs, ybs); break;- case T_BSAPPENDDOT: rbs = bsappenddot(xbs, ybs); break;- case T_BSEQ: GOIND(bscompare(xbs, ybs) == 0 ? combTrue : combFalse);- case T_BSNE: GOIND(bscompare(xbs, ybs) != 0 ? combTrue : combFalse);- case T_BSLT: GOIND(bscompare(xbs, ybs) < 0 ? combTrue : combFalse);- case T_BSLE: GOIND(bscompare(xbs, ybs) <= 0 ? combTrue : combFalse);- case T_BSGT: GOIND(bscompare(xbs, ybs) > 0 ? combTrue : combFalse);- case T_BSGE: GOIND(bscompare(xbs, ybs) >= 0 ? combTrue : combFalse);- case T_BSCMP: r = bscompare(xbs, ybs); GOIND(r < 0 ? combLT : r > 0 ? combGT : combEQ);-- default:- //fprintf(stderr, "tag=%d\n", GETTAG(FUN(TOP(0))));- ERR("BINBS");- }- SETBSTR(n, mkForPtrFree(rbs));- goto ret;-- default:- stack_ptr = stk;- n = TOP(-1);- }- }-#if MAXSTACKDEPTH- cur_c_stack = old_cur_c_stack; /* reset rather than counting down, in case of longjump */-#endif- return n;-}--/* This is the interpreter for the IO monad operations.- *- * Assuming every graph rewrite is atomic we want the graph- * to always represent the rest of the program to run.- * To this end, we need to mutate the graph every time- * an IO operation has been performed to make sure we don't- * execute it again.- * To have a cell that is safe to mutate, we allocate a new- * application on entry to execio().- * Given the call execio(np) we allocate this graph, top = BIND (*np) RETURN.- * I.e.- * @- * / \- * @ RETURN- * / \- * BIND (*np) - * and make np point to it.- * This graph will be updated continuously as we execute IO actions.- *- * Invariant: the second argument to this BIND is always either RETURN- * or a C'BIND. The second argument to C'BIND has the same invariant.- * C'BIND has the reduction rule (which is normally never used): - * C'BIND x y z = BIND (x z) y- *- * This is the cycle of the execio loop:- * again:- * given top = BIND n q- * eval(n)- * case n- * BIND r s: rewrite to top := BIND r (C'BIND s q) -- (r >>= s) >>= q --> r >>= (\ x -> s x >>= q)- * THEN r s: ... K s ...- * otherwise: res = execute n- * case q- * RETURN: rewrite to top := RETURN res; return to caller- * C'BIND r s: rewrite to top := BIND (r res) s; goto again- */-void-execio(NODEPTR *np)-{- stackptr_t stk = stack_ptr;- NODEPTR f, x, n, q, r, s, res, top1;- char *cstr;- struct handler *h;-#if WANT_STDIO- void *ptr;- int hdr;-#endif /* WANT_STDIO */- NODEPTR top;- enum node_tag tag;- heapoffs_t l;--/* IO operations need all arguments, anything else should not happen. */-#define CHECKIO(n) do { if (stack_ptr - stk != (n)+1) {/*printf("\nLINE=%d\n", __LINE__);*/ ERR("CHECKIO");}; } while(0)-/* #define RETIO(p) do { stack_ptr = stk; return (p); } while(0)*/-#define GCCHECKSAVE(p, n) do { PUSH(p); GCCHECK(n); (p) = TOP(0); POP(1); } while(0)-#define RETIO(p) do { stack_ptr = stk; res = (p); goto rest; } while(0)-#define IOASSERT(p,s) do { if (!(p)) ERR("IOASSERT " s); } while(0)-- GCCHECK(2);- top = new_ap(new_ap(combIOBIND, *np), combIORETURN);- *np = top;-- start:- //dump("start", top);- IOASSERT(stack_ptr == stk, "start");- //ppmsg("n before = ", ARG(FUN(top)));- n = evali(ARG(FUN(top))); /* eval(n) */- //ppmsg("n after = ", n);- if (GETTAG(n) == T_AP && GETTAG(top1 = indir(&FUN(n))) == T_AP) {- switch (GETTAG(indir(&FUN(top1)))) {- case T_IO_BIND:- GCCHECKSAVE(n, 2);- s = ARG(n);- bind:- q = ARG(top);- r = ARG(top1);- ARG(FUN(top)) = r;- ARG(top) = x = new_ap(new_ap(combIOCCBIND, s), q);- goto start;- case T_IO_THEN:- GCCHECKSAVE(n, 3);- s = new_ap(combFalse, ARG(n));- goto bind;- default:- break;- }- }- goto execute;-- rest: /* result is in res */- //ppmsg("res=", res);- q = ARG(top);- //ppmsg("q=", q);- if (GETTAG(q) == T_IO_RETURN) {- /* execio is done */- FUN(top) = combIORETURN;- ARG(top) = res;- IOASSERT(stack_ptr == stk, "stk");- return;- }- /* not done, it must be a C'BIND */- GCCHECKSAVE(res, 1);- IOASSERT(GETTAG(q) == T_AP && GETTAG(FUN(q)) == T_AP && GETTAG(FUN(FUN(q))) == T_IO_CCBIND, "rest-AP");- r = ARG(FUN(q));- s = ARG(q);- ARG(FUN(top)) = new_ap(r, res);- ARG(top) = s;- goto start;-- execute:- PUSH(n);- for(;;) {- COUNT(num_reductions);- //printf("execute switch %s\n", tag_names[GETTAG(n)]);-- l = LABEL(n);- if (l < T_IO_STDIN) {- /* The node is one of the permanent nodes; the address offset is the tag */- tag = l;- } else {- /* Heap allocated node */- if (ISINDIR(n)) {- /* Follow indirections */- NODEPTR on = n;- do {- n = GETINDIR(n);- } while(ISINDIR(n));- SETINDIR(on, n); /* and short-circuit them */- }- tag = GETTAG(n);- }-- switch (tag) {- case T_AP:- n = FUN(n);- PUSH(n);- break;- case T_IO_BIND:- ERR("T_IO_BIND");- case T_IO_THEN:- ERR("T_IO_THEN");- case T_IO_CCBIND:- ERR("T_IO_CCBIND");- case T_IO_RETURN:- CHECKIO(1);- n = ARG(TOP(1));- RETIO(n);-#if WANT_STDIO- case T_IO_PRINT:- hdr = 0;- goto ser;- case T_IO_SERIALIZE:- hdr = 1;- ser:- CHECKIO(2);- gc(); /* DUBIOUS: do a GC to get possible GC reductions */- ptr = (struct BFILE*)evalptr(ARG(TOP(1)));- x = evali(ARG(TOP(2)));- //x = ARG(TOP(1));- printb(ptr, x, hdr);- putb('\n', ptr);- RETIO(combUnit);- case T_IO_DESERIALIZE:- CHECKIO(1);- ptr = (struct BFILE*)evalptr(ARG(TOP(1)));- gc(); /* make sure we have room. GC during parse is dodgy. */- n = parse_top(ptr);- RETIO(n);-#endif-#if WANT_ARGS- case T_IO_GETARGREF:- CHECKIO(0);- n = alloc_node(T_ARR);- ARR(n) = argarray;- RETIO(n);-#endif-- case T_IO_CCALL:- {- int a = (int)GETVALUE(n);- funptr_t f = FFI_IX(a).ffi_fun;- GCCHECK(1); /* room for placeholder */- PUSH(mkFlt(0.0)); /* placeholder for result, protected from GC */- f(stk); /* call FFI function */- n = TOP(0); /* pop actual result */- RETIO(n); /* and this is the result */- }-- case T_CATCH:- {- h = MALLOC(sizeof *h);- if (!h)- memerr();- CHECKIO(2);- h->hdl_old = cur_handler;- h->hdl_stack = stack_ptr;- cur_handler = h;- if (setjmp(h->hdl_buf)) {- /* An exception occurred: */- stack_ptr = h->hdl_stack;- x = h->hdl_exn; /* exception value */- GCCHECKSAVE(x, 1);- f = ARG(TOP(2)); /* second argument, handler */- n = new_ap(f, x);- cur_handler = h->hdl_old;- FREE(h);- POP(3);- ARG(FUN(top)) = n;- goto start;- } else {- /* Normal execution: */- n = ARG(TOP(1)); /* first argument, should be evaluated (but not overwritten) */- PUSH(n);- execio(&TOP(0)); /* execute first argument */- cur_handler = h->hdl_old; /* restore old handler */- FREE(h);- n = TOP(0);- POP(1);- IOASSERT(GETTAG(n) == T_AP && GETTAG(FUN(n)) == T_IO_RETURN, "CATCH");- RETIO(ARG(n)); /* return result */- }- }-- case T_NEWCASTRINGLEN:- {- CHECKIO(1);- n = ARG(TOP(1));- /* Zap the pointer to the list so it can be GC:ed.- * The actual list is protected from GC by evalbytestring().- */- // ARG(TOP(1)) = combK;- struct bytestring bs = evalbytestring(n);- GCCHECK(4);- n = new_ap(new_ap(combPair, x = alloc_node(T_PTR)), mkInt(bs.size));- PTR(x) = bs.string;- RETIO(n);- }-- case T_PACKCSTRING:- {- size_t size;- CHECKIO(1);- cstr = evalptr(ARG(TOP(1)));- size = strlen(cstr);- char *str = MALLOC(size);- memcpy(str, cstr, size);- struct bytestring bs = { size, str };- RETIO(mkStrNode(bs));- }-- case T_PACKCSTRINGLEN:- {- size_t size;- CHECKIO(2);- cstr = evalptr(ARG(TOP(1)));- size = evalint(ARG(TOP(2)));- char *str = MALLOC(size);- memcpy(str, cstr, size);- struct bytestring bs = { size, str };- RETIO(mkStrNode(bs));- }-- case T_ARR_ALLOC:- {- size_t size;- NODEPTR elem;- struct ioarray *arr;- CHECKIO(2);- GCCHECK(1);- size = evalint(ARG(TOP(1)));- elem = ARG(TOP(2));- arr = arr_alloc(size, elem);- n = alloc_node(T_ARR);- ARR(n) = arr;- RETIO(n);- }- case T_ARR_COPY:- {- struct ioarray *arr;- CHECKIO(1);- GCCHECK(1);- n = evali(ARG(TOP(1)));- if (GETTAG(n) != T_ARR)- ERR("T_ARR_COPY tag");- arr = arr_copy(ARR(n));- n = alloc_node(T_ARR);- ARR(n) = arr;- RETIO(n);- }- case T_ARR_SIZE:- CHECKIO(1);- n = evali(ARG(TOP(1)));- if (GETTAG(n) != T_ARR)- ERR("bad ARR tag");- RETIO(mkInt(ARR(n)->size));- case T_ARR_READ:- {- size_t i;- CHECKIO(2);- i = evalint(ARG(TOP(2)));- n = evali(ARG(TOP(1)));- if (GETTAG(n) != T_ARR)- ERR("bad ARR tag");- if (i >= ARR(n)->size)- ERR("ARR_READ");- RETIO(ARR(n)->array[i]);- }- case T_ARR_WRITE:- {- size_t i;- CHECKIO(3);- i = evalint(ARG(TOP(2)));- n = evali(ARG(TOP(1)));- if (GETTAG(n) != T_ARR)- ERR("bad ARR tag");- if (i >= ARR(n)->size) {- //PRINT("%d %p %d\n", (int)i, ARR(n), (int)ARR(n)->size);- ERR("ARR_WRITE");- }- ARR(n)->array[i] = ARG(TOP(3));- RETIO(combUnit);- }-- case T_FPNEW:- {- CHECKIO(1);- //printf("T_FPNEW\n");- void *xp = evalptr(ARG(TOP(1)));- //printf("T_FPNEW xp=%p\n", xp);- n = alloc_node(T_FORPTR);- SETFORPTR(n, mkForPtrP(xp));- RETIO(n);- }- case T_FPFIN:- {- CHECKIO(2);- //printf("T_FPFIN\n");- struct forptr *xfp = evalforptr(ARG(TOP(2)));- //printf("T_FPFIN xfp=%p\n", xfp);- HsFunPtr yp = evalfunptr(ARG(TOP(1)));- //printf("T_FPFIN yp=%p\n", yp);- xfp->finalizer->final = yp;- RETIO(combUnit);- }--#if 0- case T_FPSTR:- {- CHECKIO(2);- //printf("T_FPFIN\n");- struct forptr *xfp = evalforptr(ARG(TOP(2)));- //printf("T_FPFIN xfp=%p\n", xfp);- struct bytestring bs = evalstring(ARG(TOP(1)));- //printf("T_FPFIN yp=%p\n", yp);- xfp->desc = bs.string;- RETIO(combUnit);- }-#endif-- case T_IO_GC:- CHECKIO(0);- //printf("gc()\n");- gc();- RETIO(combUnit);-- default:- //printf("bad tag %s\n", tag_names[GETTAG(n)]);- ERR1("execio tag %d", GETTAG(n));- }- }-}--#if WANT_ARGS-heapoffs_t-memsize(const char *p)-{- heapoffs_t n = atoi(p);- while (isdigit(*p))- p++;- switch (*p) {- case 'k': case 'K': n *= 1000; break;- case 'm': case 'M': n *= 1000000; break;- case 'g': case 'G': n *= 1000000000; break;- default: break;- }- return n;-}-#endif--extern uint8_t *combexpr;-extern int combexprlen;--MAIN-{- NODEPTR prog;-#if WANT_ARGS- char *inname = 0;- char **av;- char *progname;- char **gargv;- int gargc;- int inrts;-#if WANT_TICK- int dump_ticks = 0;-#endif-#endif-#if WANT_STDIO- char *outname = 0;- size_t file_size = 0;-#endif--#if 0- /* MINGW doesn't do buffering right */- setvbuf(stdout, NULL, _IOLBF, BUFSIZ);- setvbuf(stderr, NULL, _IONBF, BUFSIZ);-#endif--#ifdef INITIALIZATION- main_setup(); /* Do platform specific start-up. */-#endif-- heap_size = HEAP_CELLS; /* number of heap cells */- stack_size = STACK_SIZE; /* number of stack slots */--#if WANT_ARGS- progname = argv[0];- argc--, argv++;- gargv = argv;- for (av = argv, inrts = 0; argc--; argv++) {- char *p = *argv;- if (inrts) {- if (strcmp(p, "-RTS") == 0) {- inrts = 0;- } else {- if (strcmp(p, "-v") == 0)- verbose++;-#if WANT_TICK- else if (strcmp(p, "-T") == 0)- dump_ticks = 1;-#endif- else if (strncmp(p, "-H", 2) == 0)- heap_size = memsize(&p[2]);- else if (strncmp(p, "-K", 2) == 0)- stack_size = memsize(&p[2]);- else if (strncmp(p, "-r", 2) == 0)- inname = &p[2];-#if WANT_STDIO- else if (strncmp(p, "-o", 2) == 0)- outname = &p[2];- else if (strcmp(p, "-B") == 0)- gcbell++;-#endif /* WANT_STDIO */- else- ERR("Usage: eval [+RTS [-v] [-B] [-T] [-Hheap-size] [-Kstack-size] [-rFILE] [-oFILE] -RTS] arg ...");- }- } else {- if (strcmp(p, "+RTS") == 0) {- inrts = 1;- } else {- *av++ = p;- }- }- }- gargc = av - gargv;-- if (inname == 0)- inname = "out.comb";-#endif-- init_nodes();- stack = MALLOC(sizeof(NODEPTR) * stack_size);- if (!stack)- memerr();- stack_ptr = -1;- num_reductions = 0;--#if WANT_ARGS- /* Initialize an IORef (i.e., single element IOArray- * to contain the list of program arguments.- * The 0th element is the program name, and the rest- * are the non RTS arguments.- */- {- NODEPTR n;- /* No GC checks, the heap is empty. */- n = mkNil();- for(int i = gargc-1; i >= 0; i--) {- n = mkCons(mkStringC(gargv[i]), n);- }- n = mkCons(mkStringC(progname), n);- argarray = arr_alloc(1, n); /* An IORef contains a single element array */- argarray->permanent = 1; /* never GC the arguments, because a T_IO_GETARGREF can reach argarray */- }-#endif /* WANT_ARGS */-- if (combexpr) {- int c;- BFILE *bf = openb_rd_buf(combexpr, combexprlen);- c = getb(bf);- /* Compressed combinators start with a 'Z' or 'z', otherwise 'v' (for version) */- if (c == 'z') {- /* add LZ77 compressor transducer */- bf = add_lz77_decompressor(bf);- } else {- /* put it back, we need it */- ungetb(c, bf);- }- prog = parse_top(bf);- closeb(bf);-#if WANT_STDIO- file_size = combexprlen;-#endif- } else {-#if WANT_STDIO- prog = parse_file(inname, &file_size);-#else- ERR("no stdio");-#endif- }-- /* GC unused stuff, nice for -o */- PUSH(prog);- want_gc_red = 1;- gc();- gc(); /* this finds some more GC reductions */- want_gc_red = 0;- prog = POPTOP();--#if WANT_STDIO- heapoffs_t start_size = num_marked;- if (outname) {- /* Save GCed file (smaller), and exit. */- FILE *out = fopen(outname, "w");- if (!out)- ERR1("cannot open output file %s", outname);- struct BFILE *bf = add_FILE(out);- printb(bf, prog, 1);- closeb(bf);- EXIT(0);- }- if (verbose > 2) {- pp(stdout, prog);- }-#endif- run_time -= GETTIMEMILLI();- PUSH(prog);- topnode = &TOP(0);- execio(&TOP(0));- prog = TOP(0);- POP(1);-#if SANITY- if (GETTAG(prog) != T_AP || GETTAG(FUN(prog)) != T_IO_RETURN)- ERR("main execio");- NODEPTR res = evali(ARG(prog));- if (GETTAG(res) != T_I)- ERR("main execio I");-#endif- /* Flush standard handles in case there is some BFILE buffering */- flushb((BFILE*)FORPTR(comb_stdout)->payload.string);- flushb((BFILE*)FORPTR(comb_stderr)->payload.string);- gc(); /* Run finalizers */- run_time += GETTIMEMILLI();--#if WANT_STDIO- if (verbose) {- if (verbose > 1) {- PRINT("node size=%"PRIheap", heap size bytes=%"PRIheap"\n", (heapoffs_t)NODE_SIZE, heap_size * NODE_SIZE);- }- setlocale(LC_NUMERIC, ""); /* Make %' work on platforms that support it */- PRINT("%"PCOMMA"15"PRIheap" combinator file size\n", (heapoffs_t)file_size);- PRINT("%"PCOMMA"15"PRIheap" cells at start\n", start_size);- PRINT("%"PCOMMA"15"PRIheap" cells heap size (%"PCOMMA""PRIheap" bytes)\n", heap_size, heap_size * NODE_SIZE);- PRINT("%"PCOMMA"15"PRIcounter" cells allocated (%"PCOMMA".1f Mbyte/s)\n", num_alloc, num_alloc * NODE_SIZE / ((double)run_time / 1000) / 1000000);- PRINT("%"PCOMMA"15"PRIcounter" GCs\n", num_gc);- PRINT("%"PCOMMA"15"PRIcounter" max cells used\n", max_num_marked);- PRINT("%"PCOMMA"15"PRIcounter" reductions (%"PCOMMA".1f Mred/s)\n", num_reductions, num_reductions / ((double)run_time / 1000) / 1000000);- PRINT("%"PCOMMA"15"PRIcounter" array alloc\n", num_arr_alloc);- PRINT("%"PCOMMA"15"PRIcounter" array free\n", num_arr_free);- PRINT("%"PCOMMA"15"PRIcounter" foreign alloc\n", num_fin_alloc);- PRINT("%"PCOMMA"15"PRIcounter" foreign free\n", num_fin_free);- PRINT("%"PCOMMA"15"PRIcounter" bytestring alloc (max %"PCOMMA""PRIcounter")\n", num_bs_alloc, num_bs_alloc_max);- PRINT("%"PCOMMA"15"PRIcounter" bytestring alloc bytes (max %"PCOMMA""PRIcounter")\n", num_bs_bytes, num_bs_inuse_max);- PRINT("%"PCOMMA"15"PRIcounter" bytestring free\n", num_bs_free);-#if MAXSTACKDEPTH- PRINT("%"PCOMMA"15d max stack depth\n", (int)max_stack_depth);- PRINT("%"PCOMMA"15d max C stack depth\n", (int)max_c_stack);-#endif- // PRINT("%"PCOMMA"15"PRIcounter" max mark depth\n", max_mark_depth);- PRINT("%15.2fs total expired time\n", (double)run_time / 1000);- PRINT("%15.2fs total gc time (%.2f + %.2f)\n",- (double)(gc_mark_time + gc_scan_time) / 1000,- (double)gc_mark_time / 1000,- (double)gc_scan_time / 1000);-#if GCRED- PRINT(" GC reductions A=%"PRIcounter", K=%"PRIcounter", I=%"PRIcounter", int=%"PRIcounter", flip=%"PRIcounter", BI=%"PRIcounter", BxI=%"PRIcounter", C'BxI=%"PRIcounter", CC=%"PRIcounter"\n",- red_a, red_k, red_i, red_int, red_flip, red_bi, red_bxi, red_ccbi, red_cc);- PRINT(" special reductions B'=%"PRIcounter" K4=%"PRIcounter" K3=%"PRIcounter" K2=%"PRIcounter" C'B=%"PRIcounter", Z=%"PRIcounter", R=%"PRIcounter"\n",- red_bb, red_k4, red_k3, red_k2, red_ccb, red_z, red_r);-#endif- }-#endif /* WANT_STDIO */--#if WANT_TICK- if (dump_ticks) {- dump_tick_table(stdout);- }-#endif--#ifdef TEARDOWN- main_teardown(); /* do some platform specific teardown */-#endif- EXIT(0);-}--#if WANT_MD5-#include "md5.c"-#endif /* WANT_MD5 */--#if WANT_LZ77-#include "lz77.c"-#endif--/*********************/-/* FFI adapters */--#define MHS_FROM(name, set, type) \-void \-name(stackptr_t stk, int n, type x) \-{ \- NODEPTR r = TOP(0); /* The pre-allocated cell for the result, */ \- CHECKIO(n+1); /* Check that we actually had the right number of arguments. */ \- set(r, x); /* Put result in pre-allocated cell. */ \-}-MHS_FROM(mhs_from_FloatW, SETDBL, flt_t);-MHS_FROM(mhs_from_Int, SETINT, value_t);-MHS_FROM(mhs_from_Word, SETINT, uvalue_t);-MHS_FROM(mhs_from_Word8, SETINT, uvalue_t);-MHS_FROM(mhs_from_Ptr, SETPTR, void*);-MHS_FROM(mhs_from_ForPtr, SETFORPTR, struct forptr *);-MHS_FROM(mhs_from_FunPtr, SETFUNPTR, HsFunPtr);-MHS_FROM(mhs_from_CChar, SETINT, char);-MHS_FROM(mhs_from_CSChar, SETINT, signed char);-MHS_FROM(mhs_from_CUChar, SETINT, unsigned char);-MHS_FROM(mhs_from_CShort, SETINT, short);-MHS_FROM(mhs_from_CUShort, SETINT, unsigned short);-MHS_FROM(mhs_from_CInt, SETINT, int);-MHS_FROM(mhs_from_CUInt, SETINT, unsigned int);-MHS_FROM(mhs_from_CLong, SETINT, long);-MHS_FROM(mhs_from_CULong, SETINT, unsigned long);-MHS_FROM(mhs_from_CLLong, SETINT, long long);-MHS_FROM(mhs_from_CULLong, SETINT, unsigned long long);-MHS_FROM(mhs_from_CSize, SETINT, size_t);-#if WANT_TIME-MHS_FROM(mhs_from_CTime, SETINT, time_t);-#endif-// MHS_FROM(mhs_from_CSSize, SETINT, ssize_t);-MHS_FROM(mhs_from_CIntPtr, SETINT, intptr_t);-MHS_FROM(mhs_from_CUIntPtr, SETINT, uintptr_t);-void-mhs_from_Unit(stackptr_t stk, int n)-{- CHECKIO(n+1); /* Check that we actually had the right number of arguments. */- TOP(0) = combUnit; /* Put result on top of stack */-}--#define MHS_TO(name, eval, type) \-type name(stackptr_t stk, int n) \-{ \- return eval(ARG(TOP(n+2))); /* The stack has a reserved cell, and the FFI node on top of the arguments */ \-}-MHS_TO(mhs_to_FloatW, evaldbl, flt_t);-MHS_TO(mhs_to_Int, evalint, value_t);-MHS_TO(mhs_to_Word, evalint, uvalue_t);-MHS_TO(mhs_to_Word8, evalint, uint8_t);-MHS_TO(mhs_to_Ptr, evalptr, void*);-MHS_TO(mhs_to_FunPtr, evalfunptr, HsFunPtr);-MHS_TO(mhs_to_CChar, evalint, char);-MHS_TO(mhs_to_CSChar, evalint, signed char);-MHS_TO(mhs_to_CUChar, evalint, unsigned char);-MHS_TO(mhs_to_CShort, evalint, short);-MHS_TO(mhs_to_CUShort, evalint, unsigned short);-MHS_TO(mhs_to_CInt, evalint, int);-MHS_TO(mhs_to_CUInt, evalint, unsigned int);-MHS_TO(mhs_to_CLong, evalint, long);-MHS_TO(mhs_to_CULong, evalint, unsigned long);-MHS_TO(mhs_to_CLLong, evalint, long long);-MHS_TO(mhs_to_CULLong, evalint, unsigned long long);-MHS_TO(mhs_to_CSize, evalint, size_t);-#if WANT_TIME-MHS_TO(mhs_to_CTime, evalint, time_t);-#endif-// MHS_TO(mhs_to_CSSize, evalint, ssize_t);-MHS_TO(mhs_to_CIntPtr, evalint, intptr_t);-MHS_TO(mhs_to_CUIntPtr, evalint, uintptr_t);---/* The rest of this file was generated by the compiler, with some minor edits with #if. */-void mhs_GETRAW(int s) { mhs_from_Int(s, 0, GETRAW()); }-void mhs_GETTIMEMILLI(int s) { mhs_from_Int(s, 0, GETTIMEMILLI()); }-#if WANT_MATH-#if WORD_SIZE == 64-void mhs_acos(int s) { mhs_from_FloatW(s, 1, acos(mhs_to_FloatW(s, 0))); }-void mhs_asin(int s) { mhs_from_FloatW(s, 1, asin(mhs_to_FloatW(s, 0))); }-void mhs_atan(int s) { mhs_from_FloatW(s, 1, atan(mhs_to_FloatW(s, 0))); }-void mhs_atan2(int s) { mhs_from_FloatW(s, 2, atan2(mhs_to_FloatW(s, 0), mhs_to_FloatW(s, 1))); }-void mhs_cos(int s) { mhs_from_FloatW(s, 1, cos(mhs_to_FloatW(s, 0))); }-void mhs_exp(int s) { mhs_from_FloatW(s, 1, exp(mhs_to_FloatW(s, 0))); }-void mhs_log(int s) { mhs_from_FloatW(s, 1, log(mhs_to_FloatW(s, 0))); }-void mhs_sin(int s) { mhs_from_FloatW(s, 1, sin(mhs_to_FloatW(s, 0))); }-void mhs_sqrt(int s) { mhs_from_FloatW(s, 1, sqrt(mhs_to_FloatW(s, 0))); }-void mhs_tan(int s) { mhs_from_FloatW(s, 1, tan(mhs_to_FloatW(s, 0))); }-#elif WORD_SIZE == 32 /* WORD_SIZE */-void mhs_acos(int s) { mhs_from_FloatW(s, 1, acosf(mhs_to_FloatW(s, 0))); }-void mhs_asin(int s) { mhs_from_FloatW(s, 1, asinf(mhs_to_FloatW(s, 0))); }-void mhs_atan(int s) { mhs_from_FloatW(s, 1, atanf(mhs_to_FloatW(s, 0))); }-void mhs_atan2(int s) { mhs_from_FloatW(s, 2, atan2f(mhs_to_FloatW(s, 0), mhs_to_FloatW(s, 1))); }-void mhs_cos(int s) { mhs_from_FloatW(s, 1, cosf(mhs_to_FloatW(s, 0))); }-void mhs_exp(int s) { mhs_from_FloatW(s, 1, expf(mhs_to_FloatW(s, 0))); }-void mhs_log(int s) { mhs_from_FloatW(s, 1, logf(mhs_to_FloatW(s, 0))); }-void mhs_sin(int s) { mhs_from_FloatW(s, 1, sinf(mhs_to_FloatW(s, 0))); }-void mhs_sqrt(int s) { mhs_from_FloatW(s, 1, sqrtf(mhs_to_FloatW(s, 0))); }-void mhs_tan(int s) { mhs_from_FloatW(s, 1, tanf(mhs_to_FloatW(s, 0))); }-#else-#error Unknown WORD_SIZE-#endif /* WORD_SIZE */-#endif /* WANT_MATH */--#if WANT_STDIO-void mhs_add_FILE(int s) { mhs_from_Ptr(s, 1, add_FILE(mhs_to_Ptr(s, 0))); }-void mhs_add_utf8(int s) { mhs_from_Ptr(s, 1, add_utf8(mhs_to_Ptr(s, 0))); }-void mhs_closeb(int s) { closeb(mhs_to_Ptr(s, 0)); mhs_from_Unit(s, 1); }-void mhs_addr_closeb(int s) { mhs_from_FunPtr(s, 0, (HsFunPtr)&closeb); }-void mhs_flushb(int s) { flushb(mhs_to_Ptr(s, 0)); mhs_from_Unit(s, 1); }-void mhs_fopen(int s) { mhs_from_Ptr(s, 2, fopen(mhs_to_Ptr(s, 0), mhs_to_Ptr(s, 1))); }--void mhs_getb(int s) { mhs_from_Int(s, 1, getb(mhs_to_Ptr(s, 0))); }-void mhs_putb(int s) { putb(mhs_to_Int(s, 0), mhs_to_Ptr(s, 1)); mhs_from_Unit(s, 2); }-void mhs_ungetb(int s) { ungetb(mhs_to_Int(s, 0), mhs_to_Ptr(s, 1)); mhs_from_Unit(s, 2); }-void mhs_openwrbuf(int s) { mhs_from_Ptr(s, 0, openb_wr_buf()); }-void mhs_openrdbuf(int s) { mhs_from_Ptr(s, 2, openb_rd_buf(mhs_to_Ptr(s, 0), mhs_to_Int(s, 1))); }-void mhs_getbuf(int s) { get_buf(mhs_to_Ptr(s, 0), mhs_to_Ptr(s, 1), mhs_to_Ptr(s, 2)); mhs_from_Unit(s, 3); }-void mhs_system(int s) { mhs_from_Int(s, 1, system(mhs_to_Ptr(s, 0))); }-void mhs_tmpname(int s) { mhs_from_Ptr(s, 2, TMPNAME(mhs_to_Ptr(s, 0), mhs_to_Ptr(s, 1))); }-void mhs_unlink(int s) { mhs_from_Int(s, 1, unlink(mhs_to_Ptr(s, 0))); }-void mhs_readb(int s) { mhs_from_Int(s, 3, readb(mhs_to_Ptr(s, 0), mhs_to_Int(s, 1), mhs_to_Ptr(s, 2))); }-void mhs_writeb(int s) { mhs_from_Int(s, 3, writeb(mhs_to_Ptr(s, 0), mhs_to_Int(s, 1), mhs_to_Ptr(s, 2))); }-#endif /* WANT_STDIO */--#if WANT_MD5-void mhs_md5Array(int s) { md5Array(mhs_to_Ptr(s, 0), mhs_to_Ptr(s, 1), mhs_to_Int(s, 2)); mhs_from_Unit(s, 3); }-void mhs_md5BFILE(int s) { md5BFILE(mhs_to_Ptr(s, 0), mhs_to_Ptr(s, 1)); mhs_from_Unit(s, 2); }-void mhs_md5String(int s) { md5String(mhs_to_Ptr(s, 0), mhs_to_Ptr(s, 1)); mhs_from_Unit(s, 2); }-#endif /* WANT_MD5 */--#if WANT_LZ77-void mhs_add_lz77_compressor(int s) { mhs_from_Ptr(s, 1, add_lz77_compressor(mhs_to_Ptr(s, 0))); }-void mhs_add_lz77_decompressor(int s) { mhs_from_Ptr(s, 1, add_lz77_decompressor(mhs_to_Ptr(s, 0))); }-void mhs_lz77c(int s) { mhs_from_CSize(s, 3, lz77c(mhs_to_Ptr(s, 0), mhs_to_CSize(s, 1), mhs_to_Ptr(s, 2))); }-#endif /* WANT_LZ77 */--#if WANT_RLE-void mhs_add_rle_compressor(int s) { mhs_from_Ptr(s, 1, add_rle_compressor(mhs_to_Ptr(s, 0))); }-void mhs_add_rle_decompressor(int s) { mhs_from_Ptr(s, 1, add_rle_decompressor(mhs_to_Ptr(s, 0))); }-#endif /* WANT_RLE */--#if WANT_BWT-void mhs_add_bwt_compressor(int s) { mhs_from_Ptr(s, 1, add_bwt_compressor(mhs_to_Ptr(s, 0))); }-void mhs_add_bwt_decompressor(int s) { mhs_from_Ptr(s, 1, add_bwt_decompressor(mhs_to_Ptr(s, 0))); }-#endif /* WANT_BWT */--void mhs_calloc(int s) { mhs_from_Ptr(s, 2, calloc(mhs_to_CSize(s, 0), mhs_to_CSize(s, 1))); }-void mhs_free(int s) { free(mhs_to_Ptr(s, 0)); mhs_from_Unit(s, 1); }-void mhs_addr_free(int s) { mhs_from_FunPtr(s, 0, (HsFunPtr)&FREE); }-void mhs_getenv(int s) { mhs_from_Ptr(s, 1, getenv(mhs_to_Ptr(s, 0))); }-void mhs_iswindows(int s) { mhs_from_Int(s, 0, iswindows()); }-void mhs_malloc(int s) { mhs_from_Ptr(s, 1, MALLOC(mhs_to_CSize(s, 0))); }-void mhs_memcpy(int s) { memcpy(mhs_to_Ptr(s, 0), mhs_to_Ptr(s, 1), mhs_to_CSize(s, 2)); mhs_from_Unit(s, 3); }-void mhs_memmove(int s) { memmove(mhs_to_Ptr(s, 0), mhs_to_Ptr(s, 1), mhs_to_CSize(s, 2)); mhs_from_Unit(s, 3); }-void mhs_peekPtr(int s) { mhs_from_Ptr(s, 1, peekPtr(mhs_to_Ptr(s, 0))); }-void mhs_peekWord(int s) { mhs_from_Word(s, 1, peekWord(mhs_to_Ptr(s, 0))); }-void mhs_pokePtr(int s) { pokePtr(mhs_to_Ptr(s, 0), mhs_to_Ptr(s, 1)); mhs_from_Unit(s, 2); }-void mhs_pokeWord(int s) { pokeWord(mhs_to_Ptr(s, 0), mhs_to_Word(s, 1)); mhs_from_Unit(s, 2); }--void mhs_peek_uint8(int s) { mhs_from_Word(s, 1, peek_uint8(mhs_to_Ptr(s, 0))); }-void mhs_poke_uint8(int s) { poke_uint8(mhs_to_Ptr(s, 0), mhs_to_Word(s, 1)); mhs_from_Unit(s, 2); }-void mhs_peek_uint16(int s) { mhs_from_Word(s, 1, peek_uint16(mhs_to_Ptr(s, 0))); }-void mhs_poke_uint16(int s) { poke_uint16(mhs_to_Ptr(s, 0), mhs_to_Word(s, 1)); mhs_from_Unit(s, 2); }-#if WORD_SIZE >= 32-void mhs_peek_uint32(int s) { mhs_from_Word(s, 1, peek_uint32(mhs_to_Ptr(s, 0))); }-void mhs_poke_uint32(int s) { poke_uint32(mhs_to_Ptr(s, 0), mhs_to_Word(s, 1)); mhs_from_Unit(s, 2); }-#endif /* WORD_SIZE */-#if WORD_SIZE >= 64-void mhs_peek_uint64(int s) { mhs_from_Word(s, 1, peek_uint64(mhs_to_Ptr(s, 0))); }-void mhs_poke_uint64(int s) { poke_uint64(mhs_to_Ptr(s, 0), mhs_to_Word(s, 1)); mhs_from_Unit(s, 2); }-#endif /* WORD_SIZE */-void mhs_peek_uint(int s) { mhs_from_Word(s, 1, peek_uint(mhs_to_Ptr(s, 0))); }-void mhs_poke_uint(int s) { poke_uint(mhs_to_Ptr(s, 0), mhs_to_Word(s, 1)); mhs_from_Unit(s, 2); }--void mhs_peek_int8(int s) { mhs_from_Int(s, 1, peek_int8(mhs_to_Ptr(s, 0))); }-void mhs_poke_int8(int s) { poke_int8(mhs_to_Ptr(s, 0), mhs_to_Int(s, 1)); mhs_from_Unit(s, 2); }-void mhs_peek_int16(int s) { mhs_from_Int(s, 1, peek_int16(mhs_to_Ptr(s, 0))); }-void mhs_poke_int16(int s) { poke_int16(mhs_to_Ptr(s, 0), mhs_to_Int(s, 1)); mhs_from_Unit(s, 2); }-#if WORD_SIZE >= 32-void mhs_peek_int32(int s) { mhs_from_Int(s, 1, peek_int32(mhs_to_Ptr(s, 0))); }-void mhs_poke_int32(int s) { poke_int32(mhs_to_Ptr(s, 0), mhs_to_Int(s, 1)); mhs_from_Unit(s, 2); }-#endif /* WORD_SIZE */-#if WORD_SIZE >= 64-void mhs_peek_int64(int s) { mhs_from_Int(s, 1, peek_int64(mhs_to_Ptr(s, 0))); }-void mhs_poke_int64(int s) { poke_int64(mhs_to_Ptr(s, 0), mhs_to_Int(s, 1)); mhs_from_Unit(s, 2); }-#endif /* WORD_SIZE */-void mhs_peek_int(int s) { mhs_from_Int(s, 1, peek_int(mhs_to_Ptr(s, 0))); }-void mhs_poke_int(int s) { poke_int(mhs_to_Ptr(s, 0), mhs_to_Int(s, 1)); mhs_from_Unit(s, 2); }-void mhs_peek_llong(int s) { mhs_from_CLLong(s, 1, peek_llong(mhs_to_Ptr(s, 0))); }-void mhs_peek_long(int s) { mhs_from_CLong(s, 1, peek_long(mhs_to_Ptr(s, 0))); }-void mhs_peek_ullong(int s) { mhs_from_CULLong(s, 1, peek_ullong(mhs_to_Ptr(s, 0))); }-void mhs_peek_ulong(int s) { mhs_from_CULong(s, 1, peek_ulong(mhs_to_Ptr(s, 0))); }-void mhs_poke_llong(int s) { poke_llong(mhs_to_Ptr(s, 0), mhs_to_CLLong(s, 1)); mhs_from_Unit(s, 2); }-void mhs_poke_long(int s) { poke_long(mhs_to_Ptr(s, 0), mhs_to_CLong(s, 1)); mhs_from_Unit(s, 2); }-void mhs_poke_ullong(int s) { poke_ullong(mhs_to_Ptr(s, 0), mhs_to_CULLong(s, 1)); mhs_from_Unit(s, 2); }-void mhs_poke_ulong(int s) { poke_ulong(mhs_to_Ptr(s, 0), mhs_to_CULong(s, 1)); mhs_from_Unit(s, 2); }-#if WANT_FLOAT-void mhs_peek_flt(int s) { mhs_from_FloatW(s, 1, peek_flt(mhs_to_Ptr(s, 0))); }-void mhs_poke_flt(int s) { poke_flt(mhs_to_Ptr(s, 0), mhs_to_FloatW(s, 1)); mhs_from_Unit(s, 2); }-#endif /* WANT_FLOAT */-void mhs_sizeof_int(int s) { mhs_from_Int(s, 0, sizeof(int)); }-void mhs_sizeof_llong(int s) { mhs_from_Int(s, 0, sizeof(long long)); }-void mhs_sizeof_long(int s) { mhs_from_Int(s, 0, sizeof(long)); }-#if WANT_DIR-void mhs_closedir(int s) { mhs_from_Int(s, 1, closedir(mhs_to_Ptr(s, 0))); }-void mhs_opendir(int s) { mhs_from_Ptr(s, 1, opendir(mhs_to_Ptr(s, 0))); }-void mhs_readdir(int s) { mhs_from_Ptr(s, 1, readdir(mhs_to_Ptr(s, 0))); }-void mhs_c_d_name(int s) { mhs_from_Ptr(s, 1, ((struct dirent *)(mhs_to_Ptr(s, 0)))->d_name); }-void mhs_chdir(int s) { mhs_from_Int(s, 1, chdir(mhs_to_Ptr(s, 0))); }-void mhs_mkdir(int s) { mhs_from_Int(s, 2, mkdir(mhs_to_Ptr(s, 0), mhs_to_Int(s, 1))); }-void mhs_getcwd(int s) { mhs_from_Ptr(s, 2, getcwd(mhs_to_Ptr(s, 0), mhs_to_Int(s, 1))); }-#endif /* WANT_DIR */--/* Use this to detect if we have (and want) GMP or not. */-void mhs_want_gmp(int s) { mhs_from_Int(s, 0, WANT_GMP); }--#if WANT_GMP-void-free_mpz(void *p)-{- /* printf("free_mpz %p\n", p);*/- mpz_clear(p); /* free any extra storage */- FREE(p); /* and free the mpz itself */-}--/* Allocate an initialize a GMP integer */-struct forptr *-new_mpz(void)-{-#if 0- {- static int done = 0;- if (!done) {- printf("GMP\n");- done = 1;- }- }-#endif- mpz_ptr p = MALLOC(sizeof(*p));- if (!p)- memerr();- mpz_init(p);- struct forptr *fp = mkForPtrP(p);- fp->finalizer->final = (HsFunPtr)free_mpz;- fp->finalizer->fptype = FP_MPZ;- /* printf("new_mpz %p %p\n", p, fp); */- return fp;-}--#if 0-void-print_mpz(mpz_ptr p)-{- mpz_out_str(stdout, 10, p);-}-#endif--void mhs_new_mpz(int s) { mhs_from_ForPtr(s, 0, new_mpz()); }--/* Stubs for GMP functions */-void mhs_mpz_abs(int s) { mpz_abs(mhs_to_Ptr(s, 0), mhs_to_Ptr(s, 1)); mhs_from_Unit(s, 2); }-void mhs_mpz_add(int s) { mpz_add(mhs_to_Ptr(s, 0), mhs_to_Ptr(s, 1), mhs_to_Ptr(s, 2)); mhs_from_Unit(s, 3); }-void mhs_mpz_and(int s) { mpz_and(mhs_to_Ptr(s, 0), mhs_to_Ptr(s, 1), mhs_to_Ptr(s, 2)); mhs_from_Unit(s, 3); }-void mhs_mpz_cmp(int s) { mhs_from_Int(s, 2, mpz_cmp(mhs_to_Ptr(s, 0), mhs_to_Ptr(s, 1))); }-void mhs_mpz_get_d(int s) { mhs_from_FloatW(s, 1, mpz_get_d(mhs_to_Ptr(s, 0))); }-void mhs_mpz_get_si(int s) { mhs_from_Int(s, 1, mpz_get_si(mhs_to_Ptr(s, 0))); }-void mhs_mpz_get_ui(int s) { mhs_from_Word(s, 1, mpz_get_ui(mhs_to_Ptr(s, 0))); }-void mhs_mpz_init_set_si(int s) { mpz_init_set_si(mhs_to_Ptr(s, 0), mhs_to_Int(s, 1)); mhs_from_Unit(s, 2); }-void mhs_mpz_init_set_ui(int s) { mpz_init_set_ui(mhs_to_Ptr(s, 0), mhs_to_Word(s, 1)); mhs_from_Unit(s, 2); }-void mhs_mpz_ior(int s) { mpz_ior(mhs_to_Ptr(s, 0), mhs_to_Ptr(s, 1), mhs_to_Ptr(s, 2)); mhs_from_Unit(s, 3); }-void mhs_mpz_mul(int s) { mpz_mul(mhs_to_Ptr(s, 0), mhs_to_Ptr(s, 1), mhs_to_Ptr(s, 2)); mhs_from_Unit(s, 3); }-void mhs_mpz_mul_2exp(int s) { mpz_mul_2exp(mhs_to_Ptr(s, 0), mhs_to_Ptr(s, 1), mhs_to_Int(s, 2)); mhs_from_Unit(s, 3); }-void mhs_mpz_neg(int s) { mpz_neg(mhs_to_Ptr(s, 0), mhs_to_Ptr(s, 1)); mhs_from_Unit(s, 2); }-void mhs_mpz_popcount(int s) {- mpz_ptr a = mhs_to_Ptr(s, 0);- if (mpz_sgn(a) < 0) {- mpz_t neg_a;- mpz_init(neg_a);- mpz_neg(neg_a, a);- mhs_from_Int(s, 1, -mpz_popcount(neg_a));- mpz_clear(neg_a);- } else {- mhs_from_Int(s, 1, mpz_popcount(a));- }-}-void mhs_mpz_sub(int s) { mpz_sub(mhs_to_Ptr(s, 0), mhs_to_Ptr(s, 1), mhs_to_Ptr(s, 2)); mhs_from_Unit(s, 3); }-void mhs_mpz_fdiv_q_2exp(int s) { mpz_fdiv_q_2exp(mhs_to_Ptr(s, 0), mhs_to_Ptr(s, 1), mhs_to_Int(s, 2)); mhs_from_Unit(s, 3); }-void mhs_mpz_tdiv_qr(int s) { mpz_tdiv_qr(mhs_to_Ptr(s, 0), mhs_to_Ptr(s, 1), mhs_to_Ptr(s, 2), mhs_to_Ptr(s, 3)); mhs_from_Unit(s, 4); }-void mhs_mpz_tstbit(int s) { mhs_from_Int(s, 2, mpz_tstbit(mhs_to_Ptr(s, 0), mhs_to_Int(s, 1))); }-void mhs_mpz_xor(int s) { mpz_xor(mhs_to_Ptr(s, 0), mhs_to_Ptr(s, 1), mhs_to_Ptr(s, 2)); mhs_from_Unit(s, 3); }-#endif /* WANT_GMP */--struct ffi_entry ffi_table[] = {-{ "GETRAW", mhs_GETRAW},-{ "GETTIMEMILLI", mhs_GETTIMEMILLI},-#if WANT_MATH-{ "acos", mhs_acos},-{ "asin", mhs_asin},-{ "atan", mhs_atan},-{ "atan2", mhs_atan2},-{ "cos", mhs_cos},-{ "exp", mhs_exp},-{ "log", mhs_log},-{ "sin", mhs_sin},-{ "sqrt", mhs_sqrt},-{ "tan", mhs_tan},-#endif /* WANT_MATH */--#if WANT_STDIO-{ "add_FILE", mhs_add_FILE},-{ "add_utf8", mhs_add_utf8},-{ "closeb", mhs_closeb},-{ "&closeb", mhs_addr_closeb},-{ "flushb", mhs_flushb},-{ "fopen", mhs_fopen},-{ "getb", mhs_getb},-{ "putb", mhs_putb},-{ "ungetb", mhs_ungetb},-{ "openb_wr_buf", mhs_openwrbuf},-{ "openb_rd_buf", mhs_openrdbuf},-{ "get_buf", mhs_getbuf},-{ "system", mhs_system},-{ "tmpname", mhs_tmpname},-{ "unlink", mhs_unlink},-{ "readb", mhs_readb},-{ "writeb", mhs_writeb},-#endif /* WANT_STDIO */--#if WANT_MD5-{ "md5Array", mhs_md5Array},-{ "md5BFILE", mhs_md5BFILE},-{ "md5String", mhs_md5String},-#endif /* WANT_MD5 */--#if WANT_LZ77-{ "add_lz77_compressor", mhs_add_lz77_compressor},-{ "add_lz77_decompressor", mhs_add_lz77_decompressor},-{ "lz77c", mhs_lz77c},-#endif /* WANT_LZ77 */--#if WANT_RLE-{ "add_rle_compressor", mhs_add_rle_compressor},-{ "add_rle_decompressor", mhs_add_rle_decompressor},-#endif /* WANT_RLE */--#if WANT_BWT-{ "add_bwt_compressor", mhs_add_bwt_compressor},-{ "add_bwt_decompressor", mhs_add_bwt_decompressor},-#endif /* WANT_RLE */--{ "calloc", mhs_calloc},-{ "free", mhs_free},-{ "&free", mhs_addr_free},-{ "getenv", mhs_getenv},-{ "iswindows", mhs_iswindows},-{ "malloc", mhs_malloc},-{ "memcpy", mhs_memcpy},-{ "memmove", mhs_memmove},-{ "peekPtr", mhs_peekPtr},-{ "peekWord", mhs_peekWord},-{ "pokePtr", mhs_pokePtr},-{ "pokeWord", mhs_pokeWord},--{ "peek_uint8", mhs_peek_uint8},-{ "poke_uint8", mhs_poke_uint8},-{ "peek_uint16", mhs_peek_uint16},-{ "poke_uint16", mhs_poke_uint16},-#if WORD_SIZE >= 32-{ "peek_uint32", mhs_peek_uint32},-{ "poke_uint32", mhs_poke_uint32},-#endif /* WORD_SIZE >= 32 */-#if WORD_SIZE >= 64-{ "peek_uint64", mhs_peek_uint64},-{ "poke_uint64", mhs_poke_uint64},-#endif /* WORD_SIZE >= 64 */-{ "peek_uint", mhs_peek_uint},-{ "poke_uint", mhs_poke_uint},--{ "peek_int8", mhs_peek_int8},-{ "poke_int8", mhs_poke_int8},-{ "peek_int16", mhs_peek_int16},-{ "poke_int16", mhs_poke_int16},-#if WORD_SIZE >= 32-{ "peek_int32", mhs_peek_int32},-{ "poke_int32", mhs_poke_int32},-#endif /* WORD_SIZE >= 32 */-#if WORD_SIZE >= 64-{ "peek_int64", mhs_peek_int64},-{ "poke_int64", mhs_poke_int64},-#endif /* WORD_SIZE >= 64 */-{ "peek_int", mhs_peek_int},-{ "poke_int", mhs_poke_int},-{ "peek_llong", mhs_peek_llong},-{ "peek_long", mhs_peek_long},-{ "peek_ullong", mhs_peek_ullong},-{ "peek_ulong", mhs_peek_ulong},-{ "poke_llong", mhs_poke_llong},-{ "poke_long", mhs_poke_long},-{ "poke_ullong", mhs_poke_ullong},-{ "poke_ulong", mhs_poke_ulong},-#if WANT_FLOAT-{ "poke_flt", mhs_poke_flt},-{ "poke_flt", mhs_poke_flt},-#endif /* WANT_FLOAT */-{ "sizeof_int", mhs_sizeof_int},-{ "sizeof_llong", mhs_sizeof_llong},-{ "sizeof_long", mhs_sizeof_long},-#if WANT_DIR-{ "c_d_name", mhs_c_d_name},-{ "closedir", mhs_closedir},-{ "opendir", mhs_opendir},-{ "readdir", mhs_readdir},-{ "chdir", mhs_chdir},-{ "mkdir", mhs_mkdir},-{ "getcwd", mhs_getcwd},-#endif /* WANT_DIR */-{ "want_gmp", mhs_want_gmp},-#if WANT_GMP-{ "new_mpz", mhs_new_mpz},-{ "mpz_abs", mhs_mpz_abs},-{ "mpz_add", mhs_mpz_add},-{ "mpz_and", mhs_mpz_and},-{ "mpz_cmp", mhs_mpz_cmp},-{ "mpz_get_d", mhs_mpz_get_d},-{ "mpz_get_si", mhs_mpz_get_si},-{ "mpz_get_ui", mhs_mpz_get_ui},-{ "mpz_init_set_si", mhs_mpz_init_set_si},-{ "mpz_init_set_ui", mhs_mpz_init_set_ui},-{ "mpz_ior", mhs_mpz_ior},-{ "mpz_mul", mhs_mpz_mul},-{ "mpz_mul_2exp", mhs_mpz_mul_2exp},-{ "mpz_neg", mhs_mpz_neg},-{ "mpz_popcount", mhs_mpz_popcount},-{ "mpz_sub", mhs_mpz_sub},-{ "mpz_fdiv_q_2exp", mhs_mpz_fdiv_q_2exp},-{ "mpz_tdiv_qr", mhs_mpz_tdiv_qr},-{ "mpz_tstbit", mhs_mpz_tstbit},-{ "mpz_xor", mhs_mpz_xor},-#endif /* WANT_GMP */-{ 0,0 }+#if WANT_SIGINT+#include <signal.h>+#endif++#if WANT_MD5+#include "md5.h"+#endif++#if !defined(WANT_LZ77)+#define WANT_LZ77 1+#endif++#if !defined(WANT_RLE)+#define WANT_RLE 1+#endif++#if !defined(WANT_BWT)+#define WANT_BWT 1+#endif++#if WANT_LZ77+size_t lz77d(uint8_t *src, size_t srclen, uint8_t **bufp);+size_t lz77c(uint8_t *src, size_t srclen, uint8_t **bufp);+#endif++#if defined(__GNUC__) && __GNUC__ >= 14 && defined(__aarch64__)+#define REGISTER(dcl, reg) register dcl asm(#reg)+#else+#define REGISTER(dcl, reg) dcl+#endif++#include "mhsffi.h"+struct ffi_entry ffi_table[];+int num_ffi;+#define FFI_IX(i) ((i) < num_ffi ? ffi_table[i] : xffi_table[i - num_ffi])++//#include "config.h"++#if WANT_STDIO+#define THREAD_DEBUG 1+#else+#define THREAD_DEBUG 0+#endif++#define VERSION "v8.0\n"++typedef intptr_t value_t; /* Make value the same size as pointers, since they are in a union */+#define PRIvalue PRIdPTR+typedef uintptr_t uvalue_t; /* Make unsigned value the same size as pointers, since they are in a union */+#define PRIuvalue PRIuPTR+typedef uintptr_t heapoffs_t; /* Heap offsets */+#define PRIheap PRIuPTR+typedef uintptr_t tag_t; /* Room for tag, low order bit indicates AP/not-AP */+typedef intptr_t stackptr_t; /* Index into stack */++typedef uintptr_t counter_t; /* Statistics counter, can be smaller since overflow doesn't matter */+#define PRIcounter PRIuPTR+typedef uintptr_t bits_t; /* One word of bits */++#if !defined(MALLOC)+#define MALLOC malloc+#endif++#if !defined(REALLOC)+#define REALLOC realloc+#endif++#if !defined(CALLOC)+#define CALLOC calloc+#endif++#if !defined(FREE)+#define FREE free+#endif++#if !defined(EXIT)+#define EXIT exit+#endif++#if !defined(PRINT)+#define PRINT printf+#endif++#if !defined(MAIN)+#define MAIN int main(int argc, char **argv)+#endif++#if !defined(PCOMMA)+#define PCOMMA "'"+#endif /* !defined(PCOMMA) */++#if !defined(GETRAW)+int GETRAW(void) { return -1; }+#endif /* !defined(getraw) */++#if !defined(GETTIMEMILLI)+value_t GETTIMEMILLI(void) { return 0; }+#endif /* !define(GETTIMEMILLI) */++#if !defined(INLINE)+#define INLINE inline+#endif /* !define(INLINE) */++#if !defined(NORETURN)+/*#define NORETURN [[noreturn]]*/+#define NORETURN _Noreturn+#endif /* !defined(NORETURN) */++NORETURN void memerr(void);++void *+mmalloc(size_t s)+{+ void *p = MALLOC(s);+ if (!p)+ memerr();+ return p;+}++void *+mrealloc(void *q, size_t s)+{+ void *p = REALLOC(q, s);+ if (!p)+ memerr();+ return p;+}++void *+mcalloc(size_t n, size_t s)+{+ void *p = CALLOC(n, s);+ if (!p)+ memerr();+ return p;+}++#if !defined(TMPNAME)+/* This is a really bad implementation, since it doesn't check for anything. */+char* TMPNAME(const char* pre, const char* post) {+ char *s = mmalloc(strlen(pre) + 3 + strlen(post) + 1);+ strcpy(s, pre);+ strcat(s, "TMP");+ strcat(s, post);+ return s;+}+#endif++#if !defined(FFS)+/* This is pretty bad, could use deBruijn multiplication instead. */+int+FFS(bits_t x)+{+ int i;+ if (!x)+ return 0;+ for(i = 1; !(x & 1); x >>= 1, i++)+ ;+ return i;+}+#endif /* !defined(FFS) */++#if defined(__has_builtin)++#if __has_builtin(__builtin_popcountl)+#define BUILTIN_POPCOUNT+#endif++#endif++#if !defined(POPCOUNT)+uvalue_t POPCOUNT(uvalue_t x) {+#if defined(BUILTIN_POPCOUNT)+ return __builtin_popcountl(x);+#else+ uvalue_t count = 0;+ while (x) {+ x = x & (x - 1); // clear lowest 1 bit+ count += 1;+ }+ return count;+#endif+}+#endif++#if defined(__GNUC__)+#define BUILTIN_CLZ+#elif defined(__clang__)++#if __has_builtin(__builtin_clzl)+#define BUILTIN_CLZ+#endif++#endif+++#if !defined(CLZ)+uvalue_t CLZ(uvalue_t x) {+#if defined(BUILTIN_CLZ)+ if (x == 0) return WORD_SIZE;+ return __builtin_clzl(x);+#else+ value_t count = WORD_SIZE;+ while (x) {+ x = x >> 1;+ count -= 1;+ }+ return count;+#endif+}+#endif++#if defined(__has_builtin)++#if __has_builtin(__builtin_ctzl)+#define BUILTIN_CTZ+#endif++#endif+++#if !defined(CTZ)+uvalue_t CTZ(uvalue_t x) {+ if (x == 0) return WORD_SIZE;+#if defined(BUILTIN_CLZ)+ return __builtin_ctzl(x);+#else+ uvalue_t count = 0;+ while ((x & 1) == 0) {+ x = x >> 1;+ count += 1;+ }+ return count;+#endif+}+#endif++#if !defined(WANT_ARGS)+#define WANT_ARGS 1+#endif++#if !defined(COUNT)+#define COUNT(n) ++(n)+#endif++value_t+iswindows(void)+{+#if defined(ISWINDOWS)+ return 1;+#else+ return 0;+#endif+}++/***************************************/++/* Keep permanent nodes for LOW_INT <= i < HIGH_INT */+#define LOW_INT (-10)+#define HIGH_INT 256++#if !defined(HEAP_CELLS)+#define HEAP_CELLS 50000000+#endif++#if !defined(STACK_SIZE)+#define STACK_SIZE 100000+#endif++#if !defined(ERR)+#if WANT_STDIO+#define ERR(s) do { fprintf(stderr,"ERR: "s"\n"); EXIT(1); } while(0)+#define ERR1(s,a) do { fprintf(stderr,"ERR: "s"\n",a); EXIT(1); } while(0)+#else /* WANT_STDIO */+#define ERR(s) EXIT(1)+#define ERR1(s,a) EXIT(1)+#endif /* WANT_STDIO */+#endif /* !define(ERR) */++enum node_tag { T_FREE, T_IND, T_AP, T_INT, T_DBL, T_PTR, T_FUNPTR, T_FORPTR, T_BADDYN, T_ARR, T_THID, T_MVAR,+ T_S, T_K, T_I, T_B, T_C,+ T_A, T_Y, T_SS, T_BB, T_CC, T_P, T_R, T_O, T_U, T_Z, T_J,+ T_K2, T_K3, T_K4, T_CCB,+ T_ADD, T_SUB, T_MUL, T_QUOT, T_REM, T_SUBR, T_UQUOT, T_UREM, T_NEG,+ T_AND, T_OR, T_XOR, T_INV, T_SHL, T_SHR, T_ASHR,+ T_POPCOUNT, T_CLZ, T_CTZ,+ T_EQ, T_NE, T_LT, T_LE, T_GT, T_GE, T_ULT, T_ULE, T_UGT, T_UGE, T_ICMP, T_UCMP,+ T_FPADD, T_FP2P, T_FPNEW, T_FPFIN, // T_FPSTR,+ T_FP2BS, T_BS2FP,+ T_TOPTR, T_TOINT, T_TODBL, T_TOFUNPTR,+ T_BININT2, T_BININT1, T_UNINT1,+ T_BINDBL2, T_BINDBL1, T_UNDBL1,+ T_BINBS2, T_BINBS1,+ T_ISINT,+#if WANT_FLOAT+ T_FADD, T_FSUB, T_FMUL, T_FDIV, T_FNEG, T_ITOF,+ T_FEQ, T_FNE, T_FLT, T_FLE, T_FGT, T_FGE, T_FSHOW, T_FREAD,+#endif+ T_ARR_ALLOC, T_ARR_COPY, T_ARR_SIZE, T_ARR_READ, T_ARR_WRITE, T_ARR_EQ,+ T_RAISE, T_SEQ, T_EQUAL, T_COMPARE, T_RNF,+ T_TICK,+ T_IO_BIND, T_IO_THEN, T_IO_RETURN,+ T_IO_SERIALIZE, T_IO_DESERIALIZE,+ T_IO_GETARGREF,+ T_IO_PERFORMIO, T_IO_PRINT, T_CATCH, T_CATCHR,+ T_IO_CCALL, T_IO_GC, T_DYNSYM,+ T_IO_FORK, T_IO_THID, T_THNUM, T_IO_THROWTO, T_IO_YIELD,+ T_IO_NEWMVAR,+ T_IO_TAKEMVAR, T_IO_PUTMVAR, T_IO_READMVAR,+ T_IO_TRYTAKEMVAR, T_IO_TRYPUTMVAR, T_IO_TRYREADMVAR,+ T_IO_THREADDELAY, T_IO_THREADSTATUS,+ T_IO_GETMASKINGSTATE, T_IO_SETMASKINGSTATE,+ T_NEWCASTRINGLEN, T_PACKCSTRING, T_PACKCSTRINGLEN,+ T_BSAPPEND, T_BSEQ, T_BSNE, T_BSLT, T_BSLE, T_BSGT, T_BSGE, T_BSCMP,+ T_BSPACK, T_BSUNPACK, T_BSREPLICATE, T_BSLENGTH, T_BSSUBSTR, T_BSINDEX,+ T_BSFROMUTF8, T_BSTOUTF8, T_BSHEADUTF8, T_BSTAILUTF8,+ T_BSAPPENDDOT,+ T_IO_PP, /* for debugging */+ T_IO_STDIN, T_IO_STDOUT, T_IO_STDERR,+ T_LAST_TAG,+};+/* Most entries are initialized from the primops table. */+static const char* tag_names[T_LAST_TAG+1] =+ { "FREE", "IND", "AP", "INT", "DBL", "PTR", "FUNPTR", "FORPTR", "BADDYN", "ARR", "THID", "MVAR" };++struct ioarray;+struct bytestring;+struct forptr;+struct mthread;+struct mvar;++typedef struct node {+ union {+ struct node *uufun;+ intptr_t uuifun;+ tag_t uutag; /* LSB=1 indicates that this is a tag, LSB=0 that this is a T_AP node */+ } ufun;+ union {+ struct node *uuarg;+ value_t uuvalue;+ flt_t uufloatvalue;+ const char *uucstring;+ void *uuptr;+ HsFunPtr uufunptr;+ struct ioarray *uuarray;+ struct forptr *uuforptr; /* foreign pointers and byte arrays */+ struct mthread *uuthread;+ struct mvar *uumvar;+ } uarg;+} node;+#define BIT_TAG 1+#define BIT_IND 2+#define BIT_NOTAP (BIT_TAG | BIT_IND)+#define TAG_SHIFT 2++typedef struct node* NODEPTR;+#define NIL 0+#define HEAPREF(i) &cells[(i)]+#define GETTAG(p) ((p)->ufun.uutag & BIT_NOTAP ? ( (p)->ufun.uutag & BIT_IND ? T_IND : (int)((p)->ufun.uutag >> TAG_SHIFT) ) : T_AP)+#define SETTAG(p,t) do { if (t != T_AP) { if (t == T_IND) { (p)->ufun.uutag = BIT_IND; } else { (p)->ufun.uutag = ((t) << TAG_SHIFT) | BIT_TAG; } } } while(0)+#define GETVALUE(p) (p)->uarg.uuvalue+#define GETDBLVALUE(p) (p)->uarg.uufloatvalue+#define SETVALUE(p,v) (p)->uarg.uuvalue = v+#define SETDBLVALUE(p,v) (p)->uarg.uufloatvalue = v+#define FUN(p) (p)->ufun.uufun+#define ARG(p) (p)->uarg.uuarg+#define CSTR(p) (p)->uarg.uucstring+#define PTR(p) (p)->uarg.uuptr+#define FUNPTR(p) (p)->uarg.uufunptr+#define FORPTR(p) (p)->uarg.uuforptr+#define BSTR(p) (p)->uarg.uuforptr->payload+#define ARR(p) (p)->uarg.uuarray+#define THR(p) (p)->uarg.uuthread+#define MVAR(p) (p)->uarg.uumvar+#define ISINDIR(p) ((p)->ufun.uuifun & BIT_IND)+#define GETINDIR(p) ((struct node*) ((p)->ufun.uuifun & ~BIT_IND))+#define SETINDIR(p,q) do { (p)->ufun.uuifun = (intptr_t)(q) | BIT_IND; } while(0)+#define NODE_SIZE sizeof(node)+#define ALLOC_HEAP(n) do { cells = mmalloc(n * sizeof(node)); } while(0)+#define LABEL(n) ((heapoffs_t)((n) - cells))+node *cells; /* All cells */++/*+ * byte arrays+ */+struct bytestring {+ size_t size;+ void *string;+};++/*+ * Arrays are allocated with malloc()/free().+ * During GC they are marked, and all elements in the array are+ * recursively marked.+ * At the end of the the mark phase there is a scan of all+ * arrays, and the unmarked ones are freed.+ */+struct ioarray {+ struct ioarray *next; /* all ioarrays are linked together */+ int permanent; /* this array should never be GC-ed */+ size_t marked; /* marked during GC */+ size_t size; /* number of elements in the array */+ NODEPTR array[1]; /* actual size may be bigger */+};+struct ioarray *array_root = 0; /* root of all allocated arrays, linked by next */++enum fptype {+ FP_FORPTR = 0, /* a regular foreign pointer to unknown memory */+ FP_BSTR, /* a bytestring */+ FP_MPZ, /* a GMP MPZ pointer */+};++/*+ * A Haskell ForeignPtr has a normal pointer, and a finalizer+ * function that is to be called when there are no more references+ * to the ForeignPtr.+ * A complication is that using plusForeignPtr creates a new+ * ForeignPtr that must share the same finalizer.+ * There is one struct forptr for each ForeignPtr. It has pointer+ * to the actual data, and to a struct final which is shared between+ * all ForeignPtrs that have been created with plusForeignPtr.+ * During GC the used bit is set for any references to the forptr.+ * The scan phase will traverse the struct final chain and run+ * the finalizer, and free associated structs.+ */+struct final {+ struct final *next; /* the next finalizer */+ HsFunPtr final; /* function to call to release resource */+ void *arg; /* argument to final when called */+ size_t size; /* size of memory, if known, otherwise NOSIZE */+#define NOSIZE ~0 /* used as the size in payload for actual foreign pointers */+ struct forptr *back; /* back pointer to the first forptr */+ short marked; /* mark bit for GC */+ enum fptype fptype; /* what kind of foreign pointer */+};++/*+ * Foreign pointers are also used to represent bytestrings.+ * The difference between a foreign pointer and a bytestring+ * is that we can serialize the latter.+ * The size field is non-zero only for bytestrings.+ */+struct forptr {+ struct forptr *next; /* the next ForeignPtr that shares the same finalizer */+ struct final *finalizer; /* the finalizer for this ForeignPtr */+ struct bytestring payload; /* the actual pointer to allocated data, and maybe a size */+ // char *desc;+};+struct final *final_root = 0; /* root of all allocated foreign pointers, linked by next */++//REGISTER(counter_t num_reductions,r19);+counter_t num_reductions = 0;+counter_t num_alloc = 0;+counter_t num_gc = 0;+counter_t num_yield = 0;+counter_t num_resched = 0;+counter_t num_thread_reap = 0;+counter_t num_mvar_alloc = 0;+counter_t num_mvar_free = 0;+uintptr_t gc_mark_time = 0;+uintptr_t gc_scan_time = 0;+uintptr_t run_time = 0;++#define MAIN_THREAD 1+uvalue_t num_thread_create = MAIN_THREAD;++#define MAXSTACKDEPTH 0+#if MAXSTACKDEPTH+stackptr_t max_stack_depth = 0;+counter_t max_c_stack = 0;+counter_t cur_c_stack = 0;+#define MAXSTACK if (stack_ptr > max_stack_depth) max_stack_depth = stack_ptr+#else+#define MAXSTACK+#endif++NODEPTR *topnode;+NODEPTR atptr;++REGISTER(NODEPTR *stack,r20);+REGISTER(stackptr_t stack_ptr,r21);+#if STACKOVL+#define PUSH(x) do { if (stack_ptr >= stack_size-2) stackerr(); stack[++stack_ptr] = (x); MAXSTACK; } while(0)+#else /* STACKOVL */+#define PUSH(x) do { stack[++stack_ptr] = (x); MAXSTACK; } while(0)+#endif /* STACKOVL */+#define TOP(n) stack[stack_ptr - (n)]+#define POP(n) stack_ptr -= (n)+#define POPTOP() stack[stack_ptr--]+#define GCCHECK(n) gc_check((n))+#define CLEARSTK() do { stack_ptr = -1; } while(0)+#define GCCHECKSAVE(p, n) do { PUSH(p); GCCHECK(n); (p) = TOP(0); POP(1); } while(0)++heapoffs_t heap_size; /* number of heap cells */+heapoffs_t heap_start; /* first location in heap that needs GC */+REGISTER(stackptr_t stack_size,r22); /* number of stack slots */++counter_t num_marked;+counter_t max_num_marked = 0;+counter_t num_free;+counter_t num_arr_alloc;+counter_t num_arr_free;+counter_t num_fin_alloc;+counter_t num_fin_free;+counter_t num_bs_alloc;+counter_t num_bs_alloc_max;+counter_t num_bs_free;+counter_t num_bs_bytes;+counter_t num_bs_inuse;+counter_t num_bs_inuse_max;++#define BITS_PER_WORD (sizeof(bits_t) * 8)+bits_t *free_map; /* 1 bit per node, 0=free, 1=used */+heapoffs_t free_map_nwords;+heapoffs_t next_scan_index;++int want_gc_red = 0;++NORETURN void+memerr(void)+{+ ERR("Out of memory");+ EXIT(1);+}++NORETURN+void+stackerr(void)+{+ ERR("stack overflow");+ EXIT(1);+}++/***************************************/++#include "bfile.c"++/***************************************/++struct ioarray*+arr_alloc(size_t sz, NODEPTR e)+{+ struct ioarray *arr = mmalloc(sizeof(struct ioarray) + (sz-1) * sizeof(NODEPTR));+ size_t i;++ arr->next = array_root;+ array_root = arr;+ arr->marked = 0;+ arr->permanent = 0;+ arr->size = sz;+ for(i = 0; i < sz; i++)+ arr->array[i] = e;+ //PRINT("arr_alloc(%d, %p) = %p\n", (int)sz, e, arr);+ num_arr_alloc++;+ return arr;+}++struct ioarray*+arr_copy(struct ioarray *oarr)+{+ size_t sz = oarr->size;+ struct ioarray *arr = mmalloc(sizeof(struct ioarray) + (sz-1) * sizeof(NODEPTR));++ arr->next = array_root;+ array_root = arr;+ arr->marked = 0;+ arr->permanent = 0;+ arr->size = sz;+ memcpy(arr->array, oarr->array, sz * sizeof(NODEPTR));+ num_arr_alloc++;+ return arr;+}++/*****************************************************************************/++#if WANT_TICK+struct tick_entry {+ struct bytestring tick_name;+ counter_t tick_count;+} *tick_table = 0;+size_t tick_table_size;+size_t tick_index;++/* Allocate a new tick table entry and return the index. */+size_t+add_tick_table(struct bytestring name)+{+ if (!tick_table) {+ tick_table_size = 100;+ tick_table = mmalloc(tick_table_size * sizeof(struct tick_entry));+ tick_index = 0;+ }+ if (tick_index >= tick_table_size) {+ tick_table_size *= 2;+ tick_table = mrealloc(tick_table, tick_table_size * sizeof(struct tick_entry));+ }+ tick_table[tick_index].tick_name = name;+ tick_table[tick_index].tick_count = 0;+ return tick_index++;+}++/* Called with the tick index. */+static inline void+dotick(value_t i)+{+ tick_table[i].tick_count++;+}++void+dump_tick_table(FILE *f)+{+ if (!tick_table) {+ fprintf(f, "Tick table empty\n");+ return;+ }+ for (size_t i = 0; i < tick_index; i++) {+ counter_t n = tick_table[i].tick_count;+ if (n)+ fprintf(f, "%-60s %10"PRIcounter"\n", (char *)tick_table[i].tick_name.string, n);+ }+}+#endif++enum th_sched { mt_main, mt_resched, mt_raise };+/* The two enums below are known by the Haskell code. Do not change order */+enum th_state { ts_runnable, ts_wait_mvar, ts_wait_time, ts_finished, ts_died };+enum mask_state { mask_unmasked, mask_interruptible, mask_uninterruptible };++/***************** HANDLER *****************/++struct handler {+ jmp_buf hdl_buf; /* env storage */+ struct handler *hdl_old; /* old handler */+ NODEPTR hdl_exn; /* used temporarily to pass the exception value */+} *cur_handler = 0;++/***************** THREAD ******************/++struct mthread {+ enum th_state mt_state; /* thread state */+ enum mask_state mt_mask; /* making state. */+ struct mthread *mt_next; /* all threads linked together */+ struct mthread *mt_queue; /* runq/waitq link */+ counter_t mt_slice; /* reduction steps until yielding */+ counter_t mt_num_slices; /* number of slices so far */+ NODEPTR mt_root; /* root of the graph to reduce */+ struct mvar *mt_exn; /* possible thrown exception */+ NODEPTR mt_mval; /* filled after waiting for take/read */+ int mt_mark; /* marked as accessible */+ uvalue_t mt_id; /* thread number, thread 1 is the main thread */+#if defined(CLOCK_INIT)+ CLOCK_T mt_at; /* time to wake up when in threadDelay */+#endif+};+struct mthread *all_threads = 0; /* all threads */++struct mqueue {+ struct mthread *mq_head;+ struct mthread *mq_tail;+};+struct mqueue runq = { 0, 0 };;+struct mqueue timeq = { 0, 0 };++struct mvar {+ struct mvar *mv_next; /* all mvars linked together */+ NODEPTR mv_data; /* contents of the mvar, or NIL when empty */+ struct mqueue mv_takeput; /* queue of threads waiting for take or put, single wakeup */+ struct mqueue mv_read; /* queue of threads waiting for read, multiple wakeup */+ int mv_mark; /* marked as accessible */+};+struct mvar *all_mvars = 0; /* all mvars */++jmp_buf sched; /* jump here to yield */+counter_t slice = 100000; /* normal time slice;+ * on an M4 Mac this is about 0.3ms */+//REGISTER(counter_t glob_slice,r23);+REGISTER(int glob_slice,r23);++NODEPTR the_exn; /* Used to propagate the exception for longjmp(sched, mt_raise) */++/* The order of these must be kept in sync with Control.Exception.Internal.rtsExn */+enum rts_exn { exn_stackoverflow, exn_heapoverflow, exn_threadkilled, exn_userinterrupt, exn_dividebyzero };++NORETURN void raise_exn(NODEPTR exn);+struct mvar* new_mvar(void);+NODEPTR take_mvar(int try, struct mvar *mv);+NORETURN void die_exn(NODEPTR exn);+void thread_intr(struct mthread *mt);+int put_mvar(int try, struct mvar *mv, NODEPTR v);+NODEPTR mkInt(value_t i);+NODEPTR mkFlt(flt_t d);+NODEPTR mkPtr(void* p);+struct mthread* new_thread(NODEPTR root);+void gc(void);+void async_throwto(struct mthread*, NODEPTR);++#if WANT_STDIO+void pp(FILE*, NODEPTR);+#endif++/* Needed during reduction */+NODEPTR intTable[HIGH_INT - LOW_INT];+NODEPTR combK, combTrue, combUnit, combCons, combPair;+NODEPTR combCC, combZ, combIOBIND, combIORETURN, combIOTHEN, combB, combC, combBB;+NODEPTR combSETMASKINGSTATE;+NODEPTR combLT, combEQ, combGT;+NODEPTR combShowExn, combU, combK2, combK3;+NODEPTR combBININT1, combBININT2, combUNINT1;+NODEPTR combBINDBL1, combBINDBL2, combUNDBL1;+NODEPTR combBINBS1, combBINBS2;+NODEPTR comb_stdin, comb_stdout, comb_stderr;+NODEPTR combJust;+NODEPTR combTHROWTO;+NODEPTR combPairUnit;+NODEPTR combWorld;+NODEPTR combCATCHR;+#define combFalse combK+#define combNothing combK++#if WANT_ARGS+/* This single element array hold a list of the program arguments. */+struct ioarray *argarray;+#endif /* WANT_ARGS */++int verbose = 0;+int gcbell = 0;+++#if WANT_SIGINT+volatile int has_sigint = 0;+void+handle_sigint(int s)+{+ has_sigint = 1;+}+#endif++/* Check that there are k nodes available, if not then GC. */+static INLINE void+gc_check(size_t k)+{+ if (k < num_free)+ return;+#if WANT_STDIO+ if (verbose > 1)+ PRINT("gc_check: %d\n", (int)k);+#endif+ gc();+}++/* Add the thread to the tail of runq */+void+add_q_tail(struct mqueue *q, struct mthread *mt)+{+ if (!q->mq_head) {+ /* q is empty, so mt goes first */+ q->mq_head = mt;+ } else {+ /* link mt to the end of the runq */+ q->mq_tail->mt_queue = mt;+ }+ q->mq_tail = mt; /* mt is now last */+ mt->mt_queue = 0; /* mt is last, so no next */+}++void+add_runq_tail(struct mthread *mt)+{+ mt->mt_state = ts_runnable;+ add_q_tail(&runq, mt);+}++struct mthread*+remove_q_head(struct mqueue *q)+{+ struct mthread *mt = q->mq_head; /* front thread */+ if (!mt)+ return 0;+ q->mq_head = mt->mt_queue; /* skip to next thread */+ if (!q->mq_head)+ q->mq_tail = 0; /* q is now empty */+ return mt;+}++int+find_and_unlink(struct mqueue *mq, struct mthread *mt)+{+ struct mthread **mtp;+ + for(mtp = &mq->mq_head; *mtp && *mtp != mt; mtp = &(*mtp)->mt_queue)+ ;+ if (!*mtp)+ return 0; /* not found */+ *mtp = mt->mt_queue; /* unlink */+ if (*mtp)+ return 1; /* the unlinked thread was not the tail */+ if (mq->mq_head) {+ for (mt = mq->mq_head; mt->mt_queue; mt = mt->mt_queue)+ ; /* find the last element */+ mq->mq_tail = mt;+ } else {+ /* q is empty */+ mq->mq_tail = 0;+ }+ return 1;+}++/* This is a yucky hack */+int doing_rnf = 0; /* REMOVE */+#if THREAD_DEBUG+const int thread_trace = 0;+#endif /* THREAD_DEBUG */++/* clean up temporary globals to prepare for rescheduling */+void+cleanup(struct mthread *mt, enum th_state ts)+{+ /* We are going to reschedule, so clean up thread state:+ * stack pointer+ * error handlers+ */+#if THREAD_DEBUG+ if (thread_trace)+ printf("cleanup: %d state=%d\n", (int)mt->mt_id, ts);+#endif /* THREAD_DEBUG */+ mt->mt_slice = stack_ptr; /* we need stack_ptr reductions to just reach where we left off */+ mt->mt_state = ts;+ CLEARSTK(); /* reset stack */+ doing_rnf = 0;+ /* free all error handlers */+ for (struct handler *h = cur_handler; h; ) {+ struct handler *n = h;+ h = h->hdl_old;+ free(n);+ }+ cur_handler = 0;+}++/* reschedule, does not return */+NORETURN void+resched(struct mthread *mt, enum th_state ts)+{+ cleanup(mt, ts);+ longjmp(sched, mt_resched);+}++#if THREAD_DEBUG+void+dump_q(const char *s, struct mqueue q)+{+ printf("%s=[", s);+ for(struct mthread *mt = q.mq_head; mt; mt = mt->mt_queue) {+ printf("%d ", (int)mt->mt_id);+ }+ printf("]\n");+}+#endif /* THREAD_DEBUG */++/* Check if its time to wake up some threads waiting for a time. */+void+check_timeq(void)+{+#if defined(CLOCK_INIT)+ CLOCK_T now = CLOCK_GET();+ while (timeq.mq_head && timeq.mq_head->mt_at <= now) {+ struct mthread *mt = remove_q_head(&timeq);+ add_runq_tail(mt);+ mt->mt_at = -1; /* indicate that the delay has expired */+#if THREAD_DEBUG+ if (thread_trace)+ printf("check_timeq: %d done\n", (int)mt->mt_id);+#endif /* THREAD_DEBUG */+ }+#endif+}++void+throwto(struct mthread *mt, NODEPTR exn)+{+#if THREAD_DEBUG+ if (thread_trace) {+ printf("throwto: id=%d\n", (int)mt->mt_id);+ }+#endif /* THREAD_DEBUG */+ thread_intr(mt);+ if (mt->mt_state != ts_died && mt->mt_state != ts_finished) {+#if THREAD_DEBUG+ if (thread_trace) {+ printf("throwto: id=%d put_mvar exn\n", (int)mt->mt_id);+ }+#endif /* THREAD_DEBUG */+ (void)put_mvar(0, mt->mt_exn, exn); /* never returns if it blocks */+ }+}++void+check_thrown(void)+{+ if (runq.mq_head->mt_exn->mv_data == NIL)+ return; /* no thrown exception */+ if (runq.mq_head->mt_mask != mask_unmasked)+ return; /* interrupts are masked, so don't throw */+ /* the current thread has an async exception */+#if THREAD_DEBUG+ if (thread_trace)+ printf("check_thrown: exn for %d\n", (int)runq.mq_head->mt_id);+#endif /* THREAD_DEBUG */+ NODEPTR exn = take_mvar(0, runq.mq_head->mt_exn); /* get the exception */+ raise_exn(exn);+}++void+check_sigint(void)+{+#if WANT_SIGINT+ if (has_sigint) {+ /* We have a signal, so send an async exception to the main thread */+ has_sigint = 0;+ for(struct mthread *mt= all_threads; mt; mt = mt->mt_next) {+ if (mt->mt_id == MAIN_THREAD) {+#if THREAD_DEBUG+ if (thread_trace)+ printf("sending signal to main\n");+#endif /* THREAD_DEBUG */+ async_throwto(mt, mkInt(exn_userinterrupt));+ break;+ }+ }+ }+#endif+}++/* Used to detect calls to error while we are already in a call to error. */+int in_raise = 0;++/* Inlining makes very little difference */+/*static INLINE*/ void+yield(void)+{+ if (in_raise) /* don't context switch when we are dying */+ return;+ //printf("yield stk=%d\n", (int)stack_ptr);+ //pp(stdout, runq.mt_root);+ COUNT(num_yield);+ runq.mq_head->mt_num_slices++;+ // XXX should check mt_thrown here+ + if (timeq.mq_head)+ check_timeq();+ check_thrown();+ check_sigint();+ // printf("yield %p %d\n", runq, (int)stack_ptr);+ /* if there is nothing after in the runq then there is no need to reschedule */+ if (!runq.mq_head->mt_queue) {+#if THREAD_DEBUG+ if (thread_trace) {+ printf("yield: %d no other threads\n", (int)runq.mq_head->mt_id);+ dump_q("runq", runq);+ }+#endif /* THREAD_DEBUG */+ glob_slice = slice;+ num_reductions += glob_slice-1;+ return;+ }++ /* Unlink from runq */+ struct mthread *mt = remove_q_head(&runq);+ /* link into back of runq */+ add_runq_tail(mt);+#if THREAD_DEBUG+ if (thread_trace) {+ printf("yield: resched %d\n", (int)mt->mt_id);+ dump_q("runq", runq);+ }+#endif /* THREAD_DEBUG */+ resched(mt, ts_runnable);+}++struct mthread*+new_thread(NODEPTR root)+{+ struct mthread *mt = mmalloc(sizeof(struct mthread));++#if THREAD_DEBUG+ if (thread_trace) {+ printf("new_thread: mt=%p root=%p\n", mt, root);+ }+#endif /* THREAD_DEBUG */+ mt->mt_mask = mask_unmasked;+ mt->mt_root = root;+ mt->mt_exn = new_mvar();+ mt->mt_mval = NIL;+ mt->mt_slice = 0;+ mt->mt_mark = 0;+ mt->mt_num_slices = 0;+ mt->mt_id = num_thread_create++;+#if defined(CLOCK_INIT)+ mt->mt_at = 0; /* delay has not expired */+#endif++ /* add to all_threads */+ mt->mt_next = all_threads;+ all_threads = mt;++ /* add to tail of runq */+ add_runq_tail(mt); /* sets runnable */+#if THREAD_DEBUG+ if (thread_trace) {+ printf("new_thread: add %d to runq tail\n", (int)mt->mt_id);+ dump_q("runq", runq);+ }+#endif /* THREAD_DEBUG */+ return mt;+}++struct mvar*+new_mvar(void)+{+ COUNT(num_mvar_alloc);+ struct mvar *mv = mmalloc(sizeof(struct mvar));++ mv->mv_data = NIL;+ mv->mv_takeput.mq_head = 0;+ mv->mv_takeput.mq_tail = 0;+ mv->mv_read.mq_head = 0;+ mv->mv_read.mq_tail = 0;++ /* add to all_mvars */+ mv->mv_next = all_mvars;+ mv->mv_mark = 0;+ all_mvars = mv;+ +#if THREAD_DEBUG+ if (thread_trace)+ printf("new_mvar: mvar=%p\n", mv);+#endif /* THREAD_DEBUG */+ return mv;+}++NODEPTR+take_mvar(int try, struct mvar *mv)+{+#if THREAD_DEBUG+ if (thread_trace) {+ printf("take_mvar: mvar=%p\n", mv);+ dump_q("takeput", mv->mv_takeput);+ }+#endif /* THREAD_DEBUG */+ NODEPTR n;+ if ((n = runq.mq_head->mt_mval) != NIL) {+#if THREAD_DEBUG+ if (thread_trace)+ printf("take_mvar: mvar=%p got data %d\n", mv, (int)runq.mq_head->mt_id);+#endif /* THREAD_DEBUG */+ /* We have after waking up */+ runq.mq_head->mt_mval = NIL;+ return n; /* returned the stashed data */+ }+ if ((n = mv->mv_data) != NIL) {+#if THREAD_DEBUG+ if (thread_trace)+ printf("take_mvar: mvar=%p full\n", mv);+#endif /* THREAD_DEBUG */+ /* mvar is full */+ mv->mv_data = NIL; /* now empty */+ /* move all threads waiting to put to the runq */+ for (struct mthread *mt = mv->mv_takeput.mq_head; mt; ) {+#if THREAD_DEBUG+ if (thread_trace) {+ printf("take_mvar: mvar=%p wake %d\n", mv, (int)mt->mt_id);+ }+#endif /* THREAD_DEBUG */+ struct mthread *nt = mt->mt_queue;+ add_runq_tail(mt);+#if THREAD_DEBUG+ if (thread_trace) {+ dump_q("runq", runq);+ }+#endif /* THREAD_DEBUG */+ mt = nt;+ }+#if THREAD_DEBUG+ if (thread_trace) {+ printf("take_mvar: mvar=%p return %p\n", mv, n);+ }+#endif /* THREAD_DEBUG */+ return n; /* return the data */+ } else {+#if THREAD_DEBUG+ if (thread_trace)+ printf("take_mvar: mvar=%p empty\n", mv);+#endif /* THREAD_DEBUG */+ /* mvar is empty */+ if (try)+ return NIL;+ struct mthread *mt = remove_q_head(&runq);+ add_q_tail(&mv->mv_takeput, mt);+#if THREAD_DEBUG+ if (thread_trace) {+ printf("take_mvar: mvar=%p suspend %d\n", mv, (int)mt->mt_id);+ dump_q("runq", runq);+ dump_q("takeput", mv->mv_takeput);+ }+#endif /* THREAD_DEBUG */+ /* Unlink from runq */+ resched(mt, ts_wait_mvar); /* never returns */+ }+}++NODEPTR+read_mvar(int try, struct mvar *mv)+{+ NODEPTR n;+ if ((n = runq.mq_head->mt_mval) != NIL) {+ /* We have after waking up */+ runq.mq_head->mt_mval = NIL;+ return n; /* returned the stashed data */+ }+ if ((n = mv->mv_data) != NIL) {+ /* mvar is full */+ return n; /* return the data */+ } else {+ /* mvar is empty */+ if (try)+ return NIL;+#if THREAD_DEBUG+ if (thread_trace) {+ printf("read_mvar: suspend %d\n", (int)runq.mq_head->mt_id);+ dump_q("runq", runq);+ }+#endif /* THREAD_DEBUG */+ struct mthread *mt = remove_q_head(&runq);+ add_q_tail(&mv->mv_read, mt);+ resched(mt, ts_wait_mvar); /* never returns */+ }+}++int+put_mvar(int try, struct mvar *mv, NODEPTR v)+{+#if THREAD_DEBUG+ if (thread_trace) {+ printf("put_mvar: mvar=%p\n", mv);+ dump_q("takeput", mv->mv_takeput);+ dump_q("read", mv->mv_read);+ }+#endif /* THREAD_DEBUG */+ if (mv->mv_data != NIL) {+#if THREAD_DEBUG+ if (thread_trace)+ printf("put_mvar: mvar=%p full\n", mv);+#endif /* THREAD_DEBUG */+ /* mvar is full */+ if (try)+ return 0;+ struct mthread *mt = remove_q_head(&runq);+ add_q_tail(&mv->mv_takeput, mt); /* put on mvar queue */+#if THREAD_DEBUG+ if (thread_trace) {+ printf("put_mvar: suspend %d\n", (int)mt->mt_id);+ dump_q("runq", runq);+ dump_q("takeput", mv->mv_takeput);+ }+#endif /* THREAD_DEBUG */+ resched(mt, ts_wait_mvar); /* never returns */+ } else {+#if THREAD_DEBUG+ if (thread_trace)+ printf("put_mvar: mvar=%p empty\n", mv);+#endif /* THREAD_DEBUG */+ /* mvar is empty */+ if (mv->mv_takeput.mq_head || mv->mv_read.mq_head) {+ /* one or more threads are waiting */+ struct mthread *mt;+ if (mv->mv_takeput.mq_head) {+ /* wake up one 'take' */+ mt = remove_q_head(&mv->mv_takeput);+#if THREAD_DEBUG+ if (thread_trace)+ printf("put_mvar: wake-1 %d\n", (int)mt->mt_id);+#endif /* THREAD_DEBUG */+ add_runq_tail(mt); /* and schedule for execution later */+ mt->mt_mval = v;+ }+ for (mt = mv->mv_read.mq_head; mt; ) { /* XXX use q primitives */+#if THREAD_DEBUG+ if (thread_trace)+ printf("put_mvar: wake-N %d\n", (int)mt->mt_id);+#endif /* THREAD_DEBUG */+ mt->mt_mval = v; /* value for restarted read */+ mt = mt->mt_queue; /* next waiter */+ add_runq_tail(mt); /* and schedule for execution later */+ }+#if THREAD_DEBUG+ if (thread_trace)+ dump_q("runq", runq);+#endif /* THREAD_DEBUG */+ /* return to caller */+ } else {+#if THREAD_DEBUG+ if (thread_trace) {+ printf("put_mvar: mvar=%p no waiters\n", mv);+ }+#endif /* THREAD_DEBUG */+ /* no threads waiting, so store the value */+ mv->mv_data = v;+ /* return to caller */+ }+ }+ return 1;+}++NORETURN void+thread_delay(uvalue_t usecs)+{+#if !defined(CLOCK_INIT)+ ERR("thread_delay: no clock");+#else+ /* XXX should check if there is already a throw exn */+ struct mthread *mt = remove_q_head(&runq);+ mt->mt_at = CLOCK_GET() + usecs; /* wakeup time */+#if THREAD_DEBUG+ if (thread_trace)+ printf("thread_delay: id=%d usecs=%ld\n", (int)mt->mt_id, (long)usecs);+#endif /* THREAD_DEBUG */+ /* insert in delayq which is kept sorted in time order */+ struct mthread **tq;+ for (tq = &timeq.mq_head; *tq; tq = &(*tq)->mt_queue) {+ if (mt->mt_at <= (*tq)->mt_at)+ break;+ }+ mt->mt_queue = *tq; /* forward link */+ *tq = mt; /* and put mt in place */+ if (!mt->mt_queue) /* no forward link */+ timeq.mq_tail = mt;+ resched(mt, ts_wait_time);+#endif +}++/* Pause execution if something might still happen */+void+pause_exec(void)+{+#if defined(CLOCK_INIT)+ if (timeq.mq_head) {+ struct mthread *mt;+ while (!runq.mq_head && (mt = timeq.mq_head)) {+ /* We are waiting for a delay to expire, so sleep a while */+ CLOCK_T dly = mt->mt_at - CLOCK_GET();+ if (dly > 0) {+ /* usleep() can be unreliable, so sleep shorter than the delay */+ dly /= 4;+ if (dly < 50) dly = 50;+ CLOCK_SLEEP((useconds_t)dly);+ }+ check_timeq();+ }+ } else {+ ERR("deadlock"); /* XXX throw async to main thread */+ }+#else /* CLOCK_INIT */+ ERR("no clock");+#endif /* CLOCK_INIT */+}++/* Interrupt a sleeping thread in a throwTo/threadDelay */+void+thread_intr(struct mthread *mt)+{+#if THREAD_DEBUG+ if (thread_trace)+ printf("thread_intr: id=%d state=%d\n", (int)mt->mt_id, mt->mt_state);+#endif /* THREAD_DEBUG */+ switch(mt->mt_state) {+ case ts_runnable:+ break; /* already on runq */+ case ts_wait_mvar:+ if (mt->mt_mask == mask_uninterruptible) /* uninterruptible */+ break;+ /* we don't know which mvar we are waiting on, so look at all of them */+ /* XXX should add a pointer in mthread to the mvar */+ for (struct mvar *mv = all_mvars; mv; mv = mv->mv_next) {+ if (find_and_unlink(&mv->mv_takeput, mt))+ goto found;+ if (find_and_unlink(&mv->mv_read, mt))+ goto found;+ }+ ERR("thread_intr: mvar");+ found:+#if defined(CLOCK_INIT)+ mt->mt_at = -1; /* don't wait again */+#endif+ add_runq_tail(mt);+ break;+ case ts_wait_time:+#if THREAD_DEBUG+ if (thread_trace) {+ printf("thread_intr: ts_wait_time mask=%d\n", (int)mt->mt_mask);+ }+#endif /* THREAD_DEBUG */+ if (mt->mt_mask == mask_uninterruptible) /* uninterruptible */+ break;+ /* find thread in timeq */+ if (!find_and_unlink(&timeq, mt))+ ERR("thread_intr: timeq");+ /* XXX should adjust mq_tail */+ add_runq_tail(mt);+ break;+ case ts_finished:+ case ts_died:+ (void)take_mvar(0, mt->mt_exn); /* ignore exception */+ break;+ default:+ ERR("thread_intr");+ }+#if THREAD_DEBUG+ if (thread_trace) {+ printf("thread_intr: done\n");+ dump_q("runq", runq);+ }+#endif /* THREAD_DEBUG */+}++NORETURN void+raise_exn(NODEPTR exn)+{+ if (cur_handler) {+ /* Pass the exception to the handler */+ cur_handler->hdl_exn = exn;+ longjmp(cur_handler->hdl_buf, 1);+ } else {+ /* No exception handler, jump to the scheduler */+ the_exn = exn;+ longjmp(sched, mt_raise);+ }+}++NORETURN void+raise_rts(enum rts_exn exn) {+ raise_exn(mkInt(exn));+}++/***************** GC ******************/++/* Set FREE bit to 0 */+static INLINE void mark_used(NODEPTR n)+{+ heapoffs_t i = LABEL(n);+ if (i < heap_start)+ return;+#if SANITY+ if (i >= free_map_nwords * BITS_PER_WORD) ERR("mark_used");+#endif+ free_map[i / BITS_PER_WORD] &= ~(1ULL << (i % BITS_PER_WORD));+}++/* Set FREE bit to 1, used to undo marking in GC */+static INLINE void mark_unused(NODEPTR n)+{+ heapoffs_t i = LABEL(n);+#if SANITY+ if (i < heap_start)+ ERR("Unmarking invalid heap address.");+ if (i >= free_map_nwords * BITS_PER_WORD) ERR("mark_used");+#endif+ free_map[i / BITS_PER_WORD] |= 1ULL << (i % BITS_PER_WORD);+}++/* Test if FREE bit is 0 */+static INLINE int is_marked_used(NODEPTR n)+{+ heapoffs_t i = LABEL(n);+ if (i < heap_start)+ return 1;+#if SANITY+ if (i >= free_map_nwords * BITS_PER_WORD)+ ERR("is_marked_used");+#endif+ return (free_map[i / BITS_PER_WORD] & (1ULL << (i % BITS_PER_WORD))) == 0;+}++static INLINE void mark_all_free(void)+{+ memset(free_map, ~0, free_map_nwords * sizeof(bits_t));+ next_scan_index = heap_start;+}++static INLINE NODEPTR+alloc_node(enum node_tag t)+{+ heapoffs_t i = next_scan_index / BITS_PER_WORD;+ int k; /* will contain bit pos + 1 */+ heapoffs_t pos;+ NODEPTR n;+ heapoffs_t word;++ /* This can happen if we run out of memory when parsing. */+ if (num_free <= 0)+ ERR("alloc_node");++ for(;;) {+ word = free_map[i];+ if (word)+ break;+ i++;+#if SANITY+ if (i >= free_map_nwords) {+#if 0+ fprintf(stderr, "wordsize=%u, num_free=%u next_scan_index=%u i=%u free_map_nwords=%u\n", (uint)BITS_PER_WORD,+ (uint)num_free, (uint)next_scan_index, (uint)i, (uint)free_map_nwords);+#endif+ ERR("alloc_node: free_map");+ }+#endif+ }+ k = FFS(word);+ pos = i * BITS_PER_WORD + k - 1; /* first free node */+ n = HEAPREF(pos);+ // mark_used(n); // equivalent to:+ free_map[i] = word & (word-1);+ next_scan_index = pos;++ SETTAG(n, t);+ COUNT(num_alloc);+ num_free--;+ return n;+}++static INLINE NODEPTR+new_ap(NODEPTR f, NODEPTR a)+{+ NODEPTR n = alloc_node(T_AP);+ FUN(n) = f;+ ARG(n) = a;+ return n;+}++NODEPTR evali(NODEPTR n);++void+start_exec(NODEPTR root)+{+ struct mthread *mt;++ new_thread(new_ap(root, combWorld)); /* main thread */++ switch(setjmp(sched)) {+ case mt_main:+ break;+ case mt_resched:+ COUNT(num_resched);+ break;+ case mt_raise:+ /* We have an uncaught exception.+ * If it's the main thread, this kills the program.+ * Otherwise, it just kills the thread.+ */+ mt = remove_q_head(&runq);+ if (mt->mt_id == MAIN_THREAD) {+ die_exn(the_exn);+ } else {+#if THREAD_DEBUG+ if (thread_trace) {+ printf("start_exec: mt=%p id=%d died from exn\n", mt, (int)mt->mt_id);+ }+#endif /* THREAD_DEBUG */+ mt->mt_state = ts_died;+ mt->mt_root = NIL;+ }+ }+#if THREAD_DEBUG+ if (thread_trace) {+ printf("start_exec:\n");+ dump_q("runq", runq);+ }+#endif /* THREAD_DEBUG */+ for(;;) {+ if (!runq.mq_head)+ pause_exec();+ mt = runq.mq_head; /* front thread */+ if (!mt) /* this should never happen */+ ERR("no threads");++ glob_slice = mt->mt_slice + slice;+#if THREAD_DEBUG+ if (thread_trace)+ printf("start_exec: start %d, slice=%d\n", (int)mt->mt_id, (int)glob_slice);+#endif /* THREAD_DEBUG */+ num_reductions += glob_slice-1;+ (void)evali(mt->mt_root); /* run it */+ num_reductions -= glob_slice;+ /* when evali() returns the thread is done */+ (void)remove_q_head(&runq); /* remove front thread */++#if THREAD_DEBUG+ if (thread_trace) {+ printf("start_exec: mt=%p id=%d finished\n", mt, (int)mt->mt_id);+ }+#endif /* THREAD_DEBUG */+ mt->mt_state = ts_finished;+ mt->mt_root = NIL;+ /* XXX mt_mval, mt_thrown */++ if (mt->mt_id == MAIN_THREAD)+ return; /* when the main thread dies it's all over */+ }+}++/* One node of each kind for primitives, these are never GCd. */+/* We use linear search in this, because almost all lookups+ * are among the combinators.+ */+struct {+ const char *name;+ const enum node_tag tag;+ const enum node_tag flipped; /* What should (C op) reduce to? defaults to T_FREE */+ NODEPTR node;+} primops[] = {+ /* combinators */+ /* sorted by frequency in a typical program */+ { "B", T_B },+ { "O", T_O },+ { "K", T_K, T_A },+ { "C'", T_CC },+ { "C", T_C },+ { "A", T_A, T_K },+ { "S'", T_SS },+ { "P", T_P },+ { "R", T_R },+ { "I", T_I },+ { "S", T_S },+ { "U", T_U },+ { "Y", T_Y },+ { "B'", T_BB },+ { "Z", T_Z },+ /* { "J", T_J },*/+ { "K2", T_K2 },+ { "K3", T_K3 },+ { "K4", T_K4 },+ { "C'B", T_CCB },+/* primops */+ { "+", T_ADD, T_ADD },+ { "-", T_SUB, T_SUBR },+ { "*", T_MUL, T_MUL },+ { "quot", T_QUOT },+ { "rem", T_REM },+ { "uquot", T_UQUOT },+ { "urem", T_UREM },+ { "subtract", T_SUBR, T_SUB },+ { "neg", T_NEG },+ { "and", T_AND, T_AND },+ { "or", T_OR, T_OR },+ { "xor", T_XOR, T_XOR },+ { "inv", T_INV },+ { "shl", T_SHL },+ { "shr", T_SHR },+ { "ashr", T_ASHR },+ { "popcount", T_POPCOUNT },+ { "clz", T_CLZ },+ { "ctz", T_CTZ },+#if WANT_FLOAT+ { "f+" , T_FADD, T_FADD},+ { "f-" , T_FSUB },+ { "f*" , T_FMUL, T_FMUL},+ { "f/", T_FDIV},+ { "fneg", T_FNEG},+ { "itof", T_ITOF},+ { "f==", T_FEQ, T_FEQ},+ { "f/=", T_FNE, T_FNE},+ { "f<", T_FLT, T_FGT},+ { "f<=", T_FLE, T_FGE},+ { "f>", T_FGT, T_FLT},+ { "f>=", T_FGE, T_FLE},+ { "fshow", T_FSHOW},+ { "fread", T_FREAD},+#endif /* WANT_FLOAT */++ { "bs++", T_BSAPPEND },+ { "bs++.", T_BSAPPENDDOT },+ { "bs==", T_BSEQ, T_BSEQ },+ { "bs/=", T_BSNE, T_BSNE },+ { "bs<", T_BSLT, T_BSGT },+ { "bs<=", T_BSLE, T_BSGE },+ { "bs>", T_BSGT, T_BSLT },+ { "bs>=", T_BSGE, T_BSLE },+ { "bscmp", T_BSCMP },+ { "bspack", T_BSPACK },+ { "bsunpack", T_BSUNPACK },+ { "bsreplicate", T_BSREPLICATE },+ { "bslength", T_BSLENGTH },+ { "bssubstr", T_BSSUBSTR },+ { "bsindex", T_BSINDEX },++ { "ord", T_I },+ { "chr", T_I },+ { "==", T_EQ, T_EQ },+ { "/=", T_NE, T_NE },+ { "<", T_LT, T_GT },+ { "u<", T_ULT, T_UGT },+ { "u<=", T_ULE, T_UGE },+ { "u>", T_UGT, T_ULT },+ { "u>=", T_UGE, T_ULE },+ { "<=", T_LE, T_GE },+ { ">", T_GT, T_LT },+ { ">=", T_GE, T_LE },+ { "fp+", T_FPADD },+ { "fp2p", T_FP2P },+ { "fpnew", T_FPNEW },+ { "fpfin", T_FPFIN },+ // { "fpstr", T_FPSTR },+ { "fp2bs", T_FP2BS },+ { "bs2fp", T_BS2FP },+ { "seq", T_SEQ },+ { "equal", T_EQUAL, T_EQUAL },+ { "sequal", T_EQUAL, T_EQUAL },+ { "compare", T_COMPARE },+ { "scmp", T_COMPARE },+ { "icmp", T_ICMP },+ { "ucmp", T_UCMP },+ { "rnf", T_RNF },+ { "fromUTF8", T_BSFROMUTF8 },+ { "toUTF8", T_BSTOUTF8 },+ { "headUTF8", T_BSHEADUTF8 },+ { "tailUTF8", T_BSTAILUTF8 },+ /* IO primops */+ { "IO.>>=", T_IO_BIND },+ { "IO.>>", T_IO_THEN },+ { "IO.return", T_IO_RETURN },+ { "IO.serialize", T_IO_SERIALIZE },+ { "IO.print", T_IO_PRINT },+ { "IO.deserialize", T_IO_DESERIALIZE },+ { "IO.stdin", T_IO_STDIN },+ { "IO.stdout", T_IO_STDOUT },+ { "IO.stderr", T_IO_STDERR },+ { "IO.getArgRef", T_IO_GETARGREF },+ { "IO.performIO", T_IO_PERFORMIO },+ { "IO.gc", T_IO_GC },+ { "IO.pp", T_IO_PP },+ { "raise", T_RAISE },+ { "catch", T_CATCH },+ { "catchr", T_CATCHR },+ { "A.alloc", T_ARR_ALLOC },+ { "A.copy", T_ARR_COPY },+ { "A.size", T_ARR_SIZE },+ { "A.read", T_ARR_READ },+ { "A.write", T_ARR_WRITE },+ { "A.==", T_ARR_EQ },+ { "dynsym", T_DYNSYM },+ { "IO.fork", T_IO_FORK },+ { "IO.thid", T_IO_THID },+ { "thnum", T_THNUM },+ { "IO.throwto", T_IO_THROWTO },+ { "IO.yield", T_IO_YIELD },+ { "IO.newmvar", T_IO_NEWMVAR },+ { "IO.takemvar", T_IO_TAKEMVAR },+ { "IO.putmvar", T_IO_PUTMVAR },+ { "IO.readmvar", T_IO_READMVAR },+ { "IO.trytakemvar", T_IO_TRYTAKEMVAR },+ { "IO.tryputmvar", T_IO_TRYPUTMVAR },+ { "IO.tryreadmvar", T_IO_TRYREADMVAR },+ { "IO.threaddelay", T_IO_THREADDELAY },+ { "IO.threadstatus", T_IO_THREADSTATUS },+ { "IO.getmaskingstate", T_IO_GETMASKINGSTATE },+ { "IO.setmaskingstate", T_IO_SETMASKINGSTATE },+ { "newCAStringLen", T_NEWCASTRINGLEN },+ { "packCString", T_PACKCSTRING },+ { "packCStringLen", T_PACKCSTRINGLEN },+ { "toPtr", T_TOPTR },+ { "toInt", T_TOINT },+ { "toDbl", T_TODBL },+ { "toFunPtr", T_TOFUNPTR },+ { "IO.ccall", T_IO_CCALL },+ { "isint", T_ISINT },+ { "binint2", T_BININT2 },+ { "binint1", T_BININT1 },+ { "bindbl2", T_BINDBL2 },+ { "bindbl1", T_BINDBL1 },+ { "binbs2", T_BINBS2 },+ { "binbs1", T_BINBS1 },+ { "unint1", T_UNINT1 },+ { "undbl1", T_UNDBL1 },+};++#if GCRED+enum node_tag flip_ops[T_LAST_TAG+1];+#endif++#if WANT_STDIO+/* Create a dummy foreign pointer for the standard stdio handles. */+/* These handles are never gc():d. */+void+mk_std(NODEPTR n, FILE *f)+{+ struct final *fin = mcalloc(1, sizeof(struct final));+ struct forptr *fp = mcalloc(1, sizeof(struct forptr));+ BFILE *bf = add_utf8(add_FILE(f));+ SETTAG(n, T_FORPTR);+ FORPTR(n) = fp;+ fin->arg = bf;+ fin->back = fp;+ fp->payload.string = bf;+ fp->finalizer = fin;+}+#endif++void+init_nodes(void)+{+ enum node_tag t;+ size_t j;+ NODEPTR n;++ ALLOC_HEAP(heap_size);+ free_map_nwords = (heap_size + BITS_PER_WORD - 1) / BITS_PER_WORD; /* bytes needed for free map */+ free_map = mmalloc(free_map_nwords * sizeof(bits_t));++ /* Set up permanent nodes */+ heap_start = 0;+ for(t = T_FREE; t <= T_LAST_TAG; t++) {+ NODEPTR n = HEAPREF(heap_start++);+ SETTAG(n, t);+ switch (t) {+ case T_K: combK = n; break;+ case T_A: combTrue = n; break;+ case T_I: combUnit = n; break;+ case T_O: combCons = n; break;+ case T_P: combPair = n; break;+ case T_CC: combCC = n; break;+ case T_BB: combBB = n; break;+ case T_B: combB = n; break;+ case T_C: combC = n; break;+ case T_Z: combZ = n; break;+ case T_U: combU = n; break;+ case T_K2: combK2 = n; break;+ case T_K3: combK3 = n; break;+ case T_IO_BIND: combIOBIND = n; break;+ case T_IO_THEN: combIOTHEN = n; break;+ case T_IO_RETURN: combIORETURN = n; break;+ case T_IO_SETMASKINGSTATE: combSETMASKINGSTATE = n; break;+ case T_BININT1: combBININT1 = n; break;+ case T_BININT2: combBININT2 = n; break;+ case T_UNINT1: combUNINT1 = n; break;+ case T_BINDBL1: combBINDBL1 = n; break;+ case T_BINDBL2: combBINDBL2 = n; break;+ case T_UNDBL1: combUNDBL1 = n; break;+ case T_BINBS1: combBINBS1 = n; break;+ case T_BINBS2: combBINBS2 = n; break;+ case T_IO_THROWTO: combTHROWTO = n; break;+ case T_CATCHR: combCATCHR = n; break;+#if WANT_STDIO+ case T_IO_STDIN: comb_stdin = n; mk_std(n, stdin); break;+ case T_IO_STDOUT: comb_stdout = n; mk_std(n, stdout); break;+ case T_IO_STDERR: comb_stderr = n; mk_std(n, stderr); break;+#endif+ default:+ break;+ }+ for (j = sizeof primops / sizeof primops[0]; j-- > 0; ) {+ if (primops[j].tag == t) {+ primops[j].node = n;+ }+ tag_names[primops[j].tag] = primops[j].name;+ }+ }++#if GCRED+ for (j = 0; j < sizeof primops / sizeof primops[0]; j++) {+ flip_ops[primops[j].tag] = primops[j].flipped;+ }+#endif++ /* The representation of the constructors of+ * data Ordering = LT | EQ | GT+ * do not have single constructors.+ * But we can make compound one, since they are irreducible.+ */+#define NEWAP(c, f, a) do { n = HEAPREF(heap_start++); SETTAG(n, T_AP); FUN(n) = (f); ARG(n) = (a); (c) = n;} while(0)+#define MKINT(c, i) do { n = HEAPREF(heap_start++); SETTAG(n, T_INT); SETVALUE(n, i); (c) = n; } while(0)+ NEWAP(combLT, combZ, combFalse); /* Z B */+ NEWAP(combEQ, combFalse, combFalse); /* K K */+ NEWAP(combGT, combFalse, combTrue); /* K A */+ {+ /* The displaySomeException compiles to (U (U (K2 A))) */+ NODEPTR x;+ NEWAP(x, combK2, combTrue); /* (K2 A) */+ NEWAP(x, combU, x); /* (U (K2 A)) */+ NEWAP(combShowExn, combU, x); /* (U (U (K2 A))) */+ }+ NEWAP(combJust, combZ, combU); /* (Z U) */+ MKINT(combWorld, 99999);+ NEWAP(combPairUnit, combPair, combUnit);+#undef NEWAP++#if INTTABLE+ /* Allocate permanent Int nodes */+ for (int i = LOW_INT; i < HIGH_INT; i++) {+ NODEPTR n = HEAPREF(heap_start++);+ intTable[i - LOW_INT] = n;+ SETTAG(n, T_INT);+ SETVALUE(n, i);+ }+#endif++ /* Round up heap_start to the next bitword boundary to avoid the permanent nodes. */+ heap_start = (heap_start + BITS_PER_WORD - 1) / BITS_PER_WORD * BITS_PER_WORD;++ mark_all_free();++ num_free = heap_size - heap_start;+}++#if GCRED+counter_t red_a, red_k, red_i, red_int, red_flip, red_bi, red_bxi, red_ccbi, red_cc, red_cci, red_ccbbcp;+#endif+counter_t red_bb, red_k4, red_k3, red_k2, red_ccb, red_z, red_r;++//counter_t mark_depth;+//counter_t max_mark_depth = 0;++void mark(NODEPTR *np);+void mark_mvar(struct mvar *mv);++/* Throwing, e.g., a UserInterrupt exception to the main thread+ * it can happen from any thread (the one that happens to poll).+ * Throwing an exception can block, so we can't throw it from+ * the current thread. Instead, we spawn a new thread, whose+ * only job it is to throw the exception.+ */+void+async_throwto(struct mthread *mt, NODEPTR exn)+{+ GCCHECK(4);+ NODEPTR thid = alloc_node(T_THID);+ THR(thid) = mt;+ NODEPTR root = new_ap(new_ap(new_ap(combTHROWTO, thid), exn), combWorld);+ (void)new_thread(root); /* spawn and put on runq */+}++void+mark_thread(struct mthread *mt)+{+ if (mt->mt_mark)+ return; /* already marked */+ mt->mt_mark = 1;+ if (mt->mt_root != NIL)+ mark(&mt->mt_root);+ mark_mvar(mt->mt_exn); + if (mt->mt_mval != NIL)+ mark(&mt->mt_mval);+}++void+mark_mvar(struct mvar *mv)+{+ if (mv->mv_mark)+ return;+ mv->mv_mark = 1;+ if (mv->mv_data != NIL)+ mark(&mv->mv_data);+ for (struct mthread *mt = mv->mv_takeput.mq_head; mt; mt = mt->mt_next)+ mark_thread(mt);+ for (struct mthread *mt = mv->mv_read.mq_head; mt; mt = mt->mt_next)+ mark_thread(mt);+}+ +/* Follow indirections */+static INLINE NODEPTR+indir(NODEPTR *np)+{+ NODEPTR n = *np;+ while (GETTAG(n) == T_IND)+ n = GETINDIR(n);+ *np = n;+ return n;+}++/* Mark all used nodes reachable from *np, updating *np. */+void+mark(NODEPTR *np)+{+ stackptr_t stk = stack_ptr;+ NODEPTR n;+ NODEPTR *to_push = 0; /* silence warning by initializing */+#if GCRED+ value_t val;+#endif+ enum node_tag tag;++ // mark_depth++;+ // if (mark_depth % 10000 == 0)+ // PRINT("mark depth %"PRIcounter"\n", mark_depth);+ top:+ n = *np;+ tag = GETTAG(n);+ if (tag == T_IND) {+#if SANITY+ int loop = 0;+ /* Skip indirections, and redirect start pointer */+ while ((tag = GETTAG(n)) == T_IND) {+ // PRINT("*"); fflush(stdout);+ n = GETINDIR(n);+ if (loop++ > 10000000) {+ //PRINT("%p %p %p\n", n, GETINDIR(n), GETINDIR(GETINDIR(n)));+ ERR("IND loop");+ }+ }+ // if (loop)+ // PRINT("\n");+#else /* SANITY */+ while ((tag = GETTAG(n)) == T_IND) {+ n = GETINDIR(n);+ }+#endif /* SANITY */+ *np = n;+ }+ if (n < cells || n > cells + heap_size)+ ERR("bad n");+ if (is_marked_used(n)) {+ goto fin;+ }+ num_marked++;+ mark_used(n);+ switch (tag) {+#if GCRED+#define GCREDIND(x) do { NODEPTR nn = (x); mark(&nn); SETINDIR(n, nn); goto fin; } while(0)+ case T_INT:+#if INTTABLE+ if (LOW_INT <= (val = GETVALUE(n)) && val < HIGH_INT) {+ SETINDIR(n, intTable[val - LOW_INT]);+ COUNT(red_int);+ goto top;+ }+ goto fin;+#endif /* INTTABLE */+ case T_AP:+ if (want_gc_red) {+ NODEPTR fun = indir(&FUN(n));+ NODEPTR arg = indir(&ARG(n));+ enum node_tag funt = GETTAG(fun);+ enum node_tag argt = GETTAG(arg);+ enum node_tag funfunt = funt == T_AP ? GETTAG(indir(&FUN(fun))) : T_FREE;+ enum node_tag funargt = argt == T_AP ? GETTAG(indir(&FUN(arg))) : T_FREE;++ /* This is really only fruitful just after parsing. It can be removed. */+ if (funfunt == T_A) {+ /* Do the A x y --> y reduction */+ NODEPTR y = ARG(n);+ COUNT(red_a);+ GCREDIND(y);+ }++ if (funfunt == T_K) {+ /* Do the K x y --> x reduction */+ NODEPTR x = ARG(FUN(n));+ COUNT(red_k);+ GCREDIND(x);+ }++ if (funt == T_I) {+ /* Do the I x --> x reduction */+ NODEPTR x = ARG(n);+ COUNT(red_i);+ GCREDIND(x);+ }++ if(funt == T_CC && argt == T_I) { + /* C' I --> C */+ SETTAG(n, T_C);+ COUNT(red_cci);+ goto top;+ }++ if(funt == T_CCB && argt == T_AP) {+ NODEPTR funarg = indir(&FUN(arg));+ NODEPTR argarg = indir(&ARG(arg));+ if (GETTAG(argarg) == T_P && GETTAG(funarg) == T_AP) {+ if (GETTAG(indir(&FUN(funarg))) == T_B && GETTAG(indir(&ARG(funarg))) == T_C) { + /* C'B ((B C) P) --> C */+ SETTAG(n, T_C);+ COUNT(red_ccbbcp);+ goto top;+ }+ }+ }++ if(funt == T_B && argt == T_I) { + /* B I --> I */+ SETTAG(n, T_I);+ COUNT(red_bi);+ goto top;+ }++ if(funfunt == T_B && argt == T_I) { + /* B x I --> x */+ NODEPTR x = ARG(FUN(n));+ COUNT(red_bxi);+ GCREDIND(x);+ }++ if(funfunt == T_CCB && argt == T_I) { + /* C'B x I --> x */+ NODEPTR x = ARG(FUN(n));+ COUNT(red_ccbi);+ GCREDIND(x);+ }++ if(funt == T_C && funargt == T_C) { + /* C (C x) --> x */+ NODEPTR x = ARG(ARG(n));+ COUNT(red_cc);+ GCREDIND(x);+ }++#if 0+ /* Very rare */+ if (funt == T_S && funargt == T_K) {+ /* S (K x) --> B x */+ printf("SK"); fflush(stdout);+ }+#endif++#if 0+ /* Fairly frequent, but needs allocation */+ if (funfunt == T_B && funargt == T_K) {+ /* B x (K y) --> K x y */+ printf("BxK\n");+ }+#endif++#if 1+ if (funt == T_C) {+ enum node_tag tf;+ if ((tf = flip_ops[argt])) {+ /* Do the C op --> flip_op reduction */+ // PRINT("%s -> %s\n", tag_names[tt], tag_names[tf]);+ COUNT(red_flip);+ GCREDIND(HEAPREF(tf));+ }+ }+#endif+ }+#else /* GCRED */+ case T_AP:+#endif /* GCRED */+ /* Avoid tail recursion */+ np = &FUN(n);+ to_push = &ARG(n);+ break;+ case T_ARR:+ {+ struct ioarray *arr = ARR(n);++ // arr->marked records marking progress through arr.+ if (arr->marked >= arr->size) {+ goto fin;+ }+ // We unmark the array as a whole and push it as long+ // as there's more entries to scan.+ mark_unused(n);+ num_marked--;+ to_push = np;+ np = &arr->array[arr->marked++];+ break;+ }++ case T_FORPTR:+ FORPTR(n)->finalizer->marked = 1;+ goto fin;++ case T_THID:+ mark_thread(THR(n));+ break;++ case T_MVAR:+ mark_mvar(MVAR(n));+ break;++ default:+ goto fin;+ }++ if (!is_marked_used(*to_push)) {+ // mark_depth++;+ PUSH((NODEPTR)to_push);+ }+ goto top;+ fin:+ // if (mark_depth > max_mark_depth) {+ // max_mark_depth = mark_depth;+ // }+ // mark_depth--;+ if (stack_ptr > stk) {+ np = (NODEPTR *)POPTOP();+ goto top;+ }+ return;+}++/* Perform a garbage collection:+ - Mark nodes from the stack+ - Mark permanent arrays+ - Mark threads that have a root+ - Scan and free arrays+ - Scan and free foreign pointers and run finalizers+ - Scan and free threads+ - Scan and free mvars+*/+void+gc(void)+{+ stackptr_t i;++ num_gc++;+ num_marked = 0;+#if WANT_STDIO+ if (verbose > 1)+ PRINT("gc mark\n");+#endif+ gc_mark_time -= GETTIMEMILLI();+ mark_all_free();+ /* Mark everything reachable from the stack */+ for (i = 0; i <= stack_ptr; i++)+ mark(&stack[i]);++ /* Mark everything reachable from permanent array nodes */+ for (struct ioarray *arr = array_root; arr; arr = arr->next) {+ if (arr->permanent) {+ for (i = 0; i < arr->size; i++)+ mark(&arr->array[i]);+ }+ }++ /* Mark everything reachable from the threads.+ * Note, zombie threads have no root so they are not marked.+ */+ for (struct mthread *mt = all_threads; mt; mt = mt->mt_next) {+ if (mt->mt_root != NIL)+ mark_thread(mt);+ }++ gc_mark_time += GETTIMEMILLI();++ if (num_marked > max_num_marked)+ max_num_marked = num_marked;+ num_free = heap_size - heap_start - num_marked;+ if (num_free < heap_size / 50)+ ERR("heap exhausted");++ gc_scan_time -= GETTIMEMILLI();+ /* Free unused arrays */+ for (struct ioarray **arrp = &array_root; *arrp; ) {+ struct ioarray *arr = *arrp;+ if (arr->marked || arr->permanent) {+ arr->marked = 0;+ arrp = &arr->next;+ } else {+ *arrp = arr->next; /* unlink */+ num_arr_free++;+ FREE(arr); /* and FREE */+ }+ }++ /* Run finalizers on unused foreign pointers. */+ for (struct final **finp = &final_root; *finp; ) {+ struct final *fin = *finp;+ if (fin->marked) {+ fin->marked = 0;+ finp = &fin->next;+ } else {+ /* Unused, run finalizer and free all associated memory */+ if (fin->size == NOSIZE) {+ num_fin_free++;+ } else {+ num_bs_free++;+ num_bs_inuse -= fin->size;+ if (num_bs_alloc - num_bs_free > num_bs_alloc_max)+ num_bs_alloc_max = num_bs_alloc - num_bs_free;+ }+ void (*f)(void *) = (void (*)(void *))fin->final;+ //printf("forptr free fin=%p, f=%p", fin, f);+ //fflush(stdout);+ if (f) {+ //printf("finalizer fin=%p final=%p\n", fin, f);+ (*f)(fin->arg);+ }+ for (struct forptr *p = fin->back; p; ) {+ struct forptr *q = p->next;+ //printf("free fp=%p\n", p);+ //printf(" p=%p desc=%s", p, p->desc ? p->desc : "NONE");+ //fflush(stdout);+ FREE(p);+ //memset(p, 0x55, sizeof *p);+ p = q;+ }+ //printf("\n");+ *finp = fin->next;+ //printf("free fin=%p\n", fin);+ FREE(fin);+ //memset(fin, 0x77, sizeof *fin);+ }+ }++ /* Remove unreferenced zombie threads */+ for (struct mthread **mtp = &all_threads; *mtp; ) {+ struct mthread *mt = *mtp;+ if ((mt->mt_state == ts_died || mt->mt_state == ts_finished) && !mt->mt_mark) {+ COUNT(num_thread_reap);+ *mtp = mt->mt_next;+ free(mt);+ } else {+ mt->mt_mark = 0;+ mtp = &mt->mt_next;+ }+ }+ + /* Remove unreferences mvars */+ for (struct mvar **mvp = &all_mvars; *mvp; ) {+ struct mvar *mv = *mvp;+ if (!mv->mv_mark) {+ COUNT(num_mvar_free);+ *mvp = mv->mv_next;+ free(mv);+ } else {+ mv->mv_mark = 0;+ mvp = &mv->mv_next;+ }+ }++ gc_scan_time += GETTIMEMILLI();++#if WANT_STDIO+ if (verbose > 1) {+ PRINT("gc done, %"PRIcounter" free\n", num_free);+ /*PRINT(" GC reductions A=%"PRIcounter", K=%"PRIcounter", I=%"PRIcounter", int=%"PRIcounter" flip=%"PRIcounter"\n",+ red_a, red_k, red_i, red_int, red_flip);*/+ }+ if (gcbell) {+ fputc('\007', stderr); /* ring the bell */+ fflush(stderr);+ }+#endif /* !WANT_STDIO */++#if 0+ /* For debugging only: mark all free cells */+ for(int n = 0; n < heap_size; n++) {+ NODEPTR p = HEAPREF(n);+ if (!is_marked_used(p)) {+ SETTAG(p, T_FREE);+ }+ }+#endif+}++static INLINE+value_t+peekWord(value_t *p)+{+ return *p;+}++static INLINE+void+pokeWord(value_t *p, value_t w)+{+ *p = w;+}++static INLINE+void *+peekPtr(void **p)+{+ return *p;+}++static INLINE+void+pokePtr(void **p, void *w)+{+ *p = w;+}++static INLINE+uvalue_t+peek_uint8(uint8_t *p)+{+ return *p;+}++static INLINE+void+poke_uint8(uint8_t *p, value_t w)+{+ *p = (uint8_t)w;+}++static INLINE+uvalue_t+peek_uint16(uint16_t *p)+{+ return *p;+}++static INLINE+void+poke_uint16(uint16_t *p, value_t w)+{+ *p = (uint16_t)w;+}++#if WORD_SIZE >= 32+static INLINE+uvalue_t+peek_uint32(uint32_t *p)+{+ return *p;+}++static INLINE+void+poke_uint32(uint32_t *p, value_t w)+{+ *p = (uint32_t)w;+}+#endif /* WORD_SIZE >= 32 */++#if WORD_SIZE >= 64+static INLINE+uvalue_t+peek_uint64(uint64_t *p)+{+ return *p;+}++static INLINE+void+poke_uint64(uint64_t *p, value_t w)+{+ *p = (uint64_t)w;+}+#endif /* WORD_SIZE >= 64 */++static INLINE+value_t+peek_int8(int8_t *p)+{+ return *p;+}++static INLINE+void+poke_int8(int8_t *p, value_t w)+{+ *p = (int8_t)w;+}++static INLINE+value_t+peek_int16(int16_t *p)+{+ return *p;+}++static INLINE+void+poke_int16(int16_t *p, value_t w)+{+ *p = (int16_t)w;+}++#if WORD_SIZE >= 32+static INLINE+value_t+peek_int32(int32_t *p)+{+ return *p;+}++static INLINE+void+poke_int32(int32_t *p, value_t w)+{+ *p = (int32_t)w;+}+#endif /* WORD_SIZE >= 32 */++#if WORD_SIZE >= 64+static INLINE+value_t+peek_int64(int64_t *p)+{+ return *p;+}++static INLINE+void+poke_int64(int64_t *p, value_t w)+{+ *p = (int64_t)w;+}+#endif /* WORD_SIZE >= 64 */++static INLINE+value_t+peek_int(int *p)+{+ return *p;+}++static INLINE+void+poke_int(int *p, value_t w)+{+ *p = (int)w;+}++static INLINE+value_t+peek_uint(unsigned int *p)+{+ return *p;+}++static INLINE+void+poke_uint(unsigned int *p, value_t w)+{+ *p = (unsigned int)w;+}++static INLINE+value_t+peek_short(short *p)+{+ return *p;+}++static INLINE+void+poke_short(short *p, value_t w)+{+ *p = (short)w;+}++static INLINE+value_t+peek_ushort(unsigned short *p)+{+ return *p;+}++static INLINE+void+poke_ushort(unsigned short *p, value_t w)+{+ *p = (unsigned short)w;+}++static INLINE+value_t+peek_long(long *p)+{+ return *p;+}++static INLINE+void+poke_long(long *p, value_t w)+{+ *p = (long)w;+}++static INLINE+value_t+peek_ulong(unsigned long *p)+{+ return *p;+}++static INLINE+void+poke_ulong(unsigned long *p, value_t w)+{+ *p = (unsigned long)w;+}++static INLINE+value_t+peek_llong(long long *p)+{+ return *p;+}++static INLINE+void+poke_llong(long long *p, value_t w)+{+ *p = (long long)w;+}++static INLINE+value_t+peek_ullong(unsigned long long *p)+{+ return *p;+}++static INLINE+void+poke_ullong(unsigned long long *p, value_t w)+{+ *p = (unsigned long long)w;+}++#if WANT_FLOAT+static INLINE+flt_t+peek_flt(flt_t *p)+{+ return *p;+}++static INLINE+void+poke_flt(flt_t *p, flt_t w)+{+ *p = w;+}+#endif /* WANT_FLOAT */++/* Look up an FFI function by name */+value_t+lookupFFIname(const char *name)+{+ size_t i;++ for(i = 0; ffi_table[i].ffi_name; i++)+ if (strcmp(ffi_table[i].ffi_name, name) == 0)+ return (value_t)i;+ if (xffi_table) {+ for(i = 0; xffi_table[i].ffi_name; i++)+ if (strcmp(xffi_table[i].ffi_name, name) == 0)+ return (value_t)(i + num_ffi);+ }+ return -1;+}++NODEPTR+ffiNode(const char *buf)+{+ NODEPTR r;+ value_t i = lookupFFIname(buf);+ char *fun;++ if (i < 0) {+ /* lookup failed, generate a node that will dynamically generate an error */+ r = alloc_node(T_BADDYN);+ fun = mmalloc(strlen(buf) + 1);+ strcpy(fun, buf);+ CSTR(r) = fun;+ } else {+ r = alloc_node(T_IO_CCALL);+ SETVALUE(r, i);+ }+ return r;+}++/* If the next input character is c, then consume it, else leave it alone. */+int+gobble(BFILE *f, int c)+{+ int d = getb(f);+ if (c == d) {+ return 1;+ } else {+ ungetb(d, f);+ return 0;+ }+}++/* Get a non-terminating character. ' ' and '\n' terminates a token. */+int+getNT(BFILE *f)+{+ int c;++ c = getb(f);+ if (c == ' ' || c == '\n') {+ return 0;+ } else {+ return c;+ }+}++value_t+parse_int(BFILE *f)+{+ // Parse using uvalue_t, which wraps on overflow.+ uvalue_t i = 0;+ int neg = 1;+ int c = getb(f);+ if (c == '-') {+ neg = -1;+ c = getb(f);+ }+ for(;;) {+ i = i * 10 + (c - '0');+ c = getb(f);+ if (c < '0' || c > '9') {+ ungetb(c, f);+ break;+ }+ }+ // Multiply by neg without triggering undefined behavior.+ return (value_t)(((uvalue_t)neg) * i);+}++#if WANT_FLOAT+flt_t+parse_double(BFILE *f)+{+ // apparently longest float, when rendered, takes up 24 characters. We add one more for a potential+ // minus sign, and another one for the final null terminator.+ // https://stackoverflow.com/questions/1701055/what-is-the-maximum-length-in-chars-needed-to-represent-any-double-value+ char buf[26];+ for(int j = 0; (buf[j] = getNT(f)); j++)+ ;++ return strtod(buf, NULL);+}+#endif++struct forptr *mkForPtr(struct bytestring bs);+NODEPTR mkFunPtr(HsFunPtr p);++/* Create a forptr that has a free() finalizer. */+struct forptr *+mkForPtrFree(struct bytestring str)+{+ struct forptr *fp = mkForPtr(str); /* Create a foreign pointer */+ fp->finalizer->final = (HsFunPtr)FREE; /* and set the finalizer to just free it */+ return fp;+}++NODEPTR+mkStrNode(struct bytestring str)+{+ NODEPTR n = alloc_node(T_FORPTR);+ struct forptr *fp = mkForPtrFree(str);+ FORPTR(n) = fp;+ fp->finalizer->fptype = FP_BSTR;+ //printf("mkForPtr n=%p fp=%p %d %s payload.string=%p\n", n, fp, (int)FORPTR(n)->payload.size, (char*)FORPTR(n)->payload.string, FORPTR(n)->payload.string);+ return n;+}++/* Table of labelled nodes for sharing during parsing. */+struct shared_entry {+ heapoffs_t label;+ NODEPTR node; /* NIL indicates unused */+} *shared_table;+heapoffs_t shared_table_size;++/* Look for the label in the table.+ * If it's found, return the node.+ * If not found, return the first empty entry.+*/+NODEPTR *+find_label(heapoffs_t label)+{+ int i;++ for(i = (int)label; ; i++) {+ i %= shared_table_size;+ if (shared_table[i].node == NIL) {+ /* The slot is empty, so claim and return it */+ shared_table[i].label = label;+ return &shared_table[i].node;+ } else if (shared_table[i].label == label) {+ /* Found the label, so return it. */+ return &shared_table[i].node;+ }+ /* Not empty and not found, try next. */+ }+}++/* The memory allocated here is never freed.+ * This could be fixed by using a forptr and a+ * finalizer for read UTF-8 strings.+ * Fix this if there is a lot of deserialization.+ */+struct bytestring+parse_string(BFILE *f)+{+ struct bytestring bs;+ size_t sz = 20;+ uint8_t *buffer = mmalloc(sz);+ size_t i;+ int c;++ for(i = 0;;) {+ c = getb(f);+ if (c == '"')+ break;+ if (i >= sz - 1) {+ sz *= 2;+ buffer = mrealloc(buffer, sz);+ }+#if 0+ if (c == '\\') {+ buffer[i++] = (uint8_t)parse_int(f);+ if (!gobble(f, '&'))+ ERR("parse string");+ } else {+ buffer[i++] = c;+ }+#else+ /* See src/MicroHs/ExpPrint.hs for how strings are encoded. */+ switch (c) {+ case '\\':+ c = getb(f);+ if (c == '?')+ c = 0x7f;+ else if (c == '_')+ c = 0xff;+ break;+ case '^':+ c = getb(f);+ if (c < 0x40)+ c &= 0x1f;+ else+ c = (c & 0x1f) | 0x80;+ break;+ case '|':+ c = getb(f);+ c |= 0x80;+ break;+ default:+ /* Unencoded */+ ;+ }+ buffer[i++] = c;+#endif+ }+ buffer[i] = 0; /* add a trailing 0 in case we need a C string */+ buffer = mrealloc(buffer, i + 1);++ bs.size = i;+ bs.string = buffer;+ //printf("parse_string %d %s\n", (int)bs.size, (char*)bs.string);+ return bs;+}++struct forptr *new_mpz(void);++NODEPTR+parse(BFILE *f)+{+ stackptr_t stk = stack_ptr;+ NODEPTR r, x, y;+ NODEPTR *nodep;+ heapoffs_t l;+ value_t i;+ int c;+ size_t j;+ char buf[80]; /* store names of primitives. */++ for(;;) {+ c = getb(f);+ if (c < 0) ERR("parse EOF");+ switch (c) {+ case ' ':+ case '\n':+ continue;+ }+ if (num_free < 3)+ ERR("out of heap reading code");+ GCCHECK(1);+ switch(c) {+ case '@':+ x = TOP(0);+ y = TOP(1);+ POP(2);+ PUSH(new_ap(y, x));+ break;+ case '}':+ x = TOP(0);+ POP(1);+ if (stack_ptr != stk)+ ERR("parse: stack");+ return x;+#if WANT_GMP+ case '%':+ {+ struct bytestring bs = parse_string(f); /* get all the digits, terminated by " */+ struct forptr *fp = new_mpz(); /* a new mpz */+ mpz_ptr op = fp->payload.string; /* get actual pointer */+ mpz_set_str(op, bs.string, 10); /* convert to an mpz */+ free(bs.string);+ r = alloc_node(T_FORPTR);+ FORPTR(r) = fp;+ PUSH(r);+ break;+ }+#endif+ case '&':+#if WANT_FLOAT+ r = mkFlt(parse_double(f));+#else+ while (getNT(f)) /* skip the float constant */+ ;+ r = alloc_node(T_DBL);+ SETVALUE(r, 0);+#endif+ PUSH(r);+ break;+ case '#':+ i = parse_int(f);+ r = mkInt(i);+ PUSH(r);+ break;+ case '[':+ {+ size_t sz;+ struct ioarray *arr;+ size_t i;+ sz = (size_t)parse_int(f);+ if (!gobble(f, ']')) ERR("parse arr 1");+ arr = arr_alloc(sz, NIL);+ for (i = 0; i < sz; i++) {+ arr->array[i] = TOP(sz - i - 1);+ }+ r = alloc_node(T_ARR);+ ARR(r) = arr;+ POP(sz);+ PUSH(r);+ break;+ }+ case '_':+ /* Reference to a shared value: _label */+ l = parse_int(f); /* The label */+ nodep = find_label(l);+ if (*nodep == NIL) {+ /* Not yet defined, so make it an indirection */+ *nodep = alloc_node(T_FREE);+ SETINDIR(*nodep, NIL);+ }+ PUSH(*nodep);+ break;+ case ':':+ /* Define a shared expression: :label e */+ l = parse_int(f); /* The label */+ if (!gobble(f, ' ')) ERR("parse ' '");+ nodep = find_label(l);+ x = TOP(0);+ if (*nodep == NIL) {+ /* not referenced yet, so add a direct reference */+ *nodep = x;+ } else {+ /* Sanity check */+ if (GETTAG(*nodep) != T_IND || GETINDIR(*nodep) != NIL) ERR("shared != NIL");+ SETINDIR(*nodep, x);+ }+ break;+ case '"':+ /* Everything up to the next " is a string.+ * Special characters are encoded as \NNN&,+ * where NNN is the decimal value of the character */+ PUSH(mkStrNode(parse_string(f)));+ break;+#if WANT_TICK+ case '!':+ if (!gobble(f, '"'))+ ERR("parse !");+ i = add_tick_table(parse_string(f));+ r = alloc_node(T_TICK);+ SETVALUE(r, (value_t)i);+ PUSH(r);+ break;+#endif+ case '^':+ /* An FFI name */+ for (j = 0; (buf[j] = getNT(f)); j++)+ ;+ r = ffiNode(buf);+ PUSH(r);+ break;+ case ';':+ /* <name is a C function pointer to name */+ for (j = 0; (buf[j] = getNT(f)); j++)+ ;+ if (strcmp(buf, "0") == 0) {+ PUSH(mkFunPtr((HsFunPtr)0));+ } else if (strcmp(buf, "closeb") == 0) {+ PUSH(mkFunPtr((HsFunPtr)closeb));+ } else {+ ERR1("unknown funptr '%s'", buf);+ }+ break;+ default:+ buf[0] = c;+ /* A primitive, keep getting char's until end */+ for (j = 1; (buf[j] = getNT(f)); j++)+ ;+ /* Look up the primop and use the preallocated node. */+ for (j = 0; j < sizeof primops / sizeof primops[0]; j++) {+ if (strcmp(primops[j].name, buf) == 0) {+ r = primops[j].node;+ goto found;+ }+ }+ ERR1("no primop %s", buf);+ found:+ PUSH(r);+ break;+ }+ }+}++void+checkversion(BFILE *f)+{+ char *p = VERSION;+ int c;++ while ((c = *p++)) {+ if (c != getb(f))+ ERR("version mismatch");+ }+ (void)gobble(f, '\r'); /* allow extra CR */+}++/* Parse a file */+NODEPTR+parse_top(BFILE *f)+{+ heapoffs_t numLabels, i;+ NODEPTR n;+ checkversion(f);+ numLabels = parse_int(f);+ if (!gobble(f, '\n'))+ ERR("size parse");+ gobble(f, '\r'); /* allow extra CR */+ shared_table_size = 3 * numLabels; /* sparsely populated hashtable */+ shared_table = mmalloc(shared_table_size * sizeof(struct shared_entry));+ for(i = 0; i < shared_table_size; i++)+ shared_table[i].node = NIL;+ n = parse(f);+ FREE(shared_table);+ return n;+}++#if WANT_STDIO+NODEPTR+parse_file(const char *fn, size_t *psize)+{+ FILE *f = fopen(fn, "r");+ if (!f)+ ERR1("file not found %s", fn);++ /* And parse it */+ BFILE *p = add_FILE(f);+ NODEPTR n = parse_top(p);+ *psize = ftell(f);+ closeb(p);+ return n;+}+#endif /* WANT_STDIO */++counter_t num_shared;++/* Two bits per node: marked, shared+ * 0, 0 -- not visited+ * 1, 0 -- visited once+ * 1, 1 -- visited more than once+ * 0, 1 -- printed+ */+struct print_bits {+ bits_t *marked_bits;+ bits_t *shared_bits;+};+static INLINE void set_bit(bits_t *bits, NODEPTR n)+{+ heapoffs_t i = LABEL(n);+ bits[i / BITS_PER_WORD] |= (1ULL << (i % BITS_PER_WORD));+}+#if WANT_STDIO+static INLINE void clear_bit(bits_t *bits, NODEPTR n)+{+ heapoffs_t i = LABEL(n);+ bits[i / BITS_PER_WORD] &= ~(1ULL << (i % BITS_PER_WORD));+}+#endif+static INLINE int test_bit(bits_t *bits, NODEPTR n)+{+ heapoffs_t i = LABEL(n);+ return (bits[i / BITS_PER_WORD] & (1ULL << (i % BITS_PER_WORD))) != 0;+}++size_t strNodes(size_t len);+NODEPTR mkStringC(char *str);++#if WANT_STDIO+#if WORD_SIZE == 64+#define CONVDBL "%.16g"+#elif WORD_SIZE == 32+#define CONVDBL "%.8g"+#endif+void+convdbl(char *str, flt_t x)+{+ /* Using 16 decimals will lose some precision.+ * 17 would keep the precision, but it frequently looks very ugly.+ */+ (void)snprintf(str, 25, CONVDBL, x);+ if (strcmp(str, "nan") != 0 && strcmp(str, "-nan") != 0 &&+ strcmp(str, "inf") != 0 && strcmp(str, "-inf") != 0 &&+ !strchr(str, '.') && !strchr(str, 'e') && !strchr(str, 'E')) {+ /* There is no decimal point and no exponent, so add a decimal point */+ strcat(str, ".0");+ }+}++NODEPTR+dblToString(flt_t x)+{+ char str[30];+ convdbl(str, x);+ // turn it into a mhs string+ GCCHECK(strNodes(strlen(str)));+ return mkStringC(str);+}++void+putdblb(flt_t x, BFILE *p)+{+ char str[30];+ convdbl(str, x);+ putsb(str, p);+}++void printrec(BFILE *f, struct print_bits *pb, NODEPTR n, int prefix);++/* Mark all reachable nodes, when a marked node is reached, mark it as shared. */+void+find_sharing(struct print_bits *pb, NODEPTR n)+{+ top:+ while (GETTAG(n) == T_IND) {+ n = GETINDIR(n);+ }+ if (n < cells || n >= cells + heap_size) abort();+ //PRINT("find_sharing %p %llu ", n, LABEL(n));+ tag_t tag = GETTAG(n);+ if (tag == T_AP || tag == T_ARR || tag == T_FORPTR) {+ if (test_bit(pb->shared_bits, n)) {+ /* Alread marked as shared */+ //PRINT("shared\n");+ ;+ } else if (test_bit(pb->marked_bits, n)) {+ /* Already marked, so now mark as shared */+ //PRINT("marked\n");+ set_bit(pb->shared_bits, n);+ num_shared++;+ } else {+ /* Mark as visited, and recurse */+ //PRINT("unmarked\n");+ set_bit(pb->marked_bits, n);+ switch(tag) {+ case T_AP:+ find_sharing(pb, FUN(n));+ n = ARG(n);+ goto top;+ case T_ARR:+ for(size_t i = 0; i < ARR(n)->size; i++) {+ find_sharing(pb, ARR(n)->array[i]);+ }+ break;+ default:+ break;+ }+ }+ } else {+ /* Not an sharable node, so do nothing */+ //PRINT("not T_AP\n");+ ;+ }+}++void+print_string(BFILE *f, struct bytestring bs)+{+ uint8_t *str = bs.string;+ putb('"', f);+ for (size_t i = 0; i < bs.size; i++) {+ int c = str[i];+#if 0+ if (c == '"' || c == '\\' || c < ' ' || c > '~') {+ putb('\\', f);+ putdecb(c, f);+ putb('&', f);+ } else {+ putb(c, f);+ }+#else+ if (c < 0 || c > 0xff)+ ERR("print_string");+ if (c < 0x20) {+ putb('^', f); putb(c + 0x20, f);+ } else if (c == '"' || c == '^' || c == '|' || c == '\\') {+ putb('\\', f); putb(c, f);+ } else if (c < 0x7f) {+ putb(c, f);+ } else if (c == 0x7f) {+ putb('\\', f); putb('?', f);+ } else if (c < 0xa0) {+ putb('^', f); putb(c - 0x80 + 0x40, f);+ } else if (c < 0xff) {+ putb('|', f); putb(c - 0x80, f);+ } else { /* must be< c == 0xff */+ putb('\\', f); putb('_', f);+ }+#endif+ }+ putb('"', f);+}++/*+ * Recursively print an expression.+ * This assumes that the shared nodes has been marked as such.+ * The prefix flag is used to get a readable dump.+ */+void+printrec(BFILE *f, struct print_bits *pb, NODEPTR n, int prefix)+{+ int share = 0;+ enum node_tag tag;+ char prbuf[30];++ while (GETTAG(n) == T_IND) {+ /*putb('*', f);*/+ n = GETINDIR(n);+ }++ if (test_bit(pb->shared_bits, n)) {+ /* The node is shared */+ if (test_bit(pb->marked_bits, n)) {+ /* Not yet printed, so emit a label */+ if (prefix) {+ putb(':', f);+ putdecb((value_t)LABEL(n), f);+ putb(' ', f);+ } else {+ share = 1;+ }+ clear_bit(pb->marked_bits, n); /* mark as printed */+ } else {+ /* This node has already been printed, so just use a reference. */+ putb('_', f);+ putdecb((value_t)LABEL(n), f);+ if (!prefix)+ putb(' ', f);+ return;+ }+ }++ //if (n == atptr) putb('@', f);+ tag = GETTAG(n);+ switch (tag) {+ case T_AP:+ if (prefix) {+ putb('(', f);+ printrec(f, pb, FUN(n), prefix);+ putb(' ', f);+ printrec(f, pb, ARG(n), prefix);+ putb(')', f);+ } else {+ printrec(f, pb, FUN(n), prefix);+ printrec(f, pb, ARG(n), prefix);+ putb('@', f);+ }+ break;+ case T_INT: putb('#', f); putdecb(GETVALUE(n), f); break;+ case T_DBL: putb('&', f); putdblb(GETDBLVALUE(n), f); break;+ case T_ARR:+ if (prefix) {+ /* Arrays serialize as '[sz] e_1 ... e_sz' */+ putb('[', f);+ putdecb((value_t)ARR(n)->size, f);+ putb(']', f);+ for(size_t i = 0; i < ARR(n)->size; i++) {+ putb(' ', f);+ printrec(f, pb, ARR(n)->array[i], prefix);+ }+ } else {+ /* Arrays serialize as 'e_1 ... e_sz [sz]' */+ for(size_t i = 0; i < ARR(n)->size; i++) {+ printrec(f, pb, ARR(n)->array[i], prefix);+ }+ putb('[', f);+ putdecb((value_t)ARR(n)->size, f);+ putb(']', f);+ }+ break;+ case T_PTR:+ if (prefix) {+ snprintf(prbuf, sizeof prbuf, "PTR<%p>",PTR(n));+ putsb(prbuf, f);+ } else {+ ERR("Cannot serialize pointers");+ }+ break;+ case T_FUNPTR:+ /* There are a few function pointers that happen without user FFI.+ * We need to be able to serialize these.+ * XXX Make a table if we need more.+ */+ if (FUNPTR(n) == 0) {+ putsb(";0 ", f);+ } else if (FUNPTR(n) == (HsFunPtr)closeb) {+ putsb(";closeb ", f);+ } else if (prefix) {+ snprintf(prbuf, sizeof prbuf, "FUNPTR<%p>",FUNPTR(n));+ putsb(prbuf, f);+ } else {+ ERR1("Cannot serialize function pointers %p", FUNPTR(n));+ }+ break;+ case T_THID:+ if (prefix) {+ snprintf(prbuf, sizeof prbuf, "FUNPTR<%d>",(int)THR(n)->mt_id);+ } else {+ ERR("cannot serialize ThreadId yet");+ }+ case T_FORPTR:+ if (n == comb_stdin)+ putsb("IO.stdin", f);+ else if (n == comb_stdout)+ putsb("IO.stdout", f);+ else if (n == comb_stderr)+ putsb("IO.stderr", f);+#if WANT_GMP+ else if (FORPTR(n)->finalizer->fptype == FP_MPZ) {+ /* Serialize as %99999" */+ mpz_ptr op = FORPTR(n)->payload.string; /* get the mpz */+ int sz = mpz_sizeinbase(op, 10); /* maximum length */+ char *s = mmalloc(sz + 2);+ (void)mpz_get_str(s, 10, op); /* convert to a string */+ putsb("%", f);+ putsb(s, f);+ putsb("\"", f); /* so we can use parse_string */+ free(s);+ }+#endif /* WANT_GMP */+ else if (FORPTR(n)->finalizer->fptype == FP_BSTR) {+ print_string(f, FORPTR(n)->payload);+ } else if (prefix) {+ snprintf(prbuf, sizeof prbuf, "FORPTR<%p>",FORPTR(n));+ putsb(prbuf, f);+ } else {+ ERR("Cannot serialize foreign pointers");+ }+ break;+ case T_IO_CCALL: putb('^', f); putsb(FFI_IX(GETVALUE(n)).ffi_name, f); break;+ case T_BADDYN: putb('^', f); putsb(CSTR(n), f); break;+ case T_TICK:+ putb('!', f);+ print_string(f, tick_table[GETVALUE(n)].tick_name);+ break;+ default:+ if (0 <= tag && tag <= T_LAST_TAG)+ if (tag_names[tag])+ putsb(tag_names[tag], f);+ else {+ snprintf(prbuf, sizeof prbuf, "TAG=%d", (int)tag);+ putsb(prbuf, f);+ }+ else {+ snprintf(prbuf, sizeof prbuf, "BADTAG(%d)", (int)tag);+ putsb(prbuf, f);+ }+ break;+ }+ if (!prefix) {+ if (GETTAG(n) != T_AP)+ putb(' ', f);+ if (share) {+ putb(':', f);+ putdecb((value_t)LABEL(n), f);+ putb(' ', f);+ }+ }+}++/* Serialize a graph to file. */+void+printb(BFILE *f, NODEPTR n, int header)+{+ struct print_bits pb;+ num_shared = 0;+ pb.marked_bits = mcalloc(free_map_nwords, sizeof(bits_t));+ pb.shared_bits = mcalloc(free_map_nwords, sizeof(bits_t));+ find_sharing(&pb, n);+ if (header) {+ putsb(VERSION, f);+ putdecb(num_shared, f);+ putb('\n', f);+ }+ printrec(f, &pb, n, !header);+ if (header) {+ putb('}', f);+ }+ FREE(pb.marked_bits);+ FREE(pb.shared_bits);+}++/* Show a graph. */+void+pps(NODEPTR n)+{+ pp(stdout, n);+}++void+pp(FILE *f, NODEPTR n)+{+ BFILE *bf = add_FILE(f);+ printb(bf, n, 0);+ putb('\n', bf);+ freeb_file(bf);+}++#if 0+void+ppmsg(const char *msg, NODEPTR n)+{+ printf("%s", msg);+ pp(stdout, n);+ printf("\n");+}++void+dump(const char *msg, NODEPTR at)+{+ atptr = at;+ printf("dump: %s\n", msg);+ pp(stdout, *topnode);+}+#endif++#else /* WANT_STDIO */+NODEPTR+dblToString(flt_t x)+{+ return mkStringC("no dblToString");+}++#endif /* WANT_STDIO */++NODEPTR+mkInt(value_t i)+{+#if INTTABLE+ if (LOW_INT <= i && i < HIGH_INT) {+ return intTable[i - LOW_INT];+ }+#endif++ NODEPTR n;+ n = alloc_node(T_INT);+ SETVALUE(n, i);+ return n;+}++NODEPTR+mkFlt(flt_t d)+{+ NODEPTR n;+ n = alloc_node(T_DBL);+ SETDBLVALUE(n, d);+ return n;+}++NODEPTR+mkPtr(void* p)+{+ NODEPTR n;+ n = alloc_node(T_PTR);+ PTR(n) = p;+ return n;+}++NODEPTR+mkFunPtr(void (*p)(void))+{+ NODEPTR n;+ n = alloc_node(T_FUNPTR);+ FUNPTR(n) = p;+ return n;+}++struct forptr*+mkForPtr(struct bytestring bs)+{+ struct final *fin = mcalloc(1, sizeof(struct final));+ struct forptr *fp = mcalloc(1, sizeof(struct forptr));+ if (bs.size == NOSIZE) {+ num_fin_alloc++;+ } else {+ num_bs_alloc++;+ num_bs_inuse += bs.size;+ num_bs_bytes += bs.size;+ if (num_bs_inuse > num_bs_inuse_max)+ num_bs_inuse_max = num_bs_inuse;+ }+ //printf("mkForPtr p=%p fin=%p fp=%p\n", p, fin, fp);+ fin->next = final_root;+ final_root = fin;+ fin->final = 0;+ fin->arg = bs.string;+ fin->size = bs.size; /* The size is not really needed */+ fin->back = fp;+ fin->marked = 0;+ fp->next = 0;+ fp->payload = bs;+ fp->finalizer = fin;+ // fp->desc = 0;+ return fp;+}++struct forptr*+mkForPtrP(void *p)+{+ struct bytestring bs = { NOSIZE, p };+ return mkForPtr(bs);+}++struct forptr*+addForPtr(struct forptr *ofp, int s)+{+ struct forptr *fp = mmalloc(sizeof(struct forptr));+ struct final *fin = ofp->finalizer;++ fp->next = ofp;+ fin->back = fp;+ if (ofp->payload.size != NOSIZE)+ fp->payload.size = ofp->payload.size - s;+ fp->payload.string = (uint8_t*)ofp->payload.string + s;+ fp->finalizer = fin;+ return fp;+}++struct forptr*+bssubstr(struct forptr *fp, value_t offs, value_t len)+{+ struct forptr *res = addForPtr(fp, offs);+ res->payload.size = len;+ return res;+}++static INLINE NODEPTR+mkNil(void)+{+ return combFalse;+}++static INLINE NODEPTR+mkCons(NODEPTR x, NODEPTR xs)+{+ return new_ap(new_ap(combCons, x), xs);+}++size_t+strNodes(size_t len)+{+ /* Each character will need a CHAR node and a CONS node, a CONS uses 2 T_AP nodes */+ len *= (1 + 2);+ /* And each string will need a NIL */+ len += 1;+ return len;+}++/* Turn a C string into a combinator string.+ * Does NOT do UTF decoding.+ */+NODEPTR+mkString(struct bytestring bs)+{+ NODEPTR n, nc;+ size_t i;+ const unsigned char *str = bs.string; /* no sign bits, please */++ n = mkNil();+ for(i = bs.size; i > 0; i--) {+ nc = mkInt(str[i-1]);+ n = mkCons(nc, n);+ }+ return n;+}++NODEPTR+mkStringC(char *str)+{+ struct bytestring bs = { strlen(str), str };+ return mkString(bs);+}++NODEPTR+mkStringU(struct bytestring bs)+{+ BFILE *ubuf = add_utf8(openb_rd_buf(bs.string, bs.size));+ NODEPTR n, *np, nc;++ //printf("mkStringU %d %s\n", (int)bs.size, (char*)bs.string);++ n = mkNil();+ np = &n;+ for(;;) {+ int c = getb(ubuf);+ if (c < 0)+ break;+ nc = mkInt(c);+ *np = mkCons(nc, *np);+ np = &ARG(*np);+ }+ closeb(ubuf);+ return n;+}++NODEPTR+bsunpack(struct bytestring bs)+{+ NODEPTR n, *np, nc;+ size_t i;++ n = mkNil();+ np = &n;+ for(i = 0; i < bs.size; i++) {+ nc = mkInt(((uint8_t *)bs.string)[i]);+ *np = mkCons(nc, *np);+ np = &ARG(*np);+ }+ return n;+}++/* XXX This should somehow be merged with other utf8 decoders */+value_t+headutf8(struct bytestring bs, void **ret)+{+ uint8_t *p = bs.string;+ if (bs.size == 0)+ ERR("headUTF8 0");+ int c1 = *p++;+ if ((c1 & 0x80) == 0) {+ if (ret)+ *ret = p;+ return c1;+ }+ if (bs.size == 1)+ ERR("headUTF8 1");+ int c2 = *p++;+ if ((c1 & 0xe0) == 0xc0) {+ if (ret)+ *ret = p;+ return ((c1 & 0x1f) << 6) | (c2 & 0x3f);+ }+ if (bs.size == 2)+ ERR("headUTF8 2");+ int c3 = *p++;+ if ((c1 & 0xf0) == 0xe0) {+ if (ret)+ *ret = p;+ return ((c1 & 0x0f) << 12) | ((c2 & 0x3f) << 6) | (c3 & 0x3f);+ }+ if (bs.size == 3)+ ERR("headUTF8 3");+ int c4 = *p++;+ if ((c1 & 0xf8) == 0xf0) {+ if (ret)+ *ret = p;+ return ((c1 & 0x07) << 18) | ((c2 & 0x3f) << 12) | ((c3 & 0x3f) << 6) | (c4 & 0x3f);+ }+ ERR("headUTF8 4");+}++/* Evaluate to an INT */+static INLINE value_t+evalint(NODEPTR n)+{+ n = evali(n);+#if SANITY+ if (GETTAG(n) != T_INT) {+ ERR1("evalint, bad tag %d", GETTAG(n));+ }+#endif+ return GETVALUE(n);+}++/* Evaluate to a Flt_T */+static INLINE flt_t+evaldbl(NODEPTR n)+{+ n = evali(n);+#if SANITY+ if (GETTAG(n) != T_DBL) {+ ERR1("evaldbl, bad tag %d", GETTAG(n));+ }+#endif+ return GETDBLVALUE(n);+}++/* Evaluate to a T_PTR */+void *+evalptr(NODEPTR n)+{+ n = evali(n);+#if SANITY+ if (GETTAG(n) != T_PTR) {+ ERR1("evalptr, bad tag %d", GETTAG(n));+ }+#endif+ return PTR(n);+}++/* Evaluate to a T_FUNPTR */+HsFunPtr+evalfunptr(NODEPTR n)+{+ n = evali(n);+#if SANITY+ if (GETTAG(n) != T_FUNPTR) {+ ERR1("evalfunptr, bad tag %d", GETTAG(n));+ }+#endif+ return FUNPTR(n);+}++/* Evaluate to a T_FORPTR */+struct forptr *+evalforptr(NODEPTR n)+{+ n = evali(n);+#if SANITY+ if (GETTAG(n) != T_FORPTR) {+ ERR1("evalforptr, bad tag %d", GETTAG(n));+ }+#endif+ return FORPTR(n);+}++/* Evaluate to a bytestring */+struct forptr *+evalbstr(NODEPTR n)+{+ n = evali(n);+#if SANITY+ if (GETTAG(n) != T_FORPTR || FORPTR(n)->finalizer->fptype != FP_BSTR) {+ ERR1("evalbstr, bad tag %d", GETTAG(n));+ }+#endif+ return FORPTR(n);+}++/* Evaluate to a T_THID */+struct mthread *+evalthid(NODEPTR n)+{+ n = evali(n);+#if SANITY+ if (GETTAG(n) != T_THID) {+ ERR1("evalthid, bad tag %d", GETTAG(n));+ }+#endif+ return THR(n);+}++/* Evaluate to a T_MVAR */+struct mvar *+evalmvar(NODEPTR n)+{+ n = evali(n);+#if SANITY+ if (GETTAG(n) != T_MVAR) {+ ERR1("evalmvar, bad tag %d", GETTAG(n));+ }+#endif+ return MVAR(n);+}++/* Evaluate a string, returns a newly allocated buffer.+ * XXX this is cheating, should use continuations.+ * XXX the malloc()ed string is leaked if we yield in here.+ * Caller is responsible to free().+ * Does UTF-8 encoding.+ */+struct bytestring+evalstring(NODEPTR n)+{+ size_t sz = 100;+ char *buf = mmalloc(sz);+ size_t offs;+ uvalue_t c;+ NODEPTR x;+ struct bytestring bs;++ for (offs = 0;;) {+ if (offs >= sz - 4) {+ sz *= 2;+ buf = mrealloc(buf, sz);+ }+ PUSH(n); /* protect the list from GC */+ n = evali(n);+ POP(1);+ if (GETTAG(n) == T_K) /* Nil */+ break;+ else if (GETTAG(n) == T_AP && GETTAG(x = indir(&FUN(n))) == T_AP && GETTAG(indir(&FUN(x))) == T_O) { /* Cons */+ PUSH(n); /* protect from GC */+ c = evalint(ARG(x));+ n = POPTOP();+ if ((c & 0x1ff800) == 0xd800) {+ // c is a surrogate+ c = 0xfffd; // replacement character+ }+ if (c < 0x80) {+ buf[offs++] = (char)c;+ } else if (c < 0x800) {+ buf[offs++] = ((c >> 6 ) ) | 0xc0;+ buf[offs++] = ((c ) & 0x3f) | 0x80;+ } else if (c < 0x10000) {+ buf[offs++] = ((c >> 12) ) | 0xe0;+ buf[offs++] = ((c >> 6 ) & 0x3f) | 0x80;+ buf[offs++] = ((c ) & 0x3f) | 0x80;+ } else if (c < 0x110000) {+ buf[offs++] = ((c >> 18) ) | 0xf0;+ buf[offs++] = ((c >> 12) & 0x3f) | 0x80;+ buf[offs++] = ((c >> 6 ) & 0x3f) | 0x80;+ buf[offs++] = ((c ) & 0x3f) | 0x80;+ } else {+ ERR("invalid char");+ }+ n = ARG(n);+ } else {+ ERR("evalstring not Nil/Cons");+ }+ }+ buf[offs] = 0; /* in case we use it as a C string */+ bs.size = offs;+ bs.string = buf;+ return bs;+}++/* Does not do UTF-8 encoding */+struct bytestring+evalbytestring(NODEPTR n)+{+ size_t sz = 100;+ uint8_t *buf = mmalloc(sz);+ size_t offs;+ uvalue_t c;+ NODEPTR x;+ struct bytestring bs;++ for (offs = 0;;) {+ if (offs >= sz - 1) {+ sz *= 2;+ buf = mrealloc(buf, sz);+ }+ PUSH(n); /* protect list from GC */+ n = evali(n);+ POP(1);+ if (GETTAG(n) == T_K) /* Nil */+ break;+ else if (GETTAG(n) == T_AP && GETTAG(x = indir(&FUN(n))) == T_AP && GETTAG(indir(&FUN(x))) == T_O) { /* Cons */+ PUSH(n); /* protect from GC */+ c = evalint(ARG(x));+ n = POPTOP();+ buf[offs++] = c;+ n = ARG(n);+ } else {+ //pp(stdout, n);+ ERR("evalbytestring not Nil/Cons");+ }+ }+ buf[offs] = 0; /* in case we use it as a C string */+ bs.size = offs;+ bs.string = buf;+ return bs;+}++struct bytestring+bsreplicate(size_t size, uint8_t value)+{+ struct bytestring bs;+ bs.size = size;+ bs.string = mmalloc(size);+ memset(bs.string, value, size);+ return bs;+}++struct bytestring+bsappend(struct bytestring p, struct bytestring q)+{+ struct bytestring r;+ r.size = p.size + q.size;+ r.string = mmalloc(r.size);+ memcpy(r.string, p.string, p.size);+ memcpy((uint8_t *)r.string + p.size, q.string, q.size);+ return r;+}++struct bytestring+bsappenddot(struct bytestring p, struct bytestring q)+{+ struct bytestring r;+ r.size = p.size + q.size + 1;+ r.string = mmalloc(r.size);+ memcpy(r.string, p.string, p.size);+ memcpy((uint8_t *)r.string + p.size, ".", 1);+ memcpy((uint8_t *)r.string + p.size + 1, q.string, q.size);+ return r;+}++/*+ * Compare bytestrings.+ * We can't use memcmp() directly for two reasons:+ * - the two strings can have different lengths+ * - the return value is only guaranteed to be ==0 or !=0+ */+int+bscompare(struct bytestring bsp, struct bytestring bsq)+{+ uint8_t *p = bsp.string;+ uint8_t *q = bsq.string;+ size_t len = bsp.size < bsq.size ? bsp.size : bsq.size;+ while (len--) {+ int r = (int)*p++ - (int)*q++;+ if (r) {+ /* Unequal bytes found. */+ if (r < 0)+ return -1;+ if (r > 0)+ return 1;+ return 0;+ }+ }+ /* Got to the end of the shorter string. */+ /* The shorter string is considered smaller. */+ if (bsp.size < bsq.size)+ return -1;+ if (bsp.size > bsq.size)+ return 1;+ return 0;+}++/* Compares anything, but really only works well on strings.+ * if p < q return -1+ * if p > q return 1+ * if p == q return 0+ *+ * As we compare we update the argument pointers with any+ * progress we make, in case we are interruped and resume from the top.+ *+ * XXX This is a rather dodgy comparison, since we are comparing+ * functions, and the same data type could plausibly get different+ * functions in the Scott encoding.+ * But we only use it for lists, and it seems to work fine.+ */+int+compare(NODEPTR cmp)+{+ stackptr_t stk = stack_ptr;+#define CRET(x) do { stack_ptr = stk; return (x); } while(0)+ value_t x, y;+ flt_t xd, yd;+ void *f, *g;+ void (*ff)(void), (*fg)(void);+ NODEPTR p, q;+ NODEPTR *ap, *aq;+ enum node_tag ptag, qtag;+ int r;++ /* Since FUN(cmp) can be shared, allocate a copy for it. */+ GCCHECK(1);+ FUN(cmp) = new_ap(FUN(FUN(cmp)), ARG(FUN(cmp)));+ aq = &ARG(cmp);+ ap = &ARG(FUN(cmp));++ PUSH(*ap);+ PUSH(*aq);+ for(;;) {+ if (stk == stack_ptr)+ return 0;+ q = evali(TOP(0));+ p = evali(TOP(1));+ POP(2);+ if (stk == stack_ptr) {+ /* We have made some progress, save this in the compare node. */+ *ap = p;+ *aq = q;+ }++ ptag = GETTAG(p);+ qtag = GETTAG(q);+ if (ptag != qtag) {+ /* Hack to make Nil < Cons */+ if (ptag == T_K && qtag == T_AP)+ CRET(-1);+ if (ptag == T_AP && qtag == T_K)+ CRET(1);+ CRET(ptag < qtag ? -1 : 1);+ }+ switch (ptag) {+ case T_AP:+ PUSH(ARG(p)); /* compare arg part later */+ PUSH(ARG(q));+ PUSH(FUN(p)); /* compare fun part now */+ PUSH(FUN(q));+ break;+ case T_INT:+ case T_IO_CCALL:+ case T_THID:+ x = GETVALUE(p);+ y = GETVALUE(q);+ if (x < y)+ CRET(-1);+ if (x > y)+ CRET(1);+ break;+ case T_DBL:+ xd = GETDBLVALUE(p);+ yd = GETDBLVALUE(q);+ if (xd < yd)+ CRET(-1);+ if (xd > yd)+ CRET(1);+ break;+ case T_PTR:+ f = PTR(p);+ g = PTR(q);+ if (f < g)+ CRET(-1);+ if (f > g)+ CRET(1);+ break;+ case T_FUNPTR:+ ff = FUNPTR(p);+ fg = FUNPTR(q);+ if ((intptr_t)ff < (intptr_t)fg)+ CRET(-1);+ if ((intptr_t)ff > (intptr_t)fg)+ CRET(1);+ break;+ case T_FORPTR:+ {+ struct forptr *fp = FORPTR(p);+ struct forptr *fq = FORPTR(q);+#if WANT_GMP+ if (fp->finalizer->fptype == FP_MPZ && fq->finalizer->fptype == FP_MPZ) {+ int i = mpz_cmp(fp->payload.string, fq->payload.string);+ if (i < 0)+ CRET(-1);+ if (i > 0)+ CRET(1);+ } else+#endif+ if (fp->finalizer->fptype == FP_BSTR && fq->finalizer->fptype == FP_BSTR) {+ r = bscompare(BSTR(p), BSTR(q));+ if (r)+ CRET(r);+ } else {+ f = fp->payload.string;+ g = fq->payload.string;+ if (f < g)+ CRET(-1);+ if (f > g)+ CRET(1);+ }+ }+ break;+ case T_ARR:+ if (ARR(p) < ARR(q))+ CRET(-1);+ if (ARR(p) > ARR(q))+ CRET(1);+ break;+ default:+ break;+ }+ }+#undef CRET+}++void+rnf_rec(bits_t *done, NODEPTR n)+{+ top:+ if (test_bit(done, n))+ return;+ set_bit(done, n);+ n = evali(n);+ if (GETTAG(n) == T_AP) {+ PUSH(ARG(n)); /* protect from GC */+ rnf_rec(done, FUN(n));+ n = POPTOP();+ goto top;+ }+}++void+rnf(value_t noerr, NODEPTR n)+{+ /* Mark visited nodes to avoid getting stuck in loops. */+ bits_t *done = mcalloc(free_map_nwords, sizeof(bits_t));+ if (doing_rnf)+ ERR("recursive rnf()");+ doing_rnf = (int)noerr;+ rnf_rec(done, n);+ doing_rnf = 0;+ FREE(done);+}++/* Evaluate a node, returns when the node is in WHNF. */+NODEPTR+evali(NODEPTR an)+{+ NODEPTR n = an;+ stackptr_t stk = stack_ptr;+ NODEPTR x, y, z, w;+ value_t xi, yi, r;+ struct forptr *xfp;+#if WANT_FLOAT+ flt_t xd, rd;+#endif /* WANT_FLOAT */+ char *msg;+ heapoffs_t l;+ enum node_tag tag;+ struct ioarray *arr;+ struct bytestring xbs, ybs, rbs;+#if WANT_STDIO+ void *bfile;+ int hdr;+#endif /* WANT_STDIO */++#if MAXSTACKDEPTH+ counter_t old_cur_c_stack = cur_c_stack;+ if (++cur_c_stack > max_c_stack)+ max_c_stack = cur_c_stack;+#endif++/* Reset stack pointer and return. */+#define RET do { goto ret; } while(0)+#define HASNARGS(n) (stack_ptr - stk >= (n))+/* Check that there are at least n arguments, return if not. */+#define CHECK(n) do { if (!HASNARGS(n)) RET; } while(0)++#define SETIND(n, x) SETINDIR(n, x)+#define GOIND(x) do { NODEPTR _x = (x); SETIND(n, _x); n = _x; goto top; } while(0)+#define GOAP(f,a) do { FUN(n) = (f); ARG(n) = (a); goto ap; } while(0)+#define GOAP2(f,a,b) do { FUN(n) = new_ap((f), (a)); ARG(n) = (b); goto ap2; } while(0)+#define GOPAIR(a) do { FUN(n) = new_ap(combPair, (a)); goto ap; } while(0)+#define GOPAIRUNIT do { FUN(n) = combPairUnit; goto ap; } while(0)+/* CHKARGN checks that there are at least N arguments.+ * It also+ * - sets n to the "top" node+ * - set x, y, ... to the arguments+ * - pops N stack elements+ * NOTE: No GC is allowed after these, since the stack has been popped.+ */+#define CHKARG0 do { } while(0)+#define CHKARG1 do { CHECK(1); POP(1); n = TOP(-1); x = ARG(n); } while(0)+#define CHKARG2 do { CHECK(2); POP(2); n = TOP(-1); y = ARG(n); x = ARG(TOP(-2)); } while(0)+#define CHKARG3 do { CHECK(3); POP(3); n = TOP(-1); z = ARG(n); y = ARG(TOP(-2)); x = ARG(TOP(-3)); } while(0)+#define CHKARG4 do { CHECK(4); POP(4); n = TOP(-1); w = ARG(n); z = ARG(TOP(-2)); y = ARG(TOP(-3)); x = ARG(TOP(-4)); } while(0)+#define CHKARG5 do { CHECK(5); POP(5); n = TOP(-1); /*v = ARG(n);*/ w = ARG(TOP(-2)); z = ARG(TOP(-3)); y = ARG(TOP(-4)); x = ARG(TOP(-5)); } while(0)+/* Non-popping versions */+#define CHKARG1NP do { CHECK(1); n = TOP(0); x = ARG(n); } while(0)+#define CHKARG2NP do { CHECK(2); n = TOP(1); y = ARG(n); x = ARG(TOP(0)); } while(0)+#define CHKARG3NP do { CHECK(3); n = TOP(2); z = ARG(n); y = ARG(TOP(1)); x = ARG(TOP(0)); } while(0)+#define CHKARG4NP do { CHECK(4); n = TOP(3); w = ARG(n); z = ARG(TOP(2)); y = ARG(TOP(1)); x = ARG(TOP(0)); } while(0)++/* Alloc a possible GC action, e, between setting x and popping */+#define CHKARGEV1(e) do { CHECK(1); x = ARG(TOP(0)); e; POP(1); n = TOP(-1); } while(0)++#define SETINT(n,r) do { SETTAG((n), T_INT); SETVALUE((n), (r)); } while(0)+#define SETDBL(n,d) do { SETTAG((n), T_DBL); SETDBLVALUE((n), (d)); } while(0)+#define SETPTR(n,r) do { SETTAG((n), T_PTR); PTR(n) = (r); } while(0)+#define SETFUNPTR(n,r) do { SETTAG((n), T_FUNPTR); FUNPTR(n) = (r); } while(0)+#define SETFORPTR(n,r) do { SETTAG((n), T_FORPTR); FORPTR(n) = (r); } while(0)+#define SETBSTR(n,r) do { SETTAG((n), T_FORPTR); FORPTR(n) = (r); FORPTR(n)->finalizer->fptype = FP_BSTR; } while(0)+#define OPINT1(e) do { CHECK(1); xi = evalint(ARG(TOP(0))); e; POP(1); n = TOP(-1); } while(0);+#define OPPTR2(e) do { CHECK(2); xp = evalptr(ARG(TOP(0))); yp = evalptr(ARG(TOP(1))); e; POP(2); n = TOP(-1); } while(0);+#define CMPP(op) do { OPPTR2(r = xp op yp); GOIND(r ? combTrue : combFalse); } while(0)++ top:+ /*pp(stdout, an);*/+ if (--glob_slice <= 0)+ yield();+ l = LABEL(n);+ if (l < T_IO_STDIN) {+ /* The node is one of the permanent nodes; the address offset is the tag */+ tag = l;+ } else {+ /* Heap allocated node */+ if (ISINDIR(n)) {+ /* Follow indirections */+ NODEPTR on = n;+ do {+ n = GETINDIR(n);+ } while(ISINDIR(n));+ SETINDIR(on, n); /* and short-circuit them */+ }+ tag = GETTAG(n);+ }+ //COUNT(num_reductions);+ //printf("%s %d\n", tag_names[tag], (int)stack_ptr);+ //if (stack_ptr < -1)+ // ERR("stack_ptr");+ switch (tag) {+ ap2: PUSH(n); n = FUN(n);+ ap:+ case T_AP: PUSH(n);+ n = FUN(n); goto top;++ case T_INT: RET;+ case T_DBL: RET;+ case T_PTR: RET;+ case T_FUNPTR: RET;+ case T_FORPTR: RET;+ case T_ARR: RET;+ case T_THID: RET;+ case T_MVAR: RET;+ case T_BADDYN: ERR1("FFI unknown %s", CSTR(n));++ /*+ * Some of these reductions, (e.g., Z x y = K (x y)) are there to avoid+ * that increase in arity that some "optimizations" in Abstract.hs+ * stop reductions from happening. This can be important for "full laziness".+ * In practice, these reductions almost never happen, but there they are anyway. :)+ */+ case T_S: GCCHECK(2); CHKARG3; GOAP2(x, z, new_ap(y, z)); /* S x y z = x z (y z) */+ case T_SS: GCCHECK(3); CHKARG4; GOAP2(x, new_ap(y, w), new_ap(z, w)); /* S' x y z w = x (y w) (z w) */+ case T_K: CHKARG2; GOIND(x); /* K x y = *x */+ case T_A: CHKARG2; GOIND(y); /* A x y = *y */+ case T_U: CHKARG2; GOAP(y, x); /* U x y = y x */+ case T_I: CHKARG1; GOIND(x); /* I x = *x */+ case T_Y: CHKARG1; GOAP(x, n); /* n@(Y x) = x n */+ case T_B: GCCHECK(1); CHKARG3; GOAP(x, new_ap(y, z)); /* B x y z = x (y z) */+ case T_BB: if (!HASNARGS(4)) {+ GCCHECK(1); CHKARG2; COUNT(red_bb); GOAP(combB, new_ap(x, y)); } else { /* B' x y = B (x y) */+ GCCHECK(2); CHKARG4; GOAP2(x, y, new_ap(z, w)); } /* B' x y z w = x y (z w) */+ case T_Z: if (!HASNARGS(3)) {+ GCCHECK(1); CHKARG2; COUNT(red_z); GOAP(combK, new_ap(x, y)); } else { /* Z x y = K (x y) */+ CHKARG3; GOAP(x, y); } /* Z x y z = x y */+//case T_J: CHKARG3; GOAP(z, x); /* J x y z = z x */+ t_c:+ case T_C: GCCHECK(1); CHKARG3; GOAP2(x, z, y); /* C x y z = x z y */+ case T_CC: GCCHECK(2); CHKARG4; GOAP2(x, new_ap(y, w), z); /* C' x y z w = x (y w) z */+ t_p:+ case T_P: GCCHECK(1); CHKARG3; GOAP2(z, x, y); /* P x y z = z x y */+ case T_R: if(!HASNARGS(3)) {+ GCCHECK(1); CHKARG2; COUNT(red_r); GOAP2(combC, y, x); } else { /* R x y = C y x */+ GCCHECK(1); CHKARG3; GOAP2(y, z, x); } /* R x y z = y z x */+ case T_O: GCCHECK(1); CHKARG4; GOAP2(w, x, y); /* O x y z w = w x y */+ case T_K2: if (!HASNARGS(3)) {+ CHKARG2; COUNT(red_k2); GOAP(combK, x); } else { /* K2 x y = K x */+ CHKARG3; GOIND(x); } /* K2 x y z = *x */+ case T_K3: if (!HASNARGS(4)) {+ CHKARG2; COUNT(red_k3); GOAP(combK2, x); } else { /* K3 x y = K2 x */+ CHKARG4; GOIND(x); } /* K3 x y z w = *x */+ case T_K4: if (!HASNARGS(5)) {+ CHKARG2; COUNT(red_k4); GOAP(combK3, x); } else { /* K4 x y = K3 x */+ CHKARG5; GOIND(x); } /* K4 x y z w v = *x */+ case T_CCB: if (!HASNARGS(4)) {+ GCCHECK(2); CHKARG3; COUNT(red_ccb); GOAP2(combB, new_ap(x, z), y);} else{ /* C'B x y z = B (x z) y */+ GCCHECK(2); CHKARG4; GOAP2(x, z, new_ap(y, w)); } /* C'B x y z w = x z (y w) */++ /*+ * Strict primitives require evaluating the arguments before we can proceed.+ * The easiest way to do this is to just recursively call evali() for each argument.+ * The drawback of this is that it uses a lot of C stack. (E.g., recompiling MicroHs+ * uses a stack depth of 1800).+ * Instead we use the following scheme:+ * When we find a strict binary (int) primitive we push T_BININT2,+ * set n=second argument.+ * Continue evaluation of n.+ * When n is finally evaluated and we are about to return we check if the stack top is T_BININT2.+ * If so, change the stack top to T_BININT1,+ * set n=first argument.+ * Continue evaluation of n.+ * When n is finally evaluated and we are about to return we check if the stack top is T_BININT1.+ * If so, we know that both arguments are now evaluated, and we perform the strict operation.+ *+ * On my desktop machine this is about 3% slower, on my laptop (Apple M1) it is about 3% faster.+ *+ * Pictorially for BININT+ * Before the code below:+ * ----+ * | --------> @+ * ---- / \+ * | ------> @ y+ * ---- / \+ * n ----> ADD x+ *+ * After+ * ----+ * | --------> @+ * ---- / \+ * | ------> @ y+ * ---- / \+ * | ->BI2 ADD x+ * ---- ^+ * n ----------|+ *+ * x becomes an INT, stack is not empty, BININT2 found on top+ * ----+ * | --------> @+ * ---- / \+ * | ------> @ y+ * ---- / \+ * | ->BI2 ADD INT+ * ---- ^+ * n ----------|+ *+ * After+ * ----+ * | --------> @+ * ---- / \+ * | ------> @ y+ * ---- / \ \+ * | ->BI1 ADD INT |+ * ---- |+ * n ---------------|+ *+ * y becomes an INT, stack is not empty, BININT1 found on top+ * do arithmetic+ * ----+ * | --------> @+ * ---- / \+ * | ------> @ INT+ * ---- / \ \+ * | ->BI1 ADD INT |+ * ---- |+ * n ---------------|+ *+ * ----+ * n -------> INT(x+y)+ */+ case T_ADD:+ case T_SUB:+ case T_MUL:+ case T_QUOT:+ case T_REM:+ case T_SUBR:+ case T_UQUOT:+ case T_UREM:+ case T_AND:+ case T_OR:+ case T_XOR:+ case T_SHL:+ case T_SHR:+ case T_ASHR:+ case T_EQ:+ case T_NE:+ case T_LT:+ case T_LE:+ case T_GT:+ case T_GE:+ case T_ICMP:+ case T_ULT:+ case T_ULE:+ case T_UGT:+ case T_UGE:+ case T_UCMP:+ CHECK(2);+ n = ARG(TOP(1));+ if (GETTAG(n) == T_INT) {+ n = ARG(TOP(0));+ PUSH(combBININT1);+ if (GETTAG(n) == T_INT)+ goto binint1;+ } else {+ PUSH(combBININT2);+ }+ goto top;+ case T_NEG:+ case T_INV:+ case T_POPCOUNT:+ case T_CLZ:+ case T_CTZ:+ CHECK(1);+ n = ARG(TOP(0));+ PUSH(combUNINT1);+ goto top;++#if WANT_FLOAT+ case T_FADD:+ case T_FSUB:+ case T_FMUL:+ case T_FDIV:+ case T_FEQ:+ case T_FNE:+ case T_FLT:+ case T_FLE:+ case T_FGT:+ case T_FGE:+ CHECK(2);+ n = ARG(TOP(1));+ PUSH(combBINDBL2);+ goto top;+ case T_FNEG:+ CHECK(1);+ n = ARG(TOP(0));+ PUSH(combUNDBL1);+ goto top;++ case T_ITOF: OPINT1(rd = (flt_t)xi); SETDBL(n, rd); RET;+ case T_FREAD:+ CHECK(1);+ msg = evalstring(ARG(TOP(0))).string;+#if WORD_SIZE == 64+ xd = strtod(msg, NULL);+#elif WORD_SIZE == 32+ xd = strtof(msg, NULL);+#else /* WORD_SIZE */+#error Unknown WORD_SIZE+#endif /* WORD_SIZE */+ FREE(msg);+ POP(1);+ n = TOP(-1);+ SETDBL(n, xd);+ RET;++ case T_FSHOW:+ CHECK(1);+ xd = evaldbl(ARG(TOP(0)));+ POP(1);+ n = TOP(-1);+ GOIND(dblToString(xd));+#endif /* WANT_FLOAT */++ case T_ISINT:+ CHECK(1);+ x = evali(ARG(TOP(0)));+ POP(1);+ n = TOP(-1);+ SETINT(n, GETTAG(x) == T_INT ? GETVALUE(x) : -1);+ RET;++ case T_BSAPPEND:+ case T_BSAPPENDDOT:+ case T_BSEQ:+ case T_BSNE:+ case T_BSLT:+ case T_BSLE:+ case T_BSGT:+ case T_BSGE:+ case T_BSCMP:+ CHECK(2);+ n = ARG(TOP(1));+ PUSH(combBINBS2);+ goto top;++ /* Retag a word sized value, keeping the value bits */+#define CONV(t) do { CHECK(1); x = evali(ARG(TOP(0))); n = POPTOP(); SETTAG(n, t); SETVALUE(n, GETVALUE(x)); RET; } while(0)+ case T_TODBL: CONV(T_DBL);+ case T_TOINT: CONV(T_INT);+ case T_TOPTR: CONV(T_PTR);+ case T_TOFUNPTR: CONV(T_FUNPTR);+#undef CONV++ case T_FPADD: CHECK(2); xfp = evalforptr(ARG(TOP(0))); yi = evalint(ARG(TOP(1))); POP(2); n = TOP(-1); SETFORPTR(n, addForPtr(xfp, yi)); RET;+ case T_FP2P:+ CHECK(1);+ xfp = evalforptr(ARG(TOP(0)));+ POP(1);+ n = TOP(-1);+ SETPTR(n, xfp->payload.string);+ RET;++ case T_FP2BS:+ CHECK(2);+ xfp = evalforptr(ARG(TOP(0)));+ xi = evalint(ARG(TOP(1)));+ POP(2);+ n = TOP(-1);+ xfp->payload.size = xi;+ SETBSTR(n, xfp);+ RET;++ case T_BS2FP:+ CHECK(1);+ xfp = evalbstr(ARG(TOP(0)));+ POP(1);+ n = TOP(-1);+ SETFORPTR(n, xfp);+ RET;++ case T_ARR_EQ:+ {+ CHECK(2);+ x = evali(ARG(TOP(0)));+ arr = ARR(x);+ y = evali(ARG(TOP(1)));+ POP(2);+ n = TOP(-1);+ GOIND(arr == ARR(y) ? combTrue : combFalse);+ }++ case T_BSTOUTF8:+ {+ CHECK(1);+ n = ARG(TOP(0));+ /* Zap the pointer to the list so it can be GC:ed.+ * The actual list is protected from GC by evalbytestring().+ */+ // ARG(TOP(0)) = combK;+ struct bytestring bs = evalstring(n);+ POP(1);+ n = TOP(-1);+ SETBSTR(n, mkForPtrFree(bs));+ RET;+ }++ case T_BSHEADUTF8:+ CHECK(1);+ xfp = evalbstr(ARG(TOP(0)));+ POP(1);+ n = TOP(-1);+ SETINT(n, headutf8(xfp->payload, (void**)0));+ RET;++ case T_BSTAILUTF8:+ CHECK(1);+ xfp = evalbstr(ARG(TOP(0)));+ POP(1);+ n = TOP(-1);+ { void *out;+ (void)headutf8(xfp->payload, &out); /* skip one UTF8 character */+ xi = (char*)out - (char*)xfp->payload.string; /* offset */+ yi = xfp->payload.size - xi; /* remaining length */+ SETBSTR(n, bssubstr(xfp, xi, yi)); /* make a substring */+ }+ RET;++ case T_BSFROMUTF8:+ if (doing_rnf) RET;+ CHECK(1);++ xfp = evalbstr(ARG(TOP(0)));+ GCCHECK(strNodes(xfp->payload.size));+ POP(1);+ n = TOP(-1);+ //printf("T_FROMUTF8 x = %p fp=%p payload.string=%p\n", x, x->uarg.uuforptr, x->uarg.uuforptr->payload.string);+ GOIND(mkStringU(xfp->payload));++ case T_BSUNPACK:+ if (doing_rnf) RET;+ CHECK(1);+ struct forptr *xfp = evalbstr(ARG(TOP(0)));+ GCCHECK(strNodes(xfp->payload.size));+ POP(1);+ n = TOP(-1);+ GOIND(bsunpack(xfp->payload));++ case T_BSPACK:+ CHECK(1);+ n = ARG(TOP(0));+ /* Zap the pointer to the list so it can be GC:ed.+ * The actual list is protected from GC by evalbytestring().+ */+ ARG(TOP(0)) = combK;+ struct bytestring rbs = evalbytestring(n);+ POP(1);+ n = TOP(-1);+ SETBSTR(n, mkForPtrFree(rbs));+ RET;++ case T_BSREPLICATE:+ CHECK(2);+ xi = evalint(ARG(TOP(0)));+ yi = evalint(ARG(TOP(1)));+ POP(2);+ n = TOP(-1);+ SETBSTR(n, mkForPtrFree(bsreplicate(xi, yi)));+ RET;++ case T_BSLENGTH:+ CHECK(1);+ xfp = evalbstr(ARG(TOP(0)));+ POP(1);+ n = TOP(-1);+ SETINT(n, xfp->payload.size);+ RET;++ case T_BSSUBSTR:+ CHECK(3);+ xfp = evalbstr(ARG(TOP(0)));+ xi = evalint(ARG(TOP(1)));+ yi = evalint(ARG(TOP(2)));+ POP(3);+ n = TOP(-1);+ SETBSTR(n, bssubstr(xfp, xi, yi));+ RET;++ case T_BSINDEX:+ CHECK(2);+ xfp = evalbstr(ARG(TOP(0)));+ xi = evalint(ARG(TOP(1)));+ POP(2);+ n = TOP(-1);+ SETINT(n, ((uint8_t *)xfp->payload.string)[xi]);+ RET;++ case T_RAISE:+ if (doing_rnf) RET;+ CHKARG1;+ raise_exn(x); /* never returns */+ ++ case T_SEQ: CHECK(2); evali(ARG(TOP(0))); POP(2); n = TOP(-1); y = ARG(n); GOIND(y); /* seq x y = eval(x); y */++ case T_EQUAL:+ CHECK(2); r = compare(TOP(1)); POP(2); n = TOP(-1); GOIND(r==0 ? combTrue : combFalse);+ case T_COMPARE:+ CHECK(2); r = compare(TOP(1)); POP(2); n = TOP(-1); GOIND(r < 0 ? combLT : r > 0 ? combGT : combEQ);++ case T_RNF:+ if (doing_rnf) RET;+ CHECK(2);+ xi = evalint(ARG(TOP(0)));+ rnf(xi, ARG(TOP(1))); POP(2); n = TOP(-1); GOIND(combUnit);++ case T_IO_PERFORMIO:+ GCCHECK(2);+ if (doing_rnf) RET;+ CHKARG1;+ /* Conjure up a new world and evaluate the io with that world, finally selecting the result */+ /* PERFORMIO io --> io World K */+ GOAP2(x, combWorld, combK);++ case T_IO_BIND:+ goto t_c;+ case T_IO_RETURN:+ goto t_p;+ case T_IO_THEN:+ GCCHECK(2); CHKARG2; GOAP2(combIOBIND, x, new_ap(combK, y));+#if WANT_STDIO+ case T_IO_PP:+ CHKARG2;+ pp(stderr, x);+ GOPAIRUNIT;+ case T_IO_PRINT:+ hdr = 0;+ goto ser;+ case T_IO_SERIALIZE:+ hdr = 1;+ ser:+#if 0+ gc(); /* DUBIOUS: do a GC to get possible GC reductions */+#endif+ CHKARG3NP;+ bfile = (struct BFILE*)evalptr(x);+ printb(bfile, evali(y), hdr);+ putb('\n', bfile);+ POP(3);+ GOPAIRUNIT;+ case T_IO_DESERIALIZE:+ CHKARG2NP;+ bfile = (struct BFILE*)evalptr(x);+ gc(); /* make sure we have room. GC during parse is dodgy. */+ x = parse_top(bfile);+ POP(2);+ GOPAIR(x); /* allocates a cell, but we did a GC above */+#endif+#if WANT_ARGS+ case T_IO_GETARGREF:+ GCCHECK(2);+ CHKARG1;+ x = alloc_node(T_ARR);+ ARR(x) = argarray;+ GOPAIR(x);+#endif+ case T_IO_CCALL:+ {+ GCCHECK(1); /* room for placeholder */+ int a = (int)GETVALUE(n); /* function number */+ int arity = FFI_IX(a).ffi_arity;+ CHECK(arity);+ funptr_t f = FFI_IX(a).ffi_fun;+ PUSH(mkFlt(0.0)); /* placeholder for result, protected from GC */+ int k = f(stk); /* call FFI function, return number of arguments */+ if (k != arity) {+#if WANT_STDIO+ fprintf(stderr, "ccall arity %s %d!=%d\n", FFI_IX(a).ffi_name, arity, k);+#endif+ ERR("ccall arity"); /* temporary sanity check */+ }+ GCCHECK(1); /* room for pair */+ x = POPTOP(); /* pop actual result */+ POP(arity); /* pop the pushed arguments */+ if (stack_ptr < 0)+ ERR("CCALL POP");+ n = POPTOP(); /* node to update */+ GOPAIR(x); /* and this is the result */+ }++ case T_NEWCASTRINGLEN:+ {+ CHKARG2NP; /* set x,y,n */+ struct bytestring bs = evalbytestring(x);+ GCCHECK(5);+ NODEPTR cs = alloc_node(T_PTR);+ PTR(cs) = bs.string;+ NODEPTR res = new_ap(new_ap(combPair, cs), mkInt(bs.size));+ POP(2);+ GOPAIR(res);+ }+ case T_PACKCSTRING:+ {+ CHKARG2NP; /* sets x, y, n */+ char *cstr = evalptr(x);+ size_t size = strlen(cstr);+ char *str = mmalloc(size);+ memcpy(str, cstr, size);+ struct bytestring bs = { size, str };+ NODEPTR res = mkStrNode(bs);+ GCCHECKSAVE(res, 1);+ POP(2);+ GOPAIR(res);+ }+ case T_PACKCSTRINGLEN:+ {+ CHKARG3NP; /* sets x,y,z,n */+ char *cstr = evalptr(x);+ size_t size = evalint(y);+ char *str = mmalloc(size);+ memcpy(str, cstr, size);+ struct bytestring bs = { size, str };+ NODEPTR res = mkStrNode(bs);+ POP(3);+ GCCHECKSAVE(res, 1);+ GOPAIR(res);+ }++ case T_ARR_ALLOC:+ {+ CHKARG3NP; /* sets x,y,z,n */+ size_t size = evalint(x);+ struct ioarray *arr = arr_alloc(size, y);+ GCCHECK(2);+ NODEPTR res = alloc_node(T_ARR);+ ARR(res) = arr;+ POP(3);+ GOPAIR(res);+ }+ case T_ARR_COPY:+ {+ CHKARG2NP;+ NODEPTR a = evali(x);+ if (GETTAG(a) != T_ARR)+ ERR("T_ARR_COPY tag");+ struct ioarray *arr = arr_copy(ARR(a));+ GCCHECK(2);+ NODEPTR res = alloc_node(T_ARR);+ ARR(res) = arr;+ POP(2);+ GOPAIR(res);+ }+ case T_ARR_SIZE:+ {+ CHKARG2NP;+ NODEPTR a = evali(x);+ if (GETTAG(a) != T_ARR)+ ERR("bad ARR tag");+ GCCHECK(2);+ NODEPTR res = mkInt(ARR(a)->size);+ POP(2);+ GOPAIR(res);+ }+ case T_ARR_READ:+ {+ CHKARG3NP; /* sets x,y,n */+ size_t i = evalint(y);+ NODEPTR a = evali(x);+ if (GETTAG(a) != T_ARR)+ ERR("bad ARR tag");+ if (i >= ARR(a)->size)+ ERR("ARR_READ");+ GCCHECK(1);+ NODEPTR res = ARR(a)->array[i];+ POP(3);+ GOPAIR(res);+ }+ case T_ARR_WRITE:+ {+ CHKARG4NP; /* sets x,y,z,n */+ size_t i = evalint(y);+ NODEPTR a = evali(x);+ if (GETTAG(a) != T_ARR)+ ERR("bad ARR tag");+ if (i >= ARR(a)->size) {+ ERR("ARR_WRITE");+ }+ ARR(a)->array[i] = z;+ POP(4);+ GOPAIRUNIT;+ }++ case T_FPNEW:+ {+ CHKARG2NP;+ //printf("T_FPNEW\n");+ void *xp = evalptr(x);+ //printf("T_FPNEW xp=%p\n", xp);+ GCCHECK(2);+ NODEPTR res = alloc_node(T_FORPTR);+ SETFORPTR(res, mkForPtrP(xp));+ POP(2);+ GOPAIR(res);+ }+ case T_FPFIN:+ {+ CHKARG3NP;+ //printf("T_FPFIN\n");+ struct forptr *xfp = evalforptr(y);+ //printf("T_FPFIN xfp=%p\n", xfp);+ HsFunPtr xp = evalfunptr(x);+ //printf("T_FPFIN yp=%p\n", yp);+ xfp->finalizer->final = xp;+ POP(3);+ GOPAIRUNIT;+ }+ case T_IO_GC:+ //printf("gc()\n");+ CHKARG1;+ gc();+ GOPAIRUNIT;++ case T_IO_FORK:+ {+ GCCHECK(3);+ CHKARG2; /* set x=io, y=ST, n */+ struct mthread *mt = new_thread(new_ap(x, y)); /* copy the world */+ mt->mt_mask = runq.mq_head->mt_mask; /* inherit masking state */+ NODEPTR res = alloc_node(T_THID);+ THR(res) = mt;+ GOPAIR(res);+ }++ case T_IO_THID:+ {+ GCCHECK(2);+ CHKARG1;+ NODEPTR res = alloc_node(T_THID);+ THR(res) = runq.mq_head; /* head of the run queue is the current thread */+ GOPAIR(res);+ }+ case T_IO_THROWTO:+ {+ CHKARG3NP; /* x=this, y=exn, z=ST */+ struct mthread *mt = evalthid(x);+ throwto(mt, y);+ POP(3);+ GOPAIRUNIT;+ }+ case T_IO_YIELD:+ CHKARG1;+ yield();+ GOPAIRUNIT;++ case T_IO_NEWMVAR:+ {+ GCCHECK(2);+ CHKARG1;+ struct mvar *mv = new_mvar();+ NODEPTR res = alloc_node(T_MVAR);+ MVAR(res) = mv;+ GOPAIR(res);+ }+ case T_IO_TAKEMVAR:+ {+ CHKARG2NP; /* set x=mvar, y=ST */+ check_thrown(); /* check if we have a thrown exception */+ NODEPTR res = take_mvar(0, evalmvar(x)); /* never returns if it blocks */+ GCCHECKSAVE(res, 1);+ POP(2);+ GOPAIR(res);+ }+ case T_IO_READMVAR:+ {+ CHKARG2NP;+ check_thrown(); /* check if we have a thrown exception */+ NODEPTR res = read_mvar(0, evalmvar(x)); /* never returns if it blocks */+ GCCHECKSAVE(res, 1);+ POP(2);+ GOPAIR(res);+ }+ case T_IO_PUTMVAR:+ {+ CHKARG3NP; /* set x=mvar, y=value, z=ST */+ check_thrown(); /* check if we have a thrown exception */+ (void)put_mvar(0, evalmvar(x), y); /* never returns if it blocks */+ POP(3);+ GOPAIRUNIT;+ }+ case T_IO_TRYTAKEMVAR:+ {+ CHKARG2NP;+ NODEPTR res = take_mvar(1, evalmvar(x));+ GCCHECKSAVE(res, 2);+ if (res != NIL)+ res = new_ap(combJust, res);+ else+ res = combNothing;+ POP(2);+ GOPAIR(res);+ }+ case T_IO_TRYREADMVAR:+ {+ CHKARG2NP;+ NODEPTR res = read_mvar(1, evalmvar(x));+ if (res != NIL) {+ GCCHECKSAVE(res, 2);+ res = new_ap(combJust, res);+ } else {+ res = combNothing;+ }+ POP(2);+ GOPAIR(res);+ }+ case T_IO_TRYPUTMVAR:+ {+ CHKARG3NP;+ NODEPTR res = put_mvar(1, evalmvar(x), y) ? combTrue : combFalse;+ GCCHECKSAVE(res, 1);+ POP(3);+ GOPAIR(res);+ }+ case T_IO_THREADDELAY:+ {+ CHKARG2NP;+#if defined(CLOCK_INIT)+ check_thrown(); /* check if we have a thrown exception */+ if (runq.mq_head->mt_at == -1) {+ /* delay has already expired, so just return */+ runq.mq_head->mt_at = 0;+ POP(2);+ GOPAIRUNIT;+ } else {+ thread_delay(evalint(x)); /* never returns */+ }+#else+ ERR("threadDelay: no clock");+#endif+ }+ case T_IO_THREADSTATUS:+ {+ CHKARG2NP;+ struct mthread *mt = evalthid(x);+ GCCHECK(2);+ POP(2);+ GOPAIR(mkInt(mt->mt_state));+ }+ case T_IO_GETMASKINGSTATE:+ CHKARG1; /* x = ST */+ GOPAIR(mkInt(runq.mq_head->mt_mask));++ case T_IO_SETMASKINGSTATE:+ CHKARG2; /* x = level, y = ST */+ runq.mq_head->mt_mask = evalint(x);+ GOPAIRUNIT;++ case T_CATCH:+ /* CATCH x y z --> CATCHR (x z) y z */+ GCCHECK(3);+ CHKARG3; /* x=io, y=hdl, z=ST */+ GOAP(new_ap(new_ap(combCATCHR, new_ap(x, z)), y), z);+ case T_CATCHR:+ {+ CHKARG3NP; /* x = (io st), y = hdl, z = st, n = (CATCHR (io st)) h */+ struct handler *h = mmalloc(sizeof *h);+ h->hdl_old = cur_handler;+ cur_handler = h;+ stackptr_t ostack = stack_ptr;; /* old stack pointer */+ enum mask_state omask = runq.mq_head->mt_mask; /* old mask */+ if (setjmp(h->hdl_buf)) {+ /* An exception occurred: */+ stack_ptr = ostack;+ runq.mq_head->mt_mask = mask_interruptible; /* evaluate with mask */+ NODEPTR exn = h->hdl_exn; /* exception value */+ cur_handler = h->hdl_old; /* reset handler */+ FREE(h);+ GCCHECK(8);+ POP(3);+ /*+ * Run:+ * hdl exn `primBind` \ r ->+ * primSetMaskingState omask `primThen`+ * primReturn r+ * i.e.,+ * primBind (hdl exn) (B' primThen (primSetMaskingState omask) primReturn)+ */+ NODEPTR p = new_ap(combIOBIND, new_ap(y, exn));+ NODEPTR q = new_ap(new_ap(new_ap(combBB, combIOTHEN), new_ap(combSETMASKINGSTATE, mkInt(omask))), combIORETURN);+ GOAP2(p, q, z);+ } else {+ /* Normal execution: */+ x = evali(x); /* execute first argument */+ /* No exception occurred */+ cur_handler = h->hdl_old; /* restore old handler */+ FREE(h);+ POP(3);+ GOIND(x);+ }+ }++ case T_THNUM:+ {+ CHECK(1);+ struct mthread *mt = evalthid(ARG(TOP(0)));+ POP(1);+ n = TOP(-1);+ SETINT(n, (uvalue_t)mt->mt_id);+ RET;+ }++ case T_DYNSYM:+ /* A dynamic FFI lookup */+ CHECK(1);+ msg = evalstring(ARG(TOP(0))).string;+ GCCHECK(1);+ x = ffiNode(msg);+ FREE(msg);+ POP(1);+ n = TOP(-1);+ GOIND(x);++#if WANT_TICK+ case T_TICK:+ xi = GETVALUE(n);+ CHKARG1;+ dotick(xi);+ GOIND(x);+#endif++ default:+ ERR1("eval tag %s", tag_names[GETTAG(n)]);+ }+++ ret:+ if (stack_ptr != stk) {+ // In this case, n was an AP that got pushed and potentially+ // updated.+ uvalue_t xu, yu, ru;+#if WANT_FLOAT+ flt_t xd, yd, rd;+#endif /* WANT_FLOAT */+ NODEPTR p;++ tag = GETTAG(TOP(0));+ switch (tag) {+ case T_BININT2:+ n = ARG(TOP(1));+ TOP(0) = combBININT1;+ goto top;++ case T_BININT1:+ /* First argument */+#if SANITY+ if (GETTAG(n) != T_INT)+ ERR("BININT 0");+#endif /* SANITY */+ binint1:+ xu = (uvalue_t)GETVALUE(n);+ /* Second argument */+ y = ARG(TOP(2));+ while (GETTAG(y) == T_IND)+ y = GETINDIR(y);+#if SANITY+ if (GETTAG(y) != T_INT)+ ERR("BININT 1");+#endif /* SANITY */+ yu = (uvalue_t)GETVALUE(y);+ p = FUN(TOP(1));+ POP(3);+ n = TOP(-1);+ binint:+ switch (GETTAG(p)) {+ case T_IND: p = GETINDIR(p); goto binint;+ case T_ADD: ru = xu + yu; break;+ case T_SUB: ru = xu - yu; break;+ case T_MUL: ru = xu * yu; break;+ case T_SUBR: ru = yu - xu; break;+ case T_QUOT: if (yu == 0)+ raise_rts(exn_dividebyzero);+ else+ ru = (uvalue_t)((value_t)xu / (value_t)yu);+ break;+ case T_REM: if (yu == 0)+ raise_rts(exn_dividebyzero);+ else+ ru = (uvalue_t)((value_t)xu % (value_t)yu);+ break;+ case T_UQUOT: if (yu == 0)+ raise_rts(exn_dividebyzero);+ else+ ru = xu / yu;+ break;+ case T_UREM: if (yu == 0)+ raise_rts(exn_dividebyzero);+ else+ ru = xu % yu;+ break;+ case T_AND: ru = xu & yu; break;+ case T_OR: ru = xu | yu; break;+ case T_XOR: ru = xu ^ yu; break;+ case T_SHL: ru = xu << yu; break;+ case T_SHR: ru = xu >> yu; break;+ case T_ASHR: ru = (uvalue_t)((value_t)xu >> yu); break;++ case T_EQ: GOIND(xu == yu ? combTrue : combFalse);+ case T_NE: GOIND(xu != yu ? combTrue : combFalse);+ case T_ULT: GOIND(xu < yu ? combTrue : combFalse);+ case T_ULE: GOIND(xu <= yu ? combTrue : combFalse);+ case T_UGT: GOIND(xu > yu ? combTrue : combFalse);+ case T_UGE: GOIND(xu >= yu ? combTrue : combFalse);+ case T_UCMP: GOIND(xu < yu ? combLT : xu > yu ? combGT : combEQ);+ case T_LT: GOIND((value_t)xu < (value_t)yu ? combTrue : combFalse);+ case T_LE: GOIND((value_t)xu <= (value_t)yu ? combTrue : combFalse);+ case T_GT: GOIND((value_t)xu > (value_t)yu ? combTrue : combFalse);+ case T_GE: GOIND((value_t)xu >= (value_t)yu ? combTrue : combFalse);+ case T_ICMP: GOIND((value_t)xu < (value_t)yu ? combLT : (value_t)xu > (value_t)yu ? combGT : combEQ);++ default:+ //fprintf(stderr, "tag=%d\n", GETTAG(FUN(TOP(0))));+ ERR("BININT");+ }+ SETINT(n, (value_t)ru);+ goto ret;++ case T_UNINT1:+ /* The argument */+#if SANITY+ if (GETTAG(n) != T_INT)+ ERR("UNINT 0");+#endif+ xu = (uvalue_t)GETVALUE(n);+ p = FUN(TOP(1));+ POP(2);+ n = TOP(-1);+ unint:+ switch (GETTAG(p)) {+ case T_IND: p = GETINDIR(p); goto unint;+ case T_NEG: ru = -xu; break;+ case T_INV: ru = ~xu; break;+ case T_POPCOUNT: ru = POPCOUNT(xu); break;+ case T_CLZ: ru = CLZ(xu); break;+ case T_CTZ: ru = CTZ(xu); break;+ default:+ //fprintf(stderr, "tag=%d\n", GETTAG(FUN(TOP(0))));+ ERR("UNINT");+ }+ SETINT(n, (value_t)ru);+ goto ret;++#if WANT_FLOAT+ case T_BINDBL2:+ n = ARG(TOP(1));+ TOP(0) = combBINDBL1;+ goto top;++ case T_BINDBL1:+ /* First argument */+#if SANITY+ if (GETTAG(n) != T_DBL)+ ERR("BINDBL 0");+#endif /* SANITY */+ xd = GETDBLVALUE(n);+ /* Second argument */+ y = ARG(TOP(2));+ while (GETTAG(y) == T_IND)+ y = GETINDIR(y);+#if SANITY+ if (GETTAG(y) != T_DBL)+ ERR("BINDBL 1");+#endif /* SANITY */+ yd = GETDBLVALUE(y);+ p = FUN(TOP(1));+ POP(3);+ n = TOP(-1);+ bindbl:+ switch (GETTAG(p)) {+ case T_IND: p = GETINDIR(p); goto bindbl;+ case T_FADD: rd = xd + yd; break;+ case T_FSUB: rd = xd - yd; break;+ case T_FMUL: rd = xd * yd; break;+ case T_FDIV: rd = xd / yd; break;++ case T_FEQ: GOIND(xd == yd ? combTrue : combFalse);+ case T_FNE: GOIND(xd != yd ? combTrue : combFalse);+ case T_FLT: GOIND(xd < yd ? combTrue : combFalse);+ case T_FLE: GOIND(xd <= yd ? combTrue : combFalse);+ case T_FGT: GOIND(xd > yd ? combTrue : combFalse);+ case T_FGE: GOIND(xd >= yd ? combTrue : combFalse);++ default:+ //fprintf(stderr, "tag=%d\n", GETTAG(FUN(TOP(0))));+ ERR("BINDBL");+ }+ SETDBL(n, rd);+ goto ret;++ case T_UNDBL1:+ /* The argument */+#if SANITY+ if (GETTAG(n) != T_DBL)+ ERR("UNDBL 0");+#endif+ xd = GETDBLVALUE(n);+ p = FUN(TOP(1));+ POP(2);+ n = TOP(-1);+ undbl:+ switch (GETTAG(p)) {+ case T_IND: p = GETINDIR(p); goto undbl;+ case T_FNEG: rd = -xd; break;+ default:+ //fprintf(stderr, "tag=%d\n", GETTAG(FUN(TOP(0))));+ ERR("UNDBL");+ }+ SETDBL(n, rd);+ goto ret;+#endif /* WANT_FLOAT */++ case T_BINBS2:+ n = ARG(TOP(1));+ TOP(0) = combBINBS1;+ goto top;++ case T_BINBS1:+ /* First argument */+#if SANITY+ if (GETTAG(n) != T_FORPTR || FORPTR(n)->finalizer->fptype != FP_BSTR)+ ERR("BINBS 0");+#endif /* SANITY */+ xbs = BSTR(n);+ /* Second argument */+ y = ARG(TOP(2));+ while (GETTAG(y) == T_IND)+ y = GETINDIR(y);+#if SANITY+ if (GETTAG(y) != T_FORPTR || FORPTR(y)->finalizer->fptype != FP_BSTR)+ ERR("BINBS 1");+#endif /* SANITY */+ ybs = BSTR(y);+ p = FUN(TOP(1));+ POP(3);+ n = TOP(-1);+ binbs:+ switch (GETTAG(p)) {+ case T_IND: p = GETINDIR(p); goto binbs;++ case T_BSAPPEND: rbs = bsappend(xbs, ybs); break;+ case T_BSAPPENDDOT: rbs = bsappenddot(xbs, ybs); break;+ case T_BSEQ: GOIND(bscompare(xbs, ybs) == 0 ? combTrue : combFalse);+ case T_BSNE: GOIND(bscompare(xbs, ybs) != 0 ? combTrue : combFalse);+ case T_BSLT: GOIND(bscompare(xbs, ybs) < 0 ? combTrue : combFalse);+ case T_BSLE: GOIND(bscompare(xbs, ybs) <= 0 ? combTrue : combFalse);+ case T_BSGT: GOIND(bscompare(xbs, ybs) > 0 ? combTrue : combFalse);+ case T_BSGE: GOIND(bscompare(xbs, ybs) >= 0 ? combTrue : combFalse);+ case T_BSCMP: r = bscompare(xbs, ybs); GOIND(r < 0 ? combLT : r > 0 ? combGT : combEQ);++ default:+ //fprintf(stderr, "tag=%d\n", GETTAG(FUN(TOP(0))));+ ERR("BINBS");+ }+ SETBSTR(n, mkForPtrFree(rbs));+ goto ret;++ default:+ stack_ptr = stk;+ n = TOP(-1);+ }+ }+#if MAXSTACKDEPTH+ cur_c_stack = old_cur_c_stack; /* reset rather than counting down, in case of longjump */+#endif+ return n;+}++NORETURN void+die_exn(NODEPTR exn)+{+ /* No handler:+ * First convert the exception to a string by calling displaySomeException.+ * The display function compiles to combShowExn, so we need to build+ * (combShowExn exn) and evaluate it.+ */+ NODEPTR x;+ char *msg;++ if (in_raise) {+ ERR("recursive error");+ EXIT(1);+ }+ in_raise = 1;++ if (GETTAG(exn) == T_INT) {+ /* This is the special hack for RTS generated exception, represented by a T_INT */+ switch(GETVALUE(exn)) {+ case 0: msg = "stack overflow"; break;+ case 1: msg = "heap overflow"; break;+ case 2: msg = "thread killed"; break;+ case 3: msg = "user interrupt"; break;+ case 4: msg = "DivideByZero"; break;+ default: msg = "unknown"; break;+ }+ } else {+ /* just overwrite the top stack element, we don't need it */+ CLEARSTK();+ GCCHECK(1);+ PUSH(new_ap(combShowExn, exn));/* TOP(0) = (combShowExn exn) */+ x = evali(TOP(0)); /* evaluate it */+ msg = evalstring(x).string; /* and convert to a C string */+ POP(1);+ }+#if WANT_STDIO+ /* A horrible hack until we get proper exceptions */+ if (strcmp(msg, "ExitSuccess") == 0) {+ EXIT(0);+ } else {+ fprintf(stderr, "\nmhs: uncaught exception: %s\n", msg);+ EXIT(1);+ }+#else /* WANT_STDIO */+ ERR1("mhs error: %s", msg);+#endif /* WANT_STDIO */+}++#if WANT_ARGS+heapoffs_t+memsize(const char *p)+{+ heapoffs_t n = atoi(p);+ while (isdigit(*p))+ p++;+ switch (*p) {+ case 'k': case 'K': n *= 1000; break;+ case 'm': case 'M': n *= 1000000; break;+ case 'g': case 'G': n *= 1000000000; break;+ default: break;+ }+ return n;+}+#endif++extern uint8_t *combexpr;+extern int combexprlen;++MAIN+{+ NODEPTR prog;+#if WANT_ARGS+ char *inname = 0;+ char **av;+ char *progname;+ char **gargv;+ int gargc;+ int inrts;+#if WANT_TICK+ int dump_ticks = 0;+#endif+#endif+#if WANT_STDIO+ char *outname = 0;+ size_t file_size = 0;+#endif++#if 0+ /* MINGW doesn't do buffering right */+ setvbuf(stdout, NULL, _IOLBF, BUFSIZ);+ setvbuf(stderr, NULL, _IONBF, BUFSIZ);+#endif++#ifdef INITIALIZATION+ main_setup(); /* Do platform specific start-up. */+#endif++#ifdef CLOCK_INIT+ CLOCK_INIT();+#endif++#if WANT_SIGINT+ (void)signal(SIGINT, handle_sigint);+#endif++ heap_size = HEAP_CELLS; /* number of heap cells */+ stack_size = STACK_SIZE; /* number of stack slots */++#if WANT_ARGS+ progname = argv[0];+ argc--, argv++;+ gargv = argv;+ for (av = argv, inrts = 0; argc--; argv++) {+ char *p = *argv;+ if (inrts) {+ if (strcmp(p, "-RTS") == 0) {+ inrts = 0;+ } else {+ if (strcmp(p, "-v") == 0)+ verbose++;+#if WANT_TICK+ else if (strcmp(p, "-T") == 0)+ dump_ticks = 1;+#endif+ else if (strncmp(p, "-H", 2) == 0)+ heap_size = memsize(&p[2]);+ else if (strncmp(p, "-K", 2) == 0)+ stack_size = memsize(&p[2]);+ else if (strncmp(p, "-r", 2) == 0)+ inname = &p[2];+#if WANT_STDIO+ else if (strncmp(p, "-o", 2) == 0)+ outname = &p[2];+ else if (strcmp(p, "-B") == 0)+ gcbell++;+#endif /* WANT_STDIO */+ else+ ERR("Usage: eval [+RTS [-v] [-B] [-T] [-Hheap-size] [-Kstack-size] [-rFILE] [-oFILE] -RTS] arg ...");+ }+ } else {+ if (strcmp(p, "+RTS") == 0) {+ inrts = 1;+ } else {+ *av++ = p;+ }+ }+ }+ gargc = av - gargv;++ if (inname == 0)+ inname = "out.comb";+#endif++ init_nodes();+ stack = mmalloc(sizeof(NODEPTR) * stack_size);+ CLEARSTK();+ num_reductions = 0;++#if WANT_ARGS+ /* Initialize an IORef (i.e., single element IOArray+ * to contain the list of program arguments.+ * The 0th element is the program name, and the rest+ * are the non RTS arguments.+ */+ {+ NODEPTR n;+ /* No GC checks, the heap is empty. */+ n = mkNil();+ for(int i = gargc-1; i >= 0; i--) {+ n = mkCons(mkStringC(gargv[i]), n);+ }+ n = mkCons(mkStringC(progname), n);+ argarray = arr_alloc(1, n); /* An IORef contains a single element array */+ argarray->permanent = 1; /* never GC the arguments, because a T_IO_GETARGREF can reach argarray */+ }+#endif /* WANT_ARGS */++ if (combexpr) {+ int c;+ BFILE *bf = openb_rd_buf(combexpr, combexprlen);+ c = getb(bf);+ /* Compressed combinators start with a 'Z' or 'z', otherwise 'v' (for version) */+ if (c == 'z') {+ /* add LZ77 compressor transducer */+ bf = add_lz77_decompressor(bf);+ } else {+ /* put it back, we need it */+ ungetb(c, bf);+ }+ prog = parse_top(bf);+ closeb(bf);+#if WANT_STDIO+ file_size = combexprlen;+#endif+ } else {+#if WANT_STDIO+ prog = parse_file(inname, &file_size);+#else+ ERR("no stdio");+#endif+ }++ /* GC unused stuff, nice for -o */+ PUSH(prog);+ want_gc_red = 1;+ gc();+ gc(); /* this finds some more GC reductions */+ want_gc_red = 0; /* disabled due to UB */+ prog = POPTOP();++#if WANT_STDIO+ heapoffs_t start_size = num_marked;+ if (outname) {+ /* Save GCed file (smaller), and exit. */+ FILE *out = fopen(outname, "w");+ if (!out)+ ERR1("cannot open output file %s", outname);+ struct BFILE *bf = add_FILE(out);+ printb(bf, prog, 1);+ closeb(bf);+ EXIT(0);+ }+ if (verbose > 2) {+ pp(stdout, prog);+ }+#endif+ run_time -= GETTIMEMILLI();++ topnode = &prog;+ start_exec(prog);+ /* Flush standard handles in case there is some BFILE buffering */+ flushb((BFILE*)FORPTR(comb_stdout)->payload.string);+ flushb((BFILE*)FORPTR(comb_stderr)->payload.string);+ gc(); /* Run finalizers */+ run_time += GETTIMEMILLI();++#if WANT_STDIO+ if (verbose) {+ if (verbose > 1) {+ PRINT("node size=%"PRIheap", heap size bytes=%"PRIheap"\n", (heapoffs_t)NODE_SIZE, heap_size * NODE_SIZE);+ }+ setlocale(LC_NUMERIC, "en_US"); /* Make %' work on platforms that support it */+ PRINT("%"PCOMMA"15"PRIheap" combinator file size\n", (heapoffs_t)file_size);+ PRINT("%"PCOMMA"15"PRIheap" cells at start\n", start_size);+ PRINT("%"PCOMMA"15"PRIheap" cells heap size (%"PCOMMA""PRIheap" bytes)\n", heap_size, heap_size * NODE_SIZE);+ PRINT("%"PCOMMA"15"PRIcounter" cells allocated (%"PCOMMA".1f Mbyte/s)\n", num_alloc, num_alloc * NODE_SIZE / ((double)run_time / 1000) / 1000000);+ PRINT("%"PCOMMA"15"PRIcounter" GCs\n", num_gc);+ PRINT("%"PCOMMA"15"PRIcounter" max cells used\n", max_num_marked);+ PRINT("%"PCOMMA"15"PRIcounter" reductions (%"PCOMMA".1f Mred/s)\n", num_reductions, num_reductions / ((double)run_time / 1000) / 1000000);+ PRINT("%"PCOMMA"15"PRIcounter" yields (%"PCOMMA""PRIcounter" resched)\n", num_yield, num_resched);+ PRINT("%"PCOMMA"15"PRIcounter" array alloc\n", num_arr_alloc);+ PRINT("%"PCOMMA"15"PRIcounter" array free\n", num_arr_free);+ PRINT("%"PCOMMA"15"PRIcounter" foreign alloc\n", num_fin_alloc);+ PRINT("%"PCOMMA"15"PRIcounter" foreign free\n", num_fin_free);+ PRINT("%"PCOMMA"15"PRIcounter" bytestring alloc (max %"PCOMMA""PRIcounter")\n", num_bs_alloc, num_bs_alloc_max);+ PRINT("%"PCOMMA"15"PRIcounter" bytestring alloc bytes (max %"PCOMMA""PRIcounter")\n", num_bs_bytes, num_bs_inuse_max);+ PRINT("%"PCOMMA"15"PRIcounter" bytestring free\n", num_bs_free);+ PRINT("%"PCOMMA"15"PRIcounter" thread create\n", num_thread_create-1);+ PRINT("%"PCOMMA"15"PRIcounter" thread reap\n", num_thread_reap);+#if MAXSTACKDEPTH+ PRINT("%"PCOMMA"15d max stack depth\n", (int)max_stack_depth);+ PRINT("%"PCOMMA"15d max C stack depth\n", (int)max_c_stack);+#endif+ // PRINT("%"PCOMMA"15"PRIcounter" max mark depth\n", max_mark_depth);+ PRINT("%15.2fs total expired time\n", (double)run_time / 1000);+ PRINT("%15.2fs total gc time (%.2f + %.2f)\n",+ (double)(gc_mark_time + gc_scan_time) / 1000,+ (double)gc_mark_time / 1000,+ (double)gc_scan_time / 1000);+#if GCRED+ PRINT(" GC reductions A=%"PRIcounter", K=%"PRIcounter", I=%"PRIcounter", int=%"PRIcounter", flip=%"PRIcounter","+ " BI=%"PRIcounter", BxI=%"PRIcounter", C'BxI=%"PRIcounter", CC=%"PRIcounter", C'I=%"PRIcounter", C'BBCP=%"PRIcounter"\n",+ red_a, red_k, red_i, red_int, red_flip, red_bi, red_bxi, red_ccbi, red_cc, red_cci, red_ccbbcp);+ PRINT(" special reductions B'=%"PRIcounter" K4=%"PRIcounter" K3=%"PRIcounter" K2=%"PRIcounter" C'B=%"PRIcounter", Z=%"PRIcounter", R=%"PRIcounter"\n",+ red_bb, red_k4, red_k3, red_k2, red_ccb, red_z, red_r);+#endif+ }+#endif /* WANT_STDIO */++#if WANT_TICK+ if (dump_ticks) {+ dump_tick_table(stdout);+ }+#endif++#ifdef TEARDOWN+ main_teardown(); /* do some platform specific teardown */+#endif+ EXIT(0);+}++#if WANT_MD5+#include "md5.c"+#endif /* WANT_MD5 */++#if WANT_LZ77+#include "lz77.c"+#endif++/*********************/+/* FFI adapters */++#define MHS_FROM(name, set, type) \+from_t \+name(stackptr_t stk, int n, type x) \+{ \+ NODEPTR r = TOP(0); /* The pre-allocated cell for the result, */ \+ set(r, x); /* Put result in pre-allocated cell. */ \+ return n; /* return arity */ \+}+MHS_FROM(mhs_from_FloatW, SETDBL, flt_t);+MHS_FROM(mhs_from_Int, SETINT, value_t);+MHS_FROM(mhs_from_Word, SETINT, uvalue_t);+MHS_FROM(mhs_from_Word8, SETINT, uvalue_t);+MHS_FROM(mhs_from_Ptr, SETPTR, void*);+MHS_FROM(mhs_from_ForPtr, SETFORPTR, struct forptr *);+MHS_FROM(mhs_from_FunPtr, SETFUNPTR, HsFunPtr);+MHS_FROM(mhs_from_CChar, SETINT, char);+MHS_FROM(mhs_from_CSChar, SETINT, signed char);+MHS_FROM(mhs_from_CUChar, SETINT, unsigned char);+MHS_FROM(mhs_from_CShort, SETINT, short);+MHS_FROM(mhs_from_CUShort, SETINT, unsigned short);+MHS_FROM(mhs_from_CInt, SETINT, int);+MHS_FROM(mhs_from_CUInt, SETINT, unsigned int);+MHS_FROM(mhs_from_CLong, SETINT, long);+MHS_FROM(mhs_from_CULong, SETINT, unsigned long);+MHS_FROM(mhs_from_CLLong, SETINT, long long);+MHS_FROM(mhs_from_CULLong, SETINT, unsigned long long);+MHS_FROM(mhs_from_CSize, SETINT, size_t);+#if WANT_TIME+MHS_FROM(mhs_from_CTime, SETINT, time_t);+#endif+// MHS_FROM(mhs_from_CSSize, SETINT, ssize_t);+MHS_FROM(mhs_from_CIntPtr, SETINT, intptr_t);+MHS_FROM(mhs_from_CUIntPtr, SETINT, uintptr_t);+from_t+mhs_from_Unit(stackptr_t stk, int n)+{+ POP(1); /* return value cell */+ PUSH(combUnit); /* push unit instead */+ return n;+}++#define MHS_TO(name, eval, type) \+type name(stackptr_t stk, int n) \+{ \+ return eval(ARG(TOP(n+1))); /* The stack has a reserved cell on top of the arguments */ \+}+MHS_TO(mhs_to_FloatW, evaldbl, flt_t);+MHS_TO(mhs_to_Int, evalint, value_t);+MHS_TO(mhs_to_Word, evalint, uvalue_t);+MHS_TO(mhs_to_Word8, evalint, uint8_t);+MHS_TO(mhs_to_Ptr, evalptr, void*);+MHS_TO(mhs_to_FunPtr, evalfunptr, HsFunPtr);+MHS_TO(mhs_to_CChar, evalint, char);+MHS_TO(mhs_to_CSChar, evalint, signed char);+MHS_TO(mhs_to_CUChar, evalint, unsigned char);+MHS_TO(mhs_to_CShort, evalint, short);+MHS_TO(mhs_to_CUShort, evalint, unsigned short);+MHS_TO(mhs_to_CInt, evalint, int);+MHS_TO(mhs_to_CUInt, evalint, unsigned int);+MHS_TO(mhs_to_CLong, evalint, long);+MHS_TO(mhs_to_CULong, evalint, unsigned long);+MHS_TO(mhs_to_CLLong, evalint, long long);+MHS_TO(mhs_to_CULLong, evalint, unsigned long long);+MHS_TO(mhs_to_CSize, evalint, size_t);+#if WANT_TIME+MHS_TO(mhs_to_CTime, evalint, time_t);+#endif+// MHS_TO(mhs_to_CSSize, evalint, ssize_t);+MHS_TO(mhs_to_CIntPtr, evalint, intptr_t);+MHS_TO(mhs_to_CUIntPtr, evalint, uintptr_t);+++/* The rest of this file was generated by the compiler, with some minor edits with #if. */+from_t mhs_GETRAW(int s) { return mhs_from_Int(s, 0, GETRAW()); }+from_t mhs_GETTIMEMILLI(int s) { return mhs_from_Int(s, 0, GETTIMEMILLI()); }+#if WANT_MATH+#if WORD_SIZE == 64+from_t mhs_acos(int s) { return mhs_from_FloatW(s, 1, acos(mhs_to_FloatW(s, 0))); }+from_t mhs_asin(int s) { return mhs_from_FloatW(s, 1, asin(mhs_to_FloatW(s, 0))); }+from_t mhs_atan(int s) { return mhs_from_FloatW(s, 1, atan(mhs_to_FloatW(s, 0))); }+from_t mhs_atan2(int s) { return mhs_from_FloatW(s, 2, atan2(mhs_to_FloatW(s, 0), mhs_to_FloatW(s, 1))); }+from_t mhs_cos(int s) { return mhs_from_FloatW(s, 1, cos(mhs_to_FloatW(s, 0))); }+from_t mhs_exp(int s) { return mhs_from_FloatW(s, 1, exp(mhs_to_FloatW(s, 0))); }+from_t mhs_log(int s) { return mhs_from_FloatW(s, 1, log(mhs_to_FloatW(s, 0))); }+from_t mhs_sin(int s) { return mhs_from_FloatW(s, 1, sin(mhs_to_FloatW(s, 0))); }+from_t mhs_sqrt(int s) { return mhs_from_FloatW(s, 1, sqrt(mhs_to_FloatW(s, 0))); }+from_t mhs_tan(int s) { return mhs_from_FloatW(s, 1, tan(mhs_to_FloatW(s, 0))); }+#elif WORD_SIZE == 32 /* WORD_SIZE */+from_t mhs_acos(int s) { return mhs_from_FloatW(s, 1, acosf(mhs_to_FloatW(s, 0))); }+from_t mhs_asin(int s) { return mhs_from_FloatW(s, 1, asinf(mhs_to_FloatW(s, 0))); }+from_t mhs_atan(int s) { return mhs_from_FloatW(s, 1, atanf(mhs_to_FloatW(s, 0))); }+from_t mhs_atan2(int s) { return mhs_from_FloatW(s, 2, atan2f(mhs_to_FloatW(s, 0), mhs_to_FloatW(s, 1))); }+from_t mhs_cos(int s) { return mhs_from_FloatW(s, 1, cosf(mhs_to_FloatW(s, 0))); }+from_t mhs_exp(int s) { return mhs_from_FloatW(s, 1, expf(mhs_to_FloatW(s, 0))); }+from_t mhs_log(int s) { return mhs_from_FloatW(s, 1, logf(mhs_to_FloatW(s, 0))); }+from_t mhs_sin(int s) { return mhs_from_FloatW(s, 1, sinf(mhs_to_FloatW(s, 0))); }+from_t mhs_sqrt(int s) { return mhs_from_FloatW(s, 1, sqrtf(mhs_to_FloatW(s, 0))); }+from_t mhs_tan(int s) { return mhs_from_FloatW(s, 1, tanf(mhs_to_FloatW(s, 0))); }+#else+#error Unknown WORD_SIZE+#endif /* WORD_SIZE */+#endif /* WANT_MATH */++#if WANT_STDIO+from_t mhs_add_FILE(int s) { return mhs_from_Ptr(s, 1, add_FILE(mhs_to_Ptr(s, 0))); }+from_t mhs_add_utf8(int s) { return mhs_from_Ptr(s, 1, add_utf8(mhs_to_Ptr(s, 0))); }+from_t mhs_closeb(int s) { closeb(mhs_to_Ptr(s, 0)); return mhs_from_Unit(s, 1); }+from_t mhs_addr_closeb(int s) { return mhs_from_FunPtr(s, 0, (HsFunPtr)&closeb); }+from_t mhs_flushb(int s) { flushb(mhs_to_Ptr(s, 0)); return mhs_from_Unit(s, 1); }+from_t mhs_fopen(int s) { return mhs_from_Ptr(s, 2, fopen(mhs_to_Ptr(s, 0), mhs_to_Ptr(s, 1))); }++from_t mhs_getb(int s) { return mhs_from_Int(s, 1, getb(mhs_to_Ptr(s, 0))); }+from_t mhs_putb(int s) { putb(mhs_to_Int(s, 0), mhs_to_Ptr(s, 1)); return mhs_from_Unit(s, 2); }+from_t mhs_ungetb(int s) { ungetb(mhs_to_Int(s, 0), mhs_to_Ptr(s, 1)); return mhs_from_Unit(s, 2); }+from_t mhs_openwrbuf(int s) { return mhs_from_Ptr(s, 0, openb_wr_buf()); }+from_t mhs_openrdbuf(int s) { return mhs_from_Ptr(s, 2, openb_rd_buf(mhs_to_Ptr(s, 0), mhs_to_Int(s, 1))); }+from_t mhs_getbuf(int s) { get_buf(mhs_to_Ptr(s, 0), mhs_to_Ptr(s, 1), mhs_to_Ptr(s, 2)); return mhs_from_Unit(s, 3); }+from_t mhs_system(int s) { return mhs_from_Int(s, 1, system(mhs_to_Ptr(s, 0))); }+from_t mhs_tmpname(int s) { return mhs_from_Ptr(s, 2, TMPNAME(mhs_to_Ptr(s, 0), mhs_to_Ptr(s, 1))); }+from_t mhs_unlink(int s) { return mhs_from_Int(s, 1, unlink(mhs_to_Ptr(s, 0))); }+from_t mhs_readb(int s) { return mhs_from_Int(s, 3, readb(mhs_to_Ptr(s, 0), mhs_to_Int(s, 1), mhs_to_Ptr(s, 2))); }+from_t mhs_writeb(int s) { return mhs_from_Int(s, 3, writeb(mhs_to_Ptr(s, 0), mhs_to_Int(s, 1), mhs_to_Ptr(s, 2))); }+from_t mhs_putchar(int s) { putchar(mhs_to_Int(s, 0)); return mhs_from_Unit(s, 1); } /* for debugging */+#endif /* WANT_STDIO */++#if WANT_MD5+from_t mhs_md5Array(int s) { md5Array(mhs_to_Ptr(s, 0), mhs_to_Ptr(s, 1), mhs_to_Int(s, 2)); return mhs_from_Unit(s, 3); }+from_t mhs_md5BFILE(int s) { md5BFILE(mhs_to_Ptr(s, 0), mhs_to_Ptr(s, 1)); return mhs_from_Unit(s, 2); }+from_t mhs_md5String(int s) { md5String(mhs_to_Ptr(s, 0), mhs_to_Ptr(s, 1)); return mhs_from_Unit(s, 2); }+#endif /* WANT_MD5 */++#if WANT_LZ77+from_t mhs_add_lz77_compressor(int s) { return mhs_from_Ptr(s, 1, add_lz77_compressor(mhs_to_Ptr(s, 0))); }+from_t mhs_add_lz77_decompressor(int s) { return mhs_from_Ptr(s, 1, add_lz77_decompressor(mhs_to_Ptr(s, 0))); }+from_t mhs_lz77c(int s) { return mhs_from_CSize(s, 3, lz77c(mhs_to_Ptr(s, 0), mhs_to_CSize(s, 1), mhs_to_Ptr(s, 2))); }+#endif /* WANT_LZ77 */++#if WANT_RLE+from_t mhs_add_rle_compressor(int s) { return mhs_from_Ptr(s, 1, add_rle_compressor(mhs_to_Ptr(s, 0))); }+from_t mhs_add_rle_decompressor(int s) { return mhs_from_Ptr(s, 1, add_rle_decompressor(mhs_to_Ptr(s, 0))); }+#endif /* WANT_RLE */++#if WANT_BWT+from_t mhs_add_bwt_compressor(int s) { return mhs_from_Ptr(s, 1, add_bwt_compressor(mhs_to_Ptr(s, 0))); }+from_t mhs_add_bwt_decompressor(int s) { return mhs_from_Ptr(s, 1, add_bwt_decompressor(mhs_to_Ptr(s, 0))); }+#endif /* WANT_BWT */++from_t mhs_calloc(int s) { return mhs_from_Ptr(s, 2, calloc(mhs_to_CSize(s, 0), mhs_to_CSize(s, 1))); }+from_t mhs_free(int s) { free(mhs_to_Ptr(s, 0)); return mhs_from_Unit(s, 1); }+from_t mhs_addr_free(int s) { return mhs_from_FunPtr(s, 0, (HsFunPtr)&FREE); }+from_t mhs_getenv(int s) { return mhs_from_Ptr(s, 1, getenv(mhs_to_Ptr(s, 0))); }+from_t mhs_iswindows(int s) { return mhs_from_Int(s, 0, iswindows()); }+from_t mhs_malloc(int s) { return mhs_from_Ptr(s, 1, MALLOC(mhs_to_CSize(s, 0))); }+from_t mhs_memcpy(int s) { memcpy(mhs_to_Ptr(s, 0), mhs_to_Ptr(s, 1), mhs_to_CSize(s, 2)); return mhs_from_Unit(s, 3); }+from_t mhs_memmove(int s) { memmove(mhs_to_Ptr(s, 0), mhs_to_Ptr(s, 1), mhs_to_CSize(s, 2)); return mhs_from_Unit(s, 3); }+from_t mhs_peekPtr(int s) { return mhs_from_Ptr(s, 1, peekPtr(mhs_to_Ptr(s, 0))); }+from_t mhs_peekWord(int s) { return mhs_from_Word(s, 1, peekWord(mhs_to_Ptr(s, 0))); }+from_t mhs_pokePtr(int s) { pokePtr(mhs_to_Ptr(s, 0), mhs_to_Ptr(s, 1)); return mhs_from_Unit(s, 2); }+from_t mhs_pokeWord(int s) { pokeWord(mhs_to_Ptr(s, 0), mhs_to_Word(s, 1)); return mhs_from_Unit(s, 2); }++from_t mhs_peek_uint8(int s) { return mhs_from_Word(s, 1, peek_uint8(mhs_to_Ptr(s, 0))); }+from_t mhs_poke_uint8(int s) { poke_uint8(mhs_to_Ptr(s, 0), mhs_to_Word(s, 1)); return mhs_from_Unit(s, 2); }+from_t mhs_peek_uint16(int s) { return mhs_from_Word(s, 1, peek_uint16(mhs_to_Ptr(s, 0))); }+from_t mhs_poke_uint16(int s) { poke_uint16(mhs_to_Ptr(s, 0), mhs_to_Word(s, 1)); return mhs_from_Unit(s, 2); }+#if WORD_SIZE >= 32+from_t mhs_peek_uint32(int s) { return mhs_from_Word(s, 1, peek_uint32(mhs_to_Ptr(s, 0))); }+from_t mhs_poke_uint32(int s) { poke_uint32(mhs_to_Ptr(s, 0), mhs_to_Word(s, 1)); return mhs_from_Unit(s, 2); }+#endif /* WORD_SIZE */+#if WORD_SIZE >= 64+from_t mhs_peek_uint64(int s) { return mhs_from_Word(s, 1, peek_uint64(mhs_to_Ptr(s, 0))); }+from_t mhs_poke_uint64(int s) { poke_uint64(mhs_to_Ptr(s, 0), mhs_to_Word(s, 1)); return mhs_from_Unit(s, 2); }+#endif /* WORD_SIZE */+from_t mhs_peek_uint(int s) { return mhs_from_Word(s, 1, peek_uint(mhs_to_Ptr(s, 0))); }+from_t mhs_poke_uint(int s) { poke_uint(mhs_to_Ptr(s, 0), mhs_to_Word(s, 1)); return mhs_from_Unit(s, 2); }++from_t mhs_peek_int8(int s) { return mhs_from_Int(s, 1, peek_int8(mhs_to_Ptr(s, 0))); }+from_t mhs_poke_int8(int s) { poke_int8(mhs_to_Ptr(s, 0), mhs_to_Int(s, 1)); return mhs_from_Unit(s, 2); }+from_t mhs_peek_int16(int s) { return mhs_from_Int(s, 1, peek_int16(mhs_to_Ptr(s, 0))); }+from_t mhs_poke_int16(int s) { poke_int16(mhs_to_Ptr(s, 0), mhs_to_Int(s, 1)); return mhs_from_Unit(s, 2); }+#if WORD_SIZE >= 32+from_t mhs_peek_int32(int s) { return mhs_from_Int(s, 1, peek_int32(mhs_to_Ptr(s, 0))); }+from_t mhs_poke_int32(int s) { poke_int32(mhs_to_Ptr(s, 0), mhs_to_Int(s, 1)); return mhs_from_Unit(s, 2); }+#endif /* WORD_SIZE */+#if WORD_SIZE >= 64+from_t mhs_peek_int64(int s) { return mhs_from_Int(s, 1, peek_int64(mhs_to_Ptr(s, 0))); }+from_t mhs_poke_int64(int s) { poke_int64(mhs_to_Ptr(s, 0), mhs_to_Int(s, 1)); return mhs_from_Unit(s, 2); }+#endif /* WORD_SIZE */+from_t mhs_peek_int(int s) { return mhs_from_Int(s, 1, peek_int(mhs_to_Ptr(s, 0))); }+from_t mhs_poke_int(int s) { poke_int(mhs_to_Ptr(s, 0), mhs_to_Int(s, 1)); return mhs_from_Unit(s, 2); }+from_t mhs_peek_llong(int s) { return mhs_from_CLLong(s, 1, peek_llong(mhs_to_Ptr(s, 0))); }+from_t mhs_peek_long(int s) { return mhs_from_CLong(s, 1, peek_long(mhs_to_Ptr(s, 0))); }+from_t mhs_peek_ullong(int s) { return mhs_from_CULLong(s, 1, peek_ullong(mhs_to_Ptr(s, 0))); }+from_t mhs_peek_ulong(int s) { return mhs_from_CULong(s, 1, peek_ulong(mhs_to_Ptr(s, 0))); }+from_t mhs_poke_llong(int s) { poke_llong(mhs_to_Ptr(s, 0), mhs_to_CLLong(s, 1)); return mhs_from_Unit(s, 2); }+from_t mhs_poke_long(int s) { poke_long(mhs_to_Ptr(s, 0), mhs_to_CLong(s, 1)); return mhs_from_Unit(s, 2); }+from_t mhs_poke_ullong(int s) { poke_ullong(mhs_to_Ptr(s, 0), mhs_to_CULLong(s, 1)); return mhs_from_Unit(s, 2); }+from_t mhs_poke_ulong(int s) { poke_ulong(mhs_to_Ptr(s, 0), mhs_to_CULong(s, 1)); return mhs_from_Unit(s, 2); }+#if WANT_FLOAT+from_t mhs_peek_flt(int s) { return mhs_from_FloatW(s, 1, peek_flt(mhs_to_Ptr(s, 0))); }+from_t mhs_poke_flt(int s) { poke_flt(mhs_to_Ptr(s, 0), mhs_to_FloatW(s, 1)); return mhs_from_Unit(s, 2); }+#endif /* WANT_FLOAT */+from_t mhs_sizeof_int(int s) { return mhs_from_Int(s, 0, sizeof(int)); }+from_t mhs_sizeof_llong(int s) { return mhs_from_Int(s, 0, sizeof(long long)); }+from_t mhs_sizeof_long(int s) { return mhs_from_Int(s, 0, sizeof(long)); }+#if WANT_DIR+from_t mhs_closedir(int s) { return mhs_from_Int(s, 1, closedir(mhs_to_Ptr(s, 0))); }+from_t mhs_opendir(int s) { return mhs_from_Ptr(s, 1, opendir(mhs_to_Ptr(s, 0))); }+from_t mhs_readdir(int s) { return mhs_from_Ptr(s, 1, readdir(mhs_to_Ptr(s, 0))); }+from_t mhs_c_d_name(int s) { return mhs_from_Ptr(s, 1, ((struct dirent *)(mhs_to_Ptr(s, 0)))->d_name); }+from_t mhs_chdir(int s) { return mhs_from_Int(s, 1, chdir(mhs_to_Ptr(s, 0))); }+from_t mhs_mkdir(int s) { return mhs_from_Int(s, 2, mkdir(mhs_to_Ptr(s, 0), mhs_to_Int(s, 1))); }+from_t mhs_getcwd(int s) { return mhs_from_Ptr(s, 2, getcwd(mhs_to_Ptr(s, 0), mhs_to_Int(s, 1))); }+#endif /* WANT_DIR */++/* Use this to detect if we have (and want) GMP or not. */+from_t mhs_want_gmp(int s) { return mhs_from_Int(s, 0, WANT_GMP); }++#if WANT_GMP+void+free_mpz(void *p)+{+ /* printf("free_mpz %p\n", p);*/+ mpz_clear(p); /* free any extra storage */+ FREE(p); /* and free the mpz itself */+}++/* Allocate an initialize a GMP integer */+struct forptr *+new_mpz(void)+{+#if 0+ {+ static int done = 0;+ if (!done) {+ printf("GMP\n");+ done = 1;+ }+ }+#endif+ mpz_ptr p = mmalloc(sizeof(*p));+ mpz_init(p);+ struct forptr *fp = mkForPtrP(p);+ fp->finalizer->final = (HsFunPtr)free_mpz;+ fp->finalizer->fptype = FP_MPZ;+ /* printf("new_mpz %p %p\n", p, fp); */+ return fp;+}++#if 0+void+print_mpz(mpz_ptr p)+{+ mpz_out_str(stdout, 10, p);+}+#endif++from_t mhs_new_mpz(int s) { mhs_from_ForPtr(s, 0, new_mpz()); }++/* Stubs for GMP functions */+from_t mhs_mpz_abs(int s) { mpz_abs(mhs_to_Ptr(s, 0), mhs_to_Ptr(s, 1)); return mhs_from_Unit(s, 2); }+from_t mhs_mpz_add(int s) { mpz_add(mhs_to_Ptr(s, 0), mhs_to_Ptr(s, 1), mhs_to_Ptr(s, 2)); return mhs_from_Unit(s, 3); }+from_t mhs_mpz_and(int s) { mpz_and(mhs_to_Ptr(s, 0), mhs_to_Ptr(s, 1), mhs_to_Ptr(s, 2)); return mhs_from_Unit(s, 3); }+from_t mhs_mpz_cmp(int s) { return mhs_from_Int(s, 2, mpz_cmp(mhs_to_Ptr(s, 0), mhs_to_Ptr(s, 1))); }+from_t mhs_mpz_get_d(int s) { return mhs_from_FloatW(s, 1, mpz_get_d(mhs_to_Ptr(s, 0))); }+from_t mhs_mpz_get_si(int s) { return mhs_from_Int(s, 1, mpz_get_si(mhs_to_Ptr(s, 0))); }+from_t mhs_mpz_get_ui(int s) { return mhs_from_Word(s, 1, mpz_get_ui(mhs_to_Ptr(s, 0))); }+from_t mhs_mpz_init_set_si(int s) { mpz_init_set_si(mhs_to_Ptr(s, 0), mhs_to_Int(s, 1)); return mhs_from_Unit(s, 2); }+from_t mhs_mpz_init_set_ui(int s) { mpz_init_set_ui(mhs_to_Ptr(s, 0), mhs_to_Word(s, 1)); return mhs_from_Unit(s, 2); }+from_t mhs_mpz_ior(int s) { mpz_ior(mhs_to_Ptr(s, 0), mhs_to_Ptr(s, 1), mhs_to_Ptr(s, 2)); return mhs_from_Unit(s, 3); }+from_t mhs_mpz_mul(int s) { mpz_mul(mhs_to_Ptr(s, 0), mhs_to_Ptr(s, 1), mhs_to_Ptr(s, 2)); return mhs_from_Unit(s, 3); }+from_t mhs_mpz_mul_2exp(int s) { mpz_mul_2exp(mhs_to_Ptr(s, 0), mhs_to_Ptr(s, 1), mhs_to_Int(s, 2)); return mhs_from_Unit(s, 3); }+from_t mhs_mpz_neg(int s) { mpz_neg(mhs_to_Ptr(s, 0), mhs_to_Ptr(s, 1)); return mhs_from_Unit(s, 2); }+from_t mhs_mpz_popcount(int s) {+ mpz_ptr a = mhs_to_Ptr(s, 0);+ if (mpz_sgn(a) < 0) {+ mpz_t neg_a;+ mpz_init(neg_a);+ mpz_neg(neg_a, a);+ (void)mhs_from_Int(s, 1, -mpz_popcount(neg_a));+ mpz_clear(neg_a);+ } else {+ (void)mhs_from_Int(s, 1, mpz_popcount(a));+ }+ return 1;+}+from_t mhs_mpz_sub(int s) { mpz_sub(mhs_to_Ptr(s, 0), mhs_to_Ptr(s, 1), mhs_to_Ptr(s, 2)); return mhs_from_Unit(s, 3); }+from_t mhs_mpz_fdiv_q_2exp(int s) { mpz_fdiv_q_2exp(mhs_to_Ptr(s, 0), mhs_to_Ptr(s, 1), mhs_to_Int(s, 2)); return mhs_from_Unit(s, 3); }+from_t mhs_mpz_tdiv_qr(int s) { mpz_tdiv_qr(mhs_to_Ptr(s, 0), mhs_to_Ptr(s, 1), mhs_to_Ptr(s, 2), mhs_to_Ptr(s, 3)); return mhs_from_Unit(s, 4); }+from_t mhs_mpz_tstbit(int s) { mhs_from_Int(s, 2, mpz_tstbit(mhs_to_Ptr(s, 0), mhs_to_Int(s, 1))); }+from_t mhs_mpz_xor(int s) { mpz_xor(mhs_to_Ptr(s, 0), mhs_to_Ptr(s, 1), mhs_to_Ptr(s, 2)); return mhs_from_Unit(s, 3); }+#endif /* WANT_GMP */++struct ffi_entry ffi_table[] = {+ { "GETRAW", 0, mhs_GETRAW},+ { "GETTIMEMILLI", 0, mhs_GETTIMEMILLI},+#if WANT_MATH+ { "acos", 1, mhs_acos},+ { "asin", 1, mhs_asin},+ { "atan", 1, mhs_atan},+ { "atan2", 2, mhs_atan2},+ { "cos", 1, mhs_cos},+ { "exp", 1, mhs_exp},+ { "log", 1, mhs_log},+ { "sin", 1, mhs_sin},+ { "sqrt", 1, mhs_sqrt},+ { "tan", 1, mhs_tan},+#endif /* WANT_MATH */++#if WANT_STDIO+ { "add_FILE", 1, mhs_add_FILE},+ { "add_utf8", 1, mhs_add_utf8},+ { "closeb", 1, mhs_closeb},+ { "&closeb", 0, mhs_addr_closeb},+ { "flushb", 1, mhs_flushb},+ { "fopen", 2, mhs_fopen},+ { "getb", 1, mhs_getb},+ { "putb", 2, mhs_putb},+ { "ungetb", 2, mhs_ungetb},+ { "openb_wr_buf", 0, mhs_openwrbuf},+ { "openb_rd_buf", 2, mhs_openrdbuf},+ { "get_buf", 3, mhs_getbuf},+ { "system", 1, mhs_system},+ { "tmpname", 2, mhs_tmpname},+ { "unlink", 1, mhs_unlink},+ { "readb", 3, mhs_readb},+ { "writeb", 3, mhs_writeb},+ { "putchar", 1, mhs_putchar},+#endif /* WANT_STDIO */++#if WANT_MD5+ { "md5Array", 3, mhs_md5Array},+ { "md5BFILE", 2, mhs_md5BFILE},+ { "md5String", 2, mhs_md5String},+#endif /* WANT_MD5 */++#if WANT_LZ77+ { "add_lz77_compressor", 1, mhs_add_lz77_compressor},+ { "add_lz77_decompressor", 1, mhs_add_lz77_decompressor},+ { "lz77c", 3, mhs_lz77c},+#endif /* WANT_LZ77 */++#if WANT_RLE+ { "add_rle_compressor", 1, mhs_add_rle_compressor},+ { "add_rle_decompressor", 1, mhs_add_rle_decompressor},+#endif /* WANT_RLE */++#if WANT_BWT+ { "add_bwt_compressor", 1, mhs_add_bwt_compressor},+ { "add_bwt_decompressor", 1, mhs_add_bwt_decompressor},+#endif /* WANT_RLE */++ { "calloc", 2, mhs_calloc},+ { "free", 1, mhs_free},+ { "&free", 0, mhs_addr_free},+ { "getenv", 1, mhs_getenv},+ { "iswindows", 0, mhs_iswindows},+ { "malloc", 1, mhs_malloc},+ { "memcpy", 3, mhs_memcpy},+ { "memmove", 3, mhs_memmove},+ { "peekPtr", 1, mhs_peekPtr},+ { "peekWord", 1, mhs_peekWord},+ { "pokePtr", 2, mhs_pokePtr},+ { "pokeWord", 2, mhs_pokeWord},++ { "peek_uint8", 1, mhs_peek_uint8},+ { "poke_uint8", 2, mhs_poke_uint8},+ { "peek_uint16", 1, mhs_peek_uint16},+ { "poke_uint16", 2, mhs_poke_uint16},+#if WORD_SIZE >= 32+ { "peek_uint32", 1, mhs_peek_uint32},+ { "poke_uint32", 2, mhs_poke_uint32},+#endif /* WORD_SIZE >= 32 */+#if WORD_SIZE >= 64+ { "peek_uint64", 1, mhs_peek_uint64},+ { "poke_uint64", 2, mhs_poke_uint64},+#endif /* WORD_SIZE >= 64 */+ { "peek_uint", 1, mhs_peek_uint},+ { "poke_uint", 2, mhs_poke_uint},++ { "peek_int8", 1, mhs_peek_int8},+ { "poke_int8", 2, mhs_poke_int8},+ { "peek_int16", 1, mhs_peek_int16},+ { "poke_int16", 2, mhs_poke_int16},+#if WORD_SIZE >= 32+ { "peek_int32", 1, mhs_peek_int32},+ { "poke_int32", 2, mhs_poke_int32},+#endif /* WORD_SIZE >= 32 */+#if WORD_SIZE >= 64+ { "peek_int64", 1, mhs_peek_int64},+ { "poke_int64", 2, mhs_poke_int64},+#endif /* WORD_SIZE >= 64 */+ { "peek_int", 1, mhs_peek_int},+ { "poke_int", 2, mhs_poke_int},+ { "peek_llong", 1, mhs_peek_llong},+ { "peek_long", 1, mhs_peek_long},+ { "peek_ullong", 1, mhs_peek_ullong},+ { "peek_ulong", 1, mhs_peek_ulong},+ { "poke_llong", 2, mhs_poke_llong},+ { "poke_long", 2, mhs_poke_long},+ { "poke_ullong", 2, mhs_poke_ullong},+ { "poke_ulong", 2, mhs_poke_ulong},+#if WANT_FLOAT+ { "peek_flt", 1, mhs_peek_flt},+ { "poke_flt", 2, mhs_poke_flt},+#endif /* WANT_FLOAT */+ { "sizeof_int", 0, mhs_sizeof_int},+ { "sizeof_llong", 0, mhs_sizeof_llong},+ { "sizeof_long", 0, mhs_sizeof_long},+#if WANT_DIR+ { "c_d_name", 1, mhs_c_d_name},+ { "closedir", 1, mhs_closedir},+ { "opendir", 1, mhs_opendir},+ { "readdir", 1, mhs_readdir},+ { "chdir", 1, mhs_chdir},+ { "mkdir", 2, mhs_mkdir},+ { "getcwd", 2, mhs_getcwd},+#endif /* WANT_DIR */+ { "want_gmp", 0, mhs_want_gmp},+#if WANT_GMP+ { "new_mpz", 0, mhs_new_mpz},+ { "mpz_abs", 2, mhs_mpz_abs},+ { "mpz_add", 3, mhs_mpz_add},+ { "mpz_and", 3, mhs_mpz_and},+ { "mpz_cmp", 2, mhs_mpz_cmp},+ { "mpz_get_d", 1, mhs_mpz_get_d},+ { "mpz_get_si", 1, mhs_mpz_get_si},+ { "mpz_get_ui", 1, mhs_mpz_get_ui},+ { "mpz_init_set_si", 2, mhs_mpz_init_set_si},+ { "mpz_init_set_ui", 2, mhs_mpz_init_set_ui},+ { "mpz_ior", 3, mhs_mpz_ior},+ { "mpz_mul", 3, mhs_mpz_mul},+ { "mpz_mul_2exp", 3, mhs_mpz_mul_2exp},+ { "mpz_neg", 2, mhs_mpz_neg},+ { "mpz_popcount", 1, mhs_mpz_popcount},+ { "mpz_sub", 3, mhs_mpz_sub},+ { "mpz_fdiv_q_2exp", 3, mhs_mpz_fdiv_q_2exp},+ { "mpz_tdiv_qr", 4, mhs_mpz_tdiv_qr},+ { "mpz_tstbit", 2, mhs_mpz_tstbit},+ { "mpz_xor", 3, mhs_mpz_xor},+#endif /* WANT_GMP */+ { 0,0 } }; int num_ffi = sizeof(ffi_table) / sizeof(ffi_table[0]);
src/runtime/mhsffi.h view
@@ -24,37 +24,39 @@ typedef void (*HsFunPtr)(void); -typedef void (*funptr_t)(int);+typedef int from_t;+typedef from_t (*funptr_t)(int); struct ffi_entry { const char *ffi_name;+ int ffi_arity; funptr_t ffi_fun; }; extern struct ffi_entry *xffi_table; -void mhs_from_Double(intptr_t, int, flt_t);-void mhs_from_FloatW(intptr_t, int, flt_t);-void mhs_from_Int(intptr_t, int, intptr_t);-void mhs_from_Word(intptr_t, int, uintptr_t);-void mhs_from_Word8(intptr_t, int, uintptr_t);-void mhs_from_Ptr(intptr_t, int, void *);-void mhs_from_FunPtr(intptr_t, int, HsFunPtr);-void mhs_from_CChar(intptr_t, int, char);-void mhs_from_CSChar(intptr_t, int, signed char);-void mhs_from_CUChar(intptr_t, int, unsigned char);-void mhs_from_CShort(intptr_t, int, short);-void mhs_from_CUShort(intptr_t, int, unsigned short);-void mhs_from_CInt(intptr_t, int, int);-void mhs_from_CUInt(intptr_t, int, unsigned int);-void mhs_from_CLong(intptr_t, int, long);-void mhs_from_CULong(intptr_t, int, unsigned long);-void mhs_from_CLLong(intptr_t, int, long long);-void mhs_from_CULLong(intptr_t, int, unsigned long long);-void mhs_from_CSize(intptr_t, int, size_t);-void mhs_from_CTime(intptr_t, int, time_t); /* XXX wrong */+from_t mhs_from_Double(intptr_t, int, flt_t);+from_t mhs_from_FloatW(intptr_t, int, flt_t);+from_t mhs_from_Int(intptr_t, int, intptr_t);+from_t mhs_from_Word(intptr_t, int, uintptr_t);+from_t mhs_from_Word8(intptr_t, int, uintptr_t);+from_t mhs_from_Ptr(intptr_t, int, void *);+from_t mhs_from_FunPtr(intptr_t, int, HsFunPtr);+from_t mhs_from_CChar(intptr_t, int, char);+from_t mhs_from_CSChar(intptr_t, int, signed char);+from_t mhs_from_CUChar(intptr_t, int, unsigned char);+from_t mhs_from_CShort(intptr_t, int, short);+from_t mhs_from_CUShort(intptr_t, int, unsigned short);+from_t mhs_from_CInt(intptr_t, int, int);+from_t mhs_from_CUInt(intptr_t, int, unsigned int);+from_t mhs_from_CLong(intptr_t, int, long);+from_t mhs_from_CULong(intptr_t, int, unsigned long);+from_t mhs_from_CLLong(intptr_t, int, long long);+from_t mhs_from_CULLong(intptr_t, int, unsigned long long);+from_t mhs_from_CSize(intptr_t, int, size_t);+from_t mhs_from_CTime(intptr_t, int, time_t); /* XXX wrong */ // not on MacOS void mhs_from_CSSize(intptr_t, int, ssize_t);-void mhs_from_CIntPtr(intptr_t, int, intptr_t);-void mhs_from_CUIntPtr(intptr_t, int, uintptr_t);-void mhs_from_Unit(intptr_t, int);+from_t mhs_from_CIntPtr(intptr_t, int, intptr_t);+from_t mhs_from_CUIntPtr(intptr_t, int, uintptr_t);+from_t mhs_from_Unit(intptr_t, int); flt_t mhs_to_Double(intptr_t, int); flt_t mhs_to_FloatW(intptr_t, int);
tests/Arith.hs view
@@ -1,5 +1,4 @@ module Arith(module Arith) where-import Prelude vals :: [Int] vals = [-5, -2, -1, 0, 1, 2, 5]
tests/BindPat.hs view
@@ -1,5 +1,4 @@ module BindPat(main) where-import Prelude foo :: [Int] -> [Int] foo xs = do
+ tests/Block.hs view
@@ -0,0 +1,8 @@+module Block where++main :: IO ()+main = do+ let x = quot+ do 10 + 20+ do 2 * 3+ print x
+ tests/Block.ref view
@@ -0,0 +1,1 @@+5
tests/Case.hs view
@@ -1,5 +1,4 @@ module Case(module Case) where-import Prelude main :: IO () main = do
tests/Catch.hs view
@@ -1,5 +1,4 @@ module Catch(main) where-import Prelude import Control.Exception import System.IO @@ -35,5 +34,7 @@ let ln = hGetLine h `catch` exn a <- ln b <- ln+ c <- ln print a print b+ print c
tests/Catch.ref view
@@ -1,8 +1,9 @@ "ok" "error: bang!"-"no match at \"./Catch.hs\",7:1"-"no default for m, at \"./Catch.hs\",10:3"+"no match at \"./Catch.hs\",6:1"+"no default for m, at \"./Catch.hs\",9:3" "hello" "bye" "hello" "bye"+"Handle(Catch.in): end of file (hGetChar)"
tests/Class.hs view
@@ -1,6 +1,5 @@ module Class(main) where import Primitives-import Prelude class Eqq a where (===) :: a -> a -> Bool
+ tests/Concur.hs view
@@ -0,0 +1,44 @@+module Concur(main) where+import Control.Concurrent+import System.IO++-- Use ::Int to avoid using Integer anywhere since+-- the can change the timing on different platforms+-- (32 vs 64 bit, with or without GMP).++delay :: Int -> IO ()+delay i = loop i `seq` return ()++loop :: Int -> Int+loop i = if i == (0::Int) then (0::Int) else loop (i - (1::Int))++showId :: String -> IO ()+showId s = do+ i <- myThreadId+ putStrLn $ "thread " ++ show i ++ ": " ++ show s++run :: Int -> String -> IO ()+run i s =+ if i == (0::Int) then+ return ()+ else do+ delay (10000::Int)+ putStr s+ hFlush stdout+ run (i - (1::Int)) s++xrun :: Int -> String -> IO ()+xrun i s = do+ delay i+ showId s+ delay (2000::Int)+ run (1000::Int) s++main :: IO ()+main = do+ putStrLn "start"+ forkIO $ xrun (1000::Int) "b"+ forkIO $ xrun (2000::Int) "c"+ xrun (0::Int) "a"+ delay (100000::Int)+ putStrLn "\ndone"
+ tests/Concur.ref view
@@ -0,0 +1,6 @@+start+thread ThreadId#1: "a"+thread ThreadId#2: "b"+thread ThreadId#3: "c"+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbcccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbcccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbcccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc+done
tests/Default.hs view
@@ -1,5 +1,4 @@ module Default(main) where-import Prelude default Num (Int, Double) default IsString (String) default Show (())
+ tests/Delay.hs view
@@ -0,0 +1,30 @@+module Delay where+import Control.Concurrent+import System.IO.TimeMilli++-- This test is hard to get working on all CI platforms.+-- Some seem to have very inaccurate timing.++timedDelay :: String -> Int -> IO ()+timedDelay msg usecs = do+ t1 <- getTimeMilli+ threadDelay usecs+ t2 <- getTimeMilli+ let dt = t2 - t1+ rdt = (dt `div` 100) * 100 -- round down ms+ putStrLn $ msg ++ " " ++ show usecs ++ " " ++ show rdt ++ "ms"++thr1 :: IO ()+thr1 = do+ timedDelay "thr1" (100000::Int)++thr2 :: IO ()+thr2 = do+ timedDelay "thr2" (300000::Int)++main :: IO ()+main = do+ forkIO thr1+ forkIO thr2+ timedDelay "main" (200000::Int)+ timedDelay "end" (500000::Int)
+ tests/Delay.ref view
@@ -0,0 +1,4 @@+thr1 100000 100ms+main 200000 200ms+thr2 300000 300ms+end 500000 500ms
tests/Deriving.hs view
@@ -1,5 +1,4 @@ module Deriving(main) where-import Prelude data T a b c = A a | B b | C a Int | D deriving (Eq, Ord, Show)
tests/Dict.hs view
@@ -1,5 +1,4 @@ module Dict(module Dict) where-import Prelude import Data.Constraint fac :: forall a . (Num a, Eq a) => a -> a
tests/Eq.hs view
@@ -1,5 +1,4 @@ module Eq(main) where-import Prelude main :: IO () main = do
tests/Exists.hs view
@@ -1,5 +1,4 @@ module Exists(main) where-import Prelude data E = forall a . Show a => C a
− tests/Exn.hs
@@ -1,9 +0,0 @@-module Exn where-import Control.Concurrent-import Control.Exception--main :: IO ()-main = do- catch (do threadDelay 1000; error "foo")- (\ (e :: SomeException) -> print e)- putStrLn "done"
tests/FArith.hs view
@@ -1,5 +1,4 @@ module FArith(module FArith) where-import Prelude readDouble :: String -> Double readDouble = read
tests/Fac.hs view
@@ -1,6 +1,5 @@ -- Simple test module Fac(module Fac) where-import Prelude fac :: Int -> Int -- ignored fac n =
tests/Floating.hs view
@@ -1,5 +1,4 @@ module Floating(main) where-import Prelude main :: IO () main = do
tests/ForeignC.hs view
@@ -1,19 +1,15 @@ module ForeignC(main) where-import Prelude import Foreign.C.Types import Foreign.Ptr import Foreign.Storable -foreign import ccall "llabs" iabs :: Int -> IO Int foreign import ccall "sys/errno.h &errno" cerrno :: IO (Ptr CInt)-foreign import ccall "&llabs" pabs :: IO (FunPtr (Int -> IO Int))+foreign import ccall "unistd.h getpid" getpid :: IO CInt main :: IO () main = do- x1 <- iabs (3 - 8)- print x1- x2 <- iabs (10 - 8)- print x2+ CInt pid <- getpid+ print (pid /= 0) p <- cerrno CInt e <- peek p print e
+ tests/Fork.hs view
@@ -0,0 +1,17 @@+module Fork where+import Control.Concurrent++delay :: Int -> IO ()+delay i = loop i `seq` return ()++loop :: Int -> Int+loop i = if i == 0 then 0 else loop (i-1)++fork :: IO ()+fork = putStrLn "fork done"++main :: IO ()+main = do+ forkIO fork+ delay 100000+ putStrLn "main done"
+ tests/Fork.ref view
@@ -0,0 +1,2 @@+fork done+main done
tests/FunDep.hs view
@@ -1,5 +1,4 @@ module FunDep(main) where-import Prelude import Data.Char class C a b | a -> b where
tests/Guard.hs view
@@ -1,5 +1,4 @@ module Guard(main) where-import Prelude f :: [Int] -> Int f [x] | x < 0 = - x
tests/Hello.hs view
@@ -1,5 +1,4 @@ module Hello(main) where-import Prelude main :: IO () main = putStrLn "hello, world\n"
tests/HigherKind.hs view
@@ -1,5 +1,4 @@ module HigherKind(main) where-import Prelude newtype T f = C (f Int)
tests/IOArray.hs view
@@ -1,5 +1,4 @@ module IOArray(main) where-import Prelude import Data.IOArray import Data.IORef import System.IO
tests/IOTest.hs view
@@ -1,5 +1,4 @@ module IOTest(module IOTest) where-import Prelude import System.IO as IO import System.IO.TimeMilli import System.Environment
tests/Infix.hs view
@@ -1,5 +1,4 @@ module Infix(main) where-import Prelude infix 1 === infixl 2 +++
tests/Info.hs view
@@ -1,5 +1,4 @@ module Info(main) where-import Prelude import Foreign.Storable import Foreign.Marshal.Utils import Foreign.Ptr
tests/Interactive.hs view
@@ -1,7 +1,5 @@ module Interactive(module Interactive) where-import Prelude import System.IO.PrintOrRun-default (Integer, Double, String, ())--_it = 1+2-_itIO = printOrRun _it+default Num (Integer, Double)+default IsString (String)+default Show (())
tests/ListCompr.hs view
@@ -1,5 +1,4 @@ module ListCompr(main) where-import Prelude default (Int) main :: IO ()
tests/LitMatch.hs view
@@ -1,5 +1,4 @@ module LitMatch(main) where-import Prelude f :: Int -> Int f 0 = 10
tests/LocalPoly.hs view
@@ -1,5 +1,4 @@ module LocalPoly(main) where-import Prelude main :: IO () main = do
+ tests/MVar.hs view
@@ -0,0 +1,57 @@+module MVar where+import Control.Concurrent+import Control.Concurrent.MVar++delay :: Int -> IO ()+delay i = loop i `seq` return ()++loop :: Int -> Int+loop i = if i == 0 then 0 else loop $! (i-1)++fun :: MVar Int -> IO ()+fun mv = do+ putStrLn "fun A"+ i <- takeMVar mv+ print i+ putStrLn "fun B"++main :: IO ()+main = do+ test1+ putStrLn "---"+ test2++test1 :: IO ()+test1 = do+ putStrLn "test1 A"+ mvar <- newEmptyMVar+ forkIO (fun mvar)+ putStrLn "test1 B"+ delay 100000+ putStrLn "test1 C"+ putMVar mvar 999+ putStrLn "test1 D"+ putMVar mvar 888+ putStrLn "test1 E"+ forkIO (delay 100000 >> fun mvar)+ putMVar mvar 777+ putStrLn "test1 F"+ delay 100000+ fun mvar+ delay 100000+ putStrLn "test1 G"++test2 :: IO ()+test2 = do+ mvar1 <- newEmptyMVar+ tryTakeMVar mvar1 >>= print+ putStrLn "test2 A"+ putMVar mvar1 (111::Int)+ putStrLn "test2 B"+ tryPutMVar mvar1 222 >>= print+ tryTakeMVar mvar1 >>= print+ tryPutMVar mvar1 333 >>= print++ mvar2 <- newMVar (333::Int)+ tryReadMVar mvar2 >>= print+ tryReadMVar mvar2 >>= print
+ tests/MVar.ref view
@@ -0,0 +1,25 @@+test1 A+test1 B+fun A+test1 C+test1 D+test1 E+999+fun B+fun A+888+fun B+test1 F+fun A+777+fun B+test1 G+---+Nothing+test2 A+test2 B+False+Just 111+True+Just 333+Just 333
tests/Makefile view
@@ -29,7 +29,6 @@ $(TMHS) Word && $(EVAL) > Word.out && diff Word.ref Word.out $(TMHS) Integer && $(EVAL) > Integer.out && diff Integer.ref Integer.out $(TMHS) Enum && $(EVAL) > Enum.out && diff Enum.ref Enum.out-# $(TMHS) ForeignC && $(EVAL) > ForeignC.out && diff ForeignC.ref ForeignC.out $(TMHS) MutRec && $(EVAL) > MutRec.out && diff MutRec.ref MutRec.out $(TMHS) LocalPoly && $(EVAL) > LocalPoly.out && diff LocalPoly.ref LocalPoly.out $(TMHS) Rank2 && $(EVAL) > Rank2.out && diff Rank2.ref Rank2.out@@ -94,11 +93,24 @@ $(TMHS) Storable && $(EVAL) > Storable.out && diff Storable.ref Storable.out $(TMHS) StandDer && $(EVAL) > StandDer.out && diff StandDer.ref StandDer.out MHSCPPHS=../bin/cpphs \- $(TMHS) Cpp && $(EVAL) > Cpp.out && diff Cpp.ref Cpp.out+ $(TMHS) Cpp && $(EVAL) > Cpp.out && diff Cpp.ref Cpp.out $(TMHS) Lit && $(EVAL) > Lit.out && diff Lit.ref Lit.out $(TMHS) TypeOp && $(EVAL) > TypeOp.out && diff TypeOp.ref TypeOp.out $(TMHS) Forall && $(EVAL) > Forall.out && diff Forall.ref Forall.out+ $(TMHS) Block && $(EVAL) > Block.out && diff Block.ref Block.out+ $(TMHS) Fork && $(EVAL) > Fork.out && diff Fork.ref Fork.out+ $(TMHS) Concur && $(EVAL) > Concur.out && diff Concur.ref Concur.out+ $(TMHS) MVar && $(EVAL) > MVar.out && diff MVar.ref MVar.out+ $(TMHS) Delay && $(EVAL) > Delay.out && diff Delay.ref Delay.out+ $(TMHS) ThrSt && $(EVAL) > ThrSt.out && diff ThrSt.ref ThrSt.out+ $(TMHS) Throw && $(EVAL) > Throw.out && diff Throw.ref Throw.out+ $(TMHS) RtsExn && $(EVAL) > RtsExn.out && diff RtsExn.ref RtsExn.out+ $(TMHS) Mask && $(EVAL) > Mask.out && diff Mask.ref Mask.out +# BROKEN: cannot compile binaries here+testforeign:+ MHSDIR=.. $(TMHS) ForeignC -of.exe && ./f.exe > ForeignC.out && diff ForeignC.ref ForeignC.out+ errtest: sh errtester.sh $(MHS) < errmsg.test @@ -109,4 +121,4 @@ $(TMHS) Nfib && $(EVAL) clean:- rm -f *.out *.tmp *.js+ rm -f *.out *.tmp *.js *.exe
+ tests/Mask.hs view
@@ -0,0 +1,20 @@+module Mask where+import Control.Concurrent+import Control.Exception++printMaskingState :: String -> IO ()+printMaskingState s = putStr s >> getMaskingState >>= print++main :: IO ()+main = do+ printMaskingState "start "+ catch (do+ printMaskingState "catch start "+ uninterruptibleMask_ $ do+ printMaskingState "unintr start "+ error "a"+ )+ (\ (_ :: SomeException) -> do+ printMaskingState "handler "+ )+ printMaskingState "end "
+ tests/Mask.ref view
@@ -0,0 +1,5 @@+start Unmasked+catch start Unmasked+unintr start MaskedUninterruptible+handler MaskedInterruptible+end Unmasked
tests/Misc.hs view
@@ -1,5 +1,4 @@ module Misc(module Misc) where-import Prelude first :: forall a b . (a, b) -> a first ab =
tests/Multi.hs view
@@ -1,5 +1,4 @@ module Multi(main) where-import Prelude import Data.Char class C a b where
tests/MutRec.hs view
@@ -1,5 +1,4 @@ module MutRec(main) where-import Prelude main :: IO () main = do
tests/Newtype.hs view
@@ -1,5 +1,4 @@ module Newtype(main) where-import Prelude newtype N = N Int newtype M a = M a
tests/ParseInd.hs view
@@ -1,5 +1,4 @@ module ParseInd(main) where-import Prelude -- The parse error generateing a '}'
tests/PartRed.hs view
@@ -64,7 +64,7 @@ r x y z = y z x fr :: Int -> Int-fr = r 22 primIntAdd+fr = r 22 primIntQuot main :: IO () main = do
tests/PartRed.ref view
@@ -13,4 +13,4 @@ Z (K #-11) R-((C +) #22)+((C quot) #22)
tests/PolyKind.hs view
@@ -1,5 +1,4 @@ module PolyKind(main) where-import Prelude type XProxy :: forall (k::Kind) . k -> Type data XProxy a = XProxy
tests/Rank2.hs view
@@ -1,5 +1,4 @@ module Rank2(main) where-import Prelude f :: (forall a . a -> a) -> (Int, Bool) f i = (i (1::Int), i True)
tests/Read.hs view
@@ -1,5 +1,4 @@ module Read(main) where-import Prelude import Text.Read main :: IO ()
tests/Readline.hs view
@@ -1,5 +1,4 @@ module Readline(main) where-import Prelude import System.Console.SimpleReadline main :: IO ()
tests/Record.hs view
@@ -1,5 +1,4 @@ module Record(main) where-import Prelude -- HasField instances are derived automatically
+ tests/RtsExn.hs view
@@ -0,0 +1,7 @@+module RtsExn where+import Control.Exception++main :: IO ()+main = do+ r <- try $ print (1 `quot` 0 ::Int)+ print (r :: Either SomeException ())
+ tests/RtsExn.ref view
@@ -0,0 +1,1 @@+Left DivideByZero
tests/ST.hs view
@@ -1,5 +1,4 @@ module ST(main) where-import Prelude import Control.Monad.ST import Data.STRef import Debug.Trace
tests/Sieve.hs view
@@ -1,5 +1,4 @@ module Sieve(main) where-import Prelude primes :: [Integer] primes =
tests/Storable.hs view
@@ -1,5 +1,4 @@ module Storable(main) where-import Prelude import Data.Word import Foreign.Marshal.Array import Foreign.Marshal.Utils
tests/StringTest.hs view
@@ -1,5 +1,4 @@ module StringTest(module StringTest) where-import Prelude default (String) main :: IO ()
tests/Symbol.hs view
@@ -1,5 +1,4 @@ module Symbol(main) where-import Prelude newtype T (s::Symbol) = A Int
tests/TestMap.hs view
@@ -1,5 +1,4 @@ module TestMap(lookup) where-import qualified Prelude() import Primitives lookup :: ()
+ tests/ThrSt.hs view
@@ -0,0 +1,26 @@+module ThrSt where+import Control.Concurrent+import Control.Concurrent.MVar++thr1 :: IO ()+thr1 = return ()++thr2 :: IO ()+thr2 = error "boo"++thr3 :: IO ()+thr3 = do m <- newEmptyMVar; takeMVar m++thr4 :: IO ()+thr4 = threadDelay 1000000000++main :: IO ()+main = do+ t1 <- forkIO thr1+ t2 <- forkIO thr2+ t3 <- forkIO thr3+ t4 <- forkIO thr4+ t5 <- myThreadId+ threadDelay 100000+ ss <- mapM threadStatus [t1, t2, t3, t4, t5]+ print ss
+ tests/ThrSt.ref view
@@ -0,0 +1,1 @@+[ThreadFinished,ThreadDied,ThreadBlocked BlockedOnMVar,ThreadBlocked BlockedOnOther,ThreadRunning]
+ tests/Throw.hs view
@@ -0,0 +1,25 @@+module Throw where+import Control.Concurrent+import Control.Concurrent.MVar+import Control.Exception++delay :: Int -> IO ()+delay i = loop i `seq` return ()++loop :: Int -> Int+loop i = if i == 0 then 0 else loop (i-1)++main :: IO ()+main = do+ th1 <- forkIO $ catch (threadDelay 1000000) (\ (e :: SomeException) -> print e)+ delay 100000+ killThread th1+ delay 100000+ th2 <- forkIO $ catch (newEmptyMVar >>= takeMVar) (\ (e :: SomeException) -> print e)+ delay 100000+ throwTo th2 Overflow+ delay 100000+ th3 <- forkIO $ catch (delay 1000000) (\ (e :: SomeException) -> print e)+ delay 100000+ throwTo th3 UserInterrupt+ delay 100000
+ tests/Throw.ref view
@@ -0,0 +1,3 @@+thread killed+Overflow+user interrupt
tests/TypeApp.hs view
@@ -4,9 +4,13 @@ foo :: forall a b . (a, b) foo = (undefined, undefined) +xread :: forall a -> Read a => String -> a+xread t s = read s :: t+ main :: IO () main = do print $ read @Int "123"+ print $ xread Int "456" let (x, y) = foo @_ @Bool print $ typeOf y return @IO ()
tests/TypeApp.ref view
@@ -1,2 +1,3 @@ 123+456 Bool
tests/TypeEq.hs view
@@ -1,5 +1,4 @@ module TypeEq(main) where-import Prelude foo :: forall a . (a ~ Bool) => a -> a foo = not
tests/TypeLits.hs view
@@ -1,5 +1,4 @@ module TypeLits(main) where-import Prelude import Data.TypeLits data PS (s :: Symbol) = PS
+ tests/TypeSyn.hs view
@@ -0,0 +1,19 @@+module TypeSyn where++type Foo a = a -> a -> Bool++foo :: Foo (forall b. b->b)+foo f g = f 'a' == g 'a' && f () == g ()++type Generic i o = forall x. i x -> o x+type Id x = x++bar :: Generic Id []+bar x = [x]++type S a = Int+instance Functor S++main :: IO ()+main = do+ print (foo id id)
tests/Typeable.hs view
@@ -1,5 +1,4 @@ module Typeable(main) where-import Prelude import Data.Proxy import Data.Typeable
tests/View.hs view
@@ -1,5 +1,4 @@ module View(main) where-import Prelude f :: Int -> Int f ((> 10) -> True) = 1