stdlib: set: namespace is now array: - update your code!

FossilOrigin-Name: b5123a7db0c66dccf2071ea6431c6a31d57d20bb1efe4e36a90eb21666ba8d24
This commit is contained in:
crc 2019-02-21 04:19:14 +00:00
parent ab204dcbf2
commit 69b14a7ef9
21 changed files with 897 additions and 886 deletions

View file

@ -23,6 +23,7 @@ June 2019.
- add `set-hook`
- add `unhook`
- `c:put` primitive is a hookable word
- `set:` is now `array:`
## I/O and Extensions

View file

@ -205,6 +205,45 @@ 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:contains-string? D: sa-f A: - F: -
Return `TRUE` if the string value is in the set or`FALSE` otherwise.
array:contains? D: na-f A: - F: -
Return `TRUE` if the value is in the set or `FALSE` otherwise.
array:counted-results D: q-a A: - F: -
Run a quote and construct a new set from the returned values. The quote should return the values and the number of values to put into the set.
array:dup D: a-b A: - F: -
Make a copy of a set. Return the address of the copy.
array:filter D: aq-b A: - F: -
For each item in the initial set, run the specified quote. If the quote returns `TRUE`, copy the item into a new set. If `FALSE`, discard it. Returns a pointer to the new set.
array:for-each D: aq- A: - F: -
Execute the quote once for each item in the set.
array:from-string D: s-a A: - F: -
Create a new set with the characters in the source string.
array:length D: a-n A: - F: -
Return the length of a set.
array:make D: q-a A: - F: -
Execute quote. Return a new set 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 set. Constructs a new set from the value returned by the quote.
array:nth D: an-b A: - F: -
Return the actual address of the nth item in the set.
array:reduce D: pnq-n A: - F: -
Takes a set, a starting value, and a quote. This will apply the quote to each item in the set; the quote should consume two values and return one.
array:reverse D: a-b A: - F: -
Reverse the order of items in a set. This will return a new set.
as{ D: -f A: - F: -
Begin an assembly section.
@ -604,6 +643,9 @@ Rotate the top three values.
f:round D: - A: - F: f-f
Round a floating point value.
f:sign D: -n A: - F: F-
Return 1 if the floating point value is positive or -1 if it is negative.
f:sin D: - A: - F: F-F
Return the sine of a floating point number.
@ -763,9 +805,6 @@ Scan the I/O devices for a device with a specified ID. Returns the device number
io:unix-syscall D: ...n- A: - F: -
Trigger a Unix system call. This is not intended to be used directly.
ios:list-fonts D: - A: - F: -
Display a list of all installed fonts.
listen D: - A: - F: -
Run interactive "listener" (a REPL).
@ -914,7 +953,7 @@ prefix:` D: s- A: - F: -
Process token as a bytecode.
prefix:| D: s- A: - F: -
POSTPONE equivilent.
POSTPONE equivalent.
primitive D: - A: - F: -
Change the class of the most recently defined word to `class:primitive`.
@ -1102,45 +1141,6 @@ Trim trailing whitespace from a string.
set-hook D: aa- A: - F: -
Patch the hook point in a2 to point to a1.
set:contains-string? D: sa-f A: - F: -
Return `TRUE` if the string value is in the set or`FALSE` otherwise.
set:contains? D: na-f A: - F: -
Return `TRUE` if the value is in the set or `FALSE` otherwise.
set:counted-results D: q-a A: - F: -
Run a quote and construct a new set from the returned values. The quote should return the values and the number of values to put into the set.
set:dup D: a-b A: - F: -
Make a copy of a set. Return the address of the copy.
set:filter D: aq-b A: - F: -
For each item in the initial set, run the specified quote. If the quote returns `TRUE`, copy the item into a new set. If `FALSE`, discard it. Returns a pointer to the new set.
set:for-each D: aq- A: - F: -
Execute the quote once for each item in the set.
set:from-string D: s-a A: - F: -
Create a new set with the characters in the source string.
set:length D: a-n A: - F: -
Return the length of a set.
set:make D: q-a A: - F: -
Execute quote. Return a new set containing the values the quote leaves on the stack. This is identical to doing `set:counted-results set:reverse`
set:map D: aq- A: - F: -
Execute quote once for each item in the set. Constructs a new set from the value returned by the quote.
set:nth D: an-b A: - F: -
Return the actual address of the nth item in the set.
set:reduce D: pnq-n A: - F: -
Takes a set, a starting value, and a quote. This will apply the quote to each item in the set; the quote should consume two values and return one.
set:reverse D: a-b A: - F: -
Reverse the order of items in a set. This will return a new set.
shift D: mn-o A: - F: -
Peform a bitwise shift of m by n bits. If n is positive, shift right. If negative, the shift will be to the left.
@ -1222,6 +1222,9 @@ u:n? D: u-f A: - F: -
u:nan? D: u-f A: - F: -
Is encoded value a Nan?
u:scaling D: - A: - F: -f
Hook. Return a constant used as the scaling factor for the u: words.
u:to-f D: u- A: - F: -n
Decode an encoded floating point value.
@ -1340,7 +1343,7 @@ xor D: mn-o A: - F: -
Perform a bitwise XOR operation.
{ D: - A: - F: -
Begin a set. This is intended to make creating sets a bit cleaner than using a quotation and `set:counteh-results`.
Begin a set. This is intended to make creating sets a bit cleaner than using a quotation and `array:counteh-results`.
{{ D: - A: - F: -
Begin a lexically scoped area.

View file

@ -205,6 +205,45 @@ 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:contains-string? D: sa-f A: - F: -
Return `TRUE` if the string value is in the set or`FALSE` otherwise.
array:contains? D: na-f A: - F: -
Return `TRUE` if the value is in the set or `FALSE` otherwise.
array:counted-results D: q-a A: - F: -
Run a quote and construct a new set from the returned values. The quote should return the values and the number of values to put into the set.
array:dup D: a-b A: - F: -
Make a copy of a set. Return the address of the copy.
array:filter D: aq-b A: - F: -
For each item in the initial set, run the specified quote. If the quote returns `TRUE`, copy the item into a new set. If `FALSE`, discard it. Returns a pointer to the new set.
array:for-each D: aq- A: - F: -
Execute the quote once for each item in the set.
array:from-string D: s-a A: - F: -
Create a new set with the characters in the source string.
array:length D: a-n A: - F: -
Return the length of a set.
array:make D: q-a A: - F: -
Execute quote. Return a new set 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 set. Constructs a new set from the value returned by the quote.
array:nth D: an-b A: - F: -
Return the actual address of the nth item in the set.
array:reduce D: pnq-n A: - F: -
Takes a set, a starting value, and a quote. This will apply the quote to each item in the set; the quote should consume two values and return one.
array:reverse D: a-b A: - F: -
Reverse the order of items in a set. This will return a new set.
as{ D: -f A: - F: -
Begin an assembly section.
@ -604,6 +643,9 @@ Rotate the top three values.
f:round D: - A: - F: f-f
Round a floating point value.
f:sign D: -n A: - F: F-
Return 1 if the floating point value is positive or -1 if it is negative.
f:sin D: - A: - F: F-F
Return the sine of a floating point number.
@ -763,9 +805,6 @@ Scan the I/O devices for a device with a specified ID. Returns the device number
io:unix-syscall D: ...n- A: - F: -
Trigger a Unix system call. This is not intended to be used directly.
ios:list-fonts D: - A: - F: -
Display a list of all installed fonts.
listen D: - A: - F: -
Run interactive "listener" (a REPL).
@ -914,7 +953,7 @@ prefix:` D: s- A: - F: -
Process token as a bytecode.
prefix:| D: s- A: - F: -
POSTPONE equivilent.
POSTPONE equivalent.
primitive D: - A: - F: -
Change the class of the most recently defined word to `class:primitive`.
@ -1102,45 +1141,6 @@ Trim trailing whitespace from a string.
set-hook D: aa- A: - F: -
Patch the hook point in a2 to point to a1.
set:contains-string? D: sa-f A: - F: -
Return `TRUE` if the string value is in the set or`FALSE` otherwise.
set:contains? D: na-f A: - F: -
Return `TRUE` if the value is in the set or `FALSE` otherwise.
set:counted-results D: q-a A: - F: -
Run a quote and construct a new set from the returned values. The quote should return the values and the number of values to put into the set.
set:dup D: a-b A: - F: -
Make a copy of a set. Return the address of the copy.
set:filter D: aq-b A: - F: -
For each item in the initial set, run the specified quote. If the quote returns `TRUE`, copy the item into a new set. If `FALSE`, discard it. Returns a pointer to the new set.
set:for-each D: aq- A: - F: -
Execute the quote once for each item in the set.
set:from-string D: s-a A: - F: -
Create a new set with the characters in the source string.
set:length D: a-n A: - F: -
Return the length of a set.
set:make D: q-a A: - F: -
Execute quote. Return a new set containing the values the quote leaves on the stack. This is identical to doing `set:counted-results set:reverse`
set:map D: aq- A: - F: -
Execute quote once for each item in the set. Constructs a new set from the value returned by the quote.
set:nth D: an-b A: - F: -
Return the actual address of the nth item in the set.
set:reduce D: pnq-n A: - F: -
Takes a set, a starting value, and a quote. This will apply the quote to each item in the set; the quote should consume two values and return one.
set:reverse D: a-b A: - F: -
Reverse the order of items in a set. This will return a new set.
shift D: mn-o A: - F: -
Peform a bitwise shift of m by n bits. If n is positive, shift right. If negative, the shift will be to the left.
@ -1222,6 +1222,9 @@ u:n? D: u-f A: - F: -
u:nan? D: u-f A: - F: -
Is encoded value a Nan?
u:scaling D: - A: - F: -f
Hook. Return a constant used as the scaling factor for the u: words.
u:to-f D: u- A: - F: -n
Decode an encoded floating point value.
@ -1340,7 +1343,7 @@ xor D: mn-o A: - F: -
Perform a bitwise XOR operation.
{ D: - A: - F: -
Begin a set. This is intended to make creating sets a bit cleaner than using a quotation and `set:counteh-results`.
Begin a set. This is intended to make creating sets a bit cleaner than using a quotation and `array:counteh-results`.
{{ D: - A: - F: -
Begin a lexically scoped area.

View file

@ -581,6 +581,110 @@
<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: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 set or`FALSE` otherwise.</p>
<p><b>Class:</b> class:word | <b>Namespace:</b> set | <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 set or `FALSE` otherwise.</p>
<p><b>Class:</b> class:word | <b>Namespace:</b> set | <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 set from the returned values. The quote should return the values and the number of values to put into the set.</p>
<p><b>Class:</b> class:word | <b>Namespace:</b> set | <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 a set. Return the address of the copy.</p>
<p><b>Class:</b> class:word | <b>Namespace:</b> set | <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 set, run the specified quote. If the quote returns `TRUE`, copy the item into a new set. If `FALSE`, discard it. Returns a pointer to the new set.</p>
<p><b>Class:</b> class:word | <b>Namespace:</b> set | <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 set.</p>
<p><b>Class:</b> class:word | <b>Namespace:</b> set | <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 set with the characters in the source string.</p>
<p><b>Class:</b> class:word | <b>Namespace:</b> set | <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 set.</p>
<p><b>Class:</b> class:word | <b>Namespace:</b> set | <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 set 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> set | <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 set. Constructs a new set from the value returned by the quote.</p>
<p><b>Class:</b> class:word | <b>Namespace:</b> set | <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 set.</p>
<p><b>Class:</b> class:word | <b>Namespace:</b> set | <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 a set, a starting value, and a quote. This will apply the quote to each item in the set; the quote should consume two values and return one.</p>
<p><b>Class:</b> class:word | <b>Namespace:</b> set | <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 set. This will return a new set.</p>
<p><b>Class:</b> class:word | <b>Namespace:</b> set | <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>
@ -3231,110 +3335,6 @@
&bar &foo set-hook</xmp>
</p>
<hr/>
<h1>set: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 set or`FALSE` otherwise.</p>
<p><b>Class:</b> class:word | <b>Namespace:</b> set | <b>Interface Layer:</b> all</p>
<hr/>
<h1>set: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 set or `FALSE` otherwise.</p>
<p><b>Class:</b> class:word | <b>Namespace:</b> set | <b>Interface Layer:</b> all</p>
<hr/>
<h1>set: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 set from the returned values. The quote should return the values and the number of values to put into the set.</p>
<p><b>Class:</b> class:word | <b>Namespace:</b> set | <b>Interface Layer:</b> all</p>
<hr/>
<h1>set: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 a set. Return the address of the copy.</p>
<p><b>Class:</b> class:word | <b>Namespace:</b> set | <b>Interface Layer:</b> all</p>
<hr/>
<h1>set: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 set, run the specified quote. If the quote returns `TRUE`, copy the item into a new set. If `FALSE`, discard it. Returns a pointer to the new set.</p>
<p><b>Class:</b> class:word | <b>Namespace:</b> set | <b>Interface Layer:</b> all</p>
<hr/>
<h1>set: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 set.</p>
<p><b>Class:</b> class:word | <b>Namespace:</b> set | <b>Interface Layer:</b> all</p>
<hr/>
<h1>set: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 set with the characters in the source string.</p>
<p><b>Class:</b> class:word | <b>Namespace:</b> set | <b>Interface Layer:</b> all</p>
<hr/>
<h1>set: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 set.</p>
<p><b>Class:</b> class:word | <b>Namespace:</b> set | <b>Interface Layer:</b> all</p>
<hr/>
<h1>set: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 set containing the values the quote leaves on the stack. This is identical to doing `set:counted-results set:reverse`</p>
<p><b>Class:</b> class:word | <b>Namespace:</b> set | <b>Interface Layer:</b> all</p>
<hr/>
<h1>set: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 set. Constructs a new set from the value returned by the quote.</p>
<p><b>Class:</b> class:word | <b>Namespace:</b> set | <b>Interface Layer:</b> all</p>
<hr/>
<h1>set: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 set.</p>
<p><b>Class:</b> class:word | <b>Namespace:</b> set | <b>Interface Layer:</b> all</p>
<hr/>
<h1>set: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 a set, a starting value, and a quote. This will apply the quote to each item in the set; the quote should consume two values and return one.</p>
<p><b>Class:</b> class:word | <b>Namespace:</b> set | <b>Interface Layer:</b> all</p>
<hr/>
<h1>set: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 set. This will return a new set.</p>
<p><b>Class:</b> class:word | <b>Namespace:</b> set | <b>Interface Layer:</b> all</p>
<hr/>
<h1>shift</h1>
<div style='margin-left: 1em;'><p><b>Data:</b> mn-o<br>
<b>Addr:</b> -<br>
@ -3930,7 +3930,7 @@
<b>Addr:</b> -<br>
<b>Float:</b> -</p>
</div>
<p>Begin a set. This is intended to make creating sets a bit cleaner than using a quotation and `set:counteh-results`.</p>
<p>Begin a set. This is intended to make creating sets a bit cleaner than using a quotation and `array:counteh-results`.</p>
<p><b>Class:</b> class:word | <b>Namespace:</b> set | <b>Interface Layer:</b> all</p>
<hr/>
<h1>{{</h1>

View file

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

View file

@ -262,7 +262,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 ] set:for-each ;
:process [ item ] array:for-each ;
---reveal---
:editor:key<1>
[ prepare &Heap [ generate ] v:preserve process ] with-tob ;

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 ] set:for-each ] v:preserve ;
nl nl ] array:for-each ] v:preserve ;
}}
~~~

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 } set:contains? [ 'contained! s:put sp nl ] if ] set:for-each
[ { #10 #20 #30 } array:contains? [ 'contained! s:put sp nl ] if ] array: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 ] set:filter ;
[ mod n:-zero? ] choose ] array: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 ] set:for-each
create-set get-primes [ n:put sp ] array:for-each
~~~

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 `set:for-each`. I decided to take
construct a set, then use `array: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 set:length
dup array:length
[ n:dec swap
[ 'ab 'aabab reorder
'@ s:append [ fetch + fetch ] make-helper
'! s:append [ fetch + store ] make-helper
n:dec
] set:for-each drop
] array:for-each drop
] sip swap make-struct ;
}}
~~~

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 set:nth fetch
ASCII:HT s:tokenize #0 array: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 ]
set:for-each drop
array: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 set:nth fetch
&Heeap [ @Results swap array:nth fetch
ASCII:HT s:tokenize
dup #0 set:nth fetch fetch [
[ #2 set:nth fetch ]
[ #3 set:nth fetch s:chop s:to-number ]
[ #1 set:nth fetch ] tri grab
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
] 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 ] set:for-each
[ valid? [ to-TIB process ] &drop choose ] array: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 ] set:for-each drop
&class:word reclass n:inc ] array: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 set:contains-string? ;
:in-set? dup &GlossaryNames array: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 ] set:for-each ;
[ file:delete ] array: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 ] set:for-each nl ;
[ call s:put tab ] array: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 ] set:for-each ;
} [ s:put nl ] array: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 ] set:for-each ;
} [ s:put sp ] array: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 set:nth fetch
&Selector ASCII:SPACE s:tokenize #1 array: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 set:nth fetch
&Selector ASCII:SPACE s:tokenize #1 array: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 = 9139;
int32_t ngaImage[] = { 1793,-1,9121,9138,201906,0,10,1,10,2,10,3,10,4,10,5,10,6,10,
int32_t ngaImageCells = 9165;
int32_t ngaImage[] = { 1793,-1,9147,9164,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,9121,9138,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,104,0,109,97,116,
99,104,101,100,0,0,63,0,63,64,91,92,93,94,96,123,124,125,126,0,
99,104,101,100,0,0,115,0,63,0,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,
@ -159,7 +159,7 @@ int32_t ngaImage[] = { 1793,-1,9121,9138,201906,0,10,1,10,2,10,3,10,4,10,5,10,6,
2065,10,1,3112,2049,2065,4,16,10,3093,3146,147,118,58,117,112,100,97,116,101,
45,117,115,105,110,103,0,4,1793,3153,15,4,8,10,1,3149,2049,2077,16,10,
3128,3167,147,99,111,112,121,0,1793,3176,1,59,2049,2065,2049,62,10,1,3169,2049,
2252,3,3,10,3159,3196,147,83,99,111,112,101,76,105,115,116,0,9016,9044,10,
2252,3,3,10,3159,3196,147,83,99,111,112,101,76,105,115,116,0,9042,9070,10,
3183,3205,147,123,123,0,2049,1570,2,1,3196,2049,62,16,10,3199,3230,147,45,45,
45,114,101,118,101,97,108,45,45,45,0,2049,1570,1,3196,2049,2908,16,10,3214,
3244,147,125,125,0,1,3196,2049,59,4,15,11,1793,3258,3841,3196,4097,2,10,1,
@ -354,106 +354,108 @@ int32_t ngaImage[] = { 1793,-1,9121,9138,201906,0,10,1,10,2,10,3,10,4,10,5,10,6,
10,1,7017,2049,2065,10,1,7015,2049,2065,1,7009,7,10,1,7009,8,3,10,6991,
7053,147,100,58,108,111,111,107,117,112,45,120,116,0,1,0,4,1793,7079,2049,
2055,2049,161,15,11,1793,7072,4,1,2016,2049,2065,10,1,7066,1,11,2049,67,10,
1,7058,2049,7005,3,10,7038,7099,147,115,101,116,58,108,101,110,103,116,104,0,
15,10,7085,7124,147,115,101,116,58,99,111,117,110,116,101,100,45,114,101,115,
117,108,116,115,0,8,2049,1835,1793,7137,2,2049,108,1,108,2049,2252,10,1,7129,
2049,2065,10,7101,7161,147,115,101,116,58,102,114,111,109,45,115,116,114,105,110,
103,0,2049,1835,1793,7180,2,2049,82,2049,108,1793,7175,2049,108,10,1,7172,2049,4023,
10,1,7165,2049,2065,10,7142,7190,134,81,0,0,7142,7207,147,115,101,116,58,102,
111,114,45,101,97,99,104,0,1,7190,1793,7237,4097,7190,2049,59,1793,7231,2049,59,
4,1793,7226,3841,7190,8,10,1,7222,2049,2065,10,1,7217,2049,2252,3,10,1,7211,
2049,3107,10,7191,7253,147,115,101,116,58,100,117,112,0,2049,1835,1793,7271,2,15,
2049,108,1793,7266,2049,108,10,1,7263,2049,7207,10,1,7257,2049,2065,10,7242,7290,147,
115,101,116,58,102,105,108,116,101,114,0,1793,7318,67502597,1793,7297,8,10,1,7295,
2049,2065,4,1793,7307,2049,108,10,1,7304,1793,7313,3,10,1,7311,2049,67,10,1,
7292,2049,6951,2049,1835,1793,7333,67502597,15,2049,108,2049,7207,10,1,7326,2049,2065,2049,1835,
67502597,18,2049,2921,67502597,16,10,7276,7351,134,70,0,0,7276,7369,147,115,101,116,58,
99,111,110,116,97,105,110,115,63,0,1,7351,2049,3074,1793,7383,67502597,11,3841,7351,
22,4097,7351,10,1,7375,2049,7207,3,3841,7351,10,7352,7415,147,115,101,116,58,99,
111,110,116,97,105,110,115,45,115,116,114,105,110,103,63,0,1,7351,2049,3074,
1793,7430,67502597,2049,96,3841,7351,22,4097,7351,10,1,7421,2049,7207,3,3841,7351,10,7391,
7449,147,115,101,116,58,109,97,112,0,1793,7455,8,2049,108,10,1,7451,2049,6951,
2049,1835,1793,7470,67502597,15,2049,108,2049,7207,10,1,7463,2049,2065,10,7438,7490,147,115,
101,116,58,114,101,118,101,114,115,101,0,2049,1835,1793,7524,2049,59,1793,7502,17,
2049,2921,10,1,7498,2049,2077,2,2049,108,1793,7518,2,15,2049,108,2049,2921,10,1,
7511,2049,2252,3,10,1,7494,2049,2065,10,7475,7540,147,115,101,116,58,110,116,104,
0,17,2049,2908,10,7529,7558,147,115,101,116,58,114,101,100,117,99,101,0,1793,
7562,4,10,1,7560,2049,2065,2049,7207,10,7544,7581,147,115,101,116,58,109,97,107,
101,0,2049,7124,2049,7490,10,7569,7591,159,123,0,1,288,2049,159,1,1556,2049,147,
1,288,2049,159,10,7586,7609,159,125,0,1,305,2049,159,1,2065,2049,147,1,1556,
2049,147,1,13,2049,153,1,41,2049,153,1,2921,2049,147,1,305,2049,159,1,7581,
2049,147,10,7604,7648,134,73,48,0,105,105,0,7642,7657,134,73,49,0,46,46,
0,7651,7666,134,73,50,0,46,46,0,7660,7675,134,73,51,0,46,46,0,7669,
7688,147,111,112,99,111,100,101,0,2049,3697,46,46,0,1,7690,1793,7700,1,0,
10,1,7697,2049,2326,2049,3697,108,105,0,1,7706,1793,7716,1,1,10,1,7713,2049,
2326,2049,3697,100,117,0,1,7722,1793,7732,1,2,10,1,7729,2049,2326,2049,3697,100,
114,0,1,7738,1793,7748,1,3,10,1,7745,2049,2326,2049,3697,115,119,0,1,7754,
1793,7764,1,4,10,1,7761,2049,2326,2049,3697,112,117,0,1,7770,1793,7780,1,5,
10,1,7777,2049,2326,2049,3697,112,111,0,1,7786,1793,7796,1,6,10,1,7793,2049,
2326,2049,3697,106,117,0,1,7802,1793,7812,1,7,10,1,7809,2049,2326,2049,3697,99,
97,0,1,7818,1793,7828,1,8,10,1,7825,2049,2326,2049,3697,99,99,0,1,7834,
1793,7844,1,9,10,1,7841,2049,2326,2049,3697,114,101,0,1,7850,1793,7860,1,10,
10,1,7857,2049,2326,2049,3697,101,113,0,1,7866,1793,7876,1,11,10,1,7873,2049,
2326,2049,3697,110,101,0,1,7882,1793,7892,1,12,10,1,7889,2049,2326,2049,3697,108,
116,0,1,7898,1793,7908,1,13,10,1,7905,2049,2326,2049,3697,103,116,0,1,7914,
1793,7924,1,14,10,1,7921,2049,2326,2049,3697,102,101,0,1,7930,1793,7940,1,15,
10,1,7937,2049,2326,2049,3697,115,116,0,1,7946,1793,7956,1,16,10,1,7953,2049,
2326,2049,3697,97,100,0,1,7962,1793,7972,1,17,10,1,7969,2049,2326,2049,3697,115,
117,0,1,7978,1793,7988,1,18,10,1,7985,2049,2326,2049,3697,109,117,0,1,7994,
1793,8004,1,19,10,1,8001,2049,2326,2049,3697,100,105,0,1,8010,1793,8020,1,20,
10,1,8017,2049,2326,2049,3697,97,110,0,1,8026,1793,8036,1,21,10,1,8033,2049,
2326,2049,3697,111,114,0,1,8042,1793,8052,1,22,10,1,8049,2049,2326,2049,3697,120,
111,0,1,8058,1793,8068,1,23,10,1,8065,2049,2326,2049,3697,115,104,0,1,8074,
1793,8084,1,24,10,1,8081,2049,2326,2049,3697,122,114,0,1,8090,1793,8100,1,25,
10,1,8097,2049,2326,2049,3697,101,110,0,1,8106,1793,8116,1,26,10,1,8113,2049,
2326,2049,3697,105,101,0,1,8122,1793,8132,1,27,10,1,8129,2049,2326,2049,3697,105,
113,0,1,8138,1793,8148,1,28,10,1,8145,2049,2326,2049,3697,105,105,0,1,8154,
1793,8164,1,29,10,1,8161,2049,2326,3,1,0,10,7678,8180,147,112,97,99,107,
0,1,7648,2049,7688,1,7657,2049,7688,1,7666,2049,7688,1,7675,2049,7688,1,-24,24,
4,1,-16,24,17,4,1,-8,24,17,4,17,10,7604,8217,147,105,0,2,1,
7648,1,2,2049,3167,1,2,17,2,1,7657,1,2,2049,3167,1,2,17,2,1,
7666,1,2,2049,3167,1,2,17,1,7675,1,2,2049,3167,2049,8180,2049,108,10,8212,
8263,147,100,0,2049,108,10,8258,8271,147,114,0,2049,200,2049,161,15,2049,108,10,
8266,8286,159,97,115,123,0,3841,127,1,127,2049,3074,10,8279,8300,159,125,97,115,
0,4097,127,10,8293,8319,147,99,117,114,114,101,110,116,45,108,105,110,101,0,
2049,3568,1,1025,18,10,8303,8341,147,99,111,117,110,116,45,116,111,107,101,110,
115,0,1793,8347,1,32,11,10,1,8343,2049,4452,2049,82,10,8325,8368,147,110,101,
120,116,45,116,111,107,101,110,0,1,32,2049,6165,10,8354,8391,147,112,114,111,
99,101,115,115,45,116,111,107,101,110,115,0,1793,8417,2049,8368,4,1793,8410,2,
2049,82,2049,2583,1,367,1,11,2049,67,10,1,8398,2049,2065,2049,2908,10,1,8393,
2049,2252,2049,367,10,8293,8438,147,115,58,101,118,97,108,117,97,116,101,0,2049,
8319,2049,4655,2049,8319,2,2049,8341,2049,8391,10,8424,8456,134,76,80,0,0,8450,8466,
134,73,110,100,101,120,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
1,7058,2049,7005,3,10,7038,7101,147,97,114,114,97,121,58,108,101,110,103,116,
104,0,15,10,7085,7128,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,1835,1793,7141,2,2049,108,1,108,2049,
2252,10,1,7133,2049,2065,10,7103,7167,147,97,114,114,97,121,58,102,114,111,109,
45,115,116,114,105,110,103,0,2049,1835,1793,7186,2,2049,82,2049,108,1793,7181,2049,
108,10,1,7178,2049,4023,10,1,7171,2049,2065,10,7146,7196,134,81,0,0,7146,7215,
147,97,114,114,97,121,58,102,111,114,45,101,97,99,104,0,1,7196,1793,7245,
4097,7196,2049,59,1793,7239,2049,59,4,1793,7234,3841,7196,8,10,1,7230,2049,2065,10,
1,7225,2049,2252,3,10,1,7219,2049,3107,10,7197,7263,147,97,114,114,97,121,58,
100,117,112,0,2049,1835,1793,7281,2,15,2049,108,1793,7276,2049,108,10,1,7273,2049,
7215,10,1,7267,2049,2065,10,7250,7302,147,97,114,114,97,121,58,102,105,108,116,
101,114,0,1793,7330,67502597,1793,7309,8,10,1,7307,2049,2065,4,1793,7319,2049,108,10,
1,7316,1793,7325,3,10,1,7323,2049,67,10,1,7304,2049,6951,2049,1835,1793,7345,67502597,
15,2049,108,2049,7215,10,1,7338,2049,2065,2049,1835,67502597,18,2049,2921,67502597,16,10,7286,
7363,134,70,0,0,7286,7383,147,97,114,114,97,121,58,99,111,110,116,97,105,
110,115,63,0,1,7363,2049,3074,1793,7397,67502597,11,3841,7363,22,4097,7363,10,1,7389,
2049,7215,3,3841,7363,10,7364,7431,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,7363,2049,3074,1793,7446,67502597,2049,
96,3841,7363,22,4097,7363,10,1,7437,2049,7215,3,3841,7363,10,7405,7467,147,97,114,
114,97,121,58,109,97,112,0,1793,7473,8,2049,108,10,1,7469,2049,6951,2049,1835,
1793,7488,67502597,15,2049,108,2049,7215,10,1,7481,2049,2065,10,7454,7510,147,97,114,114,
97,121,58,114,101,118,101,114,115,101,0,2049,1835,1793,7544,2049,59,1793,7522,17,
2049,2921,10,1,7518,2049,2077,2,2049,108,1793,7538,2,15,2049,108,2049,2921,10,1,
7531,2049,2252,3,10,1,7514,2049,2065,10,7493,7562,147,97,114,114,97,121,58,110,
116,104,0,17,2049,2908,10,7549,7582,147,97,114,114,97,121,58,114,101,100,117,
99,101,0,1793,7586,4,10,1,7584,2049,2065,2049,7215,10,7566,7607,147,97,114,114,
97,121,58,109,97,107,101,0,2049,7128,2049,7510,10,7593,7617,159,123,0,1,288,
2049,159,1,1556,2049,147,1,288,2049,159,10,7612,7635,159,125,0,1,305,2049,159,
1,2065,2049,147,1,1556,2049,147,1,13,2049,153,1,41,2049,153,1,2921,2049,147,
1,305,2049,159,1,7607,2049,147,10,7630,7674,134,73,48,0,105,105,0,7668,7683,
134,73,49,0,46,46,0,7677,7692,134,73,50,0,46,46,0,7686,7701,134,73,
51,0,46,46,0,7695,7714,147,111,112,99,111,100,101,0,2049,3697,46,46,0,
1,7716,1793,7726,1,0,10,1,7723,2049,2326,2049,3697,108,105,0,1,7732,1793,7742,
1,1,10,1,7739,2049,2326,2049,3697,100,117,0,1,7748,1793,7758,1,2,10,1,
7755,2049,2326,2049,3697,100,114,0,1,7764,1793,7774,1,3,10,1,7771,2049,2326,2049,
3697,115,119,0,1,7780,1793,7790,1,4,10,1,7787,2049,2326,2049,3697,112,117,0,
1,7796,1793,7806,1,5,10,1,7803,2049,2326,2049,3697,112,111,0,1,7812,1793,7822,
1,6,10,1,7819,2049,2326,2049,3697,106,117,0,1,7828,1793,7838,1,7,10,1,
7835,2049,2326,2049,3697,99,97,0,1,7844,1793,7854,1,8,10,1,7851,2049,2326,2049,
3697,99,99,0,1,7860,1793,7870,1,9,10,1,7867,2049,2326,2049,3697,114,101,0,
1,7876,1793,7886,1,10,10,1,7883,2049,2326,2049,3697,101,113,0,1,7892,1793,7902,
1,11,10,1,7899,2049,2326,2049,3697,110,101,0,1,7908,1793,7918,1,12,10,1,
7915,2049,2326,2049,3697,108,116,0,1,7924,1793,7934,1,13,10,1,7931,2049,2326,2049,
3697,103,116,0,1,7940,1793,7950,1,14,10,1,7947,2049,2326,2049,3697,102,101,0,
1,7956,1793,7966,1,15,10,1,7963,2049,2326,2049,3697,115,116,0,1,7972,1793,7982,
1,16,10,1,7979,2049,2326,2049,3697,97,100,0,1,7988,1793,7998,1,17,10,1,
7995,2049,2326,2049,3697,115,117,0,1,8004,1793,8014,1,18,10,1,8011,2049,2326,2049,
3697,109,117,0,1,8020,1793,8030,1,19,10,1,8027,2049,2326,2049,3697,100,105,0,
1,8036,1793,8046,1,20,10,1,8043,2049,2326,2049,3697,97,110,0,1,8052,1793,8062,
1,21,10,1,8059,2049,2326,2049,3697,111,114,0,1,8068,1793,8078,1,22,10,1,
8075,2049,2326,2049,3697,120,111,0,1,8084,1793,8094,1,23,10,1,8091,2049,2326,2049,
3697,115,104,0,1,8100,1793,8110,1,24,10,1,8107,2049,2326,2049,3697,122,114,0,
1,8116,1793,8126,1,25,10,1,8123,2049,2326,2049,3697,101,110,0,1,8132,1793,8142,
1,26,10,1,8139,2049,2326,2049,3697,105,101,0,1,8148,1793,8158,1,27,10,1,
8155,2049,2326,2049,3697,105,113,0,1,8164,1793,8174,1,28,10,1,8171,2049,2326,2049,
3697,105,105,0,1,8180,1793,8190,1,29,10,1,8187,2049,2326,3,1,0,10,7704,
8206,147,112,97,99,107,0,1,7674,2049,7714,1,7683,2049,7714,1,7692,2049,7714,1,
7701,2049,7714,1,-24,24,4,1,-16,24,17,4,1,-8,24,17,4,17,10,7630,
8243,147,105,0,2,1,7674,1,2,2049,3167,1,2,17,2,1,7683,1,2,2049,
3167,1,2,17,2,1,7692,1,2,2049,3167,1,2,17,1,7701,1,2,2049,3167,
2049,8206,2049,108,10,8238,8289,147,100,0,2049,108,10,8284,8297,147,114,0,2049,200,
2049,161,15,2049,108,10,8292,8312,159,97,115,123,0,3841,127,1,127,2049,3074,10,
8305,8326,159,125,97,115,0,4097,127,10,8319,8345,147,99,117,114,114,101,110,116,
45,108,105,110,101,0,2049,3568,1,1025,18,10,8329,8367,147,99,111,117,110,116,
45,116,111,107,101,110,115,0,1793,8373,1,32,11,10,1,8369,2049,4452,2049,82,
10,8351,8394,147,110,101,120,116,45,116,111,107,101,110,0,1,32,2049,6165,10,
8380,8417,147,112,114,111,99,101,115,115,45,116,111,107,101,110,115,0,1793,8443,
2049,8394,4,1793,8436,2,2049,82,2049,2583,1,367,1,11,2049,67,10,1,8424,2049,
2065,2049,2908,10,1,8419,2049,2252,2049,367,10,8319,8464,147,115,58,101,118,97,108,
117,97,116,101,0,2049,8345,2049,4655,2049,8345,2,2049,8367,2049,8417,10,8450,8482,134,
76,80,0,0,8476,8492,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,8457,8602,147,110,101,
120,116,0,3841,8456,1,8466,17,2049,3009,10,8594,8618,147,112,114,101,112,0,1,
8456,2049,3009,1,0,3841,8456,1,8466,17,16,10,8610,8639,147,100,111,110,101,0,
1,8456,2049,3024,10,8424,8649,147,73,0,3841,8456,1,8466,17,15,10,8644,8661,147,
74,0,3841,8456,1,8466,17,2049,2921,15,10,8656,8675,147,75,0,3841,8456,1,8466,
17,1,2,18,15,10,8670,8706,147,116,105,109,101,115,60,119,105,116,104,45,
105,110,100,101,120,62,0,2049,8618,4,1793,8726,25,2049,2921,5,1,21,2049,2077,
6,2049,8602,1,8711,7,10,1,8711,8,3,2049,8639,10,8685,8741,159,104,111,111,
107,0,1,1793,2049,108,2049,1835,2049,2908,2049,108,10,8733,8764,147,115,101,116,45,
104,111,111,107,0,2049,2908,16,10,8752,8778,147,117,110,104,111,111,107,0,2049,
2908,2,2049,2908,4,16,10,8768,8802,147,105,111,58,101,110,117,109,101,114,97,
116,101,0,27,10,8786,8816,147,105,111,58,113,117,101,114,121,0,28,10,8804,
8831,147,105,111,58,105,110,118,111,107,101,0,29,10,8818,8841,134,83,108,111,
116,0,0,8818,8857,147,105,111,58,115,99,97,110,45,102,111,114,0,1,-1,
4097,8841,2049,8802,1793,8883,2049,8649,2049,8816,772,67502597,11,1793,8879,2049,8649,4097,8841,10,
1,8874,9,10,1,8865,2049,8706,3,3841,8841,10,8842,8900,147,99,58,112,117,116,
0,1793,8902,1,0,2049,8831,10,8891,8913,147,110,108,0,1,10,2049,8900,10,8907,
8924,147,115,112,0,1,32,2049,8900,10,8918,8936,147,116,97,98,0,1,9,2049,
8900,10,8929,8950,147,115,58,112,117,116,0,1,8900,2049,4023,10,8941,8964,147,110,
58,112,117,116,0,2049,5994,2049,8950,10,8955,8980,147,100,58,119,111,114,100,115,
0,1793,8989,2049,165,2049,8950,2049,8924,10,1,8982,2049,7005,10,8969,9003,147,114,101,
115,101,116,0,2049,1556,25,5,3,6,1,1,18,1,9005,7,10,8994,9030,147,
100,117,109,112,45,115,116,97,99,107,0,2049,1556,25,3,5,2049,9030,6,2,
2049,8964,2049,8924,10,9016,9066,147,100,105,115,112,108,97,121,45,105,102,45,109,
97,116,99,104,101,100,0,2,2049,1835,2049,4323,1793,9078,2049,8950,2049,8924,10,1,
9073,1793,9084,3,10,1,9082,2049,67,10,9016,9105,147,100,58,119,111,114,100,115,
45,119,105,116,104,0,2049,1835,2049,4655,1793,9116,2049,165,2049,9066,10,1,9111,2049,
7005,10,9089,9129,147,70,82,69,69,0,2049,3568,1,1025,18,2049,1835,18,10,0 };
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,8483,8628,147,110,101,120,116,0,3841,8482,1,8492,17,2049,3009,10,8620,8644,147,
112,114,101,112,0,1,8482,2049,3009,1,0,3841,8482,1,8492,17,16,10,8636,8665,
147,100,111,110,101,0,1,8482,2049,3024,10,8450,8675,147,73,0,3841,8482,1,8492,
17,15,10,8670,8687,147,74,0,3841,8482,1,8492,17,2049,2921,15,10,8682,8701,147,
75,0,3841,8482,1,8492,17,1,2,18,15,10,8696,8732,147,116,105,109,101,115,
60,119,105,116,104,45,105,110,100,101,120,62,0,2049,8644,4,1793,8752,25,2049,
2921,5,1,21,2049,2077,6,2049,8628,1,8737,7,10,1,8737,8,3,2049,8665,10,
8711,8767,159,104,111,111,107,0,1,1793,2049,108,2049,1835,2049,2908,2049,108,10,8759,
8790,147,115,101,116,45,104,111,111,107,0,2049,2908,16,10,8778,8804,147,117,110,
104,111,111,107,0,2049,2908,2,2049,2908,4,16,10,8794,8828,147,105,111,58,101,
110,117,109,101,114,97,116,101,0,27,10,8812,8842,147,105,111,58,113,117,101,
114,121,0,28,10,8830,8857,147,105,111,58,105,110,118,111,107,101,0,29,10,
8844,8867,134,83,108,111,116,0,0,8844,8883,147,105,111,58,115,99,97,110,45,
102,111,114,0,1,-1,4097,8867,2049,8828,1793,8909,2049,8675,2049,8842,772,67502597,11,1793,
8905,2049,8675,4097,8867,10,1,8900,9,10,1,8891,2049,8732,3,3841,8867,10,8868,8926,
147,99,58,112,117,116,0,1793,8928,1,0,2049,8857,10,8917,8939,147,110,108,0,
1,10,2049,8926,10,8933,8950,147,115,112,0,1,32,2049,8926,10,8944,8962,147,116,
97,98,0,1,9,2049,8926,10,8955,8976,147,115,58,112,117,116,0,1,8926,2049,
4023,10,8967,8990,147,110,58,112,117,116,0,2049,5994,2049,8976,10,8981,9006,147,100,
58,119,111,114,100,115,0,1793,9015,2049,165,2049,8976,2049,8950,10,1,9008,2049,7005,
10,8995,9029,147,114,101,115,101,116,0,2049,1556,25,5,3,6,1,1,18,1,
9031,7,10,9020,9056,147,100,117,109,112,45,115,116,97,99,107,0,2049,1556,25,
3,5,2049,9056,6,2,2049,8990,2049,8950,10,9042,9092,147,100,105,115,112,108,97,
121,45,105,102,45,109,97,116,99,104,101,100,0,2,2049,1835,2049,4323,1793,9104,
2049,8976,2049,8950,10,1,9099,1793,9110,3,10,1,9108,2049,67,10,9042,9131,147,100,
58,119,111,114,100,115,45,119,105,116,104,0,2049,1835,2049,4655,1793,9142,2049,165,
2049,9092,10,1,9137,2049,7005,10,9115,9155,147,70,82,69,69,0,2049,3568,1,1025,
18,2049,1835,18,10,0 };

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 ] set:for-each ;
:process [ item ] array: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 = 14834;
int32_t ngaImage[] = { 1793,14785,14812,14833,201906,0,10,1,10,2,10,3,10,4,10,5,10,6,10,
int32_t ngaImageCells = 14860;
int32_t ngaImage[] = { 1793,14811,14838,14859,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,14785,14812,14833,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,14812,1025,167841793,180,5,17826049,0,180,2,15,25,524546,165,134287105,181,96,2305,182,459023,
2,14838,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,
@ -159,7 +159,7 @@ int32_t ngaImage[] = { 1793,14785,14812,14833,201906,0,10,1,10,2,10,3,10,4,10,5,
2065,10,1,3112,2049,2065,4,16,10,3093,3146,147,118,58,117,112,100,97,116,101,
45,117,115,105,110,103,0,4,1793,3153,15,4,8,10,1,3149,2049,2077,16,10,
3128,3167,147,99,111,112,121,0,1793,3176,1,59,2049,2065,2049,62,10,1,3169,2049,
2252,3,3,10,3159,3196,147,83,99,111,112,101,76,105,115,116,0,14412,14633,10,
2252,3,3,10,3159,3196,147,83,99,111,112,101,76,105,115,116,0,14438,14659,10,
3183,3205,147,123,123,0,2049,1570,2,1,3196,2049,62,16,10,3199,3230,147,45,45,
45,114,101,118,101,97,108,45,45,45,0,2049,1570,1,3196,2049,2908,16,10,3214,
3244,147,125,125,0,1,3196,2049,59,4,15,11,1793,3258,3841,3196,4097,2,10,1,
@ -354,306 +354,307 @@ int32_t ngaImage[] = { 1793,14785,14812,14833,201906,0,10,1,10,2,10,3,10,4,10,5,
10,1,7017,2049,2065,10,1,7015,2049,2065,1,7009,7,10,1,7009,8,3,10,6991,
7053,147,100,58,108,111,111,107,117,112,45,120,116,0,1,0,4,1793,7079,2049,
2055,2049,161,15,11,1793,7072,4,1,2016,2049,2065,10,1,7066,1,11,2049,67,10,
1,7058,2049,7005,3,10,7038,7099,147,115,101,116,58,108,101,110,103,116,104,0,
15,10,7085,7124,147,115,101,116,58,99,111,117,110,116,101,100,45,114,101,115,
117,108,116,115,0,8,2049,1835,1793,7137,2,2049,108,1,108,2049,2252,10,1,7129,
2049,2065,10,7101,7161,147,115,101,116,58,102,114,111,109,45,115,116,114,105,110,
103,0,2049,1835,1793,7180,2,2049,82,2049,108,1793,7175,2049,108,10,1,7172,2049,4023,
10,1,7165,2049,2065,10,7142,7190,134,81,0,0,7142,7207,147,115,101,116,58,102,
111,114,45,101,97,99,104,0,1,7190,1793,7237,4097,7190,2049,59,1793,7231,2049,59,
4,1793,7226,3841,7190,8,10,1,7222,2049,2065,10,1,7217,2049,2252,3,10,1,7211,
2049,3107,10,7191,7253,147,115,101,116,58,100,117,112,0,2049,1835,1793,7271,2,15,
2049,108,1793,7266,2049,108,10,1,7263,2049,7207,10,1,7257,2049,2065,10,7242,7290,147,
115,101,116,58,102,105,108,116,101,114,0,1793,7318,67502597,1793,7297,8,10,1,7295,
2049,2065,4,1793,7307,2049,108,10,1,7304,1793,7313,3,10,1,7311,2049,67,10,1,
7292,2049,6951,2049,1835,1793,7333,67502597,15,2049,108,2049,7207,10,1,7326,2049,2065,2049,1835,
67502597,18,2049,2921,67502597,16,10,7276,7351,134,70,0,0,7276,7369,147,115,101,116,58,
99,111,110,116,97,105,110,115,63,0,1,7351,2049,3074,1793,7383,67502597,11,3841,7351,
22,4097,7351,10,1,7375,2049,7207,3,3841,7351,10,7352,7415,147,115,101,116,58,99,
111,110,116,97,105,110,115,45,115,116,114,105,110,103,63,0,1,7351,2049,3074,
1793,7430,67502597,2049,96,3841,7351,22,4097,7351,10,1,7421,2049,7207,3,3841,7351,10,7391,
7449,147,115,101,116,58,109,97,112,0,1793,7455,8,2049,108,10,1,7451,2049,6951,
2049,1835,1793,7470,67502597,15,2049,108,2049,7207,10,1,7463,2049,2065,10,7438,7490,147,115,
101,116,58,114,101,118,101,114,115,101,0,2049,1835,1793,7524,2049,59,1793,7502,17,
2049,2921,10,1,7498,2049,2077,2,2049,108,1793,7518,2,15,2049,108,2049,2921,10,1,
7511,2049,2252,3,10,1,7494,2049,2065,10,7475,7540,147,115,101,116,58,110,116,104,
0,17,2049,2908,10,7529,7558,147,115,101,116,58,114,101,100,117,99,101,0,1793,
7562,4,10,1,7560,2049,2065,2049,7207,10,7544,7581,147,115,101,116,58,109,97,107,
101,0,2049,7124,2049,7490,10,7569,7591,159,123,0,1,288,2049,159,1,1556,2049,147,
1,288,2049,159,10,7586,7609,159,125,0,1,305,2049,159,1,2065,2049,147,1,1556,
2049,147,1,13,2049,153,1,41,2049,153,1,2921,2049,147,1,305,2049,159,1,7581,
2049,147,10,7604,7648,134,73,48,0,115,116,0,7642,7657,134,73,49,0,115,116,
0,7651,7666,134,73,50,0,115,116,0,7660,7675,134,73,51,0,115,116,0,7669,
7688,147,111,112,99,111,100,101,0,2049,3697,46,46,0,1,7690,1793,7700,1,0,
10,1,7697,2049,2326,2049,3697,108,105,0,1,7706,1793,7716,1,1,10,1,7713,2049,
2326,2049,3697,100,117,0,1,7722,1793,7732,1,2,10,1,7729,2049,2326,2049,3697,100,
114,0,1,7738,1793,7748,1,3,10,1,7745,2049,2326,2049,3697,115,119,0,1,7754,
1793,7764,1,4,10,1,7761,2049,2326,2049,3697,112,117,0,1,7770,1793,7780,1,5,
10,1,7777,2049,2326,2049,3697,112,111,0,1,7786,1793,7796,1,6,10,1,7793,2049,
2326,2049,3697,106,117,0,1,7802,1793,7812,1,7,10,1,7809,2049,2326,2049,3697,99,
97,0,1,7818,1793,7828,1,8,10,1,7825,2049,2326,2049,3697,99,99,0,1,7834,
1793,7844,1,9,10,1,7841,2049,2326,2049,3697,114,101,0,1,7850,1793,7860,1,10,
10,1,7857,2049,2326,2049,3697,101,113,0,1,7866,1793,7876,1,11,10,1,7873,2049,
2326,2049,3697,110,101,0,1,7882,1793,7892,1,12,10,1,7889,2049,2326,2049,3697,108,
116,0,1,7898,1793,7908,1,13,10,1,7905,2049,2326,2049,3697,103,116,0,1,7914,
1793,7924,1,14,10,1,7921,2049,2326,2049,3697,102,101,0,1,7930,1793,7940,1,15,
10,1,7937,2049,2326,2049,3697,115,116,0,1,7946,1793,7956,1,16,10,1,7953,2049,
2326,2049,3697,97,100,0,1,7962,1793,7972,1,17,10,1,7969,2049,2326,2049,3697,115,
117,0,1,7978,1793,7988,1,18,10,1,7985,2049,2326,2049,3697,109,117,0,1,7994,
1793,8004,1,19,10,1,8001,2049,2326,2049,3697,100,105,0,1,8010,1793,8020,1,20,
10,1,8017,2049,2326,2049,3697,97,110,0,1,8026,1793,8036,1,21,10,1,8033,2049,
2326,2049,3697,111,114,0,1,8042,1793,8052,1,22,10,1,8049,2049,2326,2049,3697,120,
111,0,1,8058,1793,8068,1,23,10,1,8065,2049,2326,2049,3697,115,104,0,1,8074,
1793,8084,1,24,10,1,8081,2049,2326,2049,3697,122,114,0,1,8090,1793,8100,1,25,
10,1,8097,2049,2326,2049,3697,101,110,0,1,8106,1793,8116,1,26,10,1,8113,2049,
2326,2049,3697,105,101,0,1,8122,1793,8132,1,27,10,1,8129,2049,2326,2049,3697,105,
113,0,1,8138,1793,8148,1,28,10,1,8145,2049,2326,2049,3697,105,105,0,1,8154,
1793,8164,1,29,10,1,8161,2049,2326,3,1,0,10,7678,8180,147,112,97,99,107,
0,1,7648,2049,7688,1,7657,2049,7688,1,7666,2049,7688,1,7675,2049,7688,1,-24,24,
4,1,-16,24,17,4,1,-8,24,17,4,17,10,7604,8217,147,105,0,2,1,
7648,1,2,2049,3167,1,2,17,2,1,7657,1,2,2049,3167,1,2,17,2,1,
7666,1,2,2049,3167,1,2,17,1,7675,1,2,2049,3167,2049,8180,2049,108,10,8212,
8263,147,100,0,2049,108,10,8258,8271,147,114,0,2049,200,2049,161,15,2049,108,10,
8266,8286,159,97,115,123,0,3841,127,1,127,2049,3074,10,8279,8300,159,125,97,115,
0,4097,127,10,8293,8319,147,99,117,114,114,101,110,116,45,108,105,110,101,0,
2049,3568,1,1025,18,10,8303,8341,147,99,111,117,110,116,45,116,111,107,101,110,
115,0,1793,8347,1,32,11,10,1,8343,2049,4452,2049,82,10,8325,8368,147,110,101,
120,116,45,116,111,107,101,110,0,1,32,2049,6165,10,8354,8391,147,112,114,111,
99,101,115,115,45,116,111,107,101,110,115,0,1793,8417,2049,8368,4,1793,8410,2,
2049,82,2049,2583,1,367,1,11,2049,67,10,1,8398,2049,2065,2049,2908,10,1,8393,
2049,2252,2049,367,10,8293,8438,147,115,58,101,118,97,108,117,97,116,101,0,2049,
8319,2049,4655,2049,8319,2,2049,8341,2049,8391,10,8424,8456,134,76,80,0,0,8450,8466,
134,73,110,100,101,120,0,0,8,0,0,0,0,0,0,0,0,0,0,0,
1,7058,2049,7005,3,10,7038,7101,147,97,114,114,97,121,58,108,101,110,103,116,
104,0,15,10,7085,7128,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,1835,1793,7141,2,2049,108,1,108,2049,
2252,10,1,7133,2049,2065,10,7103,7167,147,97,114,114,97,121,58,102,114,111,109,
45,115,116,114,105,110,103,0,2049,1835,1793,7186,2,2049,82,2049,108,1793,7181,2049,
108,10,1,7178,2049,4023,10,1,7171,2049,2065,10,7146,7196,134,81,0,0,7146,7215,
147,97,114,114,97,121,58,102,111,114,45,101,97,99,104,0,1,7196,1793,7245,
4097,7196,2049,59,1793,7239,2049,59,4,1793,7234,3841,7196,8,10,1,7230,2049,2065,10,
1,7225,2049,2252,3,10,1,7219,2049,3107,10,7197,7263,147,97,114,114,97,121,58,
100,117,112,0,2049,1835,1793,7281,2,15,2049,108,1793,7276,2049,108,10,1,7273,2049,
7215,10,1,7267,2049,2065,10,7250,7302,147,97,114,114,97,121,58,102,105,108,116,
101,114,0,1793,7330,67502597,1793,7309,8,10,1,7307,2049,2065,4,1793,7319,2049,108,10,
1,7316,1793,7325,3,10,1,7323,2049,67,10,1,7304,2049,6951,2049,1835,1793,7345,67502597,
15,2049,108,2049,7215,10,1,7338,2049,2065,2049,1835,67502597,18,2049,2921,67502597,16,10,7286,
7363,134,70,0,0,7286,7383,147,97,114,114,97,121,58,99,111,110,116,97,105,
110,115,63,0,1,7363,2049,3074,1793,7397,67502597,11,3841,7363,22,4097,7363,10,1,7389,
2049,7215,3,3841,7363,10,7364,7431,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,7363,2049,3074,1793,7446,67502597,2049,
96,3841,7363,22,4097,7363,10,1,7437,2049,7215,3,3841,7363,10,7405,7467,147,97,114,
114,97,121,58,109,97,112,0,1793,7473,8,2049,108,10,1,7469,2049,6951,2049,1835,
1793,7488,67502597,15,2049,108,2049,7215,10,1,7481,2049,2065,10,7454,7510,147,97,114,114,
97,121,58,114,101,118,101,114,115,101,0,2049,1835,1793,7544,2049,59,1793,7522,17,
2049,2921,10,1,7518,2049,2077,2,2049,108,1793,7538,2,15,2049,108,2049,2921,10,1,
7531,2049,2252,3,10,1,7514,2049,2065,10,7493,7562,147,97,114,114,97,121,58,110,
116,104,0,17,2049,2908,10,7549,7582,147,97,114,114,97,121,58,114,101,100,117,
99,101,0,1793,7586,4,10,1,7584,2049,2065,2049,7215,10,7566,7607,147,97,114,114,
97,121,58,109,97,107,101,0,2049,7128,2049,7510,10,7593,7617,159,123,0,1,288,
2049,159,1,1556,2049,147,1,288,2049,159,10,7612,7635,159,125,0,1,305,2049,159,
1,2065,2049,147,1,1556,2049,147,1,13,2049,153,1,41,2049,153,1,2921,2049,147,
1,305,2049,159,1,7607,2049,147,10,7630,7674,134,73,48,0,115,116,0,7668,7683,
134,73,49,0,115,116,0,7677,7692,134,73,50,0,115,116,0,7686,7701,134,73,
51,0,115,116,0,7695,7714,147,111,112,99,111,100,101,0,2049,3697,46,46,0,
1,7716,1793,7726,1,0,10,1,7723,2049,2326,2049,3697,108,105,0,1,7732,1793,7742,
1,1,10,1,7739,2049,2326,2049,3697,100,117,0,1,7748,1793,7758,1,2,10,1,
7755,2049,2326,2049,3697,100,114,0,1,7764,1793,7774,1,3,10,1,7771,2049,2326,2049,
3697,115,119,0,1,7780,1793,7790,1,4,10,1,7787,2049,2326,2049,3697,112,117,0,
1,7796,1793,7806,1,5,10,1,7803,2049,2326,2049,3697,112,111,0,1,7812,1793,7822,
1,6,10,1,7819,2049,2326,2049,3697,106,117,0,1,7828,1793,7838,1,7,10,1,
7835,2049,2326,2049,3697,99,97,0,1,7844,1793,7854,1,8,10,1,7851,2049,2326,2049,
3697,99,99,0,1,7860,1793,7870,1,9,10,1,7867,2049,2326,2049,3697,114,101,0,
1,7876,1793,7886,1,10,10,1,7883,2049,2326,2049,3697,101,113,0,1,7892,1793,7902,
1,11,10,1,7899,2049,2326,2049,3697,110,101,0,1,7908,1793,7918,1,12,10,1,
7915,2049,2326,2049,3697,108,116,0,1,7924,1793,7934,1,13,10,1,7931,2049,2326,2049,
3697,103,116,0,1,7940,1793,7950,1,14,10,1,7947,2049,2326,2049,3697,102,101,0,
1,7956,1793,7966,1,15,10,1,7963,2049,2326,2049,3697,115,116,0,1,7972,1793,7982,
1,16,10,1,7979,2049,2326,2049,3697,97,100,0,1,7988,1793,7998,1,17,10,1,
7995,2049,2326,2049,3697,115,117,0,1,8004,1793,8014,1,18,10,1,8011,2049,2326,2049,
3697,109,117,0,1,8020,1793,8030,1,19,10,1,8027,2049,2326,2049,3697,100,105,0,
1,8036,1793,8046,1,20,10,1,8043,2049,2326,2049,3697,97,110,0,1,8052,1793,8062,
1,21,10,1,8059,2049,2326,2049,3697,111,114,0,1,8068,1793,8078,1,22,10,1,
8075,2049,2326,2049,3697,120,111,0,1,8084,1793,8094,1,23,10,1,8091,2049,2326,2049,
3697,115,104,0,1,8100,1793,8110,1,24,10,1,8107,2049,2326,2049,3697,122,114,0,
1,8116,1793,8126,1,25,10,1,8123,2049,2326,2049,3697,101,110,0,1,8132,1793,8142,
1,26,10,1,8139,2049,2326,2049,3697,105,101,0,1,8148,1793,8158,1,27,10,1,
8155,2049,2326,2049,3697,105,113,0,1,8164,1793,8174,1,28,10,1,8171,2049,2326,2049,
3697,105,105,0,1,8180,1793,8190,1,29,10,1,8187,2049,2326,3,1,0,10,7704,
8206,147,112,97,99,107,0,1,7674,2049,7714,1,7683,2049,7714,1,7692,2049,7714,1,
7701,2049,7714,1,-24,24,4,1,-16,24,17,4,1,-8,24,17,4,17,10,7630,
8243,147,105,0,2,1,7674,1,2,2049,3167,1,2,17,2,1,7683,1,2,2049,
3167,1,2,17,2,1,7692,1,2,2049,3167,1,2,17,1,7701,1,2,2049,3167,
2049,8206,2049,108,10,8238,8289,147,100,0,2049,108,10,8284,8297,147,114,0,2049,200,
2049,161,15,2049,108,10,8292,8312,159,97,115,123,0,3841,127,1,127,2049,3074,10,
8305,8326,159,125,97,115,0,4097,127,10,8319,8345,147,99,117,114,114,101,110,116,
45,108,105,110,101,0,2049,3568,1,1025,18,10,8329,8367,147,99,111,117,110,116,
45,116,111,107,101,110,115,0,1793,8373,1,32,11,10,1,8369,2049,4452,2049,82,
10,8351,8394,147,110,101,120,116,45,116,111,107,101,110,0,1,32,2049,6165,10,
8380,8417,147,112,114,111,99,101,115,115,45,116,111,107,101,110,115,0,1793,8443,
2049,8394,4,1793,8436,2,2049,82,2049,2583,1,367,1,11,2049,67,10,1,8424,2049,
2065,2049,2908,10,1,8419,2049,2252,2049,367,10,8319,8464,147,115,58,101,118,97,108,
117,97,116,101,0,2049,8345,2049,4655,2049,8345,2,2049,8367,2049,8417,10,8450,8482,134,
76,80,0,0,8476,8492,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,8457,8602,147,110,101,
120,116,0,3841,8456,1,8466,17,2049,3009,10,8594,8618,147,112,114,101,112,0,1,
8456,2049,3009,1,0,3841,8456,1,8466,17,16,10,8610,8639,147,100,111,110,101,0,
1,8456,2049,3024,10,8424,8649,147,73,0,3841,8456,1,8466,17,15,10,8644,8661,147,
74,0,3841,8456,1,8466,17,2049,2921,15,10,8656,8675,147,75,0,3841,8456,1,8466,
17,1,2,18,15,10,8670,8706,147,116,105,109,101,115,60,119,105,116,104,45,
105,110,100,101,120,62,0,2049,8618,4,1793,8726,25,2049,2921,5,1,21,2049,2077,
6,2049,8602,1,8711,7,10,1,8711,8,3,2049,8639,10,8685,8741,159,104,111,111,
107,0,1,1793,2049,108,2049,1835,2049,2908,2049,108,10,8733,8764,147,115,101,116,45,
104,111,111,107,0,2049,2908,16,10,8752,8778,147,117,110,104,111,111,107,0,2049,
2908,2,2049,2908,4,16,10,8768,8802,147,105,111,58,101,110,117,109,101,114,97,
116,101,0,27,10,8786,8816,147,105,111,58,113,117,101,114,121,0,28,10,8804,
8831,147,105,111,58,105,110,118,111,107,101,0,29,10,8818,8841,134,83,108,111,
116,0,7,8818,8857,147,105,111,58,115,99,97,110,45,102,111,114,0,1,-1,
4097,8841,2049,8802,1793,8883,2049,8649,2049,8816,772,67502597,11,1793,8879,2049,8649,4097,8841,10,
1,8874,9,10,1,8865,2049,8706,3,3841,8841,10,8842,8900,147,99,58,112,117,116,
0,1793,8902,1,0,2049,8831,10,8891,8913,147,110,108,0,1,10,2049,8900,10,8907,
8924,147,115,112,0,1,32,2049,8900,10,8918,8936,147,116,97,98,0,1,9,2049,
8900,10,8929,8950,147,115,58,112,117,116,0,1,8900,2049,4023,10,8941,8964,147,110,
58,112,117,116,0,2049,5994,2049,8950,10,8955,8980,147,100,58,119,111,114,100,115,
0,1793,8989,2049,165,2049,8950,2049,8924,10,1,8982,2049,7005,10,8969,9003,147,114,101,
115,101,116,0,2049,1556,25,5,3,6,1,1,18,1,9005,7,10,8994,9030,147,
100,117,109,112,45,115,116,97,99,107,0,2049,1556,25,3,5,2049,9030,6,2,
2049,8964,2049,8924,10,9016,9066,147,100,105,115,112,108,97,121,45,105,102,45,109,
97,116,99,104,101,100,0,2,2049,1835,2049,4323,1793,9078,2049,8950,2049,8924,10,1,
9073,1793,9084,3,10,1,9082,2049,67,10,9016,9105,147,100,58,119,111,114,100,115,
45,119,105,116,104,0,2049,1835,2049,4655,1793,9116,2049,165,2049,9066,10,1,9111,2049,
7005,10,9089,9129,147,70,82,69,69,0,2049,3568,1,1025,18,2049,1835,18,10,9121,
9155,134,105,111,58,70,105,108,101,115,121,115,116,101,109,0,0,9138,9168,147,
105,100,101,110,116,105,102,121,0,3841,9155,2049,2567,1793,9235,1,4,2049,8857,2,
2049,2602,1793,9223,3,2049,3697,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,9186,2049,
8950,2049,8913,10,1,9183,1793,9230,4097,9155,10,1,9227,2049,67,10,1,9174,9,10,
9121,9260,147,105,111,58,102,105,108,101,45,111,112,101,114,97,116,105,111,110,
0,2049,9168,3841,9155,2049,8831,10,9239,0,134,102,105,108,101,58,82,0,9267,1,
134,102,105,108,101,58,87,0,9277,2,134,102,105,108,101,58,65,0,9287,3,
134,102,105,108,101,58,82,43,0,9297,9321,147,102,105,108,101,58,111,112,101,
110,0,1,0,2049,9260,10,9308,9340,147,102,105,108,101,58,99,108,111,115,101,
0,1,1,2049,9260,10,9326,9358,147,102,105,108,101,58,114,101,97,100,0,1,
2,2049,9260,10,9345,9377,147,102,105,108,101,58,119,114,105,116,101,0,1,3,
2049,9260,10,9363,9395,147,102,105,108,101,58,116,101,108,108,0,1,4,2049,9260,
10,9382,9413,147,102,105,108,101,58,115,101,101,107,0,1,5,2049,9260,10,9400,
9431,147,102,105,108,101,58,115,105,122,101,0,1,6,2049,9260,10,9418,9451,147,
102,105,108,101,58,100,101,108,101,116,101,0,1,7,2049,9260,10,9436,9470,147,
102,105,108,101,58,102,108,117,115,104,0,1,8,2049,9260,10,9456,9491,147,102,
105,108,101,58,101,120,105,115,116,115,63,0,1,0,2049,9321,2,2049,2583,1793,
9505,2049,9340,2049,2428,10,1,9500,1793,9513,3,2049,2440,10,1,9509,2049,67,10,9475,
9544,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,9321,2,2049,9431,4,10,9518,9578,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,9321,2,2049,9431,4,10,9553,9613,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,9321,10,9587,
9625,134,70,73,68,0,0,9618,9634,134,83,105,122,101,0,0,9626,9645,134,65,
99,116,105,111,110,0,0,9635,9656,134,66,117,102,102,101,114,0,0,9646,9666,
147,45,101,111,102,63,0,3841,9625,2049,9395,3841,9634,13,10,9657,9686,147,112,114,
101,115,101,114,118,101,0,1,9625,1793,9701,1,9634,1793,9696,8,10,1,9694,2049,
3107,10,1,9690,2049,3107,10,9587,9724,147,102,105,108,101,58,114,101,97,100,45,
108,105,110,101,0,4097,9625,1793,9781,2049,1835,2,4097,9656,2049,3475,1793,9773,3841,9625,
2049,9358,2,2049,3383,1793,9750,1,13,11,10,1,9746,1793,9758,1,10,11,10,1,
9754,1793,9766,1,0,11,10,1,9762,2049,2129,22,22,10,1,9737,2049,2223,2049,3407,
3,10,1,9728,2049,3499,3841,9656,10,9706,9810,147,102,105,108,101,58,102,111,114,
45,101,97,99,104,45,108,105,110,101,0,1793,9841,4097,9645,2049,9544,4097,9625,4097,
9634,1793,9832,3841,9625,2049,9724,3841,9645,8,2049,9666,10,1,9822,2049,2197,3841,9625,2049,
9340,10,1,9812,2049,9686,10,9788,9853,134,70,73,68,0,0,9846,9862,134,83,105,
122,101,0,0,9788,9877,147,102,105,108,101,58,115,108,117,114,112,0,1793,9907,
2049,9544,4097,9853,4097,9862,2049,3475,3841,9862,1793,9898,3841,9853,2049,9358,2049,3383,10,1,
9891,2049,2252,3841,9853,2049,9340,10,1,9879,2049,3499,10,9863,9919,134,70,73,68,0,
0,9863,9933,147,102,105,108,101,58,115,112,101,119,0,2049,9613,4097,9919,1793,9944,
3841,9919,2049,9377,10,1,9939,2049,4023,3841,9919,2049,9340,10,9920,9966,134,105,111,58,
71,111,112,104,101,114,0,0,9953,9979,147,105,100,101,110,116,105,102,121,0,
3841,9966,2049,2567,1793,10046,1,5,2049,8857,2,2049,2602,1793,10034,3,2049,3697,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,9997,2049,8950,2049,8913,10,1,9994,1793,10041,4097,
9966,10,1,10038,2049,67,10,1,9985,9,10,9920,10064,147,103,111,112,104,101,114,
58,103,101,116,0,2049,9979,1,0,3841,9966,2049,8831,10,10050,10093,134,105,111,58,
70,108,111,97,116,105,110,103,80,111,105,110,116,0,0,10073,10106,147,105,100,
101,110,116,105,102,121,0,3841,10093,2049,2567,1793,10173,1,2,2049,8857,2,2049,2602,
1793,10161,3,2049,3697,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,10124,2049,8950,2049,
8913,10,1,10121,1793,10168,4097,10093,10,1,10165,2049,67,10,1,10112,9,10,10050,10199,
147,105,111,58,102,108,111,97,116,45,111,112,101,114,97,116,105,111,110,0,
2049,10106,3841,10093,2049,8831,10,10177,10220,147,110,58,116,111,45,102,108,111,97,116,
0,1,0,2049,10199,10,10206,10239,147,115,58,116,111,45,102,108,111,97,116,0,
1,1,2049,10199,10,10225,10259,147,102,58,116,111,45,110,117,109,98,101,114,0,
1,2,2049,10199,10,10244,10279,147,102,58,116,111,45,115,116,114,105,110,103,0,
2049,3678,2,1,3,2049,10199,10,10264,10294,147,102,58,43,0,1,4,2049,10199,10,
10287,10306,147,102,58,45,0,1,5,2049,10199,10,10299,10318,147,102,58,42,0,1,
6,2049,10199,10,10311,10330,147,102,58,47,0,1,7,2049,10199,10,10323,10346,147,102,
58,102,108,111,111,114,0,1,8,2049,10199,10,10335,10364,147,102,58,99,101,105,
108,105,110,103,0,1,9,2049,10199,10,10351,10379,147,102,58,115,113,114,116,0,
1,10,2049,10199,10,10369,10393,147,102,58,101,113,63,0,1,11,2049,10199,10,10384,
10408,147,102,58,45,101,113,63,0,1,12,2049,10199,10,10398,10422,147,102,58,108,
116,63,0,1,13,2049,10199,10,10413,10436,147,102,58,103,116,63,0,1,14,2049,
10199,10,10427,10452,147,102,58,100,101,112,116,104,0,1,15,2049,10199,10,10441,10466,
147,102,58,100,117,112,0,1,16,2049,10199,10,10457,10481,147,102,58,100,114,111,
112,0,1,17,2049,10199,10,10471,10496,147,102,58,115,119,97,112,0,1,18,2049,
10199,10,10486,10510,147,102,58,108,111,103,0,1,19,2049,10199,10,10501,10526,147,102,
58,112,111,119,101,114,0,1,20,2049,10199,10,10515,10540,147,102,58,115,105,110,
0,1,21,2049,10199,10,10531,10554,147,102,58,99,111,115,0,1,22,2049,10199,10,
10545,10568,147,102,58,116,97,110,0,1,23,2049,10199,10,10559,10583,147,102,58,97,
115,105,110,0,1,24,2049,10199,10,10573,10598,147,102,58,97,99,111,115,0,1,
25,2049,10199,10,10588,10613,147,102,58,97,116,97,110,0,1,26,2049,10199,10,10603,
10628,147,102,58,112,117,115,104,0,1,27,2049,10199,10,10618,10642,147,102,58,112,
111,112,0,1,28,2049,10199,10,10633,10659,147,102,58,115,113,117,97,114,101,0,
2049,10466,2049,10318,10,10647,10674,147,102,58,111,118,101,114,0,2049,10628,2049,10466,2049,
10642,2049,10496,10,10664,10693,147,102,58,116,117,99,107,0,2049,10466,2049,10628,2049,10496,
2049,10642,10,10683,10711,147,102,58,110,105,112,0,2049,10496,2049,10481,10,10702,10731,147,
102,58,100,114,111,112,45,112,97,105,114,0,2049,10481,2049,10481,10,10716,10750,147,
102,58,100,117,112,45,112,97,105,114,0,2049,10674,2049,10674,10,10736,10764,147,102,
58,114,111,116,0,2049,10628,2049,10496,2049,10642,2049,10496,10,10755,10788,147,102,58,112,
111,115,105,116,105,118,101,63,0,1,0,2049,10220,2049,10436,10,10773,10810,147,102,
58,110,101,103,97,116,105,118,101,63,0,1,0,2049,10220,2049,10422,10,10795,10829,
147,102,58,110,101,103,97,116,101,0,1,-1,2049,10220,2049,10318,10,10817,10845,147,
102,58,97,98,115,0,2049,10466,2049,10810,1793,10854,2049,10829,10,1,10851,9,10,10836,
10870,159,112,114,101,102,105,120,58,46,0,2049,1806,1793,10877,2049,3723,10,1,10874,
1793,10884,2049,3652,10,1,10881,2049,67,1,10239,2049,147,10,10858,10902,147,102,58,112,
117,116,0,2049,10279,2049,8950,10,10893,10915,147,102,58,80,73,0,2049,3697,51,46,
49,52,49,53,57,50,0,1,10917,2049,10239,10,10907,10938,147,102,58,69,0,2049,
3697,50,46,55,49,56,50,56,49,0,1,10940,2049,10239,10,10931,10963,147,102,58,
78,65,78,0,2049,3697,48,0,1,10965,2049,10239,2049,3697,48,0,1,10973,2049,10239,
2049,10330,10,10954,10991,147,102,58,73,78,70,0,2049,3697,49,46,48,0,1,10993,
2049,10239,2049,3697,48,0,1,11003,2049,10239,2049,10330,10,10982,11022,147,102,58,45,73,
78,70,0,2049,3697,45,49,46,48,0,1,11024,2049,10239,2049,3697,48,0,1,11035,
2049,10239,2049,10330,10,11012,11054,147,102,58,110,97,110,63,0,2049,10466,2049,10408,10,
11044,11069,147,102,58,105,110,102,63,0,2049,10991,2049,10393,10,11059,11085,147,102,58,
45,105,110,102,63,0,2049,11022,2049,10393,10,11074,11101,147,102,58,114,111,117,110,
100,0,2049,10466,2049,10810,1793,11122,2049,3697,48,46,53,0,1,11109,2049,10239,2049,10306,
2049,10364,10,1,11107,1793,11141,2049,3697,48,46,53,0,1,11128,2049,10239,2049,10294,2049,
10346,10,1,11126,2049,67,10,11090,11155,147,102,58,109,105,110,0,2049,10750,2049,10422,
1,10481,1,10711,2049,67,10,11146,11175,147,102,58,109,97,120,0,2049,10750,2049,10436,
1,10481,1,10711,2049,67,10,11166,11197,147,102,58,108,105,109,105,116,0,2049,10496,
2049,10628,2049,11155,2049,10642,2049,11175,10,11186,11222,147,102,58,98,101,116,119,101,101,
110,63,0,2049,10764,2049,10466,2049,10628,2049,10764,2049,10764,2049,11197,2049,10642,2049,10393,10,
11208,11248,147,102,58,105,110,99,0,2049,3697,49,0,1,11250,2049,10239,2049,10294,10,
11239,11268,147,102,58,100,101,99,0,2049,3697,49,0,1,11270,2049,10239,2049,10306,10,
11259,11289,147,102,58,99,97,115,101,0,2049,10674,2049,10393,1793,11301,2049,10481,8,1,
-1,10,1,11295,1793,11309,3,1,0,10,1,11305,2049,67,25,6,771,10,11279,11327,
147,102,58,115,105,103,110,0,2049,10466,2049,3697,48,0,1,11331,2049,10239,2049,10393,
1793,11346,1,0,2049,10481,10,1,11341,2049,2494,2049,3697,48,0,1,11352,2049,10239,2049,
10436,1793,11365,1,1,10,1,11362,1793,11372,1,-1,10,1,11369,2049,67,10,11317,2147483646,
134,117,58,77,65,88,0,11377,-2147483646,134,117,58,77,73,78,0,11386,-2147483648,134,117,
58,78,65,78,0,11395,2147483647,134,117,58,73,78,70,0,11404,-2147483647,134,117,58,45,
73,78,70,0,11413,11431,147,117,58,110,63,0,1,-2147483646,2049,2908,1,2147483646,2049,2921,
2049,2939,10,11423,11452,147,117,58,109,97,120,63,0,1,2147483646,11,10,11442,11466,147,
117,58,109,105,110,63,0,1,-2147483646,11,10,11456,11481,147,117,58,122,101,114,111,
63,0,2049,2567,10,11470,11494,147,117,58,110,97,110,63,0,1,-2147483648,11,10,11484,
11508,147,117,58,105,110,102,63,0,1,2147483647,11,10,11498,11523,147,117,58,45,105,
110,102,63,0,1,-2147483647,11,10,11512,11537,147,117,58,99,108,105,112,0,1,-2147483646,
1,2147483646,2049,2891,10,11527,11557,147,117,58,115,99,97,108,105,110,103,0,1793,11559,
2049,3697,49,48,46,48,101,45,52,0,1,11561,2049,10239,10,11544,11586,147,102,58,
101,110,99,111,100,101,0,2049,3697,48,46,53,0,1,11588,2049,10239,2049,10526,2049,
11557,2049,3697,45,49,46,48,0,1,11602,2049,10239,2049,10526,2049,10318,10,11574,11628,147,
102,58,100,101,99,111,100,101,0,2049,10659,2049,11557,2049,10659,2049,10318,10,11544,11647,
147,102,58,116,111,45,117,0,2049,10466,2049,11586,2049,11101,2049,10259,2049,11537,2049,10466,
2049,11054,1793,11667,3,1,-2147483648,10,1,11663,9,2049,10466,2049,11069,1793,11680,3,1,2147483647,
10,1,11676,9,2049,10466,2049,11085,1793,11693,3,1,-2147483647,10,1,11689,9,2049,10481,10,
11637,11709,147,117,58,116,111,45,102,0,2,2049,10220,2049,11628,2,2049,11494,1793,11724,
2049,10481,2049,10963,10,1,11719,9,2,2049,11508,1793,11737,2049,10481,2049,10991,10,1,11732,
9,2,2049,11523,1793,11750,2049,10481,2049,11022,10,1,11745,9,3,10,11699,11766,147,102,
58,115,116,111,114,101,0,1793,11771,2049,11647,10,1,11768,2049,2065,16,10,11755,11788,
147,102,58,102,101,116,99,104,0,15,2049,11709,10,11777,11808,147,102,58,100,117,
109,112,45,115,116,97,99,107,0,2049,10452,2,1793,11816,2049,10628,10,1,11813,2049,
2252,1793,11831,2049,10642,2049,10466,2049,10902,2049,8924,10,1,11822,2049,2252,10,11792,11854,134,
105,111,58,85,110,105,120,83,121,115,99,97,108,108,0,0,11836,11867,147,105,
100,101,110,116,105,102,121,0,3841,11854,2049,2567,1793,11934,1,8,2049,8857,2,2049,
2602,1793,11922,3,2049,3697,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,11885,2049,8950,
2049,8913,10,1,11882,1793,11929,4097,11854,10,1,11926,2049,67,10,1,11873,9,10,11792,
11957,147,105,111,58,117,110,105,120,45,115,121,115,99,97,108,108,0,2049,11867,
3841,11854,2049,8831,10,11938,11979,147,117,110,105,120,58,115,121,115,116,101,109,0,
1,0,2049,11957,10,11964,11997,147,117,110,105,120,58,102,111,114,107,0,1,1,
2049,11957,10,11984,12016,147,117,110,105,120,58,101,120,101,99,48,0,1,2,2049,
11957,10,12002,12035,147,117,110,105,120,58,101,120,101,99,49,0,1,3,2049,11957,
10,12021,12054,147,117,110,105,120,58,101,120,101,99,50,0,1,4,2049,11957,10,
12040,12073,147,117,110,105,120,58,101,120,101,99,51,0,1,5,2049,11957,10,12059,
12091,147,117,110,105,120,58,101,120,105,116,0,1,6,2049,11957,10,12078,12111,147,
117,110,105,120,58,103,101,116,112,105,100,0,1,7,2049,11957,10,12096,12129,147,
117,110,105,120,58,119,97,105,116,0,1,8,2049,11957,10,12116,12147,147,117,110,
105,120,58,107,105,108,108,0,1,9,2049,11957,10,12134,12166,147,117,110,105,120,
58,112,111,112,101,110,0,1,10,2049,11957,10,12152,12186,147,117,110,105,120,58,
112,99,108,111,115,101,0,1,11,2049,11957,10,12171,12205,147,117,110,105,120,58,
119,114,105,116,101,0,1793,12211,2,2049,82,10,1,12207,2049,2065,1,12,2049,11957,
10,12191,12234,147,117,110,105,120,58,99,104,100,105,114,0,1,13,2049,11957,10,
12220,12254,147,117,110,105,120,58,103,101,116,101,110,118,0,1,14,2049,11957,10,
12239,12274,147,117,110,105,120,58,112,117,116,101,110,118,0,1,15,2049,11957,10,
12259,12293,147,117,110,105,120,58,115,108,101,101,112,0,1,16,2049,11957,10,12279,
12315,147,117,110,105,120,58,105,111,58,110,58,112,117,116,0,1,17,2049,11957,
10,12298,12337,147,117,110,105,120,58,105,111,58,115,58,112,117,116,0,1,18,
2049,11957,10,12320,12358,147,117,110,105,120,58,103,101,116,45,99,119,100,0,2049,
3697,112,119,100,0,1,12360,1,0,2049,12166,2,2049,9724,2049,3946,4,2049,12186,1,
0,2049,3697,115,121,115,58,97,114,103,118,0,1,12382,2049,200,2049,161,15,8,
2049,82,17,2049,3697,47,0,1,12404,2049,4005,10,12342,12438,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,
3697,108,115,32,45,49,32,124,32,119,99,32,45,108,0,1,12440,1,0,2049,
12166,2,2049,9724,2049,3946,2049,221,4,2049,12186,10,12411,12493,147,117,110,105,120,58,
102,111,114,45,101,97,99,104,45,102,105,108,101,0,2049,3697,108,115,32,45,
49,32,45,112,0,1,12495,1,0,2049,12166,2049,12438,1793,12528,1793,12523,2049,9724,2049,
3652,67502597,8,10,1,12516,2049,2077,10,1,12514,2049,2252,2049,12186,3,10,12471,12551,147,
114,97,110,100,111,109,58,98,121,116,101,0,2049,3697,47,100,101,118,47,117,
114,97,110,100,111,109,0,1,12553,1,0,2049,9321,1,9358,2049,2077,2049,9340,10,
12471,12591,147,110,58,114,97,110,100,111,109,0,2049,12551,1,-8,24,2049,12551,17,
1,-8,24,2049,12551,17,1,8,24,2049,12551,17,10,12579,12620,134,74,85,77,80,
0,-2023489525,-180170029,1872770499,2012404571,12612,12629,134,107,0,0,12624,12635,134,116,0,0,12630,12642,134,
115,48,0,0,12636,12649,134,115,49,0,0,12643,12656,134,115,50,0,0,12650,12663,
134,115,51,0,0,12657,12674,147,114,101,115,101,101,100,0,2,4097,12649,2,4097,
12656,2,4097,12663,2,4097,12629,4097,12635,10,12664,12697,147,114,111,116,108,0,4097,12629,
1793,12707,3841,12629,2049,2759,24,10,1,12701,1793,12718,1,32,3841,12629,18,24,10,1,
12711,2049,2092,22,10,12689,12733,147,114,101,115,42,42,0,3841,12642,1,5,19,1,
7,2049,12697,1,9,19,10,12724,12754,147,110,101,120,116,0,3841,12649,2,1,-9,
24,5,3841,12663,3841,12642,3841,12656,386269701,1285,386269701,100926980,85394690,386269701,386270726,4097,12656,4097,12649,4097,
12642,1,11,2049,12697,4097,12663,10,12746,12797,147,120,111,114,45,101,114,0,386860290,5,
386860290,5,386860290,5,386860290,5,101058054,101058054,10,12787,12817,147,106,117,109,112,63,0,1793,12824,
1,12620,17,15,10,1,12819,2049,2065,1,1,4,2049,2759,24,21,10,12808,12845,147,
105,110,110,101,114,0,1,32,1793,12872,2,2049,8649,2049,12817,1793,12866,1793,12861,2049,
12797,10,1,12858,2049,2065,10,1,12856,9,2049,12754,10,1,12849,2049,8706,10,12579,12902,
147,114,97,110,100,111,109,58,120,111,114,111,115,104,105,114,111,49,50,56,
42,42,0,2049,12754,2049,12733,10,12877,12937,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,12663,1,0,1,12656,1,0,1,12649,1,0,1,12642,1,4,1793,12963,2049,8649,
2049,12845,3,10,1,12957,2049,8706,269488144,10,12907,13003,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,12674,1,100,1793,13012,2049,12754,10,1,13009,2049,2252,10,12969,13052,
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,12642,4097,12649,4097,12656,4097,
12663,10,13017,13071,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,8483,8628,147,110,101,120,116,0,3841,8482,1,8492,17,2049,3009,10,8620,8644,147,
112,114,101,112,0,1,8482,2049,3009,1,0,3841,8482,1,8492,17,16,10,8636,8665,
147,100,111,110,101,0,1,8482,2049,3024,10,8450,8675,147,73,0,3841,8482,1,8492,
17,15,10,8670,8687,147,74,0,3841,8482,1,8492,17,2049,2921,15,10,8682,8701,147,
75,0,3841,8482,1,8492,17,1,2,18,15,10,8696,8732,147,116,105,109,101,115,
60,119,105,116,104,45,105,110,100,101,120,62,0,2049,8644,4,1793,8752,25,2049,
2921,5,1,21,2049,2077,6,2049,8628,1,8737,7,10,1,8737,8,3,2049,8665,10,
8711,8767,159,104,111,111,107,0,1,1793,2049,108,2049,1835,2049,2908,2049,108,10,8759,
8790,147,115,101,116,45,104,111,111,107,0,2049,2908,16,10,8778,8804,147,117,110,
104,111,111,107,0,2049,2908,2,2049,2908,4,16,10,8794,8828,147,105,111,58,101,
110,117,109,101,114,97,116,101,0,27,10,8812,8842,147,105,111,58,113,117,101,
114,121,0,28,10,8830,8857,147,105,111,58,105,110,118,111,107,101,0,29,10,
8844,8867,134,83,108,111,116,0,7,8844,8883,147,105,111,58,115,99,97,110,45,
102,111,114,0,1,-1,4097,8867,2049,8828,1793,8909,2049,8675,2049,8842,772,67502597,11,1793,
8905,2049,8675,4097,8867,10,1,8900,9,10,1,8891,2049,8732,3,3841,8867,10,8868,8926,
147,99,58,112,117,116,0,1793,8928,1,0,2049,8857,10,8917,8939,147,110,108,0,
1,10,2049,8926,10,8933,8950,147,115,112,0,1,32,2049,8926,10,8944,8962,147,116,
97,98,0,1,9,2049,8926,10,8955,8976,147,115,58,112,117,116,0,1,8926,2049,
4023,10,8967,8990,147,110,58,112,117,116,0,2049,5994,2049,8976,10,8981,9006,147,100,
58,119,111,114,100,115,0,1793,9015,2049,165,2049,8976,2049,8950,10,1,9008,2049,7005,
10,8995,9029,147,114,101,115,101,116,0,2049,1556,25,5,3,6,1,1,18,1,
9031,7,10,9020,9056,147,100,117,109,112,45,115,116,97,99,107,0,2049,1556,25,
3,5,2049,9056,6,2,2049,8990,2049,8950,10,9042,9092,147,100,105,115,112,108,97,
121,45,105,102,45,109,97,116,99,104,101,100,0,2,2049,1835,2049,4323,1793,9104,
2049,8976,2049,8950,10,1,9099,1793,9110,3,10,1,9108,2049,67,10,9042,9131,147,100,
58,119,111,114,100,115,45,119,105,116,104,0,2049,1835,2049,4655,1793,9142,2049,165,
2049,9092,10,1,9137,2049,7005,10,9115,9155,147,70,82,69,69,0,2049,3568,1,1025,
18,2049,1835,18,10,9147,9181,134,105,111,58,70,105,108,101,115,121,115,116,101,
109,0,0,9164,9194,147,105,100,101,110,116,105,102,121,0,3841,9181,2049,2567,1793,
9261,1,4,2049,8883,2,2049,2602,1793,9249,3,2049,3697,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,9212,2049,8976,2049,8939,10,1,9209,1793,9256,4097,9181,10,1,9253,2049,
67,10,1,9200,9,10,9147,9286,147,105,111,58,102,105,108,101,45,111,112,101,
114,97,116,105,111,110,0,2049,9194,3841,9181,2049,8857,10,9265,0,134,102,105,108,
101,58,82,0,9293,1,134,102,105,108,101,58,87,0,9303,2,134,102,105,108,
101,58,65,0,9313,3,134,102,105,108,101,58,82,43,0,9323,9347,147,102,105,
108,101,58,111,112,101,110,0,1,0,2049,9286,10,9334,9366,147,102,105,108,101,
58,99,108,111,115,101,0,1,1,2049,9286,10,9352,9384,147,102,105,108,101,58,
114,101,97,100,0,1,2,2049,9286,10,9371,9403,147,102,105,108,101,58,119,114,
105,116,101,0,1,3,2049,9286,10,9389,9421,147,102,105,108,101,58,116,101,108,
108,0,1,4,2049,9286,10,9408,9439,147,102,105,108,101,58,115,101,101,107,0,
1,5,2049,9286,10,9426,9457,147,102,105,108,101,58,115,105,122,101,0,1,6,
2049,9286,10,9444,9477,147,102,105,108,101,58,100,101,108,101,116,101,0,1,7,
2049,9286,10,9462,9496,147,102,105,108,101,58,102,108,117,115,104,0,1,8,2049,
9286,10,9482,9517,147,102,105,108,101,58,101,120,105,115,116,115,63,0,1,0,
2049,9347,2,2049,2583,1793,9531,2049,9366,2049,2428,10,1,9526,1793,9539,3,2049,2440,10,
1,9535,2049,67,10,9501,9570,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,9347,2,2049,9457,4,10,
9544,9604,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,9347,2,2049,9457,4,10,9579,9639,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,9347,10,9613,9651,134,70,73,68,0,0,9644,9660,134,83,105,122,101,
0,0,9652,9671,134,65,99,116,105,111,110,0,0,9661,9682,134,66,117,102,102,
101,114,0,0,9672,9692,147,45,101,111,102,63,0,3841,9651,2049,9421,3841,9660,13,
10,9683,9712,147,112,114,101,115,101,114,118,101,0,1,9651,1793,9727,1,9660,1793,
9722,8,10,1,9720,2049,3107,10,1,9716,2049,3107,10,9613,9750,147,102,105,108,101,
58,114,101,97,100,45,108,105,110,101,0,4097,9651,1793,9807,2049,1835,2,4097,9682,
2049,3475,1793,9799,3841,9651,2049,9384,2,2049,3383,1793,9776,1,13,11,10,1,9772,1793,
9784,1,10,11,10,1,9780,1793,9792,1,0,11,10,1,9788,2049,2129,22,22,10,
1,9763,2049,2223,2049,3407,3,10,1,9754,2049,3499,3841,9682,10,9732,9836,147,102,105,
108,101,58,102,111,114,45,101,97,99,104,45,108,105,110,101,0,1793,9867,4097,
9671,2049,9570,4097,9651,4097,9660,1793,9858,3841,9651,2049,9750,3841,9671,8,2049,9692,10,1,
9848,2049,2197,3841,9651,2049,9366,10,1,9838,2049,9712,10,9814,9879,134,70,73,68,0,
0,9872,9888,134,83,105,122,101,0,0,9814,9903,147,102,105,108,101,58,115,108,
117,114,112,0,1793,9933,2049,9570,4097,9879,4097,9888,2049,3475,3841,9888,1793,9924,3841,9879,
2049,9384,2049,3383,10,1,9917,2049,2252,3841,9879,2049,9366,10,1,9905,2049,3499,10,9889,
9945,134,70,73,68,0,0,9889,9959,147,102,105,108,101,58,115,112,101,119,0,
2049,9639,4097,9945,1793,9970,3841,9945,2049,9403,10,1,9965,2049,4023,3841,9945,2049,9366,10,
9946,9992,134,105,111,58,71,111,112,104,101,114,0,0,9979,10005,147,105,100,101,
110,116,105,102,121,0,3841,9992,2049,2567,1793,10072,1,5,2049,8883,2,2049,2602,1793,
10060,3,2049,3697,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,10023,2049,8976,2049,8939,
10,1,10020,1793,10067,4097,9992,10,1,10064,2049,67,10,1,10011,9,10,9946,10090,147,
103,111,112,104,101,114,58,103,101,116,0,2049,10005,1,0,3841,9992,2049,8857,10,
10076,10119,134,105,111,58,70,108,111,97,116,105,110,103,80,111,105,110,116,0,
0,10099,10132,147,105,100,101,110,116,105,102,121,0,3841,10119,2049,2567,1793,10199,1,
2,2049,8883,2,2049,2602,1793,10187,3,2049,3697,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,10150,2049,8976,2049,8939,10,1,10147,1793,10194,4097,10119,10,1,10191,2049,67,10,
1,10138,9,10,10076,10225,147,105,111,58,102,108,111,97,116,45,111,112,101,114,
97,116,105,111,110,0,2049,10132,3841,10119,2049,8857,10,10203,10246,147,110,58,116,111,
45,102,108,111,97,116,0,1,0,2049,10225,10,10232,10265,147,115,58,116,111,45,
102,108,111,97,116,0,1,1,2049,10225,10,10251,10285,147,102,58,116,111,45,110,
117,109,98,101,114,0,1,2,2049,10225,10,10270,10305,147,102,58,116,111,45,115,
116,114,105,110,103,0,2049,3678,2,1,3,2049,10225,10,10290,10320,147,102,58,43,
0,1,4,2049,10225,10,10313,10332,147,102,58,45,0,1,5,2049,10225,10,10325,10344,
147,102,58,42,0,1,6,2049,10225,10,10337,10356,147,102,58,47,0,1,7,2049,
10225,10,10349,10372,147,102,58,102,108,111,111,114,0,1,8,2049,10225,10,10361,10390,
147,102,58,99,101,105,108,105,110,103,0,1,9,2049,10225,10,10377,10405,147,102,
58,115,113,114,116,0,1,10,2049,10225,10,10395,10419,147,102,58,101,113,63,0,
1,11,2049,10225,10,10410,10434,147,102,58,45,101,113,63,0,1,12,2049,10225,10,
10424,10448,147,102,58,108,116,63,0,1,13,2049,10225,10,10439,10462,147,102,58,103,
116,63,0,1,14,2049,10225,10,10453,10478,147,102,58,100,101,112,116,104,0,1,
15,2049,10225,10,10467,10492,147,102,58,100,117,112,0,1,16,2049,10225,10,10483,10507,
147,102,58,100,114,111,112,0,1,17,2049,10225,10,10497,10522,147,102,58,115,119,
97,112,0,1,18,2049,10225,10,10512,10536,147,102,58,108,111,103,0,1,19,2049,
10225,10,10527,10552,147,102,58,112,111,119,101,114,0,1,20,2049,10225,10,10541,10566,
147,102,58,115,105,110,0,1,21,2049,10225,10,10557,10580,147,102,58,99,111,115,
0,1,22,2049,10225,10,10571,10594,147,102,58,116,97,110,0,1,23,2049,10225,10,
10585,10609,147,102,58,97,115,105,110,0,1,24,2049,10225,10,10599,10624,147,102,58,
97,99,111,115,0,1,25,2049,10225,10,10614,10639,147,102,58,97,116,97,110,0,
1,26,2049,10225,10,10629,10654,147,102,58,112,117,115,104,0,1,27,2049,10225,10,
10644,10668,147,102,58,112,111,112,0,1,28,2049,10225,10,10659,10685,147,102,58,115,
113,117,97,114,101,0,2049,10492,2049,10344,10,10673,10700,147,102,58,111,118,101,114,
0,2049,10654,2049,10492,2049,10668,2049,10522,10,10690,10719,147,102,58,116,117,99,107,0,
2049,10492,2049,10654,2049,10522,2049,10668,10,10709,10737,147,102,58,110,105,112,0,2049,10522,
2049,10507,10,10728,10757,147,102,58,100,114,111,112,45,112,97,105,114,0,2049,10507,
2049,10507,10,10742,10776,147,102,58,100,117,112,45,112,97,105,114,0,2049,10700,2049,
10700,10,10762,10790,147,102,58,114,111,116,0,2049,10654,2049,10522,2049,10668,2049,10522,10,
10781,10814,147,102,58,112,111,115,105,116,105,118,101,63,0,1,0,2049,10246,2049,
10462,10,10799,10836,147,102,58,110,101,103,97,116,105,118,101,63,0,1,0,2049,
10246,2049,10448,10,10821,10855,147,102,58,110,101,103,97,116,101,0,1,-1,2049,10246,
2049,10344,10,10843,10871,147,102,58,97,98,115,0,2049,10492,2049,10836,1793,10880,2049,10855,
10,1,10877,9,10,10862,10896,159,112,114,101,102,105,120,58,46,0,2049,1806,1793,
10903,2049,3723,10,1,10900,1793,10910,2049,3652,10,1,10907,2049,67,1,10265,2049,147,10,
10884,10928,147,102,58,112,117,116,0,2049,10305,2049,8976,10,10919,10941,147,102,58,80,
73,0,2049,3697,51,46,49,52,49,53,57,50,0,1,10943,2049,10265,10,10933,10964,
147,102,58,69,0,2049,3697,50,46,55,49,56,50,56,49,0,1,10966,2049,10265,
10,10957,10989,147,102,58,78,65,78,0,2049,3697,48,0,1,10991,2049,10265,2049,3697,
48,0,1,10999,2049,10265,2049,10356,10,10980,11017,147,102,58,73,78,70,0,2049,3697,
49,46,48,0,1,11019,2049,10265,2049,3697,48,0,1,11029,2049,10265,2049,10356,10,11008,
11048,147,102,58,45,73,78,70,0,2049,3697,45,49,46,48,0,1,11050,2049,10265,
2049,3697,48,0,1,11061,2049,10265,2049,10356,10,11038,11080,147,102,58,110,97,110,63,
0,2049,10492,2049,10434,10,11070,11095,147,102,58,105,110,102,63,0,2049,11017,2049,10419,
10,11085,11111,147,102,58,45,105,110,102,63,0,2049,11048,2049,10419,10,11100,11127,147,
102,58,114,111,117,110,100,0,2049,10492,2049,10836,1793,11148,2049,3697,48,46,53,0,
1,11135,2049,10265,2049,10332,2049,10390,10,1,11133,1793,11167,2049,3697,48,46,53,0,1,
11154,2049,10265,2049,10320,2049,10372,10,1,11152,2049,67,10,11116,11181,147,102,58,109,105,
110,0,2049,10776,2049,10448,1,10507,1,10737,2049,67,10,11172,11201,147,102,58,109,97,
120,0,2049,10776,2049,10462,1,10507,1,10737,2049,67,10,11192,11223,147,102,58,108,105,
109,105,116,0,2049,10522,2049,10654,2049,11181,2049,10668,2049,11201,10,11212,11248,147,102,58,
98,101,116,119,101,101,110,63,0,2049,10790,2049,10492,2049,10654,2049,10790,2049,10790,2049,
11223,2049,10668,2049,10419,10,11234,11274,147,102,58,105,110,99,0,2049,3697,49,0,1,
11276,2049,10265,2049,10320,10,11265,11294,147,102,58,100,101,99,0,2049,3697,49,0,1,
11296,2049,10265,2049,10332,10,11285,11315,147,102,58,99,97,115,101,0,2049,10700,2049,10419,
1793,11327,2049,10507,8,1,-1,10,1,11321,1793,11335,3,1,0,10,1,11331,2049,67,
25,6,771,10,11305,11353,147,102,58,115,105,103,110,0,2049,10492,2049,3697,48,0,
1,11357,2049,10265,2049,10419,1793,11372,1,0,2049,10507,10,1,11367,2049,2494,2049,3697,48,
0,1,11378,2049,10265,2049,10462,1793,11391,1,1,10,1,11388,1793,11398,1,-1,10,1,
11395,2049,67,10,11343,2147483646,134,117,58,77,65,88,0,11403,-2147483646,134,117,58,77,73,
78,0,11412,-2147483648,134,117,58,78,65,78,0,11421,2147483647,134,117,58,73,78,70,0,
11430,-2147483647,134,117,58,45,73,78,70,0,11439,11457,147,117,58,110,63,0,1,-2147483646,
2049,2908,1,2147483646,2049,2921,2049,2939,10,11449,11478,147,117,58,109,97,120,63,0,1,
2147483646,11,10,11468,11492,147,117,58,109,105,110,63,0,1,-2147483646,11,10,11482,11507,147,
117,58,122,101,114,111,63,0,2049,2567,10,11496,11520,147,117,58,110,97,110,63,
0,1,-2147483648,11,10,11510,11534,147,117,58,105,110,102,63,0,1,2147483647,11,10,11524,
11549,147,117,58,45,105,110,102,63,0,1,-2147483647,11,10,11538,11563,147,117,58,99,
108,105,112,0,1,-2147483646,1,2147483646,2049,2891,10,11553,11583,147,117,58,115,99,97,108,
105,110,103,0,1793,11585,2049,3697,49,48,46,48,101,45,52,0,1,11587,2049,10265,
10,11570,11612,147,102,58,101,110,99,111,100,101,0,2049,3697,48,46,53,0,1,
11614,2049,10265,2049,10552,2049,11583,2049,3697,45,49,46,48,0,1,11628,2049,10265,2049,10552,
2049,10344,10,11600,11654,147,102,58,100,101,99,111,100,101,0,2049,10685,2049,11583,2049,
10685,2049,10344,10,11570,11673,147,102,58,116,111,45,117,0,2049,10492,2049,11612,2049,11127,
2049,10285,2049,11563,2049,10492,2049,11080,1793,11693,3,1,-2147483648,10,1,11689,9,2049,10492,2049,
11095,1793,11706,3,1,2147483647,10,1,11702,9,2049,10492,2049,11111,1793,11719,3,1,-2147483647,10,
1,11715,9,2049,10507,10,11663,11735,147,117,58,116,111,45,102,0,2,2049,10246,2049,
11654,2,2049,11520,1793,11750,2049,10507,2049,10989,10,1,11745,9,2,2049,11534,1793,11763,2049,
10507,2049,11017,10,1,11758,9,2,2049,11549,1793,11776,2049,10507,2049,11048,10,1,11771,9,
3,10,11725,11792,147,102,58,115,116,111,114,101,0,1793,11797,2049,11673,10,1,11794,
2049,2065,16,10,11781,11814,147,102,58,102,101,116,99,104,0,15,2049,11735,10,11803,
11834,147,102,58,100,117,109,112,45,115,116,97,99,107,0,2049,10478,2,1793,11842,
2049,10654,10,1,11839,2049,2252,1793,11857,2049,10668,2049,10492,2049,10928,2049,8950,10,1,11848,
2049,2252,10,11818,11880,134,105,111,58,85,110,105,120,83,121,115,99,97,108,108,
0,0,11862,11893,147,105,100,101,110,116,105,102,121,0,3841,11880,2049,2567,1793,11960,
1,8,2049,8883,2,2049,2602,1793,11948,3,2049,3697,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,11911,2049,8976,2049,8939,10,1,11908,1793,11955,4097,11880,10,1,11952,2049,67,
10,1,11899,9,10,11818,11983,147,105,111,58,117,110,105,120,45,115,121,115,99,
97,108,108,0,2049,11893,3841,11880,2049,8857,10,11964,12005,147,117,110,105,120,58,115,
121,115,116,101,109,0,1,0,2049,11983,10,11990,12023,147,117,110,105,120,58,102,
111,114,107,0,1,1,2049,11983,10,12010,12042,147,117,110,105,120,58,101,120,101,
99,48,0,1,2,2049,11983,10,12028,12061,147,117,110,105,120,58,101,120,101,99,
49,0,1,3,2049,11983,10,12047,12080,147,117,110,105,120,58,101,120,101,99,50,
0,1,4,2049,11983,10,12066,12099,147,117,110,105,120,58,101,120,101,99,51,0,
1,5,2049,11983,10,12085,12117,147,117,110,105,120,58,101,120,105,116,0,1,6,
2049,11983,10,12104,12137,147,117,110,105,120,58,103,101,116,112,105,100,0,1,7,
2049,11983,10,12122,12155,147,117,110,105,120,58,119,97,105,116,0,1,8,2049,11983,
10,12142,12173,147,117,110,105,120,58,107,105,108,108,0,1,9,2049,11983,10,12160,
12192,147,117,110,105,120,58,112,111,112,101,110,0,1,10,2049,11983,10,12178,12212,
147,117,110,105,120,58,112,99,108,111,115,101,0,1,11,2049,11983,10,12197,12231,
147,117,110,105,120,58,119,114,105,116,101,0,1793,12237,2,2049,82,10,1,12233,
2049,2065,1,12,2049,11983,10,12217,12260,147,117,110,105,120,58,99,104,100,105,114,
0,1,13,2049,11983,10,12246,12280,147,117,110,105,120,58,103,101,116,101,110,118,
0,1,14,2049,11983,10,12265,12300,147,117,110,105,120,58,112,117,116,101,110,118,
0,1,15,2049,11983,10,12285,12319,147,117,110,105,120,58,115,108,101,101,112,0,
1,16,2049,11983,10,12305,12341,147,117,110,105,120,58,105,111,58,110,58,112,117,
116,0,1,17,2049,11983,10,12324,12363,147,117,110,105,120,58,105,111,58,115,58,
112,117,116,0,1,18,2049,11983,10,12346,12384,147,117,110,105,120,58,103,101,116,
45,99,119,100,0,2049,3697,112,119,100,0,1,12386,1,0,2049,12192,2,2049,9750,
2049,3946,4,2049,12212,1,0,2049,3697,115,121,115,58,97,114,103,118,0,1,12408,
2049,200,2049,161,15,8,2049,82,17,2049,3697,47,0,1,12430,2049,4005,10,12368,12464,
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,3697,108,115,32,45,49,32,124,32,119,99,32,45,108,
0,1,12466,1,0,2049,12192,2,2049,9750,2049,3946,2049,221,4,2049,12212,10,12437,12519,
147,117,110,105,120,58,102,111,114,45,101,97,99,104,45,102,105,108,101,0,
2049,3697,108,115,32,45,49,32,45,112,0,1,12521,1,0,2049,12192,2049,12464,1793,
12554,1793,12549,2049,9750,2049,3652,67502597,8,10,1,12542,2049,2077,10,1,12540,2049,2252,2049,
12212,3,10,12497,12577,147,114,97,110,100,111,109,58,98,121,116,101,0,2049,3697,
47,100,101,118,47,117,114,97,110,100,111,109,0,1,12579,1,0,2049,9347,1,
9384,2049,2077,2049,9366,10,12497,12617,147,110,58,114,97,110,100,111,109,0,2049,12577,
1,-8,24,2049,12577,17,1,-8,24,2049,12577,17,1,8,24,2049,12577,17,10,12605,
12646,134,74,85,77,80,0,-2023489525,-180170029,1872770499,2012404571,12638,12655,134,107,0,0,12650,12661,134,
116,0,0,12656,12668,134,115,48,0,0,12662,12675,134,115,49,0,0,12669,12682,134,
115,50,0,0,12676,12689,134,115,51,0,0,12683,12700,147,114,101,115,101,101,100,
0,2,4097,12675,2,4097,12682,2,4097,12689,2,4097,12655,4097,12661,10,12690,12723,147,114,
111,116,108,0,4097,12655,1793,12733,3841,12655,2049,2759,24,10,1,12727,1793,12744,1,32,
3841,12655,18,24,10,1,12737,2049,2092,22,10,12715,12759,147,114,101,115,42,42,0,
3841,12668,1,5,19,1,7,2049,12723,1,9,19,10,12750,12780,147,110,101,120,116,
0,3841,12675,2,1,-9,24,5,3841,12689,3841,12668,3841,12682,386269701,1285,386269701,100926980,85394690,386269701,
386270726,4097,12682,4097,12675,4097,12668,1,11,2049,12723,4097,12689,10,12772,12823,147,120,111,114,
45,101,114,0,386860290,5,386860290,5,386860290,5,386860290,5,101058054,101058054,10,12813,12843,147,106,117,
109,112,63,0,1793,12850,1,12646,17,15,10,1,12845,2049,2065,1,1,4,2049,2759,
24,21,10,12834,12871,147,105,110,110,101,114,0,1,32,1793,12898,2,2049,8675,2049,
12843,1793,12892,1793,12887,2049,12823,10,1,12884,2049,2065,10,1,12882,9,2049,12780,10,1,
12875,2049,8732,10,12605,12928,147,114,97,110,100,111,109,58,120,111,114,111,115,104,
105,114,111,49,50,56,42,42,0,2049,12780,2049,12759,10,12903,12963,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,12689,1,0,1,12682,1,0,1,12675,1,0,1,12668,
1,4,1793,12989,2049,8675,2049,12871,3,10,1,12983,2049,8732,269488144,10,12933,13029,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,12700,1,100,1793,13038,2049,12780,10,1,
13035,2049,2252,10,12995,13078,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,
12668,4097,12675,4097,12682,4097,12689,10,13043,13097,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,
@ -684,61 +685,62 @@ int32_t ngaImage[] = { 1793,14785,14812,14833,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,13061,13705,134,
73,110,100,101,120,0,0,13696,13715,147,114,101,115,101,116,0,1,13071,67502597,2049,
2921,17,2,15,1,30,24,4,15,23,1,1812433253,19,67502597,17,2049,2541,21,4,1,
13071,17,16,10,13706,13757,147,114,97,110,100,111,109,105,122,101,100,0,1,1,
1793,13771,2,2049,13715,2049,2908,2,1,624,14,10,1,13761,2049,2223,3,10,13743,13782,
147,121,0,2,2049,2908,1,624,788,1,13071,17,15,2049,2541,21,4,1,13071,17,
15,1,-31,24,17,10,13777,13816,147,97,108,116,101,114,101,100,0,2,2049,13782,
2,1,1,21,1,1073741823,19,1793,13844,1,2,197652,67502597,1,397,17,1,624,788,1,
13071,17,15,23,10,1,13828,2049,2065,23,4,1,13071,17,16,10,13805,13868,147,115,
99,114,97,109,98,108,101,100,0,1,0,1793,13882,2,2049,13816,2049,2908,2,1,
624,14,10,1,13872,2049,2223,3,10,13017,13916,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,13071,1,
0,4097,13705,2049,13757,10,13888,13944,147,114,97,110,100,111,109,58,109,101,114,115,
101,110,110,101,0,3841,13705,2049,2567,1,13868,9,3841,13705,1,13071,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,13705,2049,2908,1,624,788,4097,13705,10,13925,14008,134,105,111,58,
75,101,121,98,111,97,114,100,0,0,13993,14021,147,105,100,101,110,116,105,102,
121,0,3841,14008,2049,2567,1793,14088,1,1,2049,8857,2,2049,2602,1793,14076,3,2049,3697,
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,14039,2049,8950,2049,8913,10,1,14036,1793,
14083,4097,14008,10,1,14080,2049,67,10,1,14027,9,10,13925,14101,147,99,58,103,101,
116,0,2049,14021,3841,14008,2049,8831,10,14092,14118,147,103,97,116,104,101,114,0,2,
1793,14125,1,8,11,10,1,14121,1793,14133,1,127,11,10,1,14129,2049,2092,22,1793,
14142,3,10,1,14140,1793,14149,2049,3383,10,1,14146,2049,67,10,14108,14163,147,99,121,
99,108,101,0,2049,14101,2049,2055,4,8,2049,2720,25,3,2049,14118,1,14163,7,10,
14092,14194,147,112,97,114,115,101,45,117,110,116,105,108,0,1793,14206,2049,3678,2049,
3475,2049,14163,771,2049,3349,10,1,14196,2049,3499,10,14179,14220,147,115,58,103,101,116,
0,1793,14242,1793,14228,1,10,11,10,1,14224,1793,14236,1,13,11,10,1,14232,2049,
2092,22,10,1,14222,2049,14194,10,14211,14263,134,105,111,58,83,99,114,105,112,116,
105,110,103,0,0,14247,14276,147,105,100,101,110,116,105,102,121,0,3841,14263,2049,
2567,1793,14343,1,9,2049,8857,2,2049,2602,1793,14331,3,2049,3697,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,14294,2049,8950,2049,8913,10,1,14291,1793,14338,4097,14263,10,1,
14335,2049,67,10,1,14282,9,10,14211,14359,147,115,121,115,58,97,114,103,99,0,
2049,14276,1,0,3841,14263,2049,8831,10,14347,14380,147,115,121,115,58,97,114,103,118,
0,2049,3678,4,2049,14276,1,1,3841,14263,2049,8831,10,14368,14403,147,105,110,99,108,
117,100,101,0,2049,14276,1,2,3841,14263,2049,8831,10,14392,14422,134,78,111,69,99,
104,111,0,0,14412,14434,147,118,101,114,115,105,111,110,0,3841,4,1,100,20,
2049,8964,1,46,2049,8900,2049,8964,10,14423,14456,147,101,111,108,63,0,1793,14462,1,
13,11,10,1,14458,1793,14470,1,10,11,10,1,14466,1793,14478,1,32,11,10,1,
14474,2049,2129,22,22,10,14448,14495,147,118,97,108,105,100,63,0,2,2049,82,2049,
2583,10,14485,14507,147,111,107,0,3841,14422,2049,2720,25,3,2049,1806,1793,14530,2049,8913,
2049,3697,79,107,32,0,1,14521,2049,8950,10,1,14517,2049,73,10,14501,14548,147,99,
104,101,99,107,45,101,111,102,0,2,1793,14555,1,-1,11,10,1,14551,1793,14563,
1,4,11,10,1,14559,2049,2092,22,1793,14585,2049,3697,98,121,101,0,1,14572,2049,
200,2049,161,15,8,10,1,14570,9,10,14535,14601,147,99,104,101,99,107,45,98,
115,0,2,1793,14608,1,8,11,10,1,14604,1793,14616,1,127,11,10,1,14612,2049,
2092,22,1793,14629,2049,3407,2049,3407,771,10,1,14623,9,10,14589,14642,147,115,58,103,
101,116,0,1793,14671,1,1025,2049,3475,1793,14662,2049,14101,2,2049,3383,2049,14548,2049,14601,
2049,14456,10,1,14650,2049,2223,2049,3349,2049,3790,10,1,14644,2049,3499,10,14412,14686,147,
98,97,110,110,101,114,0,3841,14422,2049,2720,25,3,2049,3697,82,69,84,82,79,
32,49,50,32,40,114,120,45,0,1,14694,2049,8950,2049,14434,1,41,2049,8900,2049,
8913,2049,1543,2049,8964,2049,3697,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,14726,2049,8950,2049,1835,2049,
8964,2049,8913,10,14676,14770,147,98,121,101,0,1,0,2049,12091,10,14763,14785,147,108,
105,115,116,101,110,0,2049,14507,2049,14642,2049,14495,1793,14798,2049,367,2049,14507,10,1,
14793,1793,14804,3,10,1,14802,2049,67,1,14787,7,10,14775,14826,147,105,109,97,103,
101,58,115,97,118,101,0,1,1000,2049,8857,2049,8831,10,0 };
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,13087,13731,134,73,110,100,101,120,0,0,13722,13741,147,114,101,115,101,
116,0,1,13097,67502597,2049,2921,17,2,15,1,30,24,4,15,23,1,1812433253,19,67502597,
17,2049,2541,21,4,1,13097,17,16,10,13732,13783,147,114,97,110,100,111,109,105,
122,101,100,0,1,1,1793,13797,2,2049,13741,2049,2908,2,1,624,14,10,1,13787,
2049,2223,3,10,13769,13808,147,121,0,2,2049,2908,1,624,788,1,13097,17,15,2049,
2541,21,4,1,13097,17,15,1,-31,24,17,10,13803,13842,147,97,108,116,101,114,
101,100,0,2,2049,13808,2,1,1,21,1,1073741823,19,1793,13870,1,2,197652,67502597,1,
397,17,1,624,788,1,13097,17,15,23,10,1,13854,2049,2065,23,4,1,13097,17,
16,10,13831,13894,147,115,99,114,97,109,98,108,101,100,0,1,0,1793,13908,2,
2049,13842,2049,2908,2,1,624,14,10,1,13898,2049,2223,3,10,13043,13942,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,13097,1,0,4097,13731,2049,13783,10,13914,13970,147,114,97,110,100,111,
109,58,109,101,114,115,101,110,110,101,0,3841,13731,2049,2567,1,13894,9,3841,13731,
1,13097,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,13731,2049,2908,1,624,788,4097,13731,10,
13951,14034,134,105,111,58,75,101,121,98,111,97,114,100,0,0,14019,14047,147,105,
100,101,110,116,105,102,121,0,3841,14034,2049,2567,1793,14114,1,1,2049,8883,2,2049,
2602,1793,14102,3,2049,3697,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,14065,2049,8976,
2049,8939,10,1,14062,1793,14109,4097,14034,10,1,14106,2049,67,10,1,14053,9,10,13951,
14127,147,99,58,103,101,116,0,2049,14047,3841,14034,2049,8857,10,14118,14144,147,103,97,
116,104,101,114,0,2,1793,14151,1,8,11,10,1,14147,1793,14159,1,127,11,10,
1,14155,2049,2092,22,1793,14168,3,10,1,14166,1793,14175,2049,3383,10,1,14172,2049,67,
10,14134,14189,147,99,121,99,108,101,0,2049,14127,2049,2055,4,8,2049,2720,25,3,
2049,14144,1,14189,7,10,14118,14220,147,112,97,114,115,101,45,117,110,116,105,108,
0,1793,14232,2049,3678,2049,3475,2049,14189,771,2049,3349,10,1,14222,2049,3499,10,14205,14246,
147,115,58,103,101,116,0,1793,14268,1793,14254,1,10,11,10,1,14250,1793,14262,1,
13,11,10,1,14258,2049,2092,22,10,1,14248,2049,14220,10,14237,14289,134,105,111,58,
83,99,114,105,112,116,105,110,103,0,0,14273,14302,147,105,100,101,110,116,105,
102,121,0,3841,14289,2049,2567,1793,14369,1,9,2049,8883,2,2049,2602,1793,14357,3,2049,
3697,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,14320,2049,8976,2049,8939,10,1,14317,
1793,14364,4097,14289,10,1,14361,2049,67,10,1,14308,9,10,14237,14385,147,115,121,115,
58,97,114,103,99,0,2049,14302,1,0,3841,14289,2049,8857,10,14373,14406,147,115,121,
115,58,97,114,103,118,0,2049,3678,4,2049,14302,1,1,3841,14289,2049,8857,10,14394,
14429,147,105,110,99,108,117,100,101,0,2049,14302,1,2,3841,14289,2049,8857,10,14418,
14448,134,78,111,69,99,104,111,0,0,14438,14460,147,118,101,114,115,105,111,110,
0,3841,4,1,100,20,2049,8990,1,46,2049,8926,2049,8990,10,14449,14482,147,101,111,
108,63,0,1793,14488,1,13,11,10,1,14484,1793,14496,1,10,11,10,1,14492,1793,
14504,1,32,11,10,1,14500,2049,2129,22,22,10,14474,14521,147,118,97,108,105,100,
63,0,2,2049,82,2049,2583,10,14511,14533,147,111,107,0,3841,14448,2049,2720,25,3,
2049,1806,1793,14556,2049,8939,2049,3697,79,107,32,0,1,14547,2049,8976,10,1,14543,2049,
73,10,14527,14574,147,99,104,101,99,107,45,101,111,102,0,2,1793,14581,1,-1,
11,10,1,14577,1793,14589,1,4,11,10,1,14585,2049,2092,22,1793,14611,2049,3697,98,
121,101,0,1,14598,2049,200,2049,161,15,8,10,1,14596,9,10,14561,14627,147,99,
104,101,99,107,45,98,115,0,2,1793,14634,1,8,11,10,1,14630,1793,14642,1,
127,11,10,1,14638,2049,2092,22,1793,14655,2049,3407,2049,3407,771,10,1,14649,9,10,
14615,14668,147,115,58,103,101,116,0,1793,14697,1,1025,2049,3475,1793,14688,2049,14127,2,
2049,3383,2049,14574,2049,14627,2049,14482,10,1,14676,2049,2223,2049,3349,2049,3790,10,1,14670,
2049,3499,10,14438,14712,147,98,97,110,110,101,114,0,3841,14448,2049,2720,25,3,2049,
3697,82,69,84,82,79,32,49,50,32,40,114,120,45,0,1,14720,2049,8976,2049,
14460,1,41,2049,8926,2049,8939,2049,1543,2049,8990,2049,3697,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,
14752,2049,8976,2049,1835,2049,8990,2049,8939,10,14702,14796,147,98,121,101,0,1,0,2049,
12117,10,14789,14811,147,108,105,115,116,101,110,0,2049,14533,2049,14668,2049,14521,1793,14824,
2049,367,2049,14533,10,1,14819,1793,14830,3,10,1,14828,2049,67,1,14813,7,10,14801,
14852,147,105,109,97,103,101,58,115,97,118,101,0,1,1000,2049,8883,2049,8857,10,
0 };

View file

@ -29,13 +29,13 @@ The main namespaces are:
| namespace | words related to |
| ---------- | ------------------ |
| ASCII | ASCII Constants |
| array | arrays |
| c | characters |
| compile | compiler functions |
| d | dictionary headers |
| err | error handlers |
| n | numbers |
| s | strings |
| set | sets (arrays) |
| v | variables |
This makes it very easy to identify related words, especially
@ -1250,10 +1250,10 @@ dictionary header by the `d:xt` field.
[ swap &nip dip ] &drop choose ] d:for-each drop ;
~~~
## Sets
## Arrays
Sets are statically sized arrays. They are represented in
memory as:
Retro provides words for statically sized arrays. They are
represented in memory as:
count
data #1 (first)
@ -1262,69 +1262,69 @@ 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 `set:length`:
we wrap this as `array:length`:
~~~
:set:length (a-n) fetch ;
:array:length (a-n) fetch ;
~~~
The first couple of words are used to create sets. The first,
`set:counted-results` executes a quote which returns values
and a count. It then creates a set with the provided data.
The first couple of words are used to create arrays. The first,
`array:counted-results` executes a quote which returns values
and a count. It then creates an array with the provided data.
~~~
:set:counted-results (q-a)
:array:counted-results (q-a)
call here [ dup , &, times ] dip ;
~~~
The second, `set:from-string`, creates a new string with the
The second, `array:from-string`, creates a new string with the
characters in given a string.
~~~
:set:from-string (s-a)
:array:from-string (s-a)
here [ dup s:length , [ , ] s:for-each ] dip ;
~~~
A very crucial piece is `set:for-each`. This runs a quote once
against each value in a set. This is leveraged to implement
A very crucial piece is `array:for-each`. This runs a quote once
against each value in an array. This is leveraged to implement
additional combinators.
~~~
{{
'Q var
---reveal---
:set:for-each (aq-)
:array:for-each (aq-)
&Q [ !Q fetch-next
[ fetch-next swap [ @Q call ] dip ] times drop
] v:preserve ;
}}
~~~
With this I can easily define `set:dup` to make a copy of a
set.
With this I can easily define `array:dup` to make a copy of an
array.
~~~
:set:dup (a-a)
here [ dup fetch , [ , ] set:for-each ] dip ;
:array:dup (a-a)
here [ dup fetch , [ , ] array:for-each ] dip ;
~~~
Next is `set:filter`, which is extracts matching values from
a set. This is used like:
Next is `array:filter`, which is extracts matching values from
an array. This is used like:
{ #1 #2 #3 #4 #5 #6 #7 #8 }
[ n:even? ] set:filter
[ n:even? ] array:filter
It returns a new set with the values that the quote returned
It returns a new array with the values that the quote returned
a `TRUE` flag for.
~~~
:set:filter (aq-)
:array:filter (aq-)
[ over [ call ] dip swap [ , ] [ drop ] choose ] curry
here [ over fetch , set:for-each ] dip
here [ over fetch , array:for-each ] dip
here over - n:dec over store ;
~~~
Next are `set:contains?` and `set:contains-string?` which
Next are `array:contains?` and `array:contains-string?` which
compare a given value to each item in the array and returns
a flag.
@ -1332,70 +1332,70 @@ a flag.
{{
'F var
---reveal---
:set:contains? (na-f)
:array:contains? (na-f)
&F v:off
[ over eq? @F or !F ] set:for-each
[ over eq? @F or !F ] array:for-each
drop @F ;
:set:contains-string? (sa-f)
:array:contains-string? (sa-f)
&F v:off
[ over s:eq? @F or !F ] set:for-each
[ over s:eq? @F or !F ] array:for-each
drop @F ;
}}
~~~
I implemented `set:map` to apply a quotation to each item in a
set and construct a new set from the returned values.
I implemented `array: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 * ] set:map
[ #10 * ] array:map
~~~
:set:map (aq-a)
:array:map (aq-a)
[ call , ] curry
here [ over fetch , set:for-each ] dip ;
here [ over fetch , array:for-each ] dip ;
~~~
You can use `set:reverse` to make a copy of a set with the
You can use `array:reverse` to make a copy of an array with the
values reversed.
~~~
:set:reverse (a-a)
:array:reverse (a-a)
here [ fetch-next [ + n:dec ] sip dup ,
[ dup fetch , n:dec ] times drop
] dip ;
~~~
`set:nth` provides a quick means of adjusting a set and offset
into an address for use with `fetch` and `store`.
`array:nth` provides a quick means of adjusting an array and
offset into an address for use with `fetch` and `store`.
~~~
:set:nth (an-a)
:array:nth (an-a)
+ n:inc ;
~~~
`set:reduce` takes a set, a starting value, and a quote. It
executes the quote once for each item in the set, passing the
`array: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.
~~~
:set:reduce (pnp-n)
[ swap ] dip set:for-each ;
:array:reduce (pnp-n)
[ swap ] dip array:for-each ;
~~~
When making a set, I often want the values in the original
order. The `set:counted-results set:reverse` is a bit long, so
I'm defining a new `set:make` which wraps these.
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.
~~~
:set:make (q-a)
set:counted-results set:reverse ;
:array:make (q-a)
array:counted-results array:reverse ;
:{ (-) |[ |depth |[ ; immediate
:} (-a) |] |dip |depth |swap |- |n:dec |] |set:make ; immediate
:} (-a) |] |dip |depth |swap |- |n:dec |] |array:make ; immediate
~~~
## Muri: an assembler

View file

@ -1055,7 +1055,7 @@ instruction. It is intended that this be hooked into and changed.
As an example, in Rx code, assuming an I/O interface with some
support for strings and output:
[ $? putc space 'word not found' puts ]
[ $? c:put sp 'word_not_found s:put ]
&err:notfound #1 + store
An interface should either patch the jump, or catch it and do

BIN
ngaImage

Binary file not shown.

View file

@ -67,6 +67,19 @@ Version -a - - Variable. This stores the version number. class:data {n/a} {n/a
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:contains-string? sa-f - - Return `TRUE` if the string value is in the set or`FALSE` otherwise. class:word {n/a} {n/a} set all
array:contains? na-f - - Return `TRUE` if the value is in the set or `FALSE` otherwise. class:word {n/a} {n/a} set all
array:counted-results q-a - - Run a quote and construct a new set from the returned values. The quote should return the values and the number of values to put into the set. class:word {n/a} {n/a} set all
array:dup a-b - - Make a copy of a set. Return the address of the copy. class:word {n/a} {n/a} set all
array:filter aq-b - - For each item in the initial set, run the specified quote. If the quote returns `TRUE`, copy the item into a new set. If `FALSE`, discard it. Returns a pointer to the new set. class:word {n/a} {n/a} set all
array:for-each aq- - - Execute the quote once for each item in the set. class:word {n/a} {n/a} set all
array:from-string s-a - - Create a new set with the characters in the source string. class:word {n/a} {n/a} set all
array:length a-n - - Return the length of a set. class:word {n/a} {n/a} set all
array:make q-a - - Execute quote. Return a new set 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} set all
array:map aq- - - Execute quote once for each item in the set. Constructs a new set from the value returned by the quote. class:word {n/a} {n/a} set all
array:nth an-b - - Return the actual address of the nth item in the set. class:word {n/a} {n/a} set all
array:reduce pnq-n - - Takes a set, a starting value, and a quote. This will apply the quote to each item in the set; the quote should consume two values and return one. class:word {n/a} {n/a} set all
array:reverse a-b - - Reverse the order of items in a set. This will return a new set. class:word {n/a} {n/a} set 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
@ -366,19 +379,6 @@ s:trim s-s - - Trim leading and trailing whitespace from a string. class:word
s:trim-left s-s - - Trim leading whitespace from a string. class:word '__hello__ s:trim-left {n/a} s all
s:trim-right s-s - - Trim trailing whitespace from a string. class:word '__hello__ s:trim-right {n/a} s all
set-hook aa- - - Patch the hook point in a2 to point to a1. class:word :foo hook ;\n :bar #1 ;\n &bar &foo set-hook {n/a} global all
set:contains-string? sa-f - - Return `TRUE` if the string value is in the set or`FALSE` otherwise. class:word {n/a} {n/a} set all
set:contains? na-f - - Return `TRUE` if the value is in the set or `FALSE` otherwise. class:word {n/a} {n/a} set all
set:counted-results q-a - - Run a quote and construct a new set from the returned values. The quote should return the values and the number of values to put into the set. class:word {n/a} {n/a} set all
set:dup a-b - - Make a copy of a set. Return the address of the copy. class:word {n/a} {n/a} set all
set:filter aq-b - - For each item in the initial set, run the specified quote. If the quote returns `TRUE`, copy the item into a new set. If `FALSE`, discard it. Returns a pointer to the new set. class:word {n/a} {n/a} set all
set:for-each aq- - - Execute the quote once for each item in the set. class:word {n/a} {n/a} set all
set:from-string s-a - - Create a new set with the characters in the source string. class:word {n/a} {n/a} set all
set:length a-n - - Return the length of a set. class:word {n/a} {n/a} set all
set:make q-a - - Execute quote. Return a new set containing the values the quote leaves on the stack. This is identical to doing `set:counted-results set:reverse` class:word {n/a} {n/a} set all
set:map aq- - - Execute quote once for each item in the set. Constructs a new set from the value returned by the quote. class:word {n/a} {n/a} set all
set:nth an-b - - Return the actual address of the nth item in the set. class:word {n/a} {n/a} set all
set:reduce pnq-n - - Takes a set, a starting value, and a quote. This will apply the quote to each item in the set; the quote should consume two values and return one. class:word {n/a} {n/a} set all
set:reverse a-b - - Reverse the order of items in a set. This will return a new set. class:word {n/a} {n/a} set all
shift mn-o - - Peform a bitwise shift of m by n bits. If n is positive, shift right. If negative, the shift will be to the left. class:primitive {n/a} {n/a} global all
sip nq-n - - Run quote. After execution completes, put a copy of n back on top of the stack. class:word {n/a} {n/a} global all
sp - - - Display a space (`ASCII:SPACE`) class:word :spaces (n-) [ sp ] times ;\n #12 spaces {n/a} global all
@ -446,7 +446,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 a set. This is intended to make creating sets a bit cleaner than using a quotation and `set:counteh-results`. class:word {n/a} {n/a} set all
{ - - - Begin a set. This is intended to make creating sets a bit cleaner than using a quotation and `array:counteh-results`. class:word {n/a} {n/a} set all
{{ - - - Begin a lexically scoped area. class:word {n/a} {n/a} global all
} -a - - Complete a set begun by `{`. Returns a pointer to the data. class:word {n/a} {n/a} set 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 57 and column 55.