diff --git a/RELEASE-NOTES b/RELEASE-NOTES index a5663af..d02a72a 100644 --- a/RELEASE-NOTES +++ b/RELEASE-NOTES @@ -2,6 +2,10 @@ ## Core Language +## Renamed + +- prefix: namespace to sigil: + ## I/O - simplify definition of `c:get` diff --git a/doc/Glossary-Concise.txt b/doc/Glossary-Concise.txt index 44530d5..f6b611c 100644 --- a/doc/Glossary-Concise.txt +++ b/doc/Glossary-Concise.txt @@ -1078,45 +1078,6 @@ Copy a string to the pasteboard. pop D: -n A: n- F: - Move a value from the return stack to the data stack. -prefix:! D: ns- A: - F: - -Store a value into a variable. - -prefix:# D: s-n A: - F: - -Process token as a number. - -prefix:$ D: s-c A: - F: - -Process token as an ASCII character. - -prefix:& D: s-a A: - F: - -Return a pointer to a named item. - -prefix:' D: s-s A: - F: - -Process token as a string. - -prefix:( D: s- A: - F: - -Process token as a comment. - -prefix:. D: s- A: - F: -F -Interpret time: convert string to a floating point value. Compile time: convert string to a floating point value and compile code to push this value to the float stack. - -prefix:: D: s- A: - F: - -Process token as a new definition. - -prefix:@ D: s-n A: - F: - -Fetch from a stored variable. - -prefix:\ D: s- A: - F: - -Process token as an instruction bundle. - -prefix:^ D: s- A: - F: - -Process token as a function reference. - -prefix:` D: s- A: - F: - -Process token as a bytecode. - -prefix:| D: s- A: - F: - -POSTPONE equivalent. - primitive D: - A: - F: - Change the class of the most recently defined word to `class:primitive`. @@ -1324,6 +1285,45 @@ Patch the hook point in a2 to point to a1. 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. +sigil:! D: ns- A: - F: - +Store a value into a variable. + +sigil:# D: s-n A: - F: - +Process token as a number. + +sigil:$ D: s-c A: - F: - +Process token as an ASCII character. + +sigil:& D: s-a A: - F: - +Return a pointer to a named item. + +sigil:' D: s-s A: - F: - +Process token as a string. + +sigil:( D: s- A: - F: - +Process token as a comment. + +sigil:. D: s- A: - F: -F +Interpret time: convert string to a floating point value. Compile time: convert string to a floating point value and compile code to push this value to the float stack. + +sigil:: D: s- A: - F: - +Process token as a new definition. + +sigil:@ D: s-n A: - F: - +Fetch from a stored variable. + +sigil:\ D: s- A: - F: - +Process token as an instruction bundle. + +sigil:^ D: s- A: - F: - +Process token as a function reference. + +sigil:` D: s- A: - F: - +Process token as a bytecode. + +sigil:| D: s- A: - F: - +POSTPONE equivalent. + sip D: nq-n A: - F: - Run quote. After execution completes, put a copy of n back on top of the stack. diff --git a/doc/Glossary-Names-and-Stack.txt b/doc/Glossary-Names-and-Stack.txt index 3e0ff9e..50381af 100644 --- a/doc/Glossary-Names-and-Stack.txt +++ b/doc/Glossary-Names-and-Stack.txt @@ -358,19 +358,6 @@ pb:get D: a- A: - F: - pb:length D: -n A: - F: - pb:set D: s- A: - F: - pop D: -n A: n- F: - -prefix:! D: ns- A: - F: - -prefix:# D: s-n A: - F: - -prefix:$ D: s-c A: - F: - -prefix:& D: s-a A: - F: - -prefix:' D: s-s A: - F: - -prefix:( D: s- A: - F: - -prefix:. D: s- A: - F: -F -prefix:: D: s- A: - F: - -prefix:@ D: s-n A: - F: - -prefix:\ D: s- A: - F: - -prefix:^ D: s- A: - F: - -prefix:` D: s- A: - F: - -prefix:| D: s- A: - F: - primitive D: - A: - F: - push D: n- A: -n F: - r D: s- A: - F: - @@ -440,6 +427,19 @@ script:ignore-to-eol D: - A: - F: - script:name D: -s A: - F: - set-hook D: aa- A: - F: - shift D: mn-o A: - F: - +sigil:! D: ns- A: - F: - +sigil:# D: s-n A: - F: - +sigil:$ D: s-c A: - F: - +sigil:& D: s-a A: - F: - +sigil:' D: s-s A: - F: - +sigil:( D: s- A: - F: - +sigil:. D: s- A: - F: -F +sigil:: D: s- A: - F: - +sigil:@ D: s-n A: - F: - +sigil:\ D: s- A: - F: - +sigil:^ D: s- A: - F: - +sigil:` D: s- A: - F: - +sigil:| D: s- A: - F: - sip D: nq-n A: - F: - socket:accept D: n-nn A: - F: - socket:bind D: sn-nn A: - F: - diff --git a/doc/Glossary.html b/doc/Glossary.html index 1aebf49..3c3c30b 100644 --- a/doc/Glossary.html +++ b/doc/Glossary.html @@ -18,14 +18,14 @@ Float: -

Provide a visual indication of a code group.

-
Class: class:macro
Namespace: prefix
Interface Layer: all

+
Class: class:macro
Namespace: sigil
Interface Layer: all

)

Data: -
Addr: -
Float: -

Provide a visual indication of a code group.

-
Class: class:macro
Namespace: prefix
Interface Layer: all

+
Class: class:macro
Namespace: sigil
Interface Layer: all

*

Data: nn-n
Addr: -
@@ -2725,166 +2725,6 @@

Move a value from the return stack to the data stack.

Class: class:macro
Namespace: global
Interface Layer: all

-

prefix:!

-

Data: ns-
-Addr: -
-Float: -

-
-

Store a value into a variable.

-

Interpret Time: - Store a value into the named variable.

- -

Compile Time: - Compile the code to store a value into a named variable.

- -
Class: class:macro
Namespace: prefix
Interface Layer: all

-

prefix:#

-

Data: s-n
-Addr: -
-Float: -

-
-

Process token as a number.

-

Interpret Time: - Convert the string into a number and leave on the stack.

- -

Compile Time: - Convert the string into a number and compile into the current definition as a literal.

- -
Class: class:macro
Namespace: prefix
Interface Layer: all

-

prefix:$

-

Data: s-c
-Addr: -
-Float: -

-
-

Process token as an ASCII character.

-

Interpret Time: - Fetch first character from string. Leave on stack.

- -

Compile Time: - Fetch first character from the string. Compile into the current definition as literal.

- -
Class: class:macro
Namespace: prefix
Interface Layer: all

-

prefix:&

-

Data: s-a
-Addr: -
-Float: -

-
-

Return a pointer to a named item.

-

Interpret Time: - Lookup name in dictionary, return contents of the xt field on the stack.

- -

Compile Time: - Lookup name in dictionary, compile code to push the contents of the xt field into the current definition.

- -
Class: class:macro
Namespace: prefix
Interface Layer: all

-

prefix:'

-

Data: s-s
-Addr: -
-Float: -

-
-

Process token as a string.

-

Interpret Time: - Move string into temporary buffer. If `RewriteUnderscores` is `TRUE`, replace all instances of _ with space.

- -

Compile Time: - Move string into temporary buffer. If `RewriteUnderscores` is `TRUE`, replace all instances of _ with space. Then compile the string into the current definition.

- -
Class: class:macro
Namespace: prefix
Interface Layer: all

-

prefix:(

-

Data: s-
-Addr: -
-Float: -

-
-

Process token as a comment.

-

Interpret Time: - Discard the string.

- -

Compile Time: - Discard the string.

- -
Class: class:macro
Namespace: prefix
Interface Layer: all

-

prefix:.

-

Data: s-
-Addr: -
-Float: -F

-
-

Interpret time: convert string to a floating point value. Compile time: convert string to a floating point value and compile code to push this value to the float stack.

-
Class: class:macro
Namespace: prefix
Interface Layer: rre

-

prefix::

-

Data: s-
-Addr: -
-Float: -

-
-

Process token as a new definition.

-

Interpret Time: - Create a header pointing to `here` with the provided string as the name. Sets class to `class:word`.

- -
Class: class:macro
Namespace: prefix
Interface Layer: all

-

prefix:@

-

Data: s-n
-Addr: -
-Float: -

-
-

Fetch from a stored variable.

-

Interpret Time: - Fetch a value from a named variable.

- -

Compile Time: - Compile the code to fetch a value from a named variable into the current definition.

- -
Class: class:macro
Namespace: prefix
Interface Layer: all

-

prefix:\

-

Data: s-
-Addr: -
-Float: -

-
-

Process token as an instruction bundle.

-

Interpret Time: - Discard the string.

- -

Compile Time: - Assemble the opcodes in the string and use `,` to inline it into the current definition.

- -
Class: class:macro
Namespace: prefix
Interface Layer: all

-

prefix:^

-

Data: s-
-Addr: -
-Float: -

-
-

Process token as a function reference.

-

Interpret Time: - Discard the string.

- -

Compile Time: - Comma the XT of the word into the current definition.

- -
Class: class:macro
Namespace: prefix
Interface Layer: all

-

prefix:`

-

Data: s-
-Addr: -
-Float: -

-
-

Process token as a bytecode.

-

Interpret Time: - Discard the string.

- -

Compile Time: - Convert the string to a number and use `,` to inline it into the current definition.

- -
Class: class:macro
Namespace: prefix
Interface Layer: all

-

prefix:|

-

Data: s-
-Addr: -
-Float: -

-
-

POSTPONE equivalent.

-

Interpret Time: - Discard the string.

- -

Compile Time: - Convert the string to a number and use `,` to inline it into the current definition.

- -
Class: class:macro
Namespace: prefix
Interface Layer: all

primitive

Data: -
Addr: -
@@ -3395,6 +3235,166 @@

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: class:primitive
Namespace: global
Interface Layer: all

+

sigil:!

+

Data: ns-
+Addr: -
+Float: -

+
+

Store a value into a variable.

+

Interpret Time: + Store a value into the named variable.

+ +

Compile Time: + Compile the code to store a value into a named variable.

+ +
Class: class:macro
Namespace: sigil
Interface Layer: all

+

sigil:#

+

Data: s-n
+Addr: -
+Float: -

+
+

Process token as a number.

+

Interpret Time: + Convert the string into a number and leave on the stack.

+ +

Compile Time: + Convert the string into a number and compile into the current definition as a literal.

+ +
Class: class:macro
Namespace: sigil
Interface Layer: all

+

sigil:$

+

Data: s-c
+Addr: -
+Float: -

+
+

Process token as an ASCII character.

+

Interpret Time: + Fetch first character from string. Leave on stack.

+ +

Compile Time: + Fetch first character from the string. Compile into the current definition as literal.

+ +
Class: class:macro
Namespace: sigil
Interface Layer: all

+

sigil:&

+

Data: s-a
+Addr: -
+Float: -

+
+

Return a pointer to a named item.

+

Interpret Time: + Lookup name in dictionary, return contents of the xt field on the stack.

+ +

Compile Time: + Lookup name in dictionary, compile code to push the contents of the xt field into the current definition.

+ +
Class: class:macro
Namespace: sigil
Interface Layer: all

+

sigil:'

+

Data: s-s
+Addr: -
+Float: -

+
+

Process token as a string.

+

Interpret Time: + Move string into temporary buffer. If `RewriteUnderscores` is `TRUE`, replace all instances of _ with space.

+ +

Compile Time: + Move string into temporary buffer. If `RewriteUnderscores` is `TRUE`, replace all instances of _ with space. Then compile the string into the current definition.

+ +
Class: class:macro
Namespace: sigil
Interface Layer: all

+

sigil:(

+

Data: s-
+Addr: -
+Float: -

+
+

Process token as a comment.

+

Interpret Time: + Discard the string.

+ +

Compile Time: + Discard the string.

+ +
Class: class:macro
Namespace: sigil
Interface Layer: all

+

sigil:.

+

Data: s-
+Addr: -
+Float: -F

+
+

Interpret time: convert string to a floating point value. Compile time: convert string to a floating point value and compile code to push this value to the float stack.

+
Class: class:macro
Namespace: sigil
Interface Layer: rre

+

sigil::

+

Data: s-
+Addr: -
+Float: -

+
+

Process token as a new definition.

+

Interpret Time: + Create a header pointing to `here` with the provided string as the name. Sets class to `class:word`.

+ +
Class: class:macro
Namespace: sigil
Interface Layer: all

+

sigil:@

+

Data: s-n
+Addr: -
+Float: -

+
+

Fetch from a stored variable.

+

Interpret Time: + Fetch a value from a named variable.

+ +

Compile Time: + Compile the code to fetch a value from a named variable into the current definition.

+ +
Class: class:macro
Namespace: sigil
Interface Layer: all

+

sigil:\

+

Data: s-
+Addr: -
+Float: -

+
+

Process token as an instruction bundle.

+

Interpret Time: + Discard the string.

+ +

Compile Time: + Assemble the opcodes in the string and use `,` to inline it into the current definition.

+ +
Class: class:macro
Namespace: sigil
Interface Layer: all

+

sigil:^

+

Data: s-
+Addr: -
+Float: -

+
+

Process token as a function reference.

+

Interpret Time: + Discard the string.

+ +

Compile Time: + Comma the XT of the word into the current definition.

+ +
Class: class:macro
Namespace: sigil
Interface Layer: all

+

sigil:`

+

Data: s-
+Addr: -
+Float: -

+
+

Process token as a bytecode.

+

Interpret Time: + Discard the string.

+ +

Compile Time: + Convert the string to a number and use `,` to inline it into the current definition.

+ +
Class: class:macro
Namespace: sigil
Interface Layer: all

+

sigil:|

+

Data: s-
+Addr: -
+Float: -

+
+

POSTPONE equivalent.

+

Interpret Time: + Discard the string.

+ +

Compile Time: + Convert the string to a number and use `,` to inline it into the current definition.

+ +
Class: class:macro
Namespace: sigil
Interface Layer: all

sip

Data: nq-n
Addr: -
diff --git a/doc/Glossary.txt b/doc/Glossary.txt index cb2073f..272e76a 100644 --- a/doc/Glossary.txt +++ b/doc/Glossary.txt @@ -28,7 +28,7 @@ Class: class:macro | Namespace: global | Interface Layer: all Provide a visual indication of a code group. -Class: class:macro | Namespace: prefix | Interface Layer: all +Class: class:macro | Namespace: sigil | Interface Layer: all ------------------------------------------------------------------------ ) @@ -39,7 +39,7 @@ Class: class:macro | Namespace: prefix | Interface Layer: all Provide a visual indication of a code group. -Class: class:macro | Namespace: prefix | Interface Layer: all +Class: class:macro | Namespace: sigil | Interface Layer: all ------------------------------------------------------------------------ * @@ -4206,218 +4206,6 @@ Move a value from the return stack to the data stack. Class: class:macro | Namespace: global | Interface Layer: all ------------------------------------------------------------------------ -prefix:! - - Data: ns- - Addr: - - Float: - - -Store a value into a variable. - -Interpret Time: - Store a value into the named variable. - -Compile Time: - Compile the code to store a value into a named variable. - -Class: class:macro | Namespace: prefix | Interface Layer: all ------------------------------------------------------------------------- - -prefix:# - - Data: s-n - Addr: - - Float: - - -Process token as a number. - -Interpret Time: - Convert the string into a number and leave on the stack. - -Compile Time: - Convert the string into a number and compile into the current definition as a literal. - -Class: class:macro | Namespace: prefix | Interface Layer: all ------------------------------------------------------------------------- - -prefix:$ - - Data: s-c - Addr: - - Float: - - -Process token as an ASCII character. - -Interpret Time: - Fetch first character from string. Leave on stack. - -Compile Time: - Fetch first character from the string. Compile into the current definition as literal. - -Class: class:macro | Namespace: prefix | Interface Layer: all ------------------------------------------------------------------------- - -prefix:& - - Data: s-a - Addr: - - Float: - - -Return a pointer to a named item. - -Interpret Time: - Lookup name in dictionary, return contents of the xt field on the stack. - -Compile Time: - Lookup name in dictionary, compile code to push the contents of the xt field into the current definition. - -Class: class:macro | Namespace: prefix | Interface Layer: all ------------------------------------------------------------------------- - -prefix:' - - Data: s-s - Addr: - - Float: - - -Process token as a string. - -Interpret Time: - Move string into temporary buffer. If `RewriteUnderscores` is `TRUE`, replace all instances of _ with space. - -Compile Time: - Move string into temporary buffer. If `RewriteUnderscores` is `TRUE`, replace all instances of _ with space. Then compile the string into the current definition. - -Class: class:macro | Namespace: prefix | Interface Layer: all ------------------------------------------------------------------------- - -prefix:( - - Data: s- - Addr: - - Float: - - -Process token as a comment. - -Interpret Time: - Discard the string. - -Compile Time: - Discard the string. - -Class: class:macro | Namespace: prefix | Interface Layer: all ------------------------------------------------------------------------- - -prefix:. - - Data: s- - Addr: - - Float: -F - -Interpret time: convert string to a floating point value. Compile time: convert string to a floating point value and compile code to push this value to the float stack. - -Class: class:macro | Namespace: prefix | Interface Layer: rre ------------------------------------------------------------------------- - -prefix:: - - Data: s- - Addr: - - Float: - - -Process token as a new definition. - -Interpret Time: - Create a header pointing to `here` with the provided string as the name. Sets class to `class:word`. - -Class: class:macro | Namespace: prefix | Interface Layer: all ------------------------------------------------------------------------- - -prefix:@ - - Data: s-n - Addr: - - Float: - - -Fetch from a stored variable. - -Interpret Time: - Fetch a value from a named variable. - -Compile Time: - Compile the code to fetch a value from a named variable into the current definition. - -Class: class:macro | Namespace: prefix | Interface Layer: all ------------------------------------------------------------------------- - -prefix:\ - - Data: s- - Addr: - - Float: - - -Process token as an instruction bundle. - -Interpret Time: - Discard the string. - -Compile Time: - Assemble the opcodes in the string and use `,` to inline it into the current definition. - -Class: class:macro | Namespace: prefix | Interface Layer: all ------------------------------------------------------------------------- - -prefix:^ - - Data: s- - Addr: - - Float: - - -Process token as a function reference. - -Interpret Time: - Discard the string. - -Compile Time: - Comma the XT of the word into the current definition. - -Class: class:macro | Namespace: prefix | Interface Layer: all ------------------------------------------------------------------------- - -prefix:` - - Data: s- - Addr: - - Float: - - -Process token as a bytecode. - -Interpret Time: - Discard the string. - -Compile Time: - Convert the string to a number and use `,` to inline it into the current definition. - -Class: class:macro | Namespace: prefix | Interface Layer: all ------------------------------------------------------------------------- - -prefix:| - - Data: s- - Addr: - - Float: - - -POSTPONE equivalent. - -Interpret Time: - Discard the string. - -Compile Time: - Convert the string to a number and use `,` to inline it into the current definition. - -Class: class:macro | Namespace: prefix | Interface Layer: all ------------------------------------------------------------------------- - primitive Data: - @@ -5210,6 +4998,218 @@ Peform a bitwise shift of m by n bits. If n is positive, shift right. If negativ Class: class:primitive | Namespace: global | Interface Layer: all ------------------------------------------------------------------------ +sigil:! + + Data: ns- + Addr: - + Float: - + +Store a value into a variable. + +Interpret Time: + Store a value into the named variable. + +Compile Time: + Compile the code to store a value into a named variable. + +Class: class:macro | Namespace: sigil | Interface Layer: all +------------------------------------------------------------------------ + +sigil:# + + Data: s-n + Addr: - + Float: - + +Process token as a number. + +Interpret Time: + Convert the string into a number and leave on the stack. + +Compile Time: + Convert the string into a number and compile into the current definition as a literal. + +Class: class:macro | Namespace: sigil | Interface Layer: all +------------------------------------------------------------------------ + +sigil:$ + + Data: s-c + Addr: - + Float: - + +Process token as an ASCII character. + +Interpret Time: + Fetch first character from string. Leave on stack. + +Compile Time: + Fetch first character from the string. Compile into the current definition as literal. + +Class: class:macro | Namespace: sigil | Interface Layer: all +------------------------------------------------------------------------ + +sigil:& + + Data: s-a + Addr: - + Float: - + +Return a pointer to a named item. + +Interpret Time: + Lookup name in dictionary, return contents of the xt field on the stack. + +Compile Time: + Lookup name in dictionary, compile code to push the contents of the xt field into the current definition. + +Class: class:macro | Namespace: sigil | Interface Layer: all +------------------------------------------------------------------------ + +sigil:' + + Data: s-s + Addr: - + Float: - + +Process token as a string. + +Interpret Time: + Move string into temporary buffer. If `RewriteUnderscores` is `TRUE`, replace all instances of _ with space. + +Compile Time: + Move string into temporary buffer. If `RewriteUnderscores` is `TRUE`, replace all instances of _ with space. Then compile the string into the current definition. + +Class: class:macro | Namespace: sigil | Interface Layer: all +------------------------------------------------------------------------ + +sigil:( + + Data: s- + Addr: - + Float: - + +Process token as a comment. + +Interpret Time: + Discard the string. + +Compile Time: + Discard the string. + +Class: class:macro | Namespace: sigil | Interface Layer: all +------------------------------------------------------------------------ + +sigil:. + + Data: s- + Addr: - + Float: -F + +Interpret time: convert string to a floating point value. Compile time: convert string to a floating point value and compile code to push this value to the float stack. + +Class: class:macro | Namespace: sigil | Interface Layer: rre +------------------------------------------------------------------------ + +sigil:: + + Data: s- + Addr: - + Float: - + +Process token as a new definition. + +Interpret Time: + Create a header pointing to `here` with the provided string as the name. Sets class to `class:word`. + +Class: class:macro | Namespace: sigil | Interface Layer: all +------------------------------------------------------------------------ + +sigil:@ + + Data: s-n + Addr: - + Float: - + +Fetch from a stored variable. + +Interpret Time: + Fetch a value from a named variable. + +Compile Time: + Compile the code to fetch a value from a named variable into the current definition. + +Class: class:macro | Namespace: sigil | Interface Layer: all +------------------------------------------------------------------------ + +sigil:\ + + Data: s- + Addr: - + Float: - + +Process token as an instruction bundle. + +Interpret Time: + Discard the string. + +Compile Time: + Assemble the opcodes in the string and use `,` to inline it into the current definition. + +Class: class:macro | Namespace: sigil | Interface Layer: all +------------------------------------------------------------------------ + +sigil:^ + + Data: s- + Addr: - + Float: - + +Process token as a function reference. + +Interpret Time: + Discard the string. + +Compile Time: + Comma the XT of the word into the current definition. + +Class: class:macro | Namespace: sigil | Interface Layer: all +------------------------------------------------------------------------ + +sigil:` + + Data: s- + Addr: - + Float: - + +Process token as a bytecode. + +Interpret Time: + Discard the string. + +Compile Time: + Convert the string to a number and use `,` to inline it into the current definition. + +Class: class:macro | Namespace: sigil | Interface Layer: all +------------------------------------------------------------------------ + +sigil:| + + Data: s- + Addr: - + Float: - + +POSTPONE equivalent. + +Interpret Time: + Discard the string. + +Compile Time: + Convert the string to a number and use `,` to inline it into the current definition. + +Class: class:macro | Namespace: sigil | Interface Layer: all +------------------------------------------------------------------------ + sip Data: nq-n diff --git a/doc/RETRO-Book.md b/doc/RETRO-Book.md index 97916f6..f8fb76e 100644 --- a/doc/RETRO-Book.md +++ b/doc/RETRO-Book.md @@ -637,7 +637,7 @@ name it: :palindrome? dup s:reverse s:eq? ; ``` -Naming uses the `:` prefix to add a new word to the dictionary. +Naming uses the `:` sigil to add a new word to the dictionary. The words that make up the definition are then placed, with a final word (`;`) ending the definition. We can then use this: @@ -661,12 +661,12 @@ Input is divided into a series of whitespace delimited tokens. Each of these is then processed individually. There are no parsing words in RETRO. -Tokens may have a single character *prefix*, which RETRO will +Tokens may have a single character *sigil*, which RETRO will use to decide how to process the token. -## Prefixes +## Sigils -Prefixes are single characters added to the start of a token +Sigils are single characters added to the start of a token to guide the compiler. The use of these is a major way in which RETRO differs from traditional Forth. @@ -696,24 +696,24 @@ like: In RETRO, the interpret process is basically: get token - does the first character match a `prefix:` word? - yes: pass the token to the prefix handler + does the first character match a `sigil:` word? + yes: pass the token to the sigil handler no: is token a word in the dictionary? yes: push the XT to the stack and call the class handler no: report an error ("not found") All of the actual logic for how to deal with tokens is moved -to the individual prefix handlers, and the logic for handling +to the individual sigil handlers, and the logic for handling words is moved to word class handlers. -This means that prefixes are used for a lot of things. Numbers? -Handled by a `#` prefix. Strings? Use the `'` prefix. Comments? -Use `(`. Making a new word? Use the `:` prefix. +This means that sigils are used for a lot of things. Numbers? +Handled by a `#` sigil. Strings? Use the `'` sigil. Comments? +Use `(`. Making a new word? Use the `:` sigil. -The major prefixes are: +The major sigils are: - | Prefix | Used For | + | Sigil | Used For | | ------ | ----------------------------- | | @ | Fetch from variable | | ! | Store into variable | @@ -724,7 +724,7 @@ The major prefixes are: | ( | Comments | | : | Define a word | -The individual prefixes will be covered in more detail in the +The individual sigils will be covered in more detail in the later chapters on working with different data types. ## Word Classes @@ -1083,7 +1083,7 @@ Word names in RETRO generally follow the following conventions. * Readability is important * Be consistent -* Don't use a prefix as the first character of a name +* Don't use a sigil as the first character of a name * Don't use underscores in word names * Use short names for indices * Word names start with a `-` for "not" @@ -1138,7 +1138,7 @@ The common namespaces are: | err: | Words for handling errors | | io: | General I/O words | | n: | Words operating on numeric data | - | prefix: | Contains prefix handlers | + | sigil: | Contains sigil handlers | | s: | Words operating on string data | | v: | Words operating on variables | | file: | File I/O words | @@ -1147,15 +1147,15 @@ The common namespaces are: ## Tips -### Don't Start Names With Prefix Characters +### Don't Start Names With Sigil Characters -Avoid using a prefix as the first character of a word name. RETRO -will look for prefixes first, this will prevent direct use of +Avoid using a sigil as the first character of a word name. RETRO +will look for sigils first, this will prevent direct use of the work in question. -To find a list of prefix characters, do: +To find a list of sigil characters, do: - 'prefix: d:words-with + 'sigil: d:words-with ### Don't Use Underscores @@ -1441,7 +1441,7 @@ Instead of: i dudumu.. -The runtime assembler also provides three prefixes for use in +The runtime assembler also provides three sigils for use in inlining machine code into a definition. These are: \ Treat token as an assembly sequence @@ -1618,9 +1618,9 @@ buffer:start s:put nl RETRO provides words for working with ASCII characters. -## Prefix +## Sigil -Character constants are returned using the `$` prefix. +Character constants are returned using the `$` sigil. ## Namespace @@ -1812,7 +1812,7 @@ precision (1 bit for the sign, 11 bits for the exponent, and the remaining 52 bits for the value), i.e. 15 decimal digits of precision. -## Prefix +## Sigil Floating point numbers start with a `.` @@ -2213,9 +2213,9 @@ two forms. Numbers in RETRO are signed integers. -## Token Prefix +## Sigil -All numbers start with a `#` prefix. +All numbers start with a `#` sigil. ## Namespace @@ -2294,9 +2294,9 @@ To display a number, use `n:put`. # Working With Pointers -## Prefix +## Sigil -Pointers are returned by the `&` prefix. +Pointers are returned by the `&` sigil. ## Examples @@ -2550,7 +2550,7 @@ strings can contain UTF8 encoded data if the host platform allows. Words like `s:length` will return the number of bytes, not the number of logical characters in this case. -## Prefix +## Sigil Strings begin with a single `'`. @@ -3746,7 +3746,7 @@ listener: stack_push(1024); execute("interpret", memory[2]); -The `interpret` word handles things like prefixes, so this is +The `interpret` word handles things like sigils, so this is needed if you want to run something that needs those. # Historical Papers and Notes @@ -4103,7 +4103,7 @@ Sources: - http://forth.works/c812416f397af11db58e97388a3238f2 - gopher://forth.works/0/c812416f397af11db58e97388a3238f2 -## Prefixes as a Language Element +## Sigils as a Language Element A big change in RETRO 12 was the elimination of the traditional parser from the language. This was a sacrifice due to the lack @@ -4115,26 +4115,26 @@ And so `interpret` operates only on the current token. The core language does not track what came before or attempt to guess at what might come in the future. -This leads into the prefixes. RETRO 11 had a complicated system -for prefixes, with different types of prefixes for words that +This leads into the sigils. RETRO 11 had a complicated system +for sigils, with different types of sigilss for words that parsed ahead (e.g., strings) and words that operated on the current token (e.g., `@`). RETRO 12 eliminates all of these in -favor of just having a single prefix model. +favor of just having a single sigil model. The first thing `interpret` does is look to see if the first -character in a token matches a `prefix:` word. If it does, it -passes the rest of the token as a string pointer to the prefix -specific handler to deal with. If there is no valid prefix +character in a token matches a `sigil:` word. If it does, it +passes the rest of the token as a string pointer to the sigil +specific handler to deal with. If there is no valid sigil found, it tries to find it in the dictionary. Assuming that it finds the words, it passes the `d:xt` field to the handler that `d:class` points to. Otherwise it calls `err:notfound`. This has an important implication: *words can not reliably -have names that start with a prefix character.* +have names that start with a sigil character.* It also simplifies things. Anything that would normally parse -becomes a prefix handler. So creating a new word? Use the `:` -prefix. Strings? Use `'`. Pointers? Try `&`. And so on. E.g., +becomes a sigil handler. So creating a new word? Use the `:` +sigil. Strings? Use `'`. Pointers? Try `&`. And so on. E.g., In ANS | In RETRO : foo ... ; | :foo ... ; @@ -4142,12 +4142,12 @@ prefix. Strings? Use `'`. Pointers? Try `&`. And so on. E.g., : bar ... ['] foo ; | :bar ... &foo ; s" hello world!" | 'hello_world! -If you are familiar with ColorForth, prefixes are a similar +If you are familiar with ColorForth, sigils are a similar idea to colors, but can be defined by the user as normal words. After doing this for quite a while I rather like it. I can see why Chuck Moore eventually went towards ColorForth as using -color (or prefixes in my case) does simplify the implementation +color (or sigils in my case) does simplify the implementation in many ways. ## On The Kernel Wordset @@ -4187,14 +4187,14 @@ Compiler & Interpreter Compiler Heap ; [ ] Dictionary d:link d:class d:xt d:name d:add-header class:word class:primitive class:data class:macro - prefix:: prefix:# prefix:& prefix:$ + sigil:: sigil:# sigil:& sigil:$ interpret d:lookup err:notfound Assembler i d r -I *could* slightly reduce this. The $ prefix could be defined in +I *could* slightly reduce this. The $ sigil could be defined in higher level code, and I don't strictly *need* to expose the `fetch-next` and `store-next` here. But since the are already implemented as dependencies of the words in the kernel, it would @@ -4440,9 +4440,9 @@ Consider: 'test_name var #188 !test_name -In the first case, the `:` prefix handles the token, so the +In the first case, the `:` sigil handles the token, so the underscore is not remapped to a space, creating a word name as -`hello_msg`. But in the second, the `'` prefix remaps the +`hello_msg`. But in the second, the `'` sigil remaps the underscore to a space, giving a variable name of `test name`. In the third line, the name lookup will fail as `test_name` is not defined, so the store will be done to an incorrect address. diff --git a/doc/book/general/quick-tutorial b/doc/book/general/quick-tutorial index d367275..3642d29 100644 --- a/doc/book/general/quick-tutorial +++ b/doc/book/general/quick-tutorial @@ -32,7 +32,7 @@ name it: :palindrome? dup s:reverse s:eq? ; ``` -Naming uses the `:` prefix to add a new word to the dictionary. +Naming uses the `:` sigil to add a new word to the dictionary. The words that make up the definition are then placed, with a final word (`;`) ending the definition. We can then use this: diff --git a/doc/book/general/syntax b/doc/book/general/syntax index dc4713a..7185a07 100644 --- a/doc/book/general/syntax +++ b/doc/book/general/syntax @@ -11,12 +11,12 @@ Input is divided into a series of whitespace delimited tokens. Each of these is then processed individually. There are no parsing words in RETRO. -Tokens may have a single character *prefix*, which RETRO will +Tokens may have a single character *sigil*, which RETRO will use to decide how to process the token. -## Prefixes +## Sigils -Prefixes are single characters added to the start of a token +Sigils are single characters added to the start of a token to guide the compiler. The use of these is a major way in which RETRO differs from traditional Forth. @@ -46,24 +46,24 @@ like: In RETRO, the interpret process is basically: get token - does the first character match a `prefix:` word? - yes: pass the token to the prefix handler + does the first character match a `sigil:` word? + yes: pass the token to the sigil handler no: is token a word in the dictionary? yes: push the XT to the stack and call the class handler no: report an error ("not found") All of the actual logic for how to deal with tokens is moved -to the individual prefix handlers, and the logic for handling +to the individual sigil handlers, and the logic for handling words is moved to word class handlers. -This means that prefixes are used for a lot of things. Numbers? -Handled by a `#` prefix. Strings? Use the `'` prefix. Comments? -Use `(`. Making a new word? Use the `:` prefix. +This means that sigils are used for a lot of things. Numbers? +Handled by a `#` sigil. Strings? Use the `'` sigil. Comments? +Use `(`. Making a new word? Use the `:` sigil. -The major prefixes are: +The major sigils are: - | Prefix | Used For | + | Sigil | Used For | | ------ | ----------------------------- | | @ | Fetch from variable | | ! | Store into variable | @@ -74,7 +74,7 @@ The major prefixes are: | ( | Comments | | : | Define a word | -The individual prefixes will be covered in more detail in the +The individual sigils will be covered in more detail in the later chapters on working with different data types. ## Word Classes diff --git a/doc/book/glossary/glossary b/doc/book/glossary/glossary index 738cc18..272e76a 100644 --- a/doc/book/glossary/glossary +++ b/doc/book/glossary/glossary @@ -28,7 +28,7 @@ Class: class:macro | Namespace: global | Interface Layer: all Provide a visual indication of a code group. -Class: class:macro | Namespace: prefix | Interface Layer: all +Class: class:macro | Namespace: sigil | Interface Layer: all ------------------------------------------------------------------------ ) @@ -39,7 +39,7 @@ Class: class:macro | Namespace: prefix | Interface Layer: all Provide a visual indication of a code group. -Class: class:macro | Namespace: prefix | Interface Layer: all +Class: class:macro | Namespace: sigil | Interface Layer: all ------------------------------------------------------------------------ * @@ -1152,6 +1152,17 @@ Create a new string from the provided array. This string will be stored in the t Class: class:word | Namespace: a | Interface Layer: all ------------------------------------------------------------------------ +abort + + Data: - + Addr: - + Float: - + +Abort execution. + +Class: class:macro | Namespace: global | Interface Layer: rre +------------------------------------------------------------------------ + again Data: - @@ -2060,7 +2071,7 @@ d:lookup Addr: - Float: - -Lookup the specified name in the dictionary and return a pointer to its dictionary header. This returns zero if the word is not found. +Lookup the specified name in the dictionary and return a pointer to its dictionary header. This returns zero if the word is not found. This also sets an internal variable ('which' in retro.muri) to the header address. Class: class:word | Namespace: d | Interface Layer: all ------------------------------------------------------------------------ @@ -4195,218 +4206,6 @@ Move a value from the return stack to the data stack. Class: class:macro | Namespace: global | Interface Layer: all ------------------------------------------------------------------------ -prefix:! - - Data: ns- - Addr: - - Float: - - -Store a value into a variable. - -Interpret Time: - Store a value into the named variable. - -Compile Time: - Compile the code to store a value into a named variable. - -Class: class:macro | Namespace: prefix | Interface Layer: all ------------------------------------------------------------------------- - -prefix:# - - Data: s-n - Addr: - - Float: - - -Process token as a number. - -Interpret Time: - Convert the string into a number and leave on the stack. - -Compile Time: - Convert the string into a number and compile into the current definition as a literal. - -Class: class:macro | Namespace: prefix | Interface Layer: all ------------------------------------------------------------------------- - -prefix:$ - - Data: s-c - Addr: - - Float: - - -Process token as an ASCII character. - -Interpret Time: - Fetch first character from string. Leave on stack. - -Compile Time: - Fetch first character from the string. Compile into the current definition as literal. - -Class: class:macro | Namespace: prefix | Interface Layer: all ------------------------------------------------------------------------- - -prefix:& - - Data: s-a - Addr: - - Float: - - -Return a pointer to a named item. - -Interpret Time: - Lookup name in dictionary, return contents of the xt field on the stack. - -Compile Time: - Lookup name in dictionary, compile code to push the contents of the xt field into the current definition. - -Class: class:macro | Namespace: prefix | Interface Layer: all ------------------------------------------------------------------------- - -prefix:' - - Data: s-s - Addr: - - Float: - - -Process token as a string. - -Interpret Time: - Move string into temporary buffer. If `RewriteUnderscores` is `TRUE`, replace all instances of _ with space. - -Compile Time: - Move string into temporary buffer. If `RewriteUnderscores` is `TRUE`, replace all instances of _ with space. Then compile the string into the current definition. - -Class: class:macro | Namespace: prefix | Interface Layer: all ------------------------------------------------------------------------- - -prefix:( - - Data: s- - Addr: - - Float: - - -Process token as a comment. - -Interpret Time: - Discard the string. - -Compile Time: - Discard the string. - -Class: class:macro | Namespace: prefix | Interface Layer: all ------------------------------------------------------------------------- - -prefix:. - - Data: s- - Addr: - - Float: -F - -Interpret time: convert string to a floating point value. Compile time: convert string to a floating point value and compile code to push this value to the float stack. - -Class: class:macro | Namespace: prefix | Interface Layer: rre ------------------------------------------------------------------------- - -prefix:: - - Data: s- - Addr: - - Float: - - -Process token as a new definition. - -Interpret Time: - Create a header pointing to `here` with the provided string as the name. Sets class to `class:word`. - -Class: class:macro | Namespace: prefix | Interface Layer: all ------------------------------------------------------------------------- - -prefix:@ - - Data: s-n - Addr: - - Float: - - -Fetch from a stored variable. - -Interpret Time: - Fetch a value from a named variable. - -Compile Time: - Compile the code to fetch a value from a named variable into the current definition. - -Class: class:macro | Namespace: prefix | Interface Layer: all ------------------------------------------------------------------------- - -prefix:\ - - Data: s- - Addr: - - Float: - - -Process token as an instruction bundle. - -Interpret Time: - Discard the string. - -Compile Time: - Assemble the opcodes in the string and use `,` to inline it into the current definition. - -Class: class:macro | Namespace: prefix | Interface Layer: all ------------------------------------------------------------------------- - -prefix:^ - - Data: s- - Addr: - - Float: - - -Process token as a function reference. - -Interpret Time: - Discard the string. - -Compile Time: - Comma the XT of the word into the current definition. - -Class: class:macro | Namespace: prefix | Interface Layer: all ------------------------------------------------------------------------- - -prefix:` - - Data: s- - Addr: - - Float: - - -Process token as a bytecode. - -Interpret Time: - Discard the string. - -Compile Time: - Convert the string to a number and use `,` to inline it into the current definition. - -Class: class:macro | Namespace: prefix | Interface Layer: all ------------------------------------------------------------------------- - -prefix:| - - Data: s- - Addr: - - Float: - - -POSTPONE equivalent. - -Interpret Time: - Discard the string. - -Compile Time: - Convert the string to a number and use `,` to inline it into the current definition. - -Class: class:macro | Namespace: prefix | Interface Layer: all ------------------------------------------------------------------------- - primitive Data: - @@ -5148,6 +4947,17 @@ Discard remaining lines in the file currently being evaluated. This only works w Class: class:word | Namespace: sys | Interface Layer: rre ------------------------------------------------------------------------ +script:ignore-to-eol + + Data: - + Addr: - + Float: - + +Discard remaining tokens in the current line. This only works when including a file, not at the interpreter. + +Class: class:word | Namespace: sys | Interface Layer: rre +------------------------------------------------------------------------ + script:name Data: -s @@ -5188,6 +4998,218 @@ Peform a bitwise shift of m by n bits. If n is positive, shift right. If negativ Class: class:primitive | Namespace: global | Interface Layer: all ------------------------------------------------------------------------ +sigil:! + + Data: ns- + Addr: - + Float: - + +Store a value into a variable. + +Interpret Time: + Store a value into the named variable. + +Compile Time: + Compile the code to store a value into a named variable. + +Class: class:macro | Namespace: sigil | Interface Layer: all +------------------------------------------------------------------------ + +sigil:# + + Data: s-n + Addr: - + Float: - + +Process token as a number. + +Interpret Time: + Convert the string into a number and leave on the stack. + +Compile Time: + Convert the string into a number and compile into the current definition as a literal. + +Class: class:macro | Namespace: sigil | Interface Layer: all +------------------------------------------------------------------------ + +sigil:$ + + Data: s-c + Addr: - + Float: - + +Process token as an ASCII character. + +Interpret Time: + Fetch first character from string. Leave on stack. + +Compile Time: + Fetch first character from the string. Compile into the current definition as literal. + +Class: class:macro | Namespace: sigil | Interface Layer: all +------------------------------------------------------------------------ + +sigil:& + + Data: s-a + Addr: - + Float: - + +Return a pointer to a named item. + +Interpret Time: + Lookup name in dictionary, return contents of the xt field on the stack. + +Compile Time: + Lookup name in dictionary, compile code to push the contents of the xt field into the current definition. + +Class: class:macro | Namespace: sigil | Interface Layer: all +------------------------------------------------------------------------ + +sigil:' + + Data: s-s + Addr: - + Float: - + +Process token as a string. + +Interpret Time: + Move string into temporary buffer. If `RewriteUnderscores` is `TRUE`, replace all instances of _ with space. + +Compile Time: + Move string into temporary buffer. If `RewriteUnderscores` is `TRUE`, replace all instances of _ with space. Then compile the string into the current definition. + +Class: class:macro | Namespace: sigil | Interface Layer: all +------------------------------------------------------------------------ + +sigil:( + + Data: s- + Addr: - + Float: - + +Process token as a comment. + +Interpret Time: + Discard the string. + +Compile Time: + Discard the string. + +Class: class:macro | Namespace: sigil | Interface Layer: all +------------------------------------------------------------------------ + +sigil:. + + Data: s- + Addr: - + Float: -F + +Interpret time: convert string to a floating point value. Compile time: convert string to a floating point value and compile code to push this value to the float stack. + +Class: class:macro | Namespace: sigil | Interface Layer: rre +------------------------------------------------------------------------ + +sigil:: + + Data: s- + Addr: - + Float: - + +Process token as a new definition. + +Interpret Time: + Create a header pointing to `here` with the provided string as the name. Sets class to `class:word`. + +Class: class:macro | Namespace: sigil | Interface Layer: all +------------------------------------------------------------------------ + +sigil:@ + + Data: s-n + Addr: - + Float: - + +Fetch from a stored variable. + +Interpret Time: + Fetch a value from a named variable. + +Compile Time: + Compile the code to fetch a value from a named variable into the current definition. + +Class: class:macro | Namespace: sigil | Interface Layer: all +------------------------------------------------------------------------ + +sigil:\ + + Data: s- + Addr: - + Float: - + +Process token as an instruction bundle. + +Interpret Time: + Discard the string. + +Compile Time: + Assemble the opcodes in the string and use `,` to inline it into the current definition. + +Class: class:macro | Namespace: sigil | Interface Layer: all +------------------------------------------------------------------------ + +sigil:^ + + Data: s- + Addr: - + Float: - + +Process token as a function reference. + +Interpret Time: + Discard the string. + +Compile Time: + Comma the XT of the word into the current definition. + +Class: class:macro | Namespace: sigil | Interface Layer: all +------------------------------------------------------------------------ + +sigil:` + + Data: s- + Addr: - + Float: - + +Process token as a bytecode. + +Interpret Time: + Discard the string. + +Compile Time: + Convert the string to a number and use `,` to inline it into the current definition. + +Class: class:macro | Namespace: sigil | Interface Layer: all +------------------------------------------------------------------------ + +sigil:| + + Data: s- + Addr: - + Float: - + +POSTPONE equivalent. + +Interpret Time: + Discard the string. + +Compile Time: + Convert the string to a number and use `,` to inline it into the current definition. + +Class: class:macro | Namespace: sigil | Interface Layer: all +------------------------------------------------------------------------ + sip Data: nq-n @@ -5376,39 +5398,6 @@ Exchange the position of the top two items on the stack Class: class:primitive | Namespace: global | Interface Layer: all ------------------------------------------------------------------------ -sys:argc - - Data: -n - Addr: - - Float: - - -Return the number of arguments passed to the program. Deprecated. Use script:arguments - -Class: class:word | Namespace: sys | Interface Layer: rre ------------------------------------------------------------------------- - -sys:argv - - Data: n-s - Addr: - - Float: - - -Given an argument number, return the argument as a string. Deprecated. Use script:get-argument instead. - -Class: class:word | Namespace: sys | Interface Layer: rre ------------------------------------------------------------------------- - -sys:name - - Data: -s - Addr: - - Float: - - -Return the filename of the program being run. Deprecated. Use script:name instead. - -Class: class:word | Namespace: sys | Interface Layer: rre ------------------------------------------------------------------------- - tab Data: - @@ -5480,6 +5469,171 @@ Put a copy of the top item on the stack under the second one. Class: class:word | Namespace: global | Interface Layer: all ------------------------------------------------------------------------ +ui:add-view + + Data: s- + Addr: - + Float: - + +Add view named `s` to the displayed views. + +Class: class:word | Namespace: ui | Interface Layer: retro/python +------------------------------------------------------------------------ + +ui:create-view + + Data: ss- + Addr: - + Float: - + +Create a new view. `s1` is the name and `s2` is the type. + +Class: class:word | Namespace: ui | Interface Layer: retro/python +------------------------------------------------------------------------ + +ui:get-action + + Data: s-a + Addr: - + Float: - + +Return the address of the Retro handler for a view's associated action. + +Class: class:word | Namespace: ui | Interface Layer: retro/python +------------------------------------------------------------------------ + +ui:get-position + + Data: s-nn + Addr: - + Float: - + +Return the row and column of the named view. + +Class: class:word | Namespace: ui | Interface Layer: retro/python +------------------------------------------------------------------------ + +ui:get-size + + Data: s-nn + Addr: - + Float: - + +Return the height and width of the named view. + +Class: class:word | Namespace: ui | Interface Layer: retro/python +------------------------------------------------------------------------ + +ui:get-text + + Data: s-s + Addr: - + Float: - + +Get the value of the text property of the named view. + +Class: class:word | Namespace: ui | Interface Layer: retro/python +------------------------------------------------------------------------ + +ui:get-title + + Data: s-s + Addr: - + Float: - + +Get the value of the title property for the named view. + +Class: class:word | Namespace: ui | Interface Layer: retro/python +------------------------------------------------------------------------ + +ui:operation + + Data: ...n- + Addr: - + Float: - + +Carry out a UI operation. Used internally by the other `ui:` words. + +Class: class:word | Namespace: ui | Interface Layer: retro/python +------------------------------------------------------------------------ + +ui:present + + Data: - + Addr: - + Float: - + +Display all views. + +Class: class:word | Namespace: ui | Interface Layer: retro/python +------------------------------------------------------------------------ + +ui:remove-view + + Data: s- + Addr: - + Float: - + +Remove view named `s` from the displayed views. + +Class: class:word | Namespace: ui | Interface Layer: retro/python +------------------------------------------------------------------------ + +ui:set-action + + Data: as- + Addr: - + Float: - + +Set the action handler for a view to the specified Retro word address. + +Class: class:word | Namespace: ui | Interface Layer: retro/python +------------------------------------------------------------------------ + +ui:set-position + + Data: nns- + Addr: - + Float: - + +Move view `s` to row `n1` and column `n2`. + +Class: class:word | Namespace: ui | Interface Layer: retro/python +------------------------------------------------------------------------ + +ui:set-size + + Data: nns- + Addr: - + Float: - + +Set view `s` to height `n1` and width `n2`. + +Class: class:word | Namespace: ui | Interface Layer: retro/python +------------------------------------------------------------------------ + +ui:set-text + + Data: ss- + Addr: - + Float: - + +Set the text property of view `s2` to `s1`. + +Class: class:word | Namespace: ui | Interface Layer: retro/python +------------------------------------------------------------------------ + +ui:set-title + + Data: ss- + Addr: - + Float: - + +Set the title property of view `s2` to `s1`. + +Class: class:word | Namespace: ui | Interface Layer: retro/python +------------------------------------------------------------------------ + unhook Data: a- @@ -5663,6 +5817,22 @@ Close a pipe. Class: class:word | Namespace: unix | Interface Layer: rre ------------------------------------------------------------------------ +unix:pipe + + Data: s- + Addr: - + Float: - + +Takes a string with a Unix command line and run it in a pipe, returning a new string with the first line of the output from the pipe. + +Class: class:word | Namespace: unix | Interface Layer: rre + +Example #1: + + 'ls_-l unix:pipe s:put nl + +------------------------------------------------------------------------ + unix:popen Data: sn-n diff --git a/doc/book/internals/calling-retro-from-c b/doc/book/internals/calling-retro-from-c index 3389131..1ccb6d4 100644 --- a/doc/book/internals/calling-retro-from-c +++ b/doc/book/internals/calling-retro-from-c @@ -63,5 +63,5 @@ listener: stack_push(1024); execute("interpret", memory[2]); -The `interpret` word handles things like prefixes, so this is +The `interpret` word handles things like sigils, so this is needed if you want to run something that needs those. diff --git a/doc/book/tech-notes/kernel-words b/doc/book/tech-notes/kernel-words index 3f5b198..296ce72 100644 --- a/doc/book/tech-notes/kernel-words +++ b/doc/book/tech-notes/kernel-words @@ -35,14 +35,14 @@ Compiler & Interpreter Compiler Heap ; [ ] Dictionary d:link d:class d:xt d:name d:add-header class:word class:primitive class:data class:macro - prefix:: prefix:# prefix:& prefix:$ + sigil:: sigil:# sigil:& sigil:$ interpret d:lookup err:notfound Assembler i d r -I *could* slightly reduce this. The $ prefix could be defined in +I *could* slightly reduce this. The $ sigil could be defined in higher level code, and I don't strictly *need* to expose the `fetch-next` and `store-next` here. But since the are already implemented as dependencies of the words in the kernel, it would diff --git a/doc/book/tech-notes/prefixes b/doc/book/tech-notes/prefixes index 9a7422c..2038965 100644 --- a/doc/book/tech-notes/prefixes +++ b/doc/book/tech-notes/prefixes @@ -1,4 +1,4 @@ -## Prefixes as a Language Element +## Sigils as a Language Element A big change in RETRO 12 was the elimination of the traditional parser from the language. This was a sacrifice due to the lack @@ -10,26 +10,26 @@ And so `interpret` operates only on the current token. The core language does not track what came before or attempt to guess at what might come in the future. -This leads into the prefixes. RETRO 11 had a complicated system -for prefixes, with different types of prefixes for words that +This leads into the sigils. RETRO 11 had a complicated system +for sigils, with different types of sigilss for words that parsed ahead (e.g., strings) and words that operated on the current token (e.g., `@`). RETRO 12 eliminates all of these in -favor of just having a single prefix model. +favor of just having a single sigil model. The first thing `interpret` does is look to see if the first -character in a token matches a `prefix:` word. If it does, it -passes the rest of the token as a string pointer to the prefix -specific handler to deal with. If there is no valid prefix +character in a token matches a `sigil:` word. If it does, it +passes the rest of the token as a string pointer to the sigil +specific handler to deal with. If there is no valid sigil found, it tries to find it in the dictionary. Assuming that it finds the words, it passes the `d:xt` field to the handler that `d:class` points to. Otherwise it calls `err:notfound`. This has an important implication: *words can not reliably -have names that start with a prefix character.* +have names that start with a sigil character.* It also simplifies things. Anything that would normally parse -becomes a prefix handler. So creating a new word? Use the `:` -prefix. Strings? Use `'`. Pointers? Try `&`. And so on. E.g., +becomes a sigil handler. So creating a new word? Use the `:` +sigil. Strings? Use `'`. Pointers? Try `&`. And so on. E.g., In ANS | In RETRO : foo ... ; | :foo ... ; @@ -37,10 +37,10 @@ prefix. Strings? Use `'`. Pointers? Try `&`. And so on. E.g., : bar ... ['] foo ; | :bar ... &foo ; s" hello world!" | 'hello_world! -If you are familiar with ColorForth, prefixes are a similar +If you are familiar with ColorForth, sigils are a similar idea to colors, but can be defined by the user as normal words. After doing this for quite a while I rather like it. I can see why Chuck Moore eventually went towards ColorForth as using -color (or prefixes in my case) does simplify the implementation +color (or sigils in my case) does simplify the implementation in many ways. diff --git a/doc/book/tech-notes/underscores-in-names b/doc/book/tech-notes/underscores-in-names index 1742cef..4873cad 100644 --- a/doc/book/tech-notes/underscores-in-names +++ b/doc/book/tech-notes/underscores-in-names @@ -13,9 +13,9 @@ Consider: 'test_name var #188 !test_name -In the first case, the `:` prefix handles the token, so the +In the first case, the `:` sigil handles the token, so the underscore is not remapped to a space, creating a word name as -`hello_msg`. But in the second, the `'` prefix remaps the +`hello_msg`. But in the second, the `'` sigil remaps the underscore to a space, giving a variable name of `test name`. In the third line, the name lookup will fail as `test_name` is not defined, so the store will be done to an incorrect address. diff --git a/doc/book/techniques/assembly b/doc/book/techniques/assembly index ed053e2..ed9e0af 100644 --- a/doc/book/techniques/assembly +++ b/doc/book/techniques/assembly @@ -100,7 +100,7 @@ Instead of: i dudumu.. -The runtime assembler also provides three prefixes for use in +The runtime assembler also provides three sigils for use in inlining machine code into a definition. These are: \ Treat token as an assembly sequence diff --git a/doc/book/techniques/characters b/doc/book/techniques/characters index 3e7fd4f..eca1dd5 100644 --- a/doc/book/techniques/characters +++ b/doc/book/techniques/characters @@ -2,9 +2,9 @@ RETRO provides words for working with ASCII characters. -## Prefix +## Sigil -Character constants are returned using the `$` prefix. +Character constants are returned using the `$` sigil. ## Namespace diff --git a/doc/book/techniques/floating-point b/doc/book/techniques/floating-point index 7589289..3e42c72 100644 --- a/doc/book/techniques/floating-point +++ b/doc/book/techniques/floating-point @@ -9,7 +9,7 @@ precision (1 bit for the sign, 11 bits for the exponent, and the remaining 52 bits for the value), i.e. 15 decimal digits of precision. -## Prefix +## Sigil Floating point numbers start with a `.` diff --git a/doc/book/techniques/naming-conventions b/doc/book/techniques/naming-conventions index 23eab25..01a5675 100644 --- a/doc/book/techniques/naming-conventions +++ b/doc/book/techniques/naming-conventions @@ -6,7 +6,7 @@ Word names in RETRO generally follow the following conventions. * Readability is important * Be consistent -* Don't use a prefix as the first character of a name +* Don't use a sigil as the first character of a name * Don't use underscores in word names * Use short names for indices * Word names start with a `-` for "not" @@ -61,7 +61,7 @@ The common namespaces are: | err: | Words for handling errors | | io: | General I/O words | | n: | Words operating on numeric data | - | prefix: | Contains prefix handlers | + | sigil: | Contains sigil handlers | | s: | Words operating on string data | | v: | Words operating on variables | | file: | File I/O words | @@ -70,15 +70,15 @@ The common namespaces are: ## Tips -### Don't Start Names With Prefix Characters +### Don't Start Names With Sigil Characters -Avoid using a prefix as the first character of a word name. RETRO -will look for prefixes first, this will prevent direct use of +Avoid using a sigil as the first character of a word name. RETRO +will look for sigils first, this will prevent direct use of the work in question. -To find a list of prefix characters, do: +To find a list of sigil characters, do: - 'prefix: d:words-with + 'sigil: d:words-with ### Don't Use Underscores diff --git a/doc/book/techniques/numbers b/doc/book/techniques/numbers index d7ed2fb..f7298f1 100644 --- a/doc/book/techniques/numbers +++ b/doc/book/techniques/numbers @@ -2,9 +2,9 @@ Numbers in RETRO are signed integers. -## Token Prefix +## Sigil -All numbers start with a `#` prefix. +All numbers start with a `#` sigil. ## Namespace diff --git a/doc/book/techniques/pointers b/doc/book/techniques/pointers index cfe4f1a..c5c8579 100644 --- a/doc/book/techniques/pointers +++ b/doc/book/techniques/pointers @@ -1,8 +1,8 @@ # Working With Pointers -## Prefix +## Sigil -Pointers are returned by the `&` prefix. +Pointers are returned by the `&` sigil. ## Examples diff --git a/doc/book/techniques/strings b/doc/book/techniques/strings index 939fe0b..d4e59bb 100644 --- a/doc/book/techniques/strings +++ b/doc/book/techniques/strings @@ -9,7 +9,7 @@ strings can contain UTF8 encoded data if the host platform allows. Words like `s:length` will return the number of bytes, not the number of logical characters in this case. -## Prefix +## Sigil Strings begin with a single `'`. diff --git a/doc/html/chapters/general/quick-tutorial.html b/doc/html/chapters/general/quick-tutorial.html index 8ca17b1..0f31165 100644 --- a/doc/html/chapters/general/quick-tutorial.html +++ b/doc/html/chapters/general/quick-tutorial.html @@ -71,7 +71,7 @@ name it:

