in which array: is shortend to a:

FossilOrigin-Name: 8ef48cdc551a339b816fe6123e164ced7367a1b96c081a1920cdfd3c942f1a65
This commit is contained in:
crc 2019-04-24 14:02:15 +00:00
parent fbf7981f82
commit 3baec011f8
32 changed files with 1603 additions and 1602 deletions

View file

@ -26,13 +26,13 @@ June 2019.
- add `(`
- add `)`
- `c:put` primitive is a hookable word
- `set:` is now `array:`
- `set:` is now `a:`
- add `s:begins-with?`
- add `s:ends-with?`
- remove `d:words`
- remove `d:words-with`
- add `array:eq?`
- add `array:-eq?`
- add `a:eq?`
- add `a:-eq?`
## I/O and Extensions

View file

@ -620,7 +620,7 @@ The common namespaces are:
| Prefix | Contains |
| ------- | ------------------------------------------------------ |
| array: | Words operating on simple arrays |
| a: | Words operating on simple arrays |
| ASCII: | ASCII character constants for control characters |
| buffer: | Words for operating on a simple linear LIFO buffer |
| c: | Words for operating on ASCII character data |
@ -1111,7 +1111,7 @@ arrays.
## Namespace
The words operating on arrays are kept in an `array:` namespace.
The words operating on arrays are kept in an `a:` namespace.
## Creating Arrays
@ -1125,45 +1125,45 @@ The easiest way to create an array is to wrap the values in a
```
You can also make an array from a quotation which returns
values and the number of values to store in the array:
values and the number of values to store in the a:
```
[ #1 #2 #3 #3 ] array:counted-results
[ #1 #2 #3 #3 ] array:make
[ #1 #2 #3 #3 ] a:counted-results
[ #1 #2 #3 #3 ] a:make
```
## Accessing Elements
You can access a specific value with `array:nth` and `fetch` or
You can access a specific value with `a:nth` and `fetch` or
`store`:
```
{ #1 #2 #3 #4 } #3 array:nth fetch
{ #1 #2 #3 #4 } #3 a:nth fetch
```
## Find The Length
Use `array:length` to find the size of the array.
Use `a:length` to find the size of the array.
```
{ #1 #2 #3 #4 } array:length
{ #1 #2 #3 #4 } a:length
```
## Duplicate
Use `array:dup` to make a copy of an array:
Use `a:dup` to make a copy of an a:
```
{ #1 #2 #3 #4 } array:dup
{ #1 #2 #3 #4 } a:dup
```
## Filtering
RETRO provides `array:filter` which extracts matching values
RETRO provides `a:filter` which extracts matching values
from an array. This is used like:
```
{ #1 #2 #3 #4 #5 #6 #7 #8 } [ n:even? ] array:filter
{ #1 #2 #3 #4 #5 #6 #7 #8 } [ n:even? ] a:filter
```
The quote will be passed each value in the array and should
@ -1172,35 +1172,35 @@ into a new array.
## Mapping
`array:map` applies a quotation to each item in an array and
`a:map` applies a quotation to each item in an array and
constructs a new array from the returned values.
Example:
```
{ #1 #2 #3 } [ #10 * ] array:map
{ #1 #2 #3 } [ #10 * ] a:map
```
## Reduce
`array:reduce` takes an array, a starting value, and a quote. It
`a:reduce` takes an array, a starting value, and a quote. It
executes the quote once for each item in the array, passing the
item and the value to the quote. The quote should consume both
and return a new value.
```
{ #1 #2 #3 } #0 [ + ] array:reduce
{ #1 #2 #3 } #0 [ + ] a:reduce
```
## Search
RETRO provides `array:contains?` and `array:contains-string?`
RETRO provides `a:contains?` and `a:contains-string?`
to search an array for a value (either a number or string) and
return either TRUE or FALSE.
```
#100 { #1 #2 #3 } array:contains?
'test { 'abc 'def 'test 'ghi } array:contains-string?
#100 { #1 #2 #3 } a:contains?
'test { 'abc 'def 'test 'ghi } a:contains-string?
```
# Working With a Buffer

View file

@ -202,6 +202,51 @@ Begin a quotation.
] D: - A: - F: -
End a quotation.
a:-eq? D: aa-f A: - F: -
Compare all values in the array. Return `FALSE` if all values are equal or `TRUE` otherwise. This assumes the array contains only numeric values.
a:contains-string? D: sa-f A: - F: -
Return `TRUE` if the string value is in the array or`FALSE` otherwise.
a:contains? D: na-f A: - F: -
Return `TRUE` if the value is in the array or `FALSE` otherwise.
a:counted-results D: q-a A: - F: -
Run a quote and construct a new array from the returned values. The quote should return the values and the number of values to put into the array.
a:dup D: a-b A: - F: -
Make a copy of an array. Return the address of the copy.
a:eq? D: aa-f A: - F: -
Compare all values in the array. Return `TRUE` if all values are equal or `FALSE` otherwise. This assumes the array contains only numeric values.
a:filter D: aq-b A: - F: -
For each item in the initial array, run the specified quote. If the quote returns `TRUE`, copy the item into a new array. If `FALSE`, discard it. Returns a pointer to the new array.
a:for-each D: aq- A: - F: -
Execute the quote once for each item in the array.
a:from-string D: s-a A: - F: -
Create a new array with the characters in the source string.
a:length D: a-n A: - F: -
Return the length of a array.
a:make D: q-a A: - F: -
Execute quote. Return a new array containing the values the quote leaves on the stack. This is identical to doing `a:counted-results a:reverse`
a:map D: aq- A: - F: -
Execute quote once for each item in the array. Constructs a new array from the value returned by the quote.
a:nth D: an-b A: - F: -
Return the actual address of the nth item in the array.
a:reduce D: pnq-n A: - F: -
Takes an array, a starting value, and a quote. This will apply the quote to each item in the array; the quote should consume two values and return one.
a:reverse D: a-b A: - F: -
Reverse the order of items in a array. This will return a new array.
again D: - A: - F: -
Close an unconditional loop. Branches back to the prior `repeat`.
@ -211,51 +256,6 @@ Allocate the specified number of cells from the `Heap`.
and D: nm-o A: - F: -
Perform a bitwise AND operation between the two provided values.
array:-eq? D: aa-f A: - F: -
Compare all values in the array. Return `FALSE` if all values are equal or `TRUE` otherwise. This assumes the array contains only numeric values.
array:contains-string? D: sa-f A: - F: -
Return `TRUE` if the string value is in the array or`FALSE` otherwise.
array:contains? D: na-f A: - F: -
Return `TRUE` if the value is in the array or `FALSE` otherwise.
array:counted-results D: q-a A: - F: -
Run a quote and construct a new array from the returned values. The quote should return the values and the number of values to put into the array.
array:dup D: a-b A: - F: -
Make a copy of an array. Return the address of the copy.
array:eq? D: aa-f A: - F: -
Compare all values in the array. Return `TRUE` if all values are equal or `FALSE` otherwise. This assumes the array contains only numeric values.
array:filter D: aq-b A: - F: -
For each item in the initial array, run the specified quote. If the quote returns `TRUE`, copy the item into a new array. If `FALSE`, discard it. Returns a pointer to the new array.
array:for-each D: aq- A: - F: -
Execute the quote once for each item in the array.
array:from-string D: s-a A: - F: -
Create a new array with the characters in the source string.
array:length D: a-n A: - F: -
Return the length of a array.
array:make D: q-a A: - F: -
Execute quote. Return a new array containing the values the quote leaves on the stack. This is identical to doing `array:counted-results array:reverse`
array:map D: aq- A: - F: -
Execute quote once for each item in the array. Constructs a new array from the value returned by the quote.
array:nth D: an-b A: - F: -
Return the actual address of the nth item in the array.
array:reduce D: pnq-n A: - F: -
Takes an array, a starting value, and a quote. This will apply the quote to each item in the array; the quote should consume two values and return one.
array:reverse D: a-b A: - F: -
Reverse the order of items in a array. This will return a new array.
as{ D: -f A: - F: -
Begin an assembly section.
@ -1379,7 +1379,7 @@ xor D: mn-o A: - F: -
Perform a bitwise XOR operation.
{ D: - A: - F: -
Begin an array. This is intended to make creating arrays a bit cleaner than using a quotation and `array:counted-results`.
Begin an array. This is intended to make creating arrays a bit cleaner than using a quotation and `a:counted-results`.
{{ D: - A: - F: -
Begin a lexically scoped area.

View file

@ -66,24 +66,24 @@ TempStrings D: -a A: - F: -
Version D: -a A: - F: -
[ D: - A: - F: -
] D: - A: - F: -
a:-eq? D: aa-f A: - F: -
a:contains-string? D: sa-f A: - F: -
a:contains? D: na-f A: - F: -
a:counted-results D: q-a A: - F: -
a:dup D: a-b A: - F: -
a:eq? D: aa-f A: - F: -
a:filter D: aq-b A: - F: -
a:for-each D: aq- A: - F: -
a:from-string D: s-a A: - F: -
a:length D: a-n A: - F: -
a:make D: q-a A: - F: -
a:map D: aq- A: - F: -
a:nth D: an-b A: - F: -
a:reduce D: pnq-n A: - F: -
a:reverse D: a-b A: - F: -
again D: - A: - F: -
allot D: n- A: - F: -
and D: nm-o A: - F: -
array:-eq? D: aa-f A: - F: -
array:contains-string? D: sa-f A: - F: -
array:contains? D: na-f A: - F: -
array:counted-results D: q-a A: - F: -
array:dup D: a-b A: - F: -
array:eq? D: aa-f A: - F: -
array:filter D: aq-b A: - F: -
array:for-each D: aq- A: - F: -
array:from-string D: s-a A: - F: -
array:length D: a-n A: - F: -
array:make D: q-a A: - F: -
array:map D: aq- A: - F: -
array:nth D: an-b A: - F: -
array:reduce D: pnq-n A: - F: -
array:reverse D: a-b A: - F: -
as{ D: -f A: - F: -
banner D: - A: - F: -
bi D: xqq-? A: - F: -

View file

@ -569,6 +569,126 @@
<p>End a quotation.</p>
<p><b>Class:</b> class:macro | <b>Namespace:</b> global | <b>Interface Layer:</b> all</p>
<hr/>
<h1>a:-eq?</h1>
<div style='margin-left: 1em;'><p><b>Data:</b> aa-f<br>
<b>Addr:</b> -<br>
<b>Float:</b> -</p>
</div>
<p>Compare all values in the array. Return `FALSE` if all values are equal or `TRUE` otherwise. This assumes the array contains only numeric values.</p>
<p><b>Class:</b> class:word | <b>Namespace:</b> a | <b>Interface Layer:</b> all</p>
<hr/>
<h1>a:contains-string?</h1>
<div style='margin-left: 1em;'><p><b>Data:</b> sa-f<br>
<b>Addr:</b> -<br>
<b>Float:</b> -</p>
</div>
<p>Return `TRUE` if the string value is in the array or`FALSE` otherwise.</p>
<p><b>Class:</b> class:word | <b>Namespace:</b> a | <b>Interface Layer:</b> all</p>
<hr/>
<h1>a:contains?</h1>
<div style='margin-left: 1em;'><p><b>Data:</b> na-f<br>
<b>Addr:</b> -<br>
<b>Float:</b> -</p>
</div>
<p>Return `TRUE` if the value is in the array or `FALSE` otherwise.</p>
<p><b>Class:</b> class:word | <b>Namespace:</b> a | <b>Interface Layer:</b> all</p>
<hr/>
<h1>a:counted-results</h1>
<div style='margin-left: 1em;'><p><b>Data:</b> q-a<br>
<b>Addr:</b> -<br>
<b>Float:</b> -</p>
</div>
<p>Run a quote and construct a new array from the returned values. The quote should return the values and the number of values to put into the array.</p>
<p><b>Class:</b> class:word | <b>Namespace:</b> a | <b>Interface Layer:</b> all</p>
<hr/>
<h1>a:dup</h1>
<div style='margin-left: 1em;'><p><b>Data:</b> a-b<br>
<b>Addr:</b> -<br>
<b>Float:</b> -</p>
</div>
<p>Make a copy of an array. Return the address of the copy.</p>
<p><b>Class:</b> class:word | <b>Namespace:</b> a | <b>Interface Layer:</b> all</p>
<hr/>
<h1>a:eq?</h1>
<div style='margin-left: 1em;'><p><b>Data:</b> aa-f<br>
<b>Addr:</b> -<br>
<b>Float:</b> -</p>
</div>
<p>Compare all values in the array. Return `TRUE` if all values are equal or `FALSE` otherwise. This assumes the array contains only numeric values.</p>
<p><b>Class:</b> class:word | <b>Namespace:</b> a | <b>Interface Layer:</b> all</p>
<hr/>
<h1>a:filter</h1>
<div style='margin-left: 1em;'><p><b>Data:</b> aq-b<br>
<b>Addr:</b> -<br>
<b>Float:</b> -</p>
</div>
<p>For each item in the initial array, run the specified quote. If the quote returns `TRUE`, copy the item into a new array. If `FALSE`, discard it. Returns a pointer to the new array.</p>
<p><b>Class:</b> class:word | <b>Namespace:</b> a | <b>Interface Layer:</b> all</p>
<hr/>
<h1>a:for-each</h1>
<div style='margin-left: 1em;'><p><b>Data:</b> aq-<br>
<b>Addr:</b> -<br>
<b>Float:</b> -</p>
</div>
<p>Execute the quote once for each item in the array.</p>
<p><b>Class:</b> class:word | <b>Namespace:</b> a | <b>Interface Layer:</b> all</p>
<hr/>
<h1>a:from-string</h1>
<div style='margin-left: 1em;'><p><b>Data:</b> s-a<br>
<b>Addr:</b> -<br>
<b>Float:</b> -</p>
</div>
<p>Create a new array with the characters in the source string.</p>
<p><b>Class:</b> class:word | <b>Namespace:</b> a | <b>Interface Layer:</b> all</p>
<hr/>
<h1>a:length</h1>
<div style='margin-left: 1em;'><p><b>Data:</b> a-n<br>
<b>Addr:</b> -<br>
<b>Float:</b> -</p>
</div>
<p>Return the length of a array.</p>
<p><b>Class:</b> class:word | <b>Namespace:</b> a | <b>Interface Layer:</b> all</p>
<hr/>
<h1>a:make</h1>
<div style='margin-left: 1em;'><p><b>Data:</b> q-a<br>
<b>Addr:</b> -<br>
<b>Float:</b> -</p>
</div>
<p>Execute quote. Return a new array containing the values the quote leaves on the stack. This is identical to doing `a:counted-results a:reverse`</p>
<p><b>Class:</b> class:word | <b>Namespace:</b> a | <b>Interface Layer:</b> all</p>
<hr/>
<h1>a:map</h1>
<div style='margin-left: 1em;'><p><b>Data:</b> aq-<br>
<b>Addr:</b> -<br>
<b>Float:</b> -</p>
</div>
<p>Execute quote once for each item in the array. Constructs a new array from the value returned by the quote.</p>
<p><b>Class:</b> class:word | <b>Namespace:</b> a | <b>Interface Layer:</b> all</p>
<hr/>
<h1>a:nth</h1>
<div style='margin-left: 1em;'><p><b>Data:</b> an-b<br>
<b>Addr:</b> -<br>
<b>Float:</b> -</p>
</div>
<p>Return the actual address of the nth item in the array.</p>
<p><b>Class:</b> class:word | <b>Namespace:</b> a | <b>Interface Layer:</b> all</p>
<hr/>
<h1>a:reduce</h1>
<div style='margin-left: 1em;'><p><b>Data:</b> pnq-n<br>
<b>Addr:</b> -<br>
<b>Float:</b> -</p>
</div>
<p>Takes an array, a starting value, and a quote. This will apply the quote to each item in the array; the quote should consume two values and return one.</p>
<p><b>Class:</b> class:word | <b>Namespace:</b> a | <b>Interface Layer:</b> all</p>
<hr/>
<h1>a:reverse</h1>
<div style='margin-left: 1em;'><p><b>Data:</b> a-b<br>
<b>Addr:</b> -<br>
<b>Float:</b> -</p>
</div>
<p>Reverse the order of items in a array. This will return a new array.</p>
<p><b>Class:</b> class:word | <b>Namespace:</b> a | <b>Interface Layer:</b> all</p>
<hr/>
<h1>again</h1>
<div style='margin-left: 1em;'><p><b>Data:</b> -<br>
<b>Addr:</b> -<br>
@ -597,126 +717,6 @@
<p>Perform a bitwise AND operation between the two provided values.</p>
<p><b>Class:</b> class:primitive | <b>Namespace:</b> global | <b>Interface Layer:</b> all</p>
<hr/>
<h1>array:-eq?</h1>
<div style='margin-left: 1em;'><p><b>Data:</b> aa-f<br>
<b>Addr:</b> -<br>
<b>Float:</b> -</p>
</div>
<p>Compare all values in the array. Return `FALSE` if all values are equal or `TRUE` otherwise. This assumes the array contains only numeric values.</p>
<p><b>Class:</b> class:word | <b>Namespace:</b> array | <b>Interface Layer:</b> all</p>
<hr/>
<h1>array:contains-string?</h1>
<div style='margin-left: 1em;'><p><b>Data:</b> sa-f<br>
<b>Addr:</b> -<br>
<b>Float:</b> -</p>
</div>
<p>Return `TRUE` if the string value is in the array or`FALSE` otherwise.</p>
<p><b>Class:</b> class:word | <b>Namespace:</b> array | <b>Interface Layer:</b> all</p>
<hr/>
<h1>array:contains?</h1>
<div style='margin-left: 1em;'><p><b>Data:</b> na-f<br>
<b>Addr:</b> -<br>
<b>Float:</b> -</p>
</div>
<p>Return `TRUE` if the value is in the array or `FALSE` otherwise.</p>
<p><b>Class:</b> class:word | <b>Namespace:</b> array | <b>Interface Layer:</b> all</p>
<hr/>
<h1>array:counted-results</h1>
<div style='margin-left: 1em;'><p><b>Data:</b> q-a<br>
<b>Addr:</b> -<br>
<b>Float:</b> -</p>
</div>
<p>Run a quote and construct a new array from the returned values. The quote should return the values and the number of values to put into the array.</p>
<p><b>Class:</b> class:word | <b>Namespace:</b> array | <b>Interface Layer:</b> all</p>
<hr/>
<h1>array:dup</h1>
<div style='margin-left: 1em;'><p><b>Data:</b> a-b<br>
<b>Addr:</b> -<br>
<b>Float:</b> -</p>
</div>
<p>Make a copy of an array. Return the address of the copy.</p>
<p><b>Class:</b> class:word | <b>Namespace:</b> array | <b>Interface Layer:</b> all</p>
<hr/>
<h1>array:eq?</h1>
<div style='margin-left: 1em;'><p><b>Data:</b> aa-f<br>
<b>Addr:</b> -<br>
<b>Float:</b> -</p>
</div>
<p>Compare all values in the array. Return `TRUE` if all values are equal or `FALSE` otherwise. This assumes the array contains only numeric values.</p>
<p><b>Class:</b> class:word | <b>Namespace:</b> array | <b>Interface Layer:</b> all</p>
<hr/>
<h1>array:filter</h1>
<div style='margin-left: 1em;'><p><b>Data:</b> aq-b<br>
<b>Addr:</b> -<br>
<b>Float:</b> -</p>
</div>
<p>For each item in the initial array, run the specified quote. If the quote returns `TRUE`, copy the item into a new array. If `FALSE`, discard it. Returns a pointer to the new array.</p>
<p><b>Class:</b> class:word | <b>Namespace:</b> array | <b>Interface Layer:</b> all</p>
<hr/>
<h1>array:for-each</h1>
<div style='margin-left: 1em;'><p><b>Data:</b> aq-<br>
<b>Addr:</b> -<br>
<b>Float:</b> -</p>
</div>
<p>Execute the quote once for each item in the array.</p>
<p><b>Class:</b> class:word | <b>Namespace:</b> array | <b>Interface Layer:</b> all</p>
<hr/>
<h1>array:from-string</h1>
<div style='margin-left: 1em;'><p><b>Data:</b> s-a<br>
<b>Addr:</b> -<br>
<b>Float:</b> -</p>
</div>
<p>Create a new array with the characters in the source string.</p>
<p><b>Class:</b> class:word | <b>Namespace:</b> array | <b>Interface Layer:</b> all</p>
<hr/>
<h1>array:length</h1>
<div style='margin-left: 1em;'><p><b>Data:</b> a-n<br>
<b>Addr:</b> -<br>
<b>Float:</b> -</p>
</div>
<p>Return the length of a array.</p>
<p><b>Class:</b> class:word | <b>Namespace:</b> array | <b>Interface Layer:</b> all</p>
<hr/>
<h1>array:make</h1>
<div style='margin-left: 1em;'><p><b>Data:</b> q-a<br>
<b>Addr:</b> -<br>
<b>Float:</b> -</p>
</div>
<p>Execute quote. Return a new array containing the values the quote leaves on the stack. This is identical to doing `array:counted-results array:reverse`</p>
<p><b>Class:</b> class:word | <b>Namespace:</b> array | <b>Interface Layer:</b> all</p>
<hr/>
<h1>array:map</h1>
<div style='margin-left: 1em;'><p><b>Data:</b> aq-<br>
<b>Addr:</b> -<br>
<b>Float:</b> -</p>
</div>
<p>Execute quote once for each item in the array. Constructs a new array from the value returned by the quote.</p>
<p><b>Class:</b> class:word | <b>Namespace:</b> array | <b>Interface Layer:</b> all</p>
<hr/>
<h1>array:nth</h1>
<div style='margin-left: 1em;'><p><b>Data:</b> an-b<br>
<b>Addr:</b> -<br>
<b>Float:</b> -</p>
</div>
<p>Return the actual address of the nth item in the array.</p>
<p><b>Class:</b> class:word | <b>Namespace:</b> array | <b>Interface Layer:</b> all</p>
<hr/>
<h1>array:reduce</h1>
<div style='margin-left: 1em;'><p><b>Data:</b> pnq-n<br>
<b>Addr:</b> -<br>
<b>Float:</b> -</p>
</div>
<p>Takes an array, a starting value, and a quote. This will apply the quote to each item in the array; the quote should consume two values and return one.</p>
<p><b>Class:</b> class:word | <b>Namespace:</b> array | <b>Interface Layer:</b> all</p>
<hr/>
<h1>array:reverse</h1>
<div style='margin-left: 1em;'><p><b>Data:</b> a-b<br>
<b>Addr:</b> -<br>
<b>Float:</b> -</p>
</div>
<p>Reverse the order of items in a array. This will return a new array.</p>
<p><b>Class:</b> class:word | <b>Namespace:</b> array | <b>Interface Layer:</b> all</p>
<hr/>
<h1>as{</h1>
<div style='margin-left: 1em;'><p><b>Data:</b> -f<br>
<b>Addr:</b> -<br>
@ -4026,7 +4026,7 @@
<b>Addr:</b> -<br>
<b>Float:</b> -</p>
</div>
<p>Begin an array. This is intended to make creating arrays a bit cleaner than using a quotation and `array:counted-results`.</p>
<p>Begin an array. This is intended to make creating arrays a bit cleaner than using a quotation and `a:counted-results`.</p>
<p><b>Class:</b> class:word | <b>Namespace:</b> global | <b>Interface Layer:</b> all</p>
<hr/>
<h1>{{</h1>

View file

@ -779,6 +779,171 @@ End a quotation.
Class: class:macro | Namespace: global | Interface Layer: all
------------------------------------------------------------------------
a:-eq?
Data: aa-f
Addr: -
Float: -
Compare all values in the array. Return `FALSE` if all values are equal or `TRUE` otherwise. This assumes the array contains only numeric values.
Class: class:word | Namespace: a | Interface Layer: all
------------------------------------------------------------------------
a:contains-string?
Data: sa-f
Addr: -
Float: -
Return `TRUE` if the string value is in the array or`FALSE` otherwise.
Class: class:word | Namespace: a | Interface Layer: all
------------------------------------------------------------------------
a:contains?
Data: na-f
Addr: -
Float: -
Return `TRUE` if the value is in the array or `FALSE` otherwise.
Class: class:word | Namespace: a | Interface Layer: all
------------------------------------------------------------------------
a:counted-results
Data: q-a
Addr: -
Float: -
Run a quote and construct a new array from the returned values. The quote should return the values and the number of values to put into the array.
Class: class:word | Namespace: a | Interface Layer: all
------------------------------------------------------------------------
a:dup
Data: a-b
Addr: -
Float: -
Make a copy of an array. Return the address of the copy.
Class: class:word | Namespace: a | Interface Layer: all
------------------------------------------------------------------------
a:eq?
Data: aa-f
Addr: -
Float: -
Compare all values in the array. Return `TRUE` if all values are equal or `FALSE` otherwise. This assumes the array contains only numeric values.
Class: class:word | Namespace: a | Interface Layer: all
------------------------------------------------------------------------
a:filter
Data: aq-b
Addr: -
Float: -
For each item in the initial array, run the specified quote. If the quote returns `TRUE`, copy the item into a new array. If `FALSE`, discard it. Returns a pointer to the new array.
Class: class:word | Namespace: a | Interface Layer: all
------------------------------------------------------------------------
a:for-each
Data: aq-
Addr: -
Float: -
Execute the quote once for each item in the array.
Class: class:word | Namespace: a | Interface Layer: all
------------------------------------------------------------------------
a:from-string
Data: s-a
Addr: -
Float: -
Create a new array with the characters in the source string.
Class: class:word | Namespace: a | Interface Layer: all
------------------------------------------------------------------------
a:length
Data: a-n
Addr: -
Float: -
Return the length of a array.
Class: class:word | Namespace: a | Interface Layer: all
------------------------------------------------------------------------
a:make
Data: q-a
Addr: -
Float: -
Execute quote. Return a new array containing the values the quote leaves on the stack. This is identical to doing `a:counted-results a:reverse`
Class: class:word | Namespace: a | Interface Layer: all
------------------------------------------------------------------------
a:map
Data: aq-
Addr: -
Float: -
Execute quote once for each item in the array. Constructs a new array from the value returned by the quote.
Class: class:word | Namespace: a | Interface Layer: all
------------------------------------------------------------------------
a:nth
Data: an-b
Addr: -
Float: -
Return the actual address of the nth item in the array.
Class: class:word | Namespace: a | Interface Layer: all
------------------------------------------------------------------------
a:reduce
Data: pnq-n
Addr: -
Float: -
Takes an array, a starting value, and a quote. This will apply the quote to each item in the array; the quote should consume two values and return one.
Class: class:word | Namespace: a | Interface Layer: all
------------------------------------------------------------------------
a:reverse
Data: a-b
Addr: -
Float: -
Reverse the order of items in a array. This will return a new array.
Class: class:word | Namespace: a | Interface Layer: all
------------------------------------------------------------------------
again
Data: -
@ -817,171 +982,6 @@ Perform a bitwise AND operation between the two provided values.
Class: class:primitive | Namespace: global | Interface Layer: all
------------------------------------------------------------------------
array:-eq?
Data: aa-f
Addr: -
Float: -
Compare all values in the array. Return `FALSE` if all values are equal or `TRUE` otherwise. This assumes the array contains only numeric values.
Class: class:word | Namespace: array | Interface Layer: all
------------------------------------------------------------------------
array:contains-string?
Data: sa-f
Addr: -
Float: -
Return `TRUE` if the string value is in the array or`FALSE` otherwise.
Class: class:word | Namespace: array | Interface Layer: all
------------------------------------------------------------------------
array:contains?
Data: na-f
Addr: -
Float: -
Return `TRUE` if the value is in the array or `FALSE` otherwise.
Class: class:word | Namespace: array | Interface Layer: all
------------------------------------------------------------------------
array:counted-results
Data: q-a
Addr: -
Float: -
Run a quote and construct a new array from the returned values. The quote should return the values and the number of values to put into the array.
Class: class:word | Namespace: array | Interface Layer: all
------------------------------------------------------------------------
array:dup
Data: a-b
Addr: -
Float: -
Make a copy of an array. Return the address of the copy.
Class: class:word | Namespace: array | Interface Layer: all
------------------------------------------------------------------------
array:eq?
Data: aa-f
Addr: -
Float: -
Compare all values in the array. Return `TRUE` if all values are equal or `FALSE` otherwise. This assumes the array contains only numeric values.
Class: class:word | Namespace: array | Interface Layer: all
------------------------------------------------------------------------
array:filter
Data: aq-b
Addr: -
Float: -
For each item in the initial array, run the specified quote. If the quote returns `TRUE`, copy the item into a new array. If `FALSE`, discard it. Returns a pointer to the new array.
Class: class:word | Namespace: array | Interface Layer: all
------------------------------------------------------------------------
array:for-each
Data: aq-
Addr: -
Float: -
Execute the quote once for each item in the array.
Class: class:word | Namespace: array | Interface Layer: all
------------------------------------------------------------------------
array:from-string
Data: s-a
Addr: -
Float: -
Create a new array with the characters in the source string.
Class: class:word | Namespace: array | Interface Layer: all
------------------------------------------------------------------------
array:length
Data: a-n
Addr: -
Float: -
Return the length of a array.
Class: class:word | Namespace: array | Interface Layer: all
------------------------------------------------------------------------
array:make
Data: q-a
Addr: -
Float: -
Execute quote. Return a new array containing the values the quote leaves on the stack. This is identical to doing `array:counted-results array:reverse`
Class: class:word | Namespace: array | Interface Layer: all
------------------------------------------------------------------------
array:map
Data: aq-
Addr: -
Float: -
Execute quote once for each item in the array. Constructs a new array from the value returned by the quote.
Class: class:word | Namespace: array | Interface Layer: all
------------------------------------------------------------------------
array:nth
Data: an-b
Addr: -
Float: -
Return the actual address of the nth item in the array.
Class: class:word | Namespace: array | Interface Layer: all
------------------------------------------------------------------------
array:reduce
Data: pnq-n
Addr: -
Float: -
Takes an array, a starting value, and a quote. This will apply the quote to each item in the array; the quote should consume two values and return one.
Class: class:word | Namespace: array | Interface Layer: all
------------------------------------------------------------------------
array:reverse
Data: a-b
Addr: -
Float: -
Reverse the order of items in a array. This will return a new array.
Class: class:word | Namespace: array | Interface Layer: all
------------------------------------------------------------------------
as{
Data: -f
@ -5464,7 +5464,7 @@ Class: class:primitive | Namespace: global | Interface Layer: all
Addr: -
Float: -
Begin an array. This is intended to make creating arrays a bit cleaner than using a quotation and `array:counted-results`.
Begin an array. This is intended to make creating arrays a bit cleaner than using a quotation and `a:counted-results`.
Class: class:word | Namespace: global | Interface Layer: all
------------------------------------------------------------------------

View file

@ -55,7 +55,7 @@ The common namespaces are:
| Prefix | Contains |
| ------- | ------------------------------------------------------ |
| array: | Words operating on simple arrays |
| a: | Words operating on simple arrays |
| ASCII: | ASCII character constants for control characters |
| buffer: | Words for operating on a simple linear LIFO buffer |
| c: | Words for operating on ASCII character data |

View file

@ -5,7 +5,7 @@ arrays.
## Namespace
The words operating on arrays are kept in an `array:` namespace.
The words operating on arrays are kept in an `a:` namespace.
## Creating Arrays
@ -19,45 +19,45 @@ The easiest way to create an array is to wrap the values in a
```
You can also make an array from a quotation which returns
values and the number of values to store in the array:
values and the number of values to store in the a:
```
[ #1 #2 #3 #3 ] array:counted-results
[ #1 #2 #3 #3 ] array:make
[ #1 #2 #3 #3 ] a:counted-results
[ #1 #2 #3 #3 ] a:make
```
## Accessing Elements
You can access a specific value with `array:nth` and `fetch` or
You can access a specific value with `a:nth` and `fetch` or
`store`:
```
{ #1 #2 #3 #4 } #3 array:nth fetch
{ #1 #2 #3 #4 } #3 a:nth fetch
```
## Find The Length
Use `array:length` to find the size of the array.
Use `a:length` to find the size of the array.
```
{ #1 #2 #3 #4 } array:length
{ #1 #2 #3 #4 } a:length
```
## Duplicate
Use `array:dup` to make a copy of an array:
Use `a:dup` to make a copy of an a:
```
{ #1 #2 #3 #4 } array:dup
{ #1 #2 #3 #4 } a:dup
```
## Filtering
RETRO provides `array:filter` which extracts matching values
RETRO provides `a:filter` which extracts matching values
from an array. This is used like:
```
{ #1 #2 #3 #4 #5 #6 #7 #8 } [ n:even? ] array:filter
{ #1 #2 #3 #4 #5 #6 #7 #8 } [ n:even? ] a:filter
```
The quote will be passed each value in the array and should
@ -66,33 +66,33 @@ into a new array.
## Mapping
`array:map` applies a quotation to each item in an array and
`a:map` applies a quotation to each item in an array and
constructs a new array from the returned values.
Example:
```
{ #1 #2 #3 } [ #10 * ] array:map
{ #1 #2 #3 } [ #10 * ] a:map
```
## Reduce
`array:reduce` takes an array, a starting value, and a quote. It
`a:reduce` takes an array, a starting value, and a quote. It
executes the quote once for each item in the array, passing the
item and the value to the quote. The quote should consume both
and return a new value.
```
{ #1 #2 #3 } #0 [ + ] array:reduce
{ #1 #2 #3 } #0 [ + ] a:reduce
```
## Search
RETRO provides `array:contains?` and `array:contains-string?`
RETRO provides `a:contains?` and `a:contains-string?`
to search an array for a value (either a number or string) and
return either TRUE or FALSE.
```
#100 { #1 #2 #3 } array:contains?
'test { 'abc 'def 'test 'ghi } array:contains-string?
#100 { #1 #2 #3 } a:contains?
'test { 'abc 'def 'test 'ghi } a:contains-string?
```

View file

@ -260,7 +260,7 @@ tokenization.
:prepare &Tokens #4096 [ #0 over store n:inc ] times drop ;
:generate &Tokens !Heap &Block #32 s:tokenize ;
:item dup s:length n:zero? [ drop ] [ interpret ] choose ;
:process [ item ] array:for-each ;
:process [ item ] a:for-each ;
---reveal---
:editor:key<1>
[ prepare &Heap [ generate ] v:preserve process ] with-tob ;

View file

@ -6,30 +6,30 @@ I find `)` useful to punctuate code chunks.
Here is an example:
:i@ (an-n) array:nth fetch ;
:i@ (an-n) a:nth fetch ;
~~~
{{
:I@ (an-n) I array:nth fetch ;
:I@ (an-n) I a:nth fetch ;
'Index 'Value [ var ] bi@
:lt?-or-gt? hook ;
:pre.min (a-an)
(comparison &lt? &lt?-or-gt? set-hook )
(begin_with #-1 !Index n:MAX !Value dup array:length ) ;
(begin_with #-1 !Index n:MAX !Value dup a:length ) ;
:pre.max (a-an)
(comparison &gt? &lt?-or-gt? set-hook )
(begin_with #-1 !Index n:MIN !Value dup array:length ) ;
(begin_with #-1 !Index n:MIN !Value dup a:length ) ;
:min-or-max (a-nn) [ dup I@ dup @Value lt?-or-gt?
[ !Value I !Index ] [ drop ] choose ] times<with-index>
(a-nn drop @Index @Value ) ;
---reveal---
:array:min (a-iv) pre.min min-or-max ;
:array:max (a-iv) pre.max min-or-max ;
:a:min (a-iv) pre.min min-or-max ;
:a:max (a-iv) pre.max min-or-max ;
}}
~~~
```
{ #3 #2 #5 #7 #3 } array:min dump-stack nl reset
{ #3 #2 #5 #7 #3 } array:max dump-stack nl
{ #3 #2 #5 #7 #3 } a:min dump-stack nl reset
{ #3 #2 #5 #7 #3 } a:max dump-stack nl
```

View file

@ -70,7 +70,7 @@ any used space is recovered.
&Heap [ identify-classes
[ [ d:name s:put nl ]
[ d:xt fetch d:words-in-class ] bi
nl nl ] array:for-each ] v:preserve ;
nl nl ] a:for-each ] v:preserve ;
}}
~~~

View file

@ -159,7 +159,7 @@ Two different ways are implemented:
Since Retro's cells are 32-bit,
it is more convenient to handle floating point numbers
encoded into single cells than into pairs of cells.
For instance, consider using the `array:` words for vectors.
For instance, consider using the `a:` words for vectors.
Hence in many cases the words found by doing
'e: d:words-with

View file

@ -31,5 +31,5 @@ Test matrix<xs>, should be "contained!" thrice.
```
#30 #20 #10 #3 #1 "tester matrix<xs>
{ tester #2 + #3 [ fetch-next swap ] times drop }
[ { #10 #20 #30 } array:contains? [ 'contained! s:put sp nl ] if ] array:for-each
[ { #10 #20 #30 } a:contains? [ 'contained! s:put sp nl ] if ] a:for-each
```

View file

@ -6,7 +6,7 @@ This is a quick and dirty way to find prime numbers in a set.
:extract (s-s)
[ @NextPrime dup-pair eq?
[ drop-pair TRUE ]
[ mod n:-zero? ] choose ] array:filter ;
[ mod n:-zero? ] choose ] a:filter ;
---reveal---
:get-primes (s-s)
#2 !NextPrime
@ -20,5 +20,5 @@ And a test:
:create-set (-a)
here #3000 , #2 #3002 [ dup , n:inc ] times drop ;
create-set get-primes [ n:put sp ] array:for-each
create-set get-primes [ n:put sp ] a:for-each
~~~

View file

@ -21,7 +21,7 @@ dictionary.
here [ @D , , , s, ] dip !D ;
---reveal---
:make-dict (a-a)
#0 !D [ unpack add-header ] array:for-each @D ;
#0 !D [ unpack add-header ] a:for-each @D ;
}}
~~~

View file

@ -158,6 +158,6 @@ A couple of resources:
:clean [ [ c:letter? ] [ c:whitespace? ] bi or ] s:filter ;
:original dup s:put nl tab ;
:tokens ASCII:SPACE s:tokenize ;
:convert [ translate s:put sp ] array:for-each nl ;
:convert [ translate s:put sp ] a:for-each nl ;
#0 sys:argv [ s:to-lower clean original tokens convert ] unu
~~~

View file

@ -70,7 +70,7 @@ unix:count-files 'FILES const
Ok, now for a useful combinator. I want to be able to run
something once for each file or directory in the current
directory. One option would be to read the names and
construct a set, then use `array:for-each`. I decided to take
construct a set, then use `a:for-each`. I decided to take
a different path: I implement a word to open a pipe, read a
single line, then run a quote against it.

View file

@ -10,13 +10,13 @@ This can be useful, so I'm doing something similar here.
:make-struct (ns-) d:create , [ here swap fetch allot ] does ;
---reveal---
:defstruct (sa-)
dup array:length
dup a:length
[ n:dec swap
[ 'ab 'aabab reorder
'@ s:append [ fetch + fetch ] make-helper
'! s:append [ fetch + store ] make-helper
n:dec
] array:for-each drop
] a:for-each drop
] sip swap make-struct ;
}}
~~~

View file

@ -99,7 +99,7 @@ Output is written to stdout.
:body (s-)
'<body> s:put nl
[ ASCII:SPACE s:tokenize [ format '&nbsp; s:put ] array:for-each
[ ASCII:SPACE s:tokenize [ format '&nbsp; s:put ] a:for-each
'<br> s:put nl ] unu
'</body> s:put nl ;

View file

@ -20,7 +20,7 @@ number of moves required to solve a Tower of Hanoi puzzle is
Taken from https://en.m.wikipedia.org/wiki/Tower_of_Hanoi
~~~
{ 'Num 'From 'To 'Via } [ var ] array:for-each
{ 'Num 'From 'To 'Via } [ var ] a:for-each
:set !Via !To !From !Num ;
:display @To @From 'Move_a_ring_from_%n_to_%n\n s:format s:put ;

View file

@ -83,7 +83,7 @@ The next word is `display`. This will tokenize a line and display the `type` and
~~~
:display (s-)
&Heap [ #0 !Displayed
ASCII:HT s:tokenize #0 array:nth fetch
ASCII:HT s:tokenize #0 a:nth fetch
fetch-next type s:put<w/wrap> ] v:preserve ;
~~~
@ -102,7 +102,7 @@ And finally, tie everything together. This will display an index.
#0 @Results
[ over line display nl n:inc ]
array:for-each drop
a:for-each drop
] v:preserve ;
}}
~~~
@ -139,12 +139,12 @@ The last bit is `g`, which is used to navigate a directory. Pass it the line num
~~~
:g (n-)
&Heeap [ @Results swap array:nth fetch
&Heeap [ @Results swap a:nth fetch
ASCII:HT s:tokenize
dup #0 array:nth fetch fetch [
[ #2 array:nth fetch ]
[ #3 array:nth fetch s:chop s:to-number ]
[ #1 array:nth fetch ] tri grab
dup #0 a:nth fetch fetch [
[ #2 a:nth fetch ]
[ #3 a:nth fetch s:chop s:to-number ]
[ #1 a:nth fetch ] tri grab
] dip display-by-type
] v:preserve ;
~~~

View file

@ -238,7 +238,7 @@ top level word called returns.
#0 sys:argv
[ [ ASCII:SPACE s:tokenize
[ valid? [ to-TIB process ] &drop choose ] array:for-each
[ valid? [ to-TIB process ] &drop choose ] a:for-each
progress
] gc ] unu nl
~~~

View file

@ -94,7 +94,7 @@ simple code.
[ 'field: s:prepend d:create
dup compile:lit &select compile:call compile:ret
&class:word reclass n:inc ] array:for-each drop
&class:word reclass n:inc ] a:for-each drop
}}
~~~
@ -281,7 +281,7 @@ before doing the checks.
:record-name !SourceLine field:name s:keep over &GlossaryNames + store ;
:populate-names #1 'words.tsv [ record-name n:inc ] file:for-each-line
n:dec &GlossaryNames store ;
:in-set? dup &GlossaryNames array:contains-string? ;
:in-set? dup &GlossaryNames a:contains-string? ;
---reveal---
:display-missing
restrict-scope populate-names
@ -372,7 +372,7 @@ when done.
'/tmp/glossary.ex2
'/tmp/glossary.namespace
'/tmp/glossary.interface }
[ file:delete ] array:for-each ;
[ file:delete ] a:for-each ;
~~~
Cleaning the edited data is necessary. This entails:
@ -532,7 +532,7 @@ you edit/save the TSV data with a spreadsheet application.
&field:ex2
&field:namespace
&field:interface }
[ call s:put tab ] array:for-each nl ;
[ call s:put tab ] a:for-each nl ;
:export-tsv
'words.tsv [ s:keep !SourceLine display-fields ] file:for-each-line ;
@ -587,7 +587,7 @@ to use.
'__glossary____concise
'__tsv_________concise-stack
'--------------------------------
} [ s:put nl ] array:for-each ;
} [ s:put nl ] a:for-each ;
~~~
@ -686,7 +686,7 @@ And then the actual top level server.
'*_{_font-family:_monospace;_color:_#aaa;_background:_#121212;_}
'a_{_color:_#EE7600;_}
'</style>
} [ s:put sp ] array:for-each ;
} [ s:put sp ] a:for-each ;
:entry display-result<HTML> ;
@ -704,13 +704,13 @@ And then the actual top level server.
:handle-http
page-header
&Selector ASCII:SPACE s:tokenize #1 array:nth fetch
&Selector ASCII:SPACE s:tokenize #1 a:nth fetch
dup s:length #1 eq?
[ drop http:list-words ]
[ n:inc s:to-number http:display ] choose ;
:handle-gopher
&Selector ASCII:SPACE s:tokenize #1 array:nth fetch
&Selector ASCII:SPACE s:tokenize #1 a:nth fetch
s:chop s:keep dup s:put !Target gopher:display ;
---reveal---

View file

@ -1,6 +1,6 @@
#include <stdint.h>
int32_t ngaImageCells = 9287;
int32_t ngaImage[] = { 1793,-1,9269,9286,201906,0,10,1,10,2,10,3,10,4,10,5,10,6,10,
int32_t ngaImageCells = 9227;
int32_t ngaImage[] = { 1793,-1,9209,9226,201906,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,355,339,268505089,66,65,135205121,66,10,101384453,0,9,10,2049,59,
@ -52,7 +52,7 @@ int32_t ngaImage[] = { 1793,-1,9269,9286,201906,0,10,1,10,2,10,3,10,4,10,5,10,6,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,59,0,114,101,0,0,83,0,99,107,0,0,110,100,
101,120,62,0,0,116,115,0,63,0,91,92,93,94,96,123,124,125,126,0,
101,120,62,0,0,0,103,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,
@ -160,7 +160,7 @@ int32_t ngaImage[] = { 1793,-1,9269,9286,201906,0,10,1,10,2,10,3,10,4,10,5,10,6,
3104,3157,147,118,58,117,112,100,97,116,101,45,117,115,105,110,103,0,4,1793,
3164,15,4,8,10,1,3160,2049,2088,16,10,3139,3178,147,99,111,112,121,0,1793,
3187,1,59,2049,2076,2049,62,10,1,3180,2049,2263,3,3,10,3170,3207,147,83,99,
111,112,101,76,105,115,116,0,9068,9083,10,3194,3216,147,123,123,0,2049,1570,2,
111,112,101,76,105,115,116,0,9008,9023,10,3194,3216,147,123,123,0,2049,1570,2,
1,3207,2049,62,16,10,3210,3241,147,45,45,45,114,101,118,101,97,108,45,45,
45,0,2049,1570,1,3207,2049,2919,16,10,3225,3255,147,125,125,0,1,3207,2049,59,
4,15,11,1793,3269,3841,3207,4097,2,10,1,3264,1793,3299,3841,3207,1793,3294,1,2,
@ -358,110 +358,107 @@ int32_t ngaImage[] = { 1793,-1,9269,9286,201906,0,10,1,10,2,10,3,10,4,10,5,10,6,
15,25,2049,2066,1793,7115,1793,7110,4,8,10,1,7107,2049,2076,10,1,7105,2049,2076,
1,7099,7,10,1,7099,8,3,10,7081,7143,147,100,58,108,111,111,107,117,112,
45,120,116,0,1,0,4,1793,7169,2049,2066,2049,161,15,11,1793,7162,4,1,2027,
2049,2076,10,1,7156,1,11,2049,67,10,1,7148,2049,7095,3,10,7128,7191,147,97,
114,114,97,121,58,108,101,110,103,116,104,0,15,10,7175,7218,147,97,114,114,
97,121,58,99,111,117,110,116,101,100,45,114,101,115,117,108,116,115,0,8,
2049,1847,1793,7231,2,2049,108,1,108,2049,2263,10,1,7223,2049,2076,10,7193,7257,147,
97,114,114,97,121,58,102,114,111,109,45,115,116,114,105,110,103,0,2049,1847,
1793,7276,2,2049,82,2049,108,1793,7271,2049,108,10,1,7268,2049,4034,10,1,7261,2049,
2076,10,7236,7286,134,81,0,0,7236,7305,147,97,114,114,97,121,58,102,111,114,
45,101,97,99,104,0,1,7286,1793,7335,4097,7286,2049,59,1793,7329,2049,59,4,1793,
7324,3841,7286,8,10,1,7320,2049,2076,10,1,7315,2049,2263,3,10,1,7309,2049,3118,
10,7287,7353,147,97,114,114,97,121,58,100,117,112,0,2049,1847,1793,7371,2,15,
2049,108,1793,7366,2049,108,10,1,7363,2049,7305,10,1,7357,2049,2076,10,7340,7392,147,
97,114,114,97,121,58,102,105,108,116,101,114,0,1793,7420,67502597,1793,7399,8,10,
1,7397,2049,2076,4,1793,7409,2049,108,10,1,7406,1793,7415,3,10,1,7413,2049,67,
10,1,7394,2049,7041,2049,1847,1793,7435,67502597,15,2049,108,2049,7305,10,1,7428,2049,2076,
2049,1847,67502597,18,2049,2932,67502597,16,10,7376,7453,134,70,0,0,7376,7473,147,97,114,
114,97,121,58,99,111,110,116,97,105,110,115,63,0,1,7453,2049,3085,1793,7487,
67502597,11,3841,7453,22,4097,7453,10,1,7479,2049,7305,3,3841,7453,10,7454,7521,147,97,
114,114,97,121,58,99,111,110,116,97,105,110,115,45,115,116,114,105,110,103,
63,0,1,7453,2049,3085,1793,7536,67502597,2049,96,3841,7453,22,4097,7453,10,1,7527,2049,
7305,3,3841,7453,10,7495,7557,147,97,114,114,97,121,58,109,97,112,0,1793,7563,
8,2049,108,10,1,7559,2049,7041,2049,1847,1793,7578,67502597,15,2049,108,2049,7305,10,1,
7571,2049,2076,10,7544,7600,147,97,114,114,97,121,58,114,101,118,101,114,115,101,
0,2049,1847,1793,7634,2049,59,1793,7612,17,2049,2932,10,1,7608,2049,2088,2,2049,108,
1793,7628,2,15,2049,108,2049,2932,10,1,7621,2049,2263,3,10,1,7604,2049,2076,10,
7583,7652,147,97,114,114,97,121,58,110,116,104,0,17,2049,2919,10,7639,7672,147,
97,114,114,97,121,58,114,101,100,117,99,101,0,1793,7676,4,10,1,7674,2049,
2076,2049,7305,10,7656,7697,147,97,114,114,97,121,58,109,97,107,101,0,2049,7218,
2049,7600,10,7683,7707,159,123,0,1,288,2049,159,1,1556,2049,147,1,288,2049,159,
10,7702,7725,159,125,0,1,305,2049,159,1,2076,2049,147,1,1556,2049,147,1,13,
2049,153,1,41,2049,153,1,2932,2049,147,1,305,2049,159,1,7697,2049,147,10,7720,
7764,134,73,48,0,105,105,0,7758,7773,134,73,49,0,46,46,0,7767,7782,134,
73,50,0,46,46,0,7776,7791,134,73,51,0,46,46,0,7785,7804,147,111,112,
99,111,100,101,0,2049,3708,46,46,0,1,7806,1793,7816,1,0,10,1,7813,2049,
2337,2049,3708,108,105,0,1,7822,1793,7832,1,1,10,1,7829,2049,2337,2049,3708,100,
117,0,1,7838,1793,7848,1,2,10,1,7845,2049,2337,2049,3708,100,114,0,1,7854,
1793,7864,1,3,10,1,7861,2049,2337,2049,3708,115,119,0,1,7870,1793,7880,1,4,
10,1,7877,2049,2337,2049,3708,112,117,0,1,7886,1793,7896,1,5,10,1,7893,2049,
2337,2049,3708,112,111,0,1,7902,1793,7912,1,6,10,1,7909,2049,2337,2049,3708,106,
117,0,1,7918,1793,7928,1,7,10,1,7925,2049,2337,2049,3708,99,97,0,1,7934,
1793,7944,1,8,10,1,7941,2049,2337,2049,3708,99,99,0,1,7950,1793,7960,1,9,
10,1,7957,2049,2337,2049,3708,114,101,0,1,7966,1793,7976,1,10,10,1,7973,2049,
2337,2049,3708,101,113,0,1,7982,1793,7992,1,11,10,1,7989,2049,2337,2049,3708,110,
101,0,1,7998,1793,8008,1,12,10,1,8005,2049,2337,2049,3708,108,116,0,1,8014,
1793,8024,1,13,10,1,8021,2049,2337,2049,3708,103,116,0,1,8030,1793,8040,1,14,
10,1,8037,2049,2337,2049,3708,102,101,0,1,8046,1793,8056,1,15,10,1,8053,2049,
2337,2049,3708,115,116,0,1,8062,1793,8072,1,16,10,1,8069,2049,2337,2049,3708,97,
100,0,1,8078,1793,8088,1,17,10,1,8085,2049,2337,2049,3708,115,117,0,1,8094,
1793,8104,1,18,10,1,8101,2049,2337,2049,3708,109,117,0,1,8110,1793,8120,1,19,
10,1,8117,2049,2337,2049,3708,100,105,0,1,8126,1793,8136,1,20,10,1,8133,2049,
2337,2049,3708,97,110,0,1,8142,1793,8152,1,21,10,1,8149,2049,2337,2049,3708,111,
114,0,1,8158,1793,8168,1,22,10,1,8165,2049,2337,2049,3708,120,111,0,1,8174,
1793,8184,1,23,10,1,8181,2049,2337,2049,3708,115,104,0,1,8190,1793,8200,1,24,
10,1,8197,2049,2337,2049,3708,122,114,0,1,8206,1793,8216,1,25,10,1,8213,2049,
2337,2049,3708,101,110,0,1,8222,1793,8232,1,26,10,1,8229,2049,2337,2049,3708,105,
101,0,1,8238,1793,8248,1,27,10,1,8245,2049,2337,2049,3708,105,113,0,1,8254,
1793,8264,1,28,10,1,8261,2049,2337,2049,3708,105,105,0,1,8270,1793,8280,1,29,
10,1,8277,2049,2337,3,1,0,10,7794,8296,147,112,97,99,107,0,1,7764,2049,
7804,1,7773,2049,7804,1,7782,2049,7804,1,7791,2049,7804,1,-24,24,4,1,-16,24,
17,4,1,-8,24,17,4,17,10,7720,8333,147,105,0,2,1,7764,1,2,2049,
3178,1,2,17,2,1,7773,1,2,2049,3178,1,2,17,2,1,7782,1,2,2049,
3178,1,2,17,1,7791,1,2,2049,3178,2049,8296,2049,108,10,8328,8379,147,100,0,
2049,108,10,8374,8387,147,114,0,2049,200,2049,161,15,2049,108,10,8382,8402,159,97,
115,123,0,3841,127,1,127,2049,3085,10,8395,8416,159,125,97,115,0,4097,127,10,
8409,8435,147,99,117,114,114,101,110,116,45,108,105,110,101,0,2049,3579,1,1025,
18,10,8419,8457,147,99,111,117,110,116,45,116,111,107,101,110,115,0,1793,8463,
1,32,11,10,1,8459,2049,4463,2049,82,10,8441,8484,147,110,101,120,116,45,116,
111,107,101,110,0,1,32,2049,6255,10,8470,8507,147,112,114,111,99,101,115,115,
45,116,111,107,101,110,115,0,1793,8533,2049,8484,4,1793,8526,2,2049,82,2049,2594,
1,367,1,11,2049,67,10,1,8514,2049,2076,2049,2919,10,1,8509,2049,2263,2049,367,
10,8409,8554,147,115,58,101,118,97,108,117,97,116,101,0,2049,8435,2049,4732,2049,
8435,2,2049,8457,2049,8507,10,8540,8574,134,70,108,97,103,0,0,8566,8586,147,99,
111,109,112,97,114,101,0,67440386,184946434,10,8575,8599,147,108,101,110,103,116,104,0,
659202,10,8589,8609,147,110,101,120,116,0,17043713,1,1,2577,10,8601,8627,147,110,111,
116,45,101,113,117,97,108,0,50529030,2561,0,10,8614,8639,147,108,111,111,112,0,
524549,8609,2049,8586,18157313,8574,8574,16,420610310,1,1,8639,7,10,8540,8666,147,97,114,114,
97,121,58,101,113,63,0,1048833,-1,8574,2049,8586,151066369,-1,8627,2049,8599,2049,8639,251724547,
8574,10,8653,8695,147,97,114,114,97,121,58,45,101,113,63,0,2049,8666,2049,2731,
10,8681,8706,134,76,80,0,0,8700,8716,134,73,110,100,101,120,0,0,0,0,
2049,2076,10,1,7156,1,11,2049,67,10,1,7148,2049,7095,3,10,7128,7187,147,97,
58,108,101,110,103,116,104,0,15,10,7175,7210,147,97,58,99,111,117,110,116,
101,100,45,114,101,115,117,108,116,115,0,8,2049,1847,1793,7223,2,2049,108,1,
108,2049,2263,10,1,7215,2049,2076,10,7189,7245,147,97,58,102,114,111,109,45,115,
116,114,105,110,103,0,2049,1847,1793,7264,2,2049,82,2049,108,1793,7259,2049,108,10,
1,7256,2049,4034,10,1,7249,2049,2076,10,7228,7274,134,81,0,0,7228,7289,147,97,
58,102,111,114,45,101,97,99,104,0,1,7274,1793,7319,4097,7274,2049,59,1793,7313,
2049,59,4,1793,7308,3841,7274,8,10,1,7304,2049,2076,10,1,7299,2049,2263,3,10,
1,7293,2049,3118,10,7275,7333,147,97,58,100,117,112,0,2049,1847,1793,7351,2,15,
2049,108,1793,7346,2049,108,10,1,7343,2049,7289,10,1,7337,2049,2076,10,7324,7368,147,
97,58,102,105,108,116,101,114,0,1793,7396,67502597,1793,7375,8,10,1,7373,2049,2076,
4,1793,7385,2049,108,10,1,7382,1793,7391,3,10,1,7389,2049,67,10,1,7370,2049,
7041,2049,1847,1793,7411,67502597,15,2049,108,2049,7289,10,1,7404,2049,2076,2049,1847,67502597,18,
2049,2932,67502597,16,10,7356,7429,134,70,0,0,7356,7445,147,97,58,99,111,110,116,
97,105,110,115,63,0,1,7429,2049,3085,1793,7459,67502597,11,3841,7429,22,4097,7429,10,
1,7451,2049,7289,3,3841,7429,10,7430,7489,147,97,58,99,111,110,116,97,105,110,
115,45,115,116,114,105,110,103,63,0,1,7429,2049,3085,1793,7504,67502597,2049,96,3841,
7429,22,4097,7429,10,1,7495,2049,7289,3,3841,7429,10,7467,7521,147,97,58,109,97,
112,0,1793,7527,8,2049,108,10,1,7523,2049,7041,2049,1847,1793,7542,67502597,15,2049,108,
2049,7289,10,1,7535,2049,2076,10,7512,7560,147,97,58,114,101,118,101,114,115,101,
0,2049,1847,1793,7594,2049,59,1793,7572,17,2049,2932,10,1,7568,2049,2088,2,2049,108,
1793,7588,2,15,2049,108,2049,2932,10,1,7581,2049,2263,3,10,1,7564,2049,2076,10,
7547,7608,147,97,58,110,116,104,0,17,2049,2919,10,7599,7624,147,97,58,114,101,
100,117,99,101,0,1793,7628,4,10,1,7626,2049,2076,2049,7289,10,7612,7645,147,97,
58,109,97,107,101,0,2049,7210,2049,7560,10,7635,7655,159,123,0,1,288,2049,159,
1,1556,2049,147,1,288,2049,159,10,7650,7673,159,125,0,1,305,2049,159,1,2076,
2049,147,1,1556,2049,147,1,13,2049,153,1,41,2049,153,1,2932,2049,147,1,305,
2049,159,1,7645,2049,147,10,7668,7712,134,73,48,0,105,105,0,7706,7721,134,73,
49,0,46,46,0,7715,7730,134,73,50,0,46,46,0,7724,7739,134,73,51,0,
46,46,0,7733,7752,147,111,112,99,111,100,101,0,2049,3708,46,46,0,1,7754,
1793,7764,1,0,10,1,7761,2049,2337,2049,3708,108,105,0,1,7770,1793,7780,1,1,
10,1,7777,2049,2337,2049,3708,100,117,0,1,7786,1793,7796,1,2,10,1,7793,2049,
2337,2049,3708,100,114,0,1,7802,1793,7812,1,3,10,1,7809,2049,2337,2049,3708,115,
119,0,1,7818,1793,7828,1,4,10,1,7825,2049,2337,2049,3708,112,117,0,1,7834,
1793,7844,1,5,10,1,7841,2049,2337,2049,3708,112,111,0,1,7850,1793,7860,1,6,
10,1,7857,2049,2337,2049,3708,106,117,0,1,7866,1793,7876,1,7,10,1,7873,2049,
2337,2049,3708,99,97,0,1,7882,1793,7892,1,8,10,1,7889,2049,2337,2049,3708,99,
99,0,1,7898,1793,7908,1,9,10,1,7905,2049,2337,2049,3708,114,101,0,1,7914,
1793,7924,1,10,10,1,7921,2049,2337,2049,3708,101,113,0,1,7930,1793,7940,1,11,
10,1,7937,2049,2337,2049,3708,110,101,0,1,7946,1793,7956,1,12,10,1,7953,2049,
2337,2049,3708,108,116,0,1,7962,1793,7972,1,13,10,1,7969,2049,2337,2049,3708,103,
116,0,1,7978,1793,7988,1,14,10,1,7985,2049,2337,2049,3708,102,101,0,1,7994,
1793,8004,1,15,10,1,8001,2049,2337,2049,3708,115,116,0,1,8010,1793,8020,1,16,
10,1,8017,2049,2337,2049,3708,97,100,0,1,8026,1793,8036,1,17,10,1,8033,2049,
2337,2049,3708,115,117,0,1,8042,1793,8052,1,18,10,1,8049,2049,2337,2049,3708,109,
117,0,1,8058,1793,8068,1,19,10,1,8065,2049,2337,2049,3708,100,105,0,1,8074,
1793,8084,1,20,10,1,8081,2049,2337,2049,3708,97,110,0,1,8090,1793,8100,1,21,
10,1,8097,2049,2337,2049,3708,111,114,0,1,8106,1793,8116,1,22,10,1,8113,2049,
2337,2049,3708,120,111,0,1,8122,1793,8132,1,23,10,1,8129,2049,2337,2049,3708,115,
104,0,1,8138,1793,8148,1,24,10,1,8145,2049,2337,2049,3708,122,114,0,1,8154,
1793,8164,1,25,10,1,8161,2049,2337,2049,3708,101,110,0,1,8170,1793,8180,1,26,
10,1,8177,2049,2337,2049,3708,105,101,0,1,8186,1793,8196,1,27,10,1,8193,2049,
2337,2049,3708,105,113,0,1,8202,1793,8212,1,28,10,1,8209,2049,2337,2049,3708,105,
105,0,1,8218,1793,8228,1,29,10,1,8225,2049,2337,3,1,0,10,7742,8244,147,
112,97,99,107,0,1,7712,2049,7752,1,7721,2049,7752,1,7730,2049,7752,1,7739,2049,
7752,1,-24,24,4,1,-16,24,17,4,1,-8,24,17,4,17,10,7668,8281,147,
105,0,2,1,7712,1,2,2049,3178,1,2,17,2,1,7721,1,2,2049,3178,1,
2,17,2,1,7730,1,2,2049,3178,1,2,17,1,7739,1,2,2049,3178,2049,8244,
2049,108,10,8276,8327,147,100,0,2049,108,10,8322,8335,147,114,0,2049,200,2049,161,
15,2049,108,10,8330,8350,159,97,115,123,0,3841,127,1,127,2049,3085,10,8343,8364,
159,125,97,115,0,4097,127,10,8357,8383,147,99,117,114,114,101,110,116,45,108,
105,110,101,0,2049,3579,1,1025,18,10,8367,8405,147,99,111,117,110,116,45,116,
111,107,101,110,115,0,1793,8411,1,32,11,10,1,8407,2049,4463,2049,82,10,8389,
8432,147,110,101,120,116,45,116,111,107,101,110,0,1,32,2049,6255,10,8418,8455,
147,112,114,111,99,101,115,115,45,116,111,107,101,110,115,0,1793,8481,2049,8432,
4,1793,8474,2,2049,82,2049,2594,1,367,1,11,2049,67,10,1,8462,2049,2076,2049,
2919,10,1,8457,2049,2263,2049,367,10,8357,8502,147,115,58,101,118,97,108,117,97,
116,101,0,2049,8383,2049,4732,2049,8383,2,2049,8405,2049,8455,10,8488,8522,134,70,108,
97,103,0,0,8514,8534,147,99,111,109,112,97,114,101,0,67440386,184946434,10,8523,8547,
147,108,101,110,103,116,104,0,659202,10,8537,8557,147,110,101,120,116,0,17043713,1,
1,2577,10,8549,8575,147,110,111,116,45,101,113,117,97,108,0,50529030,2561,0,10,
8562,8587,147,108,111,111,112,0,524549,8557,2049,8534,18157313,8522,8522,16,420610310,1,1,8587,
7,10,8488,8610,147,97,58,101,113,63,0,1048833,-1,8522,2049,8534,151066369,-1,8575,2049,
8547,2049,8587,251724547,8522,10,8601,8635,147,97,58,45,101,113,63,0,2049,8610,2049,2731,
10,8625,8646,134,76,80,0,0,8640,8656,134,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,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,8707,8852,147,110,101,120,116,0,3841,8706,1,8716,17,2049,3020,
10,8844,8868,147,112,114,101,112,0,1,8706,2049,3020,1,0,3841,8706,1,8716,17,
16,10,8860,8889,147,100,111,110,101,0,1,8706,2049,3035,10,8681,8899,147,73,0,
3841,8706,1,8716,17,15,10,8894,8911,147,74,0,3841,8706,1,8716,17,2049,2932,15,
10,8906,8925,147,75,0,3841,8706,1,8716,17,1,2,18,15,10,8920,8956,147,116,
105,109,101,115,60,119,105,116,104,45,105,110,100,101,120,62,0,2049,8868,4,
1793,8976,25,2049,2932,5,1,21,2049,2088,6,2049,8852,1,8961,7,10,1,8961,8,
3,2049,8889,10,8935,8991,159,104,111,111,107,0,1,1793,2049,108,2049,1847,2049,2919,
2049,108,10,8983,9014,147,115,101,116,45,104,111,111,107,0,2049,2919,16,10,9002,
9028,147,117,110,104,111,111,107,0,2049,2919,2,2049,2919,4,16,10,9018,9052,147,
105,111,58,101,110,117,109,101,114,97,116,101,0,27,10,9036,9066,147,105,111,
58,113,117,101,114,121,0,28,10,9054,9081,147,105,111,58,105,110,118,111,107,
101,0,29,10,9068,9091,134,83,108,111,116,0,0,9068,9107,147,105,111,58,115,
99,97,110,45,102,111,114,0,1,-1,4097,9091,2049,9052,1793,9133,2049,8899,2049,9066,
772,67502597,11,1793,9129,2049,8899,4097,9091,10,1,9124,9,10,1,9115,2049,8956,3,3841,
9091,10,9092,9150,147,99,58,112,117,116,0,1793,9152,1,0,2049,9081,10,9141,9163,
147,110,108,0,1,10,2049,9150,10,9157,9174,147,115,112,0,1,32,2049,9150,10,
9168,9186,147,116,97,98,0,1,9,2049,9150,10,9179,9200,147,115,58,112,117,116,
0,1,9150,2049,4034,10,9191,9214,147,110,58,112,117,116,0,2049,6071,2049,9200,10,
9205,9228,147,114,101,115,101,116,0,2049,1556,25,5,3,6,1,1,18,1,9230,
7,10,9219,9255,147,100,117,109,112,45,115,116,97,99,107,0,2049,1556,25,3,
5,2049,9255,6,2,2049,9214,2049,9174,10,9241,9277,147,70,82,69,69,0,2049,3579,
0,0,0,0,0,8647,8792,147,110,101,120,116,0,3841,8646,1,8656,17,2049,3020,
10,8784,8808,147,112,114,101,112,0,1,8646,2049,3020,1,0,3841,8646,1,8656,17,
16,10,8800,8829,147,100,111,110,101,0,1,8646,2049,3035,10,8625,8839,147,73,0,
3841,8646,1,8656,17,15,10,8834,8851,147,74,0,3841,8646,1,8656,17,2049,2932,15,
10,8846,8865,147,75,0,3841,8646,1,8656,17,1,2,18,15,10,8860,8896,147,116,
105,109,101,115,60,119,105,116,104,45,105,110,100,101,120,62,0,2049,8808,4,
1793,8916,25,2049,2932,5,1,21,2049,2088,6,2049,8792,1,8901,7,10,1,8901,8,
3,2049,8829,10,8875,8931,159,104,111,111,107,0,1,1793,2049,108,2049,1847,2049,2919,
2049,108,10,8923,8954,147,115,101,116,45,104,111,111,107,0,2049,2919,16,10,8942,
8968,147,117,110,104,111,111,107,0,2049,2919,2,2049,2919,4,16,10,8958,8992,147,
105,111,58,101,110,117,109,101,114,97,116,101,0,27,10,8976,9006,147,105,111,
58,113,117,101,114,121,0,28,10,8994,9021,147,105,111,58,105,110,118,111,107,
101,0,29,10,9008,9031,134,83,108,111,116,0,0,9008,9047,147,105,111,58,115,
99,97,110,45,102,111,114,0,1,-1,4097,9031,2049,8992,1793,9073,2049,8839,2049,9006,
772,67502597,11,1793,9069,2049,8839,4097,9031,10,1,9064,9,10,1,9055,2049,8896,3,3841,
9031,10,9032,9090,147,99,58,112,117,116,0,1793,9092,1,0,2049,9021,10,9081,9103,
147,110,108,0,1,10,2049,9090,10,9097,9114,147,115,112,0,1,32,2049,9090,10,
9108,9126,147,116,97,98,0,1,9,2049,9090,10,9119,9140,147,115,58,112,117,116,
0,1,9090,2049,4034,10,9131,9154,147,110,58,112,117,116,0,2049,6071,2049,9140,10,
9145,9168,147,114,101,115,101,116,0,2049,1556,25,5,3,6,1,1,18,1,9170,
7,10,9159,9195,147,100,117,109,112,45,115,116,97,99,107,0,2049,1556,25,3,
5,2049,9195,6,2,2049,9154,2049,9114,10,9181,9217,147,70,82,69,69,0,2049,3579,
1,1025,18,2049,1847,18,10,0 };

File diff suppressed because it is too large Load diff

View file

@ -251,7 +251,7 @@ tokenization.
:prepare &Tokens #4096 [ #0 over store n:inc ] times drop ;
:generate &Tokens !Heap &Block #32 s:tokenize ;
:item dup s:length n:zero? [ drop ] [ interpret ] choose ;
:process [ item ] array:for-each ;
:process [ item ] a:for-each ;
---reveal---
:editor:key<1>
[ prepare &Heap [ generate ] v:preserve process ] with-tob ;

View file

@ -1,6 +1,6 @@
#include <stdint.h>
int32_t ngaImageCells = 16590;
int32_t ngaImage[] = { 1793,16369,16547,16589,201906,0,10,1,10,2,10,3,10,4,10,5,10,6,10,
int32_t ngaImageCells = 16530;
int32_t ngaImage[] = { 1793,16309,16487,16529,201906,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,16369,16547,16589,201906,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,17108737,3,2,524559,108,2049,108,2049,108,2049,122,168820998,
2,16407,1025,167841793,180,5,17826049,0,180,2,15,25,524546,165,134287105,181,96,2305,182,459023,
2,16347,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,16369,16547,16589,201906,0,10,1,10,2,10,3,10,4,10,5,
3104,3157,147,118,58,117,112,100,97,116,101,45,117,115,105,110,103,0,4,1793,
3164,15,4,8,10,1,3160,2049,2088,16,10,3139,3178,147,99,111,112,121,0,1793,
3187,1,59,2049,2076,2049,62,10,1,3180,2049,2263,3,3,10,3170,3207,147,83,99,
111,112,101,76,105,115,116,0,16453,16505,10,3194,3216,147,123,123,0,2049,1570,2,
111,112,101,76,105,115,116,0,16393,16445,10,3194,3216,147,123,123,0,2049,1570,2,
1,3207,2049,62,16,10,3210,3241,147,45,45,45,114,101,118,101,97,108,45,45,
45,0,2049,1570,1,3207,2049,2919,16,10,3225,3255,147,125,125,0,1,3207,2049,59,
4,15,11,1793,3269,3841,3207,4097,2,10,1,3264,1793,3299,3841,3207,1793,3294,1,2,
@ -358,325 +358,322 @@ int32_t ngaImage[] = { 1793,16369,16547,16589,201906,0,10,1,10,2,10,3,10,4,10,5,
15,25,2049,2066,1793,7115,1793,7110,4,8,10,1,7107,2049,2076,10,1,7105,2049,2076,
1,7099,7,10,1,7099,8,3,10,7081,7143,147,100,58,108,111,111,107,117,112,
45,120,116,0,1,0,4,1793,7169,2049,2066,2049,161,15,11,1793,7162,4,1,2027,
2049,2076,10,1,7156,1,11,2049,67,10,1,7148,2049,7095,3,10,7128,7191,147,97,
114,114,97,121,58,108,101,110,103,116,104,0,15,10,7175,7218,147,97,114,114,
97,121,58,99,111,117,110,116,101,100,45,114,101,115,117,108,116,115,0,8,
2049,1847,1793,7231,2,2049,108,1,108,2049,2263,10,1,7223,2049,2076,10,7193,7257,147,
97,114,114,97,121,58,102,114,111,109,45,115,116,114,105,110,103,0,2049,1847,
1793,7276,2,2049,82,2049,108,1793,7271,2049,108,10,1,7268,2049,4034,10,1,7261,2049,
2076,10,7236,7286,134,81,0,0,7236,7305,147,97,114,114,97,121,58,102,111,114,
45,101,97,99,104,0,1,7286,1793,7335,4097,7286,2049,59,1793,7329,2049,59,4,1793,
7324,3841,7286,8,10,1,7320,2049,2076,10,1,7315,2049,2263,3,10,1,7309,2049,3118,
10,7287,7353,147,97,114,114,97,121,58,100,117,112,0,2049,1847,1793,7371,2,15,
2049,108,1793,7366,2049,108,10,1,7363,2049,7305,10,1,7357,2049,2076,10,7340,7392,147,
97,114,114,97,121,58,102,105,108,116,101,114,0,1793,7420,67502597,1793,7399,8,10,
1,7397,2049,2076,4,1793,7409,2049,108,10,1,7406,1793,7415,3,10,1,7413,2049,67,
10,1,7394,2049,7041,2049,1847,1793,7435,67502597,15,2049,108,2049,7305,10,1,7428,2049,2076,
2049,1847,67502597,18,2049,2932,67502597,16,10,7376,7453,134,70,0,0,7376,7473,147,97,114,
114,97,121,58,99,111,110,116,97,105,110,115,63,0,1,7453,2049,3085,1793,7487,
67502597,11,3841,7453,22,4097,7453,10,1,7479,2049,7305,3,3841,7453,10,7454,7521,147,97,
114,114,97,121,58,99,111,110,116,97,105,110,115,45,115,116,114,105,110,103,
63,0,1,7453,2049,3085,1793,7536,67502597,2049,96,3841,7453,22,4097,7453,10,1,7527,2049,
7305,3,3841,7453,10,7495,7557,147,97,114,114,97,121,58,109,97,112,0,1793,7563,
8,2049,108,10,1,7559,2049,7041,2049,1847,1793,7578,67502597,15,2049,108,2049,7305,10,1,
7571,2049,2076,10,7544,7600,147,97,114,114,97,121,58,114,101,118,101,114,115,101,
0,2049,1847,1793,7634,2049,59,1793,7612,17,2049,2932,10,1,7608,2049,2088,2,2049,108,
1793,7628,2,15,2049,108,2049,2932,10,1,7621,2049,2263,3,10,1,7604,2049,2076,10,
7583,7652,147,97,114,114,97,121,58,110,116,104,0,17,2049,2919,10,7639,7672,147,
97,114,114,97,121,58,114,101,100,117,99,101,0,1793,7676,4,10,1,7674,2049,
2076,2049,7305,10,7656,7697,147,97,114,114,97,121,58,109,97,107,101,0,2049,7218,
2049,7600,10,7683,7707,159,123,0,1,288,2049,159,1,1556,2049,147,1,288,2049,159,
10,7702,7725,159,125,0,1,305,2049,159,1,2076,2049,147,1,1556,2049,147,1,13,
2049,153,1,41,2049,153,1,2932,2049,147,1,305,2049,159,1,7697,2049,147,10,7720,
7764,134,73,48,0,115,116,0,7758,7773,134,73,49,0,115,116,0,7767,7782,134,
73,50,0,115,116,0,7776,7791,134,73,51,0,115,116,0,7785,7804,147,111,112,
99,111,100,101,0,2049,3708,46,46,0,1,7806,1793,7816,1,0,10,1,7813,2049,
2337,2049,3708,108,105,0,1,7822,1793,7832,1,1,10,1,7829,2049,2337,2049,3708,100,
117,0,1,7838,1793,7848,1,2,10,1,7845,2049,2337,2049,3708,100,114,0,1,7854,
1793,7864,1,3,10,1,7861,2049,2337,2049,3708,115,119,0,1,7870,1793,7880,1,4,
10,1,7877,2049,2337,2049,3708,112,117,0,1,7886,1793,7896,1,5,10,1,7893,2049,
2337,2049,3708,112,111,0,1,7902,1793,7912,1,6,10,1,7909,2049,2337,2049,3708,106,
117,0,1,7918,1793,7928,1,7,10,1,7925,2049,2337,2049,3708,99,97,0,1,7934,
1793,7944,1,8,10,1,7941,2049,2337,2049,3708,99,99,0,1,7950,1793,7960,1,9,
10,1,7957,2049,2337,2049,3708,114,101,0,1,7966,1793,7976,1,10,10,1,7973,2049,
2337,2049,3708,101,113,0,1,7982,1793,7992,1,11,10,1,7989,2049,2337,2049,3708,110,
101,0,1,7998,1793,8008,1,12,10,1,8005,2049,2337,2049,3708,108,116,0,1,8014,
1793,8024,1,13,10,1,8021,2049,2337,2049,3708,103,116,0,1,8030,1793,8040,1,14,
10,1,8037,2049,2337,2049,3708,102,101,0,1,8046,1793,8056,1,15,10,1,8053,2049,
2337,2049,3708,115,116,0,1,8062,1793,8072,1,16,10,1,8069,2049,2337,2049,3708,97,
100,0,1,8078,1793,8088,1,17,10,1,8085,2049,2337,2049,3708,115,117,0,1,8094,
1793,8104,1,18,10,1,8101,2049,2337,2049,3708,109,117,0,1,8110,1793,8120,1,19,
10,1,8117,2049,2337,2049,3708,100,105,0,1,8126,1793,8136,1,20,10,1,8133,2049,
2337,2049,3708,97,110,0,1,8142,1793,8152,1,21,10,1,8149,2049,2337,2049,3708,111,
114,0,1,8158,1793,8168,1,22,10,1,8165,2049,2337,2049,3708,120,111,0,1,8174,
1793,8184,1,23,10,1,8181,2049,2337,2049,3708,115,104,0,1,8190,1793,8200,1,24,
10,1,8197,2049,2337,2049,3708,122,114,0,1,8206,1793,8216,1,25,10,1,8213,2049,
2337,2049,3708,101,110,0,1,8222,1793,8232,1,26,10,1,8229,2049,2337,2049,3708,105,
101,0,1,8238,1793,8248,1,27,10,1,8245,2049,2337,2049,3708,105,113,0,1,8254,
1793,8264,1,28,10,1,8261,2049,2337,2049,3708,105,105,0,1,8270,1793,8280,1,29,
10,1,8277,2049,2337,3,1,0,10,7794,8296,147,112,97,99,107,0,1,7764,2049,
7804,1,7773,2049,7804,1,7782,2049,7804,1,7791,2049,7804,1,-24,24,4,1,-16,24,
17,4,1,-8,24,17,4,17,10,7720,8333,147,105,0,2,1,7764,1,2,2049,
3178,1,2,17,2,1,7773,1,2,2049,3178,1,2,17,2,1,7782,1,2,2049,
3178,1,2,17,1,7791,1,2,2049,3178,2049,8296,2049,108,10,8328,8379,147,100,0,
2049,108,10,8374,8387,147,114,0,2049,200,2049,161,15,2049,108,10,8382,8402,159,97,
115,123,0,3841,127,1,127,2049,3085,10,8395,8416,159,125,97,115,0,4097,127,10,
8409,8435,147,99,117,114,114,101,110,116,45,108,105,110,101,0,2049,3579,1,1025,
18,10,8419,8457,147,99,111,117,110,116,45,116,111,107,101,110,115,0,1793,8463,
1,32,11,10,1,8459,2049,4463,2049,82,10,8441,8484,147,110,101,120,116,45,116,
111,107,101,110,0,1,32,2049,6255,10,8470,8507,147,112,114,111,99,101,115,115,
45,116,111,107,101,110,115,0,1793,8533,2049,8484,4,1793,8526,2,2049,82,2049,2594,
1,367,1,11,2049,67,10,1,8514,2049,2076,2049,2919,10,1,8509,2049,2263,2049,367,
10,8409,8554,147,115,58,101,118,97,108,117,97,116,101,0,2049,8435,2049,4732,2049,
8435,2,2049,8457,2049,8507,10,8540,8574,134,70,108,97,103,0,0,8566,8586,147,99,
111,109,112,97,114,101,0,67440386,184946434,10,8575,8599,147,108,101,110,103,116,104,0,
659202,10,8589,8609,147,110,101,120,116,0,17043713,1,1,2577,10,8601,8627,147,110,111,
116,45,101,113,117,97,108,0,50529030,2561,0,10,8614,8639,147,108,111,111,112,0,
524549,8609,2049,8586,18157313,8574,8574,16,420610310,1,1,8639,7,10,8540,8666,147,97,114,114,
97,121,58,101,113,63,0,1048833,-1,8574,2049,8586,151066369,-1,8627,2049,8599,2049,8639,251724547,
8574,10,8653,8695,147,97,114,114,97,121,58,45,101,113,63,0,2049,8666,2049,2731,
10,8681,8706,134,76,80,0,0,8700,8716,134,73,110,100,101,120,0,0,8,0,
2049,2076,10,1,7156,1,11,2049,67,10,1,7148,2049,7095,3,10,7128,7187,147,97,
58,108,101,110,103,116,104,0,15,10,7175,7210,147,97,58,99,111,117,110,116,
101,100,45,114,101,115,117,108,116,115,0,8,2049,1847,1793,7223,2,2049,108,1,
108,2049,2263,10,1,7215,2049,2076,10,7189,7245,147,97,58,102,114,111,109,45,115,
116,114,105,110,103,0,2049,1847,1793,7264,2,2049,82,2049,108,1793,7259,2049,108,10,
1,7256,2049,4034,10,1,7249,2049,2076,10,7228,7274,134,81,0,0,7228,7289,147,97,
58,102,111,114,45,101,97,99,104,0,1,7274,1793,7319,4097,7274,2049,59,1793,7313,
2049,59,4,1793,7308,3841,7274,8,10,1,7304,2049,2076,10,1,7299,2049,2263,3,10,
1,7293,2049,3118,10,7275,7333,147,97,58,100,117,112,0,2049,1847,1793,7351,2,15,
2049,108,1793,7346,2049,108,10,1,7343,2049,7289,10,1,7337,2049,2076,10,7324,7368,147,
97,58,102,105,108,116,101,114,0,1793,7396,67502597,1793,7375,8,10,1,7373,2049,2076,
4,1793,7385,2049,108,10,1,7382,1793,7391,3,10,1,7389,2049,67,10,1,7370,2049,
7041,2049,1847,1793,7411,67502597,15,2049,108,2049,7289,10,1,7404,2049,2076,2049,1847,67502597,18,
2049,2932,67502597,16,10,7356,7429,134,70,0,0,7356,7445,147,97,58,99,111,110,116,
97,105,110,115,63,0,1,7429,2049,3085,1793,7459,67502597,11,3841,7429,22,4097,7429,10,
1,7451,2049,7289,3,3841,7429,10,7430,7489,147,97,58,99,111,110,116,97,105,110,
115,45,115,116,114,105,110,103,63,0,1,7429,2049,3085,1793,7504,67502597,2049,96,3841,
7429,22,4097,7429,10,1,7495,2049,7289,3,3841,7429,10,7467,7521,147,97,58,109,97,
112,0,1793,7527,8,2049,108,10,1,7523,2049,7041,2049,1847,1793,7542,67502597,15,2049,108,
2049,7289,10,1,7535,2049,2076,10,7512,7560,147,97,58,114,101,118,101,114,115,101,
0,2049,1847,1793,7594,2049,59,1793,7572,17,2049,2932,10,1,7568,2049,2088,2,2049,108,
1793,7588,2,15,2049,108,2049,2932,10,1,7581,2049,2263,3,10,1,7564,2049,2076,10,
7547,7608,147,97,58,110,116,104,0,17,2049,2919,10,7599,7624,147,97,58,114,101,
100,117,99,101,0,1793,7628,4,10,1,7626,2049,2076,2049,7289,10,7612,7645,147,97,
58,109,97,107,101,0,2049,7210,2049,7560,10,7635,7655,159,123,0,1,288,2049,159,
1,1556,2049,147,1,288,2049,159,10,7650,7673,159,125,0,1,305,2049,159,1,2076,
2049,147,1,1556,2049,147,1,13,2049,153,1,41,2049,153,1,2932,2049,147,1,305,
2049,159,1,7645,2049,147,10,7668,7712,134,73,48,0,115,116,0,7706,7721,134,73,
49,0,115,116,0,7715,7730,134,73,50,0,115,116,0,7724,7739,134,73,51,0,
115,116,0,7733,7752,147,111,112,99,111,100,101,0,2049,3708,46,46,0,1,7754,
1793,7764,1,0,10,1,7761,2049,2337,2049,3708,108,105,0,1,7770,1793,7780,1,1,
10,1,7777,2049,2337,2049,3708,100,117,0,1,7786,1793,7796,1,2,10,1,7793,2049,
2337,2049,3708,100,114,0,1,7802,1793,7812,1,3,10,1,7809,2049,2337,2049,3708,115,
119,0,1,7818,1793,7828,1,4,10,1,7825,2049,2337,2049,3708,112,117,0,1,7834,
1793,7844,1,5,10,1,7841,2049,2337,2049,3708,112,111,0,1,7850,1793,7860,1,6,
10,1,7857,2049,2337,2049,3708,106,117,0,1,7866,1793,7876,1,7,10,1,7873,2049,
2337,2049,3708,99,97,0,1,7882,1793,7892,1,8,10,1,7889,2049,2337,2049,3708,99,
99,0,1,7898,1793,7908,1,9,10,1,7905,2049,2337,2049,3708,114,101,0,1,7914,
1793,7924,1,10,10,1,7921,2049,2337,2049,3708,101,113,0,1,7930,1793,7940,1,11,
10,1,7937,2049,2337,2049,3708,110,101,0,1,7946,1793,7956,1,12,10,1,7953,2049,
2337,2049,3708,108,116,0,1,7962,1793,7972,1,13,10,1,7969,2049,2337,2049,3708,103,
116,0,1,7978,1793,7988,1,14,10,1,7985,2049,2337,2049,3708,102,101,0,1,7994,
1793,8004,1,15,10,1,8001,2049,2337,2049,3708,115,116,0,1,8010,1793,8020,1,16,
10,1,8017,2049,2337,2049,3708,97,100,0,1,8026,1793,8036,1,17,10,1,8033,2049,
2337,2049,3708,115,117,0,1,8042,1793,8052,1,18,10,1,8049,2049,2337,2049,3708,109,
117,0,1,8058,1793,8068,1,19,10,1,8065,2049,2337,2049,3708,100,105,0,1,8074,
1793,8084,1,20,10,1,8081,2049,2337,2049,3708,97,110,0,1,8090,1793,8100,1,21,
10,1,8097,2049,2337,2049,3708,111,114,0,1,8106,1793,8116,1,22,10,1,8113,2049,
2337,2049,3708,120,111,0,1,8122,1793,8132,1,23,10,1,8129,2049,2337,2049,3708,115,
104,0,1,8138,1793,8148,1,24,10,1,8145,2049,2337,2049,3708,122,114,0,1,8154,
1793,8164,1,25,10,1,8161,2049,2337,2049,3708,101,110,0,1,8170,1793,8180,1,26,
10,1,8177,2049,2337,2049,3708,105,101,0,1,8186,1793,8196,1,27,10,1,8193,2049,
2337,2049,3708,105,113,0,1,8202,1793,8212,1,28,10,1,8209,2049,2337,2049,3708,105,
105,0,1,8218,1793,8228,1,29,10,1,8225,2049,2337,3,1,0,10,7742,8244,147,
112,97,99,107,0,1,7712,2049,7752,1,7721,2049,7752,1,7730,2049,7752,1,7739,2049,
7752,1,-24,24,4,1,-16,24,17,4,1,-8,24,17,4,17,10,7668,8281,147,
105,0,2,1,7712,1,2,2049,3178,1,2,17,2,1,7721,1,2,2049,3178,1,
2,17,2,1,7730,1,2,2049,3178,1,2,17,1,7739,1,2,2049,3178,2049,8244,
2049,108,10,8276,8327,147,100,0,2049,108,10,8322,8335,147,114,0,2049,200,2049,161,
15,2049,108,10,8330,8350,159,97,115,123,0,3841,127,1,127,2049,3085,10,8343,8364,
159,125,97,115,0,4097,127,10,8357,8383,147,99,117,114,114,101,110,116,45,108,
105,110,101,0,2049,3579,1,1025,18,10,8367,8405,147,99,111,117,110,116,45,116,
111,107,101,110,115,0,1793,8411,1,32,11,10,1,8407,2049,4463,2049,82,10,8389,
8432,147,110,101,120,116,45,116,111,107,101,110,0,1,32,2049,6255,10,8418,8455,
147,112,114,111,99,101,115,115,45,116,111,107,101,110,115,0,1793,8481,2049,8432,
4,1793,8474,2,2049,82,2049,2594,1,367,1,11,2049,67,10,1,8462,2049,2076,2049,
2919,10,1,8457,2049,2263,2049,367,10,8357,8502,147,115,58,101,118,97,108,117,97,
116,101,0,2049,8383,2049,4732,2049,8383,2,2049,8405,2049,8455,10,8488,8522,134,70,108,
97,103,0,0,8514,8534,147,99,111,109,112,97,114,101,0,67440386,184946434,10,8523,8547,
147,108,101,110,103,116,104,0,659202,10,8537,8557,147,110,101,120,116,0,17043713,1,
1,2577,10,8549,8575,147,110,111,116,45,101,113,117,97,108,0,50529030,2561,0,10,
8562,8587,147,108,111,111,112,0,524549,8557,2049,8534,18157313,8522,8522,16,420610310,1,1,8587,
7,10,8488,8610,147,97,58,101,113,63,0,1048833,-1,8522,2049,8534,151066369,-1,8575,2049,
8547,2049,8587,251724547,8522,10,8601,8635,147,97,58,45,101,113,63,0,2049,8610,2049,2731,
10,8625,8646,134,76,80,0,0,8640,8656,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,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,8707,8852,147,110,101,120,116,0,3841,8706,1,8716,17,2049,3020,
10,8844,8868,147,112,114,101,112,0,1,8706,2049,3020,1,0,3841,8706,1,8716,17,
16,10,8860,8889,147,100,111,110,101,0,1,8706,2049,3035,10,8681,8899,147,73,0,
3841,8706,1,8716,17,15,10,8894,8911,147,74,0,3841,8706,1,8716,17,2049,2932,15,
10,8906,8925,147,75,0,3841,8706,1,8716,17,1,2,18,15,10,8920,8956,147,116,
105,109,101,115,60,119,105,116,104,45,105,110,100,101,120,62,0,2049,8868,4,
1793,8976,25,2049,2932,5,1,21,2049,2088,6,2049,8852,1,8961,7,10,1,8961,8,
3,2049,8889,10,8935,8991,159,104,111,111,107,0,1,1793,2049,108,2049,1847,2049,2919,
2049,108,10,8983,9014,147,115,101,116,45,104,111,111,107,0,2049,2919,16,10,9002,
9028,147,117,110,104,111,111,107,0,2049,2919,2,2049,2919,4,16,10,9018,9052,147,
105,111,58,101,110,117,109,101,114,97,116,101,0,27,10,9036,9066,147,105,111,
58,113,117,101,114,121,0,28,10,9054,9081,147,105,111,58,105,110,118,111,107,
101,0,29,10,9068,9091,134,83,108,111,116,0,7,9068,9107,147,105,111,58,115,
99,97,110,45,102,111,114,0,1,-1,4097,9091,2049,9052,1793,9133,2049,8899,2049,9066,
772,67502597,11,1793,9129,2049,8899,4097,9091,10,1,9124,9,10,1,9115,2049,8956,3,3841,
9091,10,9092,9150,147,99,58,112,117,116,0,1793,9152,1,0,2049,9081,10,9141,9163,
147,110,108,0,1,10,2049,9150,10,9157,9174,147,115,112,0,1,32,2049,9150,10,
9168,9186,147,116,97,98,0,1,9,2049,9150,10,9179,9200,147,115,58,112,117,116,
0,1,9150,2049,4034,10,9191,9214,147,110,58,112,117,116,0,2049,6071,2049,9200,10,
9205,9228,147,114,101,115,101,116,0,2049,1556,25,5,3,6,1,1,18,1,9230,
7,10,9219,9255,147,100,117,109,112,45,115,116,97,99,107,0,2049,1556,25,3,
5,2049,9255,6,2,2049,9214,2049,9174,10,9241,9277,147,70,82,69,69,0,2049,3579,
1,1025,18,2049,1847,18,10,9269,9303,134,105,111,58,70,105,108,101,115,121,115,
116,101,109,0,0,9286,9316,147,105,100,101,110,116,105,102,121,0,3841,9303,2049,
2578,1793,9383,1,4,2049,9107,2,2049,2613,1793,9371,3,2049,3708,73,79,32,68,69,
0,0,0,0,0,8647,8792,147,110,101,120,116,0,3841,8646,1,8656,17,2049,3020,
10,8784,8808,147,112,114,101,112,0,1,8646,2049,3020,1,0,3841,8646,1,8656,17,
16,10,8800,8829,147,100,111,110,101,0,1,8646,2049,3035,10,8625,8839,147,73,0,
3841,8646,1,8656,17,15,10,8834,8851,147,74,0,3841,8646,1,8656,17,2049,2932,15,
10,8846,8865,147,75,0,3841,8646,1,8656,17,1,2,18,15,10,8860,8896,147,116,
105,109,101,115,60,119,105,116,104,45,105,110,100,101,120,62,0,2049,8808,4,
1793,8916,25,2049,2932,5,1,21,2049,2088,6,2049,8792,1,8901,7,10,1,8901,8,
3,2049,8829,10,8875,8931,159,104,111,111,107,0,1,1793,2049,108,2049,1847,2049,2919,
2049,108,10,8923,8954,147,115,101,116,45,104,111,111,107,0,2049,2919,16,10,8942,
8968,147,117,110,104,111,111,107,0,2049,2919,2,2049,2919,4,16,10,8958,8992,147,
105,111,58,101,110,117,109,101,114,97,116,101,0,27,10,8976,9006,147,105,111,
58,113,117,101,114,121,0,28,10,8994,9021,147,105,111,58,105,110,118,111,107,
101,0,29,10,9008,9031,134,83,108,111,116,0,7,9008,9047,147,105,111,58,115,
99,97,110,45,102,111,114,0,1,-1,4097,9031,2049,8992,1793,9073,2049,8839,2049,9006,
772,67502597,11,1793,9069,2049,8839,4097,9031,10,1,9064,9,10,1,9055,2049,8896,3,3841,
9031,10,9032,9090,147,99,58,112,117,116,0,1793,9092,1,0,2049,9021,10,9081,9103,
147,110,108,0,1,10,2049,9090,10,9097,9114,147,115,112,0,1,32,2049,9090,10,
9108,9126,147,116,97,98,0,1,9,2049,9090,10,9119,9140,147,115,58,112,117,116,
0,1,9090,2049,4034,10,9131,9154,147,110,58,112,117,116,0,2049,6071,2049,9140,10,
9145,9168,147,114,101,115,101,116,0,2049,1556,25,5,3,6,1,1,18,1,9170,
7,10,9159,9195,147,100,117,109,112,45,115,116,97,99,107,0,2049,1556,25,3,
5,2049,9195,6,2,2049,9154,2049,9114,10,9181,9217,147,70,82,69,69,0,2049,3579,
1,1025,18,2049,1847,18,10,9209,9243,134,105,111,58,70,105,108,101,115,121,115,
116,101,109,0,0,9226,9256,147,105,100,101,110,116,105,102,121,0,3841,9243,2049,
2578,1793,9323,1,4,2049,9047,2,2049,2613,1793,9311,3,2049,3708,73,79,32,68,69,
86,73,67,69,32,84,89,80,69,32,48,48,48,52,32,78,79,84,32,70,
79,85,78,68,0,1,9334,2049,9200,2049,9163,10,1,9331,1793,9378,4097,9303,10,1,
9375,2049,67,10,1,9322,9,10,9269,9408,147,105,111,58,102,105,108,101,45,111,
112,101,114,97,116,105,111,110,0,2049,9316,3841,9303,2049,9081,10,9387,0,134,102,
105,108,101,58,82,0,9415,1,134,102,105,108,101,58,87,0,9425,2,134,102,
105,108,101,58,65,0,9435,3,134,102,105,108,101,58,82,43,0,9445,9469,147,
102,105,108,101,58,111,112,101,110,0,1,0,2049,9408,10,9456,9488,147,102,105,
108,101,58,99,108,111,115,101,0,1,1,2049,9408,10,9474,9506,147,102,105,108,
101,58,114,101,97,100,0,1,2,2049,9408,10,9493,9525,147,102,105,108,101,58,
119,114,105,116,101,0,1,3,2049,9408,10,9511,9543,147,102,105,108,101,58,116,
101,108,108,0,1,4,2049,9408,10,9530,9561,147,102,105,108,101,58,115,101,101,
107,0,1,5,2049,9408,10,9548,9579,147,102,105,108,101,58,115,105,122,101,0,
1,6,2049,9408,10,9566,9599,147,102,105,108,101,58,100,101,108,101,116,101,0,
1,7,2049,9408,10,9584,9618,147,102,105,108,101,58,102,108,117,115,104,0,1,
8,2049,9408,10,9604,9639,147,102,105,108,101,58,101,120,105,115,116,115,63,0,
1,0,2049,9469,2,2049,2594,1793,9653,2049,9488,2049,2439,10,1,9648,1793,9661,3,2049,
2451,10,1,9657,2049,67,10,9623,9692,147,102,105,108,101,58,111,112,101,110,60,
102,111,114,45,114,101,97,100,105,110,103,62,0,1,0,2049,9469,2,2049,9579,
4,10,9666,9726,147,102,105,108,101,58,111,112,101,110,60,102,111,114,45,97,
112,112,101,110,100,62,0,1,2,2049,9469,2,2049,9579,4,10,9701,9761,147,102,
79,85,78,68,0,1,9274,2049,9140,2049,9103,10,1,9271,1793,9318,4097,9243,10,1,
9315,2049,67,10,1,9262,9,10,9209,9348,147,105,111,58,102,105,108,101,45,111,
112,101,114,97,116,105,111,110,0,2049,9256,3841,9243,2049,9021,10,9327,0,134,102,
105,108,101,58,82,0,9355,1,134,102,105,108,101,58,87,0,9365,2,134,102,
105,108,101,58,65,0,9375,3,134,102,105,108,101,58,82,43,0,9385,9409,147,
102,105,108,101,58,111,112,101,110,0,1,0,2049,9348,10,9396,9428,147,102,105,
108,101,58,99,108,111,115,101,0,1,1,2049,9348,10,9414,9446,147,102,105,108,
101,58,114,101,97,100,0,1,2,2049,9348,10,9433,9465,147,102,105,108,101,58,
119,114,105,116,101,0,1,3,2049,9348,10,9451,9483,147,102,105,108,101,58,116,
101,108,108,0,1,4,2049,9348,10,9470,9501,147,102,105,108,101,58,115,101,101,
107,0,1,5,2049,9348,10,9488,9519,147,102,105,108,101,58,115,105,122,101,0,
1,6,2049,9348,10,9506,9539,147,102,105,108,101,58,100,101,108,101,116,101,0,
1,7,2049,9348,10,9524,9558,147,102,105,108,101,58,102,108,117,115,104,0,1,
8,2049,9348,10,9544,9579,147,102,105,108,101,58,101,120,105,115,116,115,63,0,
1,0,2049,9409,2,2049,2594,1793,9593,2049,9428,2049,2439,10,1,9588,1793,9601,3,2049,
2451,10,1,9597,2049,67,10,9563,9632,147,102,105,108,101,58,111,112,101,110,60,
102,111,114,45,114,101,97,100,105,110,103,62,0,1,0,2049,9409,2,2049,9519,
4,10,9606,9666,147,102,105,108,101,58,111,112,101,110,60,102,111,114,45,97,
112,112,101,110,100,62,0,1,2,2049,9409,2,2049,9519,4,10,9641,9701,147,102,
105,108,101,58,111,112,101,110,60,102,111,114,45,119,114,105,116,105,110,103,
62,0,1,1,2049,9469,10,9735,9773,134,70,73,68,0,0,9766,9782,134,83,105,
122,101,0,0,9774,9793,134,65,99,116,105,111,110,0,0,9783,9804,134,66,117,
102,102,101,114,0,0,9794,9814,147,45,101,111,102,63,0,3841,9773,2049,9543,3841,
9782,13,10,9805,9834,147,112,114,101,115,101,114,118,101,0,1,9773,1793,9849,1,
9782,1793,9844,8,10,1,9842,2049,3118,10,1,9838,2049,3118,10,9735,9872,147,102,105,
108,101,58,114,101,97,100,45,108,105,110,101,0,4097,9773,1793,9929,2049,1847,2,
4097,9804,2049,3486,1793,9921,3841,9773,2049,9506,2,2049,3394,1793,9898,1,13,11,10,1,
9894,1793,9906,1,10,11,10,1,9902,1793,9914,1,0,11,10,1,9910,2049,2140,22,
22,10,1,9885,2049,2234,2049,3418,3,10,1,9876,2049,3510,3841,9804,10,9854,9958,147,
62,0,1,1,2049,9409,10,9675,9713,134,70,73,68,0,0,9706,9722,134,83,105,
122,101,0,0,9714,9733,134,65,99,116,105,111,110,0,0,9723,9744,134,66,117,
102,102,101,114,0,0,9734,9754,147,45,101,111,102,63,0,3841,9713,2049,9483,3841,
9722,13,10,9745,9774,147,112,114,101,115,101,114,118,101,0,1,9713,1793,9789,1,
9722,1793,9784,8,10,1,9782,2049,3118,10,1,9778,2049,3118,10,9675,9812,147,102,105,
108,101,58,114,101,97,100,45,108,105,110,101,0,4097,9713,1793,9869,2049,1847,2,
4097,9744,2049,3486,1793,9861,3841,9713,2049,9446,2,2049,3394,1793,9838,1,13,11,10,1,
9834,1793,9846,1,10,11,10,1,9842,1793,9854,1,0,11,10,1,9850,2049,2140,22,
22,10,1,9825,2049,2234,2049,3418,3,10,1,9816,2049,3510,3841,9744,10,9794,9898,147,
102,105,108,101,58,102,111,114,45,101,97,99,104,45,108,105,110,101,0,1793,
9989,4097,9793,2049,9692,4097,9773,4097,9782,1793,9980,3841,9773,2049,9872,3841,9793,8,2049,9814,
10,1,9970,2049,2208,3841,9773,2049,9488,10,1,9960,2049,9834,10,9936,10001,134,70,73,
68,0,0,9994,10010,134,83,105,122,101,0,0,9936,10025,147,102,105,108,101,58,
115,108,117,114,112,0,1793,10055,2049,9692,4097,10001,4097,10010,2049,3486,3841,10010,1793,10046,
3841,10001,2049,9506,2049,3394,10,1,10039,2049,2263,3841,10001,2049,9488,10,1,10027,2049,3510,
10,10011,10067,134,70,73,68,0,0,10011,10081,147,102,105,108,101,58,115,112,101,
119,0,2049,9761,4097,10067,1793,10092,3841,10067,2049,9525,10,1,10087,2049,4034,3841,10067,2049,
9488,10,10068,10114,134,105,111,58,71,111,112,104,101,114,0,0,10101,10127,147,105,
100,101,110,116,105,102,121,0,3841,10114,2049,2578,1793,10194,1,5,2049,9107,2,2049,
2613,1793,10182,3,2049,3708,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,10145,2049,9200,
2049,9163,10,1,10142,1793,10189,4097,10114,10,1,10186,2049,67,10,1,10133,9,10,10068,
10212,147,103,111,112,104,101,114,58,103,101,116,0,2049,10127,1,0,3841,10114,2049,
9081,10,10198,10241,134,105,111,58,70,108,111,97,116,105,110,103,80,111,105,110,
116,0,0,10221,10254,147,105,100,101,110,116,105,102,121,0,3841,10241,2049,2578,1793,
10321,1,2,2049,9107,2,2049,2613,1793,10309,3,2049,3708,73,79,32,68,69,86,73,
9929,4097,9733,2049,9632,4097,9713,4097,9722,1793,9920,3841,9713,2049,9812,3841,9733,8,2049,9754,
10,1,9910,2049,2208,3841,9713,2049,9428,10,1,9900,2049,9774,10,9876,9941,134,70,73,
68,0,0,9934,9950,134,83,105,122,101,0,0,9876,9965,147,102,105,108,101,58,
115,108,117,114,112,0,1793,9995,2049,9632,4097,9941,4097,9950,2049,3486,3841,9950,1793,9986,
3841,9941,2049,9446,2049,3394,10,1,9979,2049,2263,3841,9941,2049,9428,10,1,9967,2049,3510,
10,9951,10007,134,70,73,68,0,0,9951,10021,147,102,105,108,101,58,115,112,101,
119,0,2049,9701,4097,10007,1793,10032,3841,10007,2049,9465,10,1,10027,2049,4034,3841,10007,2049,
9428,10,10008,10054,134,105,111,58,71,111,112,104,101,114,0,0,10041,10067,147,105,
100,101,110,116,105,102,121,0,3841,10054,2049,2578,1793,10134,1,5,2049,9047,2,2049,
2613,1793,10122,3,2049,3708,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,10085,2049,9140,
2049,9103,10,1,10082,1793,10129,4097,10054,10,1,10126,2049,67,10,1,10073,9,10,10008,
10152,147,103,111,112,104,101,114,58,103,101,116,0,2049,10067,1,0,3841,10054,2049,
9021,10,10138,10181,134,105,111,58,70,108,111,97,116,105,110,103,80,111,105,110,
116,0,0,10161,10194,147,105,100,101,110,116,105,102,121,0,3841,10181,2049,2578,1793,
10261,1,2,2049,9047,2,2049,2613,1793,10249,3,2049,3708,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,10272,2049,9200,2049,9163,10,1,10269,1793,10316,4097,10241,10,1,10313,2049,
67,10,1,10260,9,10,10198,10347,147,105,111,58,102,108,111,97,116,45,111,112,
101,114,97,116,105,111,110,0,2049,10254,3841,10241,2049,9081,10,10325,10368,147,110,58,
116,111,45,102,108,111,97,116,0,1,0,2049,10347,10,10354,10387,147,115,58,116,
111,45,102,108,111,97,116,0,1,1,2049,10347,10,10373,10407,147,102,58,116,111,
45,110,117,109,98,101,114,0,1,2,2049,10347,10,10392,10427,147,102,58,116,111,
45,115,116,114,105,110,103,0,2049,3689,2,1,3,2049,10347,10,10412,10442,147,102,
58,43,0,1,4,2049,10347,10,10435,10454,147,102,58,45,0,1,5,2049,10347,10,
10447,10466,147,102,58,42,0,1,6,2049,10347,10,10459,10478,147,102,58,47,0,1,
7,2049,10347,10,10471,10494,147,102,58,102,108,111,111,114,0,1,8,2049,10347,10,
10483,10512,147,102,58,99,101,105,108,105,110,103,0,1,9,2049,10347,10,10499,10527,
147,102,58,115,113,114,116,0,1,10,2049,10347,10,10517,10541,147,102,58,101,113,
63,0,1,11,2049,10347,10,10532,10556,147,102,58,45,101,113,63,0,1,12,2049,
10347,10,10546,10570,147,102,58,108,116,63,0,1,13,2049,10347,10,10561,10584,147,102,
58,103,116,63,0,1,14,2049,10347,10,10575,10600,147,102,58,100,101,112,116,104,
0,1,15,2049,10347,10,10589,10614,147,102,58,100,117,112,0,1,16,2049,10347,10,
10605,10629,147,102,58,100,114,111,112,0,1,17,2049,10347,10,10619,10644,147,102,58,
115,119,97,112,0,1,18,2049,10347,10,10634,10658,147,102,58,108,111,103,0,1,
19,2049,10347,10,10649,10674,147,102,58,112,111,119,101,114,0,1,20,2049,10347,10,
10663,10688,147,102,58,115,105,110,0,1,21,2049,10347,10,10679,10702,147,102,58,99,
111,115,0,1,22,2049,10347,10,10693,10716,147,102,58,116,97,110,0,1,23,2049,
10347,10,10707,10731,147,102,58,97,115,105,110,0,1,24,2049,10347,10,10721,10746,147,
102,58,97,99,111,115,0,1,25,2049,10347,10,10736,10761,147,102,58,97,116,97,
110,0,1,26,2049,10347,10,10751,10776,147,102,58,112,117,115,104,0,1,27,2049,
10347,10,10766,10790,147,102,58,112,111,112,0,1,28,2049,10347,10,10781,10807,147,102,
58,97,100,101,112,116,104,0,1,29,2049,10347,10,10795,10824,147,102,58,115,113,
117,97,114,101,0,2049,10614,2049,10466,10,10812,10839,147,102,58,111,118,101,114,0,
2049,10776,2049,10614,2049,10790,2049,10644,10,10829,10858,147,102,58,116,117,99,107,0,2049,
10614,2049,10776,2049,10644,2049,10790,10,10848,10876,147,102,58,110,105,112,0,2049,10644,2049,
10629,10,10867,10896,147,102,58,100,114,111,112,45,112,97,105,114,0,2049,10629,2049,
10629,10,10881,10915,147,102,58,100,117,112,45,112,97,105,114,0,2049,10839,2049,10839,
10,10901,10929,147,102,58,114,111,116,0,2049,10776,2049,10644,2049,10790,2049,10644,10,10920,
10953,147,102,58,112,111,115,105,116,105,118,101,63,0,1,0,2049,10368,2049,10584,
10,10938,10975,147,102,58,110,101,103,97,116,105,118,101,63,0,1,0,2049,10368,
2049,10570,10,10960,10994,147,102,58,110,101,103,97,116,101,0,1,-1,2049,10368,2049,
10466,10,10982,11010,147,102,58,97,98,115,0,2049,10614,2049,10975,1793,11019,2049,10994,10,
1,11016,9,10,11001,11035,159,112,114,101,102,105,120,58,46,0,2049,1818,1793,11042,
2049,3734,10,1,11039,1793,11049,2049,3663,10,1,11046,2049,67,1,10387,2049,147,10,11023,
11067,147,102,58,112,117,116,0,2049,10427,2049,9200,10,11058,11080,147,102,58,80,73,
0,2049,3708,51,46,49,52,49,53,57,50,0,1,11082,2049,10387,10,11072,11103,147,
102,58,69,0,2049,3708,50,46,55,49,56,50,56,49,0,1,11105,2049,10387,10,
11096,11128,147,102,58,78,65,78,0,2049,3708,48,0,1,11130,2049,10387,2049,3708,48,
0,1,11138,2049,10387,2049,10478,10,11119,11156,147,102,58,73,78,70,0,2049,3708,49,
46,48,0,1,11158,2049,10387,2049,3708,48,0,1,11168,2049,10387,2049,10478,10,11147,11187,
147,102,58,45,73,78,70,0,2049,3708,45,49,46,48,0,1,11189,2049,10387,2049,
3708,48,0,1,11200,2049,10387,2049,10478,10,11177,11219,147,102,58,110,97,110,63,0,
2049,10614,2049,10556,10,11209,11234,147,102,58,105,110,102,63,0,2049,11156,2049,10541,10,
11224,11250,147,102,58,45,105,110,102,63,0,2049,11187,2049,10541,10,11239,11266,147,102,
58,114,111,117,110,100,0,2049,10614,2049,10975,1793,11287,2049,3708,48,46,53,0,1,
11274,2049,10387,2049,10454,2049,10512,10,1,11272,1793,11306,2049,3708,48,46,53,0,1,11293,
2049,10387,2049,10442,2049,10494,10,1,11291,2049,67,10,11255,11320,147,102,58,109,105,110,
0,2049,10915,2049,10570,1,10629,1,10876,2049,67,10,11311,11340,147,102,58,109,97,120,
0,2049,10915,2049,10584,1,10629,1,10876,2049,67,10,11331,11362,147,102,58,108,105,109,
105,116,0,2049,10644,2049,10776,2049,11320,2049,10790,2049,11340,10,11351,11387,147,102,58,98,
101,116,119,101,101,110,63,0,2049,10929,2049,10614,2049,10776,2049,10929,2049,10929,2049,11362,
2049,10790,2049,10541,10,11373,11413,147,102,58,105,110,99,0,2049,3708,49,0,1,11415,
2049,10387,2049,10442,10,11404,11433,147,102,58,100,101,99,0,2049,3708,49,0,1,11435,
2049,10387,2049,10454,10,11424,11454,147,102,58,99,97,115,101,0,2049,10839,2049,10541,1793,
11466,2049,10629,8,1,-1,10,1,11460,1793,11474,3,1,0,10,1,11470,2049,67,25,
6,771,10,11444,11492,147,102,58,115,105,103,110,0,2049,10614,2049,3708,48,0,1,
11496,2049,10387,2049,10541,1793,11511,1,0,2049,10629,10,1,11506,2049,2505,2049,3708,48,0,
1,11517,2049,10387,2049,10584,1793,11530,1,1,10,1,11527,1793,11537,1,-1,10,1,11534,
2049,67,10,11482,2147483646,134,101,58,77,65,88,0,11542,-2147483646,134,101,58,77,73,78,
0,11551,-2147483648,134,101,58,78,65,78,0,11560,2147483647,134,101,58,73,78,70,0,11569,
-2147483647,134,101,58,45,73,78,70,0,11578,11596,147,101,58,110,63,0,1,-2147483646,2049,
2919,1,2147483646,2049,2932,2049,2950,10,11588,11617,147,101,58,109,97,120,63,0,1,2147483646,
11,10,11607,11631,147,101,58,109,105,110,63,0,1,-2147483646,11,10,11621,11646,147,101,
58,122,101,114,111,63,0,2049,2578,10,11635,11659,147,101,58,110,97,110,63,0,
1,-2147483648,11,10,11649,11673,147,101,58,105,110,102,63,0,1,2147483647,11,10,11663,11688,
147,101,58,45,105,110,102,63,0,1,-2147483647,11,10,11677,11702,147,101,58,99,108,
105,112,0,1,-2147483646,1,2147483646,2049,2902,10,11692,11717,147,102,58,69,49,0,1793,11719,
2049,3708,49,46,101,53,0,1,11721,2049,10387,10,11709,11743,147,102,58,45,115,104,
105,102,116,0,2049,11717,2049,10466,10,11731,11760,147,102,58,43,115,104,105,102,116,
0,2049,11717,2049,10478,10,11748,11782,147,102,58,115,105,103,110,101,100,45,115,113,
114,116,0,2049,10614,2049,11492,2049,11010,2049,10527,2049,10368,2049,10466,10,11765,11808,147,102,
58,43,101,110,99,111,100,101,0,2049,11782,2049,11743,10,11795,11826,147,102,58,45,
101,110,99,111,100,101,0,2049,10614,2049,11492,2049,11760,2049,10614,2049,10466,2049,10368,2049,
10466,10,11813,11860,147,102,58,115,105,103,110,101,100,45,115,113,117,97,114,101,
0,2049,10614,2049,11492,2049,10614,2049,10466,2049,10368,2049,10466,10,11841,11883,147,102,58,116,
111,45,101,0,2049,10614,2049,11219,1793,11895,2049,10629,3,1,-2147483648,10,1,11889,2049,2505,
2049,10614,2049,11234,1793,11911,2049,10629,3,1,2147483647,10,1,11905,2049,2505,2049,10614,2049,11250,
1793,11927,2049,10629,3,1,-2147483647,10,1,11921,2049,2505,2049,11808,2049,11266,2049,10407,2049,11702,
1,-2147483646,1793,11946,2049,10629,10,1,11943,2049,2293,1,2147483646,1793,11957,2049,10629,10,1,11954,
2049,2293,10,11873,11972,147,101,58,116,111,45,102,0,1,-2147483648,1793,11980,3,2049,11128,
10,1,11976,2049,2293,1,2147483647,1793,11992,3,2049,11156,10,1,11988,2049,2293,1,-2147483647,1793,
12004,3,2049,11187,10,1,12000,2049,2293,2049,10368,2049,11826,10,11962,12024,147,102,58,115,
116,111,114,101,0,1793,12029,2049,11883,10,1,12026,2049,2076,16,10,12013,12046,147,102,
58,102,101,116,99,104,0,15,2049,11972,10,12035,12066,147,102,58,100,117,109,112,
45,115,116,97,99,107,0,2049,10600,2,1793,12074,2049,10776,10,1,12071,2049,2263,1793,
12089,2049,10790,2049,10614,2049,11067,2049,9174,10,1,12080,2049,2263,10,12050,12111,147,102,58,
100,117,109,112,45,97,115,116,97,99,107,0,2049,10807,2,1793,12119,2049,10790,10,
1,12116,2049,2263,1793,12134,2049,10614,2049,11067,2049,9174,2049,10776,10,1,12125,2049,2263,10,
12094,12148,147,101,58,112,117,116,0,1,2147483646,1793,12165,2049,3708,101,58,77,65,88,
0,1,12154,2049,9200,10,1,12152,2049,2293,1,-2147483646,1793,12186,2049,3708,101,58,77,73,
78,0,1,12175,2049,9200,10,1,12173,2049,2293,1,0,1793,12205,2049,3708,101,58,48,
0,1,12196,2049,9200,10,1,12194,2049,2293,1,-2147483648,1793,12226,2049,3708,101,58,78,65,
78,0,1,12215,2049,9200,10,1,12213,2049,2293,1,2147483647,1793,12247,2049,3708,101,58,73,
78,70,0,1,12236,2049,9200,10,1,12234,2049,2293,1,-2147483647,1793,12269,2049,3708,101,58,
45,73,78,70,0,1,12257,2049,9200,10,1,12255,2049,2293,2049,11972,2049,11067,10,12139,
12296,134,105,111,58,85,110,105,120,83,121,115,99,97,108,108,0,0,12278,12309,
147,105,100,101,110,116,105,102,121,0,3841,12296,2049,2578,1793,12376,1,8,2049,9107,
2,2049,2613,1793,12364,3,2049,3708,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,12327,
2049,9200,2049,9163,10,1,12324,1793,12371,4097,12296,10,1,12368,2049,67,10,1,12315,9,
10,12139,12399,147,105,111,58,117,110,105,120,45,115,121,115,99,97,108,108,0,
2049,12309,3841,12296,2049,9081,10,12380,12421,147,117,110,105,120,58,115,121,115,116,101,
109,0,1,0,2049,12399,10,12406,12439,147,117,110,105,120,58,102,111,114,107,0,
1,1,2049,12399,10,12426,12458,147,117,110,105,120,58,101,120,101,99,48,0,1,
2,2049,12399,10,12444,12477,147,117,110,105,120,58,101,120,101,99,49,0,1,3,
2049,12399,10,12463,12496,147,117,110,105,120,58,101,120,101,99,50,0,1,4,2049,
12399,10,12482,12515,147,117,110,105,120,58,101,120,101,99,51,0,1,5,2049,12399,
10,12501,12533,147,117,110,105,120,58,101,120,105,116,0,1,6,2049,12399,10,12520,
12553,147,117,110,105,120,58,103,101,116,112,105,100,0,1,7,2049,12399,10,12538,
12571,147,117,110,105,120,58,119,97,105,116,0,1,8,2049,12399,10,12558,12589,147,
117,110,105,120,58,107,105,108,108,0,1,9,2049,12399,10,12576,12608,147,117,110,
105,120,58,112,111,112,101,110,0,1,10,2049,12399,10,12594,12628,147,117,110,105,
120,58,112,99,108,111,115,101,0,1,11,2049,12399,10,12613,12647,147,117,110,105,
120,58,119,114,105,116,101,0,1793,12653,2,2049,82,10,1,12649,2049,2076,1,12,
2049,12399,10,12633,12676,147,117,110,105,120,58,99,104,100,105,114,0,1,13,2049,
12399,10,12662,12696,147,117,110,105,120,58,103,101,116,101,110,118,0,1,14,2049,
12399,10,12681,12716,147,117,110,105,120,58,112,117,116,101,110,118,0,1,15,2049,
12399,10,12701,12735,147,117,110,105,120,58,115,108,101,101,112,0,1,16,2049,12399,
10,12721,12757,147,117,110,105,120,58,105,111,58,110,58,112,117,116,0,1,17,
2049,12399,10,12740,12779,147,117,110,105,120,58,105,111,58,115,58,112,117,116,0,
1,18,2049,12399,10,12762,12797,147,117,110,105,120,58,116,105,109,101,0,1,19,
2049,12399,10,12784,12818,147,117,110,105,120,58,103,101,116,45,99,119,100,0,2049,
3708,112,119,100,0,1,12820,1,0,2049,12608,2,2049,9872,2049,3957,4,2049,12628,1,
0,2049,3708,115,121,115,58,97,114,103,118,0,1,12842,2049,200,2049,161,15,8,
2049,82,17,2049,3708,47,0,1,12864,2049,4016,10,12802,12898,147,117,110,105,120,58,
78,68,0,1,10212,2049,9140,2049,9103,10,1,10209,1793,10256,4097,10181,10,1,10253,2049,
67,10,1,10200,9,10,10138,10287,147,105,111,58,102,108,111,97,116,45,111,112,
101,114,97,116,105,111,110,0,2049,10194,3841,10181,2049,9021,10,10265,10308,147,110,58,
116,111,45,102,108,111,97,116,0,1,0,2049,10287,10,10294,10327,147,115,58,116,
111,45,102,108,111,97,116,0,1,1,2049,10287,10,10313,10347,147,102,58,116,111,
45,110,117,109,98,101,114,0,1,2,2049,10287,10,10332,10367,147,102,58,116,111,
45,115,116,114,105,110,103,0,2049,3689,2,1,3,2049,10287,10,10352,10382,147,102,
58,43,0,1,4,2049,10287,10,10375,10394,147,102,58,45,0,1,5,2049,10287,10,
10387,10406,147,102,58,42,0,1,6,2049,10287,10,10399,10418,147,102,58,47,0,1,
7,2049,10287,10,10411,10434,147,102,58,102,108,111,111,114,0,1,8,2049,10287,10,
10423,10452,147,102,58,99,101,105,108,105,110,103,0,1,9,2049,10287,10,10439,10467,
147,102,58,115,113,114,116,0,1,10,2049,10287,10,10457,10481,147,102,58,101,113,
63,0,1,11,2049,10287,10,10472,10496,147,102,58,45,101,113,63,0,1,12,2049,
10287,10,10486,10510,147,102,58,108,116,63,0,1,13,2049,10287,10,10501,10524,147,102,
58,103,116,63,0,1,14,2049,10287,10,10515,10540,147,102,58,100,101,112,116,104,
0,1,15,2049,10287,10,10529,10554,147,102,58,100,117,112,0,1,16,2049,10287,10,
10545,10569,147,102,58,100,114,111,112,0,1,17,2049,10287,10,10559,10584,147,102,58,
115,119,97,112,0,1,18,2049,10287,10,10574,10598,147,102,58,108,111,103,0,1,
19,2049,10287,10,10589,10614,147,102,58,112,111,119,101,114,0,1,20,2049,10287,10,
10603,10628,147,102,58,115,105,110,0,1,21,2049,10287,10,10619,10642,147,102,58,99,
111,115,0,1,22,2049,10287,10,10633,10656,147,102,58,116,97,110,0,1,23,2049,
10287,10,10647,10671,147,102,58,97,115,105,110,0,1,24,2049,10287,10,10661,10686,147,
102,58,97,99,111,115,0,1,25,2049,10287,10,10676,10701,147,102,58,97,116,97,
110,0,1,26,2049,10287,10,10691,10716,147,102,58,112,117,115,104,0,1,27,2049,
10287,10,10706,10730,147,102,58,112,111,112,0,1,28,2049,10287,10,10721,10747,147,102,
58,97,100,101,112,116,104,0,1,29,2049,10287,10,10735,10764,147,102,58,115,113,
117,97,114,101,0,2049,10554,2049,10406,10,10752,10779,147,102,58,111,118,101,114,0,
2049,10716,2049,10554,2049,10730,2049,10584,10,10769,10798,147,102,58,116,117,99,107,0,2049,
10554,2049,10716,2049,10584,2049,10730,10,10788,10816,147,102,58,110,105,112,0,2049,10584,2049,
10569,10,10807,10836,147,102,58,100,114,111,112,45,112,97,105,114,0,2049,10569,2049,
10569,10,10821,10855,147,102,58,100,117,112,45,112,97,105,114,0,2049,10779,2049,10779,
10,10841,10869,147,102,58,114,111,116,0,2049,10716,2049,10584,2049,10730,2049,10584,10,10860,
10893,147,102,58,112,111,115,105,116,105,118,101,63,0,1,0,2049,10308,2049,10524,
10,10878,10915,147,102,58,110,101,103,97,116,105,118,101,63,0,1,0,2049,10308,
2049,10510,10,10900,10934,147,102,58,110,101,103,97,116,101,0,1,-1,2049,10308,2049,
10406,10,10922,10950,147,102,58,97,98,115,0,2049,10554,2049,10915,1793,10959,2049,10934,10,
1,10956,9,10,10941,10975,159,112,114,101,102,105,120,58,46,0,2049,1818,1793,10982,
2049,3734,10,1,10979,1793,10989,2049,3663,10,1,10986,2049,67,1,10327,2049,147,10,10963,
11007,147,102,58,112,117,116,0,2049,10367,2049,9140,10,10998,11020,147,102,58,80,73,
0,2049,3708,51,46,49,52,49,53,57,50,0,1,11022,2049,10327,10,11012,11043,147,
102,58,69,0,2049,3708,50,46,55,49,56,50,56,49,0,1,11045,2049,10327,10,
11036,11068,147,102,58,78,65,78,0,2049,3708,48,0,1,11070,2049,10327,2049,3708,48,
0,1,11078,2049,10327,2049,10418,10,11059,11096,147,102,58,73,78,70,0,2049,3708,49,
46,48,0,1,11098,2049,10327,2049,3708,48,0,1,11108,2049,10327,2049,10418,10,11087,11127,
147,102,58,45,73,78,70,0,2049,3708,45,49,46,48,0,1,11129,2049,10327,2049,
3708,48,0,1,11140,2049,10327,2049,10418,10,11117,11159,147,102,58,110,97,110,63,0,
2049,10554,2049,10496,10,11149,11174,147,102,58,105,110,102,63,0,2049,11096,2049,10481,10,
11164,11190,147,102,58,45,105,110,102,63,0,2049,11127,2049,10481,10,11179,11206,147,102,
58,114,111,117,110,100,0,2049,10554,2049,10915,1793,11227,2049,3708,48,46,53,0,1,
11214,2049,10327,2049,10394,2049,10452,10,1,11212,1793,11246,2049,3708,48,46,53,0,1,11233,
2049,10327,2049,10382,2049,10434,10,1,11231,2049,67,10,11195,11260,147,102,58,109,105,110,
0,2049,10855,2049,10510,1,10569,1,10816,2049,67,10,11251,11280,147,102,58,109,97,120,
0,2049,10855,2049,10524,1,10569,1,10816,2049,67,10,11271,11302,147,102,58,108,105,109,
105,116,0,2049,10584,2049,10716,2049,11260,2049,10730,2049,11280,10,11291,11327,147,102,58,98,
101,116,119,101,101,110,63,0,2049,10869,2049,10554,2049,10716,2049,10869,2049,10869,2049,11302,
2049,10730,2049,10481,10,11313,11353,147,102,58,105,110,99,0,2049,3708,49,0,1,11355,
2049,10327,2049,10382,10,11344,11373,147,102,58,100,101,99,0,2049,3708,49,0,1,11375,
2049,10327,2049,10394,10,11364,11394,147,102,58,99,97,115,101,0,2049,10779,2049,10481,1793,
11406,2049,10569,8,1,-1,10,1,11400,1793,11414,3,1,0,10,1,11410,2049,67,25,
6,771,10,11384,11432,147,102,58,115,105,103,110,0,2049,10554,2049,3708,48,0,1,
11436,2049,10327,2049,10481,1793,11451,1,0,2049,10569,10,1,11446,2049,2505,2049,3708,48,0,
1,11457,2049,10327,2049,10524,1793,11470,1,1,10,1,11467,1793,11477,1,-1,10,1,11474,
2049,67,10,11422,2147483646,134,101,58,77,65,88,0,11482,-2147483646,134,101,58,77,73,78,
0,11491,-2147483648,134,101,58,78,65,78,0,11500,2147483647,134,101,58,73,78,70,0,11509,
-2147483647,134,101,58,45,73,78,70,0,11518,11536,147,101,58,110,63,0,1,-2147483646,2049,
2919,1,2147483646,2049,2932,2049,2950,10,11528,11557,147,101,58,109,97,120,63,0,1,2147483646,
11,10,11547,11571,147,101,58,109,105,110,63,0,1,-2147483646,11,10,11561,11586,147,101,
58,122,101,114,111,63,0,2049,2578,10,11575,11599,147,101,58,110,97,110,63,0,
1,-2147483648,11,10,11589,11613,147,101,58,105,110,102,63,0,1,2147483647,11,10,11603,11628,
147,101,58,45,105,110,102,63,0,1,-2147483647,11,10,11617,11642,147,101,58,99,108,
105,112,0,1,-2147483646,1,2147483646,2049,2902,10,11632,11657,147,102,58,69,49,0,1793,11659,
2049,3708,49,46,101,53,0,1,11661,2049,10327,10,11649,11683,147,102,58,45,115,104,
105,102,116,0,2049,11657,2049,10406,10,11671,11700,147,102,58,43,115,104,105,102,116,
0,2049,11657,2049,10418,10,11688,11722,147,102,58,115,105,103,110,101,100,45,115,113,
114,116,0,2049,10554,2049,11432,2049,10950,2049,10467,2049,10308,2049,10406,10,11705,11748,147,102,
58,43,101,110,99,111,100,101,0,2049,11722,2049,11683,10,11735,11766,147,102,58,45,
101,110,99,111,100,101,0,2049,10554,2049,11432,2049,11700,2049,10554,2049,10406,2049,10308,2049,
10406,10,11753,11800,147,102,58,115,105,103,110,101,100,45,115,113,117,97,114,101,
0,2049,10554,2049,11432,2049,10554,2049,10406,2049,10308,2049,10406,10,11781,11823,147,102,58,116,
111,45,101,0,2049,10554,2049,11159,1793,11835,2049,10569,3,1,-2147483648,10,1,11829,2049,2505,
2049,10554,2049,11174,1793,11851,2049,10569,3,1,2147483647,10,1,11845,2049,2505,2049,10554,2049,11190,
1793,11867,2049,10569,3,1,-2147483647,10,1,11861,2049,2505,2049,11748,2049,11206,2049,10347,2049,11642,
1,-2147483646,1793,11886,2049,10569,10,1,11883,2049,2293,1,2147483646,1793,11897,2049,10569,10,1,11894,
2049,2293,10,11813,11912,147,101,58,116,111,45,102,0,1,-2147483648,1793,11920,3,2049,11068,
10,1,11916,2049,2293,1,2147483647,1793,11932,3,2049,11096,10,1,11928,2049,2293,1,-2147483647,1793,
11944,3,2049,11127,10,1,11940,2049,2293,2049,10308,2049,11766,10,11902,11964,147,102,58,115,
116,111,114,101,0,1793,11969,2049,11823,10,1,11966,2049,2076,16,10,11953,11986,147,102,
58,102,101,116,99,104,0,15,2049,11912,10,11975,12006,147,102,58,100,117,109,112,
45,115,116,97,99,107,0,2049,10540,2,1793,12014,2049,10716,10,1,12011,2049,2263,1793,
12029,2049,10730,2049,10554,2049,11007,2049,9114,10,1,12020,2049,2263,10,11990,12051,147,102,58,
100,117,109,112,45,97,115,116,97,99,107,0,2049,10747,2,1793,12059,2049,10730,10,
1,12056,2049,2263,1793,12074,2049,10554,2049,11007,2049,9114,2049,10716,10,1,12065,2049,2263,10,
12034,12088,147,101,58,112,117,116,0,1,2147483646,1793,12105,2049,3708,101,58,77,65,88,
0,1,12094,2049,9140,10,1,12092,2049,2293,1,-2147483646,1793,12126,2049,3708,101,58,77,73,
78,0,1,12115,2049,9140,10,1,12113,2049,2293,1,0,1793,12145,2049,3708,101,58,48,
0,1,12136,2049,9140,10,1,12134,2049,2293,1,-2147483648,1793,12166,2049,3708,101,58,78,65,
78,0,1,12155,2049,9140,10,1,12153,2049,2293,1,2147483647,1793,12187,2049,3708,101,58,73,
78,70,0,1,12176,2049,9140,10,1,12174,2049,2293,1,-2147483647,1793,12209,2049,3708,101,58,
45,73,78,70,0,1,12197,2049,9140,10,1,12195,2049,2293,2049,11912,2049,11007,10,12079,
12236,134,105,111,58,85,110,105,120,83,121,115,99,97,108,108,0,0,12218,12249,
147,105,100,101,110,116,105,102,121,0,3841,12236,2049,2578,1793,12316,1,8,2049,9047,
2,2049,2613,1793,12304,3,2049,3708,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,12267,
2049,9140,2049,9103,10,1,12264,1793,12311,4097,12236,10,1,12308,2049,67,10,1,12255,9,
10,12079,12339,147,105,111,58,117,110,105,120,45,115,121,115,99,97,108,108,0,
2049,12249,3841,12236,2049,9021,10,12320,12361,147,117,110,105,120,58,115,121,115,116,101,
109,0,1,0,2049,12339,10,12346,12379,147,117,110,105,120,58,102,111,114,107,0,
1,1,2049,12339,10,12366,12398,147,117,110,105,120,58,101,120,101,99,48,0,1,
2,2049,12339,10,12384,12417,147,117,110,105,120,58,101,120,101,99,49,0,1,3,
2049,12339,10,12403,12436,147,117,110,105,120,58,101,120,101,99,50,0,1,4,2049,
12339,10,12422,12455,147,117,110,105,120,58,101,120,101,99,51,0,1,5,2049,12339,
10,12441,12473,147,117,110,105,120,58,101,120,105,116,0,1,6,2049,12339,10,12460,
12493,147,117,110,105,120,58,103,101,116,112,105,100,0,1,7,2049,12339,10,12478,
12511,147,117,110,105,120,58,119,97,105,116,0,1,8,2049,12339,10,12498,12529,147,
117,110,105,120,58,107,105,108,108,0,1,9,2049,12339,10,12516,12548,147,117,110,
105,120,58,112,111,112,101,110,0,1,10,2049,12339,10,12534,12568,147,117,110,105,
120,58,112,99,108,111,115,101,0,1,11,2049,12339,10,12553,12587,147,117,110,105,
120,58,119,114,105,116,101,0,1793,12593,2,2049,82,10,1,12589,2049,2076,1,12,
2049,12339,10,12573,12616,147,117,110,105,120,58,99,104,100,105,114,0,1,13,2049,
12339,10,12602,12636,147,117,110,105,120,58,103,101,116,101,110,118,0,1,14,2049,
12339,10,12621,12656,147,117,110,105,120,58,112,117,116,101,110,118,0,1,15,2049,
12339,10,12641,12675,147,117,110,105,120,58,115,108,101,101,112,0,1,16,2049,12339,
10,12661,12697,147,117,110,105,120,58,105,111,58,110,58,112,117,116,0,1,17,
2049,12339,10,12680,12719,147,117,110,105,120,58,105,111,58,115,58,112,117,116,0,
1,18,2049,12339,10,12702,12737,147,117,110,105,120,58,116,105,109,101,0,1,19,
2049,12339,10,12724,12758,147,117,110,105,120,58,103,101,116,45,99,119,100,0,2049,
3708,112,119,100,0,1,12760,1,0,2049,12548,2,2049,9812,2049,3957,4,2049,12568,1,
0,2049,3708,115,121,115,58,97,114,103,118,0,1,12782,2049,200,2049,161,15,8,
2049,82,17,2049,3708,47,0,1,12804,2049,4016,10,12742,12838,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,
3708,108,115,32,45,49,32,124,32,119,99,32,45,108,0,1,12900,1,0,2049,
12608,2,2049,9872,2049,3957,2049,221,4,2049,12628,10,12871,12953,147,117,110,105,120,58,
3708,108,115,32,45,49,32,124,32,119,99,32,45,108,0,1,12840,1,0,2049,
12548,2,2049,9812,2049,3957,2049,221,4,2049,12568,10,12811,12893,147,117,110,105,120,58,
102,111,114,45,101,97,99,104,45,102,105,108,101,0,2049,3708,108,115,32,45,
49,32,45,112,0,1,12955,1,0,2049,12608,2049,12898,1793,12988,1793,12983,2049,9872,2049,
3663,67502597,8,10,1,12976,2049,2088,10,1,12974,2049,2263,2049,12628,3,10,12931,13011,147,
49,32,45,112,0,1,12895,1,0,2049,12548,2049,12838,1793,12928,1793,12923,2049,9812,2049,
3663,67502597,8,10,1,12916,2049,2088,10,1,12914,2049,2263,2049,12568,3,10,12871,12951,147,
114,97,110,100,111,109,58,98,121,116,101,0,2049,3708,47,100,101,118,47,117,
114,97,110,100,111,109,0,1,13013,1,0,2049,9469,1,9506,2049,2088,2049,9488,10,
12931,13051,147,110,58,114,97,110,100,111,109,0,2049,13011,1,-8,24,2049,13011,17,
1,-8,24,2049,13011,17,1,8,24,2049,13011,17,10,13039,13080,134,74,85,77,80,
0,-2023489525,-180170029,1872770499,2012404571,13072,13089,134,107,0,0,13084,13095,134,116,0,0,13090,13102,134,
115,48,0,0,13096,13109,134,115,49,0,0,13103,13116,134,115,50,0,0,13110,13123,
134,115,51,0,0,13117,13134,147,114,101,115,101,101,100,0,2,4097,13109,2,4097,
13116,2,4097,13123,2,4097,13089,4097,13095,10,13124,13157,147,114,111,116,108,0,4097,13089,
1793,13167,3841,13089,2049,2770,24,10,1,13161,1793,13178,1,32,3841,13089,18,24,10,1,
13171,2049,2103,22,10,13149,13193,147,114,101,115,42,42,0,3841,13102,1,5,19,1,
7,2049,13157,1,9,19,10,13184,13214,147,110,101,120,116,0,3841,13109,2,1,-9,
24,5,3841,13123,3841,13102,3841,13116,386269701,1285,386269701,100926980,85394690,386269701,386270726,4097,13116,4097,13109,4097,
13102,1,11,2049,13157,4097,13123,10,13206,13257,147,120,111,114,45,101,114,0,386860290,5,
386860290,5,386860290,5,386860290,5,101058054,101058054,10,13247,13277,147,106,117,109,112,63,0,1793,13284,
1,13080,17,15,10,1,13279,2049,2076,1,1,4,2049,2770,24,21,10,13268,13305,147,
105,110,110,101,114,0,1,32,1793,13332,2,2049,8899,2049,13277,1793,13326,1793,13321,2049,
13257,10,1,13318,2049,2076,10,1,13316,9,2049,13214,10,1,13309,2049,8956,10,13039,13362,
114,97,110,100,111,109,0,1,12953,1,0,2049,9409,1,9446,2049,2088,2049,9428,10,
12871,12991,147,110,58,114,97,110,100,111,109,0,2049,12951,1,-8,24,2049,12951,17,
1,-8,24,2049,12951,17,1,8,24,2049,12951,17,10,12979,13020,134,74,85,77,80,
0,-2023489525,-180170029,1872770499,2012404571,13012,13029,134,107,0,0,13024,13035,134,116,0,0,13030,13042,134,
115,48,0,0,13036,13049,134,115,49,0,0,13043,13056,134,115,50,0,0,13050,13063,
134,115,51,0,0,13057,13074,147,114,101,115,101,101,100,0,2,4097,13049,2,4097,
13056,2,4097,13063,2,4097,13029,4097,13035,10,13064,13097,147,114,111,116,108,0,4097,13029,
1793,13107,3841,13029,2049,2770,24,10,1,13101,1793,13118,1,32,3841,13029,18,24,10,1,
13111,2049,2103,22,10,13089,13133,147,114,101,115,42,42,0,3841,13042,1,5,19,1,
7,2049,13097,1,9,19,10,13124,13154,147,110,101,120,116,0,3841,13049,2,1,-9,
24,5,3841,13063,3841,13042,3841,13056,386269701,1285,386269701,100926980,85394690,386269701,386270726,4097,13056,4097,13049,4097,
13042,1,11,2049,13097,4097,13063,10,13146,13197,147,120,111,114,45,101,114,0,386860290,5,
386860290,5,386860290,5,386860290,5,101058054,101058054,10,13187,13217,147,106,117,109,112,63,0,1793,13224,
1,13020,17,15,10,1,13219,2049,2076,1,1,4,2049,2770,24,21,10,13208,13245,147,
105,110,110,101,114,0,1,32,1793,13272,2,2049,8839,2049,13217,1793,13266,1793,13261,2049,
13197,10,1,13258,2049,2076,10,1,13256,9,2049,13154,10,1,13249,2049,8896,10,12979,13302,
147,114,97,110,100,111,109,58,120,111,114,111,115,104,105,114,111,49,50,56,
42,42,0,2049,13214,2049,13193,10,13337,13397,147,114,97,110,100,111,109,58,120,111,
42,42,0,2049,13154,2049,13133,10,13277,13337,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,13123,1,0,1,13116,1,0,1,13109,1,0,1,13102,1,4,1793,13423,2049,8899,
2049,13305,3,10,1,13417,2049,8956,269488144,10,13367,13463,147,114,97,110,100,111,109,58,
1,13063,1,0,1,13056,1,0,1,13049,1,0,1,13042,1,4,1793,13363,2049,8839,
2049,13245,3,10,1,13357,2049,8896,269488144,10,13307,13403,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,13134,1,100,1793,13472,2049,13214,10,1,13469,2049,2263,10,13429,13512,
101,101,100,0,2049,13074,1,100,1793,13412,2049,13154,10,1,13409,2049,2263,10,13369,13452,
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,13102,4097,13109,4097,13116,4097,
13123,10,13477,13531,134,83,116,97,116,101,115,0,0,0,0,0,0,0,0,0,
42,42,58,116,101,115,116,45,115,101,101,100,0,4097,13042,4097,13049,4097,13056,4097,
13063,10,13417,13471,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,
@ -707,126 +704,126 @@ int32_t ngaImage[] = { 1793,16369,16547,16589,201906,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,0,0,13521,14165,134,
73,110,100,101,120,0,0,14156,14175,147,114,101,115,101,116,0,1,13531,67502597,2049,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,13461,14105,134,
73,110,100,101,120,0,0,14096,14115,147,114,101,115,101,116,0,1,13471,67502597,2049,
2932,17,2,15,1,30,24,4,15,23,1,1812433253,19,67502597,17,2049,2552,21,4,1,
13531,17,16,10,14166,14217,147,114,97,110,100,111,109,105,122,101,100,0,1,1,
1793,14231,2,2049,14175,2049,2919,2,1,624,14,10,1,14221,2049,2234,3,10,14203,14242,
147,121,0,2,2049,2919,1,624,788,1,13531,17,15,2049,2552,21,4,1,13531,17,
15,1,-31,24,17,10,14237,14276,147,97,108,116,101,114,101,100,0,2,2049,14242,
2,1,1,21,1,1073741823,19,1793,14304,1,2,197652,67502597,1,397,17,1,624,788,1,
13531,17,15,23,10,1,14288,2049,2076,23,4,1,13531,17,16,10,14265,14328,147,115,
99,114,97,109,98,108,101,100,0,1,0,1793,14342,2,2049,14276,2049,2919,2,1,
624,14,10,1,14332,2049,2234,3,10,13477,14376,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,13531,1,
0,4097,14165,2049,14217,10,14348,14404,147,114,97,110,100,111,109,58,109,101,114,115,
101,110,110,101,0,3841,14165,2049,2578,1,14328,9,3841,14165,1,13531,17,15,2,1,
13471,17,16,10,14106,14157,147,114,97,110,100,111,109,105,122,101,100,0,1,1,
1793,14171,2,2049,14115,2049,2919,2,1,624,14,10,1,14161,2049,2234,3,10,14143,14182,
147,121,0,2,2049,2919,1,624,788,1,13471,17,15,2049,2552,21,4,1,13471,17,
15,1,-31,24,17,10,14177,14216,147,97,108,116,101,114,101,100,0,2,2049,14182,
2,1,1,21,1,1073741823,19,1793,14244,1,2,197652,67502597,1,397,17,1,624,788,1,
13471,17,15,23,10,1,14228,2049,2076,23,4,1,13471,17,16,10,14205,14268,147,115,
99,114,97,109,98,108,101,100,0,1,0,1793,14282,2,2049,14216,2049,2919,2,1,
624,14,10,1,14272,2049,2234,3,10,13417,14316,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,13471,1,
0,4097,14105,2049,14157,10,14288,14344,147,114,97,110,100,111,109,58,109,101,114,115,
101,110,110,101,0,3841,14105,2049,2578,1,14268,9,3841,14105,1,13471,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,14165,2049,2919,1,624,788,4097,14165,10,14385,1024,134,84,73,66,
0,14453,14475,134,105,111,58,75,101,121,98,111,97,114,100,0,0,14460,14488,147,
105,100,101,110,116,105,102,121,0,3841,14475,2049,2578,1793,14555,1,1,2049,9107,2,
2049,2613,1793,14543,3,2049,3708,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,14506,2049,
9200,2049,9163,10,1,14503,1793,14550,4097,14475,10,1,14547,2049,67,10,1,14494,9,10,
14453,14568,147,99,58,103,101,116,0,2049,14488,3841,14475,2049,9081,10,14559,14585,147,103,
97,116,104,101,114,0,2,1793,14592,1,8,11,10,1,14588,1793,14600,1,127,11,
10,1,14596,2049,2103,22,1793,14609,3,10,1,14607,1793,14616,2049,3394,10,1,14613,2049,
67,10,14575,14630,147,99,121,99,108,101,0,2049,14568,2049,2066,4,8,2049,2731,25,
3,2049,14585,1,14630,7,10,14559,14661,147,112,97,114,115,101,45,117,110,116,105,
108,0,1793,14673,2049,3689,2049,3486,2049,14630,771,2049,3360,10,1,14663,2049,3510,10,14646,
14687,147,115,58,103,101,116,0,1793,14709,1793,14695,1,10,11,10,1,14691,1793,14703,
1,13,11,10,1,14699,2049,2103,22,10,1,14689,2049,14661,10,14678,14730,134,105,111,
58,83,99,114,105,112,116,105,110,103,0,4,14714,14743,147,105,100,101,110,116,
105,102,121,0,3841,14730,2049,2578,1793,14810,1,9,2049,9107,2,2049,2613,1793,14798,3,
1,18,24,23,3841,14105,2049,2919,1,624,788,4097,14105,10,14325,1024,134,84,73,66,
0,14393,14415,134,105,111,58,75,101,121,98,111,97,114,100,0,0,14400,14428,147,
105,100,101,110,116,105,102,121,0,3841,14415,2049,2578,1793,14495,1,1,2049,9047,2,
2049,2613,1793,14483,3,2049,3708,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,14446,2049,
9140,2049,9103,10,1,14443,1793,14490,4097,14415,10,1,14487,2049,67,10,1,14434,9,10,
14393,14508,147,99,58,103,101,116,0,2049,14428,3841,14415,2049,9021,10,14499,14525,147,103,
97,116,104,101,114,0,2,1793,14532,1,8,11,10,1,14528,1793,14540,1,127,11,
10,1,14536,2049,2103,22,1793,14549,3,10,1,14547,1793,14556,2049,3394,10,1,14553,2049,
67,10,14515,14570,147,99,121,99,108,101,0,2049,14508,2049,2066,4,8,2049,2731,25,
3,2049,14525,1,14570,7,10,14499,14601,147,112,97,114,115,101,45,117,110,116,105,
108,0,1793,14613,2049,3689,2049,3486,2049,14570,771,2049,3360,10,1,14603,2049,3510,10,14586,
14627,147,115,58,103,101,116,0,1793,14649,1793,14635,1,10,11,10,1,14631,1793,14643,
1,13,11,10,1,14639,2049,2103,22,10,1,14629,2049,14601,10,14618,14670,134,105,111,
58,83,99,114,105,112,116,105,110,103,0,4,14654,14683,147,105,100,101,110,116,
105,102,121,0,3841,14670,2049,2578,1793,14750,1,9,2049,9047,2,2049,2613,1793,14738,3,
2049,3708,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,14761,2049,9200,2049,9163,10,1,
14758,1793,14805,4097,14730,10,1,14802,2049,67,10,1,14749,9,10,14678,14826,147,115,121,
115,58,97,114,103,99,0,2049,14743,1,0,3841,14730,2049,9081,10,14814,14847,147,115,
121,115,58,97,114,103,118,0,2049,3689,4,2049,14743,1,1,3841,14730,2049,9081,10,
14835,14870,147,105,110,99,108,117,100,101,0,2049,14743,1,2,3841,14730,2049,9081,10,
14859,14891,147,115,121,115,58,110,97,109,101,0,2049,3689,2049,14743,1,3,3841,14730,
2049,9081,10,14879,14924,134,70,117,108,108,83,99,114,101,101,110,76,105,115,116,
101,110,101,114,0,0,14902,14935,134,66,117,102,102,101,114,0,0,10,14925,14944,
134,80,116,114,0,0,10,14937,14959,147,116,101,114,109,105,110,97,116,101,0,
1,0,3841,14944,16,10,14946,14981,147,98,117,102,102,101,114,58,115,116,97,114,
116,0,3841,14935,10,14965,14998,147,98,117,102,102,101,114,58,101,110,100,0,3841,
14944,10,14984,15015,147,98,117,102,102,101,114,58,97,100,100,0,2049,14998,16,1,
14944,2049,3020,2049,14959,10,15001,15039,147,98,117,102,102,101,114,58,103,101,116,0,
1,14944,2049,3035,2049,14998,15,2049,14959,10,15025,15065,147,98,117,102,102,101,114,58,
101,109,112,116,121,0,2049,14981,4097,14944,2049,14959,10,15049,15086,147,98,117,102,102,
101,114,58,115,101,116,0,4097,14935,2049,15065,10,15072,15105,147,119,104,105,116,101,
44,98,108,117,101,0,1,27,2049,9150,2049,3708,91,49,59,51,55,59,52,52,
109,0,1,15111,2049,9200,10,15091,15141,147,119,104,105,116,101,44,98,108,97,99,
107,0,1,27,2049,9150,2049,3708,91,48,59,51,55,59,52,48,109,0,1,15147,
2049,9200,10,15126,15176,147,100,117,109,112,45,115,116,97,99,107,0,2049,1556,25,
1,5,2049,2831,2049,3708,124,32,0,1,15185,2049,9200,1,1,1793,15214,2049,3708,97,
0,1,15198,2049,3708,97,97,0,1,15204,2049,7020,2049,9214,10,1,15196,2049,2293,1,
2,1793,15254,2049,3708,97,98,0,1,15224,2049,3708,97,98,98,97,0,1,15231,2049,
7020,1,2,1793,15249,2049,9214,2049,9174,10,1,15244,2049,2263,10,1,15222,2049,2293,1,
3,1793,15297,2049,3708,97,98,99,0,1,15264,2049,3708,97,98,99,99,98,97,0,
1,15272,2049,7020,1,3,1793,15292,2049,9214,2049,9174,10,1,15287,2049,2263,10,1,15262,
2049,2293,1,4,1793,15343,2049,3708,97,98,99,100,0,1,15307,2049,3708,97,98,99,
100,100,99,98,97,0,1,15316,2049,7020,1,4,1793,15338,2049,9214,2049,9174,10,1,
15333,2049,2263,10,1,15305,2049,2293,1,5,1793,15392,2049,3708,97,98,99,100,101,0,
1,15353,2049,3708,97,98,99,100,101,101,100,99,98,97,0,1,15363,2049,7020,1,
5,1793,15387,2049,9214,2049,9174,10,1,15382,2049,2263,10,1,15351,2049,2293,10,15162,15408,
147,116,111,112,45,114,111,119,0,1,27,2049,9150,2049,3708,91,49,59,48,72,
0,1,15414,2049,9200,10,15397,15438,147,99,108,101,97,114,45,114,111,119,0,1,
80,1793,15445,2049,9174,10,1,15442,2049,2263,10,15425,15457,147,116,111,112,0,2049,15408,
2049,15105,2049,15438,2049,15408,2049,9277,2049,1556,2049,2932,2049,3708,83,80,58,37,110,32,
70,82,69,69,58,37,110,32,0,1,15473,2049,6851,2049,9200,2049,15176,10,15450,15511,
147,98,111,116,116,111,109,45,114,111,119,0,1,27,2049,9150,2049,3708,91,50,
52,59,48,72,0,1,15517,2049,9200,10,15497,15538,147,105,110,112,117,116,0,2049,
15511,2049,15105,2049,15438,2049,15511,10,15529,15557,147,111,117,116,112,117,116,0,2049,15511,
2049,15141,2049,15438,2049,15511,10,15547,15572,134,73,110,0,0,15566,15584,147,100,105,115,
99,97,114,100,0,2049,15039,3,10,15573,15595,147,114,117,98,0,1,8,2049,9150,
2049,9174,1,8,2049,9150,10,15588,15618,147,101,118,97,108,117,97,116,101,0,1,
1024,2049,367,10,15606,15632,147,114,101,115,101,116,0,1,0,4097,15572,2049,15065,10,
15623,15649,147,104,97,110,100,108,101,0,1,32,1793,15670,3841,15572,25,3,2049,15557,
2049,15618,2049,9163,2049,15632,2049,15457,2049,15538,10,1,15653,2049,2293,1,13,1793,15695,3841,
15572,25,3,2049,15557,2049,15618,2049,9163,2049,15632,2049,15457,2049,15538,10,1,15678,2049,2293,
1,10,1793,15720,3841,15572,25,3,2049,15557,2049,15618,2049,9163,2049,15632,2049,15457,2049,15538,
10,1,15703,2049,2293,1,127,1793,15741,3841,15572,25,3,2049,15584,2049,15595,1,15572,2049,
3035,10,1,15728,2049,2293,1,8,1793,15762,3841,15572,25,3,2049,15584,2049,15595,1,15572,
2049,3035,10,1,15749,2049,2293,2,2049,9150,2049,15015,1,15572,2049,3020,10,15639,15787,147,
112,114,111,99,101,115,115,0,1,1024,2049,15086,2049,14568,2049,15649,3841,15572,1,80,
11,1793,15809,1,0,4097,15572,2049,15538,10,1,15802,9,1,15791,7,10,15776,15824,147,
57,32,78,79,84,32,70,79,85,78,68,0,1,14701,2049,9140,2049,9103,10,1,
14698,1793,14745,4097,14670,10,1,14742,2049,67,10,1,14689,9,10,14618,14766,147,115,121,
115,58,97,114,103,99,0,2049,14683,1,0,3841,14670,2049,9021,10,14754,14787,147,115,
121,115,58,97,114,103,118,0,2049,3689,4,2049,14683,1,1,3841,14670,2049,9021,10,
14775,14810,147,105,110,99,108,117,100,101,0,2049,14683,1,2,3841,14670,2049,9021,10,
14799,14831,147,115,121,115,58,110,97,109,101,0,2049,3689,2049,14683,1,3,3841,14670,
2049,9021,10,14819,14864,134,70,117,108,108,83,99,114,101,101,110,76,105,115,116,
101,110,101,114,0,0,14842,14875,134,66,117,102,102,101,114,0,0,10,14865,14884,
134,80,116,114,0,0,10,14877,14899,147,116,101,114,109,105,110,97,116,101,0,
1,0,3841,14884,16,10,14886,14921,147,98,117,102,102,101,114,58,115,116,97,114,
116,0,3841,14875,10,14905,14938,147,98,117,102,102,101,114,58,101,110,100,0,3841,
14884,10,14924,14955,147,98,117,102,102,101,114,58,97,100,100,0,2049,14938,16,1,
14884,2049,3020,2049,14899,10,14941,14979,147,98,117,102,102,101,114,58,103,101,116,0,
1,14884,2049,3035,2049,14938,15,2049,14899,10,14965,15005,147,98,117,102,102,101,114,58,
101,109,112,116,121,0,2049,14921,4097,14884,2049,14899,10,14989,15026,147,98,117,102,102,
101,114,58,115,101,116,0,4097,14875,2049,15005,10,15012,15045,147,119,104,105,116,101,
44,98,108,117,101,0,1,27,2049,9090,2049,3708,91,49,59,51,55,59,52,52,
109,0,1,15051,2049,9140,10,15031,15081,147,119,104,105,116,101,44,98,108,97,99,
107,0,1,27,2049,9090,2049,3708,91,48,59,51,55,59,52,48,109,0,1,15087,
2049,9140,10,15066,15116,147,100,117,109,112,45,115,116,97,99,107,0,2049,1556,25,
1,5,2049,2831,2049,3708,124,32,0,1,15125,2049,9140,1,1,1793,15154,2049,3708,97,
0,1,15138,2049,3708,97,97,0,1,15144,2049,7020,2049,9154,10,1,15136,2049,2293,1,
2,1793,15194,2049,3708,97,98,0,1,15164,2049,3708,97,98,98,97,0,1,15171,2049,
7020,1,2,1793,15189,2049,9154,2049,9114,10,1,15184,2049,2263,10,1,15162,2049,2293,1,
3,1793,15237,2049,3708,97,98,99,0,1,15204,2049,3708,97,98,99,99,98,97,0,
1,15212,2049,7020,1,3,1793,15232,2049,9154,2049,9114,10,1,15227,2049,2263,10,1,15202,
2049,2293,1,4,1793,15283,2049,3708,97,98,99,100,0,1,15247,2049,3708,97,98,99,
100,100,99,98,97,0,1,15256,2049,7020,1,4,1793,15278,2049,9154,2049,9114,10,1,
15273,2049,2263,10,1,15245,2049,2293,1,5,1793,15332,2049,3708,97,98,99,100,101,0,
1,15293,2049,3708,97,98,99,100,101,101,100,99,98,97,0,1,15303,2049,7020,1,
5,1793,15327,2049,9154,2049,9114,10,1,15322,2049,2263,10,1,15291,2049,2293,10,15102,15348,
147,116,111,112,45,114,111,119,0,1,27,2049,9090,2049,3708,91,49,59,48,72,
0,1,15354,2049,9140,10,15337,15378,147,99,108,101,97,114,45,114,111,119,0,1,
80,1793,15385,2049,9114,10,1,15382,2049,2263,10,15365,15397,147,116,111,112,0,2049,15348,
2049,15045,2049,15378,2049,15348,2049,9217,2049,1556,2049,2932,2049,3708,83,80,58,37,110,32,
70,82,69,69,58,37,110,32,0,1,15413,2049,6851,2049,9140,2049,15116,10,15390,15451,
147,98,111,116,116,111,109,45,114,111,119,0,1,27,2049,9090,2049,3708,91,50,
52,59,48,72,0,1,15457,2049,9140,10,15437,15478,147,105,110,112,117,116,0,2049,
15451,2049,15045,2049,15378,2049,15451,10,15469,15497,147,111,117,116,112,117,116,0,2049,15451,
2049,15081,2049,15378,2049,15451,10,15487,15512,134,73,110,0,0,15506,15524,147,100,105,115,
99,97,114,100,0,2049,14979,3,10,15513,15535,147,114,117,98,0,1,8,2049,9090,
2049,9114,1,8,2049,9090,10,15528,15558,147,101,118,97,108,117,97,116,101,0,1,
1024,2049,367,10,15546,15572,147,114,101,115,101,116,0,1,0,4097,15512,2049,15005,10,
15563,15589,147,104,97,110,100,108,101,0,1,32,1793,15610,3841,15512,25,3,2049,15497,
2049,15558,2049,9103,2049,15572,2049,15397,2049,15478,10,1,15593,2049,2293,1,13,1793,15635,3841,
15512,25,3,2049,15497,2049,15558,2049,9103,2049,15572,2049,15397,2049,15478,10,1,15618,2049,2293,
1,10,1793,15660,3841,15512,25,3,2049,15497,2049,15558,2049,9103,2049,15572,2049,15397,2049,15478,
10,1,15643,2049,2293,1,127,1793,15681,3841,15512,25,3,2049,15524,2049,15535,1,15512,2049,
3035,10,1,15668,2049,2293,1,8,1793,15702,3841,15512,25,3,2049,15524,2049,15535,1,15512,
2049,3035,10,1,15689,2049,2293,2,2049,9090,2049,14955,1,15512,2049,3020,10,15579,15727,147,
112,114,111,99,101,115,115,0,1,1024,2049,15026,2049,14508,2049,15589,3841,15512,1,80,
11,1793,15749,1,0,4097,15512,2049,15478,10,1,15742,9,1,15731,7,10,15716,15764,147,
105,110,105,116,0,2049,3708,115,116,116,121,32,99,98,114,101,97,107,32,45,
101,99,104,111,0,1,15826,2049,12421,10,15816,15857,147,101,120,105,116,0,2049,3708,
115,116,116,121,32,45,99,98,114,101,97,107,32,101,99,104,111,0,1,15859,
2049,12421,1,0,2049,12533,10,14902,15895,147,99,108,101,97,114,0,1,27,2049,9150,
2049,3708,91,50,74,0,1,15901,2049,9200,1,27,2049,9150,2049,3708,91,48,59,48,
72,0,1,15915,2049,9200,10,15886,15951,147,108,105,115,116,101,110,58,102,117,108,
108,115,99,114,101,101,110,58,98,121,101,0,2049,15857,10,15926,15975,147,108,105,
115,116,101,110,58,102,117,108,108,115,99,114,101,101,110,0,2049,15824,2049,15895,
2049,15457,2049,15538,2049,15787,10,15954,15996,134,78,111,69,99,104,111,0,0,15986,16008,
147,118,101,114,115,105,111,110,0,3841,4,1,100,20,2049,9214,1,46,2049,9150,
2049,9214,10,15997,16030,147,101,111,108,63,0,1793,16036,1,13,11,10,1,16032,1793,
16044,1,10,11,10,1,16040,1793,16052,1,32,11,10,1,16048,2049,2140,22,22,10,
16022,16069,147,118,97,108,105,100,63,0,2,2049,82,2049,2594,10,16059,16081,147,111,
107,0,3841,15996,2049,2731,25,3,2049,1818,1793,16104,2049,9163,2049,3708,79,107,32,0,
1,16095,2049,9200,10,1,16091,2049,73,10,16075,16122,147,99,104,101,99,107,45,101,
111,102,0,2,1793,16129,1,-1,11,10,1,16125,1793,16137,1,4,11,10,1,16133,
2049,2103,22,1793,16159,2049,3708,98,121,101,0,1,16146,2049,200,2049,161,15,8,10,
1,16144,9,10,16109,16175,147,99,104,101,99,107,45,98,115,0,2,1793,16182,1,
8,11,10,1,16178,1793,16190,1,127,11,10,1,16186,2049,2103,22,1793,16203,2049,3418,
2049,3418,771,10,1,16197,9,10,16163,16216,147,115,58,103,101,116,0,1793,16245,1,
1024,2049,3486,1793,16236,2049,14568,2,2049,3394,2049,16122,2049,16175,2049,16030,10,1,16224,2049,
2234,2049,3360,2049,3801,10,1,16218,2049,3510,10,15986,16260,147,98,97,110,110,101,114,
0,3841,15996,2049,2731,25,3,2049,3708,82,69,84,82,79,32,49,50,32,40,114,
120,45,0,1,16268,2049,9200,2049,16008,1,41,2049,9150,2049,9163,2049,1543,2049,9214,2049,
101,99,104,111,0,1,15766,2049,12361,10,15756,15797,147,101,120,105,116,0,2049,3708,
115,116,116,121,32,45,99,98,114,101,97,107,32,101,99,104,111,0,1,15799,
2049,12361,1,0,2049,12473,10,14842,15835,147,99,108,101,97,114,0,1,27,2049,9090,
2049,3708,91,50,74,0,1,15841,2049,9140,1,27,2049,9090,2049,3708,91,48,59,48,
72,0,1,15855,2049,9140,10,15826,15891,147,108,105,115,116,101,110,58,102,117,108,
108,115,99,114,101,101,110,58,98,121,101,0,2049,15797,10,15866,15915,147,108,105,
115,116,101,110,58,102,117,108,108,115,99,114,101,101,110,0,2049,15764,2049,15835,
2049,15397,2049,15478,2049,15727,10,15894,15936,134,78,111,69,99,104,111,0,0,15926,15948,
147,118,101,114,115,105,111,110,0,3841,4,1,100,20,2049,9154,1,46,2049,9090,
2049,9154,10,15937,15970,147,101,111,108,63,0,1793,15976,1,13,11,10,1,15972,1793,
15984,1,10,11,10,1,15980,1793,15992,1,32,11,10,1,15988,2049,2140,22,22,10,
15962,16009,147,118,97,108,105,100,63,0,2,2049,82,2049,2594,10,15999,16021,147,111,
107,0,3841,15936,2049,2731,25,3,2049,1818,1793,16044,2049,9103,2049,3708,79,107,32,0,
1,16035,2049,9140,10,1,16031,2049,73,10,16015,16062,147,99,104,101,99,107,45,101,
111,102,0,2,1793,16069,1,-1,11,10,1,16065,1793,16077,1,4,11,10,1,16073,
2049,2103,22,1793,16099,2049,3708,98,121,101,0,1,16086,2049,200,2049,161,15,8,10,
1,16084,9,10,16049,16115,147,99,104,101,99,107,45,98,115,0,2,1793,16122,1,
8,11,10,1,16118,1793,16130,1,127,11,10,1,16126,2049,2103,22,1793,16143,2049,3418,
2049,3418,771,10,1,16137,9,10,16103,16156,147,115,58,103,101,116,0,1793,16185,1,
1024,2049,3486,1793,16176,2049,14508,2,2049,3394,2049,16062,2049,16115,2049,15970,10,1,16164,2049,
2234,2049,3360,2049,3801,10,1,16158,2049,3510,10,15926,16200,147,98,97,110,110,101,114,
0,3841,15936,2049,2731,25,3,2049,3708,82,69,84,82,79,32,49,50,32,40,114,
120,45,0,1,16208,2049,9140,2049,15948,1,41,2049,9090,2049,9103,2049,1543,2049,9154,2049,
3708,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,16300,2049,9200,2049,1847,2049,9214,2049,9163,10,16250,16344,
147,98,121,101,0,3841,14924,1793,16351,2049,15951,10,1,16348,9,1,0,2049,12533,10,
16337,16369,147,108,105,115,116,101,110,0,3841,14924,1793,16376,2049,15975,10,1,16373,2049,
2505,2049,16081,2049,16216,2049,16069,1793,16393,2049,367,2049,16081,10,1,16388,1793,16399,3,10,
1,16397,2049,67,1,16382,7,10,16359,16421,147,105,109,97,103,101,58,115,97,118,
101,0,1,1000,2049,9107,2049,9081,10,16407,16439,147,100,58,119,111,114,100,115,0,
1793,16448,2049,165,2049,9200,2049,9174,10,1,16441,2049,7095,10,16428,16469,147,100,58,119,
111,114,100,115,45,119,105,116,104,0,2049,1847,2049,4732,1793,16500,2049,165,2,2049,
1847,2049,4334,1793,16489,2049,9200,2049,9174,10,1,16484,1793,16495,3,10,1,16493,2049,67,
10,1,16475,2049,7095,10,16453,16524,147,100,105,115,112,108,97,121,45,105,102,45,
108,101,102,116,0,2,2049,1847,2049,4648,1793,16536,2049,9200,2049,9174,10,1,16531,1793,
16542,3,10,1,16540,2049,67,10,16453,16573,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,4732,1793,16584,
2049,165,2049,16524,10,1,16579,2049,7095,10,0 };
101,97,112,32,64,32,0,1,16240,2049,9140,2049,1847,2049,9154,2049,9103,10,16190,16284,
147,98,121,101,0,3841,14864,1793,16291,2049,15891,10,1,16288,9,1,0,2049,12473,10,
16277,16309,147,108,105,115,116,101,110,0,3841,14864,1793,16316,2049,15915,10,1,16313,2049,
2505,2049,16021,2049,16156,2049,16009,1793,16333,2049,367,2049,16021,10,1,16328,1793,16339,3,10,
1,16337,2049,67,1,16322,7,10,16299,16361,147,105,109,97,103,101,58,115,97,118,
101,0,1,1000,2049,9047,2049,9021,10,16347,16379,147,100,58,119,111,114,100,115,0,
1793,16388,2049,165,2049,9140,2049,9114,10,1,16381,2049,7095,10,16368,16409,147,100,58,119,
111,114,100,115,45,119,105,116,104,0,2049,1847,2049,4732,1793,16440,2049,165,2,2049,
1847,2049,4334,1793,16429,2049,9140,2049,9114,10,1,16424,1793,16435,3,10,1,16433,2049,67,
10,1,16415,2049,7095,10,16393,16464,147,100,105,115,112,108,97,121,45,105,102,45,
108,101,102,116,0,2,2049,1847,2049,4648,1793,16476,2049,9140,2049,9114,10,1,16471,1793,
16482,3,10,1,16480,2049,67,10,16393,16513,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,4732,1793,16524,
2049,165,2049,16464,10,1,16519,2049,7095,10,0 };

View file

@ -29,7 +29,7 @@ The main namespaces are:
| namespace | words related to |
| ---------- | ------------------ |
| ASCII | ASCII Constants |
| array | arrays |
| a | arrays |
| c | characters |
| compile | compiler functions |
| d | dictionary headers |
@ -195,7 +195,7 @@ Example:
:pre.min (a-an)
(comparison &lt? &lt-or-gt? set-hook )
(begin_with #-1 !Index n:min !Value dup array:length ) ;
(begin_with #-1 !Index n:min !Value dup a:length ) ;
~~~
:( ; immediate
@ -1292,30 +1292,30 @@ represented in memory as:
Since the count comes first, a simple `fetch` will suffice to
get it, but for completeness (and to allow for future changes),
we wrap this as `array:length`:
we wrap this as `a:length`:
~~~
:array:length (a-n) fetch ;
:a:length (a-n) fetch ;
~~~
The first couple of words are used to create arrays. The first,
`array:counted-results` executes a quote which returns values
`a:counted-results` executes a quote which returns values
and a count. It then creates an array with the provided data.
~~~
:array:counted-results (q-a)
:a:counted-results (q-a)
call here [ dup , &, times ] dip ;
~~~
The second, `array:from-string`, creates a new string with the
The second, `a:from-string`, creates a new string with the
characters in given a string.
~~~
:array:from-string (s-a)
:a:from-string (s-a)
here [ dup s:length , [ , ] s:for-each ] dip ;
~~~
A very crucial piece is `array:for-each`. This runs a quote once
A very crucial piece is `a:for-each`. This runs a quote once
against each value in an array. This is leveraged to implement
additional combinators.
@ -1323,38 +1323,38 @@ additional combinators.
{{
'Q var
---reveal---
:array:for-each (aq-)
:a:for-each (aq-)
&Q [ !Q fetch-next
[ fetch-next swap [ @Q call ] dip ] times drop
] v:preserve ;
}}
~~~
With this I can easily define `array:dup` to make a copy of an
With this I can easily define `a:dup` to make a copy of an
array.
~~~
:array:dup (a-a)
here [ dup fetch , [ , ] array:for-each ] dip ;
:a:dup (a-a)
here [ dup fetch , [ , ] a:for-each ] dip ;
~~~
Next is `array:filter`, which is extracts matching values from
Next is `a:filter`, which is extracts matching values from
an array. This is used like:
{ #1 #2 #3 #4 #5 #6 #7 #8 }
[ n:even? ] array:filter
[ n:even? ] a:filter
It returns a new array with the values that the quote returned
a `TRUE` flag for.
~~~
:array:filter (aq-)
:a:filter (aq-)
[ over [ call ] dip swap [ , ] [ drop ] choose ] curry
here [ over fetch , array:for-each ] dip
here [ over fetch , a:for-each ] dip
here over - n:dec over store ;
~~~
Next are `array:contains?` and `array:contains-string?` which
Next are `a:contains?` and `a:contains-string?` which
compare a given value to each item in the array and returns
a flag.
@ -1362,70 +1362,70 @@ a flag.
{{
'F var
---reveal---
:array:contains? (na-f)
:a:contains? (na-f)
&F v:off
[ over eq? @F or !F ] array:for-each
[ over eq? @F or !F ] a:for-each
drop @F ;
:array:contains-string? (sa-f)
:a:contains-string? (sa-f)
&F v:off
[ over s:eq? @F or !F ] array:for-each
[ over s:eq? @F or !F ] a:for-each
drop @F ;
}}
~~~
I implemented `array:map` to apply a quotation to each item in
I implemented `a:map` to apply a quotation to each item in
an array and construct a new array from the returned values.
Example:
{ #1 #2 #3 }
[ #10 * ] array:map
[ #10 * ] a:map
~~~
:array:map (aq-a)
:a:map (aq-a)
[ call , ] curry
here [ over fetch , array:for-each ] dip ;
here [ over fetch , a:for-each ] dip ;
~~~
You can use `array:reverse` to make a copy of an array with the
You can use `a:reverse` to make a copy of an array with the
values reversed.
~~~
:array:reverse (a-a)
:a:reverse (a-a)
here [ fetch-next [ + n:dec ] sip dup ,
[ dup fetch , n:dec ] times drop
] dip ;
~~~
`array:nth` provides a quick means of adjusting an array and
`a:nth` provides a quick means of adjusting an array and
offset into an address for use with `fetch` and `store`.
~~~
:array:nth (an-a)
:a:nth (an-a)
+ n:inc ;
~~~
`array:reduce` takes an array, a starting value, and a quote. It
`a:reduce` takes an array, a starting value, and a quote. It
executes the quote once for each item in the array, passing the
item and the value to the quote. The quote should consume both
and return a new value.
~~~
:array:reduce (pnp-n)
[ swap ] dip array:for-each ;
:a:reduce (pnp-n)
[ swap ] dip a:for-each ;
~~~
When making an array, I often want the values in the original
order. The `array:counted-results array:reverse` is a bit long, so
I'm defining a new `array:make` which wraps these.
order. The `a:counted-results a:reverse` is a bit long, so
I'm defining a new `a:make` which wraps these.
~~~
:array:make (q-a)
array:counted-results array:reverse ;
:a:make (q-a)
a:counted-results a:reverse ;
:{ (-) |[ |depth |[ ; immediate
:} (-a) |] |dip |depth |swap |- |n:dec |] |array:make ; immediate
:} (-a) |] |dip |depth |swap |- |n:dec |] |a:make ; immediate
~~~
## Muri: an assembler
@ -1687,14 +1687,14 @@ And finally, tie it all together into the single exposed word
as{ 'polisuzr i #1 d }as
again ;
---reveal---
:array:eq? (aa-f)
:a:eq? (aa-f)
as{ 'lilist.. i #-1 d &Flag d }as
as{ 'lica.... i &compare d }as
as{ 'lixolicc i #-1 d &not-equal d }as
as{ 'lica.... i &length d }as
as{ 'lica.... i &loop d }as
as{ 'drdrlife i &Flag d }as ;
:array:-eq? (aa-f) array:eq? not ;
:a:-eq? (aa-f) a:eq? not ;
}}
~~~

View file

@ -67,7 +67,7 @@ for me.
:import here swap BOOK-BASE s:prepend file:slurp ;
:\n ASCII:LF @Out file:write ;
:add-to-book here [ @Out file:write ] s:for-each \n ;
:process-files [ import add-to-book ] array:for-each ;
:process-files [ import add-to-book ] a:for-each ;
:open 'RETRO-Book.md file:open<for-writing> !Out ;
:close @Out file:close ;
:assemble open process-files close ;
@ -78,7 +78,7 @@ for me.
:open 'gophermap file:open<for-writing> !Out ;
:close @Out file:close ;
:ENTRY '0%s\t/book/%s\tforth.works\t70\n ;
:process-files [ dup ENTRY s:format [ @Out file:write ] s:for-each ] array:for-each ;
:process-files [ dup ENTRY s:format [ @Out file:write ] s:for-each ] a:for-each ;
:gophermap open process-files close ;
~~~

BIN
ngaImage

Binary file not shown.

View file

@ -76,7 +76,7 @@ simple code.
[ 'field: s:prepend d:create
dup compile:lit &select compile:call compile:ret
&class:word reclass n:inc ] array:for-each drop
&class:word reclass n:inc ] a:for-each drop
}}
~~~

View file

@ -66,24 +66,24 @@ TempStrings -a - - Variable. Holds the number of temporary strings. class:data
Version -a - - Variable. This stores the version number. class:data {n/a} {n/a} global all
[ - - - Begin a quotation. class:macro {n/a} {n/a} global all
] - - - End a quotation. class:macro {n/a} {n/a} global all
a:-eq? aa-f - - Compare all values in the array. Return `FALSE` if all values are equal or `TRUE` otherwise. This assumes the array contains only numeric values. class:word {n/a} {n/a} a all
a:contains-string? sa-f - - Return `TRUE` if the string value is in the array or`FALSE` otherwise. class:word {n/a} {n/a} a all
a:contains? na-f - - Return `TRUE` if the value is in the array or `FALSE` otherwise. class:word {n/a} {n/a} a all
a:counted-results q-a - - Run a quote and construct a new array from the returned values. The quote should return the values and the number of values to put into the array. class:word {n/a} {n/a} a all
a:dup a-b - - Make a copy of an array. Return the address of the copy. class:word {n/a} {n/a} a all
a:eq? aa-f - - Compare all values in the array. Return `TRUE` if all values are equal or `FALSE` otherwise. This assumes the array contains only numeric values. class:word {n/a} {n/a} a all
a:filter aq-b - - For each item in the initial array, run the specified quote. If the quote returns `TRUE`, copy the item into a new array. If `FALSE`, discard it. Returns a pointer to the new array. class:word {n/a} {n/a} a all
a:for-each aq- - - Execute the quote once for each item in the array. class:word {n/a} {n/a} a all
a:from-string s-a - - Create a new array with the characters in the source string. class:word {n/a} {n/a} a all
a:length a-n - - Return the length of a array. class:word {n/a} {n/a} a all
a:make q-a - - Execute quote. Return a new array containing the values the quote leaves on the stack. This is identical to doing `a:counted-results a:reverse` class:word {n/a} {n/a} a all
a:map aq- - - Execute quote once for each item in the array. Constructs a new array from the value returned by the quote. class:word {n/a} {n/a} a all
a:nth an-b - - Return the actual address of the nth item in the array. class:word {n/a} {n/a} a all
a:reduce pnq-n - - Takes an array, a starting value, and a quote. This will apply the quote to each item in the array; the quote should consume two values and return one. class:word {n/a} {n/a} a all
a:reverse a-b - - Reverse the order of items in a array. This will return a new array. class:word {n/a} {n/a} a all
again - - - Close an unconditional loop. Branches back to the prior `repeat`. class:macro {n/a} {n/a} global all
allot n- - - Allocate the specified number of cells from the `Heap`. class:word 'Buffer d:create #100 allot {n/a} global all
and nm-o - - Perform a bitwise AND operation between the two provided values. class:primitive {n/a} {n/a} global all
array:-eq? aa-f - - Compare all values in the array. Return `FALSE` if all values are equal or `TRUE` otherwise. This assumes the array contains only numeric values. class:word {n/a} {n/a} array all
array:contains-string? sa-f - - Return `TRUE` if the string value is in the array or`FALSE` otherwise. class:word {n/a} {n/a} array all
array:contains? na-f - - Return `TRUE` if the value is in the array or `FALSE` otherwise. class:word {n/a} {n/a} array all
array:counted-results q-a - - Run a quote and construct a new array from the returned values. The quote should return the values and the number of values to put into the array. class:word {n/a} {n/a} array all
array:dup a-b - - Make a copy of an array. Return the address of the copy. class:word {n/a} {n/a} array all
array:eq? aa-f - - Compare all values in the array. Return `TRUE` if all values are equal or `FALSE` otherwise. This assumes the array contains only numeric values. class:word {n/a} {n/a} array all
array:filter aq-b - - For each item in the initial array, run the specified quote. If the quote returns `TRUE`, copy the item into a new array. If `FALSE`, discard it. Returns a pointer to the new array. class:word {n/a} {n/a} array all
array:for-each aq- - - Execute the quote once for each item in the array. class:word {n/a} {n/a} array all
array:from-string s-a - - Create a new array with the characters in the source string. class:word {n/a} {n/a} array all
array:length a-n - - Return the length of a array. class:word {n/a} {n/a} array all
array:make q-a - - Execute quote. Return a new array containing the values the quote leaves on the stack. This is identical to doing `array:counted-results array:reverse` class:word {n/a} {n/a} array all
array:map aq- - - Execute quote once for each item in the array. Constructs a new array from the value returned by the quote. class:word {n/a} {n/a} array all
array:nth an-b - - Return the actual address of the nth item in the array. class:word {n/a} {n/a} array all
array:reduce pnq-n - - Takes an array, a starting value, and a quote. This will apply the quote to each item in the array; the quote should consume two values and return one. class:word {n/a} {n/a} array all
array:reverse a-b - - Reverse the order of items in a array. This will return a new array. class:word {n/a} {n/a} array all
as{ -f - - Begin an assembly section. class:macro {n/a} {n/a} global all
banner - - - Display a welcome message on startup. class:word {n/a} {n/a} global rre {n/a}
bi xqq-? - - Execute q1 against x, then execute q2 against a copy of x. class:word #100 [ #10 * ] [ #10 - ] bi {n/a} global all
@ -458,7 +458,7 @@ var s- - - Create a variable. The variable is initialized to 0. class:word
var<n> ns- - - Create a variable with the specified initial value. class:word #10 'Base var<n>\n {n/a} global all
while q- - - Execute quote repeatedly while the quote returns a `TRUE` value. The quote should return a flag of either `TRUE` or `FALSE`, though `while` will treat any non-zero value as `TRUE`. class:word #10 [ dup n:put nl n:dec dup n:-zero? ] while {n/a} global all
xor mn-o - - Perform a bitwise XOR operation. class:primitive {n/a} {n/a} global all
{ - - - Begin an array. This is intended to make creating arrays a bit cleaner than using a quotation and `array:counted-results`. class:word {n/a} {n/a} global all
{ - - - Begin an array. This is intended to make creating arrays a bit cleaner than using a quotation and `a:counted-results`. class:word {n/a} {n/a} global all
{{ - - - Begin a lexically scoped area. class:word {n/a} {n/a} global all
} -a - - Complete an array begun by `{`. Returns a pointer to the data. class:word {n/a} {n/a} global all
}as f- - - End an assembly section. class:macro {n/a} {n/a} global all

Can't render this file because it contains an unexpected character in line 59 and column 55.