From 4bfd864f10b68b71482b35c818559068ef8d5797 Mon Sep 17 00:00:00 2001 From: Thomas Voss Date: Wed, 27 Nov 2024 20:54:24 +0100 Subject: doc: Add RFC documents --- doc/rfc/rfc726.txt | 944 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 944 insertions(+) create mode 100644 doc/rfc/rfc726.txt (limited to 'doc/rfc/rfc726.txt') diff --git a/doc/rfc/rfc726.txt b/doc/rfc/rfc726.txt new file mode 100644 index 0000000..f483e04 --- /dev/null +++ b/doc/rfc/rfc726.txt @@ -0,0 +1,944 @@ + + NWG/RFC# 726 JBP DHC 8-MAR-77 08:29 39237 + Remote Controlled Transmission & Echoing Telnet Option + + + + Network Working Group Jon Postel & Dave Crocker + Request for Comments: 726 SRI-ARC UC Irvine + NIC: 39237 8 March 1977 + + + + Remote Controlled Transmssion and Echoing Telnet Option + + + 1 + + 1. Command name and code: 2 + + RCTE 7 2a + + 2. Command meanings: 3 + + IAC WILL RCTE 3a + + The sender of this command REQUESTS or AGREES to use + the RCTE option, and will send instructions for + controlling the other side's terminal printer. 3a1 + + IAC WON'T RCTE 3b + + The sender of this option REFUSES to send instructions + for controlling the other side's terminal printer. 3b1 + + IAC DO RCTE 3c + + The sender REQUEST or AGREES to have the other side + (sender of WILL RCTE) issue commands which will control + his (sender of the DO) output to the terminal printer. 3c1 + + IAC DON'T RCTE 3d + + The sender of this command REFUSES to allow the other + side to control his (sender of DON'T) terminal printer. 3d1 + + IAC SB RCTE [BC1 BC2] [TC1 TC2] IAC SE 3e + + where: 3e1 + + is one 8-bit byte having the following flags + (bits are counted from the right): 3e1a + + + + + + + + [page 1] + + NWG/RFC# 726 JBP DHC 8-MAR-77 08:29 39237 + Remote Controlled Transmission & Echoing Telnet Option + + + + Bit Meaning 3e1b + + 0 0 = Ignore all other bits in this byte and + repeat the last that was sent. Equals + a 'continue what you have been doing'. + 1 = Perform actions as indicated by other bits + in this byte. 3e1c + + 1 0 = Print (echo) break character + 1 = Skip (don't echo) break character 3e1d + + 2 0 = Print (echo) text up to break character + 1 = Skip (don't echo) text up to break character 3e1e + + 3 0 = Continue using same classes of break + characters. + 1 = The two 8-bit bytes following this byte + contain flags for the new break classes. 3e1f + + 4 0 = Continue using same classes of transmit + characters. + 1 = Reset transmit classes according to the two + bytes following 1) the break classes bytes, + if the break classes are also being reset, + or 2) this byte, if the break classes are + NOT also being reset. 3e1g + + Value (decimal) of the byte and its meaning: 3e1h + + 0 = Continue what you have been doing 3e1i + + Even numbers greater than zero (i.e. numbers with the + right most bit off) are in error and should be + interpreted as equal to zero. When the is an + even number greater than zero, classes bytes TC1 & + TC2 and/or BC1 & BC2 must not be sent. 3e1j + + 1 = Print (echo) up to AND INCLUDING break character 3e1k + + 3 = Print up to break character and SKIP (don't echo) + break character 3e1l + + 5 = Skip text (don't echo) up to break character, but + PRINT break character 3e1m + + 7 = Skip up to and including break character 3e1n + + Add one of the previous non-zero values to one of the + following values, to get the total decimal value for + + + + [page 2] + + NWG/RFC# 726 JBP DHC 8-MAR-77 08:29 39237 + Remote Controlled Transmission & Echoing Telnet Option + + + + the byte (Note that classes may not be reset without + also resetting the printing action; so an odd number + is guaranteed): 3e1o + + 8 = Set break classes (using the next two bytes [BC1 + BC2]) 3e1p + + 16 = Set transmission classes (using the next two + bytes [TC1 TC2]) 3e1q + + 24 = Set break classes (using the next two bytes [BC1 + BC2]) and the transmission classes (using the two + bytes after that [TC1 TC2]). 3e1r + + Sub-commands (IAC SB RCTE...) are only sent by the + controlling host and, in addition to other functions, + functionally replace the Go-Ahead (IAC GA) Telnet + feature. RCTE also functionally replaces the Echo (IAC + ECHO) Telnet option. That is the Suppress Go-Ahead + option should be in force and the Echo option should + not be in force while the RCTE option is in use. The + echo mode on terminating use of the RCTE option should + be the default state, that is DON'T ECHO, WON'T ECHO. 3e2 + + Classes for break and transmission (the right-most bit + of the second byte (TC2 or BC2) represents class 1; the + left-most bit of the first byte (TC1 or BC1) represents + the currently undefined class 16: 3e3 + + 1: Upper-Case Letter (A-Z) 3e3a + + 2: Lower-case Letters (a-z) 3e3b + + 3: Numbers (0-9) 3e3c + + 4: Format Effectors ( ) 3e3d + + The sequence counts as one character when + processed as the Telnet end of line, and is a + single break character when class 4 is set. The + sequence counts as one character and + is a break character if and only if is a + break character (i.e. class 4 is set). + + 5: Non-format Effector Control Characters including + and 3e3e + + 6: . , ; : ? ! 3e3f + + + + + [page 3] + + NWG/RFC# 726 JBP DHC 8-MAR-77 08:29 39237 + Remote Controlled Transmission & Echoing Telnet Option + + + + 7: { [ ( < > ) ] } 3e3g + + 8: ' " / \ % @ $ & # + - * = ^ _ | ~ 3e3h + + 9: 3e3i + + And Telnet commands (IAC . . .) sent by the user are + always to have the effect of a break character. That + is, every instance of an IAC is to be treated as a + break character, except the sequence IAC IAC. 3e3j + + The representation to be displayed when printing is + called for is the obvious one for the visible + characters (classes 1, 2, 3, 6, 7, and 8). Space (class + 9) is represented by a blank space. The format + effectors (class 4) by their format effect. The + non-format effector controls (class 5) print nothing + (no space). 3e4 + + Initially no break classes or transmission classes are + in effect. 3e5 + + Please note that if all the bits are set in a Telnet + subcommand argument byte such as TC2 or BC2 then that + byte must be preceeded by an flag byte. This is + the common convention of doubling the escape character + to use its value as data. 3e6 + + Sub-commands (IAC SB RCTE...) are refered to as "break + reset commands". 3e7 + + 3. Default: 4 + + WON'T RCTE -- DON'T RCTE 4a + + Neither host asserts special control over the other + host's terminal printer. 4a1 + + 4. Motivation for the option: 5 + + RFC's 1, 5 and 51 discuss Network and process efficiency + and smoothness. 5a + + RFC 357, by John Davidson, introduces the problem of + echoing delay that occurs when a remote user accesses a + full-duplex host, thru a satellite link. In order to save + the many thousands of miles of transit time for each + echoed character, while still permitting full server + responsiveness and clean terminal output, an echo control + + + + [page 4] + + NWG/RFC# 726 JBP DHC 8-MAR-77 08:29 39237 + Remote Controlled Transmission & Echoing Telnet Option + + + + similar to that used by some time-sharing systems is + suggested for the entire Network. 5b + + In effect, the option described in this document + involves making a using host carefully regulate the + local terminal printer according to explicit + instructions from the remote (serving) host. 5b1 + + An important additional issue is efficient Network + transmission. Implementation of the Davidson Echoing + Scheme will eliminate almost all server-to-user echoing. 5c + + The option described in this document also requests + using hosts to buffer a terminal's input to the serving + host until it forms a useful unit (with "useful unit" + delimited by break or transmission characters as + described below). Therefore, fewer messages are sent on + the user-to-server path. 5c1 + + N.B.: This option is only intended for use with + full-duplex hosts. The Go-Ahead Telnet feature is + completely adequate for half-duplex server hosts. Also, + RCTE should be used in place of the ECHO Telnet option. + That is the Suppress Go-Ahead option should be in force + and the Echo option should not be in force while the RCTE + option is in use. 5d + + + + + + + + + + + + + + + + + + + + + + + + + + + [page 5] + + NWG/RFC# 726 JBP DHC 8-MAR-77 08:29 39237 + Remote Controlled Transmission & Echoing Telnet Option + + + + 5. Explicit description of control mechanism: 6 + + User Terminal Printing Action & Control Procedure 6a + + Negotiate the use of the RCTE option. Once the option + is in force the user Telnet follows the following + procedure. 6a1 + + 1) Read an item from the network. 6a2 + + If the item is data, then print it and go to 1. 6a2a + + If the item is a command, then set the classes and go + to 2. 6a2b + + 2) If the terminal input buffer is empty, then go to 3, + else go to 4. 6a3 + + 3) Wait for an item to appear either from the terminal + or from the network. 6a4 + + If an item appears from the terminal, then go to 4. 6a4a + + If a data item appears from the network, then print + it and go to 3. 6a4b + + If a command appears from the network, then an error + has occured. 6a4c + + 4) Read an item from the terminal input buffer. 6a5 + + If the item is not a break, then print/skip it and go + to 2. 6a5a + + If the item is a break, then print/skip it and go to + 1. 6a5b + + Note: Output from the server host may occur at any + time, such "spontaneous output" is printed in step 3. 6a6 + + + + + + + + + + + + + + [page 6] + + NWG/RFC# 726 JBP DHC 8-MAR-77 08:29 39237 + Remote Controlled Transmission & Echoing Telnet Option + + + + Explanation: 6b + + Both Hosts agree to use the RCTE option. After that, + the using host (IAC DO RCTE) merely acts upon the + controlling (serving) host's commands and does not + issue any RCTE commands unless and until it (using + host) decides to stop allowing use of the option (by + sending IAC DON'T RCTE). 6b1 + + 1) The using host is synchronized with the server by + initially and when ever it returns to step 1 suspending + terminal echo printing until it receives a command from + the server. 6b2 + + The server may send either output to the terminal + printer or a command, and usually sends a both. 6b3 + + The server may send output to the terminal printer + either in response to user input or spontaneously. In + the former case, the output is processed in step 1. In + the latter case, the output is processed in step 3. 6b4 + + Server sends an RCTE command. The command may redefine + break and transmission classes, action to be performed + on break characters, and action to be performed on + text. Each of these independent functions is controlled + by separate bits in the byte. 6b5 + + A transmission character is one which RECOMMENDS that + the using host transmit all text accumulated up to + and including its occurrence. (For network + efficiency, using hosts are DISCOURAGED (but not + prohibited) from sending before the occurrence of a + transmission character, as defined at the moment the + character is typed). 6b5a + + If the transmission classes bit (bit 4) is on, the + two bytes following the two break classes bytes (or + immediately following the byte, if the break + classes bit is not on) will indicate what classes + are to be enabled. + + If the bit is OFF, the transmission classes remain + unchanged. When the RCTE option is first initiated, + NO CLASSES are in effect. That is, no character + will be considered a transmission character. (As if + both TC1 and TC2 are zero.) + + A break character REQUIRES that the using host + + + + [page 7] + + NWG/RFC# 726 JBP DHC 8-MAR-77 08:29 39237 + Remote Controlled Transmission & Echoing Telnet Option + + + + transmit all text accumulated up to and including its + occurrence and also causes the using host to stop its + print/discard action upon the user's input text, + until directed to do otherwise by another IAC SB RCTE + IAC SE command from the serving host. Break + characters therefore define printing units. "Break + character" as used in this document does NOT mean + Telnet Break character. 6b5b + + If the break classes bit (bit 3) is on, the two + bytes following will indicate what classes + are to be enabled. There are currently nine (9) + classes defined, with room for expansion. + + If the bit is OFF, the break classes remain + unchanged. When the RCTE option is initiated, NO + CLASSES are to be in effect. That is, no + transmission will take place in the user to server + direction until the first break reset command is + received by the user from the server. + + The list of character classes, used to define break + and transmission classes are listed at the end of + this document, in the Tables Section. 6b5c + + Because break characters are special, the + print/discard action that should be performed upon + them is not always the same as should be performed + upon the rest of the input text. 6b5d + + For example, while typing a filename to TENEX, I + want the text of the filename to be printed + (echoed); but I do not want the (if I use + the name completion feature) to be printed. + + If bit 1 is ON the break character is NOT to be + printed. + + A separate bit (bit 2) signals whether or not the + text itself should be printed (echoed) to the + terminal. If bit 2 = 0, then the text IS to be + printed. 6b5e + + Yet another bit (bit 0 - right-most bit) signals + whether or not any of the other bits of the command + should be checked. If this bit is OFF, then the + command should be interpreted to mean "continue + whatever echoing strategy you have been following, + using the same break and transmission classes." 6b5f + + + + [page 8] + + NWG/RFC# 726 JBP DHC 8-MAR-77 08:29 39237 + Remote Controlled Transmission & Echoing Telnet Option + + + + 2) The user Telnet now checks the terminal input + buffer, if it contains data it is processed in step 4, + otherwise the user Telnet waits in step 3 for further + developments. 6b6 + + 3) The user Telnet waits until either the human user + enters some data in which case Telnet proceeeds to step + 4, or an item is received from the network. If the item + from the network is data it is spontaneous output and + is printed, Telnet then continues to wait. If the item + from the network is a command then an error has + occured. In this case the user Telnet may attempt to + resynchronize the use of RCTE as indicated below. 6b7 + + 4) Items from the terminal are processed with printing + controlled by the settings of the latest break reset + command. When a break character is processed, the cycle + of control is complete and action re-commences at step + 1. 6b8 + + Input from the terminal is (hopefully) buffered into + units ending with a transmission or break character; + and echoing of input text is suspended after the + occurrence of a break character and until receipt of a + break reset command from the serving host. The most + recent break reset command determines the break + actions. 6b9 + + In summary, what is required is that for every break + character sent in the user to server direction there be + a break reset command sent in the server to user + direction. The user host initially has no knowledge of + which characters are break characters and so starts in + a state that assumes that there are no break characters + and also that no echoing is to be provided. The server + host is expected to send a break reset command to + establish the break classes and the echoing mode before + it receives any data from the user. 6b10 + + Synchronization and Resynchronization: 6c + + The serving and using hosts must carefully synchronize + break reset commands with the transmission of break + characters. Except at the beginning of an interaction, + the serving host may only send a break reset command in + response to the Using host's having sent a break + character as defined at that time. This should + establish a one-to-one correspondence between them. (A + value of zero, in this context, is interpreted as + + + + [page 9] + + NWG/RFC# 726 JBP DHC 8-MAR-77 08:29 39237 + Remote Controlled Transmission & Echoing Telnet Option + + + + a break classes reset to the same class(es) as before.) + The break reset command may be preceded by terminal + output. 6c1 + + The re-synchronization of the break characters and the + break reset commands is done via the exchange of the + Telnet signal Abort Output (AO) in the server to user + direction and the SYNCH in the user to server + direction. 6c2 + + Suppose the server wants to resynchronize the break + characters and the break reset commands. 6c3 + + a. The server should be sure all output to the + terminal has been printed by using, for example, the + Timing Mark Option. 6c3a + + b. The server sends the AO signal. 6c3b + + c. The user receives the AO signal. The user flushes + all user to server data wheather it has been echoed + or not. The user sends a SYNCH to the server. [The + SYNCH consists of the Telnet Data Mark (DM) and the + host-to-host interrupt (INS).] The user now enters + the initial state at step 1. 6c3c + + d. The server receives the SYNCH and flushes any + data preceeding the DM (as always). The server now + sends a break reset command. (Actually the break + reset command could be sent at any time following the + AO.) 6c3d + + Suppose the user wants to resynchronize the break + characters and the break reset commands. 6c4 + + a. The user should discard all user to server data + wheather it has been echoed or not. 6c4a + + b. The user sends the AO signal. The user now enters + the algorithm at step 1. 6c4b + + c. The server receives the AO signal. The server + discards all data buffered but not yet sent to the + user. The server sends a SYNCH to the user. The + server sends a break reset command to the user. 6c4c + + + + + + + + [page 10] + + NWG/RFC# 726 JBP DHC 8-MAR-77 08:29 39237 + Remote Controlled Transmission & Echoing Telnet Option + + + + Notes and Comments: 6d + + Even-numbered commands, greater than zero, are in + error, since they will have the low-order bit off. The + command should be interpreted as equal to zero, which + means that any classes reset bytes ([TC1 TC2] [BC1 + BC2]) will be in error. (The IAC SE, at the end of the + command, eliminates any parsing problems due to this + error.) 6d1 + + Serving hosts will generally instruct using hosts not + to echo break characters, even though it might be + alright to echo most break characters. For example, + is usually a safe character to echo but is + not. TENEX Exec is willing to accept either, during + filename specification. Therefore, the using host must + be instructed not to echo any break characters. 6d2 + + This is generally a tolerable problem, since the + serving host has to send an RCTE command at this + point, anyhow. Adding an echo for the break character + to the message will not cause any extra network + traffic. 6d2a + + The RCTE Option entails a rather large overhead. In a + true character-at-a-time situation, this overhead is + not justified. But on the average, it should result in + significant savings, both in network traffic and host + wake-ups. 6d3 + + Buffering Problems and Transmission vs. Printing + Constraints: 6d4 + + There are NO mandatory transmission constraints. The + using host is allowed to send a character a time, + though this would be a waste of RCTE. The + transmission classes commands are GUIDELINES, so + deviating from them, as when the user's buffer gets + full, is allowed. 6d4a + + Additionally, the using host may send a break class + character, without knowing that it is one (as with + type-ahead). 6d4b + + If the user implementation is clever it may send + the user entered data to the server before it is + actually needed. This type ahead data may contain + break characters. + + + + + [page 11] + + NWG/RFC# 726 JBP DHC 8-MAR-77 08:29 39237 + Remote Controlled Transmission & Echoing Telnet Option + + + + Assume that only space is a break character (that + is the last break reset command specified print up + to and including the break characters and set the + break classes to class 9). Suppose the user had + typed "abcdefghi". The user side + RCTE could send it all to the server, but it could + print only "abc", and would have to buffer + "defghi" at least until a break reset + command was received from the server. That break + reset command could change the break ckasses + requiring rescanning the buffered string. + + For example suppose the break reset command set the + break characters to class 5 and the action to print + up to but not including the break character. The + user RCTE could then print "def" and discard the + , but whould have to continue to buffer the + "ghi". + + The problem with buffering occurs when printing on + the user's terminal must be suspended, after the user + has typed a currently valid break character and until + a break reset command is received from the serving + host. During this time, the user may be typing + merrily along. The text being typed may be SENT, but + may not yet be PRINTED. 6d4c + + The more common problem of filling the transmission + buffer, while awaiting a host to host allocate from + the serving host, may also occur, but this problem is + well known to implementors and in no way special to + RCTE. 6d4d + + In any case, when the buffer does fill and further + text typed by the user will be lost, the user should + be notified (perhaps by ringing the terminal bell). 6d4e + + Text should be buffered by the using host until the + user types a character which belongs to the + transmission class in force at the moment the character + is typed. 6d5 + + Transmission class reset commands may be sent by the + serving host at any time. If they are frequently sent + separate from break class reset commands, it will + probably be better to exit from RCTE and enter regular + character at a time transmission. 6d6 + + It is not immediately clear what the using host should + + + + [page 12] + + NWG/RFC# 726 JBP DHC 8-MAR-77 08:29 39237 + Remote Controlled Transmission & Echoing Telnet Option + + + + do with currently buffered text, when a transmission + classes reset command is received. The buffering is + according to the previous transmission classes scheme. 6d7 + + The using host clearly should not simply wait until a + transmission character (according to the new scheme) + is typed. 6d7a + + Either the buffered text should be rescanned, under + the new scheme; 6d7b + + Or the buffered text should simply be sent as a + group. This is the simpler approach, and probably + quite adequate. 6d7c + + It is possible to define NO BREAK CHARACTERS except + Telnet commands (IAC ...). This seems undesirable and + should not be done. 6d8 + + If this situation were to occur the using host should + send a Telnet command to allow the server to know + when he may reset the break classes, but the + mechanism is awkward and this case should be avoided. 6d8a + + 6. Sample Interaction: 7 + + "S:" is sent from serving (WILL RCTE) host to using host. + "U:" is sent from using (DO RCTE) host to serving host. + "T:" is entered by the terminal user. + "P:" is printed on the terminal. + + Text surrounded by square brackets ([]) is commentary. + Text surrounded by angle brackets (<>) is to be taken as + a single unit. E.g., carriage return is , and the + decimal value 27 is represented <27>. 7a + + The following interaction shows a logon to a Tenex, + initiation of the DED editor, insertion of some text and + the return to the Exec level. 7b + + An attempt has been made to give some flavor of the + asynchrony of network I/O and the user's terminal + input. Many other possible combinations, using the same + set of actions listed below, could be devised. The + actual order of events will depend upon network and + hosts' load and the user's typing speed. 7b1 + + We assume that the user's Telnet is also in an "insert + linefeed" mode. That is, whenever the user types carriage + + + + [page 13] + + NWG/RFC# 726 JBP DHC 8-MAR-77 08:29 39237 + Remote Controlled Transmission & Echoing Telnet Option + + + + return the user Telnet sends both carriage return + and linefeed (the Telnet end of line signal). + When space character occurs at the end of a line in the + example description it is shown explicitly by to + avoid confusion. Other uses of the space character are + not so marked to avoid destroying the readability of the + example. 7c + + A Telnet connection has already been opened, but the + TENEX prompt has not yet been issued. The hosts first + discuss using the RCTE option: 7d + + S: 7d1 + + U: 7d2 + + S: TENEX 1.31.18, TENEX EXEC 1.50.2@ + <11><1><24> 7d3 + + [Print the herald and echo input text up to a break + character, but do not echo the break character. + Classes 4 (Format Effectors), 5 (Non-format Effector + Controls and ), and 9 () act as break + characters.] 7d3a + + P: TENEX 1.31.18, TENEX EXEC 1.50.2@ 7d4 + + T: LOGIN ARPA 7d5 + + P: LOGIN 7d6 + + U: LOGIN 7d7 + + U: ARPA 7d8 + + S: <0>SE> 7d9 + + P: ARPA 7d10 + + S: (PASSWORD): <7> 7d11 + + P: (PASSWORD): 7d12 + + T: WASHINGTON 1000 7d13 + + [The password "WASHINGTON" is not echoed. Printing of + "1000" is withheld] 7d13a + + U: WASHINGTON 7d14 + + + + [page 14] + + NWG/RFC# 726 JBP DHC 8-MAR-77 08:29 39237 + Remote Controlled Transmission & Echoing Telnet Option + + + + U: 1000 7d15 + + S: <3> 7d16 + + S: JOB 17 ON TTY41 7-JUN-73 14:13@ + <0> 7d17 + + P: 1000 7d18 + + [Printing is slow at this point; so the account + number is not printed as soon as the server's command + for it is received.] 7d18a + + P: JOB 17 ON TTY41 7-JUN-73 14:13@ 7d19 + + T: DED 7d20 + + P: DED 7d21 + + U: DED 7d22 + + S: .SAV;1<0> 7d23 + + P: .SAV;1 7d24 + + U: 7d25 + + S: DED 3/14/73 DRO,KRK: + <15><1><255> 7d26 + + [The program is started and the DED prompt ":" is + sent. At the command level, DED responds to every + character. The server sets the break classes to all + classes.] 7d26a + + P: DED 3/14/73 DRO,KRK: 7d27 + + T: IThis is a test line.This is another test + line.<^Z>Q 7d28 + + ["I" means Insert Text. The text follows, terminated + by a Control-Z. The "Q" instructs DED to Quit.] 7d28a + + U: I 7d29 + + U: This is a test line. 7d30 + + S: I*<11><0><24> 7d31 + + + + + [page 15] + + NWG/RFC# 726 JBP DHC 8-MAR-77 08:29 39237 + Remote Controlled Transmission & Echoing Telnet Option + + + + [DED prompts the user, during text input, with an + asterisk at the beginning of every line. The server + sets the break classes to classes 4 and 5, the format + effectors and the non-format effector controls.] 7d31a + + P: I*This is a test line. 7d32 + + S: *<0> 7d33 + + P: *This is another test line. 7d34 + + U: This is another test line.<^Z> 7d35 + + U: Q 7d36 + + [Note that the "Q" will not immediately be printed on + the terminal, since it must wait for authorization.] 7d36a + + S: ^Z:<15><1><255> 7d37 + + [The returned "^Z" is two characters, not the ASCII + Control-Z or .] 7d37a + + S: Q@<11><1><24> 7d38 + + P: Q@ 7d39 + + And the user is returned to the Exec level. 7d40 + + + + + + + + + + + + + + + + + + + + + + + + + [page 16] \ No newline at end of file -- cgit v1.2.3