```
:palindrome? dup s:reverse s:eq? ;
```


-Naming uses the : prefix to add a new word to the dictionary. +Naming uses the : sigil to add a new word to the dictionary. The words that make up the definition are then placed, with a final word (;) ending the definition. We can then use this:

diff --git a/doc/html/chapters/general/syntax.html b/doc/html/chapters/general/syntax.html index d1c7aed..9848695 100644 --- a/doc/html/chapters/general/syntax.html +++ b/doc/html/chapters/general/syntax.html @@ -56,12 +56,12 @@ Input is divided into a series of whitespace delimited tokens. Each of these is then processed individually. There are no parsing words in RETRO.

-Tokens may have a single character prefix, which RETRO will +Tokens may have a single character sigil, which RETRO will use to decide how to process the token.

-Prefixes +Sigils

-Prefixes are single characters added to the start of a token +Sigils are single characters added to the start of a token to guide the compiler. The use of these is a major way in which RETRO differs from traditional Forth.

@@ -91,24 +91,24 @@ like: In RETRO, the interpret process is basically:

get token -does the first character match a `prefix:` word? -  yes: pass the token to the prefix handler +does the first character match a `sigil:` word? +  yes: pass the token to the sigil handler   no:  is token a word in the dictionary?        yes: push the XT to the stack and call the             class handler        no:  report an error ("not found")

All of the actual logic for how to deal with tokens is moved -to the individual prefix handlers, and the logic for handling +to the individual sigil handlers, and the logic for handling words is moved to word class handlers.

-This means that prefixes are used for a lot of things. Numbers? -Handled by a # prefix. Strings? Use the ' prefix. Comments? -Use (. Making a new word? Use the : prefix. +This means that sigils are used for a lot of things. Numbers? +Handled by a # sigil. Strings? Use the ' sigil. Comments? +Use (. Making a new word? Use the : sigil.

-The major prefixes are: +The major sigils are:

-| Prefix | Used For                      | +| Sigil  | Used For                      | | ------ | ----------------------------- | | @      | Fetch from variable           | | !      | Store into variable           | @@ -119,7 +119,7 @@ The major prefixes are: | (      | Comments                      | | :      | Define a word                 |

-The individual prefixes will be covered in more detail in the +The individual sigils will be covered in more detail in the later chapters on working with different data types.

Word Classes diff --git a/doc/html/chapters/internals/calling-retro-from-c.html b/doc/html/chapters/internals/calling-retro-from-c.html index 5ab955c..dbade3c 100644 --- a/doc/html/chapters/internals/calling-retro-from-c.html +++ b/doc/html/chapters/internals/calling-retro-from-c.html @@ -108,7 +108,7 @@ listener: stack_push(1024); execute("interpret", memory[2]);

-The interpret word handles things like prefixes, so this is +The interpret word handles things like sigils, so this is needed if you want to run something that needs those.

diff --git a/doc/html/chapters/tech-notes/kernel-words.html b/doc/html/chapters/tech-notes/kernel-words.html index 62156d3..a82eeb7 100644 --- a/doc/html/chapters/tech-notes/kernel-words.html +++ b/doc/html/chapters/tech-notes/kernel-words.html @@ -80,14 +80,14 @@ Compiler & Interpreter Compiler    Heap        ;       [    ]      Dictionary d:link      d:class     d:xt    d:name      d:add-header class:word  class:primitive     class:data  class:macro -prefix::    prefix:#    prefix:&    prefix:$ +sigil::     sigil:#     sigil:& sigil:$ interpret   d:lookup    err:notfound

Assembler

i           d           r

-I could slightly reduce this. The $ prefix could be defined in +I could slightly reduce this. The $ sigil could be defined in higher level code, and I don't strictly need to expose the fetch-next and store-next here. But since the are already implemented as dependencies of the words in the kernel, it would diff --git a/doc/html/chapters/tech-notes/prefixes.html b/doc/html/chapters/tech-notes/prefixes.html index 2f6eea7..6527099 100644 --- a/doc/html/chapters/tech-notes/prefixes.html +++ b/doc/html/chapters/tech-notes/prefixes.html @@ -43,7 +43,7 @@ .hr { display: block; height: 2px; background: #000000; } -

Prefixes as a Language Element +

Sigils as a Language Element

A big change in RETRO 12 was the elimination of the traditional parser from the language. This was a sacrifice due to the lack @@ -55,26 +55,26 @@ And so interpret operates only on the current token. The language does not track what came before or attempt to guess at what might come in the future.

-This leads into the prefixes. RETRO 11 had a complicated system -for prefixes, with different types of prefixes for words that +This leads into the sigils. RETRO 11 had a complicated system +for sigils, with different types of sigilss for words that parsed ahead (e.g., strings) and words that operated on the current token (e.g., @). RETRO 12 eliminates all of these in -favor of just having a single prefix model. +favor of just having a single sigil model.

The first thing interpret does is look to see if the first -character in a token matches a prefix: word. If it does, it -passes the rest of the token as a string pointer to the prefix -specific handler to deal with. If there is no valid prefix +character in a token matches a sigil: word. If it does, it +passes the rest of the token as a string pointer to the sigil +specific handler to deal with. If there is no valid sigil found, it tries to find it in the dictionary. Assuming that it finds the words, it passes the d:xt field to the handler that d:class points to. Otherwise it calls err:notfound.

This has an important implication: words can not reliably -have names that start with a prefix character. +have names that start with a sigil character.

It also simplifies things. Anything that would normally parse -becomes a prefix handler. So creating a new word? Use the : -prefix. Strings? Use '. Pointers? Try &. And so on. E.g., +becomes a sigil handler. So creating a new word? Use the : +sigil. Strings? Use '. Pointers? Try &. And so on. E.g.,

In ANS                  | In RETRO : foo ... ;             | :foo ... ; @@ -82,12 +82,12 @@ prefix. Strings? Use '. Pointers? Try & : bar ... ['] foo ;     | :bar ... &foo ; s" hello world!"        | 'hello_world!

-If you are familiar with ColorForth, prefixes are a similar +If you are familiar with ColorForth, sigils are a similar idea to colors, but can be defined by the user as normal words.

After doing this for quite a while I rather like it. I can see why Chuck Moore eventually went towards ColorForth as using -color (or prefixes in my case) does simplify the implementation +color (or sigils in my case) does simplify the implementation in many ways.

diff --git a/doc/html/chapters/tech-notes/underscores-in-names.html b/doc/html/chapters/tech-notes/underscores-in-names.html index 315b71c..6d0eaa6 100644 --- a/doc/html/chapters/tech-notes/underscores-in-names.html +++ b/doc/html/chapters/tech-notes/underscores-in-names.html @@ -58,9 +58,9 @@ Consider: 'test_name var #188 !test_name

-In the first case, the : prefix handles the token, so the +In the first case, the : sigil handles the token, so the underscore is not remapped to a space, creating a word name as -hello_msg. But in the second, the ' prefix remaps the +hello_msg. But in the second, the ' sigil remaps the underscore to a space, giving a variable name of test name. In the third line, the name lookup will fail as test_name is not defined, so the store will be done to an incorrect address. diff --git a/doc/html/chapters/techniques/assembly.html b/doc/html/chapters/techniques/assembly.html index 65fea15..cbbf9fb 100644 --- a/doc/html/chapters/techniques/assembly.html +++ b/doc/html/chapters/techniques/assembly.html @@ -145,7 +145,7 @@ Instead of:

i dudumu..

-The runtime assembler also provides three prefixes for use in +The runtime assembler also provides three sigils for use in inlining machine code into a definition. These are:

 \    Treat token as an assembly sequence diff --git a/doc/html/chapters/techniques/characters.html b/doc/html/chapters/techniques/characters.html index 66a97f7..d4b31ea 100644 --- a/doc/html/chapters/techniques/characters.html +++ b/doc/html/chapters/techniques/characters.html @@ -47,9 +47,9 @@

RETRO provides words for working with ASCII characters.

-Prefix +Sigil

-Character constants are returned using the $ prefix. +Character constants are returned using the $ sigil.

Namespace

diff --git a/doc/html/chapters/techniques/floating-point.html b/doc/html/chapters/techniques/floating-point.html index 089030f..d0b6658 100644 --- a/doc/html/chapters/techniques/floating-point.html +++ b/doc/html/chapters/techniques/floating-point.html @@ -54,7 +54,7 @@ precision (1 bit for the sign, 11 bits for the exponent, and the remaining 52 bits for the value), i.e. 15 decimal digits of precision.

-Prefix +Sigil

Floating point numbers start with a .

diff --git a/doc/html/chapters/techniques/naming-conventions.html b/doc/html/chapters/techniques/naming-conventions.html index 5dfd43a..f0443cc 100644 --- a/doc/html/chapters/techniques/naming-conventions.html +++ b/doc/html/chapters/techniques/naming-conventions.html @@ -51,7 +51,7 @@ Word names in RETRO generally follow the following conventions.

