From 9048d4cdd43338f0f396e5fd1a2b5e8e49324014 Mon Sep 17 00:00:00 2001 From: crc Date: Fri, 10 May 2019 17:49:01 +0000 Subject: [PATCH] rre: remove built in gopher downloader (I recommend using curl via a pipe instead - see example/NetFetch.forth) FossilOrigin-Name: df2a3daaa0b0c86ffe392bf85739851524fab5b4e429e3d477b0c1c851c06b4d --- Makefile | 4 +- RELEASE_NOTES.md | 1 + doc/DEVICES.txt | 20 +- doc/Glossary.html | 2 +- doc/Glossary.txt | 2 +- example/NetFetch.forth | 2 +- source/interfaces/retro-image.c | 594 +++++++++++++++--------------- source/interfaces/retro-runtime.c | 121 +----- source/interfaces/retro-unix.c | 121 +----- words.tsv | 2 +- 10 files changed, 305 insertions(+), 564 deletions(-) diff --git a/Makefile b/Makefile index 9d69e94..9e62399 100644 --- a/Makefile +++ b/Makefile @@ -119,7 +119,7 @@ bin/retro-repl: source/interfaces/repl.c source/interfaces/image.c bin/retro: bin/retro-embedimage bin/retro-extend source/interfaces/retro-image.c source/interfaces/retro-unix.c source/interfaces/rre.forth source/interfaces/io/rng.forth cp ngaImage rre.image - ./bin/retro-extend rre.image source/interfaces/io/filesystem.forth source/interfaces/io/gopher.forth source/interfaces/io/floatingpoint.forth source/interfaces/io/unix.forth source/interfaces/io/rng.forth source/interfaces/rre.forth + ./bin/retro-extend rre.image source/interfaces/io/filesystem.forth source/interfaces/io/floatingpoint.forth source/interfaces/io/unix.forth source/interfaces/io/rng.forth source/interfaces/rre.forth ./bin/retro-embedimage rre.image >source/interfaces/retro-image.c cd source/interfaces && $(CC) $(CFLAGS) $(LDFLAGS) -o ../../bin/retro retro-unix.c $(LIBM) cd package && ../bin/retro -f list @@ -157,7 +157,7 @@ interfaces/image.c: bin/retro-embedimage bin/retro-extend bin/retro-muri source/ bin/retro-compiler: bin/retro-extend source/interfaces/retro-compiler.c source/interfaces/retro-runtime.c cp ngaImage runtime.image - ./bin/retro-extend runtime.image source/interfaces/io/filesystem.forth source/interfaces/io/gopher.forth source/interfaces/io/floatingpoint.forth source/interfaces/io/unix.forth source/interfaces/io/rng.forth source/interfaces/rre.forth + ./bin/retro-extend runtime.image source/interfaces/io/filesystem.forth source/interfaces/io/floatingpoint.forth source/interfaces/io/unix.forth source/interfaces/io/rng.forth source/interfaces/rre.forth cd source/interfaces && $(CC) $(CFLAGS) $(LDFLAGS) -o ../../retro-runtime retro-runtime.c $(LIBM) cd source/interfaces && $(CC) $(CFLAGS) $(LDFLAGS) -o ../../bin/retro-compiler retro-compiler.c objcopy --add-section .ngaImage=runtime.image --set-section-flags .ngaImage=noload,readonly bin/retro-compiler diff --git a/RELEASE_NOTES.md b/RELEASE_NOTES.md index 8e085de..7567e94 100644 --- a/RELEASE_NOTES.md +++ b/RELEASE_NOTES.md @@ -46,6 +46,7 @@ July - September window for this release. ## I/O - (rre) added `clock:utc:` namespace +- (rre) remove gopher downloader ## Interfaces diff --git a/doc/DEVICES.txt b/doc/DEVICES.txt index 3dd2c30..6fcb895 100644 --- a/doc/DEVICES.txt +++ b/doc/DEVICES.txt @@ -46,8 +46,8 @@ All other devices are optional and can be specified in any order. 0002 | Floating Point | | 0003 | Block Storage | Raw, 1024 cell blocks | 0004 | Filesystem | Unix-style Files | -0005 | Network: Gopher | Make gopher requests | -0006 | Network: HTTP | | +0005 | | | +0006 | | | 0007 | Network: Sockets | | 0008 | Syscalls: Unix | | 0009 | Scripting Hooks | | @@ -108,20 +108,4 @@ additional values. | 7 | s- | Delete a file | | 8 | h- | Flush pending writes | -## 0005: Network: Gopher - -Revision 0: - -This device fetches resources using the Gopher protocol. - -Takes a single value indicating the operation; the operation -requires additional values. - - | Operation | Stack | Action | - | --------- | ----- | -------------------------------- | - | 0 | asns- | Connect to server (s1), port (n) | - | | | and request selector (s2). The | - | | | returned data is stored at the | - | | | destination address (a). | - ## 0010: Random Number Generator diff --git a/doc/Glossary.html b/doc/Glossary.html index 4946e6d..05b0977 100644 --- a/doc/Glossary.html +++ b/doc/Glossary.html @@ -2508,7 +2508,7 @@ Float: -

Takes an address, a server, a port, and a selector. Fetch the resource and store it at address. Return the number of bytes received.

-

Class: class:word | Namespace: gopher | Interface Layer: rre

+

Class: class:word | Namespace: gopher | Interface Layer: ios

Example:

