nga-c: non-libc version updated. closes #59

FossilOrigin-Name: e52d8d1976ce3be3dbdc10e92667e629602ae91a8619213a8ff8cc642524ddb0
This commit is contained in:
crc 2021-06-17 13:58:50 +00:00
parent e8d09ec1ec
commit 6f8bd3047f
3 changed files with 598 additions and 916 deletions

View file

@ -255,6 +255,7 @@ To erase the contents of a line, use `d` followed by the line number.
| i | line,text | replace contents of line with text |
| e | line | insert text beginning at line, shifting down |
| y | line,text | append text to end of line |
I provide two words for editing the text of the file. `i` replaces the
text on a line with the provided text, and `e` insterts text, shifting
@ -277,6 +278,14 @@ otherwise blank line to return to the command processing mode.
[ @Prompt [ @Prompt call ] if
add-space s:get [ store-line ] sip '. s:eq? ] until cleanup ;
}}
:cmd:y
@Input $, s:split/char
s:to-number ed:to-line [ [ n:inc ] dip s:prepend ] sip s:copy ;
:cmd:Y
@Input $, s:split/char
s:to-number ed:to-line [ [ n:inc ] dip s:append ] sip s:copy ;
~~~
Copy/paste
@ -370,7 +379,7 @@ Use `q` to quit the editor.
## Register The Commands
~~~
{ ',p#/axdiefwlqnN:*cu [ ] s:for-each }
{ ',p#/axdieyYfwlqnN:*cu [ ] s:for-each }
[ [ 'cmd:%c s:format d:lookup d:xt fetch ] sip ed:register-command ]
a:for-each
~~~

View file

@ -1,62 +1,71 @@
#include <stdint.h>
#ifndef CELL
#ifndef BIT64
#define CELL int32_t
#define CELL_MIN INT_MIN + 1
#define CELL_MAX INT_MAX - 1
#else
#define CELL int64_t
#define CELL_MIN LLONG_MIN + 1
#define CELL_MAX LLONG_MAX - 1
#endif
CELL ngaImageCells = 9326;
CELL ngaImage[] = { 1793,-1,9308,9325,202104,0,10,1,10,2,10,3,10,4,10,5,10,6,10,
7,10,8,10,9,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,68223234,1,2575,
85000450,1,656912,357,339,268505089,63,62,285281281,0,63,2063,10,101384453,0,9,10,2049,56,25,
#endif
CELL ngaImageCells = 9689;
CELL ngaImage[] = { 1793,9674,9664,9688,202107,379,351,1030,1535,0,10,1,10,2,10,3,10,4,10,
5,10,6,10,7,10,8,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,68223234,1,2575,
85000450,1,656912,112,157,268505089,63,62,285281281,0,63,2063,10,101384453,0,9,10,2049,56,25,
459011,76,524546,76,302256641,1,10,16974595,0,50529798,10,25,524547,95,50529798,10,17108738,1,251790353,101777669,
1,17565186,86,524545,90,64,167838467,-1,134287105,3,59,659457,3,459023,107,2049,56,25,2049,107,
1793,114,2049,114,117506307,0,107,0,524545,25,112,168820993,0,126,1642241,126,134283523,7,112,1793,
107,7,524545,2049,107,1793,107,16846593,126,141,140,1793,64,16846593,126,112,140,1793,64,7,
10,659713,1,659713,2,659713,3,1793,168,17108737,3,2,524559,107,2049,107,2049,107,2049,121,
168820998,2,737,1025,167841793,181,5,17826049,0,181,2,15,25,524546,164,134287105,182,95,2305,183,
459023,191,134287361,182,186,659201,181,2049,56,25,84152833,48,286458116,10,459014,206,184618754,45,25,16974851,
-1,168886532,1,134284289,1,215,134284289,0,206,660227,32,0,0,112,114,101,102,105,120,58,
32,0,285278479,232,7,2576,524546,81,1641217,1,167838467,229,2049,245,2049,241,524545,232,201,17826050,
231,0,2572,2563,2049,222,1793,133,459023,133,17760513,146,3,166,8,251727617,3,2,2049,160,
16,168820993,-1,126,2049,201,2049,160,459023,133,285282049,3,2,134287105,126,280,524545,1793,107,16846593,
3,0,107,8,659201,3,524545,25,112,17043201,3,7,2049,112,2049,107,268505092,126,1642241,126,
656131,659201,3,524545,7,112,2049,107,459009,19,112,459009,54,112,459009,15,112,459009,17,112,
1793,5,10,524546,160,134284303,162,1807,1025,0,0,1642241,231,285282049,347,1,459012,342,117509889,181,
342,134287105,347,201,16845825,0,357,339,1793,64,1793,371,17826050,347,251,8,117506305,348,360,64,
2116,11340,11700,11400,13685,13104,12432,12402,9603,9801,11514,11413,11110,12528,11948,10302,13340,9700,13455,12753,
10500,10670,12654,13320,11960,13908,10088,10605,11865,11025,0,2049,201,987393,1,1793,107,524546,447,2049,
445,2049,445,17891588,2,447,8,17045505,-24,-16,17043736,-8,1118488,1793,107,17043202,1,169021201,2049,56,
25,33883396,101450758,6404,459011,437,34668804,2,2049,434,524545,379,437,302056196,379,659969,1,0,9,152,
100,117,112,0,456,11,152,100,114,111,112,0,463,13,152,115,119,97,112,0,
471,21,152,99,97,108,108,0,479,26,152,101,113,63,0,487,28,152,45,101,
113,63,0,494,30,152,108,116,63,0,502,32,152,103,116,63,0,509,34,152,
102,101,116,99,104,0,516,36,152,115,116,111,114,101,0,525,38,152,43,0,
534,40,152,45,0,539,42,152,42,0,544,44,152,47,109,111,100,0,549,46,
152,97,110,100,0,557,48,152,111,114,0,564,50,152,120,111,114,0,570,52,
152,115,104,105,102,116,0,577,333,158,112,117,115,104,0,586,336,158,112,111,
112,0,594,330,158,48,59,0,601,56,146,102,101,116,99,104,45,110,101,120,
116,0,607,59,146,115,116,111,114,101,45,110,101,120,116,0,621,222,146,115,
58,116,111,45,110,117,109,98,101,114,0,635,95,146,115,58,101,113,63,0,
650,81,146,115,58,108,101,110,103,116,104,0,659,64,146,99,104,111,111,115,
101,0,671,74,152,105,102,0,681,72,146,45,105,102,0,687,262,158,112,114,
101,102,105,120,58,40,0,694,126,133,67,111,109,112,105,108,101,114,0,706,
3,133,72,101,97,112,0,718,107,146,44,0,726,121,146,115,44,0,731,127,
158,59,0,737,289,158,91,0,742,305,158,93,0,747,2,133,68,105,99,116,
105,111,110,97,114,121,0,752,159,146,100,58,108,105,110,107,0,766,160,146,
100,58,120,116,0,776,162,146,100,58,99,108,97,115,115,0,784,164,146,100,
58,110,97,109,101,0,795,146,146,99,108,97,115,115,58,119,111,114,100,0,
805,158,146,99,108,97,115,115,58,109,97,99,114,111,0,819,133,146,99,108,
97,115,115,58,100,97,116,97,0,834,166,146,100,58,97,100,100,45,104,101,
97,100,101,114,0,848,263,158,112,114,101,102,105,120,58,35,0,864,269,158,
112,114,101,102,105,120,58,58,0,876,283,158,112,114,101,102,105,120,58,38,
0,888,267,158,112,114,101,102,105,120,58,36,0,900,320,158,114,101,112,101,
97,116,0,912,322,158,97,103,97,105,110,0,922,369,146,105,110,116,101,114,
112,114,101,116,0,931,201,146,100,58,108,111,111,107,117,112,0,944,152,146,
99,108,97,115,115,58,112,114,105,109,105,116,105,118,101,0,956,4,133,86,
101,114,115,105,111,110,0,975,416,146,105,0,986,107,146,100,0,991,410,146,
114,0,996,339,146,101,114,114,58,110,111,116,102,111,117,110,100,0,0,0,
0,0,0,0,0,0,59,0,114,101,0,0,83,0,97,0,107,0,115,0,
0,0,115,0,0,0,0,0,63,64,91,92,93,94,96,123,124,125,126,0,
72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,0,
1793,114,2049,114,117506307,0,107,0,524545,26,112,168820993,0,126,1642241,126,134283523,11,112,1793,
107,524545,2049,107,1793,107,16846593,126,140,157,1793,64,16846593,126,112,157,1793,64,7,10,
659713,1,659713,2,659713,3,1793,167,17108737,3,2,524559,107,2049,107,2049,107,2049,121,168820998,
2,535,1030,167841793,180,9,17826049,0,180,2,15,25,524546,163,134287105,181,95,2305,182,459023,
190,134287361,181,185,659201,180,10,659969,7,2049,56,25,17694978,58,206,9,84152833,48,319750404,205,
117507601,208,184618754,45,25,16974851,-1,168886532,1,134284289,1,221,134284289,0,208,660227,32,0,0,115,
105,103,105,108,58,115,0,285278479,238,6,2576,524546,81,1641217,1,167838467,235,2049,250,2049,
246,524545,238,200,17826050,237,0,2572,2563,2049,228,1793,133,459023,133,1793,276,17760513,145,3,
165,8,251727617,3,2,2049,159,16,168820993,-1,126,2049,159,2575,2049,200,17563906,0,290,9,
1793,133,285282049,3,2,134287105,126,287,524545,1793,107,16846593,3,0,107,8,659201,3,524545,26,
112,17043201,3,11,2049,112,2049,107,268505092,126,1642241,126,656131,659201,3,524545,11,112,2049,107,
459009,23,112,459009,55,112,459009,19,112,459009,21,112,1793,9,10,524546,159,134284303,161,1807,
1030,1642241,237,285282049,359,1,459012,354,117509889,180,354,134287105,359,200,16845825,0,367,351,1793,64,
1793,381,17826050,359,256,8,117506305,360,370,64,2116,11340,11700,11400,13685,13104,12432,12402,9603,9801,
11514,11413,11110,12528,11948,10302,13340,9700,13455,12753,10500,10670,12654,13320,11960,13908,10088,10605,11865,11025,
0,2049,200,987393,1,1793,107,524546,457,2049,455,2049,455,17891588,2,457,8,17045505,-24,-16,
17043736,-8,1118488,1793,107,17043202,1,169021201,2049,56,25,33883396,101450758,6404,459011,447,34668804,2,2049,444,
524545,389,447,302056196,389,659969,1,0,13,151,100,117,112,0,466,15,151,100,114,111,
112,0,473,17,151,115,119,97,112,0,481,25,151,99,97,108,108,0,489,27,
151,101,113,63,0,497,29,151,45,101,113,63,0,504,31,151,108,116,63,0,
512,33,151,103,116,63,0,519,35,151,102,101,116,99,104,0,526,37,151,115,
116,111,114,101,0,535,39,151,43,0,544,41,151,45,0,549,43,151,42,0,
554,45,151,47,109,111,100,0,559,47,151,97,110,100,0,567,49,151,111,114,
0,574,51,151,120,111,114,0,580,53,151,115,104,105,102,116,0,587,345,157,
112,117,115,104,0,596,348,157,112,111,112,0,604,342,157,48,59,0,611,56,
145,102,101,116,99,104,45,110,101,120,116,0,617,59,145,115,116,111,114,101,
45,110,101,120,116,0,631,228,145,115,58,116,111,45,110,117,109,98,101,114,
0,645,95,145,115,58,101,113,63,0,660,81,145,115,58,108,101,110,103,116,
104,0,669,64,145,99,104,111,111,115,101,0,681,74,151,105,102,0,691,72,
145,45,105,102,0,697,267,157,115,105,103,105,108,58,40,0,704,126,133,67,
111,109,112,105,108,101,114,0,715,3,133,72,101,97,112,0,727,107,145,44,
0,735,121,145,115,44,0,740,127,157,59,0,746,301,157,91,0,751,317,157,
93,0,756,2,133,68,105,99,116,105,111,110,97,114,121,0,761,158,145,100,
58,108,105,110,107,0,775,159,145,100,58,120,116,0,785,161,145,100,58,99,
108,97,115,115,0,793,163,145,100,58,110,97,109,101,0,804,145,145,99,108,
97,115,115,58,119,111,114,100,0,814,157,145,99,108,97,115,115,58,109,97,
99,114,111,0,828,133,145,99,108,97,115,115,58,100,97,116,97,0,843,165,
145,100,58,97,100,100,45,104,101,97,100,101,114,0,857,268,157,115,105,103,
105,108,58,35,0,873,274,157,115,105,103,105,108,58,58,0,884,293,157,115,
105,103,105,108,58,38,0,895,272,157,115,105,103,105,108,58,36,0,906,332,
157,114,101,112,101,97,116,0,917,334,157,97,103,97,105,110,0,927,379,145,
105,110,116,101,114,112,114,101,116,0,936,200,145,100,58,108,111,111,107,117,
112,0,949,151,145,99,108,97,115,115,58,112,114,105,109,105,116,105,118,101,
0,961,4,133,86,101,114,115,105,111,110,0,980,426,145,105,0,991,107,145,
100,0,996,420,145,114,0,1001,205,133,66,97,115,101,0,1006,351,145,101,114,
114,58,110,111,116,102,111,117,110,100,0,115,116,111,114,101,0,110,0,101,
116,0,101,114,118,101,0,115,0,63,0,0,0,63,64,91,92,93,94,96,
123,124,125,126,0,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,
87,88,89,90,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
@ -78,395 +87,412 @@ CELL ngaImage[] = { 1793,-1,9308,9325,202104,0,10,1,10,2,10,3,10,4,10,5,10,6,10,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1001,1543,146,
69,79,77,0,1,-3,15,10,1536,1556,146,100,101,112,116,104,0,1,-1,15,
10,1547,1570,146,100,58,108,97,115,116,0,1,2,15,10,1560,1587,146,100,58,
108,97,115,116,46,120,116,0,2049,1570,2049,160,15,10,1574,1609,146,100,58,108,
97,115,116,46,99,108,97,115,115,0,2049,1570,2049,162,15,10,1593,1630,146,100,
58,108,97,115,116,46,110,97,109,101,0,2049,1570,2049,164,10,1615,1646,146,114,
101,99,108,97,115,115,0,2049,1570,2049,162,16,10,1635,1665,146,105,109,109,101,
100,105,97,116,101,0,1,158,2049,1646,10,1652,1678,146,100,97,116,97,0,1,
133,2049,1646,10,1670,1696,146,112,114,105,109,105,116,105,118,101,0,1,152,2049,
1646,10,1683,1706,158,40,0,10,1701,1712,158,41,0,10,1707,1728,146,99,111,109,
112,105,108,101,58,108,105,116,0,1,1,2049,107,2049,107,10,1713,1751,146,99,
111,109,112,105,108,101,58,106,117,109,112,0,1,1793,2049,107,2049,107,10,1735,
1774,146,99,111,109,112,105,108,101,58,99,97,108,108,0,1,2049,2049,107,2049,
107,10,1758,1796,146,99,111,109,112,105,108,101,58,114,101,116,0,1,10,2049,
107,10,1781,1815,146,99,111,109,112,105,108,105,110,103,63,0,1,126,15,10,
1801,1831,158,112,114,101,102,105,120,58,96,0,2049,222,2049,107,10,1819,1848,158,
112,114,101,102,105,120,58,92,0,2049,416,10,1836,1863,158,112,114,101,102,105,
120,58,94,0,2049,410,10,1851,1874,146,104,101,114,101,0,1,3,15,10,1866,
1890,158,112,114,101,102,105,120,58,64,0,2049,201,2049,160,15,2049,1815,1793,1906,
1,3841,2049,107,2049,107,10,1,1899,1793,1912,15,10,1,1910,2049,64,10,1878,1929,
158,112,114,101,102,105,120,58,33,0,2049,201,2049,160,15,2049,1815,1793,1945,1,
4097,2049,107,2049,107,10,1,1938,1793,1951,16,10,1,1949,2049,64,10,1917,1968,146,
100,58,99,114,101,97,116,101,0,1,133,1,0,2049,166,2049,1874,2049,1570,2049,
160,16,10,1956,1991,146,118,97,114,45,110,0,2049,1968,2049,107,10,1982,2003,146,
118,97,114,0,134284289,0,1991,10,1996,2016,146,99,111,110,115,116,0,2049,1968,2049,
1570,2049,160,16,10,2007,2032,152,116,117,99,107,0,100926722,10,2024,2042,152,111,118,
101,114,0,67502597,10,2034,2051,152,110,105,112,0,772,10,2044,2066,152,100,114,111,
112,45,112,97,105,114,0,771,10,2053,2076,152,63,100,117,112,0,6402,10,2068,
2090,146,100,117,112,45,112,97,105,114,0,67502597,67502597,10,2078,2100,146,100,105,112,
0,525572,6,10,2093,2110,146,115,105,112,0,67502597,1,21,2049,2100,10,2103,2122,146,
98,105,0,1,2110,2049,2100,8,10,2116,2135,146,98,105,42,0,1,2100,2049,2100,
8,10,2128,2148,146,98,105,64,0,2,2049,2135,10,2141,2159,146,116,114,105,0,
1793,2168,1,2110,2049,2100,2049,2110,10,1,2161,2049,2100,8,10,2152,2182,146,116,114,
105,42,0,1793,2199,1793,2192,4,1,2100,2049,2100,10,1,2186,2049,2100,2049,2100,10,
1,2184,2049,2100,8,10,2174,2213,146,116,114,105,64,0,2,2,2049,2182,10,2205,
2227,146,119,104,105,108,101,0,1793,2236,525570,1639430,3,1,2229,7,10,1,2229,8,
3,10,2218,2250,146,117,110,116,105,108,0,1793,2261,525570,385942534,-1,25,3,1,2252,
7,10,1,2252,8,3,10,2241,2275,146,116,105,109,101,115,0,1793,2287,4,25,
33886721,1,2053,1542,1,2278,7,10,1,2277,8,3,10,2266,2304,158,112,114,101,102,
105,120,58,124,0,2049,201,1793,2312,2049,160,15,10,1,2308,1793,2320,2049,162,15,
10,1,2316,2049,2122,2049,1815,1793,2335,1,133,2049,2100,2049,1774,10,1,2328,1,21,
2049,64,10,2292,2350,146,84,82,85,69,0,1,-1,10,2342,2362,146,70,65,76,
83,69,0,1,0,10,2353,2373,146,99,97,115,101,0,1793,2378,67502597,11,10,1,
2375,2049,2100,4,1793,2390,772,8,2049,2350,10,1,2385,1793,2398,3,2049,2362,10,1,
2394,2049,64,25,6,3,3,10,2365,2417,146,115,58,99,97,115,101,0,1793,2423,
67502597,2049,95,10,1,2419,2049,2100,4,1793,2435,772,8,2049,2350,10,1,2430,1793,2443,
3,2049,2362,10,1,2439,2049,64,25,6,3,3,10,2407,2459,146,110,111,116,0,
1,-1,23,10,2452,2472,146,108,116,101,113,63,0,2049,2090,101516555,22,10,2463,2486,
146,103,116,101,113,63,0,4,2049,2472,10,2477,2499,146,110,58,77,65,88,0,
1,-5,15,10,2490,2512,146,110,58,77,73,78,0,1,-4,15,10,2503,2527,146,
110,58,122,101,114,111,63,0,1,0,11,10,2516,2543,146,110,58,45,122,101,
114,111,63,0,1,0,12,10,2531,2562,146,110,58,110,101,103,97,116,105,118,
101,63,0,1,0,13,10,2547,2581,146,110,58,112,111,115,105,116,105,118,101,
63,0,1,-1,14,10,2566,2609,146,110,58,115,116,114,105,99,116,108,121,45,
112,111,115,105,116,105,118,101,63,0,1,0,14,10,2585,2624,146,110,58,101,
118,101,110,63,0,1,2,20,3,2049,2527,10,2613,2641,146,110,58,111,100,100,
63,0,2049,2624,2049,2459,10,2631,2653,146,105,102,59,0,67502597,1,74,2049,2100,25,
6,771,10,2646,2670,146,45,105,102,59,0,67502597,1,72,2049,2100,2049,2459,25,6,
771,10,2662,2688,152,114,111,116,0,67503109,10,2681,2695,152,47,0,197652,10,2690,2704,
152,109,111,100,0,788,10,2697,2715,146,110,58,112,111,119,0,1,1,4,1793,
2723,67502597,19,10,1,2720,2049,2275,772,10,2706,2741,146,110,58,110,101,103,97,116,
101,0,1,-1,19,10,2729,2757,146,110,58,115,113,117,97,114,101,0,4866,10,
2745,2769,146,110,58,115,113,114,116,0,1,1,1793,2787,2049,2090,197652,67502597,18,1,
2,197652,25,17,1,2773,7,10,1,2773,8,772,10,2759,2801,146,110,58,109,105,
110,0,2049,2090,13,1793,2808,3,10,1,2806,1793,2814,772,10,1,2812,2049,64,10,
2792,2828,146,110,58,109,97,120,0,2049,2090,14,1793,2835,3,10,1,2833,1793,2841,
772,10,1,2839,2049,64,10,2819,2855,146,110,58,97,98,115,0,2,2049,2562,1,
2741,9,10,2846,2873,146,110,58,108,105,109,105,116,0,4,5,2049,2801,6,2049,
2828,10,2862,2890,146,110,58,105,110,99,0,1,1,17,10,2881,2903,146,110,58,
100,101,99,0,1,1,18,10,2894,2921,146,110,58,98,101,116,119,101,101,110,
63,0,67503109,1793,2929,67503109,67503109,2049,2873,10,1,2924,2049,2110,11,10,2907,2947,146,118,
58,105,110,99,45,98,121,0,1793,2951,4367,10,1,2949,2049,2110,16,10,2935,2969,
146,118,58,100,101,99,45,98,121,0,1793,2973,1180687,10,1,2971,2049,2110,16,10,
2957,2988,146,118,58,105,110,99,0,1,1,4,2049,2947,10,2979,3003,146,118,58,
100,101,99,0,1,1,4,2049,2969,10,2994,3020,146,118,58,108,105,109,105,116,
0,251790597,1542,2049,2873,4100,10,3009,3034,146,118,58,111,110,0,2049,2350,4100,10,3026,
3047,146,118,58,111,102,102,0,2049,2362,4100,10,3038,3060,146,97,108,108,111,116,
0,1,3,2049,2947,10,3051,3079,146,118,58,112,114,101,115,101,114,118,101,0,
983556,1793,3087,1,21,2049,2100,10,1,3082,2049,2100,4100,10,3065,3105,146,118,58,117,
112,100,97,116,101,0,4,1793,3112,15,4,8,10,1,3108,2049,2110,16,10,3093,
3126,146,99,111,112,121,0,1793,3135,285278725,1,33951492,268767489,1,6,10,1,3128,2049,2275,
771,10,3118,3154,146,83,99,111,112,101,76,105,115,116,0,8821,8932,10,3141,3163,
146,123,123,0,2049,1570,2,1,3154,2049,59,16,10,3157,3188,146,45,45,45,114,
101,118,101,97,108,45,45,45,0,2049,1570,1,3154,2049,2890,16,10,3172,3202,146,
125,125,0,1,3154,2049,56,4,15,11,1793,3216,3841,3154,4097,2,10,1,3211,1793,
3242,3841,3154,1793,3237,1,2,983567,1,3154,2049,2890,1641487,3,1,3226,7,10,1,3224,
8,16,10,1,3220,2049,64,10,3196,3256,133,115,116,97,114,116,0,0,10,3247,
3265,133,101,110,100,0,0,10,3258,3280,146,116,101,114,109,105,110,97,116,101,
0,1,0,3841,3265,16,10,3196,3302,146,98,117,102,102,101,114,58,115,116,97,
114,116,0,3841,3256,10,3286,3319,146,98,117,102,102,101,114,58,101,110,100,0,
3841,3265,10,3305,3336,146,98,117,102,102,101,114,58,97,100,100,0,3841,3265,16,
1,3265,2049,2988,2049,3280,10,3322,3360,146,98,117,102,102,101,114,58,103,101,116,
0,1,3265,2049,3003,3841,3265,15,2049,3280,10,3346,3386,146,98,117,102,102,101,114,
58,101,109,112,116,121,0,3841,3256,4097,3265,2049,3280,10,3370,3408,146,98,117,102,
102,101,114,58,115,105,122,101,0,3841,3265,3841,3256,18,10,3393,3428,146,98,117,
102,102,101,114,58,115,101,116,0,4097,3256,2049,3386,10,3414,3452,146,98,117,102,
102,101,114,58,112,114,101,115,101,114,118,101,0,3841,3256,3841,3265,1793,3465,1,
21,2049,2100,4097,3256,10,1,3458,2049,2100,4097,3265,10,3433,3487,133,84,101,109,112,
83,116,114,105,110,103,115,0,32,3472,3505,133,84,101,109,112,83,116,114,105,
110,103,77,97,120,0,512,3488,3517,146,83,84,82,73,78,71,83,0,2049,1543,
3841,3487,3841,3505,19,18,10,3506,3537,133,67,117,114,114,101,110,116,0,30,10,
3526,3552,146,115,58,112,111,105,110,116,101,114,0,3841,3537,3841,3505,19,2049,3517,
17,10,3539,3571,146,115,58,110,101,120,116,0,1,3537,2049,2988,3841,3537,3841,3487,
11,1793,3587,1,0,4097,3537,10,1,3582,9,10,3506,3601,146,115,58,116,101,109,
112,0,2,2049,81,2049,2890,2049,3552,4,2049,3126,2049,3552,2049,3571,10,3591,3627,146,
115,58,101,109,112,116,121,0,2049,3552,2049,3571,1,0,67502597,16,10,3616,3646,146,
115,58,115,107,105,112,0,6,1793,3654,68223234,1,786703,0,10,1,3649,2049,2227,2049,
2903,5,10,3636,3672,146,115,58,107,101,101,112,0,2049,1815,1793,3681,1,3646,2049,
1774,10,1,3676,9,2049,1874,1,121,2049,2100,2049,133,10,3662,3705,158,112,114,101,
102,105,120,58,39,0,2049,1815,1,3672,1,3601,2049,64,10,3693,3724,146,115,58,
99,104,111,112,0,2049,3601,2,2049,81,67502597,17,2049,2903,1,0,4,16,10,3714,
3751,146,115,58,114,101,118,101,114,115,101,0,1793,3793,2,2049,3601,2049,3428,1,
81,1793,3769,2,2049,81,17,2049,2903,10,1,3762,2049,2122,4,1793,3783,2,15,2049,
3336,2049,2903,10,1,3776,2049,2275,3,2049,3302,2049,3601,10,1,3753,2049,3452,10,3738,
3811,146,115,58,112,114,101,112,101,110,100,0,2049,3601,1793,3835,2,2049,81,17,
1793,3827,2,2049,81,2049,2890,10,1,3821,2049,2100,4,2049,3126,10,1,3815,2049,2110,
10,3798,3852,146,115,58,97,112,112,101,110,100,0,4,2049,3811,10,3840,3870,146,
115,58,102,111,114,45,101,97,99,104,0,1793,3885,67502597,6415,3,67502597,67502597,251987205,2054,
101777670,1,1,3872,7,10,1,3872,8,771,10,3856,3904,146,115,58,105,110,100,101,
120,45,111,102,0,4,1793,3918,68223234,1,6415,33883396,101450758,6404,3,1,3907,7,10,1,
3907,1793,3927,18,2049,2903,772,10,1,3922,1793,3936,2049,81,67502597,11,10,1,3931,2049,
2159,1793,3946,3,1,-1,10,1,3942,9,10,3890,3970,146,115,58,99,111,110,116,
97,105,110,115,45,99,104,97,114,63,0,2049,3904,1,-1,12,10,3950,3986,146,
115,58,104,97,115,104,0,1,5381,4,1793,3994,286458116,33,10,1,3991,2049,3870,10,
3976,4006,133,83,114,99,0,0,3999,4014,133,84,97,114,0,0,4007,4022,133,80,
97,100,0,0,4015,4028,133,73,0,0,4023,4034,133,70,0,0,4029,4041,133,65,
116,0,0,4035,4055,146,116,101,114,109,105,110,97,116,101,0,1,0,3841,4022,
3841,4014,2049,81,17,16,10,4042,4077,146,101,120,116,114,97,99,116,0,3841,4006,
3841,4028,17,3841,4022,3841,4014,2049,81,2049,3126,10,4066,4102,146,99,111,109,112,97,
114,101,0,3841,4022,3841,4014,2049,95,3841,4034,22,4097,4034,3841,4034,1793,4122,3841,4028,
4097,4041,10,1,4117,2049,72,10,4091,4135,146,110,101,120,116,0,1,4028,2049,2988,
10,3976,4162,146,115,58,99,111,110,116,97,105,110,115,45,115,116,114,105,110,
103,63,0,4097,4014,4097,4006,2049,3627,4097,4022,1,0,4097,4028,1,0,4097,4034,3841,
4006,2049,81,1793,4193,2049,4077,2049,4055,2049,4102,2049,4135,10,1,4184,2049,2275,3841,4034,
10,4140,4207,133,83,116,114,0,0,4200,4219,146,101,120,116,114,97,99,116,0,
2049,2090,3841,4207,4,2049,3126,3841,-1,67502597,17,1,0,4,16,10,4208,4244,146,99,
104,101,99,107,0,1,4219,2049,2100,1793,4255,1,2890,2049,2100,10,1,4250,2049,2100,
3841,4207,2049,3986,67502597,11,10,4235,4278,146,108,111,99,97,116,105,111,110,0,67503109,
67503109,1793,4311,1793,4306,4,1793,4292,67502597,2049,2527,21,10,1,4287,2049,2100,4,1793,4302,
772,2,10,1,4299,9,10,1,4284,2049,2100,10,1,4282,2049,2100,10,4266,4325,146,
115,101,116,117,112,0,2049,3627,4097,4207,1,0,67503109,67503109,1,81,1,3986,2049,2122,
2049,3627,2049,3428,1793,4349,67502597,2049,81,10,1,4345,2049,2100,4,10,4140,4376,146,115,
58,105,110,100,101,120,45,111,102,45,115,116,114,105,110,103,0,67502597,1793,4402,
1793,4395,2049,4325,1793,4390,2049,4244,2049,4278,10,1,4385,2049,2275,10,1,4381,2049,3452,
771,3,10,1,4379,2049,2100,18,1,2,18,1,-1,2049,2828,10,4355,4427,146,115,
58,102,105,108,116,101,114,0,1793,4455,2049,3627,2049,3428,4,1793,4447,2049,2090,4,
8,1,3336,1,11,2049,64,10,1,4436,2049,3870,3,2049,3302,10,1,4429,2049,3452,
10,4415,4469,146,115,58,109,97,112,0,1793,4491,2049,3627,2049,3428,4,1793,4483,67502597,
8,2049,3336,10,1,4478,2049,3870,3,2049,3302,10,1,4471,2049,3452,10,4460,4508,146,
115,58,115,117,98,115,116,114,0,1793,4514,17,2049,3627,10,1,4510,2049,2100,1793,
4526,67502597,1,3126,2049,2100,10,1,4520,2049,2110,67502597,1793,4539,17,1,0,4,16,10,
1,4533,2049,2100,10,4496,4555,146,115,58,114,105,103,104,116,0,67502597,2049,81,67502597,
18,4,2049,4508,10,4544,4574,146,115,58,108,101,102,116,0,1,0,4,2049,4508,
10,4564,4598,146,115,58,98,101,103,105,110,115,45,119,105,116,104,63,0,2,
2049,81,1,13,2049,2100,2049,4574,2049,95,10,4580,4626,146,115,58,101,110,100,115,
45,119,105,116,104,63,0,2,2049,81,1,13,2049,2100,2049,4555,2049,95,10,4610,
4648,146,115,58,99,111,112,121,0,67502597,2049,81,2049,2890,2049,3126,10,4638,4668,146,
115,58,68,73,71,73,84,83,0,2049,3646,48,49,50,51,52,53,54,55,56,
57,0,1,4670,10,4656,4705,146,115,58,65,83,67,73,73,45,76,79,87,69,
82,67,65,83,69,0,2049,3646,97,98,99,100,101,102,103,104,105,106,107,108,
109,110,111,112,113,114,115,116,117,118,119,120,121,122,0,1,4707,10,4684,4758,
146,115,58,65,83,67,73,73,45,85,80,80,69,82,67,65,83,69,0,2049,
3646,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,
84,85,86,87,88,89,90,0,1,4760,10,4737,4809,146,115,58,65,83,67,73,
73,45,76,69,84,84,69,82,83,0,2049,3646,97,98,99,100,101,102,103,104,
105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,65,66,
67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,
87,88,89,90,0,1,4811,10,4790,4884,146,115,58,80,85,78,67,84,85,65,
84,73,79,78,0,2049,3646,95,33,34,35,36,37,38,39,40,41,42,43,44,
45,46,47,58,59,60,61,62,63,64,91,92,93,94,96,123,124,125,126,0,
1,4886,1,95,67502597,16,10,4867,4942,133,115,58,87,72,73,84,69,83,80,65,
67,69,0,32,9,10,13,0,4926,4952,158,39,0,1,3627,2049,146,10,4947,4962,
158,36,0,1,0,2049,133,10,4957,0,133,65,83,67,73,73,58,78,85,76,
0,4967,27,133,65,83,67,73,73,58,69,83,67,0,4980,8,133,65,83,67,
73,73,58,66,83,0,4993,9,133,65,83,67,73,73,58,72,84,0,5005,10,
133,65,83,67,73,73,58,76,70,0,5017,11,133,65,83,67,73,73,58,86,
84,0,5029,12,133,65,83,67,73,73,58,70,70,0,5041,13,133,65,83,67,
73,73,58,67,82,0,5053,32,133,65,83,67,73,73,58,83,80,65,67,69,
0,5065,127,133,65,83,67,73,73,58,68,69,76,0,5080,1,133,65,83,67,
73,73,58,83,79,72,0,5093,2,133,65,83,67,73,73,58,83,84,88,0,
5106,3,133,65,83,67,73,73,58,69,84,88,0,5119,4,133,65,83,67,73,
73,58,69,79,84,0,5132,5,133,65,83,67,73,73,58,69,78,81,0,5145,
6,133,65,83,67,73,73,58,65,67,75,0,5158,7,133,65,83,67,73,73,
58,66,69,76,0,5171,14,133,65,83,67,73,73,58,83,79,0,5184,15,133,
65,83,67,73,73,58,83,73,0,5196,16,133,65,83,67,73,73,58,68,76,
69,0,5208,17,133,65,83,67,73,73,58,68,67,49,0,5221,18,133,65,83,
67,73,73,58,68,67,50,0,5234,19,133,65,83,67,73,73,58,68,67,51,
0,5247,20,133,65,83,67,73,73,58,68,67,52,0,5260,21,133,65,83,67,
73,73,58,78,65,75,0,5273,22,133,65,83,67,73,73,58,83,89,78,0,
5286,23,133,65,83,67,73,73,58,69,84,66,0,5299,24,133,65,83,67,73,
73,58,67,65,78,0,5312,25,133,65,83,67,73,73,58,69,77,0,5325,26,
133,65,83,67,73,73,58,83,85,66,0,5337,28,133,65,83,67,73,73,58,
70,83,0,5350,29,133,65,83,67,73,73,58,71,83,0,5362,30,133,65,83,
67,73,73,58,82,83,0,5374,31,133,65,83,67,73,73,58,85,83,0,5386,
5414,146,99,58,108,111,119,101,114,99,97,115,101,63,0,1,97,1,122,2049,
2921,10,5398,5437,146,99,58,117,112,112,101,114,99,97,115,101,63,0,1,65,
1,90,2049,2921,10,5421,5457,146,99,58,108,101,116,116,101,114,63,0,1,5414,
1,5437,2049,2122,22,10,5444,5477,146,99,58,100,105,103,105,116,63,0,1,48,
1,57,2049,2921,10,5465,5498,146,99,58,118,105,115,105,98,108,101,63,0,1,
32,1,126,2049,2921,10,5484,5517,146,99,58,118,111,119,101,108,63,0,2049,3646,
97,101,105,111,117,65,69,73,79,85,0,1,5519,4,2049,3970,10,5505,5552,146,
99,58,99,111,110,115,111,110,97,110,116,63,0,2,2049,5457,1793,5562,2049,5517,
2049,2459,10,1,5557,1793,5570,3,2049,2362,10,1,5566,2049,64,10,5536,5592,146,99,
58,119,104,105,116,101,115,112,97,99,101,63,0,1,4942,4,2049,3970,10,5575,
5615,146,99,58,45,108,111,119,101,114,99,97,115,101,63,0,2049,5414,2049,2459,
10,5598,5637,146,99,58,45,117,112,112,101,114,99,97,115,101,63,0,2049,5437,
2049,2459,10,5620,5655,146,99,58,45,100,105,103,105,116,63,0,2049,5477,2049,2459,
10,5642,5678,146,99,58,45,119,104,105,116,101,115,112,97,99,101,63,0,2049,
5592,2049,2459,10,5660,5698,146,99,58,45,118,105,115,105,98,108,101,63,0,2049,
5498,2049,2459,10,5683,5716,146,99,58,45,118,111,119,101,108,63,0,2049,5517,2049,
2459,10,5703,5738,146,99,58,45,99,111,110,115,111,110,97,110,116,63,0,2049,
5552,2049,2459,10,5721,5757,146,99,58,116,111,45,117,112,112,101,114,0,2,2049,
5414,25,3,1,32,18,10,5743,5780,146,99,58,116,111,45,108,111,119,101,114,
0,2,2049,5437,25,3,1,32,17,10,5766,5804,146,99,58,116,111,45,115,116,
114,105,110,103,0,2049,3646,46,0,1,5806,2049,3601,1,36,2049,2110,10,5789,5834,
146,99,58,116,111,103,103,108,101,45,99,97,115,101,0,2,2049,5414,1,5757,
1,5780,2049,64,10,5817,5859,146,99,58,116,111,45,110,117,109,98,101,114,0,
2,2049,5477,1793,5868,1,48,18,10,1,5864,1793,5876,3,1,0,10,1,5872,2049,
64,10,5844,5895,146,115,58,116,111,45,117,112,112,101,114,0,1,5757,2049,4469,
10,5881,5914,146,115,58,116,111,45,108,111,119,101,114,0,1,5780,2049,4469,10,
5900,5934,146,115,58,116,114,105,109,45,108,101,102,116,0,2049,3601,1793,5948,2049,
56,1,5592,1,2543,2049,2122,21,10,1,5938,2049,2227,2049,2903,10,5919,5971,146,115,
58,116,114,105,109,45,114,105,103,104,116,0,2049,3601,2049,3751,2049,5934,2049,3751,
10,5955,5990,146,115,58,116,114,105,109,0,2049,5971,2049,5934,10,5980,6006,146,99,
111,114,114,101,99,116,0,2,1,48,13,1793,6021,1,48,67502597,18,1,2,19,
17,10,1,6012,9,10,5980,6040,146,110,58,116,111,45,115,116,114,105,110,103,
0,1793,6088,2049,1874,2049,3428,2,2049,2855,1793,6066,1,10,20,4,1,48,17,2049,
6006,2049,3336,2,2049,2543,10,1,6051,2049,2227,3,2049,2562,1793,6080,1,45,2049,3336,
10,1,6075,9,2049,3302,2049,3751,10,1,6042,2049,3452,10,6025,6115,133,82,101,119,
114,105,116,101,85,110,100,101,114,115,99,111,114,101,115,0,-1,6093,6123,146,
115,117,98,0,1,95,1793,6130,1,32,10,1,6127,2049,2373,10,6116,6146,146,114,
101,119,114,105,116,101,0,3841,6115,1793,6155,1,6123,2049,4469,10,1,6150,9,10,
6135,6169,146,104,97,110,100,108,101,0,1,3705,8,10,6093,6185,158,112,114,101,
102,105,120,58,39,0,2049,6146,2049,6169,10,6173,6201,146,115,58,115,112,108,105,
116,0,2049,2090,2049,3904,772,2049,2090,2049,4574,1,38,2049,2100,10,6190,6236,146,115,
58,115,112,108,105,116,45,111,110,45,115,116,114,105,110,103,0,2049,2090,2049,
4376,2049,2890,772,2049,2090,2049,4574,1,38,2049,2100,10,6215,6265,146,115,58,114,101,
112,108,97,99,101,0,67502597,2049,81,2049,1874,16,1793,6281,2049,6236,4,2049,1874,15,
17,10,1,6273,2049,2100,2049,3811,2049,3852,10,6252,6302,133,83,112,108,105,116,45,
79,110,0,0,6290,6313,146,109,97,116,99,104,63,0,3841,6302,11,10,6303,6330,
146,116,101,114,109,105,110,97,116,101,0,1,0,67502597,2049,2903,16,10,6317,6345,
146,115,116,101,112,0,1,2890,2049,2100,2049,6313,1793,6359,2,2049,107,2049,6330,10,
1,6353,9,10,6252,6377,146,115,58,116,111,107,101,110,105,122,101,0,4097,6302,
2049,3672,2049,1874,1,0,2049,107,1793,6399,2,2049,107,2,1,6345,2049,3870,3,10,
1,6389,2049,2100,2049,1874,67502597,18,2049,2903,67502597,16,10,6363,6422,133,78,101,101,100,
108,101,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1014,1543,145,
69,79,77,0,1,-3,15,10,1536,1556,145,100,101,112,116,104,0,1,-1,15,
10,1547,1570,145,100,58,108,97,115,116,0,1,2,15,10,1560,1587,145,100,58,
108,97,115,116,46,120,116,0,2049,1570,2049,159,15,10,1574,1609,145,100,58,108,
97,115,116,46,99,108,97,115,115,0,2049,1570,2049,161,15,10,1593,1630,145,100,
58,108,97,115,116,46,110,97,109,101,0,2049,1570,2049,163,10,1615,1646,145,114,
101,99,108,97,115,115,0,2049,1570,2049,161,16,10,1635,1665,145,105,109,109,101,
100,105,97,116,101,0,1,157,2049,1646,10,1652,1678,145,100,97,116,97,0,1,
133,2049,1646,10,1670,1696,145,112,114,105,109,105,116,105,118,101,0,1,151,2049,
1646,10,1683,1709,157,104,111,111,107,0,1,1793,2049,107,1,3,15,1,1,17,
2049,107,10,1701,1734,145,115,101,116,45,104,111,111,107,0,1,1,17,16,10,
1722,1749,145,117,110,104,111,111,107,0,1,1,17,2,1,1,17,4,16,10,
1739,1764,157,40,0,10,1759,1770,157,41,0,10,1765,1786,145,99,111,109,112,105,
108,101,58,108,105,116,0,1,1,2049,107,2049,107,10,1771,1809,145,99,111,109,
112,105,108,101,58,106,117,109,112,0,1,1793,2049,107,2049,107,10,1793,1832,145,
99,111,109,112,105,108,101,58,99,97,108,108,0,1,2049,2049,107,2049,107,10,
1816,1854,145,99,111,109,112,105,108,101,58,114,101,116,0,1,10,2049,107,10,
1839,1873,145,99,111,109,112,105,108,105,110,103,63,0,1,126,15,10,1859,1888,
157,115,105,103,105,108,58,96,0,2049,228,2049,107,10,1877,1904,157,115,105,103,
105,108,58,92,0,2049,426,10,1893,1918,157,115,105,103,105,108,58,94,0,2049,
420,10,1907,1929,145,104,101,114,101,0,1,3,15,10,1921,1944,157,115,105,103,
105,108,58,64,0,2049,200,2049,159,15,2049,1873,1793,1960,1,3841,2049,107,2049,107,
10,1,1953,1793,1966,15,10,1,1964,2049,64,10,1933,1982,157,115,105,103,105,108,
58,33,0,2049,200,2049,159,15,2049,1873,1793,1998,1,4097,2049,107,2049,107,10,1,
1991,1793,2004,16,10,1,2002,2049,64,10,1971,2021,145,100,58,99,114,101,97,116,
101,0,1793,2023,1,133,1,0,2049,165,2049,1929,2049,1570,2049,159,16,10,2009,2046,
145,118,97,114,45,110,0,2049,2021,2049,107,10,2037,2058,145,118,97,114,0,134284289,
0,2046,10,2051,2071,145,99,111,110,115,116,0,2049,2021,2049,1570,2049,159,16,10,
2062,2087,151,116,117,99,107,0,100926722,10,2079,2097,151,111,118,101,114,0,67502597,10,
2089,2106,151,110,105,112,0,772,10,2099,2121,151,100,114,111,112,45,112,97,105,
114,0,771,10,2108,2131,151,63,100,117,112,0,6402,10,2123,2145,145,100,117,112,
45,112,97,105,114,0,67502597,67502597,10,2133,2155,145,100,105,112,0,525572,6,10,2148,
2165,145,115,105,112,0,67502597,1,25,2049,2155,10,2158,2177,145,98,105,0,1,2165,
2049,2155,8,10,2171,2190,145,98,105,42,0,1,2155,2049,2155,8,10,2183,2203,145,
98,105,64,0,2,2049,2190,10,2196,2214,145,116,114,105,0,1793,2223,1,2165,2049,
2155,2049,2165,10,1,2216,2049,2155,8,10,2207,2237,145,116,114,105,42,0,1793,2254,
1793,2247,4,1,2155,2049,2155,10,1,2241,2049,2155,2049,2155,10,1,2239,2049,2155,8,
10,2229,2268,145,116,114,105,64,0,2,2,2049,2237,10,2260,2282,145,119,104,105,
108,101,0,1793,2291,525570,1639430,3,1,2284,7,10,1,2284,8,3,10,2273,2305,145,
117,110,116,105,108,0,1793,2316,525570,385942534,-1,25,3,1,2307,7,10,1,2307,8,
3,10,2296,2330,145,116,105,109,101,115,0,1793,2342,4,25,33886721,1,2053,1542,1,
2333,7,10,1,2332,8,3,10,2321,2358,157,115,105,103,105,108,58,124,0,2049,
200,1793,2366,2049,159,15,10,1,2362,1793,2374,2049,161,15,10,1,2370,2049,2177,2049,
1873,1793,2389,1,133,2049,2155,2049,1832,10,1,2382,1,25,2049,64,10,2347,2404,145,
84,82,85,69,0,1,-1,10,2396,2416,145,70,65,76,83,69,0,1,0,10,
2407,2427,145,99,97,115,101,0,1793,2432,67502597,11,10,1,2429,2049,2155,4,1793,2444,
772,8,2049,2404,10,1,2439,1793,2452,3,2049,2416,10,1,2448,2049,64,25,6,3,
3,10,2419,2471,145,115,58,99,97,115,101,0,1793,2477,67502597,2049,95,10,1,2473,
2049,2155,4,1793,2489,772,8,2049,2404,10,1,2484,1793,2497,3,2049,2416,10,1,2493,
2049,64,25,6,3,3,10,2461,2513,145,110,111,116,0,1,-1,23,10,2506,2526,
145,108,116,101,113,63,0,2049,2145,101516555,22,10,2517,2540,145,103,116,101,113,63,
0,4,2049,2526,10,2531,2553,145,110,58,77,65,88,0,1,-5,15,10,2544,2566,
145,110,58,77,73,78,0,1,-4,15,10,2557,2581,145,110,58,122,101,114,111,
63,0,1,0,11,10,2570,2597,145,110,58,45,122,101,114,111,63,0,1,0,
12,10,2585,2616,145,110,58,110,101,103,97,116,105,118,101,63,0,1,0,13,
10,2601,2635,145,110,58,112,111,115,105,116,105,118,101,63,0,1,-1,14,10,
2620,2663,145,110,58,115,116,114,105,99,116,108,121,45,112,111,115,105,116,105,
118,101,63,0,1,0,14,10,2639,2678,145,110,58,101,118,101,110,63,0,1,
2,20,3,2049,2581,10,2667,2695,145,110,58,111,100,100,63,0,2049,2678,2049,2513,
10,2685,2707,145,105,102,59,0,67502597,1,74,2049,2155,25,6,771,10,2700,2724,145,
45,105,102,59,0,67502597,1,72,2049,2155,2049,2513,25,6,771,10,2716,2742,157,105,
102,58,0,1,25,2049,107,1,3,2049,107,10,2735,2759,157,45,105,102,58,0,
1,1644289,2049,107,1,-1,2049,107,1,3,2049,107,10,2751,2779,151,114,111,116,0,
67503109,10,2772,2786,151,47,0,197652,10,2781,2795,151,109,111,100,0,788,10,2788,2806,
145,110,58,112,111,119,0,1,1,4,1793,2814,67502597,19,10,1,2811,2049,2330,772,
10,2797,2832,145,110,58,110,101,103,97,116,101,0,1,-1,19,10,2820,2848,145,
110,58,115,113,117,97,114,101,0,4866,10,2836,2860,145,110,58,115,113,114,116,
0,1,1,1793,2878,2049,2145,197652,67502597,18,1,2,197652,25,17,1,2864,7,10,1,
2864,8,772,10,2850,2892,145,110,58,109,105,110,0,2049,2145,13,1793,2899,3,10,
1,2897,1793,2905,772,10,1,2903,2049,64,10,2883,2919,145,110,58,109,97,120,0,
2049,2145,14,1793,2926,3,10,1,2924,1793,2932,772,10,1,2930,2049,64,10,2910,2946,
145,110,58,97,98,115,0,2,2049,2616,1,2832,9,10,2937,2964,145,110,58,108,
105,109,105,116,0,4,5,2049,2892,6,2049,2919,10,2953,2981,145,110,58,105,110,
99,0,659713,1,10,2972,2993,145,110,58,100,101,99,0,659969,1,10,2984,3010,145,
110,58,98,101,116,119,101,101,110,63,0,67503109,1793,3018,67503109,67503109,2049,2964,10,1,
3013,2049,2165,11,10,2996,3036,145,118,58,105,110,99,45,98,121,0,1793,3040,4367,
10,1,3038,2049,2165,16,10,3024,3058,145,118,58,100,101,99,45,98,121,0,1793,
3062,1180687,10,1,3060,2049,2165,16,10,3046,3077,145,118,58,105,110,99,0,1,1,
4,2049,3036,10,3068,3092,145,118,58,100,101,99,0,1,1,4,2049,3058,10,3083,
3109,145,118,58,108,105,109,105,116,0,251790597,1542,2049,2964,4100,10,3098,3123,145,118,
58,111,110,0,2049,2404,4100,10,3115,3136,145,118,58,111,102,102,0,2049,2416,4100,
10,3127,3149,145,97,108,108,111,116,0,1,3,2049,3036,10,3140,3168,145,118,58,
112,114,101,115,101,114,118,101,0,983556,1793,3176,1,25,2049,2155,10,1,3171,2049,
2155,4100,10,3154,3194,145,118,58,117,112,100,97,116,101,0,4,1793,3201,15,4,
8,10,1,3197,2049,2165,16,10,3182,3215,145,99,111,112,121,0,1793,3224,285278725,1,
33951492,268767489,1,6,10,1,3217,2049,2330,771,10,3207,3243,145,83,99,111,112,101,76,
105,115,116,0,9480,9578,10,3230,3252,145,123,123,0,2049,1570,2,1,3243,2049,59,
16,10,3246,3277,145,45,45,45,114,101,118,101,97,108,45,45,45,0,2049,1570,
1,3243,2049,2981,16,10,3261,3291,145,125,125,0,1,3243,2049,56,4,15,11,1793,
3305,3841,3243,4097,2,10,1,3300,1793,3331,3841,3243,1793,3326,1,2,983567,1,3243,2049,
2981,1641487,3,1,3315,7,10,1,3313,8,16,10,1,3309,2049,64,10,3285,3345,133,
115,116,97,114,116,0,0,10,3336,3354,133,101,110,100,0,0,10,3347,3369,145,
116,101,114,109,105,110,97,116,101,0,1,0,3841,3354,16,10,3285,3391,145,98,
117,102,102,101,114,58,115,116,97,114,116,0,3841,3345,10,3375,3408,145,98,117,
102,102,101,114,58,101,110,100,0,3841,3354,10,3394,3425,145,98,117,102,102,101,
114,58,97,100,100,0,3841,3354,16,1,3354,2049,3077,2049,3369,10,3411,3449,145,98,
117,102,102,101,114,58,103,101,116,0,1,3354,2049,3092,3841,3354,15,2049,3369,10,
3435,3475,145,98,117,102,102,101,114,58,101,109,112,116,121,0,3841,3345,4097,3354,
2049,3369,10,3459,3497,145,98,117,102,102,101,114,58,115,105,122,101,0,3841,3354,
3841,3345,18,10,3482,3517,145,98,117,102,102,101,114,58,115,101,116,0,4097,3345,
2049,3475,10,3503,3541,145,98,117,102,102,101,114,58,112,114,101,115,101,114,118,
101,0,3841,3345,3841,3354,1793,3554,1,25,2049,2155,4097,3345,10,1,3547,2049,2155,4097,
3354,10,3522,3576,133,84,101,109,112,83,116,114,105,110,103,115,0,32,3561,3594,
133,84,101,109,112,83,116,114,105,110,103,77,97,120,0,512,3577,3606,145,83,
84,82,73,78,71,83,0,2049,1543,3841,3576,3841,3594,19,18,10,3595,3626,133,67,
117,114,114,101,110,116,0,31,10,3615,3641,145,115,58,112,111,105,110,116,101,
114,0,3841,3626,3841,3594,19,2049,3606,17,10,3628,3660,145,115,58,110,101,120,116,
0,1,3626,2049,3077,3841,3626,3841,3576,11,1793,3676,1,0,4097,3626,10,1,3671,9,
10,3595,3690,145,115,58,116,101,109,112,0,2,2049,81,2049,2981,2049,3641,4,2049,
3215,2049,3641,2049,3660,10,3680,3716,145,115,58,101,109,112,116,121,0,2049,3641,2049,
3660,1,0,67502597,16,10,3705,3735,145,115,58,115,107,105,112,0,6,1793,3743,68223234,
1,786703,0,10,1,3738,2049,2282,2049,2993,5,10,3725,3761,145,115,58,107,101,101,
112,0,2049,1873,1793,3770,1,3735,2049,1832,10,1,3765,9,2049,1929,1,121,2049,2155,
2049,133,10,3751,3793,157,115,105,103,105,108,58,39,0,2049,1873,1,3761,1,3690,
2049,64,10,3782,3812,145,115,58,99,104,111,112,0,2049,3690,2,2049,81,67502597,17,
2049,2993,1,0,4,16,10,3802,3839,145,115,58,114,101,118,101,114,115,101,0,
1793,3881,2,2049,3690,2049,3517,1,81,1793,3857,2,2049,81,17,2049,2993,10,1,3850,
2049,2177,4,1793,3871,2,15,2049,3425,2049,2993,10,1,3864,2049,2330,3,2049,3391,2049,
3690,10,1,3841,2049,3541,10,3826,3899,145,115,58,112,114,101,112,101,110,100,0,
2049,3690,1793,3923,2,2049,81,17,1793,3915,2,2049,81,2049,2981,10,1,3909,2049,2155,
4,2049,3215,10,1,3903,2049,2165,10,3886,3940,145,115,58,97,112,112,101,110,100,
0,4,2049,3899,10,3928,3958,145,115,58,102,111,114,45,101,97,99,104,0,1793,
3973,67502597,6415,3,67502597,67502597,251987205,2054,101777670,1,1,3960,7,10,1,3960,8,771,10,3944,
3994,145,115,58,105,110,100,101,120,47,99,104,97,114,0,4,1793,4008,68223234,1,
6415,33883396,101450758,6404,3,1,3997,7,10,1,3997,1793,4017,18,2049,2993,772,10,1,4012,
1793,4026,2049,81,67502597,11,10,1,4021,2049,2214,1793,4036,3,1,-1,10,1,4032,9,
10,3978,4060,145,115,58,99,111,110,116,97,105,110,115,47,99,104,97,114,63,
0,2049,3994,1,-1,12,10,4040,4076,145,115,58,104,97,115,104,0,1,5381,4,
1793,4084,286458116,33,10,1,4081,2049,3958,10,4066,4096,133,83,114,99,0,0,4089,4104,
133,84,97,114,0,0,4097,4112,133,80,97,100,0,0,4105,4118,133,73,0,0,
4113,4124,133,70,0,0,4119,4131,133,65,116,0,0,4125,4145,145,116,101,114,109,
105,110,97,116,101,0,1,0,3841,4112,3841,4104,2049,81,17,16,10,4132,4167,145,
101,120,116,114,97,99,116,0,3841,4096,3841,4118,17,3841,4112,3841,4104,2049,81,2049,
3215,10,4156,4192,145,99,111,109,112,97,114,101,0,3841,4112,3841,4104,2049,95,3841,
4124,22,4097,4124,3841,4124,1793,4212,3841,4118,4097,4131,10,1,4207,2049,72,10,4181,4225,
145,110,101,120,116,0,1,4118,2049,3077,10,4066,4252,145,115,58,99,111,110,116,
97,105,110,115,47,115,116,114,105,110,103,63,0,4097,4104,4097,4096,2049,3716,4097,
4112,1,0,4097,4118,1,0,4097,4124,3841,4096,2049,81,1793,4283,2049,4167,2049,4145,2049,
4192,2049,4225,10,1,4274,2049,2330,3841,4124,10,4230,4297,133,83,116,114,0,0,4290,
4309,145,101,120,116,114,97,99,116,0,2049,2145,3841,4297,4,2049,3215,3841,-1,67502597,
17,1,0,4,16,10,4298,4334,145,99,104,101,99,107,0,1,4309,2049,2155,1793,
4345,1,2981,2049,2155,10,1,4340,2049,2155,3841,4297,2049,4076,67502597,11,10,4325,4368,145,
108,111,99,97,116,105,111,110,0,67503109,67503109,1793,4401,1793,4396,4,1793,4382,67502597,2049,
2581,21,10,1,4377,2049,2155,4,1793,4392,772,2,10,1,4389,9,10,1,4374,2049,
2155,10,1,4372,2049,2155,10,4356,4415,145,115,101,116,117,112,0,2049,3716,4097,4297,
1,0,67503109,67503109,1,81,1,4076,2049,2177,2049,3716,2049,3517,1793,4439,67502597,2049,81,10,
1,4435,2049,2155,4,10,4230,4463,145,115,58,105,110,100,101,120,47,115,116,114,
105,110,103,0,67502597,1793,4489,1793,4482,2049,4415,1793,4477,2049,4334,2049,4368,10,1,4472,
2049,2330,10,1,4468,2049,3541,771,3,10,1,4466,2049,2155,18,1,2,18,1,-1,
2049,2919,10,4445,4514,145,115,58,102,105,108,116,101,114,0,1793,4542,2049,3716,2049,
3517,4,1793,4534,2049,2145,4,8,1,3425,1,15,2049,64,10,1,4523,2049,3958,3,
2049,3391,10,1,4516,2049,3541,10,4502,4556,145,115,58,109,97,112,0,1793,4578,2049,
3716,2049,3517,4,1793,4570,67502597,8,2049,3425,10,1,4565,2049,3958,3,2049,3391,10,1,
4558,2049,3541,10,4547,4595,145,115,58,115,117,98,115,116,114,0,1793,4601,17,2049,
3716,10,1,4597,2049,2155,1793,4613,67502597,1,3215,2049,2155,10,1,4607,2049,2165,67502597,1793,
4626,17,1,0,4,16,10,1,4620,2049,2155,10,4583,4642,145,115,58,114,105,103,
104,116,0,67502597,2049,81,67502597,18,4,2049,4595,10,4631,4661,145,115,58,108,101,102,
116,0,1,0,4,2049,4595,10,4651,4685,145,115,58,98,101,103,105,110,115,45,
119,105,116,104,63,0,2,2049,81,1,17,2049,2155,2049,4661,2049,95,10,4667,4713,
145,115,58,101,110,100,115,45,119,105,116,104,63,0,2,2049,81,1,17,2049,
2155,2049,4642,2049,95,10,4697,4735,145,115,58,99,111,112,121,0,67502597,2049,81,2049,
2981,2049,3215,10,4725,4755,145,115,58,68,73,71,73,84,83,0,2049,3735,48,49,
50,51,52,53,54,55,56,57,65,66,67,68,69,70,0,1,4757,10,4743,4798,
145,115,58,65,83,67,73,73,45,76,79,87,69,82,67,65,83,69,0,2049,
3735,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,
116,117,118,119,120,121,122,0,1,4800,10,4777,4851,145,115,58,65,83,67,73,
73,45,85,80,80,69,82,67,65,83,69,0,2049,3735,65,66,67,68,69,70,
71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,
0,1,4853,10,4830,4902,145,115,58,65,83,67,73,73,45,76,69,84,84,69,
82,83,0,2049,3735,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,
112,113,114,115,116,117,118,119,120,121,122,65,66,67,68,69,70,71,72,73,
74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,0,1,4904,
10,4883,4977,145,115,58,80,85,78,67,84,85,65,84,73,79,78,0,2049,3735,
95,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,58,59,60,61,
62,63,64,91,92,93,94,96,123,124,125,126,0,1,4979,1,95,67502597,16,10,
4960,5035,133,115,58,87,72,73,84,69,83,80,65,67,69,0,32,9,10,13,
0,5019,5045,157,39,0,1,3716,2049,145,10,5040,5055,157,36,0,1,0,2049,133,
10,5050,0,133,65,83,67,73,73,58,78,85,76,0,5060,27,133,65,83,67,
73,73,58,69,83,67,0,5073,8,133,65,83,67,73,73,58,66,83,0,5086,
9,133,65,83,67,73,73,58,72,84,0,5098,10,133,65,83,67,73,73,58,
76,70,0,5110,11,133,65,83,67,73,73,58,86,84,0,5122,12,133,65,83,
67,73,73,58,70,70,0,5134,13,133,65,83,67,73,73,58,67,82,0,5146,
32,133,65,83,67,73,73,58,83,80,65,67,69,0,5158,127,133,65,83,67,
73,73,58,68,69,76,0,5173,1,133,65,83,67,73,73,58,83,79,72,0,
5186,2,133,65,83,67,73,73,58,83,84,88,0,5199,3,133,65,83,67,73,
73,58,69,84,88,0,5212,4,133,65,83,67,73,73,58,69,79,84,0,5225,
5,133,65,83,67,73,73,58,69,78,81,0,5238,6,133,65,83,67,73,73,
58,65,67,75,0,5251,7,133,65,83,67,73,73,58,66,69,76,0,5264,14,
133,65,83,67,73,73,58,83,79,0,5277,15,133,65,83,67,73,73,58,83,
73,0,5289,16,133,65,83,67,73,73,58,68,76,69,0,5301,17,133,65,83,
67,73,73,58,68,67,49,0,5314,18,133,65,83,67,73,73,58,68,67,50,
0,5327,19,133,65,83,67,73,73,58,68,67,51,0,5340,20,133,65,83,67,
73,73,58,68,67,52,0,5353,21,133,65,83,67,73,73,58,78,65,75,0,
5366,22,133,65,83,67,73,73,58,83,89,78,0,5379,23,133,65,83,67,73,
73,58,69,84,66,0,5392,24,133,65,83,67,73,73,58,67,65,78,0,5405,
25,133,65,83,67,73,73,58,69,77,0,5418,26,133,65,83,67,73,73,58,
83,85,66,0,5430,28,133,65,83,67,73,73,58,70,83,0,5443,29,133,65,
83,67,73,73,58,71,83,0,5455,30,133,65,83,67,73,73,58,82,83,0,
5467,31,133,65,83,67,73,73,58,85,83,0,5479,5507,145,99,58,108,111,119,
101,114,99,97,115,101,63,0,1,97,1,122,2049,3010,10,5491,5530,145,99,58,
117,112,112,101,114,99,97,115,101,63,0,1,65,1,90,2049,3010,10,5514,5550,
145,99,58,108,101,116,116,101,114,63,0,1,5507,1,5530,2049,2177,22,10,5537,
5570,145,99,58,100,105,103,105,116,63,0,1,48,1,57,2049,3010,10,5558,5591,
145,99,58,118,105,115,105,98,108,101,63,0,1,32,1,126,2049,3010,10,5577,
5610,145,99,58,118,111,119,101,108,63,0,2049,3735,97,101,105,111,117,65,69,
73,79,85,0,1,5612,4,2049,4060,10,5598,5645,145,99,58,99,111,110,115,111,
110,97,110,116,63,0,2,2049,5550,1793,5655,2049,5610,2049,2513,10,1,5650,1793,5663,
3,2049,2416,10,1,5659,2049,64,10,5629,5685,145,99,58,119,104,105,116,101,115,
112,97,99,101,63,0,1,5035,4,2049,4060,10,5668,5708,145,99,58,45,108,111,
119,101,114,99,97,115,101,63,0,2049,5507,2049,2513,10,5691,5730,145,99,58,45,
117,112,112,101,114,99,97,115,101,63,0,2049,5530,2049,2513,10,5713,5748,145,99,
58,45,100,105,103,105,116,63,0,2049,5570,2049,2513,10,5735,5771,145,99,58,45,
119,104,105,116,101,115,112,97,99,101,63,0,2049,5685,2049,2513,10,5753,5791,145,
99,58,45,118,105,115,105,98,108,101,63,0,2049,5591,2049,2513,10,5776,5809,145,
99,58,45,118,111,119,101,108,63,0,2049,5610,2049,2513,10,5796,5831,145,99,58,
45,99,111,110,115,111,110,97,110,116,63,0,2049,5645,2049,2513,10,5814,5850,145,
99,58,116,111,45,117,112,112,101,114,0,2,2049,5507,25,3,1,32,18,10,
5836,5873,145,99,58,116,111,45,108,111,119,101,114,0,2,2049,5530,25,3,1,
32,17,10,5859,5897,145,99,58,116,111,45,115,116,114,105,110,103,0,2049,3735,
46,0,1,5899,2049,3690,1,37,2049,2165,10,5882,5927,145,99,58,116,111,103,103,
108,101,45,99,97,115,101,0,2,2049,5507,1,5850,1,5873,2049,64,10,5910,5952,
145,99,58,116,111,45,110,117,109,98,101,114,0,2,2049,5570,1793,5961,1,48,
18,10,1,5957,1793,5969,3,1,0,10,1,5965,2049,64,10,5937,5988,145,115,58,
116,111,45,117,112,112,101,114,0,1,5850,2049,4556,10,5974,6007,145,115,58,116,
111,45,108,111,119,101,114,0,1,5873,2049,4556,10,5993,6027,145,115,58,116,114,
105,109,45,108,101,102,116,0,2049,3690,1793,6041,2049,56,1,5685,1,2597,2049,2177,
21,10,1,6031,2049,2282,2049,2993,10,6012,6064,145,115,58,116,114,105,109,45,114,
105,103,104,116,0,2049,3690,2049,3839,2049,6027,2049,3839,10,6048,6083,145,115,58,116,
114,105,109,0,2049,6064,2049,6027,10,6073,6110,133,82,101,119,114,105,116,101,85,
110,100,101,114,115,99,111,114,101,115,0,-1,6088,6118,145,115,117,98,0,1,
95,1793,6125,1,32,10,1,6122,2049,2427,10,6111,6141,145,114,101,119,114,105,116,
101,0,3841,6110,1793,6150,1,6118,2049,4556,10,1,6145,9,10,6130,6164,145,104,97,
110,100,108,101,0,1,3793,8,10,6088,6179,157,115,105,103,105,108,58,39,0,
2049,6141,2049,6164,10,6168,6200,145,115,58,115,112,108,105,116,47,99,104,97,114,
0,2049,2145,2049,3994,772,2049,2145,2049,4661,1,39,2049,2155,10,6184,6232,145,115,58,
115,112,108,105,116,47,115,116,114,105,110,103,0,2049,2145,2049,4463,2049,2981,772,
2049,2145,2049,4661,1,39,2049,2155,10,6214,6261,145,115,58,114,101,112,108,97,99,
101,0,67502597,2049,81,2049,1929,16,1793,6277,2049,6232,4,2049,1929,15,17,10,1,6269,
2049,2155,2049,3899,2049,3940,10,6248,6298,133,83,112,108,105,116,45,79,110,0,0,
6286,6309,145,109,97,116,99,104,63,0,3841,6298,11,10,6299,6326,145,116,101,114,
109,105,110,97,116,101,0,1,0,67502597,2049,2993,16,10,6313,6341,145,115,116,101,
112,0,1,2981,2049,2155,2049,6309,1793,6355,2,2049,107,2049,6326,10,1,6349,9,10,
6248,6373,145,115,58,116,111,107,101,110,105,122,101,0,4097,6298,2049,3761,2049,1929,
1,0,2049,107,1793,6395,2,2049,107,2,1,6341,2049,3958,3,10,1,6385,2049,2155,
2049,1929,67502597,18,2049,2993,67502597,16,10,6359,6418,133,78,101,101,100,108,101,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,6412,6557,133,76,101,110,0,0,6550,
6568,133,84,111,107,101,110,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,6408,6553,133,76,101,110,0,0,6546,6564,133,84,111,
107,101,110,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,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6558,6702,133,
84,80,0,0,6696,6711,146,115,97,118,101,0,2049,3672,3841,6702,1,6568,17,2049,
2890,16,1,6702,2049,2988,10,6703,6734,146,110,101,120,116,0,1793,6740,3841,6557,17,
10,1,6736,2049,2110,10,6726,6754,146,100,111,110,101,63,0,2049,81,2049,2527,10,
6363,6783,146,115,58,116,111,107,101,110,105,122,101,45,111,110,45,115,116,114,
105,110,103,0,1,0,4097,6702,1793,6797,2,1,6422,2049,4648,2049,3852,10,1,6789,
1793,6806,2049,81,4097,6557,10,1,6801,2049,2122,1793,6823,1,6422,2049,6236,2049,6711,2049,
6734,2049,6754,10,1,6812,2049,2250,1,6568,3841,6702,2049,2903,4097,6568,10,6759,6848,146,
102,111,114,45,101,97,99,104,0,4,2049,56,1,13,2049,2100,1793,6864,5,2049,
56,84018692,525572,1542,10,1,6857,2049,2275,771,10,6836,6884,146,115,117,98,115,116,105,
116,117,116,101,0,2049,3517,1,129,18,10,6870,6901,146,101,120,116,114,97,99,
116,0,2049,6884,2049,4648,10,6890,6918,146,116,111,107,101,110,105,122,101,0,2049,
6783,2049,3627,10,6906,6934,146,99,111,109,98,105,110,101,0,2049,6884,2049,3852,2049,
3852,10,6923,6950,146,109,101,114,103,101,0,4,1,6934,2049,6848,772,10,6941,6969,
146,102,105,110,100,45,101,110,100,0,2,2049,81,2049,6884,2049,81,18,67502597,17,
10,6957,6989,146,99,108,101,97,110,0,2049,6969,1,0,4,16,10,6759,7013,146,
115,58,114,101,112,108,97,99,101,45,97,108,108,0,1,3,1793,7028,2049,6901,
2049,6918,2049,6950,2049,6989,2049,3601,10,1,7017,2049,3079,10,6996,7041,146,99,104,97,
114,0,1,32,1793,7050,1,95,2049,3336,10,1,7045,2049,2373,1,114,1793,7063,1,
13,2049,3336,10,1,7058,2049,2373,1,110,1793,7076,1,10,2049,3336,10,1,7071,2049,
2373,1,116,1793,7089,1,9,2049,3336,10,1,7084,2049,2373,1,48,1793,7102,1,0,
2049,3336,10,1,7097,2049,2373,1,94,1793,7115,1,27,2049,3336,10,1,7110,2049,2373,
2049,3336,10,7033,7130,146,116,121,112,101,0,1,99,1793,7138,4,2049,3336,10,1,
7134,2049,2373,1,115,1793,7152,4,1,3336,2049,3870,10,1,7146,2049,2373,1,110,1793,
7168,4,2049,6040,1,3336,2049,3870,10,1,7160,2049,2373,3,10,7122,7184,146,104,97,
110,100,108,101,0,1,92,1793,7193,2049,56,2049,7041,10,1,7188,2049,2373,1,37,
1793,7206,2049,56,2049,7130,10,1,7201,2049,2373,2049,3336,10,6996,7225,146,115,58,102,
111,114,109,97,116,0,1793,7254,2049,3627,1793,7249,2049,3428,1793,7244,2049,56,25,2049,
7184,1,7235,7,10,1,7235,8,3,10,1,7231,2049,2110,10,1,7227,2049,3452,10,
7213,7270,146,115,58,99,111,110,115,116,0,1,3672,2049,2100,2049,2016,10,7259,7287,
133,86,97,108,117,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,7277,7323,146,102,
114,111,109,0,2049,81,2,1793,7341,1793,7334,1,7287,4113,10,1,7330,2049,2110,2049,
2903,10,1,7328,2049,2275,3,10,7315,7353,146,116,111,0,2,2049,81,1793,7369,2049,
56,1,97,18,2049,2890,1,7287,266001,10,1,7358,2049,2275,3,10,7259,7386,146,114,
101,111,114,100,101,114,0,1,7323,2049,2100,2049,7353,10,7375,7402,146,99,117,114,
114,121,0,2049,1874,1793,7412,4,2049,1728,2049,1751,10,1,7406,2049,2100,10,7393,7425,
146,100,111,101,115,0,2049,1587,4,2049,7402,2049,1570,2049,160,16,1,146,2049,1646,
10,7417,7454,146,100,58,102,111,114,45,101,97,99,104,0,1,2,1793,7480,6415,
2049,2090,1793,7472,1793,7467,2052,10,1,7465,2049,2100,10,1,7463,2049,2100,1,7458,7,
10,1,7458,8,3,10,7440,7500,146,100,58,108,111,111,107,117,112,45,120,116,
0,1,0,4,1793,7525,2049,2090,2049,160,2831,1793,7518,4,1,2051,2049,2100,10,1,
7512,1,11,2049,64,10,1,7505,2049,7454,3,10,7485,7543,146,97,58,108,101,110,
103,116,104,0,15,10,7531,7566,146,97,58,99,111,117,110,116,101,100,45,114,
101,115,117,108,116,115,0,8,2049,1874,1793,7579,2,2049,107,1,107,2049,2275,10,
1,7571,2049,2100,10,7545,7601,146,97,58,102,114,111,109,45,115,116,114,105,110,
103,0,2049,1874,1793,7615,2,2049,81,2049,107,1,107,2049,3870,10,1,7605,2049,2100,
10,7584,7634,146,97,58,102,111,114,45,101,97,99,104,0,4,2049,56,1,13,
2049,2100,1793,7650,5,2049,56,84018692,525572,1542,10,1,7643,2049,2275,771,10,7620,7665,146,
97,58,100,117,112,0,2049,1874,1793,7678,2,15,2049,107,1,107,2049,7634,10,1,
7669,2049,2100,10,7656,7693,146,97,58,99,111,112,121,0,1,3,1793,7709,4097,3,
2,2049,7543,2049,107,1,107,2049,7634,10,1,7697,2049,3079,10,7683,7729,146,97,58,
116,111,45,115,116,114,105,110,103,0,1,3,1793,7742,2049,7665,1,0,2049,107,
2049,2890,10,1,7733,2049,3079,2049,3601,10,7714,7761,146,97,58,97,112,112,101,110,
100,0,2049,2090,1,34,2049,2148,17,2049,1874,1793,7786,2049,107,1793,7781,1,107,2049,
7634,10,1,7776,2049,2148,10,1,7772,2049,2100,10,7749,7804,146,97,58,112,114,101,
112,101,110,100,0,4,2049,7761,10,7791,7818,146,97,58,99,104,111,112,0,2049,
7665,1,-1,2049,3060,2,2049,3003,10,7808,7840,146,97,58,102,105,108,116,101,114,
0,1793,7855,67502597,1,21,2049,2100,4,1,107,1,11,2049,64,10,1,7842,2049,7402,
2049,1874,1793,7870,67502597,15,2049,107,2049,7634,10,1,7863,2049,2100,2049,1874,67502597,18,2049,
2903,67502597,16,10,7828,7898,146,97,58,99,111,110,116,97,105,110,115,63,0,1,
0,4,1793,7910,4,5,67502597,11,6,22,10,1,7903,2049,7634,772,10,7883,7938,146,
97,58,99,111,110,116,97,105,110,115,45,115,116,114,105,110,103,63,0,1,
0,4,1793,7951,4,5,67502597,2049,95,6,22,10,1,7943,2049,7634,772,10,7916,7966,
146,97,58,109,97,112,0,1793,7972,8,2049,107,10,1,7968,2049,7402,2049,1874,1793,
7987,67502597,15,2049,107,2049,7634,10,1,7980,2049,2100,10,7957,8005,146,97,58,114,101,
118,101,114,115,101,0,2049,1874,1793,8039,2049,56,1793,8017,17,2049,2903,10,1,8013,
2049,2110,2,2049,107,1793,8033,2,15,2049,107,2049,2903,10,1,8026,2049,2275,3,10,
1,8009,2049,2100,10,7992,8052,146,97,58,116,104,0,17,2049,2890,10,8044,8067,146,
97,58,102,101,116,99,104,0,2049,8052,15,10,8056,8082,146,97,58,115,116,111,
114,101,0,2049,8052,16,10,8071,8098,146,97,58,114,101,100,117,99,101,0,1,
13,2049,2100,2049,7634,10,8086,8117,146,105,100,101,110,116,105,102,121,0,1,-1,
4,1,0,1793,8148,2049,2350,11,1793,8142,67502597,1,-1,11,1793,8138,772,2,10,1,
8135,9,10,1,8129,9,2049,2890,10,1,8124,2049,8098,3,10,8086,8168,146,97,58,
105,110,100,101,120,45,111,102,0,1,3,1793,8181,1,26,2049,7402,2049,7966,2049,
8117,10,1,8172,2049,3079,10,8154,8207,146,97,58,105,110,100,101,120,45,111,102,
45,115,116,114,105,110,103,0,1,3,1793,8220,1,95,2049,7402,2049,7966,2049,8117,
10,1,8211,2049,3079,10,8186,8235,146,97,58,109,97,107,101,0,2049,7566,2,2,
1,3,1793,8246,2049,8005,10,1,8243,2049,3079,4,2049,7693,10,8225,8259,158,123,0,
1,289,2049,158,1,1556,2049,146,1,289,2049,158,10,8254,8277,158,125,0,1,305,
2049,158,1,2100,2049,146,1,1556,2049,146,1,13,2049,152,1,40,2049,152,1,2903,
2049,146,1,305,2049,158,1,8235,2049,146,10,8272,8321,146,98,111,117,110,100,115,
63,0,67502597,2049,7543,67502597,13,10,8310,8335,146,99,111,112,121,0,2049,56,2049,107,
10,8327,8350,146,116,111,45,101,110,100,0,2,2049,7543,17,2049,2890,10,8272,8367,
146,97,58,108,101,102,116,0,2049,8321,1793,8375,771,1,-1,10,1,8371,2049,2653,
2049,1874,67502597,2049,107,1793,8396,1,2890,2049,2100,1,8335,2049,2275,3,10,1,8386,2049,
2100,10,8357,8412,146,97,58,114,105,103,104,116,0,2049,8321,1793,8420,771,1,-1,
10,1,8416,2049,2653,2049,1874,67502597,2049,107,1793,8443,4,2049,8350,67502597,18,4,1,8335,
2049,2275,3,10,1,8431,2049,2100,10,8401,8460,146,97,58,109,105,100,100,108,101,
0,1,2042,2049,2100,4,67502597,2049,8321,1793,8475,771,3,1,-1,10,1,8470,2049,2653,
771,2049,2090,4,18,2049,2890,2049,1874,67502597,2049,107,1793,8510,772,1793,8500,17,2049,2890,
10,1,8496,2049,2100,1,8335,2049,2275,3,10,1,8493,2049,2100,10,8448,8523,133,70,
108,97,103,0,0,8515,8535,146,99,111,109,112,97,114,101,0,67440386,184946434,10,8524,
8548,146,108,101,110,103,116,104,0,659202,10,8538,8558,146,110,101,120,116,0,17043713,
1,1,2577,10,8550,8576,146,110,111,116,45,101,113,117,97,108,0,50529030,2561,0,
10,8563,8588,146,108,111,111,112,0,524549,8558,2049,8535,18157313,8523,8523,16,420610310,1,1,
8588,7,10,8448,8611,146,97,58,101,113,63,0,1048833,-1,8523,2049,8535,151066369,-1,8576,
2049,8548,2049,8588,251724547,8523,10,8602,8636,146,97,58,45,101,113,63,0,2049,8611,2049,
2459,10,8626,8659,146,97,58,98,101,103,105,110,115,45,119,105,116,104,63,0,
1,3,1793,8675,2,2049,7543,1,13,2049,2100,2049,8367,2049,8611,10,1,8663,2049,3079,
10,8641,8696,146,97,58,101,110,100,115,45,119,105,116,104,63,0,1,3,1793,
8712,2,2049,7543,1,13,2049,2100,2049,8412,2049,8611,10,1,8700,2049,3079,10,8680,8733,
146,99,117,114,114,101,110,116,45,108,105,110,101,0,2049,3517,1,1025,18,10,
8717,8755,146,99,111,117,110,116,45,116,111,107,101,110,115,0,1793,8761,1,32,
11,10,1,8757,2049,4427,2049,81,10,8739,8786,146,112,114,111,99,101,115,115,45,
116,111,107,101,110,115,0,1793,8814,1,32,2049,6201,4,1793,8807,2,2049,81,2049,
2543,1,369,1,11,2049,64,10,1,8795,2049,2100,2049,2890,10,1,8788,2049,2275,2049,
369,10,8680,8835,146,115,58,101,118,97,108,117,97,116,101,0,2049,8733,2049,4648,
2049,8733,2,2049,8755,2049,8786,10,8821,8853,133,76,80,0,0,8847,8863,133,73,110,
100,101,120,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8854,8903,146,110,
101,120,116,0,3841,8853,1,8863,17,2049,2988,10,8895,8919,146,112,114,101,112,0,
1,8853,2049,2988,1,0,3841,8853,1,8863,17,16,10,8911,8940,146,100,111,110,101,
0,1,8853,2049,3003,10,8821,8950,146,73,0,3841,8853,1,8863,17,15,10,8945,8962,
146,74,0,3841,8853,1,8863,17,2049,2903,15,10,8957,8976,146,75,0,3841,8853,1,
8863,17,1,2,18,15,10,8971,9003,146,105,110,100,101,120,101,100,45,116,105,
109,101,115,0,2049,8919,4,1793,9019,25,33886721,1,2053,1542,2049,8903,1,9008,7,10,
1,9008,8,3,2049,8940,10,8986,9034,158,104,111,111,107,0,2049,3646,108,105,106,
117,46,46,46,46,0,1,9036,2049,416,2049,1874,2049,2890,2049,107,10,9026,9068,146,
115,101,116,45,104,111,111,107,0,2049,2890,16,10,9056,9082,146,117,110,104,111,
111,107,0,2049,2890,2,2049,2890,4,16,10,9072,9106,146,105,111,58,101,110,117,
109,101,114,97,116,101,0,27,10,9090,9120,146,105,111,58,113,117,101,114,121,
0,28,10,9108,9135,146,105,111,58,105,110,118,111,107,101,0,29,10,9122,9152,
146,105,111,58,115,99,97,110,45,102,111,114,0,1,-1,4,2049,9106,1793,9183,
2049,8950,2049,9120,772,67502597,11,1793,9179,1793,9174,3,2049,8950,10,1,9170,2049,2100,10,
1,9168,9,10,1,9159,2049,9003,3,10,9137,9198,146,99,58,112,117,116,0,1793,
9200,1,0,2049,9135,10,9189,9211,146,110,108,0,1,10,2049,9198,10,9205,9222,146,
115,112,0,1,32,2049,9198,10,9216,9234,146,116,97,98,0,1,9,2049,9198,10,
9227,9248,146,115,58,112,117,116,0,1,9198,2049,3870,10,9239,9262,146,110,58,112,
117,116,0,2049,6040,2049,9248,10,9253,9276,146,114,101,115,101,116,0,2049,1556,25,
771,1,9276,7,10,9267,9298,146,100,117,109,112,45,115,116,97,99,107,0,2049,
1556,25,134284547,9298,134283782,9262,2049,9222,10,9284,9316,146,70,82,69,69,0,2049,3517,1,
1025,18,2049,1874,18,10,0 };
0,0,0,0,0,0,0,0,0,0,0,0,0,6554,6698,133,84,80,0,0,
6692,6707,145,115,97,118,101,0,2049,3761,3841,6698,1,6564,17,2049,2981,16,1,6698,
2049,3077,10,6699,6730,145,110,101,120,116,0,1793,6736,3841,6553,17,10,1,6732,2049,
2165,10,6722,6750,145,100,111,110,101,63,0,2049,81,2049,2581,10,6359,6779,145,115,
58,116,111,107,101,110,105,122,101,45,111,110,45,115,116,114,105,110,103,0,
1,0,4097,6698,1793,6793,2,1,6418,2049,4735,2049,3940,10,1,6785,1793,6802,2049,81,
4097,6553,10,1,6797,2049,2177,1793,6819,1,6418,2049,6232,2049,6707,2049,6730,2049,6750,10,
1,6808,2049,2305,1,6564,3841,6698,2049,2993,4097,6564,10,6755,6844,145,102,111,114,45,
101,97,99,104,0,4,2049,56,1,17,2049,2155,1793,6860,5,2049,56,84018692,525572,1542,
10,1,6853,2049,2330,771,10,6832,6880,145,115,117,98,115,116,105,116,117,116,101,
0,2049,3606,1,129,18,10,6866,6897,145,101,120,116,114,97,99,116,0,2049,6880,
2049,4735,10,6886,6914,145,116,111,107,101,110,105,122,101,0,2049,6779,2049,3716,10,
6902,6930,145,99,111,109,98,105,110,101,0,2049,6880,2049,3940,2049,3940,10,6919,6946,
145,109,101,114,103,101,0,4,1,6930,2049,6844,772,10,6937,6965,145,102,105,110,
100,45,101,110,100,0,2,2049,81,2049,6880,2049,81,18,67502597,17,10,6953,6985,145,
99,108,101,97,110,0,2049,6965,1,0,4,16,10,6755,7009,145,115,58,114,101,
112,108,97,99,101,45,97,108,108,0,1,3,1793,7024,2049,6897,2049,6914,2049,6946,
2049,6985,2049,3690,10,1,7013,2049,3168,10,6992,7039,133,83,116,114,105,110,103,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,7029,7119,145,99,104,101,99,107,45,115,105,103,110,0,
2049,2616,1793,7128,1,45,2049,3425,10,1,7123,9,10,7105,7144,145,110,45,62,100,
105,103,105,116,0,2049,4755,17,15,10,7132,7160,145,99,111,110,118,101,114,116,
0,1793,7174,3841,205,20,4,2049,7144,2049,3425,2,2049,2581,10,1,7162,2049,2305,3,
10,6992,7195,145,110,58,116,111,45,115,116,114,105,110,103,0,1793,7209,1,7039,
2049,3517,2,2049,2946,2049,7160,2049,7119,10,1,7197,2049,3541,1,7039,2049,3839,10,7180,
7226,145,99,104,97,114,0,1,32,1793,7235,1,95,2049,3425,10,1,7230,2049,2427,
1,114,1793,7248,1,13,2049,3425,10,1,7243,2049,2427,1,110,1793,7261,1,10,2049,
3425,10,1,7256,2049,2427,1,116,1793,7274,1,9,2049,3425,10,1,7269,2049,2427,1,
48,1793,7287,1,0,2049,3425,10,1,7282,2049,2427,1,94,1793,7300,1,27,2049,3425,
10,1,7295,2049,2427,2049,3425,10,7218,7315,145,116,121,112,101,0,1,99,1793,7323,
4,2049,3425,10,1,7319,2049,2427,1,115,1793,7337,4,1,3425,2049,3958,10,1,7331,
2049,2427,1,110,1793,7353,4,2049,7195,1,3425,2049,3958,10,1,7345,2049,2427,3,10,
7307,7369,145,104,97,110,100,108,101,0,1,92,1793,7378,2049,56,2049,7226,10,1,
7373,2049,2427,1,37,1793,7391,2049,56,2049,7315,10,1,7386,2049,2427,2049,3425,10,7180,
7410,145,115,58,102,111,114,109,97,116,0,1793,7439,2049,3716,1793,7434,2049,3517,1793,
7429,2049,56,25,2049,7369,1,7420,7,10,1,7420,8,3,10,1,7416,2049,2165,10,
1,7412,2049,3541,10,7398,7455,145,115,58,99,111,110,115,116,0,1,3761,2049,2155,
2049,2071,10,7444,7472,133,86,97,108,117,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,7462,7508,145,102,114,111,109,0,2049,81,2,1793,7526,1793,7519,1,7472,4113,10,
1,7515,2049,2165,2049,2993,10,1,7513,2049,2330,3,10,7500,7538,145,116,111,0,2,
2049,81,1793,7554,2049,56,1,97,18,2049,2981,1,7472,266001,10,1,7543,2049,2330,3,
10,7444,7571,145,114,101,111,114,100,101,114,0,1,7508,2049,2155,2049,7538,10,7560,
7587,145,99,117,114,114,121,0,2049,1929,1793,7597,4,2049,1786,2049,1809,10,1,7591,
2049,2155,10,7578,7610,145,100,111,101,115,0,2049,1587,4,2049,7587,2049,1570,2049,159,
16,1,145,2049,1646,10,7602,7639,145,100,58,102,111,114,45,101,97,99,104,0,
1,2,1793,7665,6415,2049,2145,1793,7657,1793,7652,2052,10,1,7650,2049,2155,10,1,7648,
2049,2155,1,7643,7,10,1,7643,8,3,10,7625,7685,145,100,58,108,111,111,107,
117,112,45,120,116,0,1,0,4,1793,7710,2049,2145,2049,159,2831,1793,7703,4,1,
2106,2049,2155,10,1,7697,1,15,2049,64,10,1,7690,2049,7639,3,10,7670,7728,145,
97,58,108,101,110,103,116,104,0,15,10,7716,7751,145,97,58,99,111,117,110,
116,101,100,45,114,101,115,117,108,116,115,0,8,2049,1929,1793,7764,2,2049,107,
1,107,2049,2330,10,1,7756,2049,2155,10,7730,7786,145,97,58,102,114,111,109,45,
115,116,114,105,110,103,0,2049,1929,1793,7800,2,2049,81,2049,107,1,107,2049,3958,
10,1,7790,2049,2155,10,7769,7819,145,97,58,102,111,114,45,101,97,99,104,0,
4,2049,56,1,17,2049,2155,1793,7835,5,2049,56,84018692,525572,1542,10,1,7828,2049,2330,
771,10,7805,7850,145,97,58,100,117,112,0,2049,1929,1793,7863,2,15,2049,107,1,
107,2049,7819,10,1,7854,2049,2155,10,7841,7878,145,97,58,99,111,112,121,0,1,
3,1793,7894,4097,3,2,2049,7728,2049,107,1,107,2049,7819,10,1,7882,2049,3168,10,
7868,7914,145,97,58,116,111,45,115,116,114,105,110,103,0,1,3,1793,7927,2049,
7850,1,0,2049,107,2049,2981,10,1,7918,2049,3168,2049,3690,10,7899,7946,145,97,58,
97,112,112,101,110,100,0,2049,2145,1,35,2049,2203,17,2049,1929,1793,7971,2049,107,
1793,7966,1,107,2049,7819,10,1,7961,2049,2203,10,1,7957,2049,2155,10,7934,7989,145,
97,58,112,114,101,112,101,110,100,0,4,2049,7946,10,7976,8003,145,97,58,99,
104,111,112,0,2049,7850,1,-1,2049,3149,2,2049,3092,10,7993,8025,145,97,58,102,
105,108,116,101,114,0,1793,8040,67502597,1,25,2049,2155,4,1,107,1,15,2049,64,
10,1,8027,2049,7587,2049,1929,1793,8055,67502597,15,2049,107,2049,7819,10,1,8048,2049,2155,
2049,1929,67502597,18,2049,2993,67502597,16,10,8013,8083,145,97,58,99,111,110,116,97,105,
110,115,63,0,1,0,4,1793,8095,4,5,67502597,11,6,22,10,1,8088,2049,7819,
772,10,8068,8123,145,97,58,99,111,110,116,97,105,110,115,47,115,116,114,105,
110,103,63,0,1,0,4,1793,8136,4,5,67502597,2049,95,6,22,10,1,8128,2049,
7819,772,10,8101,8151,145,97,58,109,97,112,0,1793,8157,8,2049,107,10,1,8153,
2049,7587,2049,1929,1793,8172,67502597,15,2049,107,2049,7819,10,1,8165,2049,2155,10,8142,8190,
145,97,58,114,101,118,101,114,115,101,0,2049,1929,1793,8224,2049,56,1793,8202,17,
2049,2993,10,1,8198,2049,2165,2,2049,107,1793,8218,2,15,2049,107,2049,2993,10,1,
8211,2049,2330,3,10,1,8194,2049,2155,10,8177,8237,145,97,58,116,104,0,17,2049,
2981,10,8229,8252,145,97,58,102,101,116,99,104,0,2049,8237,15,10,8241,8267,145,
97,58,115,116,111,114,101,0,2049,8237,16,10,8256,8283,145,97,58,114,101,100,
117,99,101,0,1,17,2049,2155,2049,7819,10,8271,8302,145,105,100,101,110,116,105,
102,121,0,1,-1,4,1,0,1793,8333,2049,2404,11,1793,8327,67502597,1,-1,11,1793,
8323,772,2,10,1,8320,9,10,1,8314,9,2049,2981,10,1,8309,2049,8283,3,10,
8271,8350,145,97,58,105,110,100,101,120,0,1,3,1793,8363,1,27,2049,7587,2049,
8151,2049,8302,10,1,8354,2049,3168,10,8339,8386,145,97,58,105,110,100,101,120,47,
115,116,114,105,110,103,0,1,3,1793,8399,1,95,2049,7587,2049,8151,2049,8302,10,
1,8390,2049,3168,10,8368,8414,145,97,58,109,97,107,101,0,2049,7751,2,2,1,
3,1793,8425,2049,8190,10,1,8422,2049,3168,4,2049,7878,10,8404,8438,157,123,0,1,
301,2049,157,1,1556,2049,145,1,301,2049,157,10,8433,8456,157,125,0,1,317,2049,
157,1,2155,2049,145,1,1556,2049,145,1,17,2049,151,1,41,2049,151,1,2993,2049,
145,1,317,2049,157,1,8414,2049,145,10,8451,8500,145,98,111,117,110,100,115,63,
0,67502597,2049,7728,67502597,13,10,8489,8514,145,99,111,112,121,0,2049,56,2049,107,10,
8506,8529,145,116,111,45,101,110,100,0,2,2049,7728,17,2049,2981,10,8451,8546,145,
97,58,108,101,102,116,0,2049,8500,1793,8554,771,1,-1,10,1,8550,2049,2707,2049,
1929,67502597,2049,107,1793,8575,1,2981,2049,2155,1,8514,2049,2330,3,10,1,8565,2049,2155,
10,8536,8591,145,97,58,114,105,103,104,116,0,2049,8500,1793,8599,771,1,-1,10,
1,8595,2049,2707,2049,1929,67502597,2049,107,1793,8622,4,2049,8529,67502597,18,4,1,8514,2049,
2330,3,10,1,8610,2049,2155,10,8580,8639,145,97,58,109,105,100,100,108,101,0,
1,2097,2049,2155,4,67502597,2049,8500,1793,8654,771,3,1,-1,10,1,8649,2049,2707,771,
2049,2145,4,18,2049,2981,2049,1929,67502597,2049,107,1793,8689,772,1793,8679,17,2049,2981,10,
1,8675,2049,2155,1,8514,2049,2330,3,10,1,8672,2049,2155,10,8627,8702,133,70,108,
97,103,0,0,8694,8714,145,99,111,109,112,97,114,101,0,67440386,184946434,10,8703,8727,
145,108,101,110,103,116,104,0,659202,10,8717,8737,145,110,101,120,116,0,17043713,1,
1,2577,10,8729,8755,145,110,111,116,45,101,113,117,97,108,0,50529030,2561,0,10,
8742,8767,145,108,111,111,112,0,524549,8737,2049,8714,18157313,8702,8702,16,420610310,1,1,8767,
7,10,8627,8790,145,97,58,101,113,63,0,1048833,-1,8702,2049,8714,151066369,-1,8755,2049,
8727,2049,8767,251724547,8702,10,8781,8815,145,97,58,45,101,113,63,0,2049,8790,2049,2513,
10,8805,8838,145,97,58,98,101,103,105,110,115,45,119,105,116,104,63,0,1,
3,1793,8854,2,2049,7728,1,17,2049,2155,2049,8546,2049,8790,10,1,8842,2049,3168,10,
8820,8875,145,97,58,101,110,100,115,45,119,105,116,104,63,0,1,3,1793,8891,
2,2049,7728,1,17,2049,2155,2049,8591,2049,8790,10,1,8879,2049,3168,10,8859,8912,145,
99,117,114,114,101,110,116,45,108,105,110,101,0,2049,3606,1,1025,18,10,8896,
8934,145,99,111,117,110,116,45,116,111,107,101,110,115,0,1793,8940,1,32,11,
10,1,8936,2049,4514,2049,81,10,8918,8965,145,112,114,111,99,101,115,115,45,116,
111,107,101,110,115,0,1793,8993,1,32,2049,6200,4,1793,8986,2,2049,81,2049,2597,
1,379,1,15,2049,64,10,1,8974,2049,2155,2049,2981,10,1,8967,2049,2330,2049,379,
10,8859,9014,145,115,58,101,118,97,108,117,97,116,101,0,2049,8912,2049,4735,2049,
8912,2,2049,8934,2049,8965,10,9000,9032,133,76,80,0,0,9026,9042,133,73,110,100,
101,120,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9033,9082,145,110,101,
120,116,0,3841,9032,1,9042,17,2049,3077,10,9074,9098,145,112,114,101,112,0,1,
9032,2049,3077,1,0,3841,9032,1,9042,17,16,10,9090,9119,145,100,111,110,101,0,
1,9032,2049,3092,10,9000,9129,145,73,0,3841,9032,1,9042,17,15,10,9124,9141,145,
74,0,3841,9032,1,9042,17,2049,2993,15,10,9136,9155,145,75,0,3841,9032,1,9042,
17,1,2,18,15,10,9150,9182,145,105,110,100,101,120,101,100,45,116,105,109,
101,115,0,2049,9098,4,1793,9198,25,33886721,1,2053,1542,2049,9082,1,9187,7,10,1,
9187,8,3,2049,9119,10,9165,9216,145,100,101,99,105,109,97,108,0,1,10,4097,
205,10,9205,9231,145,98,105,110,97,114,121,0,1,2,4097,205,10,9221,9245,145,
111,99,116,97,108,0,1,8,4097,205,10,9236,9257,145,104,101,120,0,1,16,
4097,205,10,9250,9278,145,105,111,58,101,110,117,109,101,114,97,116,101,0,27,
10,9262,9292,145,105,111,58,113,117,101,114,121,0,28,10,9280,9307,145,105,111,
58,105,110,118,111,107,101,0,29,10,9294,9324,145,105,111,58,115,99,97,110,
45,102,111,114,0,1,-1,4,2049,9278,1793,9355,2049,9129,2049,9292,772,67502597,11,1793,
9351,1793,9346,3,2049,9129,10,1,9342,2049,2155,10,1,9340,9,10,1,9331,2049,9182,
3,10,9309,9370,145,99,58,112,117,116,0,1793,9372,1,0,2049,9307,10,9361,9383,
145,110,108,0,1,10,2049,9370,10,9377,9394,145,115,112,0,1,32,2049,9370,10,
9388,9406,145,116,97,98,0,1,9,2049,9370,10,9399,9420,145,115,58,112,117,116,
0,1,9370,2049,3958,10,9411,9434,145,110,58,112,117,116,0,2049,7195,2049,9420,10,
9425,9448,145,114,101,115,101,116,0,2049,1556,25,771,1,9448,7,10,9439,9470,145,
100,117,109,112,45,115,116,97,99,107,0,2049,1556,25,134284547,9470,134283782,9434,2049,9394,
10,9456,9488,145,70,82,69,69,0,2049,3606,1,1025,18,2049,1929,18,10,9480,9505,
145,101,111,108,63,0,1793,9511,1,13,11,10,1,9507,1793,9519,1,10,11,10,
1,9515,1793,9527,1,32,11,10,1,9523,2049,2214,22,22,10,9497,9544,145,118,97,
108,105,100,63,0,2,2049,81,2049,2597,10,9534,9557,145,98,115,63,0,2,1793,
9564,1,8,11,10,1,9560,1793,9572,1,127,11,10,1,9568,2049,2177,22,10,9550,
9590,145,99,104,101,99,107,45,98,115,0,2049,9557,1793,9600,2049,3449,2049,3449,771,
10,1,9594,9,10,9480,9613,145,99,58,103,101,116,0,1793,9615,1,1,2049,9324,
2049,9307,10,9604,9631,145,115,58,103,101,116,0,1793,9659,1,7,15,2049,3517,1793,
9650,2049,9613,2,2049,3425,2049,9590,2049,9505,10,1,9640,2049,2305,2049,3391,2049,3812,10,
1,9633,2049,3541,10,9622,9674,145,108,105,115,116,101,110,0,2049,9631,2049,9544,1,
379,1,15,2049,64,1,9674,7,10,0 };

View file

@ -1,137 +1,53 @@
/* RETRO -------------------------------------------------------------
A personal, minimalistic forth
Copyright (c) 2016 - 2019 Charles Childers
/* RETRO is a clean, elegant, and pragmatic dialect of Forth. It provides
a simple alternative for those willing to make a break from legacy
systems.
This is the `repl`, a basic interactive interface for RETRO. It is
intended to be simple and very minimalistic, providing the minimal
I/O and additions needed to support a basic RETRO system. For a much
larger system, see `rre`.
The language draws influences from many sources including traditional
Forth systems, cmForth, colorForth, Factor, and Parable. It was
designed to be easy to grasp and adapt to specific uses.
I'll include commentary throughout the source, so read on.
---------------------------------------------------------------------*/
The basic language is very portable and runs on a tiny virtual machine.
This file contains a minimal implementation of the virtual machine.
Copyright (c) 2008 - 2021, Charles Childers
Copyright (c) 2009 - 2010, Luke Parrish
Copyright (c) 2010, Marc Simpson
Copyright (c) 2010, Jay Skeer
Copyright (c) 2011, Kenneth Keating
*/
#define CELL int
#define CELL_MIN -2147483647
#define CELL_MAX 2147483646
#define IMAGE_SIZE 524288 /* Amount of RAM. */
#define ADDRESSES 128 /* Max address stack depth */
#define STACK_DEPTH 32 /* Max data stack depth */
CELL sp, rp, ip; /* Stack and instruction pointers */
CELL data[STACK_DEPTH]; /* The data stack */
CELL address[ADDRESSES]; /* The address stack */
CELL memory[IMAGE_SIZE + 1]; /* Image Memory */
#define TOS data[sp] /* Top item on stack */
#define NOS data[sp-1] /* Second item on stack */
#define TORS address[rp] /* Top item on address stack */
typedef void (*Handler)(void);
#include "image.c"
int getchar(void);
int putchar(int c);
int r_strlen(char *str) {
const char *s;
for (s = str; *s; ++s);
return(s - str);
}
int r_strcmp(const char *s1, const char *s2) {
while (*s1 == *s2++)
if (*s1++ == '\0')
return (0);
return (*(const unsigned char *)s1 - *(const unsigned char *)(s2 - 1));
}
/*---------------------------------------------------------------------
First, a few constants relating to the image format and memory
layout. If you modify the kernel (Rx.md), these will need to be
altered to match your memory layout.
---------------------------------------------------------------------*/
#define TIB memory[7]
#define D_OFFSET_LINK 0
#define D_OFFSET_XT 1
#define D_OFFSET_CLASS 2
#define D_OFFSET_NAME 3
/*---------------------------------------------------------------------
Next we get into some things that relate to the Nga virtual machine
that RETRO runs on.
---------------------------------------------------------------------*/
#define CELL long /* Cell size (32 bit, signed integer */
#define IMAGE_SIZE 524288 * 8 /* Amount of RAM. 4MiB by default. */
#define ADDRESSES 1024 /* Depth of address stack */
#define STACK_DEPTH 128 /* Depth of data stack */
CELL sp, rp, ip; /* Data, address, instruction pointers */
CELL data[STACK_DEPTH]; /* The data stack */
CELL address[ADDRESSES]; /* The address stack */
CELL memory[IMAGE_SIZE + 1]; /* The memory for the image */
#define TOS data[sp] /* Shortcut for top item on stack */
#define NOS data[sp-1] /* Shortcut for second item on stack */
#define TORS address[rp] /* Shortcut for top item on address stack */
#define NUM_DEVICES 1
typedef void (*Handler)(void);
Handler IO_deviceHandlers[NUM_DEVICES + 1];
Handler IO_queryHandlers[NUM_DEVICES + 1];
#include "image.c"
/*---------------------------------------------------------------------
Moving forward, a few variables. These are updated to point to the
latest values in the image.
---------------------------------------------------------------------*/
CELL Dictionary;
CELL NotFound;
CELL interpret;
/*---------------------------------------------------------------------
Function prototypes.
---------------------------------------------------------------------*/
CELL stack_pop();
void stack_push(CELL value);
int string_inject(char *str, int buffer);
char *string_extract(int at);
int d_link(CELL dt);
int d_xt(CELL dt);
int d_class(CELL dt);
int d_name(CELL dt);
int d_lookup(CELL Dictionary, char *name);
CELL d_xt_for(char *Name, CELL Dictionary);
void update_rx();
void execute(int cell);
void evaluate(char *s);
int not_eol(int ch);
void read_token(char *token_buffer, int echo);
CELL ngaLoadImage(char *imageFile);
void ngaPrepare();
void ngaProcessOpcode(CELL opcode);
void ngaProcessPackedOpcodes(CELL opcode);
int ngaValidatePackedOpcodes(CELL opcode);
/*---------------------------------------------------------------------
Here's an output helper. I define a wrapper over `write` to avoid
using `printf()`.
---------------------------------------------------------------------*/
void retro_puts(char *s) {
while (*s) putchar(*s++);
}
/*---------------------------------------------------------------------
Now to the fun stuff: interfacing with the virtual machine. There are
a things I like to have here:
- push a value to the stack
- pop a value off the stack
- extract a string from the image
- inject a string into the image.
- lookup dictionary headers and access dictionary fields
---------------------------------------------------------------------*/
/*---------------------------------------------------------------------
Stack push/pop is easy. I could avoid these, but it aids in keeping
the code readable, so it's worth the slight overhead.
---------------------------------------------------------------------*/
void execute(CELL cell);
void prepare_vm();
void process_opcode_bundle(CELL opcode);
CELL stack_pop() {
sp--;
@ -143,351 +59,91 @@ void stack_push(CELL value) {
data[sp] = value;
}
/*---------------------------------------------------------------------
Strings are next. RETRO uses C-style NULL terminated strings. So I
can easily inject or extract a string. Injection iterates over the
string, copying it into the image. This also takes care to ensure
that the NULL terminator is added.
---------------------------------------------------------------------*/
int string_inject(char *str, int buffer) {
int i = 0;
while (*str) {
memory[buffer + i] = (CELL)*str++;
memory[buffer + i + 1] = 0;
i++;
}
return buffer;
}
/*---------------------------------------------------------------------
Extracting a string is similar, but I have to iterate over the VM
memory instead of a C string and copy the charaters into a buffer.
This uses a static buffer (`string_data`) as I prefer to avoid using
`malloc()`.
---------------------------------------------------------------------*/
char string_data[1025];
char *string_extract(int at) {
CELL starting = at;
CELL i = 0;
while(memory[starting] && i < 1024)
string_data[i++] = (char)memory[starting++];
string_data[i] = 0;
return (char *)string_data;
}
/*---------------------------------------------------------------------
Continuing along, I now define functions to access the dictionary.
RETRO's dictionary is a linked list. Each entry is setup like:
0000 Link to previous entry (NULL if this is the root entry)
0001 Pointer to definition start
0002 Pointer to class handler
0003 Start of a NULL terminated string with the word name
First, functions to access each field. The offsets were defineed at
the start of the file.
---------------------------------------------------------------------*/
int d_link(CELL dt) {
return dt + D_OFFSET_LINK;
}
int d_xt(CELL dt) {
return dt + D_OFFSET_XT;
}
int d_class(CELL dt) {
return dt + D_OFFSET_CLASS;
}
int d_name(CELL dt) {
return dt + D_OFFSET_NAME;
}
/*---------------------------------------------------------------------
Next, a more complext word. This will walk through the entries to
find one with a name that matches the specified name. This is *slow*,
but works ok unless you have a really large dictionary. (I've not
run into issues with this in practice).
---------------------------------------------------------------------*/
int d_lookup(CELL Dictionary, char *name) {
CELL dt = 0;
CELL i = Dictionary;
char *dname;
while (memory[i] != 0 && i != 0) {
dname = string_extract(d_name(i));
if (r_strcmp(dname, name) == 0) {
dt = i;
i = 0;
} else {
i = memory[i];
}
}
return dt;
}
/*---------------------------------------------------------------------
My last dictionary related word returns the `xt` pointer for a word.
This is used to help keep various important bits up to date.
---------------------------------------------------------------------*/
CELL d_xt_for(char *Name, CELL Dictionary) {
return memory[d_xt(d_lookup(Dictionary, Name))];
}
/*---------------------------------------------------------------------
This interface tracks a few words and variables in the image. These
are:
Dictionary - the latest dictionary header
NotFound - called when a word is not found
interpret - the heart of the interpreter/compiler
I have to call this periodically, as the Dictionary will change as
new words are defined, and the user might write a new error handler
or interpreter.
---------------------------------------------------------------------*/
void update_rx() {
Dictionary = memory[2];
NotFound = d_xt_for("err:notfound", Dictionary);
interpret = d_xt_for("interpret", Dictionary);
}
/*---------------------------------------------------------------------
This is an implementation of the generic output device. It's set to
write output to the standard display.
---------------------------------------------------------------------*/
void generic_output() {
putchar(stack_pop());
}
void generic_output_query() {
stack_push(0);
stack_push(0);
}
/*---------------------------------------------------------------------
With these out of the way, I implement `execute`, which takes an
address and runs the code at it. This has a couple of interesting
bits.
Nga uses packed instruction bundles, with up to four instructions per
bundle. Since RETRO requires an additional instruction to handle
displaying a character, I define the handler for that here.
This will also exit if the address stack depth is zero (meaning that
the word being run, and it's dependencies) are finished.
---------------------------------------------------------------------*/
void execute(int cell) {
void execute(CELL cell) {
CELL opcode;
rp = 1;
ip = cell;
while (ip < IMAGE_SIZE) {
if (ip == NotFound) {
retro_puts(string_extract(TIB));
retro_puts(" ?\n");
}
opcode = memory[ip];
if (ngaValidatePackedOpcodes(opcode) != 0) {
ngaProcessPackedOpcodes(opcode);
} else {
retro_puts("Invalid instruction!\n");
retro_puts("System halted.\n");
while(1);
}
process_opcode_bundle(opcode);
ip++;
if (rp == 0)
ip = IMAGE_SIZE;
}
}
/*---------------------------------------------------------------------
RETRO's `interpret` word expects a token on the stack. This next
function copies a token to the `TIB` (text input buffer) and then
calls `interpret` to process it.
---------------------------------------------------------------------*/
void evaluate(char *s) {
if (r_strlen(s) == 0) return;
update_rx();
string_inject(s, TIB);
stack_push(TIB);
execute(interpret);
}
/*---------------------------------------------------------------------
`read_token` reads a token from the specified file. It will stop on
a whitespace or newline. It also tries to handle backspaces, though
the success of this depends on how your terminal is configured.
---------------------------------------------------------------------*/
int not_eol(int ch) {
return (ch != (char)10) && (ch != (char)13) && (ch != (char)32) && (ch != 0);
}
void read_token(char *token_buffer, int echo) {
int ch = getchar();
if (echo != 0)
putchar(ch);
int count = 0;
while (not_eol(ch))
{
if ((ch == 8 || ch == 127) && count > 0) {
count--;
if (echo != 0) {
putchar(8);
putchar(32);
putchar(8);
}
} else {
token_buffer[count++] = ch;
}
ch = getchar();
if (echo != 0)
putchar(ch);
}
token_buffer[count] = '\0';
}
/*---------------------------------------------------------------------
The `main()` routine. This sets up the Nga VM, loads the image, and
enters a loop.
The loop:
- reads input
- otherwise, pass to `evaluate()` to run
---------------------------------------------------------------------*/
int main(int argc, char **argv) {
char input[1024];
IO_deviceHandlers[0] = generic_output;
IO_queryHandlers[0] = generic_output_query;
ngaPrepare();
prepare_vm();
for (CELL i = 0; i < ngaImageCells; i++)
memory[i] = ngaImage[i];
update_rx();
retro_puts("RETRO Listener (c) 2016-2019, Charles Childers\n\n");
while(1) {
Dictionary = memory[2];
read_token(input, 0);
evaluate(input);
}
execute(0);
return 0;
}
/* Nga ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Copyright (c) 2008 - 2019, Charles Childers
Copyright (c) 2009 - 2010, Luke Parrish
Copyright (c) 2010, Marc Simpson
Copyright (c) 2010, Jay Skeer
Copyright (c) 2011, Kenneth Keating
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
enum vm_opcode {
VM_NOP, VM_LIT, VM_DUP, VM_DROP, VM_SWAP, VM_PUSH, VM_POP,
VM_JUMP, VM_CALL, VM_CCALL, VM_RETURN, VM_EQ, VM_NEQ, VM_LT,
VM_GT, VM_FETCH, VM_STORE, VM_ADD, VM_SUB, VM_MUL, VM_DIVMOD,
VM_AND, VM_OR, VM_XOR, VM_SHIFT, VM_ZRET, VM_HALT, VM_IE,
VM_IQ, VM_II
};
#define NUM_OPS VM_II + 1
#ifndef NUM_DEVICES
#define NUM_DEVICES 0
#endif
CELL ngaLoadImage(char *imageFile) {
CELL i;
for (i = 0; i < ngaImageCells; i++)
memory[i] = ngaImage[i];
return i;
}
void ngaPrepare() {
void prepare_vm() {
ip = sp = rp = 0;
for (ip = 0; ip < IMAGE_SIZE; ip++)
memory[ip] = VM_NOP;
memory[ip] = 0; /* NO - nop instruction */
for (ip = 0; ip < STACK_DEPTH; ip++)
data[ip] = 0;
for (ip = 0; ip < ADDRESSES; ip++)
address[ip] = 0;
}
void inst_nop() {
void inst_no() {
}
void inst_lit() {
sp++;
void inst_li() {
ip++;
TOS = memory[ip];
stack_push(memory[ip]);
}
void inst_dup() {
sp++;
data[sp] = NOS;
void inst_du() {
stack_push(TOS);
}
void inst_drop() {
void inst_dr() {
data[sp] = 0;
if (--sp < 0)
ip = IMAGE_SIZE;
}
void inst_swap() {
void inst_sw() {
CELL a;
a = TOS;
TOS = NOS;
NOS = a;
}
void inst_push() {
void inst_pu() {
rp++;
TORS = TOS;
inst_drop();
inst_dr();
}
void inst_pop() {
sp++;
TOS = TORS;
void inst_po() {
stack_push(TORS);
rp--;
}
void inst_jump() {
void inst_ju() {
ip = TOS - 1;
inst_drop();
inst_dr();
}
void inst_call() {
void inst_ca() {
rp++;
TORS = ip;
ip = TOS - 1;
inst_drop();
inst_dr();
}
void inst_ccall() {
void inst_cc() {
CELL a, b;
a = TOS; inst_drop(); /* False */
b = TOS; inst_drop(); /* Flag */
a = TOS; inst_dr(); /* Target */
b = TOS; inst_dr(); /* Flag */
if (b != 0) {
rp++;
TORS = ip;
@ -495,66 +151,68 @@ void inst_ccall() {
}
}
void inst_return() {
void inst_re() {
ip = TORS;
rp--;
}
void inst_eq() {
NOS = (NOS == TOS) ? -1 : 0;
inst_drop();
inst_dr();
}
void inst_neq() {
void inst_ne() {
NOS = (NOS != TOS) ? -1 : 0;
inst_drop();
inst_dr();
}
void inst_lt() {
NOS = (NOS < TOS) ? -1 : 0;
inst_drop();
inst_dr();
}
void inst_gt() {
NOS = (NOS > TOS) ? -1 : 0;
inst_drop();
inst_dr();
}
void inst_fetch() {
void inst_fe() {
switch (TOS) {
case -1: TOS = sp - 1; break;
case -2: TOS = rp; break;
case -3: TOS = IMAGE_SIZE; break;
case -4: TOS = CELL_MIN; break;
case -5: TOS = CELL_MAX; break;
default: TOS = memory[TOS]; break;
}
}
void inst_store() {
void inst_st() {
if (TOS <= IMAGE_SIZE && TOS >= 0) {
memory[TOS] = NOS;
inst_drop();
inst_drop();
inst_dr();
inst_dr();
} else {
ip = IMAGE_SIZE;
}
}
void inst_add() {
void inst_ad() {
NOS += TOS;
inst_drop();
inst_dr();
}
void inst_sub() {
void inst_su() {
NOS -= TOS;
inst_drop();
inst_dr();
}
void inst_mul() {
void inst_mu() {
NOS *= TOS;
inst_drop();
inst_dr();
}
void inst_divmod() {
void inst_di() {
CELL a, b;
a = TOS;
b = NOS;
@ -562,97 +220,86 @@ void inst_divmod() {
NOS = b % a;
}
void inst_and() {
void inst_an() {
NOS = TOS & NOS;
inst_drop();
inst_dr();
}
void inst_or() {
NOS = TOS | NOS;
inst_drop();
inst_dr();
}
void inst_xor() {
void inst_xo() {
NOS = TOS ^ NOS;
inst_drop();
inst_dr();
}
void inst_shift() {
void inst_sh() {
CELL y = TOS;
CELL x = NOS;
if (TOS < 0)
NOS = NOS << (TOS * -1);
NOS = NOS << (0 - TOS);
else {
if (x < 0 && y > 0)
NOS = x >> y | ~(~0U >> y);
else
NOS = x >> y;
}
inst_drop();
inst_dr();
}
void inst_zret() {
void inst_zr() {
if (TOS == 0) {
inst_drop();
inst_dr();
ip = TORS;
rp--;
}
}
void inst_halt() {
void inst_ha() {
ip = IMAGE_SIZE;
}
void inst_ie() {
sp++;
TOS = NUM_DEVICES;
stack_push(2);
}
void inst_iq() {
CELL Device = TOS;
inst_drop();
IO_queryHandlers[Device]();
if (TOS == 0) {
inst_dr();
stack_push(0);
stack_push(0);
} else if (TOS == 1) {
inst_dr();
stack_push(1);
stack_push(1);
}
}
void inst_ii() {
CELL Device = TOS;
inst_drop();
IO_deviceHandlers[Device]();
if (TOS == 0) {
inst_dr();
putchar(stack_pop());
} else if (TOS == 1) {
inst_dr();
stack_push(getchar());
} else {
inst_dr();
}
}
Handler instructions[NUM_OPS] = {
inst_nop, inst_lit, inst_dup, inst_drop, inst_swap, inst_push, inst_pop,
inst_jump, inst_call, inst_ccall, inst_return, inst_eq, inst_neq, inst_lt,
inst_gt, inst_fetch, inst_store, inst_add, inst_sub, inst_mul, inst_divmod,
inst_and, inst_or, inst_xor, inst_shift, inst_zret, inst_halt, inst_ie,
Handler instructions[] = {
inst_no, inst_li, inst_du, inst_dr, inst_sw, inst_pu, inst_po,
inst_ju, inst_ca, inst_cc, inst_re, inst_eq, inst_ne, inst_lt,
inst_gt, inst_fe, inst_st, inst_ad, inst_su, inst_mu, inst_di,
inst_an, inst_or, inst_xo, inst_sh, inst_zr, inst_ha, inst_ie,
inst_iq, inst_ii
};
void ngaProcessOpcode(CELL opcode) {
if (opcode != 0)
instructions[opcode]();
void process_opcode_bundle(CELL opcode) {
instructions[opcode & 0xFF]();
instructions[(opcode >> 8) & 0xFF]();
instructions[(opcode >> 16) & 0xFF]();
instructions[(opcode >> 24) & 0xFF]();
}
int ngaValidatePackedOpcodes(CELL opcode) {
CELL raw = opcode;
CELL current;
int valid = -1;
int i;
for (i = 0; i < 4; i++) {
current = raw & 0xFF;
if (!(current >= 0 && current <= 29))
valid = 0;
raw = raw >> 8;
}
return valid;
}
void ngaProcessPackedOpcodes(CELL opcode) {
CELL raw = opcode;
int i;
for (i = 0; i < 4; i++) {
ngaProcessOpcode(raw & 0xFF);
raw = raw >> 8;
}
}