• Readability is important
• Be consistent
-• Don't use a prefix as the first character of a name
+• Don't use a sigil as the first character of a name
• Don't use underscores in word names
• Use short names for indices
• Word names start with a - for "not"
@@ -106,7 +106,7 @@ The common namespaces are: | err:    | Words for handling errors                              | | io:     | General I/O words                                      | | n:      | Words operating on numeric data                        | -| prefix: | Contains prefix handlers                               | +| sigil:  | Contains sigil handlers                                | | s:      | Words operating on string data                         | | v:      | Words operating on variables                           | | file:   | File I/O words                                         | @@ -115,15 +115,15 @@ The common namespaces are:

Tips

-Don't Start Names With Prefix Characters +Don't Start Names With Sigil Characters

-Avoid using a prefix as the first character of a word name. RETRO -will look for prefixes first, this will prevent direct use of +Avoid using a sigil as the first character of a word name. RETRO +will look for sigils first, this will prevent direct use of the work in question.

-To find a list of prefix characters, do: +To find a list of sigil characters, do:

-'prefix: d:words-with +'sigil: d:words-with

Don't Use Underscores

diff --git a/doc/html/chapters/techniques/numbers.html b/doc/html/chapters/techniques/numbers.html index 52bad5b..13e5a94 100644 --- a/doc/html/chapters/techniques/numbers.html +++ b/doc/html/chapters/techniques/numbers.html @@ -47,9 +47,9 @@

Numbers in RETRO are signed integers.

-Token Prefix +Sigil

-All numbers start with a # prefix. +All numbers start with a # sigil.

Namespace

diff --git a/doc/html/chapters/techniques/pointers.html b/doc/html/chapters/techniques/pointers.html index c474a63..a12846a 100644 --- a/doc/html/chapters/techniques/pointers.html +++ b/doc/html/chapters/techniques/pointers.html @@ -45,9 +45,9 @@

Working With Pointers

-Prefix +Sigil

-Pointers are returned by the & prefix. +Pointers are returned by the & sigil.

Examples

diff --git a/doc/html/chapters/techniques/strings.html b/doc/html/chapters/techniques/strings.html index 1918c01..cd61587 100644 --- a/doc/html/chapters/techniques/strings.html +++ b/doc/html/chapters/techniques/strings.html @@ -54,7 +54,7 @@ strings can contain UTF8 encoded data if the host platform allows. Words like s:length will return the number of bytes, not the number of logical characters in this case.

-Prefix +Sigil

Strings begin with a single '.

diff --git a/doc/html/index.html b/doc/html/index.html index 8253dfb..8a4f14b 100644 --- a/doc/html/index.html +++ b/doc/html/index.html @@ -1 +1 @@ - Retro Forth: Manual

Retro Forth

Introduction
Obtaining RETRO
Building on Unix
Building on Windows
Building Alternative Implementations
Advanced and Custom Builds
Starting RETRO
Basic User Interactions
Literate Source With Unu
Markdown
A Quick Tutorial
Syntax
Toolchain: Additional Tools
Toolchain: retro-compiler
Manpage: retro(1)
Manpage: retro-describe(1)
Manpage: retro-document(1)
Manpage: retro-embedimage(1)
Manpage: retro-extend(1)
Manpage: retro-locate(1)
Manpage: retro-muri(1)
Manpage: retro-tags(1)
Naming Conventions
The Return Stack
Stack Diagrams
Arrays
Assembly
Buffer
Characters
Defining Words
The Dictionary
Floating Point
Working With Files
Loops
Numbers
Pointers
Quotes
Sockets
Scripting
Strings
Using Combinators
Word Classes
Checking the Version
Errors
Lexical Scope
The Stacks
The Nga Virtual Machine
Interface Layers
Basic I/O
Detailed I/O
Image
Calling Retro From C
Historical Papers
Metacompiling
Self-Hosting
Prefixes
Kernel Words
Ngaro to Nga
RETRO11 Retrospective
Security
Underscores in Names
Code It Yourself Manifesto
Deprecation Policy
Copyrights
\ No newline at end of file + Retro Forth: Manual

Retro Forth