here 'forthworks.com #70 '/ gopher:get diff --git a/doc/Glossary.txt b/doc/Glossary.txt index 99d5785..13ffa7d 100644 --- a/doc/Glossary.txt +++ b/doc/Glossary.txt @@ -3425,7 +3425,7 @@ gopher:get Takes an address, a server, a port, and a selector. Fetch the resource and store it at address. Return the number of bytes received. -Class: class:word | Namespace: gopher | Interface Layer: rre +Class: class:word | Namespace: gopher | Interface Layer: ios Example #1: diff --git a/example/NetFetch.forth b/example/NetFetch.forth index 2ba305d..c963751 100644 --- a/example/NetFetch.forth +++ b/example/NetFetch.forth @@ -27,6 +27,6 @@ allow for the NULL termination. ``` 'Data d:create #256001 allot -'https://www.osnews.com Data #300009 net:fetch +'gopher://forthworks.com &Data #300009 net:fetch '%n_bytes_read\n s:format s:put ``` diff --git a/source/interfaces/retro-image.c b/source/interfaces/retro-image.c index f88b5c2..b3ef223 100644 --- a/source/interfaces/retro-image.c +++ b/source/interfaces/retro-image.c @@ -1,6 +1,6 @@ #include <stdint.h> -int32_t ngaImageCells = 17548; -int32_t ngaImage[] = { 1793,17327,17505,17547,201912,0,10,1,10,2,10,3,10,4,10,5,10,6,10, +int32_t ngaImageCells = 17428; +int32_t ngaImage[] = { 1793,17207,17385,17427,201912,0,10,1,10,2,10,3,10,4,10,5,10,6,10, 7,10,8,10,9,10,10,10,11,10,12,10,13,10,14,10,15,10,16,10, 17,10,18,10,19,10,20,10,21,10,22,10,23,10,24,10,25,10,26,10, 68223234,1,2575,85000450,1,656912,142,141,268505089,66,65,135205121,66,10,101384453,0,9,10,2049,59, @@ -9,7 +9,7 @@ int32_t ngaImage[] = { 1793,17327,17505,17547,201912,0,10,1,10,2,10,3,10,4,10,5, 108,1793,115,2049,115,117506307,0,108,0,524545,25,113,168820993,0,127,1642241,127,134283523,7,113, 1793,108,7,524545,2049,108,1793,108,16846593,127,142,141,1793,67,16846593,127,113,141,1793,67, 7,10,659713,1,659713,2,659713,3,1793,9965,2,524559,108,2049,108,2049,108,2049,122,168820998, - 2,17365,1025,167841793,180,5,17826049,0,180,2,15,25,524546,165,134287105,181,96,2305,182,459023, + 2,17245,1025,167841793,180,5,17826049,0,180,2,15,25,524546,165,134287105,181,96,2305,182,459023, 190,134287361,181,185,659201,180,2049,59,25,84152833,48,286458116,10,459014,205,184618754,45,25,16974851,-1, 168886532,1,134284289,1,214,134284289,0,205,660227,32,0,0,112,114,101,102,105,120,58,105, 0,285278479,231,7,2576,524546,82,1641217,1,167838467,228,2049,244,2049,240,524545,231,200,17826050,230, @@ -160,7 +160,7 @@ int32_t ngaImage[] = { 1793,17327,17505,17547,201912,0,10,1,10,2,10,3,10,4,10,5, 3104,3151,147,118,58,117,112,100,97,116,101,0,4,1793,3158,15,4,8,10,1, 3154,2049,2088,16,10,3139,3172,147,99,111,112,121,0,1793,3181,1,59,2049,2076,2049, 62,10,1,3174,2049,2263,3,3,10,3164,3201,147,83,99,111,112,101,76,105,115, - 116,0,17411,17463,10,3188,3210,147,123,123,0,2049,1570,2,1,3201,2049,62,16,10, + 116,0,17291,17343,10,3188,3210,147,123,123,0,2049,1570,2,1,3201,2049,62,16,10, 3204,3235,147,45,45,45,114,101,118,101,97,108,45,45,45,0,2049,1570,1,3201, 2049,2919,16,10,3219,3249,147,125,125,0,1,3201,2049,59,4,15,11,1793,3263,3841, 3201,4097,2,10,1,3258,1793,3293,3841,3201,1793,3288,1,2,15,2,15,1,3201,2049, @@ -179,7 +179,7 @@ int32_t ngaImage[] = { 1793,17327,17505,17547,201912,0,10,1,10,2,10,3,10,4,10,5, 3308,10,1,3510,2049,2076,4097,3317,10,3485,3543,134,84,101,109,112,83,116,114,105, 110,103,115,0,32,3528,3561,134,84,101,109,112,83,116,114,105,110,103,77,97, 120,0,512,3544,3573,147,83,84,82,73,78,71,83,0,2049,1543,3841,3543,3841,3561, - 19,18,10,3562,3593,134,67,117,114,114,101,110,116,0,12,10,3582,3608,147,115, + 19,18,10,3562,3593,134,67,117,114,114,101,110,116,0,9,10,3582,3608,147,115, 58,112,111,105,110,116,101,114,0,3841,3593,3841,3561,19,2049,3573,17,10,3595,3627, 147,115,58,110,101,120,116,0,1,3593,2049,3020,3841,3593,3841,3543,11,1793,3643,1, 0,4097,3593,10,1,3638,9,10,3562,3657,147,115,58,116,101,109,112,0,2,2049, @@ -465,7 +465,7 @@ int32_t ngaImage[] = { 1793,17327,17505,17547,201912,0,10,1,10,2,10,3,10,4,10,5, 9177,10,1,9229,2049,3118,10,9207,9262,147,97,58,101,110,100,115,45,119,105,116, 104,63,0,1,3,1793,9278,2,2049,7211,1,13,2049,2076,2049,8156,2049,9177,10,1, 9266,2049,3118,10,9246,9289,134,76,80,0,0,9283,9299,134,73,110,100,101,120,0, - 0,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, @@ -483,7 +483,7 @@ int32_t ngaImage[] = { 1793,17327,17505,17547,201912,0,10,1,10,2,10,3,10,4,10,5, 16,10,9585,9611,147,117,110,104,111,111,107,0,2049,2919,2,2049,2919,4,16,10, 9601,9635,147,105,111,58,101,110,117,109,101,114,97,116,101,0,27,10,9619,9649, 147,105,111,58,113,117,101,114,121,0,28,10,9637,9664,147,105,111,58,105,110, - 118,111,107,101,0,29,10,9651,9674,134,83,108,111,116,0,7,9651,9690,147,105, + 118,111,107,101,0,29,10,9651,9674,134,83,108,111,116,0,6,9651,9690,147,105, 111,58,115,99,97,110,45,102,111,114,0,1,-1,4097,9674,2049,9635,1793,9716,2049, 9482,2049,9649,772,67502597,11,1793,9712,2049,9482,4097,9674,10,1,9707,9,10,1,9698,2049, 9539,3,3841,9674,10,9675,9733,147,99,58,112,117,116,0,1793,9735,1,0,2049,9664, @@ -540,191 +540,185 @@ int32_t ngaImage[] = { 1793,17327,17505,17547,201912,0,10,1,10,2,10,3,10,4,10,5, 2049,10204,2049,3388,10,1,10737,2049,2263,3841,10699,2049,10186,10,1,10725,2049,3504,10,10709, 10765,134,70,73,68,0,0,10709,10779,147,102,105,108,101,58,115,112,101,119,0, 2049,10459,4097,10765,1793,10790,3841,10765,2049,10223,10,1,10785,2049,4028,3841,10765,2049,10186,10, - 10766,10812,134,105,111,58,71,111,112,104,101,114,0,0,10799,10825,147,105,100,101, - 110,116,105,102,121,0,3841,10812,2049,2578,1793,10892,1,5,2049,9690,2,2049,2613,1793, - 10880,3,2049,3702,73,79,32,68,69,86,73,67,69,32,84,89,80,69,32,48, - 48,48,53,32,78,79,84,32,70,79,85,78,68,0,1,10843,2049,9783,2049,9746, - 10,1,10840,1793,10887,4097,10812,10,1,10884,2049,67,10,1,10831,9,10,10766,10910,147, - 103,111,112,104,101,114,58,103,101,116,0,2049,10825,1,0,3841,10812,2049,9664,10, - 10896,10939,134,105,111,58,70,108,111,97,116,105,110,103,80,111,105,110,116,0, - 0,10919,10952,147,105,100,101,110,116,105,102,121,0,3841,10939,2049,2578,1793,11019,1, - 2,2049,9690,2,2049,2613,1793,11007,3,2049,3702,73,79,32,68,69,86,73,67,69, + 10766,10819,134,105,111,58,70,108,111,97,116,105,110,103,80,111,105,110,116,0, + 0,10799,10832,147,105,100,101,110,116,105,102,121,0,3841,10819,2049,2578,1793,10899,1, + 2,2049,9690,2,2049,2613,1793,10887,3,2049,3702,73,79,32,68,69,86,73,67,69, 32,84,89,80,69,32,48,48,48,50,32,78,79,84,32,70,79,85,78,68, - 0,1,10970,2049,9783,2049,9746,10,1,10967,1793,11014,4097,10939,10,1,11011,2049,67,10, - 1,10958,9,10,10896,11045,147,105,111,58,102,108,111,97,116,45,111,112,101,114, - 97,116,105,111,110,0,2049,10952,3841,10939,2049,9664,10,11023,11066,147,110,58,116,111, - 45,102,108,111,97,116,0,1,0,2049,11045,10,11052,11085,147,115,58,116,111,45, - 102,108,111,97,116,0,1,1,2049,11045,10,11071,11105,147,102,58,116,111,45,110, - 117,109,98,101,114,0,1,2,2049,11045,10,11090,11125,147,102,58,116,111,45,115, - 116,114,105,110,103,0,2049,3683,2,1,3,2049,11045,10,11110,11140,147,102,58,43, - 0,1,4,2049,11045,10,11133,11152,147,102,58,45,0,1,5,2049,11045,10,11145,11164, - 147,102,58,42,0,1,6,2049,11045,10,11157,11176,147,102,58,47,0,1,7,2049, - 11045,10,11169,11192,147,102,58,102,108,111,111,114,0,1,8,2049,11045,10,11181,11210, - 147,102,58,99,101,105,108,105,110,103,0,1,9,2049,11045,10,11197,11225,147,102, - 58,115,113,114,116,0,1,10,2049,11045,10,11215,11239,147,102,58,101,113,63,0, - 1,11,2049,11045,10,11230,11254,147,102,58,45,101,113,63,0,1,12,2049,11045,10, - 11244,11268,147,102,58,108,116,63,0,1,13,2049,11045,10,11259,11282,147,102,58,103, - 116,63,0,1,14,2049,11045,10,11273,11298,147,102,58,100,101,112,116,104,0,1, - 15,2049,11045,10,11287,11312,147,102,58,100,117,112,0,1,16,2049,11045,10,11303,11327, - 147,102,58,100,114,111,112,0,1,17,2049,11045,10,11317,11342,147,102,58,115,119, - 97,112,0,1,18,2049,11045,10,11332,11356,147,102,58,108,111,103,0,1,19,2049, - 11045,10,11347,11372,147,102,58,112,111,119,101,114,0,1,20,2049,11045,10,11361,11386, - 147,102,58,115,105,110,0,1,21,2049,11045,10,11377,11400,147,102,58,99,111,115, - 0,1,22,2049,11045,10,11391,11414,147,102,58,116,97,110,0,1,23,2049,11045,10, - 11405,11429,147,102,58,97,115,105,110,0,1,24,2049,11045,10,11419,11444,147,102,58, - 97,99,111,115,0,1,25,2049,11045,10,11434,11459,147,102,58,97,116,97,110,0, - 1,26,2049,11045,10,11449,11474,147,102,58,112,117,115,104,0,1,27,2049,11045,10, - 11464,11488,147,102,58,112,111,112,0,1,28,2049,11045,10,11479,11505,147,102,58,97, - 100,101,112,116,104,0,1,29,2049,11045,10,11493,11522,147,102,58,115,113,117,97, - 114,101,0,2049,11312,2049,11164,10,11510,11537,147,102,58,111,118,101,114,0,2049,11474, - 2049,11312,2049,11488,2049,11342,10,11527,11556,147,102,58,116,117,99,107,0,2049,11312,2049, - 11474,2049,11342,2049,11488,10,11546,11574,147,102,58,110,105,112,0,2049,11342,2049,11327,10, - 11565,11594,147,102,58,100,114,111,112,45,112,97,105,114,0,2049,11327,2049,11327,10, - 11579,11613,147,102,58,100,117,112,45,112,97,105,114,0,2049,11537,2049,11537,10,11599, - 11627,147,102,58,114,111,116,0,2049,11474,2049,11342,2049,11488,2049,11342,10,11618,11651,147, - 102,58,112,111,115,105,116,105,118,101,63,0,1,0,2049,11066,2049,11282,10,11636, - 11673,147,102,58,110,101,103,97,116,105,118,101,63,0,1,0,2049,11066,2049,11268, - 10,11658,11692,147,102,58,110,101,103,97,116,101,0,1,-1,2049,11066,2049,11164,10, - 11680,11708,147,102,58,97,98,115,0,2049,11312,2049,11673,1793,11717,2049,11692,10,1,11714, - 9,10,11699,11733,159,112,114,101,102,105,120,58,46,0,2049,1818,1793,11740,2049,3728, - 10,1,11737,1793,11747,2049,3657,10,1,11744,2049,67,1,11085,2049,147,10,11721,11765,147, - 102,58,112,117,116,0,2049,11125,2049,9783,10,11756,11778,147,102,58,80,73,0,2049, - 3702,51,46,49,52,49,53,57,50,0,1,11780,2049,11085,10,11770,11801,147,102,58, - 69,0,2049,3702,50,46,55,49,56,50,56,49,0,1,11803,2049,11085,10,11794,11826, - 147,102,58,78,65,78,0,2049,3702,48,0,1,11828,2049,11085,2049,3702,48,0,1, - 11836,2049,11085,2049,11176,10,11817,11854,147,102,58,73,78,70,0,2049,3702,49,46,48, - 0,1,11856,2049,11085,2049,3702,48,0,1,11866,2049,11085,2049,11176,10,11845,11885,147,102, - 58,45,73,78,70,0,2049,3702,45,49,46,48,0,1,11887,2049,11085,2049,3702,48, - 0,1,11898,2049,11085,2049,11176,10,11875,11917,147,102,58,110,97,110,63,0,2049,11312, - 2049,11254,10,11907,11932,147,102,58,105,110,102,63,0,2049,11854,2049,11239,10,11922,11948, - 147,102,58,45,105,110,102,63,0,2049,11885,2049,11239,10,11937,11964,147,102,58,114, - 111,117,110,100,0,2049,11312,2049,11673,1793,11985,2049,3702,48,46,53,0,1,11972,2049, - 11085,2049,11152,2049,11210,10,1,11970,1793,12004,2049,3702,48,46,53,0,1,11991,2049,11085, - 2049,11140,2049,11192,10,1,11989,2049,67,10,11953,12018,147,102,58,109,105,110,0,2049, - 11613,2049,11268,1,11327,1,11574,2049,67,10,12009,12038,147,102,58,109,97,120,0,2049, - 11613,2049,11282,1,11327,1,11574,2049,67,10,12029,12060,147,102,58,108,105,109,105,116, - 0,2049,11342,2049,11474,2049,12018,2049,11488,2049,12038,10,12049,12085,147,102,58,98,101,116, - 119,101,101,110,63,0,2049,11627,2049,11312,2049,11474,2049,11627,2049,11627,2049,12060,2049,11488, - 2049,11239,10,12071,12111,147,102,58,105,110,99,0,2049,3702,49,0,1,12113,2049,11085, - 2049,11140,10,12102,12131,147,102,58,100,101,99,0,2049,3702,49,0,1,12133,2049,11085, - 2049,11152,10,12122,12152,147,102,58,99,97,115,101,0,2049,11537,2049,11239,1793,12164,2049, - 11327,8,1,-1,10,1,12158,1793,12172,3,1,0,10,1,12168,2049,67,25,6,771, - 10,12142,12190,147,102,58,115,105,103,110,0,2049,11312,2049,3702,48,0,1,12194,2049, - 11085,2049,11239,1793,12209,1,0,2049,11327,10,1,12204,2049,2505,2049,3702,48,0,1,12215, - 2049,11085,2049,11282,1793,12228,1,1,10,1,12225,1793,12235,1,-1,10,1,12232,2049,67, - 10,12180,2147483646,134,101,58,77,65,88,0,12240,-2147483646,134,101,58,77,73,78,0,12249, - -2147483648,134,101,58,78,65,78,0,12258,2147483647,134,101,58,73,78,70,0,12267,-2147483647,134, - 101,58,45,73,78,70,0,12276,12294,147,101,58,110,63,0,1,-2147483646,2049,2919,1, - 2147483646,2049,2932,2049,2950,10,12286,12315,147,101,58,109,97,120,63,0,1,2147483646,11,10, - 12305,12329,147,101,58,109,105,110,63,0,1,-2147483646,11,10,12319,12344,147,101,58,122, - 101,114,111,63,0,2049,2578,10,12333,12357,147,101,58,110,97,110,63,0,1,-2147483648, - 11,10,12347,12371,147,101,58,105,110,102,63,0,1,2147483647,11,10,12361,12386,147,101, - 58,45,105,110,102,63,0,1,-2147483647,11,10,12375,12400,147,101,58,99,108,105,112, - 0,1,-2147483646,1,2147483646,2049,2902,10,12390,12415,147,102,58,69,49,0,1793,12417,2049,3702, - 49,46,101,53,0,1,12419,2049,11085,10,12407,12441,147,102,58,45,115,104,105,102, - 116,0,2049,12415,2049,11164,10,12429,12458,147,102,58,43,115,104,105,102,116,0,2049, - 12415,2049,11176,10,12446,12480,147,102,58,115,105,103,110,101,100,45,115,113,114,116, - 0,2049,11312,2049,12190,2049,11708,2049,11225,2049,11066,2049,11164,10,12463,12506,147,102,58,43, - 101,110,99,111,100,101,0,2049,12480,2049,12441,10,12493,12524,147,102,58,45,101,110, - 99,111,100,101,0,2049,11312,2049,12190,2049,12458,2049,11312,2049,11164,2049,11066,2049,11164,10, - 12511,12558,147,102,58,115,105,103,110,101,100,45,115,113,117,97,114,101,0,2049, - 11312,2049,12190,2049,11312,2049,11164,2049,11066,2049,11164,10,12539,12581,147,102,58,116,111,45, - 101,0,2049,11312,2049,11917,1793,12593,2049,11327,3,1,-2147483648,10,1,12587,2049,2505,2049,11312, - 2049,11932,1793,12609,2049,11327,3,1,2147483647,10,1,12603,2049,2505,2049,11312,2049,11948,1793,12625, - 2049,11327,3,1,-2147483647,10,1,12619,2049,2505,2049,12506,2049,11964,2049,11105,2049,12400,1,-2147483646, - 1793,12644,2049,11327,10,1,12641,2049,2293,1,2147483646,1793,12655,2049,11327,10,1,12652,2049,2293, - 10,12571,12670,147,101,58,116,111,45,102,0,1,-2147483648,1793,12678,3,2049,11826,10,1, - 12674,2049,2293,1,2147483647,1793,12690,3,2049,11854,10,1,12686,2049,2293,1,-2147483647,1793,12702,3, - 2049,11885,10,1,12698,2049,2293,2049,11066,2049,12524,10,12660,12722,147,102,58,115,116,111, - 114,101,0,1793,12727,2049,12581,10,1,12724,2049,2076,16,10,12711,12744,147,102,58,102, - 101,116,99,104,0,15,2049,12670,10,12733,12764,147,102,58,100,117,109,112,45,115, - 116,97,99,107,0,2049,11298,2,1793,12772,2049,11474,10,1,12769,2049,2263,1793,12787,2049, - 11488,2049,11312,2049,11765,2049,9757,10,1,12778,2049,2263,10,12748,12809,147,102,58,100,117, - 109,112,45,97,115,116,97,99,107,0,2049,11505,2,1793,12817,2049,11488,10,1,12814, - 2049,2263,1793,12832,2049,11312,2049,11765,2049,9757,2049,11474,10,1,12823,2049,2263,10,12792,12846, - 147,101,58,112,117,116,0,1,2147483646,1793,12863,2049,3702,101,58,77,65,88,0,1, - 12852,2049,9783,10,1,12850,2049,2293,1,-2147483646,1793,12884,2049,3702,101,58,77,73,78,0, - 1,12873,2049,9783,10,1,12871,2049,2293,1,0,1793,12903,2049,3702,101,58,48,0,1, - 12894,2049,9783,10,1,12892,2049,2293,1,-2147483648,1793,12924,2049,3702,101,58,78,65,78,0, - 1,12913,2049,9783,10,1,12911,2049,2293,1,2147483647,1793,12945,2049,3702,101,58,73,78,70, - 0,1,12934,2049,9783,10,1,12932,2049,2293,1,-2147483647,1793,12967,2049,3702,101,58,45,73, - 78,70,0,1,12955,2049,9783,10,1,12953,2049,2293,2049,12670,2049,11765,10,12837,12994,134, - 105,111,58,85,110,105,120,83,121,115,99,97,108,108,0,0,12976,13007,147,105, - 100,101,110,116,105,102,121,0,3841,12994,2049,2578,1793,13074,1,8,2049,9690,2,2049, - 2613,1793,13062,3,2049,3702,73,79,32,68,69,86,73,67,69,32,84,89,80,69, - 32,48,48,48,56,32,78,79,84,32,70,79,85,78,68,0,1,13025,2049,9783, - 2049,9746,10,1,13022,1793,13069,4097,12994,10,1,13066,2049,67,10,1,13013,9,10,12837, - 13097,147,105,111,58,117,110,105,120,45,115,121,115,99,97,108,108,0,2049,13007, - 3841,12994,2049,9664,10,13078,13119,147,117,110,105,120,58,115,121,115,116,101,109,0, - 1,0,2049,13097,10,13104,13137,147,117,110,105,120,58,102,111,114,107,0,1,1, - 2049,13097,10,13124,13156,147,117,110,105,120,58,101,120,101,99,48,0,1,2,2049, - 13097,10,13142,13175,147,117,110,105,120,58,101,120,101,99,49,0,1,3,2049,13097, - 10,13161,13194,147,117,110,105,120,58,101,120,101,99,50,0,1,4,2049,13097,10, - 13180,13213,147,117,110,105,120,58,101,120,101,99,51,0,1,5,2049,13097,10,13199, - 13231,147,117,110,105,120,58,101,120,105,116,0,1,6,2049,13097,10,13218,13251,147, - 117,110,105,120,58,103,101,116,112,105,100,0,1,7,2049,13097,10,13236,13269,147, - 117,110,105,120,58,119,97,105,116,0,1,8,2049,13097,10,13256,13287,147,117,110, - 105,120,58,107,105,108,108,0,1,9,2049,13097,10,13274,13306,147,117,110,105,120, - 58,112,111,112,101,110,0,1,10,2049,13097,10,13292,13326,147,117,110,105,120,58, - 112,99,108,111,115,101,0,1,11,2049,13097,10,13311,13345,147,117,110,105,120,58, - 119,114,105,116,101,0,1793,13351,2,2049,82,10,1,13347,2049,2076,1,12,2049,13097, - 10,13331,13374,147,117,110,105,120,58,99,104,100,105,114,0,1,13,2049,13097,10, - 13360,13394,147,117,110,105,120,58,103,101,116,101,110,118,0,1,14,2049,13097,10, - 13379,13414,147,117,110,105,120,58,112,117,116,101,110,118,0,1,15,2049,13097,10, - 13399,13433,147,117,110,105,120,58,115,108,101,101,112,0,1,16,2049,13097,10,13419, - 13455,147,117,110,105,120,58,105,111,58,110,58,112,117,116,0,1,17,2049,13097, - 10,13438,13477,147,117,110,105,120,58,105,111,58,115,58,112,117,116,0,1,18, - 2049,13097,10,13460,13495,147,117,110,105,120,58,116,105,109,101,0,1,19,2049,13097, - 10,13482,13513,147,99,108,111,99,107,58,100,97,121,0,1,20,2049,13097,10,13500, - 13533,147,99,108,111,99,107,58,109,111,110,116,104,0,1,21,2049,13097,10,13518, - 13552,147,99,108,111,99,107,58,121,101,97,114,0,1,22,2049,13097,10,13538,13571, - 147,99,108,111,99,107,58,104,111,117,114,0,1,23,2049,13097,10,13557,13592,147, - 99,108,111,99,107,58,109,105,110,117,116,101,0,1,24,2049,13097,10,13576,13613, - 147,99,108,111,99,107,58,115,101,99,111,110,100,0,1,25,2049,13097,10,13597, - 13635,147,99,108,111,99,107,58,117,116,99,58,100,97,121,0,1,26,2049,13097, - 10,13618,13659,147,99,108,111,99,107,58,117,116,99,58,109,111,110,116,104,0, - 1,27,2049,13097,10,13640,13682,147,99,108,111,99,107,58,117,116,99,58,121,101, - 97,114,0,1,28,2049,13097,10,13664,13705,147,99,108,111,99,107,58,117,116,99, - 58,104,111,117,114,0,1,29,2049,13097,10,13687,13730,147,99,108,111,99,107,58, - 117,116,99,58,109,105,110,117,116,101,0,1,30,2049,13097,10,13710,13755,147,99, - 108,111,99,107,58,117,116,99,58,115,101,99,111,110,100,0,1,31,2049,13097, - 10,13735,13776,147,117,110,105,120,58,103,101,116,45,99,119,100,0,2049,3702,112, - 119,100,0,1,13778,1,0,2049,13306,2,2049,10570,2049,3951,4,2049,13326,1,0,2049, - 3702,115,121,115,58,97,114,103,118,0,1,13800,2049,200,2049,161,15,8,2049,82, - 17,2049,3702,47,0,1,13822,2049,4010,10,13760,13856,147,117,110,105,120,58,99,111, + 0,1,10850,2049,9783,2049,9746,10,1,10847,1793,10894,4097,10819,10,1,10891,2049,67,10, + 1,10838,9,10,10766,10925,147,105,111,58,102,108,111,97,116,45,111,112,101,114, + 97,116,105,111,110,0,2049,10832,3841,10819,2049,9664,10,10903,10946,147,110,58,116,111, + 45,102,108,111,97,116,0,1,0,2049,10925,10,10932,10965,147,115,58,116,111,45, + 102,108,111,97,116,0,1,1,2049,10925,10,10951,10985,147,102,58,116,111,45,110, + 117,109,98,101,114,0,1,2,2049,10925,10,10970,11005,147,102,58,116,111,45,115, + 116,114,105,110,103,0,2049,3683,2,1,3,2049,10925,10,10990,11020,147,102,58,43, + 0,1,4,2049,10925,10,11013,11032,147,102,58,45,0,1,5,2049,10925,10,11025,11044, + 147,102,58,42,0,1,6,2049,10925,10,11037,11056,147,102,58,47,0,1,7,2049, + 10925,10,11049,11072,147,102,58,102,108,111,111,114,0,1,8,2049,10925,10,11061,11090, + 147,102,58,99,101,105,108,105,110,103,0,1,9,2049,10925,10,11077,11105,147,102, + 58,115,113,114,116,0,1,10,2049,10925,10,11095,11119,147,102,58,101,113,63,0, + 1,11,2049,10925,10,11110,11134,147,102,58,45,101,113,63,0,1,12,2049,10925,10, + 11124,11148,147,102,58,108,116,63,0,1,13,2049,10925,10,11139,11162,147,102,58,103, + 116,63,0,1,14,2049,10925,10,11153,11178,147,102,58,100,101,112,116,104,0,1, + 15,2049,10925,10,11167,11192,147,102,58,100,117,112,0,1,16,2049,10925,10,11183,11207, + 147,102,58,100,114,111,112,0,1,17,2049,10925,10,11197,11222,147,102,58,115,119, + 97,112,0,1,18,2049,10925,10,11212,11236,147,102,58,108,111,103,0,1,19,2049, + 10925,10,11227,11252,147,102,58,112,111,119,101,114,0,1,20,2049,10925,10,11241,11266, + 147,102,58,115,105,110,0,1,21,2049,10925,10,11257,11280,147,102,58,99,111,115, + 0,1,22,2049,10925,10,11271,11294,147,102,58,116,97,110,0,1,23,2049,10925,10, + 11285,11309,147,102,58,97,115,105,110,0,1,24,2049,10925,10,11299,11324,147,102,58, + 97,99,111,115,0,1,25,2049,10925,10,11314,11339,147,102,58,97,116,97,110,0, + 1,26,2049,10925,10,11329,11354,147,102,58,112,117,115,104,0,1,27,2049,10925,10, + 11344,11368,147,102,58,112,111,112,0,1,28,2049,10925,10,11359,11385,147,102,58,97, + 100,101,112,116,104,0,1,29,2049,10925,10,11373,11402,147,102,58,115,113,117,97, + 114,101,0,2049,11192,2049,11044,10,11390,11417,147,102,58,111,118,101,114,0,2049,11354, + 2049,11192,2049,11368,2049,11222,10,11407,11436,147,102,58,116,117,99,107,0,2049,11192,2049, + 11354,2049,11222,2049,11368,10,11426,11454,147,102,58,110,105,112,0,2049,11222,2049,11207,10, + 11445,11474,147,102,58,100,114,111,112,45,112,97,105,114,0,2049,11207,2049,11207,10, + 11459,11493,147,102,58,100,117,112,45,112,97,105,114,0,2049,11417,2049,11417,10,11479, + 11507,147,102,58,114,111,116,0,2049,11354,2049,11222,2049,11368,2049,11222,10,11498,11531,147, + 102,58,112,111,115,105,116,105,118,101,63,0,1,0,2049,10946,2049,11162,10,11516, + 11553,147,102,58,110,101,103,97,116,105,118,101,63,0,1,0,2049,10946,2049,11148, + 10,11538,11572,147,102,58,110,101,103,97,116,101,0,1,-1,2049,10946,2049,11044,10, + 11560,11588,147,102,58,97,98,115,0,2049,11192,2049,11553,1793,11597,2049,11572,10,1,11594, + 9,10,11579,11613,159,112,114,101,102,105,120,58,46,0,2049,1818,1793,11620,2049,3728, + 10,1,11617,1793,11627,2049,3657,10,1,11624,2049,67,1,10965,2049,147,10,11601,11645,147, + 102,58,112,117,116,0,2049,11005,2049,9783,10,11636,11658,147,102,58,80,73,0,2049, + 3702,51,46,49,52,49,53,57,50,0,1,11660,2049,10965,10,11650,11681,147,102,58, + 69,0,2049,3702,50,46,55,49,56,50,56,49,0,1,11683,2049,10965,10,11674,11706, + 147,102,58,78,65,78,0,2049,3702,48,0,1,11708,2049,10965,2049,3702,48,0,1, + 11716,2049,10965,2049,11056,10,11697,11734,147,102,58,73,78,70,0,2049,3702,49,46,48, + 0,1,11736,2049,10965,2049,3702,48,0,1,11746,2049,10965,2049,11056,10,11725,11765,147,102, + 58,45,73,78,70,0,2049,3702,45,49,46,48,0,1,11767,2049,10965,2049,3702,48, + 0,1,11778,2049,10965,2049,11056,10,11755,11797,147,102,58,110,97,110,63,0,2049,11192, + 2049,11134,10,11787,11812,147,102,58,105,110,102,63,0,2049,11734,2049,11119,10,11802,11828, + 147,102,58,45,105,110,102,63,0,2049,11765,2049,11119,10,11817,11844,147,102,58,114, + 111,117,110,100,0,2049,11192,2049,11553,1793,11865,2049,3702,48,46,53,0,1,11852,2049, + 10965,2049,11032,2049,11090,10,1,11850,1793,11884,2049,3702,48,46,53,0,1,11871,2049,10965, + 2049,11020,2049,11072,10,1,11869,2049,67,10,11833,11898,147,102,58,109,105,110,0,2049, + 11493,2049,11148,1,11207,1,11454,2049,67,10,11889,11918,147,102,58,109,97,120,0,2049, + 11493,2049,11162,1,11207,1,11454,2049,67,10,11909,11940,147,102,58,108,105,109,105,116, + 0,2049,11222,2049,11354,2049,11898,2049,11368,2049,11918,10,11929,11965,147,102,58,98,101,116, + 119,101,101,110,63,0,2049,11507,2049,11192,2049,11354,2049,11507,2049,11507,2049,11940,2049,11368, + 2049,11119,10,11951,11991,147,102,58,105,110,99,0,2049,3702,49,0,1,11993,2049,10965, + 2049,11020,10,11982,12011,147,102,58,100,101,99,0,2049,3702,49,0,1,12013,2049,10965, + 2049,11032,10,12002,12032,147,102,58,99,97,115,101,0,2049,11417,2049,11119,1793,12044,2049, + 11207,8,1,-1,10,1,12038,1793,12052,3,1,0,10,1,12048,2049,67,25,6,771, + 10,12022,12070,147,102,58,115,105,103,110,0,2049,11192,2049,3702,48,0,1,12074,2049, + 10965,2049,11119,1793,12089,1,0,2049,11207,10,1,12084,2049,2505,2049,3702,48,0,1,12095, + 2049,10965,2049,11162,1793,12108,1,1,10,1,12105,1793,12115,1,-1,10,1,12112,2049,67, + 10,12060,2147483646,134,101,58,77,65,88,0,12120,-2147483646,134,101,58,77,73,78,0,12129, + -2147483648,134,101,58,78,65,78,0,12138,2147483647,134,101,58,73,78,70,0,12147,-2147483647,134, + 101,58,45,73,78,70,0,12156,12174,147,101,58,110,63,0,1,-2147483646,2049,2919,1, + 2147483646,2049,2932,2049,2950,10,12166,12195,147,101,58,109,97,120,63,0,1,2147483646,11,10, + 12185,12209,147,101,58,109,105,110,63,0,1,-2147483646,11,10,12199,12224,147,101,58,122, + 101,114,111,63,0,2049,2578,10,12213,12237,147,101,58,110,97,110,63,0,1,-2147483648, + 11,10,12227,12251,147,101,58,105,110,102,63,0,1,2147483647,11,10,12241,12266,147,101, + 58,45,105,110,102,63,0,1,-2147483647,11,10,12255,12280,147,101,58,99,108,105,112, + 0,1,-2147483646,1,2147483646,2049,2902,10,12270,12295,147,102,58,69,49,0,1793,12297,2049,3702, + 49,46,101,53,0,1,12299,2049,10965,10,12287,12321,147,102,58,45,115,104,105,102, + 116,0,2049,12295,2049,11044,10,12309,12338,147,102,58,43,115,104,105,102,116,0,2049, + 12295,2049,11056,10,12326,12360,147,102,58,115,105,103,110,101,100,45,115,113,114,116, + 0,2049,11192,2049,12070,2049,11588,2049,11105,2049,10946,2049,11044,10,12343,12386,147,102,58,43, + 101,110,99,111,100,101,0,2049,12360,2049,12321,10,12373,12404,147,102,58,45,101,110, + 99,111,100,101,0,2049,11192,2049,12070,2049,12338,2049,11192,2049,11044,2049,10946,2049,11044,10, + 12391,12438,147,102,58,115,105,103,110,101,100,45,115,113,117,97,114,101,0,2049, + 11192,2049,12070,2049,11192,2049,11044,2049,10946,2049,11044,10,12419,12461,147,102,58,116,111,45, + 101,0,2049,11192,2049,11797,1793,12473,2049,11207,3,1,-2147483648,10,1,12467,2049,2505,2049,11192, + 2049,11812,1793,12489,2049,11207,3,1,2147483647,10,1,12483,2049,2505,2049,11192,2049,11828,1793,12505, + 2049,11207,3,1,-2147483647,10,1,12499,2049,2505,2049,12386,2049,11844,2049,10985,2049,12280,1,-2147483646, + 1793,12524,2049,11207,10,1,12521,2049,2293,1,2147483646,1793,12535,2049,11207,10,1,12532,2049,2293, + 10,12451,12550,147,101,58,116,111,45,102,0,1,-2147483648,1793,12558,3,2049,11706,10,1, + 12554,2049,2293,1,2147483647,1793,12570,3,2049,11734,10,1,12566,2049,2293,1,-2147483647,1793,12582,3, + 2049,11765,10,1,12578,2049,2293,2049,10946,2049,12404,10,12540,12602,147,102,58,115,116,111, + 114,101,0,1793,12607,2049,12461,10,1,12604,2049,2076,16,10,12591,12624,147,102,58,102, + 101,116,99,104,0,15,2049,12550,10,12613,12644,147,102,58,100,117,109,112,45,115, + 116,97,99,107,0,2049,11178,2,1793,12652,2049,11354,10,1,12649,2049,2263,1793,12667,2049, + 11368,2049,11192,2049,11645,2049,9757,10,1,12658,2049,2263,10,12628,12689,147,102,58,100,117, + 109,112,45,97,115,116,97,99,107,0,2049,11385,2,1793,12697,2049,11368,10,1,12694, + 2049,2263,1793,12712,2049,11192,2049,11645,2049,9757,2049,11354,10,1,12703,2049,2263,10,12672,12726, + 147,101,58,112,117,116,0,1,2147483646,1793,12743,2049,3702,101,58,77,65,88,0,1, + 12732,2049,9783,10,1,12730,2049,2293,1,-2147483646,1793,12764,2049,3702,101,58,77,73,78,0, + 1,12753,2049,9783,10,1,12751,2049,2293,1,0,1793,12783,2049,3702,101,58,48,0,1, + 12774,2049,9783,10,1,12772,2049,2293,1,-2147483648,1793,12804,2049,3702,101,58,78,65,78,0, + 1,12793,2049,9783,10,1,12791,2049,2293,1,2147483647,1793,12825,2049,3702,101,58,73,78,70, + 0,1,12814,2049,9783,10,1,12812,2049,2293,1,-2147483647,1793,12847,2049,3702,101,58,45,73, + 78,70,0,1,12835,2049,9783,10,1,12833,2049,2293,2049,12550,2049,11645,10,12717,12874,134, + 105,111,58,85,110,105,120,83,121,115,99,97,108,108,0,0,12856,12887,147,105, + 100,101,110,116,105,102,121,0,3841,12874,2049,2578,1793,12954,1,8,2049,9690,2,2049, + 2613,1793,12942,3,2049,3702,73,79,32,68,69,86,73,67,69,32,84,89,80,69, + 32,48,48,48,56,32,78,79,84,32,70,79,85,78,68,0,1,12905,2049,9783, + 2049,9746,10,1,12902,1793,12949,4097,12874,10,1,12946,2049,67,10,1,12893,9,10,12717, + 12977,147,105,111,58,117,110,105,120,45,115,121,115,99,97,108,108,0,2049,12887, + 3841,12874,2049,9664,10,12958,12999,147,117,110,105,120,58,115,121,115,116,101,109,0, + 1,0,2049,12977,10,12984,13017,147,117,110,105,120,58,102,111,114,107,0,1,1, + 2049,12977,10,13004,13036,147,117,110,105,120,58,101,120,101,99,48,0,1,2,2049, + 12977,10,13022,13055,147,117,110,105,120,58,101,120,101,99,49,0,1,3,2049,12977, + 10,13041,13074,147,117,110,105,120,58,101,120,101,99,50,0,1,4,2049,12977,10, + 13060,13093,147,117,110,105,120,58,101,120,101,99,51,0,1,5,2049,12977,10,13079, + 13111,147,117,110,105,120,58,101,120,105,116,0,1,6,2049,12977,10,13098,13131,147, + 117,110,105,120,58,103,101,116,112,105,100,0,1,7,2049,12977,10,13116,13149,147, + 117,110,105,120,58,119,97,105,116,0,1,8,2049,12977,10,13136,13167,147,117,110, + 105,120,58,107,105,108,108,0,1,9,2049,12977,10,13154,13186,147,117,110,105,120, + 58,112,111,112,101,110,0,1,10,2049,12977,10,13172,13206,147,117,110,105,120,58, + 112,99,108,111,115,101,0,1,11,2049,12977,10,13191,13225,147,117,110,105,120,58, + 119,114,105,116,101,0,1793,13231,2,2049,82,10,1,13227,2049,2076,1,12,2049,12977, + 10,13211,13254,147,117,110,105,120,58,99,104,100,105,114,0,1,13,2049,12977,10, + 13240,13274,147,117,110,105,120,58,103,101,116,101,110,118,0,1,14,2049,12977,10, + 13259,13294,147,117,110,105,120,58,112,117,116,101,110,118,0,1,15,2049,12977,10, + 13279,13313,147,117,110,105,120,58,115,108,101,101,112,0,1,16,2049,12977,10,13299, + 13335,147,117,110,105,120,58,105,111,58,110,58,112,117,116,0,1,17,2049,12977, + 10,13318,13357,147,117,110,105,120,58,105,111,58,115,58,112,117,116,0,1,18, + 2049,12977,10,13340,13375,147,117,110,105,120,58,116,105,109,101,0,1,19,2049,12977, + 10,13362,13393,147,99,108,111,99,107,58,100,97,121,0,1,20,2049,12977,10,13380, + 13413,147,99,108,111,99,107,58,109,111,110,116,104,0,1,21,2049,12977,10,13398, + 13432,147,99,108,111,99,107,58,121,101,97,114,0,1,22,2049,12977,10,13418,13451, + 147,99,108,111,99,107,58,104,111,117,114,0,1,23,2049,12977,10,13437,13472,147, + 99,108,111,99,107,58,109,105,110,117,116,101,0,1,24,2049,12977,10,13456,13493, + 147,99,108,111,99,107,58,115,101,99,111,110,100,0,1,25,2049,12977,10,13477, + 13515,147,99,108,111,99,107,58,117,116,99,58,100,97,121,0,1,26,2049,12977, + 10,13498,13539,147,99,108,111,99,107,58,117,116,99,58,109,111,110,116,104,0, + 1,27,2049,12977,10,13520,13562,147,99,108,111,99,107,58,117,116,99,58,121,101, + 97,114,0,1,28,2049,12977,10,13544,13585,147,99,108,111,99,107,58,117,116,99, + 58,104,111,117,114,0,1,29,2049,12977,10,13567,13610,147,99,108,111,99,107,58, + 117,116,99,58,109,105,110,117,116,101,0,1,30,2049,12977,10,13590,13635,147,99, + 108,111,99,107,58,117,116,99,58,115,101,99,111,110,100,0,1,31,2049,12977, + 10,13615,13656,147,117,110,105,120,58,103,101,116,45,99,119,100,0,2049,3702,112, + 119,100,0,1,13658,1,0,2049,13186,2,2049,10570,2049,3951,4,2049,13206,1,0,2049, + 3702,115,121,115,58,97,114,103,118,0,1,13680,2049,200,2049,161,15,8,2049,82, + 17,2049,3702,47,0,1,13702,2049,4010,10,13640,13736,147,117,110,105,120,58,99,111, 117,110,116,45,102,105,108,101,115,45,105,110,45,99,119,100,0,2049,3702,108, - 115,32,45,49,32,124,32,119,99,32,45,108,0,1,13858,1,0,2049,13306,2, - 2049,10570,2049,3951,2049,221,4,2049,13326,10,13829,13911,147,117,110,105,120,58,102,111, + 115,32,45,49,32,124,32,119,99,32,45,108,0,1,13738,1,0,2049,13186,2, + 2049,10570,2049,3951,2049,221,4,2049,13206,10,13709,13791,147,117,110,105,120,58,102,111, 114,45,101,97,99,104,45,102,105,108,101,0,2049,3702,108,115,32,45,49,32, - 45,112,0,1,13913,1,0,2049,13306,2049,13856,1793,13946,1793,13941,2049,10570,2049,3657,67502597, - 8,10,1,13934,2049,2088,10,1,13932,2049,2263,2049,13326,3,10,13889,13969,147,114,97, + 45,112,0,1,13793,1,0,2049,13186,2049,13736,1793,13826,1793,13821,2049,10570,2049,3657,67502597, + 8,10,1,13814,2049,2088,10,1,13812,2049,2263,2049,13206,3,10,13769,13849,147,114,97, 110,100,111,109,58,98,121,116,101,0,2049,3702,47,100,101,118,47,117,114,97, - 110,100,111,109,0,1,13971,1,0,2049,10167,1,10204,2049,2088,2049,10186,10,13889,14009, - 147,110,58,114,97,110,100,111,109,0,2049,13969,1,-8,24,2049,13969,17,1,-8, - 24,2049,13969,17,1,8,24,2049,13969,17,10,13997,14038,134,74,85,77,80,0,-2023489525, - -180170029,1872770499,2012404571,14030,14047,134,107,0,0,14042,14053,134,116,0,0,14048,14060,134,115,48, - 0,0,14054,14067,134,115,49,0,0,14061,14074,134,115,50,0,0,14068,14081,134,115, - 51,0,0,14075,14092,147,114,101,115,101,101,100,0,2,4097,14067,2,4097,14074,2, - 4097,14081,2,4097,14047,4097,14053,10,14082,14115,147,114,111,116,108,0,4097,14047,1793,14125, - 3841,14047,2049,2770,24,10,1,14119,1793,14136,1,32,3841,14047,18,24,10,1,14129,2049, - 2103,22,10,14107,14151,147,114,101,115,42,42,0,3841,14060,1,5,19,1,7,2049, - 14115,1,9,19,10,14142,14172,147,110,101,120,116,0,3841,14067,2,1,-9,24,5, - 3841,14081,3841,14060,3841,14074,386269701,1285,386269701,100926980,85394690,386269701,386270726,4097,14074,4097,14067,4097,14060,1, - 11,2049,14115,4097,14081,10,14164,14215,147,120,111,114,45,101,114,0,386860290,5,386860290,5, - 386860290,5,386860290,5,101058054,101058054,10,14205,14235,147,106,117,109,112,63,0,1793,14242,1,14038, - 17,15,10,1,14237,2049,2076,1,1,4,2049,2770,24,21,10,14226,14263,147,105,110, - 110,101,114,0,1,32,1793,14290,2,2049,9482,2049,14235,1793,14284,1793,14279,2049,14215,10, - 1,14276,2049,2076,10,1,14274,9,2049,14172,10,1,14267,2049,9539,10,13997,14320,147,114, + 110,100,111,109,0,1,13851,1,0,2049,10167,1,10204,2049,2088,2049,10186,10,13769,13889, + 147,110,58,114,97,110,100,111,109,0,2049,13849,1,-8,24,2049,13849,17,1,-8, + 24,2049,13849,17,1,8,24,2049,13849,17,10,13877,13918,134,74,85,77,80,0,-2023489525, + -180170029,1872770499,2012404571,13910,13927,134,107,0,0,13922,13933,134,116,0,0,13928,13940,134,115,48, + 0,0,13934,13947,134,115,49,0,0,13941,13954,134,115,50,0,0,13948,13961,134,115, + 51,0,0,13955,13972,147,114,101,115,101,101,100,0,2,4097,13947,2,4097,13954,2, + 4097,13961,2,4097,13927,4097,13933,10,13962,13995,147,114,111,116,108,0,4097,13927,1793,14005, + 3841,13927,2049,2770,24,10,1,13999,1793,14016,1,32,3841,13927,18,24,10,1,14009,2049, + 2103,22,10,13987,14031,147,114,101,115,42,42,0,3841,13940,1,5,19,1,7,2049, + 13995,1,9,19,10,14022,14052,147,110,101,120,116,0,3841,13947,2,1,-9,24,5, + 3841,13961,3841,13940,3841,13954,386269701,1285,386269701,100926980,85394690,386269701,386270726,4097,13954,4097,13947,4097,13940,1, + 11,2049,13995,4097,13961,10,14044,14095,147,120,111,114,45,101,114,0,386860290,5,386860290,5, + 386860290,5,386860290,5,101058054,101058054,10,14085,14115,147,106,117,109,112,63,0,1793,14122,1,13918, + 17,15,10,1,14117,2049,2076,1,1,4,2049,2770,24,21,10,14106,14143,147,105,110, + 110,101,114,0,1,32,1793,14170,2,2049,9482,2049,14115,1793,14164,1793,14159,2049,14095,10, + 1,14156,2049,2076,10,1,14154,9,2049,14052,10,1,14147,2049,9539,10,13877,14200,147,114, 97,110,100,111,109,58,120,111,114,111,115,104,105,114,111,49,50,56,42,42, - 0,2049,14172,2049,14151,10,14295,14355,147,114,97,110,100,111,109,58,120,111,114,111, - 115,104,105,114,111,49,50,56,42,42,58,106,117,109,112,0,1,0,1,14081, - 1,0,1,14074,1,0,1,14067,1,0,1,14060,1,4,1793,14381,2049,9482,2049,14263, - 3,10,1,14375,2049,9539,269488144,10,14325,14421,147,114,97,110,100,111,109,58,120,111, + 0,2049,14052,2049,14031,10,14175,14235,147,114,97,110,100,111,109,58,120,111,114,111, + 115,104,105,114,111,49,50,56,42,42,58,106,117,109,112,0,1,0,1,13961, + 1,0,1,13954,1,0,1,13947,1,0,1,13940,1,4,1793,14261,2049,9482,2049,14143, + 3,10,1,14255,2049,9539,269488144,10,14205,14301,147,114,97,110,100,111,109,58,120,111, 114,111,115,104,105,114,111,49,50,56,42,42,58,115,101,116,45,115,101,101, - 100,0,2049,14092,1,100,1793,14430,2049,14172,10,1,14427,2049,2263,10,14387,14470,147,114, + 100,0,2049,13972,1,100,1793,14310,2049,14052,10,1,14307,2049,2263,10,14267,14350,147,114, 97,110,100,111,109,58,120,111,114,111,115,104,105,114,111,49,50,56,42,42, - 58,116,101,115,116,45,115,101,101,100,0,4097,14060,4097,14067,4097,14074,4097,14081,10, - 14435,14489,134,83,116,97,116,101,115,0,0,0,0,0,0,0,0,0,0,0, + 58,116,101,115,116,45,115,101,101,100,0,4097,13940,4097,13947,4097,13954,4097,13961,10, + 14315,14369,134,83,116,97,116,101,115,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, @@ -755,126 +749,126 @@ int32_t ngaImage[] = { 1793,17327,17505,17547,201912,0,10,1,10,2,10,3,10,4,10,5, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14479,15123,134,73,110, - 100,101,120,0,0,15114,15133,147,114,101,115,101,116,0,1,14489,67502597,2049,2932,17, - 2,15,1,30,24,4,15,23,1,1812433253,19,67502597,17,2049,2552,21,4,1,14489,17, - 16,10,15124,15175,147,114,97,110,100,111,109,105,122,101,100,0,1,1,1793,15189, - 2,2049,15133,2049,2919,2,1,624,14,10,1,15179,2049,2234,3,10,15161,15200,147,121, - 0,2,2049,2919,1,624,788,1,14489,17,15,2049,2552,21,4,1,14489,17,15,1, - -31,24,17,10,15195,15234,147,97,108,116,101,114,101,100,0,2,2049,15200,2,1, - 1,21,1,1073741823,19,1793,15262,1,2,197652,67502597,1,397,17,1,624,788,1,14489,17, - 15,23,10,1,15246,2049,2076,23,4,1,14489,17,16,10,15223,15286,147,115,99,114, - 97,109,98,108,101,100,0,1,0,1793,15300,2,2049,15234,2049,2919,2,1,624,14, - 10,1,15290,2049,2234,3,10,14435,15334,147,114,97,110,100,111,109,58,109,101,114, - 115,101,110,110,101,58,115,101,116,45,115,101,101,100,0,4097,14489,1,0,4097, - 15123,2049,15175,10,15306,15362,147,114,97,110,100,111,109,58,109,101,114,115,101,110, - 110,101,0,3841,15123,2049,2578,1,15286,9,3841,15123,1,14489,17,15,2,1,11,24, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14359,15003,134,73,110, + 100,101,120,0,0,14994,15013,147,114,101,115,101,116,0,1,14369,67502597,2049,2932,17, + 2,15,1,30,24,4,15,23,1,1812433253,19,67502597,17,2049,2552,21,4,1,14369,17, + 16,10,15004,15055,147,114,97,110,100,111,109,105,122,101,100,0,1,1,1793,15069, + 2,2049,15013,2049,2919,2,1,624,14,10,1,15059,2049,2234,3,10,15041,15080,147,121, + 0,2,2049,2919,1,624,788,1,14369,17,15,2049,2552,21,4,1,14369,17,15,1, + -31,24,17,10,15075,15114,147,97,108,116,101,114,101,100,0,2,2049,15080,2,1, + 1,21,1,1073741823,19,1793,15142,1,2,197652,67502597,1,397,17,1,624,788,1,14369,17, + 15,23,10,1,15126,2049,2076,23,4,1,14369,17,16,10,15103,15166,147,115,99,114, + 97,109,98,108,101,100,0,1,0,1793,15180,2,2049,15114,2049,2919,2,1,624,14, + 10,1,15170,2049,2234,3,10,14315,15214,147,114,97,110,100,111,109,58,109,101,114, + 115,101,110,110,101,58,115,101,116,45,115,101,101,100,0,4097,14369,1,0,4097, + 15003,2049,15055,10,15186,15242,147,114,97,110,100,111,109,58,109,101,114,115,101,110, + 110,101,0,3841,15003,2049,2578,1,15166,9,3841,15003,1,14369,17,15,2,1,11,24, 23,2,1,-7,24,1,1073741823,21,23,2,1,-15,24,1,2011365376,21,23,2,1,18, - 24,23,3841,15123,2049,2919,1,624,788,4097,15123,10,15343,1024,134,84,73,66,0,15411, - 15433,134,105,111,58,75,101,121,98,111,97,114,100,0,0,15418,15446,147,105,100, - 101,110,116,105,102,121,0,3841,15433,2049,2578,1793,15513,1,1,2049,9690,2,2049,2613, - 1793,15501,3,2049,3702,73,79,32,68,69,86,73,67,69,32,84,89,80,69,32, - 48,48,48,49,32,78,79,84,32,70,79,85,78,68,0,1,15464,2049,9783,2049, - 9746,10,1,15461,1793,15508,4097,15433,10,1,15505,2049,67,10,1,15452,9,10,15411,15526, - 147,99,58,103,101,116,0,2049,15446,3841,15433,2049,9664,10,15517,15543,147,103,97,116, - 104,101,114,0,2,1793,15550,1,8,11,10,1,15546,1793,15558,1,127,11,10,1, - 15554,2049,2103,22,1793,15567,3,10,1,15565,1793,15574,2049,3388,10,1,15571,2049,67,10, - 15533,15588,147,99,121,99,108,101,0,2049,15526,2049,2066,4,8,2049,2731,25,3,2049, - 15543,1,15588,7,10,15517,15619,147,112,97,114,115,101,45,117,110,116,105,108,0, - 1793,15631,2049,3683,2049,3480,2049,15588,771,2049,3354,10,1,15621,2049,3504,10,15604,15645,147, - 115,58,103,101,116,0,1793,15667,1793,15653,1,10,11,10,1,15649,1793,15661,1,13, - 11,10,1,15657,2049,2103,22,10,1,15647,2049,15619,10,15636,15688,134,105,111,58,83, - 99,114,105,112,116,105,110,103,0,4,15672,15701,147,105,100,101,110,116,105,102, - 121,0,3841,15688,2049,2578,1793,15768,1,9,2049,9690,2,2049,2613,1793,15756,3,2049,3702, + 24,23,3841,15003,2049,2919,1,624,788,4097,15003,10,15223,1024,134,84,73,66,0,15291, + 15313,134,105,111,58,75,101,121,98,111,97,114,100,0,0,15298,15326,147,105,100, + 101,110,116,105,102,121,0,3841,15313,2049,2578,1793,15393,1,1,2049,9690,2,2049,2613, + 1793,15381,3,2049,3702,73,79,32,68,69,86,73,67,69,32,84,89,80,69,32, + 48,48,48,49,32,78,79,84,32,70,79,85,78,68,0,1,15344,2049,9783,2049, + 9746,10,1,15341,1793,15388,4097,15313,10,1,15385,2049,67,10,1,15332,9,10,15291,15406, + 147,99,58,103,101,116,0,2049,15326,3841,15313,2049,9664,10,15397,15423,147,103,97,116, + 104,101,114,0,2,1793,15430,1,8,11,10,1,15426,1793,15438,1,127,11,10,1, + 15434,2049,2103,22,1793,15447,3,10,1,15445,1793,15454,2049,3388,10,1,15451,2049,67,10, + 15413,15468,147,99,121,99,108,101,0,2049,15406,2049,2066,4,8,2049,2731,25,3,2049, + 15423,1,15468,7,10,15397,15499,147,112,97,114,115,101,45,117,110,116,105,108,0, + 1793,15511,2049,3683,2049,3480,2049,15468,771,2049,3354,10,1,15501,2049,3504,10,15484,15525,147, + 115,58,103,101,116,0,1793,15547,1793,15533,1,10,11,10,1,15529,1793,15541,1,13, + 11,10,1,15537,2049,2103,22,10,1,15527,2049,15499,10,15516,15568,134,105,111,58,83, + 99,114,105,112,116,105,110,103,0,4,15552,15581,147,105,100,101,110,116,105,102, + 121,0,3841,15568,2049,2578,1793,15648,1,9,2049,9690,2,2049,2613,1793,15636,3,2049,3702, 73,79,32,68,69,86,73,67,69,32,84,89,80,69,32,48,48,48,57,32, - 78,79,84,32,70,79,85,78,68,0,1,15719,2049,9783,2049,9746,10,1,15716,1793, - 15763,4097,15688,10,1,15760,2049,67,10,1,15707,9,10,15636,15784,147,115,121,115,58, - 97,114,103,99,0,2049,15701,1,0,3841,15688,2049,9664,10,15772,15805,147,115,121,115, - 58,97,114,103,118,0,2049,3683,4,2049,15701,1,1,3841,15688,2049,9664,10,15793,15828, - 147,105,110,99,108,117,100,101,0,2049,15701,1,2,3841,15688,2049,9664,10,15817,15849, - 147,115,121,115,58,110,97,109,101,0,2049,3683,2049,15701,1,3,3841,15688,2049,9664, - 10,15837,15882,134,70,117,108,108,83,99,114,101,101,110,76,105,115,116,101,110, - 101,114,0,0,15860,15893,134,66,117,102,102,101,114,0,0,10,15883,15902,134,80, - 116,114,0,0,10,15895,15917,147,116,101,114,109,105,110,97,116,101,0,1,0, - 3841,15902,16,10,15904,15939,147,98,117,102,102,101,114,58,115,116,97,114,116,0, - 3841,15893,10,15923,15956,147,98,117,102,102,101,114,58,101,110,100,0,3841,15902,10, - 15942,15973,147,98,117,102,102,101,114,58,97,100,100,0,2049,15956,16,1,15902,2049, - 3020,2049,15917,10,15959,15997,147,98,117,102,102,101,114,58,103,101,116,0,1,15902, - 2049,3035,2049,15956,15,2049,15917,10,15983,16023,147,98,117,102,102,101,114,58,101,109, - 112,116,121,0,2049,15939,4097,15902,2049,15917,10,16007,16044,147,98,117,102,102,101,114, - 58,115,101,116,0,4097,15893,2049,16023,10,16030,16063,147,119,104,105,116,101,44,98, + 78,79,84,32,70,79,85,78,68,0,1,15599,2049,9783,2049,9746,10,1,15596,1793, + 15643,4097,15568,10,1,15640,2049,67,10,1,15587,9,10,15516,15664,147,115,121,115,58, + 97,114,103,99,0,2049,15581,1,0,3841,15568,2049,9664,10,15652,15685,147,115,121,115, + 58,97,114,103,118,0,2049,3683,4,2049,15581,1,1,3841,15568,2049,9664,10,15673,15708, + 147,105,110,99,108,117,100,101,0,2049,15581,1,2,3841,15568,2049,9664,10,15697,15729, + 147,115,121,115,58,110,97,109,101,0,2049,3683,2049,15581,1,3,3841,15568,2049,9664, + 10,15717,15762,134,70,117,108,108,83,99,114,101,101,110,76,105,115,116,101,110, + 101,114,0,0,15740,15773,134,66,117,102,102,101,114,0,0,10,15763,15782,134,80, + 116,114,0,0,10,15775,15797,147,116,101,114,109,105,110,97,116,101,0,1,0, + 3841,15782,16,10,15784,15819,147,98,117,102,102,101,114,58,115,116,97,114,116,0, + 3841,15773,10,15803,15836,147,98,117,102,102,101,114,58,101,110,100,0,3841,15782,10, + 15822,15853,147,98,117,102,102,101,114,58,97,100,100,0,2049,15836,16,1,15782,2049, + 3020,2049,15797,10,15839,15877,147,98,117,102,102,101,114,58,103,101,116,0,1,15782, + 2049,3035,2049,15836,15,2049,15797,10,15863,15903,147,98,117,102,102,101,114,58,101,109, + 112,116,121,0,2049,15819,4097,15782,2049,15797,10,15887,15924,147,98,117,102,102,101,114, + 58,115,101,116,0,4097,15773,2049,15903,10,15910,15943,147,119,104,105,116,101,44,98, 108,117,101,0,1,27,2049,9733,2049,3702,91,49,59,51,55,59,52,52,109,0, - 1,16069,2049,9783,10,16049,16099,147,119,104,105,116,101,44,98,108,97,99,107,0, - 1,27,2049,9733,2049,3702,91,48,59,51,55,59,52,48,109,0,1,16105,2049,9783, - 10,16084,16134,147,100,117,109,112,45,115,116,97,99,107,0,2049,1556,25,1,5, - 2049,2831,2049,3702,124,32,0,1,16143,2049,9783,1,1,1793,16172,2049,3702,97,0,1, - 16156,2049,3702,97,97,0,1,16162,2049,7044,2049,9797,10,1,16154,2049,2293,1,2,1793, - 16212,2049,3702,97,98,0,1,16182,2049,3702,97,98,98,97,0,1,16189,2049,7044,1, - 2,1793,16207,2049,9797,2049,9757,10,1,16202,2049,2263,10,1,16180,2049,2293,1,3,1793, - 16255,2049,3702,97,98,99,0,1,16222,2049,3702,97,98,99,99,98,97,0,1,16230, - 2049,7044,1,3,1793,16250,2049,9797,2049,9757,10,1,16245,2049,2263,10,1,16220,2049,2293, - 1,4,1793,16301,2049,3702,97,98,99,100,0,1,16265,2049,3702,97,98,99,100,100, - 99,98,97,0,1,16274,2049,7044,1,4,1793,16296,2049,9797,2049,9757,10,1,16291,2049, - 2263,10,1,16263,2049,2293,1,5,1793,16350,2049,3702,97,98,99,100,101,0,1,16311, - 2049,3702,97,98,99,100,101,101,100,99,98,97,0,1,16321,2049,7044,1,5,1793, - 16345,2049,9797,2049,9757,10,1,16340,2049,2263,10,1,16309,2049,2293,10,16120,16366,147,116, + 1,15949,2049,9783,10,15929,15979,147,119,104,105,116,101,44,98,108,97,99,107,0, + 1,27,2049,9733,2049,3702,91,48,59,51,55,59,52,48,109,0,1,15985,2049,9783, + 10,15964,16014,147,100,117,109,112,45,115,116,97,99,107,0,2049,1556,25,1,5, + 2049,2831,2049,3702,124,32,0,1,16023,2049,9783,1,1,1793,16052,2049,3702,97,0,1, + 16036,2049,3702,97,97,0,1,16042,2049,7044,2049,9797,10,1,16034,2049,2293,1,2,1793, + 16092,2049,3702,97,98,0,1,16062,2049,3702,97,98,98,97,0,1,16069,2049,7044,1, + 2,1793,16087,2049,9797,2049,9757,10,1,16082,2049,2263,10,1,16060,2049,2293,1,3,1793, + 16135,2049,3702,97,98,99,0,1,16102,2049,3702,97,98,99,99,98,97,0,1,16110, + 2049,7044,1,3,1793,16130,2049,9797,2049,9757,10,1,16125,2049,2263,10,1,16100,2049,2293, + 1,4,1793,16181,2049,3702,97,98,99,100,0,1,16145,2049,3702,97,98,99,100,100, + 99,98,97,0,1,16154,2049,7044,1,4,1793,16176,2049,9797,2049,9757,10,1,16171,2049, + 2263,10,1,16143,2049,2293,1,5,1793,16230,2049,3702,97,98,99,100,101,0,1,16191, + 2049,3702,97,98,99,100,101,101,100,99,98,97,0,1,16201,2049,7044,1,5,1793, + 16225,2049,9797,2049,9757,10,1,16220,2049,2263,10,1,16189,2049,2293,10,16000,16246,147,116, 111,112,45,114,111,119,0,1,27,2049,9733,2049,3702,91,49,59,48,72,0,1, - 16372,2049,9783,10,16355,16396,147,99,108,101,97,114,45,114,111,119,0,1,80,1793, - 16403,2049,9757,10,1,16400,2049,2263,10,16383,16415,147,116,111,112,0,2049,16366,2049,16063, - 2049,16396,2049,16366,2049,9860,2049,1556,2049,2932,2049,3702,83,80,58,37,110,32,70,82, - 69,69,58,37,110,32,0,1,16431,2049,6875,2049,9783,2049,16134,10,16408,16469,147,98, + 16252,2049,9783,10,16235,16276,147,99,108,101,97,114,45,114,111,119,0,1,80,1793, + 16283,2049,9757,10,1,16280,2049,2263,10,16263,16295,147,116,111,112,0,2049,16246,2049,15943, + 2049,16276,2049,16246,2049,9860,2049,1556,2049,2932,2049,3702,83,80,58,37,110,32,70,82, + 69,69,58,37,110,32,0,1,16311,2049,6875,2049,9783,2049,16014,10,16288,16349,147,98, 111,116,116,111,109,45,114,111,119,0,1,27,2049,9733,2049,3702,91,50,52,59, - 48,72,0,1,16475,2049,9783,10,16455,16496,147,105,110,112,117,116,0,2049,16469,2049, - 16063,2049,16396,2049,16469,10,16487,16515,147,111,117,116,112,117,116,0,2049,16469,2049,16099, - 2049,16396,2049,16469,10,16505,16530,134,73,110,0,0,16524,16542,147,100,105,115,99,97, - 114,100,0,2049,15997,3,10,16531,16553,147,114,117,98,0,1,8,2049,9733,2049,9757, - 1,8,2049,9733,10,16546,16576,147,101,118,97,108,117,97,116,101,0,1,1024,2049, - 367,10,16564,16590,147,114,101,115,101,116,0,1,0,4097,16530,2049,16023,10,16581,16607, - 147,104,97,110,100,108,101,0,1,32,1793,16628,3841,16530,25,3,2049,16515,2049,16576, - 2049,9746,2049,16590,2049,16415,2049,16496,10,1,16611,2049,2293,1,13,1793,16653,3841,16530,25, - 3,2049,16515,2049,16576,2049,9746,2049,16590,2049,16415,2049,16496,10,1,16636,2049,2293,1,10, - 1793,16678,3841,16530,25,3,2049,16515,2049,16576,2049,9746,2049,16590,2049,16415,2049,16496,10,1, - 16661,2049,2293,1,127,1793,16699,3841,16530,25,3,2049,16542,2049,16553,1,16530,2049,3035,10, - 1,16686,2049,2293,1,8,1793,16720,3841,16530,25,3,2049,16542,2049,16553,1,16530,2049,3035, - 10,1,16707,2049,2293,2,2049,9733,2049,15973,1,16530,2049,3020,10,16597,16745,147,112,114, - 111,99,101,115,115,0,1,1024,2049,16044,2049,15526,2049,16607,3841,16530,1,80,11,1793, - 16767,1,0,4097,16530,2049,16496,10,1,16760,9,1,16749,7,10,16734,16782,147,105,110, + 48,72,0,1,16355,2049,9783,10,16335,16376,147,105,110,112,117,116,0,2049,16349,2049, + 15943,2049,16276,2049,16349,10,16367,16395,147,111,117,116,112,117,116,0,2049,16349,2049,15979, + 2049,16276,2049,16349,10,16385,16410,134,73,110,0,0,16404,16422,147,100,105,115,99,97, + 114,100,0,2049,15877,3,10,16411,16433,147,114,117,98,0,1,8,2049,9733,2049,9757, + 1,8,2049,9733,10,16426,16456,147,101,118,97,108,117,97,116,101,0,1,1024,2049, + 367,10,16444,16470,147,114,101,115,101,116,0,1,0,4097,16410,2049,15903,10,16461,16487, + 147,104,97,110,100,108,101,0,1,32,1793,16508,3841,16410,25,3,2049,16395,2049,16456, + 2049,9746,2049,16470,2049,16295,2049,16376,10,1,16491,2049,2293,1,13,1793,16533,3841,16410,25, + 3,2049,16395,2049,16456,2049,9746,2049,16470,2049,16295,2049,16376,10,1,16516,2049,2293,1,10, + 1793,16558,3841,16410,25,3,2049,16395,2049,16456,2049,9746,2049,16470,2049,16295,2049,16376,10,1, + 16541,2049,2293,1,127,1793,16579,3841,16410,25,3,2049,16422,2049,16433,1,16410,2049,3035,10, + 1,16566,2049,2293,1,8,1793,16600,3841,16410,25,3,2049,16422,2049,16433,1,16410,2049,3035, + 10,1,16587,2049,2293,2,2049,9733,2049,15853,1,16410,2049,3020,10,16477,16625,147,112,114, + 111,99,101,115,115,0,1,1024,2049,15924,2049,15406,2049,16487,3841,16410,1,80,11,1793, + 16647,1,0,4097,16410,2049,16376,10,1,16640,9,1,16629,7,10,16614,16662,147,105,110, 105,116,0,2049,3702,115,116,116,121,32,99,98,114,101,97,107,32,45,101,99, - 104,111,0,1,16784,2049,13119,10,16774,16815,147,101,120,105,116,0,2049,3702,115,116, - 116,121,32,45,99,98,114,101,97,107,32,101,99,104,111,0,1,16817,2049,13119, - 1,0,2049,13231,10,15860,16853,147,99,108,101,97,114,0,1,27,2049,9733,2049,3702, - 91,50,74,0,1,16859,2049,9783,1,27,2049,9733,2049,3702,91,48,59,48,72,0, - 1,16873,2049,9783,10,16844,16909,147,108,105,115,116,101,110,58,102,117,108,108,115, - 99,114,101,101,110,58,98,121,101,0,2049,16815,10,16884,16933,147,108,105,115,116, - 101,110,58,102,117,108,108,115,99,114,101,101,110,0,2049,16782,2049,16853,2049,16415, - 2049,16496,2049,16745,10,16912,16954,134,78,111,69,99,104,111,0,0,16944,16966,147,118, + 104,111,0,1,16664,2049,12999,10,16654,16695,147,101,120,105,116,0,2049,3702,115,116, + 116,121,32,45,99,98,114,101,97,107,32,101,99,104,111,0,1,16697,2049,12999, + 1,0,2049,13111,10,15740,16733,147,99,108,101,97,114,0,1,27,2049,9733,2049,3702, + 91,50,74,0,1,16739,2049,9783,1,27,2049,9733,2049,3702,91,48,59,48,72,0, + 1,16753,2049,9783,10,16724,16789,147,108,105,115,116,101,110,58,102,117,108,108,115, + 99,114,101,101,110,58,98,121,101,0,2049,16695,10,16764,16813,147,108,105,115,116, + 101,110,58,102,117,108,108,115,99,114,101,101,110,0,2049,16662,2049,16733,2049,16295, + 2049,16376,2049,16625,10,16792,16834,134,78,111,69,99,104,111,0,0,16824,16846,147,118, 101,114,115,105,111,110,0,3841,4,1,100,20,2049,9797,1,46,2049,9733,2049,9797, - 10,16955,16988,147,101,111,108,63,0,1793,16994,1,13,11,10,1,16990,1793,17002,1, - 10,11,10,1,16998,1793,17010,1,32,11,10,1,17006,2049,2140,22,22,10,16980,17027, - 147,118,97,108,105,100,63,0,2,2049,82,2049,2594,10,17017,17039,147,111,107,0, - 3841,16954,2049,2731,25,3,2049,1818,1793,17062,2049,9746,2049,3702,79,107,32,0,1,17053, - 2049,9783,10,1,17049,2049,73,10,17033,17080,147,99,104,101,99,107,45,101,111,102, - 0,2,1793,17087,1,-1,11,10,1,17083,1793,17095,1,4,11,10,1,17091,2049,2103, - 22,1793,17117,2049,3702,98,121,101,0,1,17104,2049,200,2049,161,15,8,10,1,17102, - 9,10,17067,17133,147,99,104,101,99,107,45,98,115,0,2,1793,17140,1,8,11, - 10,1,17136,1793,17148,1,127,11,10,1,17144,2049,2103,22,1793,17161,2049,3412,2049,3412, - 771,10,1,17155,9,10,17121,17174,147,115,58,103,101,116,0,1793,17203,1,1024,2049, - 3480,1793,17194,2049,15526,2,2049,3388,2049,17080,2049,17133,2049,16988,10,1,17182,2049,2234,2049, - 3354,2049,3795,10,1,17176,2049,3504,10,16944,17218,147,98,97,110,110,101,114,0,3841, - 16954,2049,2731,25,3,2049,3702,82,69,84,82,79,32,49,50,32,40,114,120,45, - 0,1,17226,2049,9783,2049,16966,1,41,2049,9733,2049,9746,2049,1543,2049,9797,2049,3702,32, + 10,16835,16868,147,101,111,108,63,0,1793,16874,1,13,11,10,1,16870,1793,16882,1, + 10,11,10,1,16878,1793,16890,1,32,11,10,1,16886,2049,2140,22,22,10,16860,16907, + 147,118,97,108,105,100,63,0,2,2049,82,2049,2594,10,16897,16919,147,111,107,0, + 3841,16834,2049,2731,25,3,2049,1818,1793,16942,2049,9746,2049,3702,79,107,32,0,1,16933, + 2049,9783,10,1,16929,2049,73,10,16913,16960,147,99,104,101,99,107,45,101,111,102, + 0,2,1793,16967,1,-1,11,10,1,16963,1793,16975,1,4,11,10,1,16971,2049,2103, + 22,1793,16997,2049,3702,98,121,101,0,1,16984,2049,200,2049,161,15,8,10,1,16982, + 9,10,16947,17013,147,99,104,101,99,107,45,98,115,0,2,1793,17020,1,8,11, + 10,1,17016,1793,17028,1,127,11,10,1,17024,2049,2103,22,1793,17041,2049,3412,2049,3412, + 771,10,1,17035,9,10,17001,17054,147,115,58,103,101,116,0,1793,17083,1,1024,2049, + 3480,1793,17074,2049,15406,2,2049,3388,2049,16960,2049,17013,2049,16868,10,1,17062,2049,2234,2049, + 3354,2049,3795,10,1,17056,2049,3504,10,16824,17098,147,98,97,110,110,101,114,0,3841, + 16834,2049,2731,25,3,2049,3702,82,69,84,82,79,32,49,50,32,40,114,120,45, + 0,1,17106,2049,9783,2049,16846,1,41,2049,9733,2049,9746,2049,1543,2049,9797,2049,3702,32, 77,65,88,44,32,84,73,66,32,64,32,49,48,50,53,44,32,72,101,97, - 112,32,64,32,0,1,17258,2049,9783,2049,1847,2049,9797,2049,9746,10,17208,17302,147,98, - 121,101,0,3841,15882,1793,17309,2049,16909,10,1,17306,9,1,0,2049,13231,10,17295,17327, - 147,108,105,115,116,101,110,0,3841,15882,1793,17334,2049,16933,10,1,17331,2049,2505,2049, - 17039,2049,17174,2049,17027,1793,17351,2049,367,2049,17039,10,1,17346,1793,17357,3,10,1,17355, - 2049,67,1,17340,7,10,17317,17379,147,105,109,97,103,101,58,115,97,118,101,0, - 1,1000,2049,9690,2049,9664,10,17365,17397,147,100,58,119,111,114,100,115,0,1793,17406, - 2049,165,2049,9783,2049,9757,10,1,17399,2049,7119,10,17386,17427,147,100,58,119,111,114, - 100,115,45,119,105,116,104,0,2049,1847,2049,4726,1793,17458,2049,165,2,2049,1847,2049, - 4328,1793,17447,2049,9783,2049,9757,10,1,17442,1793,17453,3,10,1,17451,2049,67,10,1, - 17433,2049,7119,10,17411,17482,147,100,105,115,112,108,97,121,45,105,102,45,108,101, - 102,116,0,2,2049,1847,2049,4642,1793,17494,2049,9783,2049,9757,10,1,17489,1793,17500,3, - 10,1,17498,2049,67,10,17411,17531,147,100,58,119,111,114,100,115,45,98,101,103, - 105,110,110,105,110,103,45,119,105,116,104,0,2049,1847,2049,4726,1793,17542,2049,165, - 2049,17482,10,1,17537,2049,7119,10,0 }; + 112,32,64,32,0,1,17138,2049,9783,2049,1847,2049,9797,2049,9746,10,17088,17182,147,98, + 121,101,0,3841,15762,1793,17189,2049,16789,10,1,17186,9,1,0,2049,13111,10,17175,17207, + 147,108,105,115,116,101,110,0,3841,15762,1793,17214,2049,16813,10,1,17211,2049,2505,2049, + 16919,2049,17054,2049,16907,1793,17231,2049,367,2049,16919,10,1,17226,1793,17237,3,10,1,17235, + 2049,67,1,17220,7,10,17197,17259,147,105,109,97,103,101,58,115,97,118,101,0, + 1,1000,2049,9690,2049,9664,10,17245,17277,147,100,58,119,111,114,100,115,0,1793,17286, + 2049,165,2049,9783,2049,9757,10,1,17279,2049,7119,10,17266,17307,147,100,58,119,111,114, + 100,115,45,119,105,116,104,0,2049,1847,2049,4726,1793,17338,2049,165,2,2049,1847,2049, + 4328,1793,17327,2049,9783,2049,9757,10,1,17322,1793,17333,3,10,1,17331,2049,67,10,1, + 17313,2049,7119,10,17291,17362,147,100,105,115,112,108,97,121,45,105,102,45,108,101, + 102,116,0,2,2049,1847,2049,4642,1793,17374,2049,9783,2049,9757,10,1,17369,1793,17380,3, + 10,1,17378,2049,67,10,17291,17411,147,100,58,119,111,114,100,115,45,98,101,103, + 105,110,110,105,110,103,45,119,105,116,104,0,2049,1847,2049,4726,1793,17422,2049,165, + 2049,17362,10,1,17417,2049,7119,10,0 }; diff --git a/source/interfaces/retro-runtime.c b/source/interfaces/retro-runtime.c index 7352fc4..5be4100 100644 --- a/source/interfaces/retro-runtime.c +++ b/source/interfaces/retro-runtime.c @@ -23,13 +23,10 @@ #include <errno.h> #include <math.h> -#include <netdb.h> -#include <netinet/in.h> #include <signal.h> #include <stdio.h> #include <stdlib.h> #include <string.h> -#include <sys/socket.h> #include <sys/stat.h> #include <sys/types.h> #include <sys/wait.h> @@ -53,10 +50,9 @@ #define D_OFFSET_CLASS 2 #define D_OFFSET_NAME 3 -#define NUM_DEVICES 8 /* Set the number of I/O devices */ +#define NUM_DEVICES 7 /* Set the number of I/O devices */ #define MAX_OPEN_FILES 128 -#define GOPHER_MAX_FILE_SIZE (128 * 1024) + 1 /*--------------------------------------------------------------------- @@ -98,8 +94,6 @@ void io_unix_query(); void io_unix_handler(); void io_floatingpoint_query(); void io_floatingpoint_handler(); -void io_gopher_query(); -void io_gopher_handler(); void io_scripting_handler(); void io_scripting_query(); void io_image(); @@ -126,7 +120,6 @@ Handler IO_deviceHandlers[NUM_DEVICES + 1] = { io_floatingpoint_handler, io_scripting_handler, io_unix_handler, - io_gopher_handler, io_image }; @@ -137,7 +130,6 @@ Handler IO_queryHandlers[NUM_DEVICES + 1] = { io_floatingpoint_query, io_scripting_query, io_unix_query, - io_gopher_query, io_image_query }; @@ -992,117 +984,6 @@ void io_floatingpoint_handler() { /*=====================================================================*/ -/*--------------------------------------------------------------------- - Gopher Support - ---------------------------------------------------------------------*/ - -/*--------------------------------------------------------------------- - The first Gopher related function is `error()`, which prints an - error message and exits if there is a problem. - ---------------------------------------------------------------------*/ - -void error(const char *msg) { - perror(msg); - exit(0); -} - - -/*--------------------------------------------------------------------- - `gopher_fetch()` is the part that does all the real work. - ---------------------------------------------------------------------*/ - -void gopher_fetch(char *host, CELL port, char *selector, CELL dest) { - int sockfd, portno, n; - struct sockaddr_in serv_addr; - struct hostent *server; - char data[GOPHER_MAX_FILE_SIZE]; - char buffer[1025]; - - portno = (int)port; - sockfd = socket(AF_INET, SOCK_STREAM, 0); - if (sockfd < 0) - error("ERROR opening socket"); - - server = gethostbyname(host); - if (server == NULL) { - fprintf(stderr,"ERROR, no such host\n"); - exit(0); - } - - bzero(data, GOPHER_MAX_FILE_SIZE); - bzero((char *) &serv_addr, sizeof(serv_addr)); - - serv_addr.sin_family = AF_INET; - bcopy((char *)server->h_addr, - (char *)&serv_addr.sin_addr.s_addr, - server->h_length); - serv_addr.sin_port = htons(portno); - - if (connect(sockfd, (struct sockaddr *) &serv_addr, sizeof(serv_addr)) < 0) - error("ERROR connecting"); - - n = write(sockfd, selector, strlen(selector)); - if (n < 0) - error("ERROR writing to socket"); - - n = write(sockfd, "\n", strlen("\n")); - if (n < 0) - error("ERROR writing to socket"); - - n = 1; - while (n > 0) { - bzero(buffer, 1025); - n = read(sockfd, buffer, 1024); - strlcat(data, buffer, GOPHER_MAX_FILE_SIZE); - } - - close(sockfd); - string_inject(data, dest); - stack_push(strlen(data)); -} - - - -/*--------------------------------------------------------------------- - The last Gopher function, `gopher_handle_request()` pulls the values - needed from the stack and passes them to the `gopher_fetch()` - function. - - This will take the following from the stack (TOS to bottom): - - Selector (NULL terminated string) - Port (Number) - Server (NULL terminated string) - Buffer (Pointer to memory that will hold the received file) - ---------------------------------------------------------------------*/ - -void gopher_handle_request() { - CELL port, dest; - char server[1025], selector[4097]; - strlcpy(selector, string_extract(stack_pop()), 4096); - port = stack_pop(); - strlcpy(server, string_extract(stack_pop()), 1024); - dest = stack_pop(); - gopher_fetch(server, port, selector, dest); -} - -Handler GopherActions[1] = { - gopher_handle_request -}; - -void io_gopher_query() { - stack_push(0); - stack_push(5); -} - -void io_gopher_handler() { - GopherActions[stack_pop()](); -} - - -/*=====================================================================*/ - - /*--------------------------------------------------------------------- `unix_open_pipe()` is like `file_open()`, but for pipes. This pulls from the data stack: diff --git a/source/interfaces/retro-unix.c b/source/interfaces/retro-unix.c index 9c4f70b..6883f3b 100644 --- a/source/interfaces/retro-unix.c +++ b/source/interfaces/retro-unix.c @@ -23,13 +23,10 @@ #include <errno.h> #include <math.h> -#include <netdb.h> -#include <netinet/in.h> #include <signal.h> #include <stdio.h> #include <stdlib.h> #include <string.h> -#include <sys/socket.h> #include <sys/stat.h> #include <sys/types.h> #include <sys/wait.h> @@ -53,10 +50,9 @@ #define D_OFFSET_CLASS 2 #define D_OFFSET_NAME 3 -#define NUM_DEVICES 8 /* Set the number of I/O devices */ +#define NUM_DEVICES 7 /* Set the number of I/O devices */ #define MAX_OPEN_FILES 128 -#define GOPHER_MAX_FILE_SIZE (128 * 1024) + 1 /*--------------------------------------------------------------------- @@ -98,8 +94,6 @@ void io_unix_query(); void io_unix_handler(); void io_floatingpoint_query(); void io_floatingpoint_handler(); -void io_gopher_query(); -void io_gopher_handler(); void io_scripting_handler(); void io_scripting_query(); void io_image(); @@ -124,7 +118,6 @@ Handler IO_deviceHandlers[NUM_DEVICES + 1] = { io_floatingpoint_handler, io_scripting_handler, io_unix_handler, - io_gopher_handler, io_image }; @@ -135,7 +128,6 @@ Handler IO_queryHandlers[NUM_DEVICES + 1] = { io_floatingpoint_query, io_scripting_query, io_unix_query, - io_gopher_query, io_image_query }; @@ -1056,117 +1048,6 @@ void io_floatingpoint_handler() { /*=====================================================================*/ -/*--------------------------------------------------------------------- - Gopher Support - ---------------------------------------------------------------------*/ - -/*--------------------------------------------------------------------- - The first Gopher related function is `error()`, which prints an - error message and exits if there is a problem. - ---------------------------------------------------------------------*/ - -void error(const char *msg) { - perror(msg); - exit(0); -} - - -/*--------------------------------------------------------------------- - `gopher_fetch()` is the part that does all the real work. - ---------------------------------------------------------------------*/ - -void gopher_fetch(char *host, CELL port, char *selector, CELL dest) { - int sockfd, portno, n; - struct sockaddr_in serv_addr; - struct hostent *server; - char data[GOPHER_MAX_FILE_SIZE]; - char buffer[1025]; - - portno = (int)port; - sockfd = socket(AF_INET, SOCK_STREAM, 0); - if (sockfd < 0) - error("ERROR opening socket"); - - server = gethostbyname(host); - if (server == NULL) { - fprintf(stderr,"ERROR, no such host\n"); - exit(0); - } - - bzero(data, GOPHER_MAX_FILE_SIZE); - bzero((char *) &serv_addr, sizeof(serv_addr)); - - serv_addr.sin_family = AF_INET; - bcopy((char *)server->h_addr, - (char *)&serv_addr.sin_addr.s_addr, - server->h_length); - serv_addr.sin_port = htons(portno); - - if (connect(sockfd, (struct sockaddr *) &serv_addr, sizeof(serv_addr)) < 0) - error("ERROR connecting"); - - n = write(sockfd, selector, strlen(selector)); - if (n < 0) - error("ERROR writing to socket"); - - n = write(sockfd, "\n", strlen("\n")); - if (n < 0) - error("ERROR writing to socket"); - - n = 1; - while (n > 0) { - bzero(buffer, 1025); - n = read(sockfd, buffer, 1024); - strlcat(data, buffer, GOPHER_MAX_FILE_SIZE); - } - - close(sockfd); - string_inject(data, dest); - stack_push(strlen(data)); -} - - - -/*--------------------------------------------------------------------- - The last Gopher function, `gopher_handle_request()` pulls the values - needed from the stack and passes them to the `gopher_fetch()` - function. - - This will take the following from the stack (TOS to bottom): - - Selector (NULL terminated string) - Port (Number) - Server (NULL terminated string) - Buffer (Pointer to memory that will hold the received file) - ---------------------------------------------------------------------*/ - -void gopher_handle_request() { - CELL port, dest; - char server[1025], selector[4097]; - strlcpy(selector, string_extract(stack_pop()), 4096); - port = stack_pop(); - strlcpy(server, string_extract(stack_pop()), 1024); - dest = stack_pop(); - gopher_fetch(server, port, selector, dest); -} - -Handler GopherActions[1] = { - gopher_handle_request -}; - -void io_gopher_query() { - stack_push(0); - stack_push(5); -} - -void io_gopher_handler() { - GopherActions[stack_pop()](); -} - - -/*=====================================================================*/ - - /*--------------------------------------------------------------------- `unix_open_pipe()` is like `file_open()`, but for pipes. This pulls from the data stack: diff --git a/words.tsv b/words.tsv index 63b15f8..11b4287 100644 --- a/words.tsv +++ b/words.tsv @@ -295,7 +295,7 @@ file:slurp as- - - Given an address and a file name, read the file contents into file:spew ss- - - Given a string (s1) and a file name (s2), write the string into the file, replacing any existing cotent. class:word {n/a} {n/a} file rre file:tell h-n - - Given a file handle, return the current offset in the file. class:word {n/a} {n/a} file rre file:write ch- - - Write a character to the file represented by the handle. class:word {n/a} {n/a} file rre -gopher:get asns-n - - Takes an address, a server, a port, and a selector. Fetch the resource and store it at address. Return the number of bytes received. class:word here 'forthworks.com #70 '/ gopher:get\n here s:put {n/a} gopher rre +gopher:get asns-n - - Takes an address, a server, a port, and a selector. Fetch the resource and store it at address. Return the number of bytes received. class:word here 'forthworks.com #70 '/ gopher:get\n here s:put {n/a} gopher ios gt? nn-f - - Compare n1 and n2. Return `TRUE` if n1 is greater than n2, or `FALSE` otherwise. class:primitive {n/a} {n/a} global all gteq? nn-f - - Compare n1 and n2. Return `TRUE` if n1 is greater than or equal to n2, or `FALSE` otherwise. class:word {n/a} {n/a} global all here -a - - Return the next free address in memory. class:word {n/a} {n/a} global all