Introduction
Obtaining RETRO
Building on Unix
Building on Windows
Building Alternative Implementations
Advanced and Custom Builds
Starting RETRO
Basic User Interactions
Literate Source With Unu
Markdown
A Quick Tutorial
Syntax
Toolchain: Additional Tools
Toolchain: retro-compiler
Manpage: retro(1)
Manpage: retro-describe(1)
Manpage: retro-document(1)
Manpage: retro-embedimage(1)
Manpage: retro-extend(1)
Manpage: retro-locate(1)
Manpage: retro-muri(1)
Manpage: retro-tags(1)
Naming Conventions
The Return Stack
Stack Diagrams
Arrays
Assembly
Buffer
Characters
Defining Words
The Dictionary
Floating Point
Working With Files
Loops
Numbers
Pointers
Quotes
Sockets
Scripting
Strings
Using Combinators
Word Classes
Checking the Version
Errors
Lexical Scope
The Stacks
The Nga Virtual Machine
Interface Layers
Basic I/O
Detailed I/O
Image
Calling Retro From C
Historical Papers
Metacompiling
Self-Hosting
Sigils
Kernel Words
Ngaro to Nga
RETRO11 Retrospective
Security
Underscores in Names
Code It Yourself Manifesto
Deprecation Policy
Copyrights
\ No newline at end of file diff --git a/doc/words.tsv b/doc/words.tsv index 89e3182..4260772 100644 --- a/doc/words.tsv +++ b/doc/words.tsv @@ -1,7 +1,7 @@ $ -c - - Return ASCII:NUL (0). class:macro {n/a} {n/a} global all ' -s - - Return an empty string. class:macro {n/a} {n/a} global all -( - - - Provide a visual indication of a code group. class:macro {n/a} {n/a} prefix all -) - - - Provide a visual indication of a code group. class:macro {n/a} {n/a} prefix all +( - - - Provide a visual indication of a code group. class:macro {n/a} {n/a} sigil all +) - - - Provide a visual indication of a code group. class:macro {n/a} {n/a} sigil all * nn-n - - Multiply `n1` by `n2` and return the result. class:primitive #2 #6 *\n #-1 #100 * {n/a} global all + nn-n - - Add `n1` to `n2` and return the result. class:primitive #1 #2 + {n/a} global all , n- - - Store the specified value into the memory at `here` and increment `Heap` by 1. class:word $a , $b , $c , #0 , {n/a} global all @@ -358,19 +358,6 @@ pb:get a- - - Copy a string from the pasteboard to the specified address. clas pb:length -n - - Return the length of the string on the pasteboard. class:word {n/a} pb pb iOS pb:set s- - - Copy a string to the pasteboard. class:word {n/a} {n/a} pb iOS pop -n n- - Move a value from the return stack to the data stack. class:macro {n/a} {n/a} global all -prefix:! ns- - - Store a value into a variable. Store a value into the named variable. Compile the code to store a value into a named variable. class:macro {n/a} {n/a} prefix all -prefix:# s-n - - Process token as a number. Convert the string into a number and leave on the stack. Convert the string into a number and compile into the current definition as a literal. class:macro {n/a} {n/a} prefix all -prefix:$ s-c - - Process token as an ASCII character. Fetch first character from string. Leave on stack. Fetch first character from the string. Compile into the current definition as literal. class:macro {n/a} {n/a} prefix all -prefix:& s-a - - Return a pointer to a named item. Lookup name in dictionary, return contents of the xt field on the stack. Lookup name in dictionary, compile code to push the contents of the xt field into the current definition. class:macro {n/a} {n/a} prefix all -prefix:' s-s - - Process token as a string. Move string into temporary buffer. If `RewriteUnderscores` is `TRUE`, replace all instances of _ with space. Move string into temporary buffer. If `RewriteUnderscores` is `TRUE`, replace all instances of _ with space. Then compile the string into the current definition. class:macro {n/a} {n/a} prefix all -prefix:( s- - - Process token as a comment. Discard the string. Discard the string. class:macro {n/a} {n/a} prefix all -prefix:. s- - -F Interpret time: convert string to a floating point value. Compile time: convert string to a floating point value and compile code to push this value to the float stack. class:macro {n/a} {n/a} prefix rre -prefix:: s- - - Process token as a new definition. Create a header pointing to `here` with the provided string as the name. Sets class to `class:word`. class:macro {n/a} {n/a} prefix all -prefix:@ s-n - - Fetch from a stored variable. Fetch a value from a named variable. Compile the code to fetch a value from a named variable into the current definition. class:macro {n/a} {n/a} prefix all -prefix:\ s- - - Process token as an instruction bundle. Discard the string. Assemble the opcodes in the string and use `,` to inline it into the current definition. class:macro {n/a} {n/a} prefix all -prefix:^ s- - - Process token as a function reference. Discard the string. Comma the XT of the word into the current definition. class:macro {n/a} {n/a} prefix all -prefix:` s- - - Process token as a bytecode. Discard the string. Convert the string to a number and use `,` to inline it into the current definition. class:macro {n/a} {n/a} prefix all -prefix:| s- - - POSTPONE equivalent. Discard the string. Convert the string to a number and use `,` to inline it into the current definition. class:macro {n/a} {n/a} prefix all primitive - - - Change the class of the most recently defined word to `class:primitive`. class:word {n/a} {n/a} global all push n- -n - Move a value from the data stack to the return stack. class:macro {n/a} {n/a} global all r s- - - Lookup a reference by name and inline its pointer to the current assembly segment. class:word {n/a} {n/a} global all @@ -440,6 +427,19 @@ script:ignore-to-eol - - - Discard remaining tokens in the current line. This on script:name -s - - Return the filename of the program being run. class:word {n/a} {n/a} sys rre 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 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 +sigil:! ns- - - Store a value into a variable. Store a value into the named variable. Compile the code to store a value into a named variable. class:macro {n/a} {n/a} sigil all +sigil:# s-n - - Process token as a number. Convert the string into a number and leave on the stack. Convert the string into a number and compile into the current definition as a literal. class:macro {n/a} {n/a} sigil all +sigil:$ s-c - - Process token as an ASCII character. Fetch first character from string. Leave on stack. Fetch first character from the string. Compile into the current definition as literal. class:macro {n/a} {n/a} sigil all +sigil:& s-a - - Return a pointer to a named item. Lookup name in dictionary, return contents of the xt field on the stack. Lookup name in dictionary, compile code to push the contents of the xt field into the current definition. class:macro {n/a} {n/a} sigil all +sigil:' s-s - - Process token as a string. Move string into temporary buffer. If `RewriteUnderscores` is `TRUE`, replace all instances of _ with space. Move string into temporary buffer. If `RewriteUnderscores` is `TRUE`, replace all instances of _ with space. Then compile the string into the current definition. class:macro {n/a} {n/a} sigil all +sigil:( s- - - Process token as a comment. Discard the string. Discard the string. class:macro {n/a} {n/a} sigil all +sigil:. s- - -F Interpret time: convert string to a floating point value. Compile time: convert string to a floating point value and compile code to push this value to the float stack. class:macro {n/a} {n/a} sigil rre +sigil:: s- - - Process token as a new definition. Create a header pointing to `here` with the provided string as the name. Sets class to `class:word`. class:macro {n/a} {n/a} sigil all +sigil:@ s-n - - Fetch from a stored variable. Fetch a value from a named variable. Compile the code to fetch a value from a named variable into the current definition. class:macro {n/a} {n/a} sigil all +sigil:\ s- - - Process token as an instruction bundle. Discard the string. Assemble the opcodes in the string and use `,` to inline it into the current definition. class:macro {n/a} {n/a} sigil all +sigil:^ s- - - Process token as a function reference. Discard the string. Comma the XT of the word into the current definition. class:macro {n/a} {n/a} sigil all +sigil:` s- - - Process token as a bytecode. Discard the string. Convert the string to a number and use `,` to inline it into the current definition. class:macro {n/a} {n/a} sigil all +sigil:| s- - - POSTPONE equivalent. Discard the string. Convert the string to a number and use `,` to inline it into the current definition. class:macro {n/a} {n/a} sigil 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 socket:accept n-nn - - Begin accepting connections. Returns a new socket and an error code. class:word {n/a} {n/a} socket rre socket:bind sn-nn - - Bind a socket to a port. The port should be a string. Returns 0 if successful or -1 otherwise and an error code. class:word {n/a} {n/a} socket rre diff --git a/example/HTML.retro b/example/HTML.retro index 29beaa3..6ccbd63 100644 --- a/example/HTML.retro +++ b/example/HTML.retro @@ -10,7 +10,7 @@ This is a little experiment in combinator-driven HTML generation. :h1 (s-) '

s:put s:put '

s:put nl ; :div (q-) '
s:put call '
s:put nl ; :body (q-) ' s:put call ' s:put nl ; -:prefix:" s:keep &s:put compile:call ; immediate +:sigil:" s:keep &s:put compile:call ; immediate ~~~ Test case: diff --git a/example/alternate-listener.retro b/example/alternate-listener.retro index 4bb3376..9c7a161 100644 --- a/example/alternate-listener.retro +++ b/example/alternate-listener.retro @@ -78,10 +78,10 @@ far. ~~~ {{ - :prefix? - TIB fetch 'prefix:_ [ #7 + store ] sip d:lookup n:-zero? ; + :sigil? + TIB fetch 'sigil:_ [ #7 + store ] sip d:lookup n:-zero? ; :hint - nl TIB prefix? [ n:inc ] if d:words-beginning-with nl + nl TIB sigil? [ n:inc ] if d:words-beginning-with nl TIB s:put ; ---reveal--- :handle:tab (c-c) hook @@ -91,7 +91,7 @@ far. Control + k (`ASCII:VT`) will display help for the word being typed. This assumes that `retro-describe` is in your $PATH and that the -typed text is a complete word name (without a prefix). +typed text is a complete word name (without a sigil). ~~~ :handle:CTRL+K (c-c) hook diff --git a/example/dictionary-stats.retro b/example/dictionary-stats.retro index 1a4934e..efb3328 100644 --- a/example/dictionary-stats.retro +++ b/example/dictionary-stats.retro @@ -15,7 +15,7 @@ Determine the average length of a word name. / 'Average_name_length:_%n\n s:format s:put ~~~ -And without the prefixes... +And without the namespaces... ~~~ #0 #0 [ d:name dup $: s:index-of n:inc + s:length + [ n:inc ] dip ] d:for-each swap / diff --git a/example/export-as-html.retro b/example/export-as-html.retro index fd53442..104f5d9 100755 --- a/example/export-as-html.retro +++ b/example/export-as-html.retro @@ -202,7 +202,7 @@ delimiters. ~~~ On to generating the actual HTML for the syntax highlighted -source. This is driven by the prefix, then by word class via +source. This is driven by the sigil, then by word class via a little quick introspection. ~~~ @@ -213,8 +213,8 @@ a little quick introspection. :format-code (s-) (ignore_empty_tokens) dup s:length n:zero? [ '  s:put drop ] if; - - (tokens_with_prefixes) + + (tokens_with_sigils) dup fetch $: [ 'colon span ] case $( [ 'note span ] case diff --git a/example/export-muri-as-html.retro b/example/export-muri-as-html.retro index 252aea8..d3d6e27 100755 --- a/example/export-muri-as-html.retro +++ b/example/export-muri-as-html.retro @@ -66,7 +66,7 @@ Everything else gets treated as text. (ignore_empty_tokens) dup s:length n:zero? [ drop ] if; - (tokens_with_prefixes) + (tokens_with_sigils) dup fetch $: [ 'name span ] case $s [ 'string span ] case diff --git a/example/markdown-to-xhtml.retro b/example/markdown-to-xhtml.retro index d8c2ae2..7f24e89 100755 --- a/example/markdown-to-xhtml.retro +++ b/example/markdown-to-xhtml.retro @@ -219,7 +219,7 @@ delimiters. ~~~ On to generating the actual HTML for the syntax highlighted -source. This is driven by the prefix, then by word class via +source. This is driven by the sigil, then by word class via a little quick introspection. ~~~ @@ -230,8 +230,8 @@ a little quick introspection. :format-code (s-) (ignore_empty_tokens) dup s:length n:zero? [ '  s:put drop ] if; - - (tokens_with_prefixes) + + (tokens_with_sigils) dup fetch $: [ 'colon span ] case $( [ 'note span ] case diff --git a/example/muri-with-hex.retro b/example/muri-with-hex.retro index 5f17724..ee994d5 100644 --- a/example/muri-with-hex.retro +++ b/example/muri-with-hex.retro @@ -65,7 +65,7 @@ be useful if you are running on a VM with an extended instruction set. When loaded, it will *replace* the original `i` with a jump to -the one provided here, allowing existing words (like `prefix:\`) +the one provided here, allowing existing words (like `sigil:\`) to use this instead. ---- diff --git a/example/naming-quotes.retro b/example/naming-quotes.retro index e0e793a..64a45d5 100644 --- a/example/naming-quotes.retro +++ b/example/naming-quotes.retro @@ -9,7 +9,7 @@ like: : foo ... ; -In Retro, there are no parsing words. There is a prefix +In Retro, there are no parsing words. There is a sigil handler `:`, yielding: :foo ... ; diff --git a/example/numbers-without-prefix.retro b/example/numbers-without-prefix.retro index 384455e..f7db27f 100644 --- a/example/numbers-without-prefix.retro +++ b/example/numbers-without-prefix.retro @@ -1,47 +1,47 @@ -Numbers without the # Prefix +Numbers without the # Sigil -RETRO requires a # prefix to identify numbers. But since new -prefixes can be defined, it's possible to define prefixes for +RETRO requires a # sigil to identify numbers. But since new +sigils can be defined, it's possible to define sigils for the number starting with 0-9. This is actually easy (at least for positive numbers). Just -define a prefix handler that prepends the initial value back -on the string (since the string sans the prefix is passed to +define a sigil handler that prepends the initial value back +on the string (since the string sans the sigil is passed to the handler) and pass it to `s:to-number` and `class:data`. ~~~ {{ - :process-with-prefix (s-n) + :process-with-sigil (s-n) s:prepend s:to-number class:data ; ---reveal--- - :prefix:1 (s-n) '1 process-with-prefix ; immediate - :prefix:2 (s-n) '2 process-with-prefix ; immediate - :prefix:3 (s-n) '3 process-with-prefix ; immediate - :prefix:4 (s-n) '4 process-with-prefix ; immediate - :prefix:5 (s-n) '5 process-with-prefix ; immediate - :prefix:6 (s-n) '6 process-with-prefix ; immediate - :prefix:7 (s-n) '7 process-with-prefix ; immediate - :prefix:8 (s-n) '8 process-with-prefix ; immediate - :prefix:9 (s-n) '9 process-with-prefix ; immediate + :sigil:1 (s-n) '1 process-with-sigil ; immediate + :sigil:2 (s-n) '2 process-with-sigil ; immediate + :sigil:3 (s-n) '3 process-with-sigil ; immediate + :sigil:4 (s-n) '4 process-with-sigil ; immediate + :sigil:5 (s-n) '5 process-with-sigil ; immediate + :sigil:6 (s-n) '6 process-with-sigil ; immediate + :sigil:7 (s-n) '7 process-with-sigil ; immediate + :sigil:8 (s-n) '8 process-with-sigil ; immediate + :sigil:9 (s-n) '9 process-with-sigil ; immediate ~~~ `0` is a special case. Since RETRO has `0;` as a control -flow word, the `0` prefix would prevent using it. So the +flow word, the `0` sigil would prevent using it. So the handler for this checks to see if the part following the -prefix is a `;`. If so, it'll fall back to `0;`, otherwise +sigil is a `;`. If so, it'll fall back to `0;`, otherwise it treats the token as a number. ~~~ - :prefix:0 (s-n) + :sigil:0 (s-n) dup '; s:eq? [ drop &0; call ] - [ '0 process-with-prefix ] choose ; immediate + [ '0 process-with-sigil ] choose ; immediate }} ~~~ -For single digits, define each digit as a word. (Prefixes +For single digits, define each digit as a word. (Sigils are not processed for tokens with nothing other than the -prefix character, so this takes care of the issue). +sigil character, so this takes care of the issue). ~~~ :0 (-n) #0 ; @@ -58,7 +58,7 @@ prefix character, so this takes care of the issue). Handling negative numbers is a bigger headache though. By convention, RETRO uses - to imply "not" (as in `-eq?`). So -to handle the `-` prefix for numbers, it needs to fall back +to handle the `-` sigil for numbers, it needs to fall back to a dictionary search if the token isn't actually a number. ~~~ @@ -72,7 +72,7 @@ to a dictionary search if the token isn't actually a number. :call-with-class (d-) [ d:xt fetch ] [ d:class fetch ] bi call ; ---reveal--- - :prefix:- (s-) + :sigil:- (s-) numeric? [ s:to-number n:negate class:data ] [ in-dictionary? &report-error &call-with-class choose ] choose ; immediate diff --git a/example/reforth.retro b/example/reforth.retro index aeff6c2..a524e21 100644 --- a/example/reforth.retro +++ b/example/reforth.retro @@ -56,7 +56,7 @@ quick implementation. (The actual preseve/restore using the > this later. I'm not comfortable with this as it does add some overhead. The colon -prefix is extended to add a jump around word entries, so that nesting +sigil is extended to add a jump around word entries, so that nesting can work properly. This also extends the colon and semicolon words to add support for preserving the `my` and `at` variables. @@ -74,7 +74,7 @@ add support for preserving the `my` and `at` variables. !Compiler here swap store &Nest v:dec @Nest n:zero? [ @Scope !Dictionary ] if ; immediate ---reveal--- - :prefix:: def ; immediate + :sigil:: def ; immediate :; |-def -def immediate #0 !Nest }} diff --git a/example/retro-stats.retro b/example/retro-stats.retro index 730e0af..cb74896 100644 --- a/example/retro-stats.retro +++ b/example/retro-stats.retro @@ -1,6 +1,6 @@ This is a quick little thing to generate some statistics from the RETRO image and VM, along with some introspection -to identify prefix handlers and word classes. +to identify sigil handlers and word classes. # Memory Use @@ -56,7 +56,7 @@ Determine the average length of a word name. / '__Average_name_length:_%n\n s:format s:put ~~~ -And without the prefixes... +And without the sigils... ~~~ #0 #0 [ d:name dup $: s:index-of n:inc + s:length + [ n:inc ] dip ] d:for-each swap / @@ -92,11 +92,11 @@ nl 'Classes: s:put nl nl sp sp identify-classes [ s:put sp ] a:for-each nl ~~~ -# Identify Prefixes +# Identify Sigils -Prefixes are named as: +Sigils are named as: - prefix: + sigil: Unlike classes, this is not merely a convention, but an actual requirement. @@ -105,15 +105,15 @@ The process for obtaining an array of them and printing it is the same as with the class handlers. ~~~ -nl 'Prefixes: s:put nl nl +nl 'Sigils: s:put nl nl -:identify-prefixes (-a) +:identify-sigils (-a) here #0 , - [ d:name dup 'prefix: s:contains-string? + [ d:name dup 'sigil: s:contains-string? &, &drop choose ] d:for-each here over - n:dec over store ; -sp sp identify-prefixes [ s:put sp ] a:for-each nl +sp sp identify-sigils [ s:put sp ] a:for-each nl nl ~~~ diff --git a/example/safety-net.retro b/example/safety-net.retro index 00663a9..83b3c94 100644 --- a/example/safety-net.retro +++ b/example/safety-net.retro @@ -2,7 +2,7 @@ This implements a sort of "safety net", adding some compile and runtime error checking and reporting. -The first of these is to extend the `@` and `!` prefixes to check for +The first of these is to extend the `@` and `!` sigils to check for the existence of a word name. In a basic image, if the name isn't found, it will resolve to address 0 silently. This will have it report an error if the word is not found. @@ -14,11 +14,11 @@ if the word is not found. :if:not-defined (sq-s) over d:lookup n:zero? swap if ; -:prefix:@ +:sigil:@ [ err:var-not-defined ] if:not-defined d:lookup d:xt fetch class:data |fetch ; immediate -:prefix:! +:sigil:! [ err:var-not-defined ] if:not-defined d:lookup d:xt fetch class:data |store ; immediate ~~~ diff --git a/example/sandboxed-dictionary.retro b/example/sandboxed-dictionary.retro index ff2522e..c43a6ea 100644 --- a/example/sandboxed-dictionary.retro +++ b/example/sandboxed-dictionary.retro @@ -47,7 +47,7 @@ the global dictionary with the sandboxed one. # A Test Case This will expose a dictionary with just two words that can be -used with a new `%` prefix. +used with a new `%` sigil. ``` {{ @@ -55,7 +55,7 @@ used with a new `%` prefix. :dup $B ; dict{ 'swap 'dup }dict 'SANDBOX const ---reveal--- - :prefix:% (s) [ s:evaluate c:put ] SANDBOX d:with ; + :sigil:% (s) [ s:evaluate c:put ] SANDBOX d:with ; }} #70 dup swap diff --git a/image/retro.forth b/image/retro.forth index 2161bec..5beb5f2 100644 --- a/image/retro.forth +++ b/image/retro.forth @@ -47,19 +47,19 @@ across namespaces. E.g., s:put s:to-upper -### Prefixes +### Sigils -Prefixes are an integral part of RETRO. These are single symbol +Sigils are an integral part of RETRO. These are single symbol modifiers added to the start of a word which control how RETRO processes the word. -The interpreter model is covered in *Rx.md*, but basically: +The interpreter model is covered in *retro.muri*, but basically: - Get a token (whitespace delimited string) - Pass it to `interpret` - + if the token starts with a known prefix then pass - it to the prefix handler - + if the initial character is not a known prefix, + + if the token starts with a known sigil then pass + it to the sigil handler + + if the initial character is not a known sigil, look it up - if found, push the address ("xt") to the stack and call the word's class handler @@ -70,12 +70,12 @@ This is different than the process in traditional Forth. A few observations: - there are no parsing words - - numbers are handled using a prefix - - prefixes can be added or changed at any time + - numbers are handled using a sigil + - sigils can be added or changed at any time -The basic prefixes are: +The basic sigils are: - | prefix | used for | + | sigil | used for | | ------ | ---------------------- | | : | starting a definition | | & | obtaining pointers | @@ -96,7 +96,7 @@ The basic prefixes are: * Word names should be lowercase * Variable names should be Title case * Constants should be UPPERCASE -* Names may not start with a prefix character +* Names may not start with a sigil character * Names returning a flag should end with a ? * Words with an effect on the stack should have a stack comment @@ -227,12 +227,12 @@ have an accessor word that aids in readability. ~~~ It's sometimes useful to inline values directly. I use a -backtick prefix for this. +backtick sigil for this. ~~~ -:prefix:` (s-) s:to-number , ; immediate -:prefix:\ (s-) i ; immediate -:prefix:^ (s-) r ; immediate +:sigil:` (s-) s:to-number , ; immediate +:sigil:\ (s-) i ; immediate +:sigil:^ (s-) r ; immediate ~~~ It's traditional to have a word named `here` which returns the @@ -244,9 +244,9 @@ next free address in memory. ## Variables -The next two are additional prefixes to make working with -variables a bit less painful. By default you have to do things -like: +The next two are additional sigils to make working with +variables a bit less painful. By default you have to do +things like: &Name fetch #10 * &Name store @@ -254,7 +254,7 @@ Or using combinators: &Name [ fetch #10 * ] sip store -With the @ and ! prefixes this can become: +With the @ and ! sigils this can become: @Name #10 * !Name @@ -265,19 +265,19 @@ corresponding to: lit + store + nop + nop 'list.... #4097 ~~~ -:prefix:@ (s-n) +:sigil:@ (s-n) d:lookup d:xt fetch compiling? [ (life.... #3841 , , ) ] [ fetch ] choose ; immediate -:prefix:! (s-n) +:sigil:! (s-n) d:lookup d:xt fetch compiling? [ (list.... #4097 , , ) ] [ store ] choose ; immediate ~~~ The next few words aren't actually useful until the `s:` -namespace is defined. With strings and the `'` prefix they +namespace is defined. With strings and the `'` sigil they allow creation of variables and constants. | To create a | Use a form like | @@ -451,7 +451,7 @@ to: ## A Shortcut ~~~ -:prefix:| +:sigil:| d:lookup [ d:xt fetch ] [ d:class fetch ] bi compiling? [ &class:data dip compile:call ] &call choose ; immediate @@ -784,7 +784,7 @@ pointer to skip to the code following the stored string. here &s, dip class:data ; ~~~ -And now a quick `'` prefix. (This will be replaced later). What +And now a quick `'` sigil. (This will be replaced later). What this does is either move the string token to the temporary buffer or compile it into the current definition. @@ -796,7 +796,7 @@ Later in the code I'll add a better implementation which can handle conversion of _ into spaces. ~~~ -:prefix:' compiling? &s:keep &s:temp choose ; immediate +:sigil:' compiling? &s:keep &s:temp choose ; immediate ~~~ `s:chop` removes the last character from a string. @@ -1016,7 +1016,7 @@ characters that are of some general interest. ~~~ I have a few words that correspond to empty versions of the -prefixes. +sigils. ~~~ :' |s:empty ; immediate @@ -1025,7 +1025,7 @@ prefixes. ## ASCII Constants -Not all characters can be obtained via the $ prefix. ASCII has +Not all characters can be obtained via the $ sigil. ASCII has many characters that aren't really intended to be printable. RETRO has an `ASCII` namespace providing symbolic names for these. @@ -1131,7 +1131,7 @@ Convert a decimal (base 10) number to a string. }} ~~~ -Now replace the old prefix:' with this one that can optionally +Now replace the old sigil:' with this one that can optionally turn underscores into spaces. ~~~ @@ -1140,9 +1140,9 @@ TRUE 'RewriteUnderscores var-n {{ :sub (c-c) $_ [ ASCII:SPACE ] case ; :rewrite (s-s) @RewriteUnderscores [ &sub s:map ] if ; - :handle &prefix:' call ; + :handle &sigil:' call ; ---reveal--- - :prefix:' rewrite handle ; immediate + :sigil:' rewrite handle ; immediate }} ~~~ @@ -1648,7 +1648,7 @@ remaining string. And then the `process-tokens` uses `next-token` and `interpret` to go through the string, processing each token in turn. Using the standard `interpret` word allows for proper handling of the -prefixes and classes so everything works just as if entered +sigils and classes so everything works just as if entered directly. ~~~ diff --git a/image/retro.muri b/image/retro.muri index 0f92fcd..e3be064 100644 --- a/image/retro.muri +++ b/image/retro.muri @@ -722,7 +722,7 @@ handler, and a pointer to the start of the function. RETRO does the rest. In actual practice, I never use this outside of RETRO. New words -are made using the `:` prefix, or `d:create` (once defined in +are made using the `:` sigil, or `d:create` (once defined in the standard library). At some point I may simplify this by moving `d:create` into Rx and using it in place of `d:add-header`. @@ -849,94 +849,94 @@ i drmure.. An input token has a form like: - string + string RETRO will check the first character to see if it matches a -known prefix. If it does, it will pass the string (sans prefix) -to the prefix handler. If not, it will attempt to find the token +known sigil. If it does, it will pass the string (sans sigil) +to the sigil handler. If not, it will attempt to find the token in the dictionary. -Prefixes are handled by functions with specific naming -conventions. A prefix name should be: +Sigils are handled by functions with specific naming +conventions. A sigil name should be: - prefix: + sigil: -Where is the character for the prefix. These are +Where is the character for the sigil. These are compiler macros (using the `class:macro` class) and watch the `Compiler` to decide how to deal with the token. To find a -prefix, RETRO stores the prefix character into a string named -`prefixed`. It then searches for this string in the dictionary. -If found, it sets an internal variable (`prefix:handler`) to +sigil, RETRO stores the sigil character into a string named +`sigil`. It then searches for this string in the dictionary. +If found, it sets an internal variable (`sigil:handler`) to the dictionary entry for the handler function. If not found, -`prefix:handler` is set to zero. The check, done by `prefix?`, +`sigil:handler` is set to zero. The check, done by `sigil?`, also returns a flag. - '_ 'prefix:no s:const - 'prefix:_ 'prefixed s:const + '_ 'sigil:no s:const + 'sigil:_ 'sigil s:const - 'prefix:handler var + 'sigil:handler var ~~~ -: prefix:no +: sigil:no d 32 d 0 -: prefix:handler +: sigil:handler d 0 -: prefixed -s prefix:_ +: sigil +s sigil:_ ~~~ - :prefix:prepare - fetch &prefixed #7 + store ; + :sigil:prepare + fetch &sigil #6 + store ; ~~~ -: prefix:prepare +: sigil:prepare i feliliad -r prefixed -d 7 +r sigil +d 6 i stre.... ~~~ - :prefix:has-token? - dup s:length #1 0; drop-pair &prefix:no ; + :sigil:has-token? + dup s:length #1 0; drop-pair &sigil:no ; ~~~ -: prefix:has-token? +: sigil:has-token? i dulica.. r s:length i lieqzr.. d 1 i drdrlire -r prefix:no +r sigil:no ~~~ - :prefix? - prefix:has-token? prefix:prepare &prefixed d:lookup - dup &prefix:handler store #0 -eq? ; + :sigil? + sigil:has-token? sigil:prepare &sigil d:lookup + dup &sigil:handler store #0 -eq? ; ~~~ -: prefix? +: sigil? i lica.... -r prefix:has-token? +r sigil:has-token? i lica.... -r prefix:prepare +r sigil:prepare i lilica.. -r prefixed +r sigil r d:lookup i dulistli -r prefix:handler +r sigil:handler d 0 i nere.... ~~~ -RETRO makes extensive use of prefixes for implementing major -parts of the language, including parsing numbers (prefix with -`#`), obtaining pointers (prefix with `&`), and defining -functions (using the `:` prefix). +RETRO makes extensive use of sigils for implementing major +parts of the language, including parsing numbers (`#` sigil), +obtaining pointers (`&`), and defining functions (using the +`:` sigil). -| prefix | used for | example | +| sigil | used for | example | | ------ | ----------------- | ------- | | # | numbers | #100 | | $ | ASCII characters | $e | @@ -944,38 +944,38 @@ functions (using the `:` prefix). | : | definitions | :foo | | ( | Comments | (n-) | - :prefix:( (s-) drop ; + :sigil:( (s-) drop ; ~~~ -: prefix:( +: sigil:( i drre.... ~~~ - :prefix:# (s-n) s:to-number class:data ; + :sigil:# (s-n) s:to-number class:data ; ~~~ -: prefix:# +: sigil:# i lica.... r s:to-number i liju.... r class:data ~~~ - :prefix:$ (s-c) fetch class:data ; + :sigil:$ (s-c) fetch class:data ; ~~~ -: prefix:$ +: sigil:$ i feliju.. r class:data ~~~ - :prefix:: (s-) + :sigil:: (s-) &class:word &Heap fetch d:add-header &Heap fetch &Dictionary d:xt store #-1 &Compiler store ; ~~~ -: prefix:: +: sigil:: i lilifeli r class:word r Heap @@ -993,11 +993,11 @@ d -1 r Compiler ~~~ -The `&` prefix is used to return the address of a named item. +The `&` sigil is used to return the address of a named item. This will correspond to the `d:xt` field of the word header. In higher level Retro this would be: - :prefix:& (s-a) d:lookup d:xt fetch class:data ; + :sigil:& (s-a) d:lookup d:xt fetch class:data ; As an example: @@ -1005,7 +1005,7 @@ As an example: &Heap fetch (fetch_from_`Heap`) In the latter case, the use of `class:data` means that I -don't *need* to use the `&` prefix, but I do this anyway as +don't *need* to use the `&` sigil, but I do this anyway as I find it helps to provide a visual clue as to the intent of the code. @@ -1013,13 +1013,13 @@ This is also useful with combinators. If you are only using a single word, using `&word` instead of `[ word ]` will be smaller and faster. -For those familiar with traditional Forth, the `&` prefix +For those familiar with traditional Forth, the `&` sigil replaces both `'` and `[']`. - :prefix:& d:lookup d:xt fetch class:data ; + :sigil:& d:lookup d:xt fetch class:data ; ~~~ -: prefix:& +: sigil:& i lica.... r d:lookup i lica.... @@ -1136,9 +1136,9 @@ r comma:opcode The *interpreter* is what processes input. What it does is: * Take a string -* See if the first character has a prefix handler +* See if the first character has a sigil handler - * Yes: pass the rest of the string to the prefix handler + * Yes: pass the rest of the string to the sigil handler * No: lookup in the dictionary * Found: pass xt of word to the class handler @@ -1181,11 +1181,11 @@ i feju.... : input:source d 0 -: interpret:prefix +: interpret:sigil i ........ i ........ i lifezr.. -r prefix:handler +r sigil:handler i lifeliad r input:source d 1 @@ -1197,7 +1197,7 @@ i lifeliju r Which r call:dt -: interpret:noprefix +: interpret:nosigil i lifelica r input:source r d:lookup @@ -1214,11 +1214,11 @@ r _interpret : _interpret i dulistli r input:source -r prefix? +r sigil? i ca...... i lililiju -r interpret:prefix -r interpret:noprefix +r interpret:sigil +r interpret:nosigil r choose ~~~ @@ -1603,9 +1603,9 @@ r class:word s -if : 0029 r 0028 -r prefix:( +r sigil:( r class:macro -s prefix:( +s sigil:( : 0030 r 0029 r Compiler @@ -1688,24 +1688,24 @@ r class:word s d:add-header : 0046 r 0045 -r prefix:# +r sigil:# r class:macro -s prefix:# +s sigil:# : 0047 r 0046 -r prefix:: +r sigil:: r class:macro -s prefix:: +s sigil:: : 0048 r 0047 -r prefix:& +r sigil:& r class:macro -s prefix:& +s sigil:& : 0049 r 0048 -r prefix:$ +r sigil:$ r class:macro -s prefix:$ +s sigil:$ : 0050 r 0049 r repeat @@ -1808,11 +1808,11 @@ s err:notfound | class:macro | p- | Class handler for immediate functions | | class:data | p- | Class handler for data | | d:add-header | saa- | Add an item to the dictionary | -| prefix:# | s- | # prefix for numbers | -| prefix:: | s- | : prefix for definitions | -| prefix:& | s- | & prefix for pointers | -| prefix:$ | s- | $ prefix for ASCII characters | -| prefix:( | s- | ( prefix for comments | +| sigil:# | s- | # sigil for numbers | +| sigil:: | s- | : sigil for definitions | +| sigil:& | s- | & sigil for pointers | +| sigil:$ | s- | $ sigil for ASCII characters | +| sigil:( | s- | ( sigil for comments | | repeat | -a | Start an unconditional loop | | again | a- | End an unconditional loop | | interpret | s-? | Evaluate a token | diff --git a/interface/decimal.retro b/interface/decimal.retro index 87c022a..834db01 100644 --- a/interface/decimal.retro +++ b/interface/decimal.retro @@ -59,10 +59,10 @@ to aid in structuring the floating point stack. ~~~ Then a word to allow creation of floating point values via a -`,` prefix. +`,` sigil. ~~~ -:prefix:, (s-__dec:-a) +:sigil:, (s-__dec:-a) compiling? &s:keep &s:temp choose &s:to-decimal class:word ; immediate ~~~ diff --git a/interface/floatingpoint.retro b/interface/floatingpoint.retro index 5d1d419..2adfb45 100644 --- a/interface/floatingpoint.retro +++ b/interface/floatingpoint.retro @@ -69,10 +69,10 @@ to aid in structuring the floating point stack. ~~~ Then a word to allow creation of floating point values via a -`.` prefix. +`.` sigil. ~~~ -:prefix:. (s-__f:-a) +:sigil:. (s-__f:-a) compiling? &s:keep &s:temp choose &s:to-float class:word ; immediate ~~~ diff --git a/ngaImage b/ngaImage index cd30bcf..66f8ab3 100644 Binary files a/ngaImage and b/ngaImage differ diff --git a/tools/book-chapters.retro b/tools/book-chapters.retro index 33973fb..4bc2b46 100755 --- a/tools/book-chapters.retro +++ b/tools/book-chapters.retro @@ -56,7 +56,7 @@ This contains the list of files for the chapters in the book. { 'Historical_Papers 'tech-notes/historical-papers } { 'Metacompiling 'tech-notes/metacompilation } { 'Self-Hosting 'tech-notes/self-hosting } - { 'Prefixes 'tech-notes/prefixes } + { 'Sigils 'tech-notes/prefixes } { 'Kernel_Words 'tech-notes/kernel-words } { 'Ngaro_to_Nga 'tech-notes/ngaro-to-nga } { 'RETRO11_Retrospective 'tech-notes/retro11-retrospective } diff --git a/vm/nga-c/retro-image.c b/vm/nga-c/retro-image.c index 3873780..1a60540 100644 --- a/vm/nga-c/retro-image.c +++ b/vm/nga-c/retro-image.c @@ -2,8 +2,8 @@ #ifndef CELL #define CELL int32_t #endif -CELL ngaImageCells = 14899; -CELL ngaImage[] = { 1793,14718,14856,14898,202104,0,10,1,10,2,10,3,10,4,10,5,10,6,10, +CELL ngaImageCells = 14890; +CELL ngaImage[] = { 1793,14709,14847,14889,202104,0,10,1,10,2,10,3,10,4,10,5,10,6,10, 7,10,8,10,9,10,10,11,10,12,10,13,10,14,10,15,10,16,10,17, 10,18,10,19,10,20,10,21,10,22,10,23,10,24,10,25,10,68223234,1,2575, 85000450,1,656912,141,140,268505089,63,62,285281281,0,63,2063,10,101384453,0,9,10,2049,56,25, @@ -12,48 +12,48 @@ CELL ngaImage[] = { 1793,14718,14856,14898,202104,0,10,1,10,2,10,3,10,4,10,5,10, 1793,114,2049,114,117506307,0,107,0,524545,25,112,168820993,0,126,1642241,126,134283523,7,112,1793, 107,7,524545,2049,107,1793,107,16846593,126,141,140,1793,64,16846593,126,112,140,1793,64,7, 10,659713,1,659713,2,659713,3,1793,168,17108737,3,2,524559,107,2049,107,2049,107,2049,121, - 168820998,2,13984,1025,167841793,181,5,17826049,0,181,2,15,25,524546,164,134287105,182,95,2305,183, + 168820998,2,13975,1025,167841793,181,5,17826049,0,181,2,15,25,524546,164,134287105,182,95,2305,183, 459023,191,134287361,182,186,659201,181,2049,56,25,84152833,48,286458116,10,459014,206,184618754,45,25,16974851, - -1,168886532,1,134284289,1,215,134284289,0,206,660227,32,0,0,112,114,101,102,105,120,58, - 105,0,285278479,232,7,2576,524546,81,1641217,1,167838467,229,2049,245,2049,241,524545,232,201,17826050, - 231,0,2572,2563,2049,222,1793,133,459023,133,17760513,146,3,166,8,251727617,3,2,2049,160, - 16,168820993,-1,126,2049,201,2049,160,459023,133,285282049,3,2,134287105,126,280,524545,1793,107,16846593, - 3,0,107,8,659201,3,524545,25,112,17043201,3,7,2049,112,2049,107,268505092,126,1642241,126, - 656131,659201,3,524545,7,112,2049,107,459009,19,112,459009,54,112,459009,15,112,459009,17,112, - 1793,5,10,524546,160,134284303,162,1807,1025,0,0,1642241,231,285282049,347,1,459012,342,117509889,181, - 342,134287105,347,201,16845825,0,357,339,1793,64,1793,371,17826050,347,251,8,117506305,348,360,64, - 2116,11340,11700,11400,13685,13104,12432,12402,9603,9801,11514,11413,11110,12528,11948,10302,13340,9700,13455,12753, - 10500,10670,12654,13320,11960,13908,10088,10605,11865,11025,0,2049,201,987393,1,1793,107,524546,447,2049, - 445,2049,445,17891588,2,447,8,17045505,-24,-16,17043736,-8,1118488,1793,107,17043202,1,169021201,2049,56, - 25,33883396,101450758,6404,459011,437,34668804,2,2049,434,524545,379,437,302056196,379,659969,1,0,9,152, - 100,117,112,0,456,11,152,100,114,111,112,0,463,13,152,115,119,97,112,0, - 471,21,152,99,97,108,108,0,479,26,152,101,113,63,0,487,28,152,45,101, - 113,63,0,494,30,152,108,116,63,0,502,32,152,103,116,63,0,509,34,152, - 102,101,116,99,104,0,516,36,152,115,116,111,114,101,0,525,38,152,43,0, - 534,40,152,45,0,539,42,152,42,0,544,44,152,47,109,111,100,0,549,46, - 152,97,110,100,0,557,48,152,111,114,0,564,50,152,120,111,114,0,570,52, - 152,115,104,105,102,116,0,577,333,158,112,117,115,104,0,586,336,158,112,111, - 112,0,594,330,158,48,59,0,601,56,146,102,101,116,99,104,45,110,101,120, - 116,0,607,59,146,115,116,111,114,101,45,110,101,120,116,0,621,222,146,115, - 58,116,111,45,110,117,109,98,101,114,0,635,95,146,115,58,101,113,63,0, - 650,81,146,115,58,108,101,110,103,116,104,0,659,64,146,99,104,111,111,115, - 101,0,671,74,152,105,102,0,681,72,146,45,105,102,0,687,262,158,112,114, - 101,102,105,120,58,40,0,694,126,133,67,111,109,112,105,108,101,114,0,706, - 3,133,72,101,97,112,0,718,107,146,44,0,726,121,146,115,44,0,731,127, - 158,59,0,737,289,158,91,0,742,305,158,93,0,747,2,133,68,105,99,116, - 105,111,110,97,114,121,0,752,159,146,100,58,108,105,110,107,0,766,160,146, - 100,58,120,116,0,776,162,146,100,58,99,108,97,115,115,0,784,164,146,100, - 58,110,97,109,101,0,795,146,146,99,108,97,115,115,58,119,111,114,100,0, - 805,158,146,99,108,97,115,115,58,109,97,99,114,111,0,819,133,146,99,108, - 97,115,115,58,100,97,116,97,0,834,166,146,100,58,97,100,100,45,104,101, - 97,100,101,114,0,848,263,158,112,114,101,102,105,120,58,35,0,864,269,158, - 112,114,101,102,105,120,58,58,0,876,283,158,112,114,101,102,105,120,58,38, - 0,888,267,158,112,114,101,102,105,120,58,36,0,900,320,158,114,101,112,101, - 97,116,0,912,322,158,97,103,97,105,110,0,922,369,146,105,110,116,101,114, - 112,114,101,116,0,931,201,146,100,58,108,111,111,107,117,112,0,944,152,146, - 99,108,97,115,115,58,112,114,105,109,105,116,105,118,101,0,956,4,133,86, - 101,114,115,105,111,110,0,975,416,146,105,0,986,107,146,100,0,991,410,146, - 114,0,996,339,146,101,114,114,58,110,111,116,102,111,117,110,100,0,0,0, + -1,168886532,1,134284289,1,215,134284289,0,206,660227,32,0,0,115,105,103,105,108,58,105, + 0,285278479,232,6,2576,524546,81,1641217,1,167838467,229,2049,244,2049,240,524545,232,201,17826050,231, + 0,2572,2563,2049,222,1793,133,459023,133,17760513,146,3,166,8,251727617,3,2,2049,160,16, + 168820993,-1,126,2049,201,2049,160,459023,133,285282049,3,2,134287105,126,279,524545,1793,107,16846593,3, + 0,107,8,659201,3,524545,25,112,17043201,3,7,2049,112,2049,107,268505092,126,1642241,126,656131, + 659201,3,524545,7,112,2049,107,459009,19,112,459009,54,112,459009,15,112,459009,17,112,1793, + 5,10,524546,160,134284303,162,1807,1025,0,0,1642241,231,285282049,346,1,459012,341,117509889,181,341, + 134287105,346,201,16845825,0,356,338,1793,64,1793,370,17826050,346,250,8,117506305,347,359,64,2116, + 11340,11700,11400,13685,13104,12432,12402,9603,9801,11514,11413,11110,12528,11948,10302,13340,9700,13455,12753,10500, + 10670,12654,13320,11960,13908,10088,10605,11865,11025,0,2049,201,987393,1,1793,107,524546,446,2049,444, + 2049,444,17891588,2,446,8,17045505,-24,-16,17043736,-8,1118488,1793,107,17043202,1,169021201,2049,56,25, + 33883396,101450758,6404,459011,436,34668804,2,2049,433,524545,378,436,302056196,378,659969,1,0,9,152,100, + 117,112,0,455,11,152,100,114,111,112,0,462,13,152,115,119,97,112,0,470, + 21,152,99,97,108,108,0,478,26,152,101,113,63,0,486,28,152,45,101,113, + 63,0,493,30,152,108,116,63,0,501,32,152,103,116,63,0,508,34,152,102, + 101,116,99,104,0,515,36,152,115,116,111,114,101,0,524,38,152,43,0,533, + 40,152,45,0,538,42,152,42,0,543,44,152,47,109,111,100,0,548,46,152, + 97,110,100,0,556,48,152,111,114,0,563,50,152,120,111,114,0,569,52,152, + 115,104,105,102,116,0,576,332,158,112,117,115,104,0,585,335,158,112,111,112, + 0,593,329,158,48,59,0,600,56,146,102,101,116,99,104,45,110,101,120,116, + 0,606,59,146,115,116,111,114,101,45,110,101,120,116,0,620,222,146,115,58, + 116,111,45,110,117,109,98,101,114,0,634,95,146,115,58,101,113,63,0,649, + 81,146,115,58,108,101,110,103,116,104,0,658,64,146,99,104,111,111,115,101, + 0,670,74,152,105,102,0,680,72,146,45,105,102,0,686,261,158,115,105,103, + 105,108,58,40,0,693,126,133,67,111,109,112,105,108,101,114,0,704,3,133, + 72,101,97,112,0,716,107,146,44,0,724,121,146,115,44,0,729,127,158,59, + 0,735,288,158,91,0,740,304,158,93,0,745,2,133,68,105,99,116,105,111, + 110,97,114,121,0,750,159,146,100,58,108,105,110,107,0,764,160,146,100,58, + 120,116,0,774,162,146,100,58,99,108,97,115,115,0,782,164,146,100,58,110, + 97,109,101,0,793,146,146,99,108,97,115,115,58,119,111,114,100,0,803,158, + 146,99,108,97,115,115,58,109,97,99,114,111,0,817,133,146,99,108,97,115, + 115,58,100,97,116,97,0,832,166,146,100,58,97,100,100,45,104,101,97,100, + 101,114,0,846,262,158,115,105,103,105,108,58,35,0,862,268,158,115,105,103, + 105,108,58,58,0,873,282,158,115,105,103,105,108,58,38,0,884,266,158,115, + 105,103,105,108,58,36,0,895,319,158,114,101,112,101,97,116,0,906,321,158, + 97,103,97,105,110,0,916,368,146,105,110,116,101,114,112,114,101,116,0,925, + 201,146,100,58,108,111,111,107,117,112,0,938,152,146,99,108,97,115,115,58, + 112,114,105,109,105,116,105,118,101,0,950,4,133,86,101,114,115,105,111,110, + 0,969,415,146,105,0,980,107,146,100,0,985,409,146,114,0,990,338,146,101, + 114,114,58,110,111,116,102,111,117,110,100,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,105,109,97,103,101,58,115,97,118,101,0,103,101,0, 65,68,77,69,46,114,101,116,114,111,0,0,110,0,78,68,0,125,126,0, 72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,0, @@ -79,7 +79,7 @@ CELL ngaImage[] = { 1793,14718,14856,14898,202104,0,10,1,10,2,10,3,10,4,10,5,10, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1001,1543,146, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,995,1543,146, 69,79,77,0,1,-3,15,10,1536,1556,146,100,101,112,116,104,0,1,-1,15, 10,1547,1570,146,100,58,108,97,115,116,0,1,2,15,10,1560,1587,146,100,58, 108,97,115,116,46,120,116,0,2049,1570,2049,160,15,10,1574,1609,146,100,58,108, @@ -94,657 +94,657 @@ CELL ngaImage[] = { 1793,14718,14856,14898,202104,0,10,1,10,2,10,3,10,4,10,5,10, 1774,146,99,111,109,112,105,108,101,58,99,97,108,108,0,1,2049,2049,107,2049, 107,10,1758,1796,146,99,111,109,112,105,108,101,58,114,101,116,0,1,10,2049, 107,10,1781,1815,146,99,111,109,112,105,108,105,110,103,63,0,1,126,15,10, - 1801,1831,158,112,114,101,102,105,120,58,96,0,2049,222,2049,107,10,1819,1848,158, - 112,114,101,102,105,120,58,92,0,2049,416,10,1836,1863,158,112,114,101,102,105, - 120,58,94,0,2049,410,10,1851,1874,146,104,101,114,101,0,1,3,15,10,1866, - 1890,158,112,114,101,102,105,120,58,64,0,2049,201,2049,160,15,2049,1815,1793,1906, - 1,3841,2049,107,2049,107,10,1,1899,1793,1912,15,10,1,1910,2049,64,10,1878,1929, - 158,112,114,101,102,105,120,58,33,0,2049,201,2049,160,15,2049,1815,1793,1945,1, - 4097,2049,107,2049,107,10,1,1938,1793,1951,16,10,1,1949,2049,64,10,1917,1968,146, - 100,58,99,114,101,97,116,101,0,1,133,1,0,2049,166,2049,1874,2049,1570,2049, - 160,16,10,1956,1991,146,118,97,114,45,110,0,2049,1968,2049,107,10,1982,2003,146, - 118,97,114,0,134284289,0,1991,10,1996,2016,146,99,111,110,115,116,0,2049,1968,2049, - 1570,2049,160,16,10,2007,2032,152,116,117,99,107,0,100926722,10,2024,2042,152,111,118, - 101,114,0,67502597,10,2034,2051,152,110,105,112,0,772,10,2044,2066,152,100,114,111, - 112,45,112,97,105,114,0,771,10,2053,2076,152,63,100,117,112,0,6402,10,2068, - 2090,146,100,117,112,45,112,97,105,114,0,67502597,67502597,10,2078,2100,146,100,105,112, - 0,525572,6,10,2093,2110,146,115,105,112,0,67502597,1,21,2049,2100,10,2103,2122,146, - 98,105,0,1,2110,2049,2100,8,10,2116,2135,146,98,105,42,0,1,2100,2049,2100, - 8,10,2128,2148,146,98,105,64,0,2,2049,2135,10,2141,2159,146,116,114,105,0, - 1793,2168,1,2110,2049,2100,2049,2110,10,1,2161,2049,2100,8,10,2152,2182,146,116,114, - 105,42,0,1793,2199,1793,2192,4,1,2100,2049,2100,10,1,2186,2049,2100,2049,2100,10, - 1,2184,2049,2100,8,10,2174,2213,146,116,114,105,64,0,2,2,2049,2182,10,2205, - 2227,146,119,104,105,108,101,0,1793,2236,525570,1639430,3,1,2229,7,10,1,2229,8, - 3,10,2218,2250,146,117,110,116,105,108,0,1793,2261,525570,385942534,-1,25,3,1,2252, - 7,10,1,2252,8,3,10,2241,2275,146,116,105,109,101,115,0,1793,2287,4,25, - 33886721,1,2053,1542,1,2278,7,10,1,2277,8,3,10,2266,2304,158,112,114,101,102, - 105,120,58,124,0,2049,201,1793,2312,2049,160,15,10,1,2308,1793,2320,2049,162,15, - 10,1,2316,2049,2122,2049,1815,1793,2335,1,133,2049,2100,2049,1774,10,1,2328,1,21, - 2049,64,10,2292,2350,146,84,82,85,69,0,1,-1,10,2342,2362,146,70,65,76, - 83,69,0,1,0,10,2353,2373,146,99,97,115,101,0,1793,2378,67502597,11,10,1, - 2375,2049,2100,4,1793,2390,772,8,2049,2350,10,1,2385,1793,2398,3,2049,2362,10,1, - 2394,2049,64,25,6,3,3,10,2365,2417,146,115,58,99,97,115,101,0,1793,2423, - 67502597,2049,95,10,1,2419,2049,2100,4,1793,2435,772,8,2049,2350,10,1,2430,1793,2443, - 3,2049,2362,10,1,2439,2049,64,25,6,3,3,10,2407,2459,146,110,111,116,0, - 1,-1,23,10,2452,2472,146,108,116,101,113,63,0,2049,2090,101516555,22,10,2463,2486, - 146,103,116,101,113,63,0,4,2049,2472,10,2477,2499,146,110,58,77,65,88,0, - 1,-5,15,10,2490,2512,146,110,58,77,73,78,0,1,-4,15,10,2503,2527,146, - 110,58,122,101,114,111,63,0,1,0,11,10,2516,2543,146,110,58,45,122,101, - 114,111,63,0,1,0,12,10,2531,2562,146,110,58,110,101,103,97,116,105,118, - 101,63,0,1,0,13,10,2547,2581,146,110,58,112,111,115,105,116,105,118,101, - 63,0,1,-1,14,10,2566,2609,146,110,58,115,116,114,105,99,116,108,121,45, - 112,111,115,105,116,105,118,101,63,0,1,0,14,10,2585,2624,146,110,58,101, - 118,101,110,63,0,1,2,20,3,2049,2527,10,2613,2641,146,110,58,111,100,100, - 63,0,2049,2624,2049,2459,10,2631,2653,146,105,102,59,0,67502597,1,74,2049,2100,25, - 6,771,10,2646,2670,146,45,105,102,59,0,67502597,1,72,2049,2100,2049,2459,25,6, - 771,10,2662,2688,152,114,111,116,0,67503109,10,2681,2695,152,47,0,197652,10,2690,2704, - 152,109,111,100,0,788,10,2697,2715,146,110,58,112,111,119,0,1,1,4,1793, - 2723,67502597,19,10,1,2720,2049,2275,772,10,2706,2741,146,110,58,110,101,103,97,116, - 101,0,1,-1,19,10,2729,2757,146,110,58,115,113,117,97,114,101,0,4866,10, - 2745,2769,146,110,58,115,113,114,116,0,1,1,1793,2787,2049,2090,197652,67502597,18,1, - 2,197652,25,17,1,2773,7,10,1,2773,8,772,10,2759,2801,146,110,58,109,105, - 110,0,2049,2090,13,1793,2808,3,10,1,2806,1793,2814,772,10,1,2812,2049,64,10, - 2792,2828,146,110,58,109,97,120,0,2049,2090,14,1793,2835,3,10,1,2833,1793,2841, - 772,10,1,2839,2049,64,10,2819,2855,146,110,58,97,98,115,0,2,2049,2562,1, - 2741,9,10,2846,2873,146,110,58,108,105,109,105,116,0,4,5,2049,2801,6,2049, - 2828,10,2862,2890,146,110,58,105,110,99,0,1,1,17,10,2881,2903,146,110,58, - 100,101,99,0,1,1,18,10,2894,2921,146,110,58,98,101,116,119,101,101,110, - 63,0,67503109,1793,2929,67503109,67503109,2049,2873,10,1,2924,2049,2110,11,10,2907,2947,146,118, - 58,105,110,99,45,98,121,0,1793,2951,4367,10,1,2949,2049,2110,16,10,2935,2969, - 146,118,58,100,101,99,45,98,121,0,1793,2973,1180687,10,1,2971,2049,2110,16,10, - 2957,2988,146,118,58,105,110,99,0,1,1,4,2049,2947,10,2979,3003,146,118,58, - 100,101,99,0,1,1,4,2049,2969,10,2994,3020,146,118,58,108,105,109,105,116, - 0,251790597,1542,2049,2873,4100,10,3009,3034,146,118,58,111,110,0,2049,2350,4100,10,3026, - 3047,146,118,58,111,102,102,0,2049,2362,4100,10,3038,3060,146,97,108,108,111,116, - 0,1,3,2049,2947,10,3051,3079,146,118,58,112,114,101,115,101,114,118,101,0, - 983556,1793,3087,1,21,2049,2100,10,1,3082,2049,2100,4100,10,3065,3105,146,118,58,117, - 112,100,97,116,101,0,4,1793,3112,15,4,8,10,1,3108,2049,2110,16,10,3093, - 3126,146,99,111,112,121,0,1793,3135,285278725,1,33951492,268767489,1,6,10,1,3128,2049,2275, - 771,10,3118,3154,146,83,99,111,112,101,76,105,115,116,0,14762,14814,10,3141,3163, - 146,123,123,0,2049,1570,2,1,3154,2049,59,16,10,3157,3188,146,45,45,45,114, - 101,118,101,97,108,45,45,45,0,2049,1570,1,3154,2049,2890,16,10,3172,3202,146, - 125,125,0,1,3154,2049,56,4,15,11,1793,3216,3841,3154,4097,2,10,1,3211,1793, - 3242,3841,3154,1793,3237,1,2,983567,1,3154,2049,2890,1641487,3,1,3226,7,10,1,3224, - 8,16,10,1,3220,2049,64,10,3196,3256,133,115,116,97,114,116,0,0,10,3247, - 3265,133,101,110,100,0,0,10,3258,3280,146,116,101,114,109,105,110,97,116,101, - 0,1,0,3841,3265,16,10,3196,3302,146,98,117,102,102,101,114,58,115,116,97, - 114,116,0,3841,3256,10,3286,3319,146,98,117,102,102,101,114,58,101,110,100,0, - 3841,3265,10,3305,3336,146,98,117,102,102,101,114,58,97,100,100,0,3841,3265,16, - 1,3265,2049,2988,2049,3280,10,3322,3360,146,98,117,102,102,101,114,58,103,101,116, - 0,1,3265,2049,3003,3841,3265,15,2049,3280,10,3346,3386,146,98,117,102,102,101,114, - 58,101,109,112,116,121,0,3841,3256,4097,3265,2049,3280,10,3370,3408,146,98,117,102, - 102,101,114,58,115,105,122,101,0,3841,3265,3841,3256,18,10,3393,3428,146,98,117, - 102,102,101,114,58,115,101,116,0,4097,3256,2049,3386,10,3414,3452,146,98,117,102, - 102,101,114,58,112,114,101,115,101,114,118,101,0,3841,3256,3841,3265,1793,3465,1, - 21,2049,2100,4097,3256,10,1,3458,2049,2100,4097,3265,10,3433,3487,133,84,101,109,112, - 83,116,114,105,110,103,115,0,32,3472,3505,133,84,101,109,112,83,116,114,105, - 110,103,77,97,120,0,512,3488,3517,146,83,84,82,73,78,71,83,0,2049,1543, - 3841,3487,3841,3505,19,18,10,3506,3537,133,67,117,114,114,101,110,116,0,12,10, - 3526,3552,146,115,58,112,111,105,110,116,101,114,0,3841,3537,3841,3505,19,2049,3517, - 17,10,3539,3571,146,115,58,110,101,120,116,0,1,3537,2049,2988,3841,3537,3841,3487, - 11,1793,3587,1,0,4097,3537,10,1,3582,9,10,3506,3601,146,115,58,116,101,109, - 112,0,2,2049,81,2049,2890,2049,3552,4,2049,3126,2049,3552,2049,3571,10,3591,3627,146, - 115,58,101,109,112,116,121,0,2049,3552,2049,3571,1,0,67502597,16,10,3616,3646,146, - 115,58,115,107,105,112,0,6,1793,3654,68223234,1,786703,0,10,1,3649,2049,2227,2049, - 2903,5,10,3636,3672,146,115,58,107,101,101,112,0,2049,1815,1793,3681,1,3646,2049, - 1774,10,1,3676,9,2049,1874,1,121,2049,2100,2049,133,10,3662,3705,158,112,114,101, - 102,105,120,58,39,0,2049,1815,1,3672,1,3601,2049,64,10,3693,3724,146,115,58, - 99,104,111,112,0,2049,3601,2,2049,81,67502597,17,2049,2903,1,0,4,16,10,3714, - 3751,146,115,58,114,101,118,101,114,115,101,0,1793,3793,2,2049,3601,2049,3428,1, - 81,1793,3769,2,2049,81,17,2049,2903,10,1,3762,2049,2122,4,1793,3783,2,15,2049, - 3336,2049,2903,10,1,3776,2049,2275,3,2049,3302,2049,3601,10,1,3753,2049,3452,10,3738, - 3811,146,115,58,112,114,101,112,101,110,100,0,2049,3601,1793,3835,2,2049,81,17, - 1793,3827,2,2049,81,2049,2890,10,1,3821,2049,2100,4,2049,3126,10,1,3815,2049,2110, - 10,3798,3852,146,115,58,97,112,112,101,110,100,0,4,2049,3811,10,3840,3870,146, - 115,58,102,111,114,45,101,97,99,104,0,1793,3885,67502597,6415,3,67502597,67502597,251987205,2054, - 101777670,1,1,3872,7,10,1,3872,8,771,10,3856,3904,146,115,58,105,110,100,101, - 120,45,111,102,0,4,1793,3918,68223234,1,6415,33883396,101450758,6404,3,1,3907,7,10,1, - 3907,1793,3927,18,2049,2903,772,10,1,3922,1793,3936,2049,81,67502597,11,10,1,3931,2049, - 2159,1793,3946,3,1,-1,10,1,3942,9,10,3890,3970,146,115,58,99,111,110,116, - 97,105,110,115,45,99,104,97,114,63,0,2049,3904,1,-1,12,10,3950,3986,146, - 115,58,104,97,115,104,0,1,5381,4,1793,3994,286458116,33,10,1,3991,2049,3870,10, - 3976,4006,133,83,114,99,0,0,3999,4014,133,84,97,114,0,0,4007,4022,133,80, - 97,100,0,0,4015,4028,133,73,0,0,4023,4034,133,70,0,0,4029,4041,133,65, - 116,0,0,4035,4055,146,116,101,114,109,105,110,97,116,101,0,1,0,3841,4022, - 3841,4014,2049,81,17,16,10,4042,4077,146,101,120,116,114,97,99,116,0,3841,4006, - 3841,4028,17,3841,4022,3841,4014,2049,81,2049,3126,10,4066,4102,146,99,111,109,112,97, - 114,101,0,3841,4022,3841,4014,2049,95,3841,4034,22,4097,4034,3841,4034,1793,4122,3841,4028, - 4097,4041,10,1,4117,2049,72,10,4091,4135,146,110,101,120,116,0,1,4028,2049,2988, - 10,3976,4162,146,115,58,99,111,110,116,97,105,110,115,45,115,116,114,105,110, - 103,63,0,4097,4014,4097,4006,2049,3627,4097,4022,1,0,4097,4028,1,0,4097,4034,3841, - 4006,2049,81,1793,4193,2049,4077,2049,4055,2049,4102,2049,4135,10,1,4184,2049,2275,3841,4034, - 10,4140,4207,133,83,116,114,0,0,4200,4219,146,101,120,116,114,97,99,116,0, - 2049,2090,3841,4207,4,2049,3126,3841,-1,67502597,17,1,0,4,16,10,4208,4244,146,99, - 104,101,99,107,0,1,4219,2049,2100,1793,4255,1,2890,2049,2100,10,1,4250,2049,2100, - 3841,4207,2049,3986,67502597,11,10,4235,4278,146,108,111,99,97,116,105,111,110,0,67503109, - 67503109,1793,4311,1793,4306,4,1793,4292,67502597,2049,2527,21,10,1,4287,2049,2100,4,1793,4302, - 772,2,10,1,4299,9,10,1,4284,2049,2100,10,1,4282,2049,2100,10,4266,4325,146, - 115,101,116,117,112,0,2049,3627,4097,4207,1,0,67503109,67503109,1,81,1,3986,2049,2122, - 2049,3627,2049,3428,1793,4349,67502597,2049,81,10,1,4345,2049,2100,4,10,4140,4376,146,115, - 58,105,110,100,101,120,45,111,102,45,115,116,114,105,110,103,0,67502597,1793,4402, - 1793,4395,2049,4325,1793,4390,2049,4244,2049,4278,10,1,4385,2049,2275,10,1,4381,2049,3452, - 771,3,10,1,4379,2049,2100,18,1,2,18,1,-1,2049,2828,10,4355,4427,146,115, - 58,102,105,108,116,101,114,0,1793,4455,2049,3627,2049,3428,4,1793,4447,2049,2090,4, - 8,1,3336,1,11,2049,64,10,1,4436,2049,3870,3,2049,3302,10,1,4429,2049,3452, - 10,4415,4469,146,115,58,109,97,112,0,1793,4491,2049,3627,2049,3428,4,1793,4483,67502597, - 8,2049,3336,10,1,4478,2049,3870,3,2049,3302,10,1,4471,2049,3452,10,4460,4508,146, - 115,58,115,117,98,115,116,114,0,1793,4514,17,2049,3627,10,1,4510,2049,2100,1793, - 4526,67502597,1,3126,2049,2100,10,1,4520,2049,2110,67502597,1793,4539,17,1,0,4,16,10, - 1,4533,2049,2100,10,4496,4555,146,115,58,114,105,103,104,116,0,67502597,2049,81,67502597, - 18,4,2049,4508,10,4544,4574,146,115,58,108,101,102,116,0,1,0,4,2049,4508, - 10,4564,4598,146,115,58,98,101,103,105,110,115,45,119,105,116,104,63,0,2, - 2049,81,1,13,2049,2100,2049,4574,2049,95,10,4580,4626,146,115,58,101,110,100,115, - 45,119,105,116,104,63,0,2,2049,81,1,13,2049,2100,2049,4555,2049,95,10,4610, - 4648,146,115,58,99,111,112,121,0,67502597,2049,81,2049,2890,2049,3126,10,4638,4668,146, - 115,58,68,73,71,73,84,83,0,2049,3646,48,49,50,51,52,53,54,55,56, - 57,0,1,4670,10,4656,4705,146,115,58,65,83,67,73,73,45,76,79,87,69, - 82,67,65,83,69,0,2049,3646,97,98,99,100,101,102,103,104,105,106,107,108, - 109,110,111,112,113,114,115,116,117,118,119,120,121,122,0,1,4707,10,4684,4758, - 146,115,58,65,83,67,73,73,45,85,80,80,69,82,67,65,83,69,0,2049, - 3646,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83, - 84,85,86,87,88,89,90,0,1,4760,10,4737,4809,146,115,58,65,83,67,73, - 73,45,76,69,84,84,69,82,83,0,2049,3646,97,98,99,100,101,102,103,104, - 105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,65,66, - 67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86, - 87,88,89,90,0,1,4811,10,4790,4884,146,115,58,80,85,78,67,84,85,65, - 84,73,79,78,0,2049,3646,95,33,34,35,36,37,38,39,40,41,42,43,44, - 45,46,47,58,59,60,61,62,63,64,91,92,93,94,96,123,124,125,126,0, - 1,4886,1,95,67502597,16,10,4867,4942,133,115,58,87,72,73,84,69,83,80,65, - 67,69,0,32,9,10,13,0,4926,4952,158,39,0,1,3627,2049,146,10,4947,4962, - 158,36,0,1,0,2049,133,10,4957,0,133,65,83,67,73,73,58,78,85,76, - 0,4967,27,133,65,83,67,73,73,58,69,83,67,0,4980,8,133,65,83,67, - 73,73,58,66,83,0,4993,9,133,65,83,67,73,73,58,72,84,0,5005,10, - 133,65,83,67,73,73,58,76,70,0,5017,11,133,65,83,67,73,73,58,86, - 84,0,5029,12,133,65,83,67,73,73,58,70,70,0,5041,13,133,65,83,67, - 73,73,58,67,82,0,5053,32,133,65,83,67,73,73,58,83,80,65,67,69, - 0,5065,127,133,65,83,67,73,73,58,68,69,76,0,5080,1,133,65,83,67, - 73,73,58,83,79,72,0,5093,2,133,65,83,67,73,73,58,83,84,88,0, - 5106,3,133,65,83,67,73,73,58,69,84,88,0,5119,4,133,65,83,67,73, - 73,58,69,79,84,0,5132,5,133,65,83,67,73,73,58,69,78,81,0,5145, - 6,133,65,83,67,73,73,58,65,67,75,0,5158,7,133,65,83,67,73,73, - 58,66,69,76,0,5171,14,133,65,83,67,73,73,58,83,79,0,5184,15,133, - 65,83,67,73,73,58,83,73,0,5196,16,133,65,83,67,73,73,58,68,76, - 69,0,5208,17,133,65,83,67,73,73,58,68,67,49,0,5221,18,133,65,83, - 67,73,73,58,68,67,50,0,5234,19,133,65,83,67,73,73,58,68,67,51, - 0,5247,20,133,65,83,67,73,73,58,68,67,52,0,5260,21,133,65,83,67, - 73,73,58,78,65,75,0,5273,22,133,65,83,67,73,73,58,83,89,78,0, - 5286,23,133,65,83,67,73,73,58,69,84,66,0,5299,24,133,65,83,67,73, - 73,58,67,65,78,0,5312,25,133,65,83,67,73,73,58,69,77,0,5325,26, - 133,65,83,67,73,73,58,83,85,66,0,5337,28,133,65,83,67,73,73,58, - 70,83,0,5350,29,133,65,83,67,73,73,58,71,83,0,5362,30,133,65,83, - 67,73,73,58,82,83,0,5374,31,133,65,83,67,73,73,58,85,83,0,5386, - 5414,146,99,58,108,111,119,101,114,99,97,115,101,63,0,1,97,1,122,2049, - 2921,10,5398,5437,146,99,58,117,112,112,101,114,99,97,115,101,63,0,1,65, - 1,90,2049,2921,10,5421,5457,146,99,58,108,101,116,116,101,114,63,0,1,5414, - 1,5437,2049,2122,22,10,5444,5477,146,99,58,100,105,103,105,116,63,0,1,48, - 1,57,2049,2921,10,5465,5498,146,99,58,118,105,115,105,98,108,101,63,0,1, - 32,1,126,2049,2921,10,5484,5517,146,99,58,118,111,119,101,108,63,0,2049,3646, - 97,101,105,111,117,65,69,73,79,85,0,1,5519,4,2049,3970,10,5505,5552,146, - 99,58,99,111,110,115,111,110,97,110,116,63,0,2,2049,5457,1793,5562,2049,5517, - 2049,2459,10,1,5557,1793,5570,3,2049,2362,10,1,5566,2049,64,10,5536,5592,146,99, - 58,119,104,105,116,101,115,112,97,99,101,63,0,1,4942,4,2049,3970,10,5575, - 5615,146,99,58,45,108,111,119,101,114,99,97,115,101,63,0,2049,5414,2049,2459, - 10,5598,5637,146,99,58,45,117,112,112,101,114,99,97,115,101,63,0,2049,5437, - 2049,2459,10,5620,5655,146,99,58,45,100,105,103,105,116,63,0,2049,5477,2049,2459, - 10,5642,5678,146,99,58,45,119,104,105,116,101,115,112,97,99,101,63,0,2049, - 5592,2049,2459,10,5660,5698,146,99,58,45,118,105,115,105,98,108,101,63,0,2049, - 5498,2049,2459,10,5683,5716,146,99,58,45,118,111,119,101,108,63,0,2049,5517,2049, - 2459,10,5703,5738,146,99,58,45,99,111,110,115,111,110,97,110,116,63,0,2049, - 5552,2049,2459,10,5721,5757,146,99,58,116,111,45,117,112,112,101,114,0,2,2049, - 5414,25,3,1,32,18,10,5743,5780,146,99,58,116,111,45,108,111,119,101,114, - 0,2,2049,5437,25,3,1,32,17,10,5766,5804,146,99,58,116,111,45,115,116, - 114,105,110,103,0,2049,3646,46,0,1,5806,2049,3601,1,36,2049,2110,10,5789,5834, - 146,99,58,116,111,103,103,108,101,45,99,97,115,101,0,2,2049,5414,1,5757, - 1,5780,2049,64,10,5817,5859,146,99,58,116,111,45,110,117,109,98,101,114,0, - 2,2049,5477,1793,5868,1,48,18,10,1,5864,1793,5876,3,1,0,10,1,5872,2049, - 64,10,5844,5895,146,115,58,116,111,45,117,112,112,101,114,0,1,5757,2049,4469, - 10,5881,5914,146,115,58,116,111,45,108,111,119,101,114,0,1,5780,2049,4469,10, - 5900,5934,146,115,58,116,114,105,109,45,108,101,102,116,0,2049,3601,1793,5948,2049, - 56,1,5592,1,2543,2049,2122,21,10,1,5938,2049,2227,2049,2903,10,5919,5971,146,115, - 58,116,114,105,109,45,114,105,103,104,116,0,2049,3601,2049,3751,2049,5934,2049,3751, - 10,5955,5990,146,115,58,116,114,105,109,0,2049,5971,2049,5934,10,5980,6006,146,99, - 111,114,114,101,99,116,0,2,1,48,13,1793,6021,1,48,67502597,18,1,2,19, - 17,10,1,6012,9,10,5980,6040,146,110,58,116,111,45,115,116,114,105,110,103, - 0,1793,6088,2049,1874,2049,3428,2,2049,2855,1793,6066,1,10,20,4,1,48,17,2049, - 6006,2049,3336,2,2049,2543,10,1,6051,2049,2227,3,2049,2562,1793,6080,1,45,2049,3336, - 10,1,6075,9,2049,3302,2049,3751,10,1,6042,2049,3452,10,6025,6115,133,82,101,119, - 114,105,116,101,85,110,100,101,114,115,99,111,114,101,115,0,-1,6093,6123,146, - 115,117,98,0,1,95,1793,6130,1,32,10,1,6127,2049,2373,10,6116,6146,146,114, - 101,119,114,105,116,101,0,3841,6115,1793,6155,1,6123,2049,4469,10,1,6150,9,10, - 6135,6169,146,104,97,110,100,108,101,0,1,3705,8,10,6093,6185,158,112,114,101, - 102,105,120,58,39,0,2049,6146,2049,6169,10,6173,6201,146,115,58,115,112,108,105, - 116,0,2049,2090,2049,3904,772,2049,2090,2049,4574,1,38,2049,2100,10,6190,6236,146,115, - 58,115,112,108,105,116,45,111,110,45,115,116,114,105,110,103,0,2049,2090,2049, - 4376,2049,2890,772,2049,2090,2049,4574,1,38,2049,2100,10,6215,6265,146,115,58,114,101, - 112,108,97,99,101,0,67502597,2049,81,2049,1874,16,1793,6281,2049,6236,4,2049,1874,15, - 17,10,1,6273,2049,2100,2049,3811,2049,3852,10,6252,6302,133,83,112,108,105,116,45, - 79,110,0,0,6290,6313,146,109,97,116,99,104,63,0,3841,6302,11,10,6303,6330, - 146,116,101,114,109,105,110,97,116,101,0,1,0,67502597,2049,2903,16,10,6317,6345, - 146,115,116,101,112,0,1,2890,2049,2100,2049,6313,1793,6359,2,2049,107,2049,6330,10, - 1,6353,9,10,6252,6377,146,115,58,116,111,107,101,110,105,122,101,0,4097,6302, - 2049,3672,2049,1874,1,0,2049,107,1793,6399,2,2049,107,2,1,6345,2049,3870,3,10, - 1,6389,2049,2100,2049,1874,67502597,18,2049,2903,67502597,16,10,6363,6422,133,78,101,101,100, - 108,101,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 1801,1830,158,115,105,103,105,108,58,96,0,2049,222,2049,107,10,1819,1846,158,115, + 105,103,105,108,58,92,0,2049,415,10,1835,1860,158,115,105,103,105,108,58,94, + 0,2049,409,10,1849,1871,146,104,101,114,101,0,1,3,15,10,1863,1886,158,115, + 105,103,105,108,58,64,0,2049,201,2049,160,15,2049,1815,1793,1902,1,3841,2049,107, + 2049,107,10,1,1895,1793,1908,15,10,1,1906,2049,64,10,1875,1924,158,115,105,103, + 105,108,58,33,0,2049,201,2049,160,15,2049,1815,1793,1940,1,4097,2049,107,2049,107, + 10,1,1933,1793,1946,16,10,1,1944,2049,64,10,1913,1963,146,100,58,99,114,101, + 97,116,101,0,1,133,1,0,2049,166,2049,1871,2049,1570,2049,160,16,10,1951,1986, + 146,118,97,114,45,110,0,2049,1963,2049,107,10,1977,1998,146,118,97,114,0,134284289, + 0,1986,10,1991,2011,146,99,111,110,115,116,0,2049,1963,2049,1570,2049,160,16,10, + 2002,2027,152,116,117,99,107,0,100926722,10,2019,2037,152,111,118,101,114,0,67502597,10, + 2029,2046,152,110,105,112,0,772,10,2039,2061,152,100,114,111,112,45,112,97,105, + 114,0,771,10,2048,2071,152,63,100,117,112,0,6402,10,2063,2085,146,100,117,112, + 45,112,97,105,114,0,67502597,67502597,10,2073,2095,146,100,105,112,0,525572,6,10,2088, + 2105,146,115,105,112,0,67502597,1,21,2049,2095,10,2098,2117,146,98,105,0,1,2105, + 2049,2095,8,10,2111,2130,146,98,105,42,0,1,2095,2049,2095,8,10,2123,2143,146, + 98,105,64,0,2,2049,2130,10,2136,2154,146,116,114,105,0,1793,2163,1,2105,2049, + 2095,2049,2105,10,1,2156,2049,2095,8,10,2147,2177,146,116,114,105,42,0,1793,2194, + 1793,2187,4,1,2095,2049,2095,10,1,2181,2049,2095,2049,2095,10,1,2179,2049,2095,8, + 10,2169,2208,146,116,114,105,64,0,2,2,2049,2177,10,2200,2222,146,119,104,105, + 108,101,0,1793,2231,525570,1639430,3,1,2224,7,10,1,2224,8,3,10,2213,2245,146, + 117,110,116,105,108,0,1793,2256,525570,385942534,-1,25,3,1,2247,7,10,1,2247,8, + 3,10,2236,2270,146,116,105,109,101,115,0,1793,2282,4,25,33886721,1,2053,1542,1, + 2273,7,10,1,2272,8,3,10,2261,2298,158,115,105,103,105,108,58,124,0,2049, + 201,1793,2306,2049,160,15,10,1,2302,1793,2314,2049,162,15,10,1,2310,2049,2117,2049, + 1815,1793,2329,1,133,2049,2095,2049,1774,10,1,2322,1,21,2049,64,10,2287,2344,146, + 84,82,85,69,0,1,-1,10,2336,2356,146,70,65,76,83,69,0,1,0,10, + 2347,2367,146,99,97,115,101,0,1793,2372,67502597,11,10,1,2369,2049,2095,4,1793,2384, + 772,8,2049,2344,10,1,2379,1793,2392,3,2049,2356,10,1,2388,2049,64,25,6,3, + 3,10,2359,2411,146,115,58,99,97,115,101,0,1793,2417,67502597,2049,95,10,1,2413, + 2049,2095,4,1793,2429,772,8,2049,2344,10,1,2424,1793,2437,3,2049,2356,10,1,2433, + 2049,64,25,6,3,3,10,2401,2453,146,110,111,116,0,1,-1,23,10,2446,2466, + 146,108,116,101,113,63,0,2049,2085,101516555,22,10,2457,2480,146,103,116,101,113,63, + 0,4,2049,2466,10,2471,2493,146,110,58,77,65,88,0,1,-5,15,10,2484,2506, + 146,110,58,77,73,78,0,1,-4,15,10,2497,2521,146,110,58,122,101,114,111, + 63,0,1,0,11,10,2510,2537,146,110,58,45,122,101,114,111,63,0,1,0, + 12,10,2525,2556,146,110,58,110,101,103,97,116,105,118,101,63,0,1,0,13, + 10,2541,2575,146,110,58,112,111,115,105,116,105,118,101,63,0,1,-1,14,10, + 2560,2603,146,110,58,115,116,114,105,99,116,108,121,45,112,111,115,105,116,105, + 118,101,63,0,1,0,14,10,2579,2618,146,110,58,101,118,101,110,63,0,1, + 2,20,3,2049,2521,10,2607,2635,146,110,58,111,100,100,63,0,2049,2618,2049,2453, + 10,2625,2647,146,105,102,59,0,67502597,1,74,2049,2095,25,6,771,10,2640,2664,146, + 45,105,102,59,0,67502597,1,72,2049,2095,2049,2453,25,6,771,10,2656,2682,152,114, + 111,116,0,67503109,10,2675,2689,152,47,0,197652,10,2684,2698,152,109,111,100,0,788, + 10,2691,2709,146,110,58,112,111,119,0,1,1,4,1793,2717,67502597,19,10,1,2714, + 2049,2270,772,10,2700,2735,146,110,58,110,101,103,97,116,101,0,1,-1,19,10, + 2723,2751,146,110,58,115,113,117,97,114,101,0,4866,10,2739,2763,146,110,58,115, + 113,114,116,0,1,1,1793,2781,2049,2085,197652,67502597,18,1,2,197652,25,17,1,2767, + 7,10,1,2767,8,772,10,2753,2795,146,110,58,109,105,110,0,2049,2085,13,1793, + 2802,3,10,1,2800,1793,2808,772,10,1,2806,2049,64,10,2786,2822,146,110,58,109, + 97,120,0,2049,2085,14,1793,2829,3,10,1,2827,1793,2835,772,10,1,2833,2049,64, + 10,2813,2849,146,110,58,97,98,115,0,2,2049,2556,1,2735,9,10,2840,2867,146, + 110,58,108,105,109,105,116,0,4,5,2049,2795,6,2049,2822,10,2856,2884,146,110, + 58,105,110,99,0,1,1,17,10,2875,2897,146,110,58,100,101,99,0,1,1, + 18,10,2888,2915,146,110,58,98,101,116,119,101,101,110,63,0,67503109,1793,2923,67503109, + 67503109,2049,2867,10,1,2918,2049,2105,11,10,2901,2941,146,118,58,105,110,99,45,98, + 121,0,1793,2945,4367,10,1,2943,2049,2105,16,10,2929,2963,146,118,58,100,101,99, + 45,98,121,0,1793,2967,1180687,10,1,2965,2049,2105,16,10,2951,2982,146,118,58,105, + 110,99,0,1,1,4,2049,2941,10,2973,2997,146,118,58,100,101,99,0,1,1, + 4,2049,2963,10,2988,3014,146,118,58,108,105,109,105,116,0,251790597,1542,2049,2867,4100, + 10,3003,3028,146,118,58,111,110,0,2049,2344,4100,10,3020,3041,146,118,58,111,102, + 102,0,2049,2356,4100,10,3032,3054,146,97,108,108,111,116,0,1,3,2049,2941,10, + 3045,3073,146,118,58,112,114,101,115,101,114,118,101,0,983556,1793,3081,1,21,2049, + 2095,10,1,3076,2049,2095,4100,10,3059,3099,146,118,58,117,112,100,97,116,101,0, + 4,1793,3106,15,4,8,10,1,3102,2049,2105,16,10,3087,3120,146,99,111,112,121, + 0,1793,3129,285278725,1,33951492,268767489,1,6,10,1,3122,2049,2270,771,10,3112,3148,146,83, + 99,111,112,101,76,105,115,116,0,14753,14805,10,3135,3157,146,123,123,0,2049,1570, + 2,1,3148,2049,59,16,10,3151,3182,146,45,45,45,114,101,118,101,97,108,45, + 45,45,0,2049,1570,1,3148,2049,2884,16,10,3166,3196,146,125,125,0,1,3148,2049, + 56,4,15,11,1793,3210,3841,3148,4097,2,10,1,3205,1793,3236,3841,3148,1793,3231,1, + 2,983567,1,3148,2049,2884,1641487,3,1,3220,7,10,1,3218,8,16,10,1,3214,2049, + 64,10,3190,3250,133,115,116,97,114,116,0,0,10,3241,3259,133,101,110,100,0, + 0,10,3252,3274,146,116,101,114,109,105,110,97,116,101,0,1,0,3841,3259,16, + 10,3190,3296,146,98,117,102,102,101,114,58,115,116,97,114,116,0,3841,3250,10, + 3280,3313,146,98,117,102,102,101,114,58,101,110,100,0,3841,3259,10,3299,3330,146, + 98,117,102,102,101,114,58,97,100,100,0,3841,3259,16,1,3259,2049,2982,2049,3274, + 10,3316,3354,146,98,117,102,102,101,114,58,103,101,116,0,1,3259,2049,2997,3841, + 3259,15,2049,3274,10,3340,3380,146,98,117,102,102,101,114,58,101,109,112,116,121, + 0,3841,3250,4097,3259,2049,3274,10,3364,3402,146,98,117,102,102,101,114,58,115,105, + 122,101,0,3841,3259,3841,3250,18,10,3387,3422,146,98,117,102,102,101,114,58,115, + 101,116,0,4097,3250,2049,3380,10,3408,3446,146,98,117,102,102,101,114,58,112,114, + 101,115,101,114,118,101,0,3841,3250,3841,3259,1793,3459,1,21,2049,2095,4097,3250,10, + 1,3452,2049,2095,4097,3259,10,3427,3481,133,84,101,109,112,83,116,114,105,110,103, + 115,0,32,3466,3499,133,84,101,109,112,83,116,114,105,110,103,77,97,120,0, + 512,3482,3511,146,83,84,82,73,78,71,83,0,2049,1543,3841,3481,3841,3499,19,18, + 10,3500,3531,133,67,117,114,114,101,110,116,0,12,10,3520,3546,146,115,58,112, + 111,105,110,116,101,114,0,3841,3531,3841,3499,19,2049,3511,17,10,3533,3565,146,115, + 58,110,101,120,116,0,1,3531,2049,2982,3841,3531,3841,3481,11,1793,3581,1,0,4097, + 3531,10,1,3576,9,10,3500,3595,146,115,58,116,101,109,112,0,2,2049,81,2049, + 2884,2049,3546,4,2049,3120,2049,3546,2049,3565,10,3585,3621,146,115,58,101,109,112,116, + 121,0,2049,3546,2049,3565,1,0,67502597,16,10,3610,3640,146,115,58,115,107,105,112, + 0,6,1793,3648,68223234,1,786703,0,10,1,3643,2049,2222,2049,2897,5,10,3630,3666,146, + 115,58,107,101,101,112,0,2049,1815,1793,3675,1,3640,2049,1774,10,1,3670,9,2049, + 1871,1,121,2049,2095,2049,133,10,3656,3698,158,115,105,103,105,108,58,39,0,2049, + 1815,1,3666,1,3595,2049,64,10,3687,3717,146,115,58,99,104,111,112,0,2049,3595, + 2,2049,81,67502597,17,2049,2897,1,0,4,16,10,3707,3744,146,115,58,114,101,118, + 101,114,115,101,0,1793,3786,2,2049,3595,2049,3422,1,81,1793,3762,2,2049,81,17, + 2049,2897,10,1,3755,2049,2117,4,1793,3776,2,15,2049,3330,2049,2897,10,1,3769,2049, + 2270,3,2049,3296,2049,3595,10,1,3746,2049,3446,10,3731,3804,146,115,58,112,114,101, + 112,101,110,100,0,2049,3595,1793,3828,2,2049,81,17,1793,3820,2,2049,81,2049,2884, + 10,1,3814,2049,2095,4,2049,3120,10,1,3808,2049,2105,10,3791,3845,146,115,58,97, + 112,112,101,110,100,0,4,2049,3804,10,3833,3863,146,115,58,102,111,114,45,101, + 97,99,104,0,1793,3878,67502597,6415,3,67502597,67502597,251987205,2054,101777670,1,1,3865,7,10,1, + 3865,8,771,10,3849,3897,146,115,58,105,110,100,101,120,45,111,102,0,4,1793, + 3911,68223234,1,6415,33883396,101450758,6404,3,1,3900,7,10,1,3900,1793,3920,18,2049,2897,772, + 10,1,3915,1793,3929,2049,81,67502597,11,10,1,3924,2049,2154,1793,3939,3,1,-1,10, + 1,3935,9,10,3883,3963,146,115,58,99,111,110,116,97,105,110,115,45,99,104, + 97,114,63,0,2049,3897,1,-1,12,10,3943,3979,146,115,58,104,97,115,104,0, + 1,5381,4,1793,3987,286458116,33,10,1,3984,2049,3863,10,3969,3999,133,83,114,99,0, + 0,3992,4007,133,84,97,114,0,0,4000,4015,133,80,97,100,0,0,4008,4021,133, + 73,0,0,4016,4027,133,70,0,0,4022,4034,133,65,116,0,0,4028,4048,146,116, + 101,114,109,105,110,97,116,101,0,1,0,3841,4015,3841,4007,2049,81,17,16,10, + 4035,4070,146,101,120,116,114,97,99,116,0,3841,3999,3841,4021,17,3841,4015,3841,4007, + 2049,81,2049,3120,10,4059,4095,146,99,111,109,112,97,114,101,0,3841,4015,3841,4007, + 2049,95,3841,4027,22,4097,4027,3841,4027,1793,4115,3841,4021,4097,4034,10,1,4110,2049,72, + 10,4084,4128,146,110,101,120,116,0,1,4021,2049,2982,10,3969,4155,146,115,58,99, + 111,110,116,97,105,110,115,45,115,116,114,105,110,103,63,0,4097,4007,4097,3999, + 2049,3621,4097,4015,1,0,4097,4021,1,0,4097,4027,3841,3999,2049,81,1793,4186,2049,4070, + 2049,4048,2049,4095,2049,4128,10,1,4177,2049,2270,3841,4027,10,4133,4200,133,83,116,114, + 0,0,4193,4212,146,101,120,116,114,97,99,116,0,2049,2085,3841,4200,4,2049,3120, + 3841,-1,67502597,17,1,0,4,16,10,4201,4237,146,99,104,101,99,107,0,1,4212, + 2049,2095,1793,4248,1,2884,2049,2095,10,1,4243,2049,2095,3841,4200,2049,3979,67502597,11,10, + 4228,4271,146,108,111,99,97,116,105,111,110,0,67503109,67503109,1793,4304,1793,4299,4,1793, + 4285,67502597,2049,2521,21,10,1,4280,2049,2095,4,1793,4295,772,2,10,1,4292,9,10, + 1,4277,2049,2095,10,1,4275,2049,2095,10,4259,4318,146,115,101,116,117,112,0,2049, + 3621,4097,4200,1,0,67503109,67503109,1,81,1,3979,2049,2117,2049,3621,2049,3422,1793,4342,67502597, + 2049,81,10,1,4338,2049,2095,4,10,4133,4369,146,115,58,105,110,100,101,120,45, + 111,102,45,115,116,114,105,110,103,0,67502597,1793,4395,1793,4388,2049,4318,1793,4383,2049, + 4237,2049,4271,10,1,4378,2049,2270,10,1,4374,2049,3446,771,3,10,1,4372,2049,2095, + 18,1,2,18,1,-1,2049,2822,10,4348,4420,146,115,58,102,105,108,116,101,114, + 0,1793,4448,2049,3621,2049,3422,4,1793,4440,2049,2085,4,8,1,3330,1,11,2049,64, + 10,1,4429,2049,3863,3,2049,3296,10,1,4422,2049,3446,10,4408,4462,146,115,58,109, + 97,112,0,1793,4484,2049,3621,2049,3422,4,1793,4476,67502597,8,2049,3330,10,1,4471,2049, + 3863,3,2049,3296,10,1,4464,2049,3446,10,4453,4501,146,115,58,115,117,98,115,116, + 114,0,1793,4507,17,2049,3621,10,1,4503,2049,2095,1793,4519,67502597,1,3120,2049,2095,10, + 1,4513,2049,2105,67502597,1793,4532,17,1,0,4,16,10,1,4526,2049,2095,10,4489,4548, + 146,115,58,114,105,103,104,116,0,67502597,2049,81,67502597,18,4,2049,4501,10,4537,4567, + 146,115,58,108,101,102,116,0,1,0,4,2049,4501,10,4557,4591,146,115,58,98, + 101,103,105,110,115,45,119,105,116,104,63,0,2,2049,81,1,13,2049,2095,2049, + 4567,2049,95,10,4573,4619,146,115,58,101,110,100,115,45,119,105,116,104,63,0, + 2,2049,81,1,13,2049,2095,2049,4548,2049,95,10,4603,4641,146,115,58,99,111,112, + 121,0,67502597,2049,81,2049,2884,2049,3120,10,4631,4661,146,115,58,68,73,71,73,84, + 83,0,2049,3640,48,49,50,51,52,53,54,55,56,57,0,1,4663,10,4649,4698, + 146,115,58,65,83,67,73,73,45,76,79,87,69,82,67,65,83,69,0,2049, + 3640,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115, + 116,117,118,119,120,121,122,0,1,4700,10,4677,4751,146,115,58,65,83,67,73, + 73,45,85,80,80,69,82,67,65,83,69,0,2049,3640,65,66,67,68,69,70, + 71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90, + 0,1,4753,10,4730,4802,146,115,58,65,83,67,73,73,45,76,69,84,84,69, + 82,83,0,2049,3640,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111, + 112,113,114,115,116,117,118,119,120,121,122,65,66,67,68,69,70,71,72,73, + 74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,0,1,4804, + 10,4783,4877,146,115,58,80,85,78,67,84,85,65,84,73,79,78,0,2049,3640, + 95,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,58,59,60,61, + 62,63,64,91,92,93,94,96,123,124,125,126,0,1,4879,1,95,67502597,16,10, + 4860,4935,133,115,58,87,72,73,84,69,83,80,65,67,69,0,32,9,10,13, + 0,4919,4945,158,39,0,1,3621,2049,146,10,4940,4955,158,36,0,1,0,2049,133, + 10,4950,0,133,65,83,67,73,73,58,78,85,76,0,4960,27,133,65,83,67, + 73,73,58,69,83,67,0,4973,8,133,65,83,67,73,73,58,66,83,0,4986, + 9,133,65,83,67,73,73,58,72,84,0,4998,10,133,65,83,67,73,73,58, + 76,70,0,5010,11,133,65,83,67,73,73,58,86,84,0,5022,12,133,65,83, + 67,73,73,58,70,70,0,5034,13,133,65,83,67,73,73,58,67,82,0,5046, + 32,133,65,83,67,73,73,58,83,80,65,67,69,0,5058,127,133,65,83,67, + 73,73,58,68,69,76,0,5073,1,133,65,83,67,73,73,58,83,79,72,0, + 5086,2,133,65,83,67,73,73,58,83,84,88,0,5099,3,133,65,83,67,73, + 73,58,69,84,88,0,5112,4,133,65,83,67,73,73,58,69,79,84,0,5125, + 5,133,65,83,67,73,73,58,69,78,81,0,5138,6,133,65,83,67,73,73, + 58,65,67,75,0,5151,7,133,65,83,67,73,73,58,66,69,76,0,5164,14, + 133,65,83,67,73,73,58,83,79,0,5177,15,133,65,83,67,73,73,58,83, + 73,0,5189,16,133,65,83,67,73,73,58,68,76,69,0,5201,17,133,65,83, + 67,73,73,58,68,67,49,0,5214,18,133,65,83,67,73,73,58,68,67,50, + 0,5227,19,133,65,83,67,73,73,58,68,67,51,0,5240,20,133,65,83,67, + 73,73,58,68,67,52,0,5253,21,133,65,83,67,73,73,58,78,65,75,0, + 5266,22,133,65,83,67,73,73,58,83,89,78,0,5279,23,133,65,83,67,73, + 73,58,69,84,66,0,5292,24,133,65,83,67,73,73,58,67,65,78,0,5305, + 25,133,65,83,67,73,73,58,69,77,0,5318,26,133,65,83,67,73,73,58, + 83,85,66,0,5330,28,133,65,83,67,73,73,58,70,83,0,5343,29,133,65, + 83,67,73,73,58,71,83,0,5355,30,133,65,83,67,73,73,58,82,83,0, + 5367,31,133,65,83,67,73,73,58,85,83,0,5379,5407,146,99,58,108,111,119, + 101,114,99,97,115,101,63,0,1,97,1,122,2049,2915,10,5391,5430,146,99,58, + 117,112,112,101,114,99,97,115,101,63,0,1,65,1,90,2049,2915,10,5414,5450, + 146,99,58,108,101,116,116,101,114,63,0,1,5407,1,5430,2049,2117,22,10,5437, + 5470,146,99,58,100,105,103,105,116,63,0,1,48,1,57,2049,2915,10,5458,5491, + 146,99,58,118,105,115,105,98,108,101,63,0,1,32,1,126,2049,2915,10,5477, + 5510,146,99,58,118,111,119,101,108,63,0,2049,3640,97,101,105,111,117,65,69, + 73,79,85,0,1,5512,4,2049,3963,10,5498,5545,146,99,58,99,111,110,115,111, + 110,97,110,116,63,0,2,2049,5450,1793,5555,2049,5510,2049,2453,10,1,5550,1793,5563, + 3,2049,2356,10,1,5559,2049,64,10,5529,5585,146,99,58,119,104,105,116,101,115, + 112,97,99,101,63,0,1,4935,4,2049,3963,10,5568,5608,146,99,58,45,108,111, + 119,101,114,99,97,115,101,63,0,2049,5407,2049,2453,10,5591,5630,146,99,58,45, + 117,112,112,101,114,99,97,115,101,63,0,2049,5430,2049,2453,10,5613,5648,146,99, + 58,45,100,105,103,105,116,63,0,2049,5470,2049,2453,10,5635,5671,146,99,58,45, + 119,104,105,116,101,115,112,97,99,101,63,0,2049,5585,2049,2453,10,5653,5691,146, + 99,58,45,118,105,115,105,98,108,101,63,0,2049,5491,2049,2453,10,5676,5709,146, + 99,58,45,118,111,119,101,108,63,0,2049,5510,2049,2453,10,5696,5731,146,99,58, + 45,99,111,110,115,111,110,97,110,116,63,0,2049,5545,2049,2453,10,5714,5750,146, + 99,58,116,111,45,117,112,112,101,114,0,2,2049,5407,25,3,1,32,18,10, + 5736,5773,146,99,58,116,111,45,108,111,119,101,114,0,2,2049,5430,25,3,1, + 32,17,10,5759,5797,146,99,58,116,111,45,115,116,114,105,110,103,0,2049,3640, + 46,0,1,5799,2049,3595,1,36,2049,2105,10,5782,5827,146,99,58,116,111,103,103, + 108,101,45,99,97,115,101,0,2,2049,5407,1,5750,1,5773,2049,64,10,5810,5852, + 146,99,58,116,111,45,110,117,109,98,101,114,0,2,2049,5470,1793,5861,1,48, + 18,10,1,5857,1793,5869,3,1,0,10,1,5865,2049,64,10,5837,5888,146,115,58, + 116,111,45,117,112,112,101,114,0,1,5750,2049,4462,10,5874,5907,146,115,58,116, + 111,45,108,111,119,101,114,0,1,5773,2049,4462,10,5893,5927,146,115,58,116,114, + 105,109,45,108,101,102,116,0,2049,3595,1793,5941,2049,56,1,5585,1,2537,2049,2117, + 21,10,1,5931,2049,2222,2049,2897,10,5912,5964,146,115,58,116,114,105,109,45,114, + 105,103,104,116,0,2049,3595,2049,3744,2049,5927,2049,3744,10,5948,5983,146,115,58,116, + 114,105,109,0,2049,5964,2049,5927,10,5973,5999,146,99,111,114,114,101,99,116,0, + 2,1,48,13,1793,6014,1,48,67502597,18,1,2,19,17,10,1,6005,9,10,5973, + 6033,146,110,58,116,111,45,115,116,114,105,110,103,0,1793,6081,2049,1871,2049,3422, + 2,2049,2849,1793,6059,1,10,20,4,1,48,17,2049,5999,2049,3330,2,2049,2537,10, + 1,6044,2049,2222,3,2049,2556,1793,6073,1,45,2049,3330,10,1,6068,9,2049,3296,2049, + 3744,10,1,6035,2049,3446,10,6018,6108,133,82,101,119,114,105,116,101,85,110,100, + 101,114,115,99,111,114,101,115,0,-1,6086,6116,146,115,117,98,0,1,95,1793, + 6123,1,32,10,1,6120,2049,2367,10,6109,6139,146,114,101,119,114,105,116,101,0, + 3841,6108,1793,6148,1,6116,2049,4462,10,1,6143,9,10,6128,6162,146,104,97,110,100, + 108,101,0,1,3698,8,10,6086,6177,158,115,105,103,105,108,58,39,0,2049,6139, + 2049,6162,10,6166,6193,146,115,58,115,112,108,105,116,0,2049,2085,2049,3897,772,2049, + 2085,2049,4567,1,38,2049,2095,10,6182,6228,146,115,58,115,112,108,105,116,45,111, + 110,45,115,116,114,105,110,103,0,2049,2085,2049,4369,2049,2884,772,2049,2085,2049,4567, + 1,38,2049,2095,10,6207,6257,146,115,58,114,101,112,108,97,99,101,0,67502597,2049, + 81,2049,1871,16,1793,6273,2049,6228,4,2049,1871,15,17,10,1,6265,2049,2095,2049,3804, + 2049,3845,10,6244,6294,133,83,112,108,105,116,45,79,110,0,0,6282,6305,146,109, + 97,116,99,104,63,0,3841,6294,11,10,6295,6322,146,116,101,114,109,105,110,97, + 116,101,0,1,0,67502597,2049,2897,16,10,6309,6337,146,115,116,101,112,0,1,2884, + 2049,2095,2049,6305,1793,6351,2,2049,107,2049,6322,10,1,6345,9,10,6244,6369,146,115, + 58,116,111,107,101,110,105,122,101,0,4097,6294,2049,3666,2049,1871,1,0,2049,107, + 1793,6391,2,2049,107,2,1,6337,2049,3863,3,10,1,6381,2049,2095,2049,1871,67502597,18, + 2049,2897,67502597,16,10,6355,6414,133,78,101,101,100,108,101,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,6412,6557,133,76,101,110,0,0,6550, - 6568,133,84,111,107,101,110,115,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,6404,6549,133,76,101,110,0,0,6542,6560,133,84,111,107,101,110,115, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6558,6702,133, - 84,80,0,0,6696,6711,146,115,97,118,101,0,2049,3672,3841,6702,1,6568,17,2049, - 2890,16,1,6702,2049,2988,10,6703,6734,146,110,101,120,116,0,1793,6740,3841,6557,17, - 10,1,6736,2049,2110,10,6726,6754,146,100,111,110,101,63,0,2049,81,2049,2527,10, - 6363,6783,146,115,58,116,111,107,101,110,105,122,101,45,111,110,45,115,116,114, - 105,110,103,0,1,0,4097,6702,1793,6797,2,1,6422,2049,4648,2049,3852,10,1,6789, - 1793,6806,2049,81,4097,6557,10,1,6801,2049,2122,1793,6823,1,6422,2049,6236,2049,6711,2049, - 6734,2049,6754,10,1,6812,2049,2250,1,6568,3841,6702,2049,2903,4097,6568,10,6759,6848,146, - 102,111,114,45,101,97,99,104,0,4,2049,56,1,13,2049,2100,1793,6864,5,2049, - 56,84018692,525572,1542,10,1,6857,2049,2275,771,10,6836,6884,146,115,117,98,115,116,105, - 116,117,116,101,0,2049,3517,1,129,18,10,6870,6901,146,101,120,116,114,97,99, - 116,0,2049,6884,2049,4648,10,6890,6918,146,116,111,107,101,110,105,122,101,0,2049, - 6783,2049,3627,10,6906,6934,146,99,111,109,98,105,110,101,0,2049,6884,2049,3852,2049, - 3852,10,6923,6950,146,109,101,114,103,101,0,4,1,6934,2049,6848,772,10,6941,6969, - 146,102,105,110,100,45,101,110,100,0,2,2049,81,2049,6884,2049,81,18,67502597,17, - 10,6957,6989,146,99,108,101,97,110,0,2049,6969,1,0,4,16,10,6759,7013,146, - 115,58,114,101,112,108,97,99,101,45,97,108,108,0,1,3,1793,7028,2049,6901, - 2049,6918,2049,6950,2049,6989,2049,3601,10,1,7017,2049,3079,10,6996,7041,146,99,104,97, - 114,0,1,32,1793,7050,1,95,2049,3336,10,1,7045,2049,2373,1,114,1793,7063,1, - 13,2049,3336,10,1,7058,2049,2373,1,110,1793,7076,1,10,2049,3336,10,1,7071,2049, - 2373,1,116,1793,7089,1,9,2049,3336,10,1,7084,2049,2373,1,48,1793,7102,1,0, - 2049,3336,10,1,7097,2049,2373,1,94,1793,7115,1,27,2049,3336,10,1,7110,2049,2373, - 2049,3336,10,7033,7130,146,116,121,112,101,0,1,99,1793,7138,4,2049,3336,10,1, - 7134,2049,2373,1,115,1793,7152,4,1,3336,2049,3870,10,1,7146,2049,2373,1,110,1793, - 7168,4,2049,6040,1,3336,2049,3870,10,1,7160,2049,2373,3,10,7122,7184,146,104,97, - 110,100,108,101,0,1,92,1793,7193,2049,56,2049,7041,10,1,7188,2049,2373,1,37, - 1793,7206,2049,56,2049,7130,10,1,7201,2049,2373,2049,3336,10,6996,7225,146,115,58,102, - 111,114,109,97,116,0,1793,7254,2049,3627,1793,7249,2049,3428,1793,7244,2049,56,25,2049, - 7184,1,7235,7,10,1,7235,8,3,10,1,7231,2049,2110,10,1,7227,2049,3452,10, - 7213,7270,146,115,58,99,111,110,115,116,0,1,3672,2049,2100,2049,2016,10,7259,7287, - 133,86,97,108,117,101,115,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7277,7323,146,102, - 114,111,109,0,2049,81,2,1793,7341,1793,7334,1,7287,4113,10,1,7330,2049,2110,2049, - 2903,10,1,7328,2049,2275,3,10,7315,7353,146,116,111,0,2,2049,81,1793,7369,2049, - 56,1,97,18,2049,2890,1,7287,266001,10,1,7358,2049,2275,3,10,7259,7386,146,114, - 101,111,114,100,101,114,0,1,7323,2049,2100,2049,7353,10,7375,7402,146,99,117,114, - 114,121,0,2049,1874,1793,7412,4,2049,1728,2049,1751,10,1,7406,2049,2100,10,7393,7425, - 146,100,111,101,115,0,2049,1587,4,2049,7402,2049,1570,2049,160,16,1,146,2049,1646, - 10,7417,7454,146,100,58,102,111,114,45,101,97,99,104,0,1,2,1793,7480,6415, - 2049,2090,1793,7472,1793,7467,2052,10,1,7465,2049,2100,10,1,7463,2049,2100,1,7458,7, - 10,1,7458,8,3,10,7440,7500,146,100,58,108,111,111,107,117,112,45,120,116, - 0,1,0,4,1793,7525,2049,2090,2049,160,2831,1793,7518,4,1,2051,2049,2100,10,1, - 7512,1,11,2049,64,10,1,7505,2049,7454,3,10,7485,7543,146,97,58,108,101,110, - 103,116,104,0,15,10,7531,7566,146,97,58,99,111,117,110,116,101,100,45,114, - 101,115,117,108,116,115,0,8,2049,1874,1793,7579,2,2049,107,1,107,2049,2275,10, - 1,7571,2049,2100,10,7545,7601,146,97,58,102,114,111,109,45,115,116,114,105,110, - 103,0,2049,1874,1793,7615,2,2049,81,2049,107,1,107,2049,3870,10,1,7605,2049,2100, - 10,7584,7634,146,97,58,102,111,114,45,101,97,99,104,0,4,2049,56,1,13, - 2049,2100,1793,7650,5,2049,56,84018692,525572,1542,10,1,7643,2049,2275,771,10,7620,7665,146, - 97,58,100,117,112,0,2049,1874,1793,7678,2,15,2049,107,1,107,2049,7634,10,1, - 7669,2049,2100,10,7656,7693,146,97,58,99,111,112,121,0,1,3,1793,7709,4097,3, - 2,2049,7543,2049,107,1,107,2049,7634,10,1,7697,2049,3079,10,7683,7729,146,97,58, - 116,111,45,115,116,114,105,110,103,0,1,3,1793,7742,2049,7665,1,0,2049,107, - 2049,2890,10,1,7733,2049,3079,2049,3601,10,7714,7761,146,97,58,97,112,112,101,110, - 100,0,2049,2090,1,34,2049,2148,17,2049,1874,1793,7786,2049,107,1793,7781,1,107,2049, - 7634,10,1,7776,2049,2148,10,1,7772,2049,2100,10,7749,7804,146,97,58,112,114,101, - 112,101,110,100,0,4,2049,7761,10,7791,7818,146,97,58,99,104,111,112,0,2049, - 7665,1,-1,2049,3060,2,2049,3003,10,7808,7840,146,97,58,102,105,108,116,101,114, - 0,1793,7855,67502597,1,21,2049,2100,4,1,107,1,11,2049,64,10,1,7842,2049,7402, - 2049,1874,1793,7870,67502597,15,2049,107,2049,7634,10,1,7863,2049,2100,2049,1874,67502597,18,2049, - 2903,67502597,16,10,7828,7898,146,97,58,99,111,110,116,97,105,110,115,63,0,1, - 0,4,1793,7910,4,5,67502597,11,6,22,10,1,7903,2049,7634,772,10,7883,7938,146, - 97,58,99,111,110,116,97,105,110,115,45,115,116,114,105,110,103,63,0,1, - 0,4,1793,7951,4,5,67502597,2049,95,6,22,10,1,7943,2049,7634,772,10,7916,7966, - 146,97,58,109,97,112,0,1793,7972,8,2049,107,10,1,7968,2049,7402,2049,1874,1793, - 7987,67502597,15,2049,107,2049,7634,10,1,7980,2049,2100,10,7957,8005,146,97,58,114,101, - 118,101,114,115,101,0,2049,1874,1793,8039,2049,56,1793,8017,17,2049,2903,10,1,8013, - 2049,2110,2,2049,107,1793,8033,2,15,2049,107,2049,2903,10,1,8026,2049,2275,3,10, - 1,8009,2049,2100,10,7992,8052,146,97,58,116,104,0,17,2049,2890,10,8044,8067,146, - 97,58,102,101,116,99,104,0,2049,8052,15,10,8056,8082,146,97,58,115,116,111, - 114,101,0,2049,8052,16,10,8071,8098,146,97,58,114,101,100,117,99,101,0,1, - 13,2049,2100,2049,7634,10,8086,8117,146,105,100,101,110,116,105,102,121,0,1,-1, - 4,1,0,1793,8148,2049,2350,11,1793,8142,67502597,1,-1,11,1793,8138,772,2,10,1, - 8135,9,10,1,8129,9,2049,2890,10,1,8124,2049,8098,3,10,8086,8168,146,97,58, - 105,110,100,101,120,45,111,102,0,1,3,1793,8181,1,26,2049,7402,2049,7966,2049, - 8117,10,1,8172,2049,3079,10,8154,8207,146,97,58,105,110,100,101,120,45,111,102, - 45,115,116,114,105,110,103,0,1,3,1793,8220,1,95,2049,7402,2049,7966,2049,8117, - 10,1,8211,2049,3079,10,8186,8235,146,97,58,109,97,107,101,0,2049,7566,2,2, - 1,3,1793,8246,2049,8005,10,1,8243,2049,3079,4,2049,7693,10,8225,8259,158,123,0, - 1,289,2049,158,1,1556,2049,146,1,289,2049,158,10,8254,8277,158,125,0,1,305, - 2049,158,1,2100,2049,146,1,1556,2049,146,1,13,2049,152,1,40,2049,152,1,2903, - 2049,146,1,305,2049,158,1,8235,2049,146,10,8272,8321,146,98,111,117,110,100,115, - 63,0,67502597,2049,7543,67502597,13,10,8310,8335,146,99,111,112,121,0,2049,56,2049,107, - 10,8327,8350,146,116,111,45,101,110,100,0,2,2049,7543,17,2049,2890,10,8272,8367, - 146,97,58,108,101,102,116,0,2049,8321,1793,8375,771,1,-1,10,1,8371,2049,2653, - 2049,1874,67502597,2049,107,1793,8396,1,2890,2049,2100,1,8335,2049,2275,3,10,1,8386,2049, - 2100,10,8357,8412,146,97,58,114,105,103,104,116,0,2049,8321,1793,8420,771,1,-1, - 10,1,8416,2049,2653,2049,1874,67502597,2049,107,1793,8443,4,2049,8350,67502597,18,4,1,8335, - 2049,2275,3,10,1,8431,2049,2100,10,8401,8460,146,97,58,109,105,100,100,108,101, - 0,1,2042,2049,2100,4,67502597,2049,8321,1793,8475,771,3,1,-1,10,1,8470,2049,2653, - 771,2049,2090,4,18,2049,2890,2049,1874,67502597,2049,107,1793,8510,772,1793,8500,17,2049,2890, - 10,1,8496,2049,2100,1,8335,2049,2275,3,10,1,8493,2049,2100,10,8448,8523,133,70, - 108,97,103,0,0,8515,8535,146,99,111,109,112,97,114,101,0,67440386,184946434,10,8524, - 8548,146,108,101,110,103,116,104,0,659202,10,8538,8558,146,110,101,120,116,0,17043713, - 1,1,2577,10,8550,8576,146,110,111,116,45,101,113,117,97,108,0,50529030,2561,0, - 10,8563,8588,146,108,111,111,112,0,524549,8558,2049,8535,18157313,8523,8523,16,420610310,1,1, - 8588,7,10,8448,8611,146,97,58,101,113,63,0,1048833,-1,8523,2049,8535,151066369,-1,8576, - 2049,8548,2049,8588,251724547,8523,10,8602,8636,146,97,58,45,101,113,63,0,2049,8611,2049, - 2459,10,8626,8659,146,97,58,98,101,103,105,110,115,45,119,105,116,104,63,0, - 1,3,1793,8675,2,2049,7543,1,13,2049,2100,2049,8367,2049,8611,10,1,8663,2049,3079, - 10,8641,8696,146,97,58,101,110,100,115,45,119,105,116,104,63,0,1,3,1793, - 8712,2,2049,7543,1,13,2049,2100,2049,8412,2049,8611,10,1,8700,2049,3079,10,8680,8733, - 146,99,117,114,114,101,110,116,45,108,105,110,101,0,2049,3517,1,1025,18,10, - 8717,8755,146,99,111,117,110,116,45,116,111,107,101,110,115,0,1793,8761,1,32, - 11,10,1,8757,2049,4427,2049,81,10,8739,8786,146,112,114,111,99,101,115,115,45, - 116,111,107,101,110,115,0,1793,8814,1,32,2049,6201,4,1793,8807,2,2049,81,2049, - 2543,1,369,1,11,2049,64,10,1,8795,2049,2100,2049,2890,10,1,8788,2049,2275,2049, - 369,10,8680,8835,146,115,58,101,118,97,108,117,97,116,101,0,2049,8733,2049,4648, - 2049,8733,2,2049,8755,2049,8786,10,8821,8853,133,76,80,0,0,8847,8863,133,73,110, - 100,101,120,0,0,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8854,8903,146,110, - 101,120,116,0,3841,8853,1,8863,17,2049,2988,10,8895,8919,146,112,114,101,112,0, - 1,8853,2049,2988,1,0,3841,8853,1,8863,17,16,10,8911,8940,146,100,111,110,101, - 0,1,8853,2049,3003,10,8821,8950,146,73,0,3841,8853,1,8863,17,15,10,8945,8962, - 146,74,0,3841,8853,1,8863,17,2049,2903,15,10,8957,8976,146,75,0,3841,8853,1, - 8863,17,1,2,18,15,10,8971,9003,146,105,110,100,101,120,101,100,45,116,105, - 109,101,115,0,2049,8919,4,1793,9019,25,33886721,1,2053,1542,2049,8903,1,9008,7,10, - 1,9008,8,3,2049,8940,10,8986,9034,158,104,111,111,107,0,2049,3646,108,105,106, - 117,46,46,46,46,0,1,9036,2049,416,2049,1874,2049,2890,2049,107,10,9026,9068,146, - 115,101,116,45,104,111,111,107,0,2049,2890,16,10,9056,9082,146,117,110,104,111, - 111,107,0,2049,2890,2,2049,2890,4,16,10,9072,9106,146,105,111,58,101,110,117, - 109,101,114,97,116,101,0,27,10,9090,9120,146,105,111,58,113,117,101,114,121, - 0,28,10,9108,9135,146,105,111,58,105,110,118,111,107,101,0,29,10,9122,9152, - 146,105,111,58,115,99,97,110,45,102,111,114,0,1,-1,4,2049,9106,1793,9183, - 2049,8950,2049,9120,772,67502597,11,1793,9179,1793,9174,3,2049,8950,10,1,9170,2049,2100,10, - 1,9168,9,10,1,9159,2049,9003,3,10,9137,9198,146,99,58,112,117,116,0,1793, - 9200,1,0,2049,9135,10,9189,9211,146,110,108,0,1,10,2049,9198,10,9205,9222,146, - 115,112,0,1,32,2049,9198,10,9216,9234,146,116,97,98,0,1,9,2049,9198,10, - 9227,9248,146,115,58,112,117,116,0,1,9198,2049,3870,10,9239,9262,146,110,58,112, - 117,116,0,2049,6040,2049,9248,10,9253,9276,146,114,101,115,101,116,0,2049,1556,25, - 771,1,9276,7,10,9267,9298,146,100,117,109,112,45,115,116,97,99,107,0,2049, - 1556,25,134284547,9298,134283782,9262,2049,9222,10,9284,9316,146,70,82,69,69,0,2049,3517,1, - 1025,18,2049,1874,18,10,9308,9334,133,70,105,108,101,115,0,0,9325,9347,146,105, - 100,101,110,116,105,102,121,0,3841,9334,2049,2527,25,3,1,4,2049,9152,2,2049, - 2562,1793,9402,3,2049,3646,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,9365,2049,9248, - 2049,9211,10,1,9362,1793,9409,4097,9334,10,1,9406,2049,64,10,9308,9432,146,102,105, - 108,101,58,111,112,101,114,97,116,105,111,110,0,2049,9347,3841,9334,2049,9135,10, - 9414,0,133,102,105,108,101,58,82,0,9439,1,133,102,105,108,101,58,87,0, - 9449,2,133,102,105,108,101,58,65,0,9459,3,133,102,105,108,101,58,82,43, - 0,9469,9493,146,102,105,108,101,58,111,112,101,110,0,1,0,2049,9432,10,9480, - 9512,146,102,105,108,101,58,99,108,111,115,101,0,1,1,2049,9432,10,9498,9530, - 146,102,105,108,101,58,114,101,97,100,0,1,2,2049,9432,10,9517,9549,146,102, - 105,108,101,58,119,114,105,116,101,0,1,3,2049,9432,10,9535,9567,146,102,105, - 108,101,58,116,101,108,108,0,1,4,2049,9432,10,9554,9585,146,102,105,108,101, - 58,115,101,101,107,0,1,5,2049,9432,10,9572,9603,146,102,105,108,101,58,115, - 105,122,101,0,1,6,2049,9432,10,9590,9623,146,102,105,108,101,58,100,101,108, - 101,116,101,0,1,7,2049,9432,10,9608,9642,146,102,105,108,101,58,102,108,117, - 115,104,0,1,8,2049,9432,10,9628,9663,146,102,105,108,101,58,101,120,105,115, - 116,115,63,0,1,0,2049,9493,2,2049,2543,1793,9677,2049,9512,2049,2350,10,1,9672, - 1793,9685,3,2049,2362,10,1,9681,2049,64,10,9647,9715,146,102,105,108,101,58,111, - 112,101,110,45,102,111,114,45,114,101,97,100,105,110,103,0,1,0,2049,9493, - 2,2049,9603,4,10,9690,9748,146,102,105,108,101,58,111,112,101,110,45,102,111, - 114,45,97,112,112,101,110,100,0,1,2,2049,9493,2,2049,9603,4,10,9724,9782, - 146,102,105,108,101,58,111,112,101,110,45,102,111,114,45,119,114,105,116,105, - 110,103,0,1,1,2049,9493,10,9757,9794,133,70,73,68,0,0,9787,9803,133,83, - 105,122,101,0,0,9795,9814,133,65,99,116,105,111,110,0,0,9804,9825,133,66, - 117,102,102,101,114,0,0,9815,9835,146,45,101,111,102,63,0,3841,9794,2049,9567, - 3841,9803,13,10,9826,9855,146,112,114,101,115,101,114,118,101,0,1,9794,1793,9866, - 1,9803,1,21,2049,3079,10,1,9859,2049,3079,10,9757,9889,146,102,105,108,101,58, - 114,101,97,100,45,108,105,110,101,0,4097,9794,1793,9946,2049,1874,2,4097,9825,2049, - 3428,1793,9938,3841,9794,2049,9530,2,2049,3336,1793,9915,1,13,11,10,1,9911,1793,9923, - 1,10,11,10,1,9919,1793,9931,1,0,11,10,1,9927,2049,2159,22,22,10,1, - 9902,2049,2250,2049,3360,3,10,1,9893,2049,3452,3841,9825,10,9871,9975,146,102,105,108, - 101,58,102,111,114,45,101,97,99,104,45,108,105,110,101,0,1793,10006,4097,9814, - 2049,9715,4097,9794,4097,9803,1793,9997,3841,9794,2049,9889,3841,9814,8,2049,9835,10,1,9987, - 2049,2227,3841,9794,2049,9512,10,1,9977,2049,9855,10,9953,10018,133,70,73,68,0,0, - 9953,10033,146,102,105,108,101,58,115,108,117,114,112,0,1793,10060,4,2049,3428,2049, - 9715,4097,10018,1793,10051,3841,10018,2049,9530,2049,3336,10,1,10044,2049,2275,3841,10018,2049,9512, - 10,1,10035,2049,3452,10,10019,10078,146,102,105,108,101,58,115,112,101,119,0,2049, - 9782,4,1793,10087,67502597,2049,9549,10,1,10083,2049,3870,2049,9512,10,10065,10101,133,70,80, - 85,0,0,10094,10114,146,105,100,101,110,116,105,102,121,0,3841,10101,2049,2527,25, - 3,1,2,2049,9152,2,2049,2562,1793,10169,3,2049,3646,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,10132,2049,9248,2049,9211,10,1,10129,1793,10176,4097,10101,10,1,10173,2049, - 64,10,10065,10200,146,102,108,111,97,116,58,111,112,101,114,97,116,105,111,110, - 0,2049,10114,3841,10101,2049,9135,10,10181,10221,146,110,58,116,111,45,102,108,111,97, - 116,0,1,0,2049,10200,10,10207,10240,146,115,58,116,111,45,102,108,111,97,116, - 0,1,1,2049,10200,10,10226,10260,146,102,58,116,111,45,110,117,109,98,101,114, - 0,1,2,2049,10200,10,10245,10280,146,102,58,116,111,45,115,116,114,105,110,103, - 0,2049,3627,2,1,3,2049,10200,10,10265,10295,146,102,58,43,0,1,4,2049,10200, - 10,10288,10307,146,102,58,45,0,1,5,2049,10200,10,10300,10319,146,102,58,42,0, - 1,6,2049,10200,10,10312,10331,146,102,58,47,0,1,7,2049,10200,10,10324,10347,146, - 102,58,102,108,111,111,114,0,1,8,2049,10200,10,10336,10365,146,102,58,99,101, - 105,108,105,110,103,0,1,9,2049,10200,10,10352,10380,146,102,58,115,113,114,116, - 0,1,10,2049,10200,10,10370,10394,146,102,58,101,113,63,0,1,11,2049,10200,10, - 10385,10409,146,102,58,45,101,113,63,0,1,12,2049,10200,10,10399,10423,146,102,58, - 108,116,63,0,1,13,2049,10200,10,10414,10437,146,102,58,103,116,63,0,1,14, - 2049,10200,10,10428,10453,146,102,58,100,101,112,116,104,0,1,15,2049,10200,10,10442, - 10467,146,102,58,100,117,112,0,1,16,2049,10200,10,10458,10482,146,102,58,100,114, - 111,112,0,1,17,2049,10200,10,10472,10497,146,102,58,115,119,97,112,0,1,18, - 2049,10200,10,10487,10511,146,102,58,108,111,103,0,1,19,2049,10200,10,10502,10527,146, - 102,58,112,111,119,101,114,0,1,20,2049,10200,10,10516,10541,146,102,58,115,105, - 110,0,1,21,2049,10200,10,10532,10555,146,102,58,99,111,115,0,1,22,2049,10200, - 10,10546,10569,146,102,58,116,97,110,0,1,23,2049,10200,10,10560,10584,146,102,58, - 97,115,105,110,0,1,24,2049,10200,10,10574,10599,146,102,58,97,99,111,115,0, - 1,25,2049,10200,10,10589,10614,146,102,58,97,116,97,110,0,1,26,2049,10200,10, - 10604,10629,146,102,58,112,117,115,104,0,1,27,2049,10200,10,10619,10643,146,102,58, - 112,111,112,0,1,28,2049,10200,10,10634,10660,146,102,58,97,100,101,112,116,104, - 0,1,29,2049,10200,10,10648,10675,146,102,58,111,118,101,114,0,2049,10629,2049,10467, - 2049,10643,2049,10497,10,10665,10694,146,102,58,116,117,99,107,0,2049,10467,2049,10629,2049, - 10497,2049,10643,10,10684,10712,146,102,58,110,105,112,0,2049,10497,2049,10482,10,10703,10732, - 146,102,58,100,114,111,112,45,112,97,105,114,0,2049,10482,2049,10482,10,10717,10751, - 146,102,58,100,117,112,45,112,97,105,114,0,2049,10675,2049,10675,10,10737,10765,146, - 102,58,114,111,116,0,2049,10629,2049,10497,2049,10643,2049,10497,10,10756,10786,158,112,114, - 101,102,105,120,58,46,0,2049,1815,1,3672,1,3601,2049,64,1,10240,2049,146,10, - 10774,10811,146,102,58,115,113,117,97,114,101,0,2049,10467,2049,10319,10,10799,10831,146, - 102,58,112,111,115,105,116,105,118,101,63,0,1,0,2049,10221,2049,10437,10,10816, - 10853,146,102,58,110,101,103,97,116,105,118,101,63,0,1,0,2049,10221,2049,10423, - 10,10838,10872,146,102,58,110,101,103,97,116,101,0,1,-1,2049,10221,2049,10319,10, - 10860,10888,146,102,58,97,98,115,0,2049,10467,2049,10853,1,10872,9,10,10879,10905,146, - 102,58,112,117,116,0,2049,10280,2049,9248,10,10896,10918,146,102,58,80,73,0,2049, - 3646,51,46,49,52,49,53,57,50,0,1,10920,2049,10240,10,10910,10941,146,102,58, - 69,0,2049,3646,50,46,55,49,56,50,56,49,0,1,10943,2049,10240,10,10934,10966, - 146,102,58,78,65,78,0,2049,3646,48,0,1,10968,2049,10240,2049,3646,48,0,1, - 10976,2049,10240,2049,10331,10,10957,10994,146,102,58,73,78,70,0,2049,3646,49,46,48, - 0,1,10996,2049,10240,2049,3646,48,0,1,11006,2049,10240,2049,10331,10,10985,11025,146,102, - 58,45,73,78,70,0,2049,3646,45,49,46,48,0,1,11027,2049,10240,2049,3646,48, - 0,1,11038,2049,10240,2049,10331,10,11015,11057,146,102,58,110,97,110,63,0,2049,10467, - 2049,10409,10,11047,11072,146,102,58,105,110,102,63,0,2049,10994,2049,10394,10,11062,11088, - 146,102,58,45,105,110,102,63,0,2049,11025,2049,10394,10,11077,11104,146,102,58,114, - 111,117,110,100,0,2049,10467,2049,10853,1793,11125,2049,3646,48,46,53,0,1,11112,2049, - 10240,2049,10307,2049,10365,10,1,11110,1793,11144,2049,3646,48,46,53,0,1,11131,2049,10240, - 2049,10295,2049,10347,10,1,11129,2049,64,10,11093,11158,146,102,58,109,105,110,0,2049, - 10751,2049,10423,1,10482,1,10712,2049,64,10,11149,11178,146,102,58,109,97,120,0,2049, - 10751,2049,10437,1,10482,1,10712,2049,64,10,11169,11200,146,102,58,108,105,109,105,116, - 0,2049,10497,2049,10629,2049,11158,2049,10643,2049,11178,10,11189,11225,146,102,58,98,101,116, - 119,101,101,110,63,0,2049,10765,2049,10467,2049,10629,2049,10765,2049,10765,2049,11200,2049,10643, - 2049,10394,10,11211,11251,146,102,58,105,110,99,0,2049,3646,49,0,1,11253,2049,10240, - 2049,10295,10,11242,11271,146,102,58,100,101,99,0,2049,3646,49,0,1,11273,2049,10240, - 2049,10307,10,11262,11292,146,102,58,99,97,115,101,0,2049,10675,2049,10394,1793,11304,2049, - 10482,8,1,-1,10,1,11298,1793,11312,3,1,0,10,1,11308,2049,64,25,6,771, - 10,11282,11330,146,102,58,115,105,103,110,0,2049,10467,2049,3646,48,0,1,11334,2049, - 10240,2049,10394,1793,11349,1,0,2049,10482,10,1,11344,2049,2653,2049,3646,48,0,1,11355, - 2049,10240,2049,10437,1793,11368,1,1,10,1,11365,1793,11375,1,-1,10,1,11372,2049,64, - 10,11320,2147483645,133,101,58,77,65,88,0,11380,-2147483645,133,101,58,77,73,78,0,11389, - -2147483647,133,101,58,78,65,78,0,11398,2147483646,133,101,58,73,78,70,0,11407,-2147483646,133, - 101,58,45,73,78,70,0,11416,11434,146,101,58,110,63,0,1,-2147483645,2049,2890,1, - 2147483645,2049,2903,2049,2921,10,11426,11455,146,101,58,109,97,120,63,0,1,2147483645,11,10, - 11445,11469,146,101,58,109,105,110,63,0,1,-2147483645,11,10,11459,11484,146,101,58,122, - 101,114,111,63,0,2049,2527,10,11473,11497,146,101,58,110,97,110,63,0,1,-2147483647, - 11,10,11487,11511,146,101,58,105,110,102,63,0,1,2147483646,11,10,11501,11526,146,101, - 58,45,105,110,102,63,0,1,-2147483646,11,10,11515,11540,146,101,58,99,108,105,112, - 0,1,-2147483645,1,2147483645,2049,2873,10,11530,11555,146,102,58,69,49,0,1793,11557,2049,3646, - 49,46,101,53,0,1,11559,2049,10240,10,11547,11586,146,102,58,115,105,103,110,101, - 100,45,115,113,114,116,0,2049,10467,2049,11330,2049,10888,2049,10380,2049,10221,2049,10319,10, - 11569,11618,146,102,58,115,105,103,110,101,100,45,115,113,117,97,114,101,0,2049, - 10467,2049,11330,2049,10467,2049,10319,2049,10221,2049,10319,10,11599,11643,146,102,58,45,115,104, - 105,102,116,0,2049,11555,2049,10319,10,11631,11660,146,102,58,43,115,104,105,102,116, - 0,2049,11555,2049,10331,10,11648,11678,146,102,58,43,101,110,99,111,100,101,0,2049, - 11586,2049,11643,10,11665,11696,146,102,58,45,101,110,99,111,100,101,0,2049,10467,2049, - 11330,2049,11660,2049,10467,2049,10319,2049,10221,2049,10319,10,11599,11721,146,102,58,116,111,45, - 101,0,2049,10467,2049,11057,1793,11732,2049,10482,1,-2147483647,10,1,11727,2049,2653,2049,10467,2049, - 11072,1793,11747,2049,10482,1,2147483646,10,1,11742,2049,2653,2049,10467,2049,11088,1793,11762,2049,10482, - 1,-2147483646,10,1,11757,2049,2653,2049,11678,2049,11104,2049,10260,2049,11540,1,-2147483645,1,10482,2049, - 2373,1,2147483645,1,10482,2049,2373,10,11711,11797,146,101,58,116,111,45,102,0,1,-2147483647, - 1,10966,2049,2373,1,2147483646,1,10994,2049,2373,1,-2147483646,1,11025,2049,2373,2049,10221,2049,11696, - 10,11787,11831,146,102,58,115,116,111,114,101,0,1,11721,2049,2100,16,10,11820,11848, - 146,102,58,102,101,116,99,104,0,15,2049,11797,10,11837,11868,146,102,58,100,117, - 109,112,45,115,116,97,99,107,0,2049,10453,2,1,10629,2049,2275,1793,11886,2049,10643, - 2049,10467,2049,10905,2049,9222,10,1,11877,2049,2275,10,11852,11908,146,102,58,100,117,109, - 112,45,97,115,116,97,99,107,0,2049,10660,2,1,10643,2049,2275,1793,11926,2049,10467, - 2049,10905,2049,9222,2049,10629,10,1,11917,2049,2275,10,11891,11940,146,101,58,112,117,116, - 0,1,2147483645,1793,11957,2049,3646,101,58,77,65,88,0,1,11946,2049,9248,10,1,11944, - 2049,2373,1,-2147483645,1793,11978,2049,3646,101,58,77,73,78,0,1,11967,2049,9248,10,1, - 11965,2049,2373,1,0,1793,11997,2049,3646,101,58,48,0,1,11988,2049,9248,10,1,11986, - 2049,2373,1,-2147483647,1793,12018,2049,3646,101,58,78,65,78,0,1,12007,2049,9248,10,1, - 12005,2049,2373,1,2147483646,1793,12039,2049,3646,101,58,73,78,70,0,1,12028,2049,9248,10, - 1,12026,2049,2373,1,-2147483646,1793,12061,2049,3646,101,58,45,73,78,70,0,1,12049,2049, - 9248,10,1,12047,2049,2373,2049,11797,2049,10905,10,11931,12078,133,85,110,105,120,0,0, - 12070,12091,146,105,100,101,110,116,105,102,121,0,3841,12078,2049,2527,25,3,1,8, - 2049,9152,2,2049,2562,1793,12146,3,2049,3646,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,12109,2049,9248,2049,9211,10,1,12106,1793,12153,4097,12078,10,1,12150,2049,64,10,11931, - 12177,146,105,111,58,117,110,105,120,45,115,121,115,99,97,108,108,0,2049,12091, - 3841,12078,2049,9135,10,12158,12199,146,117,110,105,120,58,115,121,115,116,101,109,0, - 1,0,2049,12177,10,12184,12217,146,117,110,105,120,58,102,111,114,107,0,1,1, - 2049,12177,10,12204,12236,146,117,110,105,120,58,101,120,101,99,48,0,1,2,2049, - 12177,10,12222,12255,146,117,110,105,120,58,101,120,101,99,49,0,1,3,2049,12177, - 10,12241,12274,146,117,110,105,120,58,101,120,101,99,50,0,1,4,2049,12177,10, - 12260,12293,146,117,110,105,120,58,101,120,101,99,51,0,1,5,2049,12177,10,12279, - 12311,146,117,110,105,120,58,101,120,105,116,0,1,6,2049,12177,10,12298,12331,146, - 117,110,105,120,58,103,101,116,112,105,100,0,1,7,2049,12177,10,12316,12349,146, - 117,110,105,120,58,119,97,105,116,0,1,8,2049,12177,10,12336,12367,146,117,110, - 105,120,58,107,105,108,108,0,1,9,2049,12177,10,12354,12386,146,117,110,105,120, - 58,112,111,112,101,110,0,1,10,2049,12177,10,12372,12406,146,117,110,105,120,58, - 112,99,108,111,115,101,0,1,11,2049,12177,10,12391,12425,146,117,110,105,120,58, - 99,104,100,105,114,0,1,13,2049,12177,10,12411,12445,146,117,110,105,120,58,103, - 101,116,101,110,118,0,1,14,2049,12177,10,12430,12465,146,117,110,105,120,58,112, - 117,116,101,110,118,0,1,15,2049,12177,10,12450,12484,146,117,110,105,120,58,115, - 108,101,101,112,0,1,16,2049,12177,10,12470,12502,146,117,110,105,120,58,112,105, - 112,101,0,1,0,2049,12386,1,9889,1,12406,2049,2122,10,12489,12529,146,117,110,105, - 120,58,103,101,116,45,99,119,100,0,2049,3646,112,119,100,0,1,12531,2049,12502, - 2049,5990,2049,3646,47,0,1,12543,2049,3852,10,12513,12577,146,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,3646, - 108,115,32,45,49,32,124,32,119,99,32,45,108,0,1,12579,2049,12502,2049,5990, - 2049,222,10,12550,12624,146,117,110,105,120,58,102,111,114,45,101,97,99,104,45, - 102,105,108,101,0,2049,3646,108,115,32,45,49,32,45,112,0,1,12626,1,0, - 2049,12386,2049,12577,1793,12659,1793,12654,2049,9889,2049,3601,67502597,8,10,1,12647,2049,2110,10, - 1,12645,2049,2275,2049,12406,3,10,12602,12676,146,115,116,97,114,116,0,4,2049,3428, - 1,0,2049,12386,10,12667,12692,146,114,101,97,100,0,2,2049,9530,2,2049,3336,2049, - 2527,10,12684,12711,146,102,105,110,105,115,104,0,2049,12406,2049,3408,10,12602,12735,146, - 117,110,105,120,58,115,108,117,114,112,45,112,105,112,101,0,1793,12746,2049,12676, - 1,12692,2049,2250,2049,12711,10,1,12737,2049,3452,10,12716,12757,133,105,111,0,0,12751, - 12770,146,105,100,101,110,116,105,102,121,0,3841,12757,2049,2527,25,3,1,10,2049, - 9152,2,2049,2562,1793,12825,3,2049,3646,73,79,32,68,69,86,73,67,69,32,84, - 89,80,69,32,48,48,49,48,32,78,79,84,32,70,79,85,78,68,0,1, - 12788,2049,9248,2049,9211,10,1,12785,1793,12832,4097,12757,10,1,12829,2049,64,10,12716,12857, - 146,105,111,58,114,110,103,45,111,112,101,114,97,116,105,111,110,0,2049,12770, - 3841,12757,2049,9135,10,12837,12876,146,110,58,114,97,110,100,111,109,0,2049,12857,10, - 12864,12890,133,83,111,99,107,101,116,115,0,0,12879,12903,146,105,100,101,110,116, - 105,102,121,0,3841,12890,2049,2527,25,3,1,7,2049,9152,2,2049,2562,1793,12958,3, - 2049,3646,73,79,32,68,69,86,73,67,69,32,84,89,80,69,32,48,48,48, - 55,32,78,79,84,32,70,79,85,78,68,0,1,12921,2049,9248,2049,9211,10,1, - 12918,1793,12965,4097,12890,10,1,12962,2049,64,10,12864,12990,146,115,111,99,107,101,116, - 58,111,112,101,114,97,116,105,111,110,0,2049,12903,3841,12890,2049,9135,10,12970,13021, - 146,115,111,99,107,101,116,58,103,101,116,104,111,115,116,98,121,110,97,109, - 101,0,1,0,2049,12990,10,12997,13043,146,115,111,99,107,101,116,58,99,114,101, - 97,116,101,0,1,1,2049,12990,10,13026,13063,146,115,111,99,107,101,116,58,98, - 105,110,100,0,1,2,2049,12990,10,13048,13085,146,115,111,99,107,101,116,58,108, - 105,115,116,101,110,0,1,3,2049,12990,10,13068,13107,146,115,111,99,107,101,116, - 58,97,99,99,101,112,116,0,1,4,2049,12990,10,13090,13130,146,115,111,99,107, - 101,116,58,99,111,110,110,101,99,116,0,1,5,2049,12990,10,13112,13150,146,115, - 111,99,107,101,116,58,115,101,110,100,0,1,6,2049,12990,10,13135,13170,146,115, - 111,99,107,101,116,58,114,101,99,118,0,1,8,2049,12990,10,13155,13191,146,115, - 111,99,107,101,116,58,99,108,111,115,101,0,1,10,2049,12990,10,13175,13216,146, - 115,111,99,107,101,116,58,99,111,110,102,105,103,117,114,101,0,1,11,2049, - 12990,10,13196,13234,133,83,99,114,105,112,116,105,110,103,0,6,13221,13247,146,105, - 100,101,110,116,105,102,121,0,3841,13234,2049,2527,25,3,1,9,2049,9152,2,2049, - 2562,1793,13302,3,2049,3646,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,13265,2049,9248, - 2049,9211,10,1,13262,1793,13309,4097,13234,10,1,13306,2049,64,10,13196,13334,146,115,99, - 114,105,112,116,58,97,114,103,117,109,101,110,116,115,0,2049,13247,1,0,3841, - 13234,2049,9135,10,13314,13366,146,115,99,114,105,112,116,58,103,101,116,45,97,114, - 103,117,109,101,110,116,0,2049,3627,4,2049,13247,1,1,3841,13234,2049,9135,10,13343, - 13389,146,105,110,99,108,117,100,101,0,2049,13247,1,2,3841,13234,2049,9135,10,13378, - 13413,146,115,99,114,105,112,116,58,110,97,109,101,0,2049,3627,2049,13247,1,3, - 3841,13234,2049,9135,10,13398,13447,146,115,99,114,105,112,116,58,99,117,114,114,101, - 110,116,45,102,105,108,101,0,2049,3627,2049,13247,1,4,3841,13234,2049,9135,10,13424, - 13481,146,115,99,114,105,112,116,58,99,117,114,114,101,110,116,45,108,105,110, - 101,0,2049,13247,1,5,3841,13234,2049,9135,10,13458,13514,146,115,99,114,105,112,116, - 58,105,103,110,111,114,101,45,116,111,45,101,111,108,0,2049,13247,1,6,3841, - 13234,2049,9135,10,13490,13547,146,115,99,114,105,112,116,58,97,98,111,114,116,45, - 105,110,99,108,117,100,101,0,2049,13247,1,7,3841,13234,2049,9135,10,13523,13565,146, - 97,98,111,114,116,0,1,126,2049,3047,2049,13247,1,8,3841,13234,2049,9135,10,13556, - 13587,133,67,108,111,99,107,0,0,13578,13600,146,105,100,101,110,116,105,102,121, - 0,3841,13587,2049,2527,25,3,1,5,2049,9152,2,2049,2562,1793,13655,3,2049,3646,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,13618,2049,9248,2049,9211,10,1,13615,1793,13662, - 4097,13587,10,1,13659,2049,64,10,13556,13686,146,99,108,111,99,107,58,111,112,101, - 114,97,116,105,111,110,0,2049,13600,3841,13587,2049,9135,10,13667,13712,146,99,108,111, - 99,107,58,116,105,109,101,115,116,97,109,112,0,1,0,2049,13686,10,13693,13730, - 146,99,108,111,99,107,58,100,97,121,0,1,1,2049,13686,10,13717,13750,146,99, - 108,111,99,107,58,109,111,110,116,104,0,1,2,2049,13686,10,13735,13769,146,99, - 108,111,99,107,58,121,101,97,114,0,1,3,2049,13686,10,13755,13788,146,99,108, - 111,99,107,58,104,111,117,114,0,1,4,2049,13686,10,13774,13809,146,99,108,111, - 99,107,58,109,105,110,117,116,101,0,1,5,2049,13686,10,13793,13830,146,99,108, - 111,99,107,58,115,101,99,111,110,100,0,1,6,2049,13686,10,13814,13852,146,99, - 108,111,99,107,58,117,116,99,58,100,97,121,0,1,7,2049,13686,10,13835,13876, - 146,99,108,111,99,107,58,117,116,99,58,109,111,110,116,104,0,1,8,2049, - 13686,10,13857,13899,146,99,108,111,99,107,58,117,116,99,58,121,101,97,114,0, - 1,9,2049,13686,10,13881,13922,146,99,108,111,99,107,58,117,116,99,58,104,111, - 117,114,0,1,10,2049,13686,10,13904,13947,146,99,108,111,99,107,58,117,116,99, - 58,109,105,110,117,116,101,0,1,11,2049,13686,10,13927,13972,146,99,108,111,99, - 107,58,117,116,99,58,115,101,99,111,110,100,0,1,12,2049,13686,10,13952,1024, - 133,84,73,66,0,13977,13998,146,105,109,97,103,101,58,115,97,118,101,0,1, - 1000,2049,9152,2049,9135,10,13984,14014,146,99,58,103,101,116,0,1,1,2049,9152,2049, - 9135,10,14005,14030,146,101,100,105,116,63,0,2,1793,14037,1,8,11,10,1,14033, - 1793,14045,1,127,11,10,1,14041,2049,2122,22,10,14021,14061,146,103,97,116,104,101, - 114,0,2049,14030,1,11,1,3336,2049,64,10,14051,14079,146,99,121,99,108,101,0, - 2049,14014,2049,2090,4,8,2049,2459,25,3,2049,14061,1,14079,7,10,14005,14110,146,112, - 97,114,115,101,45,117,110,116,105,108,0,1793,14122,2049,3627,2049,3428,2049,14079,771, - 2049,3302,10,1,14112,2049,3452,10,14095,14136,146,115,58,103,101,116,0,1793,14158,1793, - 14144,1,10,11,10,1,14140,1793,14152,1,13,11,10,1,14148,2049,2122,22,10,1, - 14138,2049,14110,10,14127,14177,146,115,58,103,101,116,45,119,111,114,100,0,1,5592, - 2049,14110,10,14163,14191,146,99,108,101,97,114,0,2049,3646,92,94,91,50,74,92, - 94,91,48,59,48,72,0,1,14193,2049,7225,2049,9248,10,14182,14223,133,78,111,69, - 99,104,111,0,0,14213,14231,146,98,121,101,0,1,0,2049,12311,10,14224,14243,133, - 69,79,84,0,0,14236,14256,133,73,103,110,111,114,105,110,103,0,0,14244,14270, - 146,105,103,110,111,114,105,110,103,63,0,3841,14256,10,14257,14284,146,118,101,114, - 115,105,111,110,0,3841,4,1,100,20,10,14273,14299,146,100,111,110,101,63,0, - 2,4097,14243,1793,14308,1,13,11,10,1,14304,1793,14316,1,10,11,10,1,14312,1793, - 14324,1,32,11,10,1,14320,2049,2159,22,22,10,14290,14339,146,101,111,108,63,0, - 3841,14243,1793,14347,1,13,11,10,1,14343,1793,14355,1,10,11,10,1,14351,2049,2122, - 22,10,14331,14371,146,118,97,108,105,100,63,0,2,2049,81,2049,2609,10,14361,14390, - 146,99,104,101,99,107,45,101,111,102,0,2,1793,14397,1,-1,11,10,1,14393, - 1793,14405,1,4,11,10,1,14401,2049,2122,22,1,14231,9,10,14377,14420,146,98,115, - 0,2049,3360,2049,3360,771,10,14414,14438,146,99,104,101,99,107,45,98,115,0,2, - 1793,14445,1,8,11,10,1,14441,1793,14453,1,127,11,10,1,14449,2049,2122,22,1, - 14420,9,10,14426,14471,146,99,104,101,99,107,0,2049,14390,2049,14438,10,14462,14489,146, - 99,104,97,114,97,99,116,101,114,0,2049,14014,2,2049,3336,10,14476,14505,146,98, - 117,102,102,101,114,0,1793,14515,1,1024,2049,3428,8,2049,3302,10,1,14507,2049,3452, - 10,14495,14534,146,114,101,97,100,45,116,111,107,101,110,0,1793,14550,1793,14545,2049, - 14489,2049,14471,2049,14299,10,1,14538,2049,2250,10,1,14536,2049,14505,2049,3724,10,14520,14566, - 146,105,110,112,117,116,0,2049,14534,2049,14371,10,14557,14582,146,112,114,111,99,101, - 115,115,0,2049,14270,1793,14600,771,2049,14339,1793,14596,1,14256,2049,3047,10,1,14591,9, - 10,1,14586,2049,2653,1,369,1,11,2049,64,10,14224,14617,158,47,47,0,2049,13514, - 1,14256,2049,3034,10,14611,14634,146,98,97,110,110,101,114,0,2049,14284,2049,3646,82, - 69,84,82,79,32,49,50,32,40,37,110,46,37,110,41,92,110,0,1,14638, - 2049,7225,2049,9248,2049,1543,2049,1874,18,2049,1874,2049,1543,2049,3646,37,110,32,77,97, - 120,44,32,37,110,32,85,115,101,100,44,32,37,110,32,70,114,101,101,92, - 110,0,1,14674,2049,7225,2049,9248,10,14624,14718,146,108,105,115,116,101,110,0,3841, - 14223,1793,14725,2049,14634,10,1,14722,2049,72,2049,14566,2049,14582,1,14729,7,10,14708,14748, - 146,100,58,119,111,114,100,115,0,1793,14757,2049,164,2049,9248,2049,9222,10,1,14750, - 2049,7454,10,14737,14778,146,100,58,119,111,114,100,115,45,119,105,116,104,0,2049, - 1874,2049,4648,1793,14809,2049,164,2,2049,1874,2049,4162,1793,14798,2049,9248,2049,9222,10,1, - 14793,1793,14804,3,10,1,14802,2049,64,10,1,14784,2049,7454,10,14762,14833,146,100,105, - 115,112,108,97,121,45,105,102,45,108,101,102,116,0,2,2049,1874,2049,4598,1793, - 14845,2049,9248,2049,9222,10,1,14840,1793,14851,3,10,1,14849,2049,64,10,14762,14882,146, - 100,58,119,111,114,100,115,45,98,101,103,105,110,110,105,110,103,45,119,105, - 116,104,0,2049,1874,2049,4648,1793,14893,2049,164,2049,14833,10,1,14888,2049,7454,10,0 }; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,6550,6694,133,84,80,0,0,6688,6703,146,115, + 97,118,101,0,2049,3666,3841,6694,1,6560,17,2049,2884,16,1,6694,2049,2982,10,6695, + 6726,146,110,101,120,116,0,1793,6732,3841,6549,17,10,1,6728,2049,2105,10,6718,6746, + 146,100,111,110,101,63,0,2049,81,2049,2521,10,6355,6775,146,115,58,116,111,107, + 101,110,105,122,101,45,111,110,45,115,116,114,105,110,103,0,1,0,4097,6694, + 1793,6789,2,1,6414,2049,4641,2049,3845,10,1,6781,1793,6798,2049,81,4097,6549,10,1, + 6793,2049,2117,1793,6815,1,6414,2049,6228,2049,6703,2049,6726,2049,6746,10,1,6804,2049,2245, + 1,6560,3841,6694,2049,2897,4097,6560,10,6751,6840,146,102,111,114,45,101,97,99,104, + 0,4,2049,56,1,13,2049,2095,1793,6856,5,2049,56,84018692,525572,1542,10,1,6849,2049, + 2270,771,10,6828,6876,146,115,117,98,115,116,105,116,117,116,101,0,2049,3511,1, + 129,18,10,6862,6893,146,101,120,116,114,97,99,116,0,2049,6876,2049,4641,10,6882, + 6910,146,116,111,107,101,110,105,122,101,0,2049,6775,2049,3621,10,6898,6926,146,99, + 111,109,98,105,110,101,0,2049,6876,2049,3845,2049,3845,10,6915,6942,146,109,101,114, + 103,101,0,4,1,6926,2049,6840,772,10,6933,6961,146,102,105,110,100,45,101,110, + 100,0,2,2049,81,2049,6876,2049,81,18,67502597,17,10,6949,6981,146,99,108,101,97, + 110,0,2049,6961,1,0,4,16,10,6751,7005,146,115,58,114,101,112,108,97,99, + 101,45,97,108,108,0,1,3,1793,7020,2049,6893,2049,6910,2049,6942,2049,6981,2049,3595, + 10,1,7009,2049,3073,10,6988,7033,146,99,104,97,114,0,1,32,1793,7042,1,95, + 2049,3330,10,1,7037,2049,2367,1,114,1793,7055,1,13,2049,3330,10,1,7050,2049,2367, + 1,110,1793,7068,1,10,2049,3330,10,1,7063,2049,2367,1,116,1793,7081,1,9,2049, + 3330,10,1,7076,2049,2367,1,48,1793,7094,1,0,2049,3330,10,1,7089,2049,2367,1, + 94,1793,7107,1,27,2049,3330,10,1,7102,2049,2367,2049,3330,10,7025,7122,146,116,121, + 112,101,0,1,99,1793,7130,4,2049,3330,10,1,7126,2049,2367,1,115,1793,7144,4, + 1,3330,2049,3863,10,1,7138,2049,2367,1,110,1793,7160,4,2049,6033,1,3330,2049,3863, + 10,1,7152,2049,2367,3,10,7114,7176,146,104,97,110,100,108,101,0,1,92,1793, + 7185,2049,56,2049,7033,10,1,7180,2049,2367,1,37,1793,7198,2049,56,2049,7122,10,1, + 7193,2049,2367,2049,3330,10,6988,7217,146,115,58,102,111,114,109,97,116,0,1793,7246, + 2049,3621,1793,7241,2049,3422,1793,7236,2049,56,25,2049,7176,1,7227,7,10,1,7227,8, + 3,10,1,7223,2049,2105,10,1,7219,2049,3446,10,7205,7262,146,115,58,99,111,110, + 115,116,0,1,3666,2049,2095,2049,2011,10,7251,7279,133,86,97,108,117,101,115,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,7269,7315,146,102,114,111,109,0,2049,81,2,1793, + 7333,1793,7326,1,7279,4113,10,1,7322,2049,2105,2049,2897,10,1,7320,2049,2270,3,10, + 7307,7345,146,116,111,0,2,2049,81,1793,7361,2049,56,1,97,18,2049,2884,1,7279, + 266001,10,1,7350,2049,2270,3,10,7251,7378,146,114,101,111,114,100,101,114,0,1, + 7315,2049,2095,2049,7345,10,7367,7394,146,99,117,114,114,121,0,2049,1871,1793,7404,4, + 2049,1728,2049,1751,10,1,7398,2049,2095,10,7385,7417,146,100,111,101,115,0,2049,1587, + 4,2049,7394,2049,1570,2049,160,16,1,146,2049,1646,10,7409,7446,146,100,58,102,111, + 114,45,101,97,99,104,0,1,2,1793,7472,6415,2049,2085,1793,7464,1793,7459,2052,10, + 1,7457,2049,2095,10,1,7455,2049,2095,1,7450,7,10,1,7450,8,3,10,7432,7492, + 146,100,58,108,111,111,107,117,112,45,120,116,0,1,0,4,1793,7517,2049,2085, + 2049,160,2831,1793,7510,4,1,2046,2049,2095,10,1,7504,1,11,2049,64,10,1,7497, + 2049,7446,3,10,7477,7535,146,97,58,108,101,110,103,116,104,0,15,10,7523,7558, + 146,97,58,99,111,117,110,116,101,100,45,114,101,115,117,108,116,115,0,8, + 2049,1871,1793,7571,2,2049,107,1,107,2049,2270,10,1,7563,2049,2095,10,7537,7593,146, + 97,58,102,114,111,109,45,115,116,114,105,110,103,0,2049,1871,1793,7607,2,2049, + 81,2049,107,1,107,2049,3863,10,1,7597,2049,2095,10,7576,7626,146,97,58,102,111, + 114,45,101,97,99,104,0,4,2049,56,1,13,2049,2095,1793,7642,5,2049,56,84018692, + 525572,1542,10,1,7635,2049,2270,771,10,7612,7657,146,97,58,100,117,112,0,2049,1871, + 1793,7670,2,15,2049,107,1,107,2049,7626,10,1,7661,2049,2095,10,7648,7685,146,97, + 58,99,111,112,121,0,1,3,1793,7701,4097,3,2,2049,7535,2049,107,1,107,2049, + 7626,10,1,7689,2049,3073,10,7675,7721,146,97,58,116,111,45,115,116,114,105,110, + 103,0,1,3,1793,7734,2049,7657,1,0,2049,107,2049,2884,10,1,7725,2049,3073,2049, + 3595,10,7706,7753,146,97,58,97,112,112,101,110,100,0,2049,2085,1,34,2049,2143, + 17,2049,1871,1793,7778,2049,107,1793,7773,1,107,2049,7626,10,1,7768,2049,2143,10,1, + 7764,2049,2095,10,7741,7796,146,97,58,112,114,101,112,101,110,100,0,4,2049,7753, + 10,7783,7810,146,97,58,99,104,111,112,0,2049,7657,1,-1,2049,3054,2,2049,2997, + 10,7800,7832,146,97,58,102,105,108,116,101,114,0,1793,7847,67502597,1,21,2049,2095, + 4,1,107,1,11,2049,64,10,1,7834,2049,7394,2049,1871,1793,7862,67502597,15,2049,107, + 2049,7626,10,1,7855,2049,2095,2049,1871,67502597,18,2049,2897,67502597,16,10,7820,7890,146,97, + 58,99,111,110,116,97,105,110,115,63,0,1,0,4,1793,7902,4,5,67502597,11, + 6,22,10,1,7895,2049,7626,772,10,7875,7930,146,97,58,99,111,110,116,97,105, + 110,115,45,115,116,114,105,110,103,63,0,1,0,4,1793,7943,4,5,67502597,2049, + 95,6,22,10,1,7935,2049,7626,772,10,7908,7958,146,97,58,109,97,112,0,1793, + 7964,8,2049,107,10,1,7960,2049,7394,2049,1871,1793,7979,67502597,15,2049,107,2049,7626,10, + 1,7972,2049,2095,10,7949,7997,146,97,58,114,101,118,101,114,115,101,0,2049,1871, + 1793,8031,2049,56,1793,8009,17,2049,2897,10,1,8005,2049,2105,2,2049,107,1793,8025,2, + 15,2049,107,2049,2897,10,1,8018,2049,2270,3,10,1,8001,2049,2095,10,7984,8044,146, + 97,58,116,104,0,17,2049,2884,10,8036,8059,146,97,58,102,101,116,99,104,0, + 2049,8044,15,10,8048,8074,146,97,58,115,116,111,114,101,0,2049,8044,16,10,8063, + 8090,146,97,58,114,101,100,117,99,101,0,1,13,2049,2095,2049,7626,10,8078,8109, + 146,105,100,101,110,116,105,102,121,0,1,-1,4,1,0,1793,8140,2049,2344,11, + 1793,8134,67502597,1,-1,11,1793,8130,772,2,10,1,8127,9,10,1,8121,9,2049,2884, + 10,1,8116,2049,8090,3,10,8078,8160,146,97,58,105,110,100,101,120,45,111,102, + 0,1,3,1793,8173,1,26,2049,7394,2049,7958,2049,8109,10,1,8164,2049,3073,10,8146, + 8199,146,97,58,105,110,100,101,120,45,111,102,45,115,116,114,105,110,103,0, + 1,3,1793,8212,1,95,2049,7394,2049,7958,2049,8109,10,1,8203,2049,3073,10,8178,8227, + 146,97,58,109,97,107,101,0,2049,7558,2,2,1,3,1793,8238,2049,7997,10,1, + 8235,2049,3073,4,2049,7685,10,8217,8251,158,123,0,1,288,2049,158,1,1556,2049,146, + 1,288,2049,158,10,8246,8269,158,125,0,1,304,2049,158,1,2095,2049,146,1,1556, + 2049,146,1,13,2049,152,1,40,2049,152,1,2897,2049,146,1,304,2049,158,1,8227, + 2049,146,10,8264,8313,146,98,111,117,110,100,115,63,0,67502597,2049,7535,67502597,13,10, + 8302,8327,146,99,111,112,121,0,2049,56,2049,107,10,8319,8342,146,116,111,45,101, + 110,100,0,2,2049,7535,17,2049,2884,10,8264,8359,146,97,58,108,101,102,116,0, + 2049,8313,1793,8367,771,1,-1,10,1,8363,2049,2647,2049,1871,67502597,2049,107,1793,8388,1, + 2884,2049,2095,1,8327,2049,2270,3,10,1,8378,2049,2095,10,8349,8404,146,97,58,114, + 105,103,104,116,0,2049,8313,1793,8412,771,1,-1,10,1,8408,2049,2647,2049,1871,67502597, + 2049,107,1793,8435,4,2049,8342,67502597,18,4,1,8327,2049,2270,3,10,1,8423,2049,2095, + 10,8393,8452,146,97,58,109,105,100,100,108,101,0,1,2037,2049,2095,4,67502597,2049, + 8313,1793,8467,771,3,1,-1,10,1,8462,2049,2647,771,2049,2085,4,18,2049,2884,2049, + 1871,67502597,2049,107,1793,8502,772,1793,8492,17,2049,2884,10,1,8488,2049,2095,1,8327,2049, + 2270,3,10,1,8485,2049,2095,10,8440,8515,133,70,108,97,103,0,0,8507,8527,146, + 99,111,109,112,97,114,101,0,67440386,184946434,10,8516,8540,146,108,101,110,103,116,104, + 0,659202,10,8530,8550,146,110,101,120,116,0,17043713,1,1,2577,10,8542,8568,146,110, + 111,116,45,101,113,117,97,108,0,50529030,2561,0,10,8555,8580,146,108,111,111,112, + 0,524549,8550,2049,8527,18157313,8515,8515,16,420610310,1,1,8580,7,10,8440,8603,146,97,58, + 101,113,63,0,1048833,-1,8515,2049,8527,151066369,-1,8568,2049,8540,2049,8580,251724547,8515,10,8594, + 8628,146,97,58,45,101,113,63,0,2049,8603,2049,2453,10,8618,8651,146,97,58,98, + 101,103,105,110,115,45,119,105,116,104,63,0,1,3,1793,8667,2,2049,7535,1, + 13,2049,2095,2049,8359,2049,8603,10,1,8655,2049,3073,10,8633,8688,146,97,58,101,110, + 100,115,45,119,105,116,104,63,0,1,3,1793,8704,2,2049,7535,1,13,2049,2095, + 2049,8404,2049,8603,10,1,8692,2049,3073,10,8672,8725,146,99,117,114,114,101,110,116, + 45,108,105,110,101,0,2049,3511,1,1025,18,10,8709,8747,146,99,111,117,110,116, + 45,116,111,107,101,110,115,0,1793,8753,1,32,11,10,1,8749,2049,4420,2049,81, + 10,8731,8778,146,112,114,111,99,101,115,115,45,116,111,107,101,110,115,0,1793, + 8806,1,32,2049,6193,4,1793,8799,2,2049,81,2049,2537,1,368,1,11,2049,64,10, + 1,8787,2049,2095,2049,2884,10,1,8780,2049,2270,2049,368,10,8672,8827,146,115,58,101, + 118,97,108,117,97,116,101,0,2049,8725,2049,4641,2049,8725,2,2049,8747,2049,8778,10, + 8813,8845,133,76,80,0,0,8839,8855,133,73,110,100,101,120,0,0,9,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,8846,8895,146,110,101,120,116,0,3841,8845,1,8855, + 17,2049,2982,10,8887,8911,146,112,114,101,112,0,1,8845,2049,2982,1,0,3841,8845, + 1,8855,17,16,10,8903,8932,146,100,111,110,101,0,1,8845,2049,2997,10,8813,8942, + 146,73,0,3841,8845,1,8855,17,15,10,8937,8954,146,74,0,3841,8845,1,8855,17, + 2049,2897,15,10,8949,8968,146,75,0,3841,8845,1,8855,17,1,2,18,15,10,8963, + 8995,146,105,110,100,101,120,101,100,45,116,105,109,101,115,0,2049,8911,4,1793, + 9011,25,33886721,1,2053,1542,2049,8895,1,9000,7,10,1,9000,8,3,2049,8932,10,8978, + 9026,158,104,111,111,107,0,2049,3640,108,105,106,117,46,46,46,46,0,1,9028, + 2049,415,2049,1871,2049,2884,2049,107,10,9018,9060,146,115,101,116,45,104,111,111,107, + 0,2049,2884,16,10,9048,9074,146,117,110,104,111,111,107,0,2049,2884,2,2049,2884, + 4,16,10,9064,9098,146,105,111,58,101,110,117,109,101,114,97,116,101,0,27, + 10,9082,9112,146,105,111,58,113,117,101,114,121,0,28,10,9100,9127,146,105,111, + 58,105,110,118,111,107,101,0,29,10,9114,9144,146,105,111,58,115,99,97,110, + 45,102,111,114,0,1,-1,4,2049,9098,1793,9175,2049,8942,2049,9112,772,67502597,11,1793, + 9171,1793,9166,3,2049,8942,10,1,9162,2049,2095,10,1,9160,9,10,1,9151,2049,8995, + 3,10,9129,9190,146,99,58,112,117,116,0,1793,9192,1,0,2049,9127,10,9181,9203, + 146,110,108,0,1,10,2049,9190,10,9197,9214,146,115,112,0,1,32,2049,9190,10, + 9208,9226,146,116,97,98,0,1,9,2049,9190,10,9219,9240,146,115,58,112,117,116, + 0,1,9190,2049,3863,10,9231,9254,146,110,58,112,117,116,0,2049,6033,2049,9240,10, + 9245,9268,146,114,101,115,101,116,0,2049,1556,25,771,1,9268,7,10,9259,9290,146, + 100,117,109,112,45,115,116,97,99,107,0,2049,1556,25,134284547,9290,134283782,9254,2049,9214, + 10,9276,9308,146,70,82,69,69,0,2049,3511,1,1025,18,2049,1871,18,10,9300,9326, + 133,70,105,108,101,115,0,0,9317,9339,146,105,100,101,110,116,105,102,121,0, + 3841,9326,2049,2521,25,3,1,4,2049,9144,2,2049,2556,1793,9394,3,2049,3640,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,9357,2049,9240,2049,9203,10,1,9354,1793,9401,4097, + 9326,10,1,9398,2049,64,10,9300,9424,146,102,105,108,101,58,111,112,101,114,97, + 116,105,111,110,0,2049,9339,3841,9326,2049,9127,10,9406,0,133,102,105,108,101,58, + 82,0,9431,1,133,102,105,108,101,58,87,0,9441,2,133,102,105,108,101,58, + 65,0,9451,3,133,102,105,108,101,58,82,43,0,9461,9485,146,102,105,108,101, + 58,111,112,101,110,0,1,0,2049,9424,10,9472,9504,146,102,105,108,101,58,99, + 108,111,115,101,0,1,1,2049,9424,10,9490,9522,146,102,105,108,101,58,114,101, + 97,100,0,1,2,2049,9424,10,9509,9541,146,102,105,108,101,58,119,114,105,116, + 101,0,1,3,2049,9424,10,9527,9559,146,102,105,108,101,58,116,101,108,108,0, + 1,4,2049,9424,10,9546,9577,146,102,105,108,101,58,115,101,101,107,0,1,5, + 2049,9424,10,9564,9595,146,102,105,108,101,58,115,105,122,101,0,1,6,2049,9424, + 10,9582,9615,146,102,105,108,101,58,100,101,108,101,116,101,0,1,7,2049,9424, + 10,9600,9634,146,102,105,108,101,58,102,108,117,115,104,0,1,8,2049,9424,10, + 9620,9655,146,102,105,108,101,58,101,120,105,115,116,115,63,0,1,0,2049,9485, + 2,2049,2537,1793,9669,2049,9504,2049,2344,10,1,9664,1793,9677,3,2049,2356,10,1,9673, + 2049,64,10,9639,9707,146,102,105,108,101,58,111,112,101,110,45,102,111,114,45, + 114,101,97,100,105,110,103,0,1,0,2049,9485,2,2049,9595,4,10,9682,9740,146, + 102,105,108,101,58,111,112,101,110,45,102,111,114,45,97,112,112,101,110,100, + 0,1,2,2049,9485,2,2049,9595,4,10,9716,9774,146,102,105,108,101,58,111,112, + 101,110,45,102,111,114,45,119,114,105,116,105,110,103,0,1,1,2049,9485,10, + 9749,9786,133,70,73,68,0,0,9779,9795,133,83,105,122,101,0,0,9787,9806,133, + 65,99,116,105,111,110,0,0,9796,9817,133,66,117,102,102,101,114,0,0,9807, + 9827,146,45,101,111,102,63,0,3841,9786,2049,9559,3841,9795,13,10,9818,9847,146,112, + 114,101,115,101,114,118,101,0,1,9786,1793,9858,1,9795,1,21,2049,3073,10,1, + 9851,2049,3073,10,9749,9881,146,102,105,108,101,58,114,101,97,100,45,108,105,110, + 101,0,4097,9786,1793,9938,2049,1871,2,4097,9817,2049,3422,1793,9930,3841,9786,2049,9522,2, + 2049,3330,1793,9907,1,13,11,10,1,9903,1793,9915,1,10,11,10,1,9911,1793,9923, + 1,0,11,10,1,9919,2049,2154,22,22,10,1,9894,2049,2245,2049,3354,3,10,1, + 9885,2049,3446,3841,9817,10,9863,9967,146,102,105,108,101,58,102,111,114,45,101,97, + 99,104,45,108,105,110,101,0,1793,9998,4097,9806,2049,9707,4097,9786,4097,9795,1793,9989, + 3841,9786,2049,9881,3841,9806,8,2049,9827,10,1,9979,2049,2222,3841,9786,2049,9504,10,1, + 9969,2049,9847,10,9945,10010,133,70,73,68,0,0,9945,10025,146,102,105,108,101,58, + 115,108,117,114,112,0,1793,10052,4,2049,3422,2049,9707,4097,10010,1793,10043,3841,10010,2049, + 9522,2049,3330,10,1,10036,2049,2270,3841,10010,2049,9504,10,1,10027,2049,3446,10,10011,10070, + 146,102,105,108,101,58,115,112,101,119,0,2049,9774,4,1793,10079,67502597,2049,9541,10, + 1,10075,2049,3863,2049,9504,10,10057,10093,133,70,80,85,0,0,10086,10106,146,105,100, + 101,110,116,105,102,121,0,3841,10093,2049,2521,25,3,1,2,2049,9144,2,2049,2556, + 1793,10161,3,2049,3640,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,9240,2049, + 9203,10,1,10121,1793,10168,4097,10093,10,1,10165,2049,64,10,10057,10192,146,102,108,111, + 97,116,58,111,112,101,114,97,116,105,111,110,0,2049,10106,3841,10093,2049,9127,10, + 10173,10213,146,110,58,116,111,45,102,108,111,97,116,0,1,0,2049,10192,10,10199, + 10232,146,115,58,116,111,45,102,108,111,97,116,0,1,1,2049,10192,10,10218,10252, + 146,102,58,116,111,45,110,117,109,98,101,114,0,1,2,2049,10192,10,10237,10272, + 146,102,58,116,111,45,115,116,114,105,110,103,0,2049,3621,2,1,3,2049,10192, + 10,10257,10287,146,102,58,43,0,1,4,2049,10192,10,10280,10299,146,102,58,45,0, + 1,5,2049,10192,10,10292,10311,146,102,58,42,0,1,6,2049,10192,10,10304,10323,146, + 102,58,47,0,1,7,2049,10192,10,10316,10339,146,102,58,102,108,111,111,114,0, + 1,8,2049,10192,10,10328,10357,146,102,58,99,101,105,108,105,110,103,0,1,9, + 2049,10192,10,10344,10372,146,102,58,115,113,114,116,0,1,10,2049,10192,10,10362,10386, + 146,102,58,101,113,63,0,1,11,2049,10192,10,10377,10401,146,102,58,45,101,113, + 63,0,1,12,2049,10192,10,10391,10415,146,102,58,108,116,63,0,1,13,2049,10192, + 10,10406,10429,146,102,58,103,116,63,0,1,14,2049,10192,10,10420,10445,146,102,58, + 100,101,112,116,104,0,1,15,2049,10192,10,10434,10459,146,102,58,100,117,112,0, + 1,16,2049,10192,10,10450,10474,146,102,58,100,114,111,112,0,1,17,2049,10192,10, + 10464,10489,146,102,58,115,119,97,112,0,1,18,2049,10192,10,10479,10503,146,102,58, + 108,111,103,0,1,19,2049,10192,10,10494,10519,146,102,58,112,111,119,101,114,0, + 1,20,2049,10192,10,10508,10533,146,102,58,115,105,110,0,1,21,2049,10192,10,10524, + 10547,146,102,58,99,111,115,0,1,22,2049,10192,10,10538,10561,146,102,58,116,97, + 110,0,1,23,2049,10192,10,10552,10576,146,102,58,97,115,105,110,0,1,24,2049, + 10192,10,10566,10591,146,102,58,97,99,111,115,0,1,25,2049,10192,10,10581,10606,146, + 102,58,97,116,97,110,0,1,26,2049,10192,10,10596,10621,146,102,58,112,117,115, + 104,0,1,27,2049,10192,10,10611,10635,146,102,58,112,111,112,0,1,28,2049,10192, + 10,10626,10652,146,102,58,97,100,101,112,116,104,0,1,29,2049,10192,10,10640,10667, + 146,102,58,111,118,101,114,0,2049,10621,2049,10459,2049,10635,2049,10489,10,10657,10686,146, + 102,58,116,117,99,107,0,2049,10459,2049,10621,2049,10489,2049,10635,10,10676,10704,146,102, + 58,110,105,112,0,2049,10489,2049,10474,10,10695,10724,146,102,58,100,114,111,112,45, + 112,97,105,114,0,2049,10474,2049,10474,10,10709,10743,146,102,58,100,117,112,45,112, + 97,105,114,0,2049,10667,2049,10667,10,10729,10757,146,102,58,114,111,116,0,2049,10621, + 2049,10489,2049,10635,2049,10489,10,10748,10777,158,115,105,103,105,108,58,46,0,2049,1815, + 1,3666,1,3595,2049,64,1,10232,2049,146,10,10766,10802,146,102,58,115,113,117,97, + 114,101,0,2049,10459,2049,10311,10,10790,10822,146,102,58,112,111,115,105,116,105,118, + 101,63,0,1,0,2049,10213,2049,10429,10,10807,10844,146,102,58,110,101,103,97,116, + 105,118,101,63,0,1,0,2049,10213,2049,10415,10,10829,10863,146,102,58,110,101,103, + 97,116,101,0,1,-1,2049,10213,2049,10311,10,10851,10879,146,102,58,97,98,115,0, + 2049,10459,2049,10844,1,10863,9,10,10870,10896,146,102,58,112,117,116,0,2049,10272,2049, + 9240,10,10887,10909,146,102,58,80,73,0,2049,3640,51,46,49,52,49,53,57,50, + 0,1,10911,2049,10232,10,10901,10932,146,102,58,69,0,2049,3640,50,46,55,49,56, + 50,56,49,0,1,10934,2049,10232,10,10925,10957,146,102,58,78,65,78,0,2049,3640, + 48,0,1,10959,2049,10232,2049,3640,48,0,1,10967,2049,10232,2049,10323,10,10948,10985,146, + 102,58,73,78,70,0,2049,3640,49,46,48,0,1,10987,2049,10232,2049,3640,48,0, + 1,10997,2049,10232,2049,10323,10,10976,11016,146,102,58,45,73,78,70,0,2049,3640,45, + 49,46,48,0,1,11018,2049,10232,2049,3640,48,0,1,11029,2049,10232,2049,10323,10,11006, + 11048,146,102,58,110,97,110,63,0,2049,10459,2049,10401,10,11038,11063,146,102,58,105, + 110,102,63,0,2049,10985,2049,10386,10,11053,11079,146,102,58,45,105,110,102,63,0, + 2049,11016,2049,10386,10,11068,11095,146,102,58,114,111,117,110,100,0,2049,10459,2049,10844, + 1793,11116,2049,3640,48,46,53,0,1,11103,2049,10232,2049,10299,2049,10357,10,1,11101,1793, + 11135,2049,3640,48,46,53,0,1,11122,2049,10232,2049,10287,2049,10339,10,1,11120,2049,64, + 10,11084,11149,146,102,58,109,105,110,0,2049,10743,2049,10415,1,10474,1,10704,2049,64, + 10,11140,11169,146,102,58,109,97,120,0,2049,10743,2049,10429,1,10474,1,10704,2049,64, + 10,11160,11191,146,102,58,108,105,109,105,116,0,2049,10489,2049,10621,2049,11149,2049,10635, + 2049,11169,10,11180,11216,146,102,58,98,101,116,119,101,101,110,63,0,2049,10757,2049, + 10459,2049,10621,2049,10757,2049,10757,2049,11191,2049,10635,2049,10386,10,11202,11242,146,102,58,105, + 110,99,0,2049,3640,49,0,1,11244,2049,10232,2049,10287,10,11233,11262,146,102,58,100, + 101,99,0,2049,3640,49,0,1,11264,2049,10232,2049,10299,10,11253,11283,146,102,58,99, + 97,115,101,0,2049,10667,2049,10386,1793,11295,2049,10474,8,1,-1,10,1,11289,1793,11303, + 3,1,0,10,1,11299,2049,64,25,6,771,10,11273,11321,146,102,58,115,105,103, + 110,0,2049,10459,2049,3640,48,0,1,11325,2049,10232,2049,10386,1793,11340,1,0,2049,10474, + 10,1,11335,2049,2647,2049,3640,48,0,1,11346,2049,10232,2049,10429,1793,11359,1,1,10, + 1,11356,1793,11366,1,-1,10,1,11363,2049,64,10,11311,2147483645,133,101,58,77,65,88, + 0,11371,-2147483645,133,101,58,77,73,78,0,11380,-2147483647,133,101,58,78,65,78,0,11389, + 2147483646,133,101,58,73,78,70,0,11398,-2147483646,133,101,58,45,73,78,70,0,11407,11425, + 146,101,58,110,63,0,1,-2147483645,2049,2884,1,2147483645,2049,2897,2049,2915,10,11417,11446,146, + 101,58,109,97,120,63,0,1,2147483645,11,10,11436,11460,146,101,58,109,105,110,63, + 0,1,-2147483645,11,10,11450,11475,146,101,58,122,101,114,111,63,0,2049,2521,10,11464, + 11488,146,101,58,110,97,110,63,0,1,-2147483647,11,10,11478,11502,146,101,58,105,110, + 102,63,0,1,2147483646,11,10,11492,11517,146,101,58,45,105,110,102,63,0,1,-2147483646, + 11,10,11506,11531,146,101,58,99,108,105,112,0,1,-2147483645,1,2147483645,2049,2867,10,11521, + 11546,146,102,58,69,49,0,1793,11548,2049,3640,49,46,101,53,0,1,11550,2049,10232, + 10,11538,11577,146,102,58,115,105,103,110,101,100,45,115,113,114,116,0,2049,10459, + 2049,11321,2049,10879,2049,10372,2049,10213,2049,10311,10,11560,11609,146,102,58,115,105,103,110, + 101,100,45,115,113,117,97,114,101,0,2049,10459,2049,11321,2049,10459,2049,10311,2049,10213, + 2049,10311,10,11590,11634,146,102,58,45,115,104,105,102,116,0,2049,11546,2049,10311,10, + 11622,11651,146,102,58,43,115,104,105,102,116,0,2049,11546,2049,10323,10,11639,11669,146, + 102,58,43,101,110,99,111,100,101,0,2049,11577,2049,11634,10,11656,11687,146,102,58, + 45,101,110,99,111,100,101,0,2049,10459,2049,11321,2049,11651,2049,10459,2049,10311,2049,10213, + 2049,10311,10,11590,11712,146,102,58,116,111,45,101,0,2049,10459,2049,11048,1793,11723,2049, + 10474,1,-2147483647,10,1,11718,2049,2647,2049,10459,2049,11063,1793,11738,2049,10474,1,2147483646,10,1, + 11733,2049,2647,2049,10459,2049,11079,1793,11753,2049,10474,1,-2147483646,10,1,11748,2049,2647,2049,11669, + 2049,11095,2049,10252,2049,11531,1,-2147483645,1,10474,2049,2367,1,2147483645,1,10474,2049,2367,10,11702, + 11788,146,101,58,116,111,45,102,0,1,-2147483647,1,10957,2049,2367,1,2147483646,1,10985,2049, + 2367,1,-2147483646,1,11016,2049,2367,2049,10213,2049,11687,10,11778,11822,146,102,58,115,116,111, + 114,101,0,1,11712,2049,2095,16,10,11811,11839,146,102,58,102,101,116,99,104,0, + 15,2049,11788,10,11828,11859,146,102,58,100,117,109,112,45,115,116,97,99,107,0, + 2049,10445,2,1,10621,2049,2270,1793,11877,2049,10635,2049,10459,2049,10896,2049,9214,10,1,11868, + 2049,2270,10,11843,11899,146,102,58,100,117,109,112,45,97,115,116,97,99,107,0, + 2049,10652,2,1,10635,2049,2270,1793,11917,2049,10459,2049,10896,2049,9214,2049,10621,10,1,11908, + 2049,2270,10,11882,11931,146,101,58,112,117,116,0,1,2147483645,1793,11948,2049,3640,101,58, + 77,65,88,0,1,11937,2049,9240,10,1,11935,2049,2367,1,-2147483645,1793,11969,2049,3640,101, + 58,77,73,78,0,1,11958,2049,9240,10,1,11956,2049,2367,1,0,1793,11988,2049,3640, + 101,58,48,0,1,11979,2049,9240,10,1,11977,2049,2367,1,-2147483647,1793,12009,2049,3640,101, + 58,78,65,78,0,1,11998,2049,9240,10,1,11996,2049,2367,1,2147483646,1793,12030,2049,3640, + 101,58,73,78,70,0,1,12019,2049,9240,10,1,12017,2049,2367,1,-2147483646,1793,12052,2049, + 3640,101,58,45,73,78,70,0,1,12040,2049,9240,10,1,12038,2049,2367,2049,11788,2049, + 10896,10,11922,12069,133,85,110,105,120,0,0,12061,12082,146,105,100,101,110,116,105, + 102,121,0,3841,12069,2049,2521,25,3,1,8,2049,9144,2,2049,2556,1793,12137,3,2049, + 3640,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,12100,2049,9240,2049,9203,10,1,12097, + 1793,12144,4097,12069,10,1,12141,2049,64,10,11922,12168,146,105,111,58,117,110,105,120, + 45,115,121,115,99,97,108,108,0,2049,12082,3841,12069,2049,9127,10,12149,12190,146,117, + 110,105,120,58,115,121,115,116,101,109,0,1,0,2049,12168,10,12175,12208,146,117, + 110,105,120,58,102,111,114,107,0,1,1,2049,12168,10,12195,12227,146,117,110,105, + 120,58,101,120,101,99,48,0,1,2,2049,12168,10,12213,12246,146,117,110,105,120, + 58,101,120,101,99,49,0,1,3,2049,12168,10,12232,12265,146,117,110,105,120,58, + 101,120,101,99,50,0,1,4,2049,12168,10,12251,12284,146,117,110,105,120,58,101, + 120,101,99,51,0,1,5,2049,12168,10,12270,12302,146,117,110,105,120,58,101,120, + 105,116,0,1,6,2049,12168,10,12289,12322,146,117,110,105,120,58,103,101,116,112, + 105,100,0,1,7,2049,12168,10,12307,12340,146,117,110,105,120,58,119,97,105,116, + 0,1,8,2049,12168,10,12327,12358,146,117,110,105,120,58,107,105,108,108,0,1, + 9,2049,12168,10,12345,12377,146,117,110,105,120,58,112,111,112,101,110,0,1,10, + 2049,12168,10,12363,12397,146,117,110,105,120,58,112,99,108,111,115,101,0,1,11, + 2049,12168,10,12382,12416,146,117,110,105,120,58,99,104,100,105,114,0,1,13,2049, + 12168,10,12402,12436,146,117,110,105,120,58,103,101,116,101,110,118,0,1,14,2049, + 12168,10,12421,12456,146,117,110,105,120,58,112,117,116,101,110,118,0,1,15,2049, + 12168,10,12441,12475,146,117,110,105,120,58,115,108,101,101,112,0,1,16,2049,12168, + 10,12461,12493,146,117,110,105,120,58,112,105,112,101,0,1,0,2049,12377,1,9881, + 1,12397,2049,2117,10,12480,12520,146,117,110,105,120,58,103,101,116,45,99,119,100, + 0,2049,3640,112,119,100,0,1,12522,2049,12493,2049,5983,2049,3640,47,0,1,12534,2049, + 3845,10,12504,12568,146,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,3640,108,115,32,45,49,32,124,32,119, + 99,32,45,108,0,1,12570,2049,12493,2049,5983,2049,222,10,12541,12615,146,117,110,105, + 120,58,102,111,114,45,101,97,99,104,45,102,105,108,101,0,2049,3640,108,115, + 32,45,49,32,45,112,0,1,12617,1,0,2049,12377,2049,12568,1793,12650,1793,12645,2049, + 9881,2049,3595,67502597,8,10,1,12638,2049,2105,10,1,12636,2049,2270,2049,12397,3,10,12593, + 12667,146,115,116,97,114,116,0,4,2049,3422,1,0,2049,12377,10,12658,12683,146,114, + 101,97,100,0,2,2049,9522,2,2049,3330,2049,2521,10,12675,12702,146,102,105,110,105, + 115,104,0,2049,12397,2049,3402,10,12593,12726,146,117,110,105,120,58,115,108,117,114, + 112,45,112,105,112,101,0,1793,12737,2049,12667,1,12683,2049,2245,2049,12702,10,1,12728, + 2049,3446,10,12707,12748,133,105,111,0,0,12742,12761,146,105,100,101,110,116,105,102, + 121,0,3841,12748,2049,2521,25,3,1,10,2049,9144,2,2049,2556,1793,12816,3,2049,3640, + 73,79,32,68,69,86,73,67,69,32,84,89,80,69,32,48,48,49,48,32, + 78,79,84,32,70,79,85,78,68,0,1,12779,2049,9240,2049,9203,10,1,12776,1793, + 12823,4097,12748,10,1,12820,2049,64,10,12707,12848,146,105,111,58,114,110,103,45,111, + 112,101,114,97,116,105,111,110,0,2049,12761,3841,12748,2049,9127,10,12828,12867,146,110, + 58,114,97,110,100,111,109,0,2049,12848,10,12855,12881,133,83,111,99,107,101,116, + 115,0,0,12870,12894,146,105,100,101,110,116,105,102,121,0,3841,12881,2049,2521,25, + 3,1,7,2049,9144,2,2049,2556,1793,12949,3,2049,3640,73,79,32,68,69,86,73, + 67,69,32,84,89,80,69,32,48,48,48,55,32,78,79,84,32,70,79,85, + 78,68,0,1,12912,2049,9240,2049,9203,10,1,12909,1793,12956,4097,12881,10,1,12953,2049, + 64,10,12855,12981,146,115,111,99,107,101,116,58,111,112,101,114,97,116,105,111, + 110,0,2049,12894,3841,12881,2049,9127,10,12961,13012,146,115,111,99,107,101,116,58,103, + 101,116,104,111,115,116,98,121,110,97,109,101,0,1,0,2049,12981,10,12988,13034, + 146,115,111,99,107,101,116,58,99,114,101,97,116,101,0,1,1,2049,12981,10, + 13017,13054,146,115,111,99,107,101,116,58,98,105,110,100,0,1,2,2049,12981,10, + 13039,13076,146,115,111,99,107,101,116,58,108,105,115,116,101,110,0,1,3,2049, + 12981,10,13059,13098,146,115,111,99,107,101,116,58,97,99,99,101,112,116,0,1, + 4,2049,12981,10,13081,13121,146,115,111,99,107,101,116,58,99,111,110,110,101,99, + 116,0,1,5,2049,12981,10,13103,13141,146,115,111,99,107,101,116,58,115,101,110, + 100,0,1,6,2049,12981,10,13126,13161,146,115,111,99,107,101,116,58,114,101,99, + 118,0,1,8,2049,12981,10,13146,13182,146,115,111,99,107,101,116,58,99,108,111, + 115,101,0,1,10,2049,12981,10,13166,13207,146,115,111,99,107,101,116,58,99,111, + 110,102,105,103,117,114,101,0,1,11,2049,12981,10,13187,13225,133,83,99,114,105, + 112,116,105,110,103,0,6,13212,13238,146,105,100,101,110,116,105,102,121,0,3841, + 13225,2049,2521,25,3,1,9,2049,9144,2,2049,2556,1793,13293,3,2049,3640,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,13256,2049,9240,2049,9203,10,1,13253,1793,13300,4097,13225, + 10,1,13297,2049,64,10,13187,13325,146,115,99,114,105,112,116,58,97,114,103,117, + 109,101,110,116,115,0,2049,13238,1,0,3841,13225,2049,9127,10,13305,13357,146,115,99, + 114,105,112,116,58,103,101,116,45,97,114,103,117,109,101,110,116,0,2049,3621, + 4,2049,13238,1,1,3841,13225,2049,9127,10,13334,13380,146,105,110,99,108,117,100,101, + 0,2049,13238,1,2,3841,13225,2049,9127,10,13369,13404,146,115,99,114,105,112,116,58, + 110,97,109,101,0,2049,3621,2049,13238,1,3,3841,13225,2049,9127,10,13389,13438,146,115, + 99,114,105,112,116,58,99,117,114,114,101,110,116,45,102,105,108,101,0,2049, + 3621,2049,13238,1,4,3841,13225,2049,9127,10,13415,13472,146,115,99,114,105,112,116,58, + 99,117,114,114,101,110,116,45,108,105,110,101,0,2049,13238,1,5,3841,13225,2049, + 9127,10,13449,13505,146,115,99,114,105,112,116,58,105,103,110,111,114,101,45,116, + 111,45,101,111,108,0,2049,13238,1,6,3841,13225,2049,9127,10,13481,13538,146,115,99, + 114,105,112,116,58,97,98,111,114,116,45,105,110,99,108,117,100,101,0,2049, + 13238,1,7,3841,13225,2049,9127,10,13514,13556,146,97,98,111,114,116,0,1,126,2049, + 3041,2049,13238,1,8,3841,13225,2049,9127,10,13547,13578,133,67,108,111,99,107,0,0, + 13569,13591,146,105,100,101,110,116,105,102,121,0,3841,13578,2049,2521,25,3,1,5, + 2049,9144,2,2049,2556,1793,13646,3,2049,3640,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,13609,2049,9240,2049,9203,10,1,13606,1793,13653,4097,13578,10,1,13650,2049,64,10,13547, + 13677,146,99,108,111,99,107,58,111,112,101,114,97,116,105,111,110,0,2049,13591, + 3841,13578,2049,9127,10,13658,13703,146,99,108,111,99,107,58,116,105,109,101,115,116, + 97,109,112,0,1,0,2049,13677,10,13684,13721,146,99,108,111,99,107,58,100,97, + 121,0,1,1,2049,13677,10,13708,13741,146,99,108,111,99,107,58,109,111,110,116, + 104,0,1,2,2049,13677,10,13726,13760,146,99,108,111,99,107,58,121,101,97,114, + 0,1,3,2049,13677,10,13746,13779,146,99,108,111,99,107,58,104,111,117,114,0, + 1,4,2049,13677,10,13765,13800,146,99,108,111,99,107,58,109,105,110,117,116,101, + 0,1,5,2049,13677,10,13784,13821,146,99,108,111,99,107,58,115,101,99,111,110, + 100,0,1,6,2049,13677,10,13805,13843,146,99,108,111,99,107,58,117,116,99,58, + 100,97,121,0,1,7,2049,13677,10,13826,13867,146,99,108,111,99,107,58,117,116, + 99,58,109,111,110,116,104,0,1,8,2049,13677,10,13848,13890,146,99,108,111,99, + 107,58,117,116,99,58,121,101,97,114,0,1,9,2049,13677,10,13872,13913,146,99, + 108,111,99,107,58,117,116,99,58,104,111,117,114,0,1,10,2049,13677,10,13895, + 13938,146,99,108,111,99,107,58,117,116,99,58,109,105,110,117,116,101,0,1, + 11,2049,13677,10,13918,13963,146,99,108,111,99,107,58,117,116,99,58,115,101,99, + 111,110,100,0,1,12,2049,13677,10,13943,1024,133,84,73,66,0,13968,13989,146,105, + 109,97,103,101,58,115,97,118,101,0,1,1000,2049,9144,2049,9127,10,13975,14005,146, + 99,58,103,101,116,0,1,1,2049,9144,2049,9127,10,13996,14021,146,101,100,105,116, + 63,0,2,1793,14028,1,8,11,10,1,14024,1793,14036,1,127,11,10,1,14032,2049, + 2117,22,10,14012,14052,146,103,97,116,104,101,114,0,2049,14021,1,11,1,3330,2049, + 64,10,14042,14070,146,99,121,99,108,101,0,2049,14005,2049,2085,4,8,2049,2453,25, + 3,2049,14052,1,14070,7,10,13996,14101,146,112,97,114,115,101,45,117,110,116,105, + 108,0,1793,14113,2049,3621,2049,3422,2049,14070,771,2049,3296,10,1,14103,2049,3446,10,14086, + 14127,146,115,58,103,101,116,0,1793,14149,1793,14135,1,10,11,10,1,14131,1793,14143, + 1,13,11,10,1,14139,2049,2117,22,10,1,14129,2049,14101,10,14118,14168,146,115,58, + 103,101,116,45,119,111,114,100,0,1,5585,2049,14101,10,14154,14182,146,99,108,101, + 97,114,0,2049,3640,92,94,91,50,74,92,94,91,48,59,48,72,0,1,14184, + 2049,7217,2049,9240,10,14173,14214,133,78,111,69,99,104,111,0,0,14204,14222,146,98, + 121,101,0,1,0,2049,12302,10,14215,14234,133,69,79,84,0,0,14227,14247,133,73, + 103,110,111,114,105,110,103,0,0,14235,14261,146,105,103,110,111,114,105,110,103, + 63,0,3841,14247,10,14248,14275,146,118,101,114,115,105,111,110,0,3841,4,1,100, + 20,10,14264,14290,146,100,111,110,101,63,0,2,4097,14234,1793,14299,1,13,11,10, + 1,14295,1793,14307,1,10,11,10,1,14303,1793,14315,1,32,11,10,1,14311,2049,2154, + 22,22,10,14281,14330,146,101,111,108,63,0,3841,14234,1793,14338,1,13,11,10,1, + 14334,1793,14346,1,10,11,10,1,14342,2049,2117,22,10,14322,14362,146,118,97,108,105, + 100,63,0,2,2049,81,2049,2603,10,14352,14381,146,99,104,101,99,107,45,101,111, + 102,0,2,1793,14388,1,-1,11,10,1,14384,1793,14396,1,4,11,10,1,14392,2049, + 2117,22,1,14222,9,10,14368,14411,146,98,115,0,2049,3354,2049,3354,771,10,14405,14429, + 146,99,104,101,99,107,45,98,115,0,2,1793,14436,1,8,11,10,1,14432,1793, + 14444,1,127,11,10,1,14440,2049,2117,22,1,14411,9,10,14417,14462,146,99,104,101, + 99,107,0,2049,14381,2049,14429,10,14453,14480,146,99,104,97,114,97,99,116,101,114, + 0,2049,14005,2,2049,3330,10,14467,14496,146,98,117,102,102,101,114,0,1793,14506,1, + 1024,2049,3422,8,2049,3296,10,1,14498,2049,3446,10,14486,14525,146,114,101,97,100,45, + 116,111,107,101,110,0,1793,14541,1793,14536,2049,14480,2049,14462,2049,14290,10,1,14529,2049, + 2245,10,1,14527,2049,14496,2049,3717,10,14511,14557,146,105,110,112,117,116,0,2049,14525, + 2049,14362,10,14548,14573,146,112,114,111,99,101,115,115,0,2049,14261,1793,14591,771,2049, + 14330,1793,14587,1,14247,2049,3041,10,1,14582,9,10,1,14577,2049,2647,1,368,1,11, + 2049,64,10,14215,14608,158,47,47,0,2049,13505,1,14247,2049,3028,10,14602,14625,146,98, + 97,110,110,101,114,0,2049,14275,2049,3640,82,69,84,82,79,32,49,50,32,40, + 37,110,46,37,110,41,92,110,0,1,14629,2049,7217,2049,9240,2049,1543,2049,1871,18, + 2049,1871,2049,1543,2049,3640,37,110,32,77,97,120,44,32,37,110,32,85,115,101, + 100,44,32,37,110,32,70,114,101,101,92,110,0,1,14665,2049,7217,2049,9240,10, + 14615,14709,146,108,105,115,116,101,110,0,3841,14214,1793,14716,2049,14625,10,1,14713,2049, + 72,2049,14557,2049,14573,1,14720,7,10,14699,14739,146,100,58,119,111,114,100,115,0, + 1793,14748,2049,164,2049,9240,2049,9214,10,1,14741,2049,7446,10,14728,14769,146,100,58,119, + 111,114,100,115,45,119,105,116,104,0,2049,1871,2049,4641,1793,14800,2049,164,2,2049, + 1871,2049,4155,1793,14789,2049,9240,2049,9214,10,1,14784,1793,14795,3,10,1,14793,2049,64, + 10,1,14775,2049,7446,10,14753,14824,146,100,105,115,112,108,97,121,45,105,102,45, + 108,101,102,116,0,2,2049,1871,2049,4591,1793,14836,2049,9240,2049,9214,10,1,14831,1793, + 14842,3,10,1,14840,2049,64,10,14753,14873,146,100,58,119,111,114,100,115,45,98, + 101,103,105,110,110,105,110,103,45,119,105,116,104,0,2049,1871,2049,4641,1793,14884, + 2049,164,2049,14824,10,1,14879,2049,7446,10,0 };