From b61f3f751c5dfe72869fd449ba3ff42f520d0927 Mon Sep 17 00:00:00 2001 From: Matthew Flatt Date: Tue, 28 Aug 2012 13:42:02 -0600 Subject: [PATCH] port position-tracking clean-ups Add `file-position*', which can return #f instead of raising an exception when a port's position is unknown. Change `make-input-port' and `make-output-port' to accept more kinds of values as the initial position. These changes make it possible to synchronize a port's position with a `port-commit-peeked' action. It's ugly, which I think reflect something broken about position tracking in the port protocol (which seems difficult to fix without breaking compaibility). --- collects/racket/port.rkt | 17 +- collects/racket/private/port.rkt | 7 +- .../scribblings/reference/custom-ports.scrbl | 38 +- .../scribblings/reference/port-buffers.scrbl | 6 + collects/tests/racket/port.rktl | 16 + collects/typed-racket/base-env/base-env.rkt | 1 + src/racket/include/mzwin.def | 1 + src/racket/include/mzwin3m.def | 1 + src/racket/include/racket.exp | 1 + src/racket/include/racket3m.exp | 1 + src/racket/include/scheme.h | 1 + src/racket/src/cstartup.inc | 812 +++++++++--------- src/racket/src/mzmark_type.inc | 4 + src/racket/src/mzmarksrc.c | 2 + src/racket/src/port.c | 97 ++- src/racket/src/portfun.c | 35 +- src/racket/src/schemef.h | 1 + src/racket/src/schemex.h | 1 + src/racket/src/schemex.inc | 1 + src/racket/src/schemexm.h | 1 + src/racket/src/schminc.h | 2 +- src/racket/src/schpriv.h | 1 + src/racket/src/schvers.h | 4 +- 23 files changed, 597 insertions(+), 454 deletions(-) diff --git a/collects/racket/port.rkt b/collects/racket/port.rkt index f074dbd2d0..0ca264bc61 100644 --- a/collects/racket/port.rkt +++ b/collects/racket/port.rkt @@ -629,7 +629,12 @@ (lambda (n evt target-evt) (port-commit-peeked n evt target-evt p))) location-proc count-lines!-proc - pos + (let ([delta (- pos (or (file-position* p) pos))]) + (if (= delta 1) + p + (lambda () + (define v (file-position* p)) + (+ delta v)))) (case-lambda [(mode) (file-stream-buffer-mode p mode)] [() (file-stream-buffer-mode p)])))) @@ -660,7 +665,7 @@ (lambda (n evt target-evt) (port-commit-peeked n evt target-evt p))) (lambda () (port-next-location p)) (lambda () (port-count-lines! p)) - (add1 (file-position p))))) + p))) ;; Not kill-safe. (define make-pipe-with-specials @@ -1059,7 +1064,7 @@ (lambda (v) (loop)))))))) (lambda () (port-next-location port)) (lambda () (port-count-lines! port)) - (add1 (file-position port)))))) + port)))) (define special-filter-input-port (lambda (p filter [close? #t]) @@ -1093,7 +1098,7 @@ (lambda (n evt target-evt) (port-commit-peeked n evt target-evt p))) (lambda () (port-next-location p)) (lambda () (port-count-lines! p)) - (add1 (file-position p))))) + p))) ;; ---------------------------------------- @@ -1938,7 +1943,7 @@ (let ([new (transplant-output-port p (lambda () (port-next-location p)) - (add1 (file-position p)) + (add1 (or (file-position* p) 0)) close? (lambda () (port-count-lines! p)))]) (port-display-handler new (port-display-handler p)) @@ -1950,7 +1955,7 @@ (let ([new (transplant-input-port p (lambda () (port-next-location p)) - (add1 (file-position p)) + (add1 (or (file-position* p) 0)) close? (lambda () (port-count-lines! p)))]) (port-read-handler new (port-read-handler p)) diff --git a/collects/racket/private/port.rkt b/collects/racket/private/port.rkt index eccd8fadcd..1b62d5ddcc 100644 --- a/collects/racket/private/port.rkt +++ b/collects/racket/private/port.rkt @@ -99,7 +99,12 @@ (write-special-evt spec p))) location-proc count-lines!-proc - pos + (let ([delta (- pos (or (file-position* p) pos))]) + (if (= delta 1) + p + (lambda () + (define v (file-position* p)) + (and v (+ delta v))))) (case-lambda [(mode) (file-stream-buffer-mode p mode)] [() (file-stream-buffer-mode p)])))) diff --git a/collects/scribblings/reference/custom-ports.scrbl b/collects/scribblings/reference/custom-ports.scrbl index 0b1429a0ec..7079addf45 100644 --- a/collects/scribblings/reference/custom-ports.scrbl +++ b/collects/scribblings/reference/custom-ports.scrbl @@ -39,7 +39,11 @@ written. #f) #f] [count-lines! (-> any) void] - [init-position exact-positive-integer? 1] + [init-position (or/c exact-positive-integer? + port? + #f + (-> (or/c exact-positive-integer? #f))) + 1] [buffer-mode (or/c (case-> ((or/c 'block 'none) . -> . any) (-> (or/c 'block 'none #f))) #f) @@ -344,10 +348,15 @@ The arguments implement the port as follows: that is called if and when line counting is enabled for the port. The default procedure is @racket[void].} - @item{@racket[init-position] --- an exact, positive integer that - determines the position of the port's first item, used when line - counting is @italic{not} enabled for the port. The default is - @racket[1].} + @item{@racket[init-position] --- normally an exact, positive integer + that determines the position of the port's first item, which is + used by @racket[file-position] or when line counting is + @italic{not} enabled for the port. The default is @racket[1]. If + @racket[init-position] is @racket[#f], the port is treated as + having an unknown position. If @racket[init-position] is a port, + then the given port's position is always used for the new port's + position. If @racket[init-position] is a procedure, it is called + as needed to obtain the port's position.} @item{@racket[buffer-mode] --- either @racket[#f] (the default) or a procedure that accepts zero or one arguments. If @@ -721,7 +730,11 @@ s #f) #f] [count-lines! (-> any) void] - [init-position exact-positive-integer? 1] + [init-position (or/c exact-positive-integer? + port? + #f + (-> (or/c exact-positive-integer? #f))) + 1] [buffer-mode (or/c (case-> ((or/c 'block 'line 'none) . -> . any) (-> (or/c 'block 'line 'none #f))) @@ -988,10 +1001,15 @@ procedures. that is called if and when line counting is enabled for the port. The default procedure is @racket[void].} - @item{@racket[init-position] --- an exact, positive integer that - determines the position of the port's first output item, used when - line counting is @italic{not} enabled for the port. The default is - @racket[1].} + @item{@racket[init-position] --- normally an exact, positive integer + that determines the position of the port's first item, which is + used by @racket[file-position] or when line counting is + @italic{not} enabled for the port. The default is @racket[1]. If + @racket[init-position] is @racket[#f], the port is treated as + having an unknown position. If @racket[init-position] is a port, + then the given port's position is always used for the new port's + position. If @racket[init-position] is a procedure, it is called + as needed to obtain the port's position.} @item{@racket[buffer-mode] --- either @racket[#f] (the default) or a procedure that accepts zero or one arguments. If diff --git a/collects/scribblings/reference/port-buffers.scrbl b/collects/scribblings/reference/port-buffers.scrbl index 7af3578bbf..7d0173154a 100644 --- a/collects/scribblings/reference/port-buffers.scrbl +++ b/collects/scribblings/reference/port-buffers.scrbl @@ -112,3 +112,9 @@ is the same as the old position). However, although input and output ports produced by @racket[open-input-output-file] share the file position, setting the position via one port does not flush the other port's buffer.} + +@defproc[(file-position* [port port?]) (or/c exact-nonnegative-integer? #f)]{ + +Like @racket[file-position] on a single argument, but returns +@racket[#f] if the position is not known.} + diff --git a/collects/tests/racket/port.rktl b/collects/tests/racket/port.rktl index cdc7482022..6528cc6b62 100644 --- a/collects/tests/racket/port.rktl +++ b/collects/tests/racket/port.rktl @@ -726,6 +726,7 @@ (let ([check (lambda (in [d 0] [first-three-bytes #"123"] [char-len 3]) (test d file-position in) + (test d file-position* in) (let-values ([(l c p) (port-next-location in)]) (test p add1 d) (test first-three-bytes peek-bytes 3 0 in) @@ -814,4 +815,19 @@ ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +(let* ([p (open-input-bytes #"123")] + [p2 (make-input-port + (object-name p) + p + p + void + #f #f #f void + #f)]) + (test #f file-position* p2) + (test #\1 read-char p2) + (test #f file-position* p2) + (err/rt-test (file-position p2) exn:fail:filesystem?)) + +;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + (report-errs) diff --git a/collects/typed-racket/base-env/base-env.rkt b/collects/typed-racket/base-env/base-env.rkt index 2cccf2f903..8ab47bc6e6 100644 --- a/collects/typed-racket/base-env/base-env.rkt +++ b/collects/typed-racket/base-env/base-env.rkt @@ -2155,6 +2155,7 @@ [(-Port (one-of/c 'none 'line 'block)) -Void])] [file-position (cl-> [(-Port) -Nat] [(-Port -Integer) -Void])] +[file-position* (-> -Port (Un -Nat (-val #f)))] ;Section 12.1.4 [port-count-lines! (-> (Un -Input-Port -Output-Port) -Void)] diff --git a/src/racket/include/mzwin.def b/src/racket/include/mzwin.def index bb52705b74..f4f01a3074 100644 --- a/src/racket/include/mzwin.def +++ b/src/racket/include/mzwin.def @@ -416,6 +416,7 @@ EXPORTS scheme_get_bytes scheme_get_ready_special scheme_tell + scheme_tell_can_redirect scheme_output_tell scheme_tell_line scheme_tell_column diff --git a/src/racket/include/mzwin3m.def b/src/racket/include/mzwin3m.def index 4a490ef745..76db8860ac 100644 --- a/src/racket/include/mzwin3m.def +++ b/src/racket/include/mzwin3m.def @@ -431,6 +431,7 @@ EXPORTS scheme_get_bytes scheme_get_ready_special scheme_tell + scheme_tell_can_redirect scheme_output_tell scheme_tell_line scheme_tell_column diff --git a/src/racket/include/racket.exp b/src/racket/include/racket.exp index 69a7a8beff..5806af12f2 100644 --- a/src/racket/include/racket.exp +++ b/src/racket/include/racket.exp @@ -433,6 +433,7 @@ scheme_get_char_string scheme_get_bytes scheme_get_ready_special scheme_tell +scheme_tell_can_redirect scheme_output_tell scheme_tell_line scheme_tell_column diff --git a/src/racket/include/racket3m.exp b/src/racket/include/racket3m.exp index 3b2a233652..acdacf78ab 100644 --- a/src/racket/include/racket3m.exp +++ b/src/racket/include/racket3m.exp @@ -439,6 +439,7 @@ scheme_get_char_string scheme_get_bytes scheme_get_ready_special scheme_tell +scheme_tell_can_redirect scheme_output_tell scheme_tell_line scheme_tell_column diff --git a/src/racket/include/scheme.h b/src/racket/include/scheme.h index 49b27109b7..34ce50df81 100644 --- a/src/racket/include/scheme.h +++ b/src/racket/include/scheme.h @@ -1379,6 +1379,7 @@ struct Scheme_Port Scheme_Location_Fun location_fun; Scheme_Count_Lines_Fun count_lines_fun; Scheme_Buffer_Mode_Fun buffer_mode_fun; + Scheme_Object *position_redirect; /* for `file-position' */ }; struct Scheme_Input_Port diff --git a/src/racket/src/cstartup.inc b/src/racket/src/cstartup.inc index 44f07d1599..03358029d5 100644 --- a/src/racket/src/cstartup.inc +++ b/src/racket/src/cstartup.inc @@ -1,14 +1,14 @@ { - SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,8,53,46,51,46,48,46,50,48,84,0,0,0,0,0,0,0,0,0, + SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,8,53,46,51,46,48,46,50,49,84,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,51,0,0,0,1,0,0,10,0,14, -0,21,0,34,0,39,0,43,0,46,0,51,0,58,0,62,0,67,0,74,0, +0,21,0,26,0,30,0,33,0,38,0,51,0,58,0,62,0,67,0,74,0, 83,0,87,0,93,0,107,0,121,0,124,0,130,0,134,0,136,0,147,0,149, 0,163,0,170,0,192,0,194,0,208,0,19,1,48,1,59,1,70,1,96,1, 129,1,162,1,221,1,21,2,99,2,155,2,160,2,180,2,73,3,93,3,145, 3,211,3,100,4,242,4,40,5,51,5,130,5,0,0,92,7,0,0,69,35, -37,109,105,110,45,115,116,120,29,11,11,11,66,108,101,116,114,101,99,72,112, -97,114,97,109,101,116,101,114,105,122,101,64,108,101,116,42,63,97,110,100,62, -111,114,64,119,104,101,110,66,100,101,102,105,110,101,63,108,101,116,64,99,111, +37,109,105,110,45,115,116,120,29,11,11,11,66,108,101,116,114,101,99,64,108, +101,116,42,63,97,110,100,62,111,114,64,119,104,101,110,72,112,97,114,97,109, +101,116,101,114,105,122,101,66,100,101,102,105,110,101,63,108,101,116,64,99,111, 110,100,66,117,110,108,101,115,115,68,104,101,114,101,45,115,116,120,29,11,11, 11,65,113,117,111,116,101,29,94,2,15,68,35,37,107,101,114,110,101,108,11, 29,94,2,15,68,35,37,112,97,114,97,109,122,11,62,105,102,65,98,101,103, @@ -28,13 +28,13 @@ 89,2,18,248,22,104,199,249,22,79,2,19,248,22,106,201,12,27,248,22,81, 248,22,163,4,196,28,248,22,87,193,20,14,159,37,36,37,28,248,22,87,248, 22,81,194,248,22,80,193,249,22,156,4,80,158,39,36,251,22,89,2,18,248, -22,80,199,249,22,79,2,6,248,22,81,201,11,18,100,10,13,16,6,36,2, +22,80,199,249,22,79,2,5,248,22,81,201,11,18,100,10,13,16,6,36,2, 14,2,2,11,11,11,8,32,8,31,8,30,8,29,16,4,11,11,2,20,3, 1,8,101,110,118,49,54,57,54,52,16,4,11,11,2,21,3,1,8,101,110, 118,49,54,57,54,53,27,248,22,81,248,22,163,4,196,28,248,22,87,193,20, 14,159,37,36,37,28,248,22,87,248,22,81,194,248,22,80,193,249,22,156,4, 80,158,39,36,250,22,89,2,22,248,22,89,249,22,89,248,22,89,2,23,248, -22,80,201,251,22,89,2,18,2,23,2,23,249,22,79,2,7,248,22,81,204, +22,80,201,251,22,89,2,18,2,23,2,23,249,22,79,2,6,248,22,81,204, 18,100,11,13,16,6,36,2,14,2,2,11,11,11,8,32,8,31,8,30,8, 29,16,4,11,11,2,20,3,1,8,101,110,118,49,54,57,54,55,16,4,11, 11,2,21,3,1,8,101,110,118,49,54,57,54,56,248,22,163,4,193,27,248, @@ -52,7 +52,7 @@ 248,22,80,201,248,22,81,198,27,248,22,81,248,22,163,4,196,27,248,22,163, 4,248,22,80,195,249,22,156,4,80,158,40,36,28,248,22,87,195,250,22,90, 2,22,9,248,22,81,199,250,22,89,2,10,248,22,89,248,22,80,199,250,22, -90,2,5,248,22,81,201,248,22,81,202,27,248,22,81,248,22,163,4,23,197, +90,2,4,248,22,81,201,248,22,81,202,27,248,22,81,248,22,163,4,23,197, 1,27,249,22,1,22,93,249,22,2,22,163,4,248,22,163,4,248,22,80,199, 248,22,183,4,249,22,156,4,80,158,41,36,251,22,89,1,22,119,105,116,104, 45,99,111,110,116,105,110,117,97,116,105,111,110,45,109,97,114,107,2,26,250, @@ -61,10 +61,10 @@ 110,45,109,97,114,107,45,115,101,116,45,102,105,114,115,116,11,2,26,202,250, 22,90,2,22,9,248,22,81,204,27,248,22,81,248,22,163,4,196,28,248,22, 87,193,20,14,159,37,36,37,249,22,156,4,80,158,39,36,27,248,22,163,4, -248,22,80,197,28,249,22,151,9,62,61,62,248,22,157,4,248,22,104,196,250, +248,22,80,197,28,249,22,152,9,62,61,62,248,22,157,4,248,22,104,196,250, 22,89,2,22,248,22,89,249,22,89,21,93,2,27,248,22,80,199,250,22,90, 2,11,249,22,89,2,27,249,22,89,248,22,113,203,2,27,248,22,81,202,251, -22,89,2,18,28,249,22,151,9,248,22,157,4,248,22,80,200,64,101,108,115, +22,89,2,18,28,249,22,152,9,248,22,157,4,248,22,80,200,64,101,108,115, 101,10,248,22,80,197,250,22,90,2,22,9,248,22,81,200,249,22,79,2,11, 248,22,81,202,99,13,16,6,36,2,14,2,2,11,11,11,8,32,8,31,8, 30,8,29,16,4,11,11,2,20,3,1,8,101,110,118,49,54,57,57,48,16, @@ -82,16 +82,16 @@ 0,16,0,36,36,11,12,11,11,16,0,16,0,16,0,36,36,16,11,16,5, 11,20,15,16,2,20,14,159,36,36,37,80,158,36,36,36,20,113,159,36,16, 1,2,13,16,1,33,33,10,16,5,2,12,88,163,8,36,37,53,37,9,223, -0,33,34,36,20,113,159,36,16,1,2,13,16,0,11,16,5,2,8,88,163, +0,33,34,36,20,113,159,36,16,1,2,13,16,0,11,16,5,2,7,88,163, 8,36,37,53,37,9,223,0,33,35,36,20,113,159,36,16,1,2,13,16,0, -11,16,5,2,6,88,163,8,36,37,53,37,9,223,0,33,36,36,20,113,159, -36,16,1,2,13,16,1,33,37,11,16,5,2,7,88,163,8,36,37,56,37, +11,16,5,2,5,88,163,8,36,37,53,37,9,223,0,33,36,36,20,113,159, +36,16,1,2,13,16,1,33,37,11,16,5,2,6,88,163,8,36,37,56,37, 9,223,0,33,38,36,20,113,159,36,16,1,2,13,16,1,33,39,11,16,5, 2,10,88,163,8,36,37,58,37,9,223,0,33,42,36,20,113,159,36,16,1, 2,13,16,0,11,16,5,2,3,88,163,8,36,37,53,37,9,223,0,33,44, -36,20,113,159,36,16,1,2,13,16,0,11,16,5,2,5,88,163,8,36,37, +36,20,113,159,36,16,1,2,13,16,0,11,16,5,2,4,88,163,8,36,37, 54,37,9,223,0,33,45,36,20,113,159,36,16,1,2,13,16,0,11,16,5, -2,4,88,163,8,36,37,56,37,9,223,0,33,46,36,20,113,159,36,16,1, +2,8,88,163,8,36,37,56,37,9,223,0,33,46,36,20,113,159,36,16,1, 2,13,16,0,11,16,5,2,11,88,163,8,36,37,58,37,9,223,0,33,47, 36,20,113,159,36,16,1,2,13,16,1,33,49,11,16,5,2,9,88,163,8, 36,37,54,37,9,223,0,33,50,36,20,113,159,36,16,1,2,13,16,0,11, @@ -99,7 +99,7 @@ EVAL_ONE_SIZED_STR((char *)expr, 2029); } { - SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,8,53,46,51,46,48,46,50,48,84,0,0,0,0,0,0,0,0,0, + SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,8,53,46,51,46,48,46,50,49,84,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,115,0,0,0,1,0,0,8,0,21, 0,26,0,43,0,65,0,94,0,109,0,127,0,139,0,155,0,169,0,191,0, 207,0,224,0,246,0,1,1,7,1,16,1,23,1,30,1,42,1,58,1,82, @@ -151,320 +151,320 @@ 105,120,32,116,111,32,97,32,114,111,111,116,32,112,97,116,104,58,32,6,11, 11,80,76,84,67,79,76,76,69,67,84,83,69,97,100,100,111,110,45,100,105, 114,6,8,8,99,111,108,108,101,99,116,115,27,20,13,159,80,159,37,52,37, -254,80,159,44,53,37,249,22,33,11,80,159,46,52,37,22,157,14,10,22,164, -14,10,22,165,14,10,248,22,139,6,23,196,2,28,248,22,136,7,23,194,2, -12,86,94,248,22,159,9,23,194,1,27,20,13,159,80,159,38,52,37,254,80, -159,45,53,37,249,22,33,11,80,159,47,52,37,22,157,14,10,22,164,14,10, -22,165,14,10,248,22,139,6,23,197,2,28,248,22,136,7,23,194,2,12,86, -94,248,22,159,9,23,194,1,27,20,13,159,80,159,39,52,37,254,80,159,46, -53,37,249,22,33,11,80,159,48,52,37,22,157,14,10,22,164,14,10,22,165, -14,10,248,22,139,6,23,198,2,28,248,22,136,7,23,194,2,12,86,94,248, -22,159,9,23,194,1,248,80,159,40,8,32,39,197,28,248,22,87,23,195,2, -9,27,248,22,80,23,196,2,27,28,248,22,143,15,23,195,2,23,194,1,28, -248,22,142,15,23,195,2,249,22,144,15,23,196,1,250,80,159,43,39,39,248, -22,159,15,2,32,11,10,250,80,159,41,39,39,248,22,159,15,2,32,23,197, -1,10,28,23,193,2,249,22,79,248,22,146,15,249,22,144,15,23,198,1,247, -22,160,15,27,248,22,81,23,200,1,28,248,22,87,23,194,2,9,27,248,22, -80,23,195,2,27,28,248,22,143,15,23,195,2,23,194,1,28,248,22,142,15, -23,195,2,249,22,144,15,23,196,1,250,80,159,48,39,39,248,22,159,15,2, -32,11,10,250,80,159,46,39,39,248,22,159,15,2,32,23,197,1,10,28,23, -193,2,249,22,79,248,22,146,15,249,22,144,15,23,198,1,247,22,160,15,248, +254,80,159,44,53,37,249,22,33,11,80,159,46,52,37,22,158,14,10,22,165, +14,10,22,166,14,10,248,22,139,6,23,196,2,28,248,22,137,7,23,194,2, +12,86,94,248,22,160,9,23,194,1,27,20,13,159,80,159,38,52,37,254,80, +159,45,53,37,249,22,33,11,80,159,47,52,37,22,158,14,10,22,165,14,10, +22,166,14,10,248,22,139,6,23,197,2,28,248,22,137,7,23,194,2,12,86, +94,248,22,160,9,23,194,1,27,20,13,159,80,159,39,52,37,254,80,159,46, +53,37,249,22,33,11,80,159,48,52,37,22,158,14,10,22,165,14,10,22,166, +14,10,248,22,139,6,23,198,2,28,248,22,137,7,23,194,2,12,86,94,248, +22,160,9,23,194,1,248,80,159,40,8,32,39,197,28,248,22,87,23,195,2, +9,27,248,22,80,23,196,2,27,28,248,22,144,15,23,195,2,23,194,1,28, +248,22,143,15,23,195,2,249,22,145,15,23,196,1,250,80,159,43,39,39,248, +22,160,15,2,32,11,10,250,80,159,41,39,39,248,22,160,15,2,32,23,197, +1,10,28,23,193,2,249,22,79,248,22,147,15,249,22,145,15,23,198,1,247, +22,161,15,27,248,22,81,23,200,1,28,248,22,87,23,194,2,9,27,248,22, +80,23,195,2,27,28,248,22,144,15,23,195,2,23,194,1,28,248,22,143,15, +23,195,2,249,22,145,15,23,196,1,250,80,159,48,39,39,248,22,160,15,2, +32,11,10,250,80,159,46,39,39,248,22,160,15,2,32,23,197,1,10,28,23, +193,2,249,22,79,248,22,147,15,249,22,145,15,23,198,1,247,22,161,15,248, 80,159,46,8,31,39,248,22,81,23,199,1,86,94,23,193,1,248,80,159,44, 8,31,39,248,22,81,23,197,1,86,94,23,193,1,27,248,22,81,23,198,1, -28,248,22,87,23,194,2,9,27,248,22,80,23,195,2,27,28,248,22,143,15, -23,195,2,23,194,1,28,248,22,142,15,23,195,2,249,22,144,15,23,196,1, -250,80,159,46,39,39,248,22,159,15,2,32,11,10,250,80,159,44,39,39,248, -22,159,15,2,32,23,197,1,10,28,23,193,2,249,22,79,248,22,146,15,249, -22,144,15,23,198,1,247,22,160,15,248,80,159,44,8,31,39,248,22,81,23, +28,248,22,87,23,194,2,9,27,248,22,80,23,195,2,27,28,248,22,144,15, +23,195,2,23,194,1,28,248,22,143,15,23,195,2,249,22,145,15,23,196,1, +250,80,159,46,39,39,248,22,160,15,2,32,11,10,250,80,159,44,39,39,248, +22,160,15,2,32,23,197,1,10,28,23,193,2,249,22,79,248,22,147,15,249, +22,145,15,23,198,1,247,22,161,15,248,80,159,44,8,31,39,248,22,81,23, 199,1,248,80,159,42,8,31,39,248,22,81,196,28,248,22,87,23,195,2,9, -27,248,22,80,23,196,2,27,28,248,22,143,15,23,195,2,23,194,1,28,248, -22,142,15,23,195,2,249,22,144,15,23,196,1,250,80,159,43,39,39,248,22, -159,15,2,32,11,10,250,80,159,41,39,39,248,22,159,15,2,32,23,197,1, -10,28,23,193,2,249,22,79,248,22,146,15,249,22,144,15,23,198,1,247,22, -160,15,248,80,159,41,8,30,39,248,22,81,23,200,1,248,80,159,39,8,30, +27,248,22,80,23,196,2,27,28,248,22,144,15,23,195,2,23,194,1,28,248, +22,143,15,23,195,2,249,22,145,15,23,196,1,250,80,159,43,39,39,248,22, +160,15,2,32,11,10,250,80,159,41,39,39,248,22,160,15,2,32,23,197,1, +10,28,23,193,2,249,22,79,248,22,147,15,249,22,145,15,23,198,1,247,22, +161,15,248,80,159,41,8,30,39,248,22,81,23,200,1,248,80,159,39,8,30, 39,248,22,81,197,28,248,22,87,23,195,2,9,27,248,22,80,23,196,2,27, -28,248,22,143,15,23,195,2,23,194,1,28,248,22,142,15,23,195,2,249,22, -144,15,23,196,1,250,80,159,43,39,39,248,22,159,15,2,32,11,10,250,80, -159,41,39,39,248,22,159,15,2,32,23,197,1,10,28,23,193,2,249,22,79, -248,22,146,15,249,22,144,15,23,198,1,247,22,160,15,248,80,159,41,8,29, +28,248,22,144,15,23,195,2,23,194,1,28,248,22,143,15,23,195,2,249,22, +145,15,23,196,1,250,80,159,43,39,39,248,22,160,15,2,32,11,10,250,80, +159,41,39,39,248,22,160,15,2,32,23,197,1,10,28,23,193,2,249,22,79, +248,22,147,15,249,22,145,15,23,198,1,247,22,161,15,248,80,159,41,8,29, 39,248,22,81,23,200,1,248,80,159,39,8,29,39,248,22,81,197,27,248,22, -183,14,23,195,2,28,23,193,2,192,86,94,23,193,1,28,248,22,141,7,23, -195,2,27,248,22,141,15,195,28,192,192,248,22,142,15,195,11,86,94,28,28, -248,22,184,14,23,195,2,10,28,248,22,183,14,23,195,2,10,28,248,22,141, -7,23,195,2,28,248,22,141,15,23,195,2,10,248,22,142,15,23,195,2,11, -12,250,22,188,9,76,110,111,114,109,97,108,45,112,97,116,104,45,99,97,115, -101,2,33,23,197,2,28,28,248,22,184,14,23,195,2,249,22,151,9,248,22, -185,14,23,197,2,2,34,249,22,151,9,247,22,163,8,2,34,27,28,248,22, -141,7,23,196,2,23,195,2,248,22,153,8,248,22,188,14,23,197,2,28,249, -22,175,15,0,21,35,114,120,34,94,91,92,92,93,91,92,92,93,91,63,93, -91,92,92,93,34,23,195,2,28,248,22,141,7,195,248,22,191,14,195,194,27, -248,22,180,7,23,195,1,249,22,128,15,248,22,156,8,250,22,183,15,0,6, -35,114,120,34,47,34,28,249,22,175,15,0,22,35,114,120,34,91,47,92,92, +184,14,23,195,2,28,23,193,2,192,86,94,23,193,1,28,248,22,142,7,23, +195,2,27,248,22,142,15,195,28,192,192,248,22,143,15,195,11,86,94,28,28, +248,22,185,14,23,195,2,10,28,248,22,184,14,23,195,2,10,28,248,22,142, +7,23,195,2,28,248,22,142,15,23,195,2,10,248,22,143,15,23,195,2,11, +12,250,22,189,9,76,110,111,114,109,97,108,45,112,97,116,104,45,99,97,115, +101,2,33,23,197,2,28,28,248,22,185,14,23,195,2,249,22,152,9,248,22, +186,14,23,197,2,2,34,249,22,152,9,247,22,164,8,2,34,27,28,248,22, +142,7,23,196,2,23,195,2,248,22,154,8,248,22,189,14,23,197,2,28,249, +22,176,15,0,21,35,114,120,34,94,91,92,92,93,91,92,92,93,91,63,93, +91,92,92,93,34,23,195,2,28,248,22,142,7,195,248,22,128,15,195,194,27, +248,22,181,7,23,195,1,249,22,129,15,248,22,157,8,250,22,184,15,0,6, +35,114,120,34,47,34,28,249,22,176,15,0,22,35,114,120,34,91,47,92,92, 93,91,46,32,93,43,91,47,92,92,93,42,36,34,23,201,2,23,199,1,250, -22,183,15,0,19,35,114,120,34,91,32,46,93,43,40,91,47,92,92,93,42, +22,184,15,0,19,35,114,120,34,91,32,46,93,43,40,91,47,92,92,93,42, 41,36,34,23,202,1,6,2,2,92,49,80,159,44,37,38,2,34,28,248,22, -141,7,194,248,22,191,14,194,193,32,58,88,163,8,36,39,53,11,70,102,111, +142,7,194,248,22,128,15,194,193,32,58,88,163,8,36,39,53,11,70,102,111, 117,110,100,45,101,120,101,99,222,33,61,32,59,88,163,8,36,40,58,11,64, -110,101,120,116,222,33,60,27,248,22,145,15,23,196,2,28,249,22,153,9,23, -195,2,23,197,1,11,28,248,22,141,15,23,194,2,27,249,22,137,15,23,197, -1,23,196,1,28,23,197,2,90,159,39,11,89,161,39,36,11,248,22,140,15, -23,197,2,86,95,23,195,1,23,194,1,27,28,23,202,2,27,248,22,145,15, -23,199,2,28,249,22,153,9,23,195,2,23,200,2,11,28,248,22,141,15,23, -194,2,250,2,58,23,205,2,23,206,2,249,22,137,15,23,200,2,23,198,1, +110,101,120,116,222,33,60,27,248,22,146,15,23,196,2,28,249,22,154,9,23, +195,2,23,197,1,11,28,248,22,142,15,23,194,2,27,249,22,138,15,23,197, +1,23,196,1,28,23,197,2,90,159,39,11,89,161,39,36,11,248,22,141,15, +23,197,2,86,95,23,195,1,23,194,1,27,28,23,202,2,27,248,22,146,15, +23,199,2,28,249,22,154,9,23,195,2,23,200,2,11,28,248,22,142,15,23, +194,2,250,2,58,23,205,2,23,206,2,249,22,138,15,23,200,2,23,198,1, 250,2,58,23,205,2,23,206,2,23,196,1,11,28,23,193,2,192,86,94,23, -193,1,27,28,248,22,183,14,23,196,2,27,249,22,137,15,23,198,2,23,205, -2,28,28,248,22,132,15,193,10,248,22,131,15,193,192,11,11,28,23,193,2, -192,86,94,23,193,1,28,23,203,2,11,27,248,22,145,15,23,200,2,28,249, -22,153,9,23,195,2,23,201,1,11,28,248,22,141,15,23,194,2,250,2,58, -23,206,1,23,207,1,249,22,137,15,23,201,1,23,198,1,250,2,58,205,206, +193,1,27,28,248,22,184,14,23,196,2,27,249,22,138,15,23,198,2,23,205, +2,28,28,248,22,133,15,193,10,248,22,132,15,193,192,11,11,28,23,193,2, +192,86,94,23,193,1,28,23,203,2,11,27,248,22,146,15,23,200,2,28,249, +22,154,9,23,195,2,23,201,1,11,28,248,22,142,15,23,194,2,250,2,58, +23,206,1,23,207,1,249,22,138,15,23,201,1,23,198,1,250,2,58,205,206, 195,192,86,94,23,194,1,28,23,196,2,90,159,39,11,89,161,39,36,11,248, -22,140,15,23,197,2,86,95,23,195,1,23,194,1,27,28,23,201,2,27,248, -22,145,15,23,199,2,28,249,22,153,9,23,195,2,23,200,2,11,28,248,22, -141,15,23,194,2,250,2,58,23,204,2,23,205,2,249,22,137,15,23,200,2, +22,141,15,23,197,2,86,95,23,195,1,23,194,1,27,28,23,201,2,27,248, +22,146,15,23,199,2,28,249,22,154,9,23,195,2,23,200,2,11,28,248,22, +142,15,23,194,2,250,2,58,23,204,2,23,205,2,249,22,138,15,23,200,2, 23,198,1,250,2,58,23,204,2,23,205,2,23,196,1,11,28,23,193,2,192, -86,94,23,193,1,27,28,248,22,183,14,23,196,2,27,249,22,137,15,23,198, -2,23,204,2,28,28,248,22,132,15,193,10,248,22,131,15,193,192,11,11,28, -23,193,2,192,86,94,23,193,1,28,23,202,2,11,27,248,22,145,15,23,200, -2,28,249,22,153,9,23,195,2,23,201,1,11,28,248,22,141,15,23,194,2, -250,2,58,23,205,1,23,206,1,249,22,137,15,23,201,1,23,198,1,250,2, -58,204,205,195,192,28,23,193,2,90,159,39,11,89,161,39,36,11,248,22,140, +86,94,23,193,1,27,28,248,22,184,14,23,196,2,27,249,22,138,15,23,198, +2,23,204,2,28,28,248,22,133,15,193,10,248,22,132,15,193,192,11,11,28, +23,193,2,192,86,94,23,193,1,28,23,202,2,11,27,248,22,146,15,23,200, +2,28,249,22,154,9,23,195,2,23,201,1,11,28,248,22,142,15,23,194,2, +250,2,58,23,205,1,23,206,1,249,22,138,15,23,201,1,23,198,1,250,2, +58,204,205,195,192,28,23,193,2,90,159,39,11,89,161,39,36,11,248,22,141, 15,23,199,2,86,95,23,195,1,23,194,1,27,28,23,198,2,251,2,59,23, 198,2,23,203,2,23,201,2,23,202,2,11,28,23,193,2,192,86,94,23,193, -1,27,28,248,22,183,14,195,27,249,22,137,15,197,200,28,28,248,22,132,15, -193,10,248,22,131,15,193,192,11,11,28,192,192,28,198,11,251,2,59,198,203, +1,27,28,248,22,184,14,195,27,249,22,138,15,197,200,28,28,248,22,133,15, +193,10,248,22,132,15,193,192,11,11,28,192,192,28,198,11,251,2,59,198,203, 201,202,194,32,62,88,163,8,36,40,58,11,2,31,222,33,63,28,248,22,87, -23,197,2,11,27,248,22,144,15,248,22,80,23,199,2,27,249,22,137,15,23, -196,1,23,197,2,28,248,22,131,15,23,194,2,250,2,58,198,199,195,86,94, +23,197,2,11,27,248,22,145,15,248,22,80,23,199,2,27,249,22,138,15,23, +196,1,23,197,2,28,248,22,132,15,23,194,2,250,2,58,198,199,195,86,94, 23,193,1,27,248,22,81,23,200,1,28,248,22,87,23,194,2,11,27,248,22, -144,15,248,22,80,23,196,2,27,249,22,137,15,23,196,1,23,200,2,28,248, -22,131,15,23,194,2,250,2,58,201,202,195,86,94,23,193,1,27,248,22,81, -23,197,1,28,248,22,87,23,194,2,11,27,248,22,144,15,248,22,80,195,27, -249,22,137,15,23,196,1,202,28,248,22,131,15,193,250,2,58,204,205,195,251, -2,62,204,205,206,248,22,81,199,86,95,28,28,248,22,183,14,23,195,2,10, -28,248,22,141,7,23,195,2,28,248,22,141,15,23,195,2,10,248,22,142,15, -23,195,2,11,12,250,22,188,9,2,5,2,35,23,197,2,28,28,23,195,2, -28,28,248,22,183,14,23,196,2,10,28,248,22,141,7,23,196,2,28,248,22, -141,15,23,196,2,10,248,22,142,15,23,196,2,11,248,22,141,15,23,196,2, -11,10,12,250,22,188,9,2,5,6,45,45,40,111,114,47,99,32,35,102,32, +145,15,248,22,80,23,196,2,27,249,22,138,15,23,196,1,23,200,2,28,248, +22,132,15,23,194,2,250,2,58,201,202,195,86,94,23,193,1,27,248,22,81, +23,197,1,28,248,22,87,23,194,2,11,27,248,22,145,15,248,22,80,195,27, +249,22,138,15,23,196,1,202,28,248,22,132,15,193,250,2,58,204,205,195,251, +2,62,204,205,206,248,22,81,199,86,95,28,28,248,22,184,14,23,195,2,10, +28,248,22,142,7,23,195,2,28,248,22,142,15,23,195,2,10,248,22,143,15, +23,195,2,11,12,250,22,189,9,2,5,2,35,23,197,2,28,28,23,195,2, +28,28,248,22,184,14,23,196,2,10,28,248,22,142,7,23,196,2,28,248,22, +142,15,23,196,2,10,248,22,143,15,23,196,2,11,248,22,142,15,23,196,2, +11,10,12,250,22,189,9,2,5,6,45,45,40,111,114,47,99,32,35,102,32, 40,97,110,100,47,99,32,112,97,116,104,45,115,116,114,105,110,103,63,32,114, 101,108,97,116,105,118,101,45,112,97,116,104,63,41,41,23,198,2,28,28,248, -22,141,15,23,195,2,90,159,39,11,89,161,39,36,11,248,22,140,15,23,198, -2,249,22,151,9,194,2,36,11,27,248,22,161,8,6,4,4,80,65,84,72, +22,142,15,23,195,2,90,159,39,11,89,161,39,36,11,248,22,141,15,23,198, +2,249,22,152,9,194,2,36,11,27,248,22,162,8,6,4,4,80,65,84,72, 27,28,23,194,2,249,80,158,40,40,23,196,1,9,86,94,23,194,1,9,27, -28,249,22,151,9,247,22,163,8,2,34,249,22,79,248,22,128,15,5,1,46, -23,196,1,23,194,1,28,248,22,87,23,194,2,11,27,248,22,144,15,248,22, -80,23,196,2,27,249,22,137,15,23,196,1,23,201,2,28,248,22,131,15,23, +28,249,22,152,9,247,22,164,8,2,34,249,22,79,248,22,129,15,5,1,46, +23,196,1,23,194,1,28,248,22,87,23,194,2,11,27,248,22,145,15,248,22, +80,23,196,2,27,249,22,138,15,23,196,1,23,201,2,28,248,22,132,15,23, 194,2,250,2,58,202,203,195,86,94,23,193,1,27,248,22,81,23,197,1,28, -248,22,87,23,194,2,11,27,248,22,144,15,248,22,80,23,196,2,27,249,22, -137,15,23,196,1,23,204,2,28,248,22,131,15,23,194,2,250,2,58,205,206, +248,22,87,23,194,2,11,27,248,22,145,15,248,22,80,23,196,2,27,249,22, +138,15,23,196,1,23,204,2,28,248,22,132,15,23,194,2,250,2,58,205,206, 195,86,94,23,193,1,27,248,22,81,23,197,1,28,248,22,87,23,194,2,11, -27,248,22,144,15,248,22,80,195,27,249,22,137,15,23,196,1,206,28,248,22, -131,15,193,250,2,58,23,16,23,17,195,251,2,62,23,16,23,17,23,18,248, -22,81,199,27,248,22,144,15,23,196,1,28,248,22,131,15,193,250,2,58,198, +27,248,22,145,15,248,22,80,195,27,249,22,138,15,23,196,1,206,28,248,22, +132,15,193,250,2,58,23,16,23,17,195,251,2,62,23,16,23,17,23,18,248, +22,81,199,27,248,22,145,15,23,196,1,28,248,22,132,15,193,250,2,58,198, 199,195,11,250,80,159,39,39,39,196,197,11,250,80,159,39,39,39,196,11,11, 32,67,88,163,8,36,39,57,11,2,31,222,33,69,0,8,35,114,120,35,34, -92,34,34,27,249,22,171,15,23,197,2,23,198,2,28,23,193,2,86,94,23, -196,1,27,248,22,104,23,195,2,27,27,248,22,113,23,197,1,27,249,22,171, +92,34,34,27,249,22,172,15,23,197,2,23,198,2,28,23,193,2,86,94,23, +196,1,27,248,22,104,23,195,2,27,27,248,22,113,23,197,1,27,249,22,172, 15,23,201,2,23,196,2,28,23,193,2,86,94,23,194,1,27,248,22,104,23, 195,2,27,250,2,67,23,203,2,23,204,1,248,22,113,23,199,1,28,249,22, -138,8,23,196,2,2,37,249,22,93,23,202,2,194,249,22,79,248,22,128,15, -28,249,22,151,9,247,22,163,8,2,34,250,22,183,15,2,68,23,200,1,2, -37,23,197,1,194,86,95,23,199,1,23,193,1,28,249,22,138,8,23,196,2, -2,37,249,22,93,23,200,2,9,249,22,79,248,22,128,15,28,249,22,151,9, -247,22,163,8,2,34,250,22,183,15,2,68,23,200,1,2,37,23,197,1,9, -28,249,22,138,8,23,196,2,2,37,249,22,93,197,194,86,94,23,196,1,249, -22,79,248,22,128,15,28,249,22,151,9,247,22,163,8,2,34,250,22,183,15, -2,68,23,200,1,2,37,23,197,1,194,86,94,23,193,1,28,249,22,138,8, -23,198,2,2,37,249,22,93,195,9,86,94,23,194,1,249,22,79,248,22,128, -15,28,249,22,151,9,247,22,163,8,2,34,250,22,183,15,2,68,23,202,1, -2,37,23,199,1,9,86,95,28,28,248,22,130,8,194,10,248,22,141,7,194, -12,250,22,188,9,2,6,6,21,21,40,111,114,47,99,32,98,121,116,101,115, +139,8,23,196,2,2,37,249,22,93,23,202,2,194,249,22,79,248,22,129,15, +28,249,22,152,9,247,22,164,8,2,34,250,22,184,15,2,68,23,200,1,2, +37,23,197,1,194,86,95,23,199,1,23,193,1,28,249,22,139,8,23,196,2, +2,37,249,22,93,23,200,2,9,249,22,79,248,22,129,15,28,249,22,152,9, +247,22,164,8,2,34,250,22,184,15,2,68,23,200,1,2,37,23,197,1,9, +28,249,22,139,8,23,196,2,2,37,249,22,93,197,194,86,94,23,196,1,249, +22,79,248,22,129,15,28,249,22,152,9,247,22,164,8,2,34,250,22,184,15, +2,68,23,200,1,2,37,23,197,1,194,86,94,23,193,1,28,249,22,139,8, +23,198,2,2,37,249,22,93,195,9,86,94,23,194,1,249,22,79,248,22,129, +15,28,249,22,152,9,247,22,164,8,2,34,250,22,184,15,2,68,23,202,1, +2,37,23,199,1,9,86,95,28,28,248,22,131,8,194,10,248,22,142,7,194, +12,250,22,189,9,2,6,6,21,21,40,111,114,47,99,32,98,121,116,101,115, 63,32,115,116,114,105,110,103,63,41,196,28,28,248,22,88,195,249,22,4,22, -183,14,196,11,12,250,22,188,9,2,6,6,14,14,40,108,105,115,116,111,102, -32,112,97,116,104,63,41,197,250,2,67,197,195,28,248,22,141,7,197,248,22, -155,8,197,196,86,94,28,28,248,22,183,14,194,10,28,248,22,141,7,194,28, -248,22,141,15,194,10,248,22,142,15,194,11,12,250,22,188,9,195,2,35,196, -28,248,22,141,15,194,12,251,22,190,9,196,2,38,2,39,197,86,94,28,28, -248,22,183,14,194,10,28,248,22,141,7,194,28,248,22,141,15,194,10,248,22, -142,15,194,11,12,250,22,188,9,195,2,35,196,28,248,22,141,15,194,12,251, -22,190,9,196,2,38,2,39,197,86,94,86,94,28,28,248,22,183,14,23,195, -2,10,28,248,22,141,7,23,195,2,28,248,22,141,15,23,195,2,10,248,22, -142,15,23,195,2,11,12,250,22,188,9,195,2,35,23,197,2,28,248,22,141, -15,23,195,2,12,251,22,190,9,196,2,38,2,39,23,198,1,249,22,3,88, +184,14,196,11,12,250,22,189,9,2,6,6,14,14,40,108,105,115,116,111,102, +32,112,97,116,104,63,41,197,250,2,67,197,195,28,248,22,142,7,197,248,22, +156,8,197,196,86,94,28,28,248,22,184,14,194,10,28,248,22,142,7,194,28, +248,22,142,15,194,10,248,22,143,15,194,11,12,250,22,189,9,195,2,35,196, +28,248,22,142,15,194,12,251,22,191,9,196,2,38,2,39,197,86,94,28,28, +248,22,184,14,194,10,28,248,22,142,7,194,28,248,22,142,15,194,10,248,22, +143,15,194,11,12,250,22,189,9,195,2,35,196,28,248,22,142,15,194,12,251, +22,191,9,196,2,38,2,39,197,86,94,86,94,28,28,248,22,184,14,23,195, +2,10,28,248,22,142,7,23,195,2,28,248,22,142,15,23,195,2,10,248,22, +143,15,23,195,2,11,12,250,22,189,9,195,2,35,23,197,2,28,248,22,142, +15,23,195,2,12,251,22,191,9,196,2,38,2,39,23,198,1,249,22,3,88, 163,8,36,37,47,11,9,223,2,33,72,196,28,28,248,22,0,194,249,22,50, -195,37,11,12,250,22,188,9,195,2,40,196,86,94,28,28,248,22,183,14,193, -10,28,248,22,141,7,193,28,248,22,141,15,193,10,248,22,142,15,193,11,12, -250,22,188,9,2,10,2,35,195,28,248,22,141,15,193,12,251,22,190,9,2, -10,2,38,2,39,196,86,95,86,94,86,94,28,28,248,22,183,14,195,10,28, -248,22,141,7,195,28,248,22,141,15,195,10,248,22,142,15,195,11,12,250,22, -188,9,2,10,2,35,197,28,248,22,141,15,195,12,251,22,190,9,2,10,2, +195,37,11,12,250,22,189,9,195,2,40,196,86,94,28,28,248,22,184,14,193, +10,28,248,22,142,7,193,28,248,22,142,15,193,10,248,22,143,15,193,11,12, +250,22,189,9,2,10,2,35,195,28,248,22,142,15,193,12,251,22,191,9,2, +10,2,38,2,39,196,86,95,86,94,86,94,28,28,248,22,184,14,195,10,28, +248,22,142,7,195,28,248,22,142,15,195,10,248,22,143,15,195,11,12,250,22, +189,9,2,10,2,35,197,28,248,22,142,15,195,12,251,22,191,9,2,10,2, 38,2,39,198,249,22,3,32,0,88,163,8,36,37,46,11,9,222,33,75,197, -28,28,248,22,0,194,249,22,50,195,37,11,12,250,22,188,9,2,10,2,40, -196,251,80,158,40,45,197,198,199,11,86,94,28,28,248,22,183,14,193,10,28, -248,22,141,7,193,28,248,22,141,15,193,10,248,22,142,15,193,11,12,250,22, -188,9,2,12,2,35,195,28,248,22,141,15,193,12,251,22,190,9,2,12,2, -38,2,39,196,86,96,86,94,28,28,248,22,183,14,195,10,28,248,22,141,7, -195,28,248,22,141,15,195,10,248,22,142,15,195,11,12,250,22,188,9,2,12, -2,35,197,28,248,22,141,15,195,12,251,22,190,9,2,12,2,38,2,39,198, -86,94,86,94,28,28,248,22,183,14,196,10,28,248,22,141,7,196,28,248,22, -141,15,196,10,248,22,142,15,196,11,12,250,22,188,9,2,12,2,35,198,28, -248,22,141,15,196,12,251,22,190,9,2,12,2,38,2,39,199,249,22,3,32, +28,28,248,22,0,194,249,22,50,195,37,11,12,250,22,189,9,2,10,2,40, +196,251,80,158,40,45,197,198,199,11,86,94,28,28,248,22,184,14,193,10,28, +248,22,142,7,193,28,248,22,142,15,193,10,248,22,143,15,193,11,12,250,22, +189,9,2,12,2,35,195,28,248,22,142,15,193,12,251,22,191,9,2,12,2, +38,2,39,196,86,96,86,94,28,28,248,22,184,14,195,10,28,248,22,142,7, +195,28,248,22,142,15,195,10,248,22,143,15,195,11,12,250,22,189,9,2,12, +2,35,197,28,248,22,142,15,195,12,251,22,191,9,2,12,2,38,2,39,198, +86,94,86,94,28,28,248,22,184,14,196,10,28,248,22,142,7,196,28,248,22, +142,15,196,10,248,22,143,15,196,11,12,250,22,189,9,2,12,2,35,198,28, +248,22,142,15,196,12,251,22,191,9,2,12,2,38,2,39,199,249,22,3,32, 0,88,163,8,36,37,46,11,9,222,33,77,198,28,28,248,22,0,194,249,22, -50,195,37,11,12,250,22,188,9,2,12,2,40,196,251,80,158,40,45,197,199, -200,198,0,6,45,105,110,102,46,48,27,248,22,159,15,2,41,27,28,248,22, -142,15,23,195,2,193,20,13,159,80,159,38,52,37,250,80,159,41,53,37,249, -22,33,11,80,159,43,52,37,22,160,15,248,22,159,15,68,111,114,105,103,45, -100,105,114,27,248,22,159,15,2,32,250,80,159,42,39,39,23,196,1,23,198, -1,11,28,192,250,22,137,15,195,6,6,6,99,111,110,102,105,103,6,10,10, -108,105,110,107,115,46,114,107,116,100,11,86,94,27,247,22,147,10,28,249,22, -139,10,23,195,2,2,42,251,22,143,10,23,197,1,2,42,250,22,189,7,2, -43,28,23,202,1,80,159,46,47,38,80,159,46,50,38,248,22,183,11,23,205, -1,247,22,29,12,248,193,247,22,140,2,2,79,86,95,27,247,22,147,10,28, -249,22,139,10,23,195,2,2,42,251,22,143,10,23,197,1,2,42,250,22,189, -7,2,43,28,202,80,159,47,47,38,80,159,47,50,38,248,22,183,11,23,206, +50,195,37,11,12,250,22,189,9,2,12,2,40,196,251,80,158,40,45,197,199, +200,198,0,6,45,105,110,102,46,48,27,248,22,160,15,2,41,27,28,248,22, +143,15,23,195,2,193,20,13,159,80,159,38,52,37,250,80,159,41,53,37,249, +22,33,11,80,159,43,52,37,22,161,15,248,22,160,15,68,111,114,105,103,45, +100,105,114,27,248,22,160,15,2,32,250,80,159,42,39,39,23,196,1,23,198, +1,11,28,192,250,22,138,15,195,6,6,6,99,111,110,102,105,103,6,10,10, +108,105,110,107,115,46,114,107,116,100,11,86,94,27,247,22,148,10,28,249,22, +140,10,23,195,2,2,42,251,22,144,10,23,197,1,2,42,250,22,190,7,2, +43,28,23,202,1,80,159,46,47,38,80,159,46,50,38,248,22,184,11,23,205, +1,247,22,29,12,248,193,247,22,140,2,2,79,86,95,27,247,22,148,10,28, +249,22,140,10,23,195,2,2,42,251,22,144,10,23,197,1,2,42,250,22,190, +7,2,43,28,202,80,159,47,47,38,80,159,47,50,38,248,22,184,11,23,206, 1,247,22,29,12,28,192,28,194,86,94,20,18,159,11,80,158,39,48,247,22, 140,2,20,18,159,11,80,158,39,49,192,86,94,20,18,159,11,80,158,39,54, 247,22,140,2,20,18,159,11,80,158,39,55,192,12,248,194,247,22,140,2,20, -20,94,248,22,139,6,23,194,2,28,248,22,136,7,248,22,139,6,23,195,1, -12,248,22,184,9,6,30,30,101,120,112,101,99,116,101,100,32,97,32,115,105, +20,94,248,22,139,6,23,194,2,28,248,22,137,7,248,22,139,6,23,195,1, +12,248,22,185,9,6,30,30,101,120,112,101,99,116,101,100,32,97,32,115,105, 110,103,108,101,32,83,45,101,120,112,114,101,115,115,105,111,110,248,22,191,5, 193,28,248,22,88,23,194,2,28,28,249,22,191,3,38,248,22,92,23,196,2, -10,249,22,191,3,39,248,22,92,23,196,2,28,28,248,22,141,7,248,22,80, -23,195,2,10,249,22,151,9,64,114,111,111,116,248,22,80,23,196,2,28,27, -248,22,104,194,28,248,22,183,14,23,194,2,10,28,248,22,141,7,23,194,2, -28,248,22,141,15,23,194,2,10,248,22,142,15,23,194,1,11,27,248,22,87, -248,22,106,195,28,192,192,248,22,184,15,248,22,113,195,11,11,11,11,250,22, +10,249,22,191,3,39,248,22,92,23,196,2,28,28,248,22,142,7,248,22,80, +23,195,2,10,249,22,152,9,64,114,111,111,116,248,22,80,23,196,2,28,27, +248,22,104,194,28,248,22,184,14,23,194,2,10,28,248,22,142,7,23,194,2, +28,248,22,142,15,23,194,2,10,248,22,143,15,23,194,1,11,27,248,22,87, +248,22,106,195,28,192,192,248,22,185,15,248,22,113,195,11,11,11,11,250,22, 158,2,196,197,249,22,79,197,200,28,28,248,22,87,248,22,106,23,197,2,10, -249,22,175,15,248,22,113,23,198,2,247,22,159,8,27,248,22,146,15,249,22, -144,15,248,22,104,23,200,2,23,198,1,28,248,22,64,248,22,80,23,198,2, +249,22,176,15,248,22,113,23,198,2,247,22,160,8,27,248,22,147,15,249,22, +145,15,248,22,104,23,200,2,23,198,1,28,248,22,64,248,22,80,23,198,2, 86,94,23,196,1,86,94,28,250,22,160,2,196,11,11,12,250,22,158,2,196, 11,9,249,22,164,2,195,88,163,8,36,38,50,11,9,224,3,2,33,87,27, 248,22,67,248,22,80,23,199,1,250,22,158,2,23,198,2,23,196,2,249,22, 79,248,22,131,2,23,200,1,250,22,160,2,23,203,1,23,201,1,9,12,250, 22,158,2,195,196,248,22,94,198,20,13,159,80,159,37,57,37,88,163,36,37, -54,8,240,0,72,0,0,9,225,1,0,2,33,81,27,250,22,154,15,28,23, +54,8,240,0,72,0,0,9,225,1,0,2,33,81,27,250,22,155,15,28,23, 197,2,80,159,41,47,38,80,159,41,50,38,11,32,0,88,163,8,36,36,41, 11,9,222,33,82,28,249,22,129,4,23,195,2,28,23,196,2,80,158,40,49, 80,158,40,55,20,13,159,80,159,38,57,37,20,20,94,88,163,36,37,55,8, 240,0,120,12,0,9,226,2,1,3,0,33,83,23,196,1,20,13,159,80,159, 38,52,37,26,29,80,159,8,31,53,37,249,22,33,11,80,159,8,33,52,37, -22,153,14,10,22,154,14,10,22,155,14,10,22,158,14,10,22,157,14,10,22, -159,14,10,22,156,14,10,22,160,14,10,22,161,14,10,22,162,14,10,22,163, -14,10,22,164,14,10,22,165,14,11,22,151,14,11,27,249,22,182,5,28,196, +22,154,14,10,22,155,14,10,22,156,14,10,22,159,14,10,22,158,14,10,22, +160,14,10,22,157,14,10,22,161,14,10,22,162,14,10,22,163,14,10,22,164, +14,10,22,165,14,10,22,166,14,11,22,152,14,11,27,249,22,182,5,28,196, 80,159,41,47,38,80,159,41,50,38,66,98,105,110,97,114,121,27,250,22,46, 22,37,88,163,8,36,36,44,11,9,223,4,33,84,20,20,94,88,163,36,36, 43,11,9,223,4,33,85,23,197,1,86,94,28,28,248,22,88,23,194,2,249, 22,4,32,0,88,163,8,36,37,45,11,9,222,33,86,23,195,2,11,12,248, -22,184,9,6,18,18,105,108,108,45,102,111,114,109,101,100,32,99,111,110,116, -101,110,116,27,247,22,140,2,27,90,159,39,11,89,161,39,36,11,248,22,140, +22,185,9,6,18,18,105,108,108,45,102,111,114,109,101,100,32,99,111,110,116, +101,110,116,27,247,22,140,2,27,90,159,39,11,89,161,39,36,11,248,22,141, 15,28,201,80,159,46,47,38,80,159,46,50,38,192,86,96,249,22,3,20,20, 94,88,163,8,36,37,54,11,9,224,2,3,33,88,23,195,1,23,197,1,249, 22,164,2,195,88,163,8,36,38,48,11,9,223,3,33,89,28,197,86,94,20, 18,159,11,80,158,42,48,193,20,18,159,11,80,158,42,49,196,86,94,20,18, 159,11,80,158,42,54,193,20,18,159,11,80,158,42,55,196,193,28,193,80,158, 38,48,80,158,38,54,248,22,8,88,163,8,32,37,8,40,8,240,0,120,47, -0,9,224,1,2,33,90,0,7,35,114,120,34,47,43,34,28,248,22,141,7, -23,195,2,27,249,22,173,15,2,92,196,28,192,28,249,22,191,3,248,22,103, -195,248,22,181,3,248,22,144,7,198,249,22,7,250,22,163,7,199,36,248,22, -103,198,197,249,22,7,250,22,163,7,199,36,248,22,103,198,249,22,79,249,22, -163,7,200,248,22,105,199,199,249,22,7,196,197,90,159,39,11,89,161,39,36, -11,248,22,140,15,23,198,1,86,94,23,195,1,28,249,22,151,9,23,195,2, -2,36,249,22,7,195,199,27,249,22,79,23,197,1,23,201,1,28,248,22,141, -7,23,195,2,27,249,22,173,15,2,92,196,28,192,28,249,22,191,3,248,22, -103,195,248,22,181,3,248,22,144,7,198,249,22,7,250,22,163,7,199,36,248, -22,103,198,195,249,22,7,250,22,163,7,199,36,248,22,103,198,249,22,79,249, -22,163,7,200,248,22,105,199,197,249,22,7,196,195,90,159,39,11,89,161,39, -36,11,248,22,140,15,23,198,1,28,249,22,151,9,194,2,36,249,22,7,195, +0,9,224,1,2,33,90,0,7,35,114,120,34,47,43,34,28,248,22,142,7, +23,195,2,27,249,22,174,15,2,92,196,28,192,28,249,22,191,3,248,22,103, +195,248,22,181,3,248,22,145,7,198,249,22,7,250,22,164,7,199,36,248,22, +103,198,197,249,22,7,250,22,164,7,199,36,248,22,103,198,249,22,79,249,22, +164,7,200,248,22,105,199,199,249,22,7,196,197,90,159,39,11,89,161,39,36, +11,248,22,141,15,23,198,1,86,94,23,195,1,28,249,22,152,9,23,195,2, +2,36,249,22,7,195,199,27,249,22,79,23,197,1,23,201,1,28,248,22,142, +7,23,195,2,27,249,22,174,15,2,92,196,28,192,28,249,22,191,3,248,22, +103,195,248,22,181,3,248,22,145,7,198,249,22,7,250,22,164,7,199,36,248, +22,103,198,195,249,22,7,250,22,164,7,199,36,248,22,103,198,249,22,79,249, +22,164,7,200,248,22,105,199,197,249,22,7,196,195,90,159,39,11,89,161,39, +36,11,248,22,141,15,23,198,1,28,249,22,152,9,194,2,36,249,22,7,195, 197,249,80,159,45,58,39,194,249,22,79,197,199,32,94,88,163,36,43,8,27, 11,65,99,108,111,111,112,222,33,103,32,95,88,163,8,36,37,47,11,2,31, 222,33,98,32,96,88,163,36,37,43,11,69,116,111,45,115,116,114,105,110,103, -222,33,97,28,248,22,183,14,193,248,22,187,14,193,192,28,248,22,87,248,22, +222,33,97,28,248,22,184,14,193,248,22,188,14,193,192,28,248,22,87,248,22, 81,23,195,2,248,22,89,248,2,96,248,22,80,23,196,1,250,22,90,248,2, -96,248,22,80,23,198,2,2,45,248,2,95,248,22,81,23,198,1,249,22,189, +96,248,22,80,23,198,2,2,45,248,2,95,248,22,81,23,198,1,249,22,190, 7,2,46,194,32,100,88,163,36,38,48,11,66,102,105,108,116,101,114,222,33, 101,28,248,22,87,23,195,2,9,28,248,23,194,2,248,22,80,23,196,2,249, 22,79,248,22,80,23,197,2,249,2,100,23,197,1,248,22,81,23,199,1,249, -2,100,194,248,22,81,196,249,22,189,7,2,46,248,22,134,2,23,196,1,28, -248,22,87,23,199,2,86,94,23,198,1,28,23,199,2,28,196,249,22,137,15, -200,198,198,27,28,248,22,87,23,197,2,2,44,249,22,1,22,164,7,248,2, -95,23,199,2,248,23,198,1,251,22,189,7,6,70,70,99,111,108,108,101,99, +2,100,194,248,22,81,196,249,22,190,7,2,46,248,22,134,2,23,196,1,28, +248,22,87,23,199,2,86,94,23,198,1,28,23,199,2,28,196,249,22,138,15, +200,198,198,27,28,248,22,87,23,197,2,2,44,249,22,1,22,165,7,248,2, +95,23,199,2,248,23,198,1,251,22,190,7,6,70,70,99,111,108,108,101,99, 116,105,111,110,32,110,111,116,32,102,111,117,110,100,10,32,32,99,111,108,108, 101,99,116,105,111,110,58,32,126,115,10,32,32,105,110,32,99,111,108,108,101, 99,116,105,111,110,32,100,105,114,101,99,116,111,114,105,101,115,58,126,97,126, -97,28,248,22,87,23,202,1,248,2,96,23,201,1,250,22,164,7,248,2,96, -23,204,1,2,45,23,201,2,249,22,1,22,164,7,249,22,2,32,0,88,163, -8,36,37,44,11,9,222,33,99,249,2,100,22,183,14,23,205,2,28,249,22, -5,22,133,2,23,201,2,250,22,189,7,6,49,49,10,32,32,32,115,117,98, +97,28,248,22,87,23,202,1,248,2,96,23,201,1,250,22,165,7,248,2,96, +23,204,1,2,45,23,201,2,249,22,1,22,165,7,249,22,2,32,0,88,163, +8,36,37,44,11,9,222,33,99,249,2,100,22,184,14,23,205,2,28,249,22, +5,22,133,2,23,201,2,250,22,190,7,6,49,49,10,32,32,32,115,117,98, 45,99,111,108,108,101,99,116,105,111,110,58,32,126,115,10,32,32,105,110,32, 112,97,114,101,110,116,32,100,105,114,101,99,116,111,114,105,101,115,58,126,97, -23,201,1,249,22,1,22,164,7,249,22,2,32,0,88,163,8,36,37,45,11, +23,201,1,249,22,1,22,165,7,249,22,2,32,0,88,163,8,36,37,45,11, 9,222,33,102,249,2,100,22,133,2,23,208,1,86,95,23,199,1,23,198,1, -2,44,27,248,22,80,23,200,2,27,28,248,22,183,14,23,195,2,249,22,137, -15,23,196,1,23,198,2,248,22,134,2,23,195,1,28,28,248,22,183,14,248, -22,80,23,202,2,248,22,132,15,23,194,2,10,27,250,22,1,22,137,15,23, -197,1,23,201,2,28,28,248,22,87,23,199,2,10,248,22,132,15,23,194,2, -28,23,200,2,28,28,248,22,131,15,249,22,137,15,195,202,10,27,28,248,22, -183,14,201,248,22,187,14,201,200,27,248,22,144,7,23,195,2,27,28,249,22, -131,4,23,196,2,40,28,249,22,147,7,6,4,4,46,114,107,116,249,22,163, -7,23,199,2,249,22,183,3,23,200,2,40,249,22,164,7,250,22,163,7,23, +2,44,27,248,22,80,23,200,2,27,28,248,22,184,14,23,195,2,249,22,138, +15,23,196,1,23,198,2,248,22,134,2,23,195,1,28,28,248,22,184,14,248, +22,80,23,202,2,248,22,133,15,23,194,2,10,27,250,22,1,22,138,15,23, +197,1,23,201,2,28,28,248,22,87,23,199,2,10,248,22,133,15,23,194,2, +28,23,200,2,28,28,248,22,132,15,249,22,138,15,195,202,10,27,28,248,22, +184,14,201,248,22,188,14,201,200,27,248,22,145,7,23,195,2,27,28,249,22, +131,4,23,196,2,40,28,249,22,148,7,6,4,4,46,114,107,116,249,22,164, +7,23,199,2,249,22,183,3,23,200,2,40,249,22,165,7,250,22,164,7,23, 200,1,36,249,22,183,3,23,201,1,40,6,3,3,46,115,115,86,95,23,195, -1,23,194,1,11,11,28,23,193,2,248,22,131,15,249,22,137,15,198,23,196, -1,11,28,199,249,22,137,15,194,201,192,254,2,94,202,203,204,205,206,248,22, -81,23,16,28,23,16,23,16,199,28,199,249,22,137,15,194,201,192,254,2,94, +1,23,194,1,11,11,28,23,193,2,248,22,132,15,249,22,138,15,198,23,196, +1,11,28,199,249,22,138,15,194,201,192,254,2,94,202,203,204,205,206,248,22, +81,23,16,28,23,16,23,16,199,28,199,249,22,138,15,194,201,192,254,2,94, 202,203,204,205,206,248,22,81,23,16,23,16,254,2,94,201,202,203,204,205,248, 22,81,23,15,23,15,90,159,38,11,89,161,38,36,11,249,80,159,40,58,39, -23,199,1,23,200,1,27,248,22,67,28,248,22,183,14,195,248,22,187,14,195, -194,27,247,22,164,15,27,250,22,93,28,23,197,2,28,247,22,163,15,27,248, +23,199,1,23,200,1,27,248,22,67,28,248,22,184,14,195,248,22,188,14,195, +194,27,247,22,165,15,27,250,22,93,28,23,197,2,28,247,22,164,15,27,248, 80,159,46,56,39,10,27,250,22,160,2,23,197,2,23,203,2,11,28,23,193, 2,192,86,94,23,193,1,250,22,160,2,23,197,1,11,9,9,9,28,23,197, 1,28,80,159,44,50,38,27,248,80,159,46,56,39,11,27,250,22,160,2,23, 197,2,23,203,1,11,28,23,193,2,192,86,94,23,193,1,250,22,160,2,23, -197,1,11,9,86,94,23,198,1,9,9,247,22,161,15,254,2,94,199,202,203, -205,23,16,199,11,86,95,28,28,248,22,184,14,23,194,2,10,28,248,22,183, -14,23,194,2,10,28,248,22,141,7,23,194,2,28,248,22,141,15,23,194,2, -10,248,22,142,15,23,194,2,11,12,252,22,188,9,23,200,2,2,33,36,23, -198,2,23,199,2,28,28,248,22,141,7,23,195,2,10,248,22,130,8,23,195, -2,86,94,23,194,1,12,252,22,188,9,23,200,2,2,47,37,23,198,2,23, -199,1,90,159,39,11,89,161,39,36,11,248,22,140,15,23,197,2,86,94,23, -195,1,86,94,28,192,12,250,22,191,9,23,201,1,2,48,23,199,1,249,22, -7,194,195,90,159,38,11,89,161,38,36,11,86,95,28,28,248,22,184,14,23, -196,2,10,28,248,22,183,14,23,196,2,10,28,248,22,141,7,23,196,2,28, -248,22,141,15,23,196,2,10,248,22,142,15,23,196,2,11,12,252,22,188,9, -2,26,2,33,36,23,200,2,23,201,2,28,28,248,22,141,7,23,197,2,10, -248,22,130,8,23,197,2,12,252,22,188,9,2,26,2,47,37,23,200,2,23, -201,2,90,159,39,11,89,161,39,36,11,248,22,140,15,23,199,2,86,94,23, -195,1,86,94,28,192,12,250,22,191,9,2,26,2,48,23,201,2,249,22,7, -194,195,27,249,22,129,15,250,22,182,15,0,20,35,114,120,35,34,40,63,58, -91,46,93,91,94,46,93,42,124,41,36,34,248,22,189,14,23,201,1,28,248, -22,141,7,23,203,2,249,22,156,8,23,204,1,8,63,23,202,1,28,248,22, -184,14,23,199,2,248,22,185,14,23,199,1,86,94,23,198,1,247,22,186,14, -28,248,22,183,14,194,249,22,137,15,195,194,192,90,159,38,11,89,161,38,36, -11,86,95,28,28,248,22,184,14,23,196,2,10,28,248,22,183,14,23,196,2, -10,28,248,22,141,7,23,196,2,28,248,22,141,15,23,196,2,10,248,22,142, -15,23,196,2,11,12,252,22,188,9,2,27,2,33,36,23,200,2,23,201,2, -28,28,248,22,141,7,23,197,2,10,248,22,130,8,23,197,2,12,252,22,188, +197,1,11,9,86,94,23,198,1,9,9,247,22,162,15,254,2,94,199,202,203, +205,23,16,199,11,86,95,28,28,248,22,185,14,23,194,2,10,28,248,22,184, +14,23,194,2,10,28,248,22,142,7,23,194,2,28,248,22,142,15,23,194,2, +10,248,22,143,15,23,194,2,11,12,252,22,189,9,23,200,2,2,33,36,23, +198,2,23,199,2,28,28,248,22,142,7,23,195,2,10,248,22,131,8,23,195, +2,86,94,23,194,1,12,252,22,189,9,23,200,2,2,47,37,23,198,2,23, +199,1,90,159,39,11,89,161,39,36,11,248,22,141,15,23,197,2,86,94,23, +195,1,86,94,28,192,12,250,22,128,10,23,201,1,2,48,23,199,1,249,22, +7,194,195,90,159,38,11,89,161,38,36,11,86,95,28,28,248,22,185,14,23, +196,2,10,28,248,22,184,14,23,196,2,10,28,248,22,142,7,23,196,2,28, +248,22,142,15,23,196,2,10,248,22,143,15,23,196,2,11,12,252,22,189,9, +2,26,2,33,36,23,200,2,23,201,2,28,28,248,22,142,7,23,197,2,10, +248,22,131,8,23,197,2,12,252,22,189,9,2,26,2,47,37,23,200,2,23, +201,2,90,159,39,11,89,161,39,36,11,248,22,141,15,23,199,2,86,94,23, +195,1,86,94,28,192,12,250,22,128,10,2,26,2,48,23,201,2,249,22,7, +194,195,27,249,22,130,15,250,22,183,15,0,20,35,114,120,35,34,40,63,58, +91,46,93,91,94,46,93,42,124,41,36,34,248,22,190,14,23,201,1,28,248, +22,142,7,23,203,2,249,22,157,8,23,204,1,8,63,23,202,1,28,248,22, +185,14,23,199,2,248,22,186,14,23,199,1,86,94,23,198,1,247,22,187,14, +28,248,22,184,14,194,249,22,138,15,195,194,192,90,159,38,11,89,161,38,36, +11,86,95,28,28,248,22,185,14,23,196,2,10,28,248,22,184,14,23,196,2, +10,28,248,22,142,7,23,196,2,28,248,22,142,15,23,196,2,10,248,22,143, +15,23,196,2,11,12,252,22,189,9,2,27,2,33,36,23,200,2,23,201,2, +28,28,248,22,142,7,23,197,2,10,248,22,131,8,23,197,2,12,252,22,189, 9,2,27,2,47,37,23,200,2,23,201,2,90,159,39,11,89,161,39,36,11, -248,22,140,15,23,199,2,86,94,23,195,1,86,94,28,192,12,250,22,191,9, -2,27,2,48,23,201,2,249,22,7,194,195,27,249,22,129,15,249,22,142,8, -250,22,183,15,0,9,35,114,120,35,34,91,46,93,34,248,22,189,14,23,203, -1,6,1,1,95,28,248,22,141,7,23,202,2,249,22,156,8,23,203,1,8, -63,23,201,1,28,248,22,184,14,23,199,2,248,22,185,14,23,199,1,86,94, -23,198,1,247,22,186,14,28,248,22,183,14,194,249,22,137,15,195,194,192,249, -247,22,171,5,194,11,249,247,22,171,5,194,11,27,247,22,163,15,249,80,159, -39,40,38,28,23,195,2,27,248,22,161,8,2,49,28,192,192,2,44,2,44, -27,28,23,196,1,250,22,137,15,248,22,159,15,2,50,247,22,159,8,2,51, -11,27,248,80,159,42,8,29,39,250,22,93,9,248,22,89,248,22,159,15,2, -41,9,28,193,249,22,79,195,194,192,27,247,22,163,15,249,80,159,39,40,38, -28,23,195,2,27,248,22,161,8,2,49,28,192,192,2,44,2,44,27,28,23, -196,1,250,22,137,15,248,22,159,15,2,50,247,22,159,8,2,51,11,27,248, -80,159,42,8,30,39,250,22,93,23,203,1,248,22,89,248,22,159,15,2,41, -9,28,193,249,22,79,195,194,192,27,247,22,163,15,249,80,159,39,40,38,28, -23,195,2,27,248,22,161,8,2,49,28,192,192,2,44,2,44,27,28,23,196, -1,250,22,137,15,248,22,159,15,2,50,247,22,159,8,2,51,11,27,248,80, -159,42,8,31,39,250,22,93,23,203,1,248,22,89,248,22,159,15,2,41,23, +248,22,141,15,23,199,2,86,94,23,195,1,86,94,28,192,12,250,22,128,10, +2,27,2,48,23,201,2,249,22,7,194,195,27,249,22,130,15,249,22,143,8, +250,22,184,15,0,9,35,114,120,35,34,91,46,93,34,248,22,190,14,23,203, +1,6,1,1,95,28,248,22,142,7,23,202,2,249,22,157,8,23,203,1,8, +63,23,201,1,28,248,22,185,14,23,199,2,248,22,186,14,23,199,1,86,94, +23,198,1,247,22,187,14,28,248,22,184,14,194,249,22,138,15,195,194,192,249, +247,22,171,5,194,11,249,247,22,171,5,194,11,27,247,22,164,15,249,80,159, +39,40,38,28,23,195,2,27,248,22,162,8,2,49,28,192,192,2,44,2,44, +27,28,23,196,1,250,22,138,15,248,22,160,15,2,50,247,22,160,8,2,51, +11,27,248,80,159,42,8,29,39,250,22,93,9,248,22,89,248,22,160,15,2, +41,9,28,193,249,22,79,195,194,192,27,247,22,164,15,249,80,159,39,40,38, +28,23,195,2,27,248,22,162,8,2,49,28,192,192,2,44,2,44,27,28,23, +196,1,250,22,138,15,248,22,160,15,2,50,247,22,160,8,2,51,11,27,248, +80,159,42,8,30,39,250,22,93,23,203,1,248,22,89,248,22,160,15,2,41, +9,28,193,249,22,79,195,194,192,27,247,22,164,15,249,80,159,39,40,38,28, +23,195,2,27,248,22,162,8,2,49,28,192,192,2,44,2,44,27,28,23,196, +1,250,22,138,15,248,22,160,15,2,50,247,22,160,8,2,51,11,27,248,80, +159,42,8,31,39,250,22,93,23,203,1,248,22,89,248,22,160,15,2,41,23, 204,1,28,193,249,22,79,195,194,192,86,94,249,22,130,7,247,22,167,5,195, 248,22,154,6,249,22,135,4,36,249,22,183,3,197,198,27,28,23,197,2,86, -95,23,196,1,23,195,1,23,197,1,86,94,23,197,1,27,248,22,159,15,2, +95,23,196,1,23,195,1,23,197,1,86,94,23,197,1,27,248,22,160,15,2, 32,27,250,80,159,42,39,39,23,197,1,11,11,27,248,22,138,4,23,199,1, 27,28,23,194,2,23,194,1,86,94,23,194,1,36,27,248,22,138,4,23,202, 1,27,28,23,194,2,23,194,1,86,94,23,194,1,36,249,22,134,6,23,199, @@ -492,12 +492,12 @@ 64,0,0,2,31,223,0,33,54,80,159,36,8,30,39,20,15,16,2,88,163, 8,36,37,51,16,2,44,8,128,128,2,31,223,0,33,55,80,159,36,8,29, 39,20,15,16,2,32,0,88,163,36,37,45,11,2,2,222,33,56,80,159,36, -36,37,20,15,16,2,249,22,143,7,7,92,7,92,80,159,36,37,37,20,15, +36,37,20,15,16,2,249,22,144,7,7,92,7,92,80,159,36,37,37,20,15, 16,2,88,163,36,37,54,38,2,4,223,0,33,57,80,159,36,38,37,20,15, 16,2,20,25,96,2,5,88,163,8,36,39,8,25,52,9,223,0,33,64,88, 163,36,38,47,44,9,223,0,33,65,88,163,36,37,46,44,9,223,0,33,66, -80,159,36,39,37,20,15,16,2,27,248,22,167,15,248,22,155,8,27,28,249, -22,151,9,247,22,163,8,2,34,6,1,1,59,6,1,1,58,250,22,189,7, +80,159,36,39,37,20,15,16,2,27,248,22,168,15,248,22,156,8,27,28,249, +22,152,9,247,22,164,8,2,34,6,1,1,59,6,1,1,58,250,22,190,7, 6,14,14,40,91,94,126,97,93,42,41,126,97,40,46,42,41,23,196,2,23, 196,1,88,163,8,36,38,48,11,2,6,223,0,33,70,80,159,36,40,37,20, 15,16,2,32,0,88,163,8,36,38,47,11,2,7,222,33,71,80,159,36,41, @@ -505,7 +505,7 @@ 36,42,37,20,15,16,2,32,0,88,163,8,36,38,46,11,2,9,222,33,74, 80,159,36,43,37,20,15,16,2,88,163,45,39,49,8,128,8,2,10,223,0, 33,76,80,159,36,44,37,20,15,16,2,88,163,45,40,50,8,128,8,2,12, -223,0,33,78,80,159,36,46,37,20,15,16,2,248,22,159,15,70,108,105,110, +223,0,33,78,80,159,36,46,37,20,15,16,2,248,22,160,15,70,108,105,110, 107,115,45,102,105,108,101,80,159,36,47,37,20,15,16,2,247,22,140,2,80, 158,36,48,20,15,16,2,2,79,80,158,36,49,20,15,16,2,248,80,159,37, 51,37,88,163,36,36,49,8,240,8,0,3,0,9,223,1,33,80,80,159,36, @@ -529,7 +529,7 @@ EVAL_ONE_SIZED_STR((char *)expr, 8952); } { - SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,8,53,46,51,46,48,46,50,48,84,0,0,0,0,0,0,0,0,0, + SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,8,53,46,51,46,48,46,50,49,84,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,1,0,0,15,0,40, 0,57,0,75,0,97,0,120,0,140,0,162,0,169,0,176,0,183,0,0,0, 179,1,0,0,74,35,37,112,108,97,99,101,45,115,116,114,117,99,116,1,23, @@ -547,8 +547,8 @@ 5,2,6,38,11,11,11,16,5,2,3,2,7,2,8,2,4,2,2,16,5, 11,11,11,11,11,16,5,2,3,2,7,2,8,2,4,2,2,41,41,37,12, 11,11,16,0,16,0,16,0,36,36,11,12,11,11,16,0,16,0,16,0,36, -36,16,2,20,15,16,6,253,22,134,11,2,3,11,38,36,11,248,22,89,249, -22,79,22,185,10,88,163,36,37,45,44,9,223,9,33,9,80,159,36,36,37, +36,16,2,20,15,16,6,253,22,135,11,2,3,11,38,36,11,248,22,89,249, +22,79,22,186,10,88,163,36,37,45,44,9,223,9,33,9,80,159,36,36,37, 80,159,36,37,37,80,159,36,38,37,80,159,36,39,37,80,159,36,40,37,20, 15,16,3,249,22,7,88,163,36,37,45,44,9,223,2,33,10,88,163,36,37, 45,44,9,223,2,33,11,80,159,36,41,37,80,159,36,42,37,93,29,94,65, @@ -556,7 +556,7 @@ EVAL_ONE_SIZED_STR((char *)expr, 502); } { - SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,8,53,46,51,46,48,46,50,48,84,0,0,0,0,0,0,0,0,0, + SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,8,53,46,51,46,48,46,50,49,84,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,85,0,0,0,1,0,0,7,0,18, 0,45,0,51,0,60,0,67,0,89,0,102,0,128,0,145,0,167,0,175,0, 187,0,202,0,218,0,236,0,0,1,12,1,28,1,51,1,63,1,94,1,101, @@ -590,74 +590,74 @@ 109,111,100,6,2,2,46,46,6,1,1,46,64,102,105,108,101,66,112,108,97, 110,101,116,6,8,8,109,97,105,110,46,114,107,116,6,4,4,46,114,107,116, 67,105,103,110,111,114,101,100,249,22,14,195,80,159,38,50,38,249,80,159,38, -53,39,195,10,90,159,39,11,89,161,39,36,11,248,22,140,15,197,86,95,23, -195,1,23,193,1,28,249,22,171,15,0,11,35,114,120,34,91,46,93,115,115, -36,34,248,22,188,14,23,197,1,249,80,159,41,57,39,198,2,26,196,27,28, -23,195,2,28,249,22,151,9,23,197,2,80,158,39,51,86,94,23,195,1,80, +53,39,195,10,90,159,39,11,89,161,39,36,11,248,22,141,15,197,86,95,23, +195,1,23,193,1,28,249,22,172,15,0,11,35,114,120,34,91,46,93,115,115, +36,34,248,22,189,14,23,197,1,249,80,159,41,57,39,198,2,26,196,27,28, +23,195,2,28,249,22,152,9,23,197,2,80,158,39,51,86,94,23,195,1,80, 158,37,52,27,248,22,148,5,23,197,2,27,28,248,22,77,23,195,2,248,22, -80,23,195,1,23,194,1,28,248,22,183,14,23,194,2,90,159,39,11,89,161, -39,36,11,248,22,140,15,23,197,1,86,95,20,18,159,11,80,158,42,51,199, +80,23,195,1,23,194,1,28,248,22,184,14,23,194,2,90,159,39,11,89,161, +39,36,11,248,22,141,15,23,197,1,86,95,20,18,159,11,80,158,42,51,199, 20,18,159,11,80,158,42,52,192,192,11,11,28,23,193,2,192,86,94,23,193, -1,27,247,22,172,5,28,192,192,247,22,160,15,28,24,194,2,12,20,13,159, +1,27,247,22,172,5,28,192,192,247,22,161,15,28,24,194,2,12,20,13,159, 80,159,36,56,37,80,158,36,54,89,161,37,37,10,249,22,190,4,21,94,2, 27,6,19,19,112,108,97,110,101,116,47,114,101,115,111,108,118,101,114,46,114, 107,116,1,27,112,108,97,110,101,116,45,109,111,100,117,108,101,45,110,97,109, -101,45,114,101,115,111,108,118,101,114,12,250,22,137,15,23,197,1,23,199,1, -249,80,159,43,42,39,23,198,1,2,30,250,22,137,15,23,197,1,23,199,1, -249,80,159,43,42,39,23,198,1,2,30,252,22,137,15,23,199,1,23,201,1, -2,31,247,22,164,8,249,80,159,45,42,39,23,200,1,80,159,45,36,38,252, -22,137,15,23,199,1,23,201,1,2,31,247,22,164,8,249,80,159,45,42,39, -23,200,1,80,159,45,36,38,27,252,22,137,15,23,200,1,23,202,1,2,31, -247,22,164,8,249,80,159,46,42,39,23,201,1,80,159,46,36,38,27,250,22, -154,15,196,11,32,0,88,163,8,36,36,41,11,9,222,11,28,192,249,22,79, -195,194,11,27,252,22,137,15,23,200,1,23,202,1,2,31,247,22,164,8,249, -80,159,46,42,39,23,201,1,80,159,46,36,38,27,250,22,154,15,196,11,32, +101,45,114,101,115,111,108,118,101,114,12,250,22,138,15,23,197,1,23,199,1, +249,80,159,43,42,39,23,198,1,2,30,250,22,138,15,23,197,1,23,199,1, +249,80,159,43,42,39,23,198,1,2,30,252,22,138,15,23,199,1,23,201,1, +2,31,247,22,165,8,249,80,159,45,42,39,23,200,1,80,159,45,36,38,252, +22,138,15,23,199,1,23,201,1,2,31,247,22,165,8,249,80,159,45,42,39, +23,200,1,80,159,45,36,38,27,252,22,138,15,23,200,1,23,202,1,2,31, +247,22,165,8,249,80,159,46,42,39,23,201,1,80,159,46,36,38,27,250,22, +155,15,196,11,32,0,88,163,8,36,36,41,11,9,222,11,28,192,249,22,79, +195,194,11,27,252,22,138,15,23,200,1,23,202,1,2,31,247,22,165,8,249, +80,159,46,42,39,23,201,1,80,159,46,36,38,27,250,22,155,15,196,11,32, 0,88,163,8,36,36,41,11,9,222,11,28,192,249,22,79,195,194,11,27,250, -22,137,15,23,198,1,23,200,1,249,80,159,44,42,39,23,199,1,2,30,27, -250,22,154,15,196,11,32,0,88,163,8,36,36,41,11,9,222,11,28,192,249, -22,79,195,194,11,27,250,22,137,15,23,198,1,23,200,1,249,80,159,44,42, -39,23,199,1,2,30,27,250,22,154,15,196,11,32,0,88,163,8,36,36,41, +22,138,15,23,198,1,23,200,1,249,80,159,44,42,39,23,199,1,2,30,27, +250,22,155,15,196,11,32,0,88,163,8,36,36,41,11,9,222,11,28,192,249, +22,79,195,194,11,27,250,22,138,15,23,198,1,23,200,1,249,80,159,44,42, +39,23,199,1,2,30,27,250,22,155,15,196,11,32,0,88,163,8,36,36,41, 11,9,222,11,28,192,249,22,79,195,194,11,86,95,28,248,80,159,37,40,39, -23,195,2,12,250,22,188,9,2,28,6,12,12,112,97,116,104,45,115,116,114, +23,195,2,12,250,22,189,9,2,28,6,12,12,112,97,116,104,45,115,116,114, 105,110,103,63,23,197,2,28,28,23,195,2,28,248,22,64,23,196,2,10,28, 248,22,88,23,196,2,28,249,22,129,4,248,22,92,23,198,2,37,28,28,248, -22,64,248,22,80,23,197,2,10,248,22,149,9,248,22,80,23,197,2,249,22, -4,22,64,248,22,81,23,198,2,11,11,11,10,12,250,22,188,9,2,28,6, +22,64,248,22,80,23,197,2,10,248,22,150,9,248,22,80,23,197,2,249,22, +4,22,64,248,22,81,23,198,2,11,11,11,10,12,250,22,189,9,2,28,6, 71,71,40,111,114,47,99,32,35,102,32,115,121,109,98,111,108,63,32,40,99, 111,110,115,47,99,32,40,111,114,47,99,32,35,102,32,115,121,109,98,111,108, 63,41,32,40,110,111,110,45,101,109,112,116,121,45,108,105,115,116,111,102,32, 115,121,109,98,111,108,63,41,41,41,23,197,2,27,28,23,196,2,247,22,188, -4,11,27,28,23,194,2,250,22,160,2,80,158,41,41,248,22,132,16,247,22, -158,13,11,11,27,28,23,194,2,250,22,160,2,248,22,81,23,198,2,23,198, +4,11,27,28,23,194,2,250,22,160,2,80,158,41,41,248,22,133,16,247,22, +159,13,11,11,27,28,23,194,2,250,22,160,2,248,22,81,23,198,2,23,198, 2,11,11,28,23,193,2,86,96,23,197,1,23,195,1,23,194,1,20,13,159, 80,159,39,38,37,250,80,159,42,39,37,249,22,33,11,80,159,44,38,37,22, 189,4,248,22,104,196,27,248,22,113,194,20,13,159,80,159,40,38,37,250,80, -159,43,39,37,249,22,33,11,80,159,45,38,37,22,172,5,28,248,22,183,14, -23,197,2,23,196,1,86,94,23,196,1,247,22,160,15,249,247,22,170,5,248, +159,43,39,37,249,22,33,11,80,159,45,38,37,22,172,5,28,248,22,184,14, +23,197,2,23,196,1,86,94,23,196,1,247,22,161,15,249,247,22,170,5,248, 22,80,196,200,86,94,23,193,1,90,159,46,11,89,161,37,36,11,28,248,22, -143,15,23,208,2,23,207,2,27,247,22,172,5,28,23,193,2,249,22,144,15, -23,210,2,23,195,1,23,208,2,89,161,39,37,11,248,22,140,15,23,208,1, -86,94,23,196,1,89,161,38,40,11,28,23,208,2,27,248,22,188,14,23,197, -2,27,248,22,135,8,23,195,2,28,28,249,22,131,4,23,195,2,40,249,22, -138,8,2,26,249,22,141,8,23,198,2,249,22,183,3,23,199,2,40,11,249, -22,7,23,199,2,248,22,128,15,249,22,142,8,250,22,141,8,23,202,1,36, +144,15,23,208,2,23,207,2,27,247,22,172,5,28,23,193,2,249,22,145,15, +23,210,2,23,195,1,23,208,2,89,161,39,37,11,248,22,141,15,23,208,1, +86,94,23,196,1,89,161,38,40,11,28,23,208,2,27,248,22,189,14,23,197, +2,27,248,22,136,8,23,195,2,28,28,249,22,131,4,23,195,2,40,249,22, +139,8,2,26,249,22,142,8,23,198,2,249,22,183,3,23,199,2,40,11,249, +22,7,23,199,2,248,22,129,15,249,22,143,8,250,22,142,8,23,202,1,36, 249,22,183,3,23,203,1,40,5,3,46,115,115,249,22,7,23,199,2,11,249, -22,7,23,197,2,11,89,161,37,42,11,28,249,22,151,9,23,199,2,23,197, -2,23,193,2,249,22,137,15,23,196,2,23,199,2,89,161,37,43,11,28,23, -198,2,28,249,22,151,9,23,200,2,23,197,1,23,193,1,86,94,23,193,1, -249,22,137,15,23,196,2,23,200,2,86,94,23,195,1,11,89,161,37,44,11, -28,249,22,151,9,23,196,2,68,114,101,108,97,116,105,118,101,86,94,23,194, -1,2,29,23,194,1,89,161,37,45,11,247,22,162,15,27,250,22,154,15,23, +22,7,23,197,2,11,89,161,37,42,11,28,249,22,152,9,23,199,2,23,197, +2,23,193,2,249,22,138,15,23,196,2,23,199,2,89,161,37,43,11,28,23, +198,2,28,249,22,152,9,23,200,2,23,197,1,23,193,1,86,94,23,193,1, +249,22,138,15,23,196,2,23,200,2,86,94,23,195,1,11,89,161,37,44,11, +28,249,22,152,9,23,196,2,68,114,101,108,97,116,105,118,101,86,94,23,194, +1,2,29,23,194,1,89,161,37,45,11,247,22,163,15,27,250,22,155,15,23, 203,2,11,32,0,88,163,8,36,36,41,11,9,222,11,27,28,23,194,2,249, 22,79,23,203,2,23,196,1,86,94,23,194,1,11,27,28,23,203,2,28,23, -194,2,11,27,250,22,154,15,23,207,2,11,32,0,88,163,8,36,36,41,11, +194,2,11,27,250,22,155,15,23,207,2,11,32,0,88,163,8,36,36,41,11, 9,222,11,28,192,249,22,79,23,206,2,194,11,11,27,28,23,195,2,23,195, 2,23,194,2,27,88,163,36,37,50,8,64,62,122,111,225,18,13,9,33,47, 27,88,163,36,37,50,8,64,66,97,108,116,45,122,111,225,19,14,11,33,48, 27,88,163,36,37,52,8,65,9,225,20,15,11,33,49,27,88,163,36,37,52, -8,65,9,225,21,16,13,33,50,27,28,23,200,2,23,200,2,248,22,149,9, +8,65,9,225,21,16,13,33,50,27,28,23,200,2,23,200,2,248,22,150,9, 23,200,2,27,28,23,208,2,28,23,200,2,86,94,23,201,1,23,200,2,248, -22,149,9,23,202,1,11,27,28,23,195,2,28,23,197,1,27,249,22,5,88, +22,150,9,23,202,1,11,27,28,23,195,2,28,23,197,1,27,249,22,5,88, 163,8,36,37,53,8,65,9,225,27,22,18,33,51,23,216,2,27,28,23,202, 2,11,193,28,192,192,28,193,28,23,202,2,28,249,22,131,4,248,22,81,196, 248,22,81,23,205,2,193,11,11,11,11,86,94,23,197,1,11,28,23,193,2, @@ -666,8 +666,8 @@ 194,1,20,13,159,80,159,8,24,38,37,250,80,159,8,27,39,37,249,22,33, 11,80,159,8,29,38,37,22,189,4,11,20,13,159,80,159,8,24,38,37,250, 80,159,8,27,39,37,249,22,33,11,80,159,8,29,38,37,22,172,5,28,248, -22,183,14,23,216,2,23,215,1,86,94,23,215,1,247,22,160,15,249,247,22, -166,15,248,22,80,195,23,28,86,94,23,193,1,27,28,23,195,2,28,23,197, +22,184,14,23,216,2,23,215,1,86,94,23,215,1,247,22,161,15,249,247,22, +167,15,248,22,80,195,23,28,86,94,23,193,1,27,28,23,195,2,28,23,197, 1,27,249,22,5,88,163,8,36,37,53,8,65,9,225,28,23,20,33,52,23, 217,2,27,28,23,204,2,11,193,28,192,192,28,193,28,203,28,249,22,131,4, 248,22,81,196,248,22,81,206,193,11,11,11,11,86,94,23,197,1,11,28,23, @@ -675,8 +675,8 @@ 1,23,201,1,23,200,1,23,199,1,23,196,1,23,195,1,20,13,159,80,159, 8,25,38,37,250,80,159,8,28,39,37,249,22,33,11,80,159,8,30,38,37, 22,189,4,23,215,1,20,13,159,80,159,8,25,38,37,250,80,159,8,28,39, -37,249,22,33,11,80,159,8,30,38,37,22,172,5,28,248,22,183,14,23,217, -2,23,216,1,86,94,23,216,1,247,22,160,15,249,247,22,166,15,248,22,80, +37,249,22,33,11,80,159,8,30,38,37,22,172,5,28,248,22,184,14,23,217, +2,23,216,1,86,94,23,216,1,247,22,161,15,249,247,22,167,15,248,22,80, 195,23,29,86,94,23,193,1,27,28,23,197,2,28,23,201,1,27,249,22,5, 20,20,94,88,163,8,36,37,51,8,64,9,225,29,24,20,33,53,23,213,1, 23,218,2,27,28,23,204,2,11,193,28,192,192,28,193,28,23,204,2,28,249, @@ -687,8 +687,8 @@ 22,89,23,199,1,11,23,221,2,12,20,13,159,80,159,8,26,38,37,250,80, 159,8,29,39,37,249,22,33,11,80,159,8,31,38,37,22,189,4,11,20,13, 159,80,159,8,26,38,37,250,80,159,8,29,39,37,249,22,33,11,80,159,8, -31,38,37,22,172,5,28,248,22,183,14,23,218,2,23,217,1,86,94,23,217, -1,247,22,160,15,249,247,22,170,5,248,22,80,195,23,30,86,94,23,193,1, +31,38,37,22,172,5,28,248,22,184,14,23,218,2,23,217,1,86,94,23,217, +1,247,22,161,15,249,247,22,170,5,248,22,80,195,23,30,86,94,23,193,1, 27,28,23,197,1,28,23,201,1,27,249,22,5,20,20,94,88,163,8,36,37, 51,8,64,9,225,30,25,22,33,54,23,215,1,23,219,1,27,28,23,205,2, 11,193,28,192,192,28,193,28,204,28,249,22,131,4,248,22,81,196,248,22,81, @@ -698,29 +698,29 @@ 23,221,2,23,222,2,12,20,13,159,80,159,8,27,38,37,250,80,159,8,30, 39,37,249,22,33,11,80,159,8,32,38,37,22,189,4,23,217,1,20,13,159, 80,159,8,27,38,37,250,80,159,8,30,39,37,249,22,33,11,80,159,8,32, -38,37,22,172,5,28,248,22,183,14,23,219,2,23,218,1,86,94,23,218,1, -247,22,160,15,249,247,22,170,5,248,22,80,195,23,31,86,94,23,193,1,28, +38,37,22,172,5,28,248,22,184,14,23,219,2,23,218,1,86,94,23,218,1, +247,22,161,15,249,247,22,170,5,248,22,80,195,23,31,86,94,23,193,1,28, 28,248,22,77,23,223,2,248,22,80,23,223,2,10,27,28,23,199,2,86,94, 23,215,1,23,214,1,86,94,23,214,1,23,215,1,28,28,248,22,77,23,224, -32,0,0,0,2,248,22,149,9,248,22,131,15,23,195,2,11,12,20,13,159, +32,0,0,0,2,248,22,150,9,248,22,132,15,23,195,2,11,12,20,13,159, 80,159,8,28,38,37,250,80,159,8,31,39,37,249,22,33,11,80,159,8,33, 38,37,22,189,4,28,23,33,28,23,202,1,11,195,86,94,23,202,1,11,20, 13,159,80,159,8,28,38,37,250,80,159,8,31,39,37,249,22,33,11,80,159, -8,33,38,37,22,172,5,28,248,22,183,14,23,220,2,23,219,1,86,94,23, -219,1,247,22,160,15,249,247,22,170,5,194,23,32,12,28,193,250,22,158,2, -248,22,81,197,195,250,22,89,200,201,202,12,27,249,22,171,8,80,159,39,46, +8,33,38,37,22,172,5,28,248,22,184,14,23,220,2,23,219,1,86,94,23, +219,1,247,22,161,15,249,247,22,170,5,194,23,32,12,28,193,250,22,158,2, +248,22,81,197,195,250,22,89,200,201,202,12,27,249,22,172,8,80,159,39,46, 38,249,22,190,3,248,22,186,3,248,22,173,2,200,8,128,8,27,28,193,248, 22,176,2,194,11,28,192,27,249,22,102,198,195,28,192,248,22,81,193,11,11, -27,249,22,190,3,248,22,186,3,248,22,173,2,198,8,128,8,27,249,22,171, -8,80,159,40,46,38,195,27,28,193,248,22,176,2,194,11,250,22,172,8,80, +27,249,22,190,3,248,22,186,3,248,22,173,2,198,8,128,8,27,249,22,172, +8,80,159,40,46,38,195,27,28,193,248,22,176,2,194,11,250,22,173,8,80, 159,42,46,38,197,248,22,175,2,249,22,79,249,22,79,204,205,28,198,198,9, 0,17,35,114,120,34,94,40,46,42,63,41,47,40,46,42,41,36,34,32,60, -88,163,8,36,37,59,11,2,32,222,33,61,27,249,22,171,15,2,59,23,196, +88,163,8,36,37,59,11,2,32,222,33,61,27,249,22,172,15,2,59,23,196, 2,28,23,193,2,86,94,23,194,1,249,22,79,248,22,104,23,196,2,27,248, -22,113,23,197,1,27,249,22,171,15,2,59,23,196,2,28,23,193,2,86,94, +22,113,23,197,1,27,249,22,172,15,2,59,23,196,2,28,23,193,2,86,94, 23,194,1,249,22,79,248,22,104,23,196,2,27,248,22,113,23,197,1,27,249, -22,171,15,2,59,23,196,2,28,23,193,2,86,94,23,194,1,249,22,79,248, -22,104,23,196,2,27,248,22,113,23,197,1,27,249,22,171,15,2,59,23,196, +22,172,15,2,59,23,196,2,28,23,193,2,86,94,23,194,1,249,22,79,248, +22,104,23,196,2,27,248,22,113,23,197,1,27,249,22,172,15,2,59,23,196, 2,28,23,193,2,86,94,23,194,1,249,22,79,248,22,104,23,196,2,248,2, 60,248,22,113,23,197,1,248,22,89,194,248,22,89,194,248,22,89,194,248,22, 89,194,32,62,88,163,36,37,55,11,2,32,222,33,63,28,248,22,87,248,22, @@ -730,12 +730,12 @@ 22,81,23,195,2,249,22,7,9,248,22,80,195,90,159,38,11,89,161,38,36, 11,248,2,62,248,22,81,196,249,22,7,249,22,79,248,22,80,199,196,195,249, 22,7,249,22,79,248,22,80,199,196,195,249,22,7,249,22,79,248,22,80,199, -196,195,27,27,249,22,171,15,2,59,23,197,2,28,23,193,2,86,94,23,195, -1,249,22,79,248,22,104,23,196,2,27,248,22,113,23,197,1,27,249,22,171, +196,195,27,27,249,22,172,15,2,59,23,197,2,28,23,193,2,86,94,23,195, +1,249,22,79,248,22,104,23,196,2,27,248,22,113,23,197,1,27,249,22,172, 15,2,59,23,196,2,28,23,193,2,86,94,23,194,1,249,22,79,248,22,104, -23,196,2,27,248,22,113,23,197,1,27,249,22,171,15,2,59,23,196,2,28, +23,196,2,27,248,22,113,23,197,1,27,249,22,172,15,2,59,23,196,2,28, 23,193,2,86,94,23,194,1,249,22,79,248,22,104,23,196,2,27,248,22,113, -23,197,1,27,249,22,171,15,2,59,23,196,2,28,23,193,2,86,94,23,194, +23,197,1,27,249,22,172,15,2,59,23,196,2,28,23,193,2,86,94,23,194, 1,249,22,79,248,22,104,23,196,2,248,2,60,248,22,113,23,197,1,248,22, 89,194,248,22,89,194,248,22,89,194,248,22,89,195,28,23,195,1,192,28,248, 22,87,248,22,81,23,195,2,249,22,7,9,248,22,80,195,27,248,22,81,194, @@ -744,147 +744,147 @@ 248,22,87,248,22,81,23,197,2,249,22,7,9,248,22,80,197,90,159,38,11, 89,161,38,36,11,248,2,62,248,22,81,198,249,22,7,249,22,79,248,22,80, 201,196,195,249,22,7,249,22,79,248,22,80,202,196,195,249,22,7,249,22,79, -248,22,80,200,196,195,86,96,28,248,22,146,5,23,196,2,12,250,22,188,9, +248,22,80,200,196,195,86,96,28,248,22,146,5,23,196,2,12,250,22,189,9, 2,22,6,21,21,114,101,115,111,108,118,101,100,45,109,111,100,117,108,101,45, -112,97,116,104,63,23,198,2,28,28,23,196,2,248,22,159,13,23,197,2,10, -12,250,22,188,9,2,22,6,20,20,40,111,114,47,99,32,35,102,32,110,97, +112,97,116,104,63,23,198,2,28,28,23,196,2,248,22,160,13,23,197,2,10, +12,250,22,189,9,2,22,6,20,20,40,111,114,47,99,32,35,102,32,110,97, 109,101,115,112,97,99,101,63,41,23,199,2,28,24,193,2,248,24,194,1,23, -196,2,86,94,23,193,1,12,27,250,22,160,2,80,159,41,41,38,248,22,132, -16,247,22,158,13,11,27,28,23,194,2,23,194,1,86,94,23,194,1,27,249, +196,2,86,94,23,193,1,12,27,250,22,160,2,80,159,41,41,38,248,22,133, +16,247,22,159,13,11,27,28,23,194,2,23,194,1,86,94,23,194,1,27,249, 22,79,247,22,140,2,247,22,140,2,86,94,250,22,158,2,80,159,43,41,38, -248,22,132,16,247,22,158,13,195,192,86,94,250,22,158,2,248,22,80,23,197, +248,22,133,16,247,22,159,13,195,192,86,94,250,22,158,2,248,22,80,23,197, 2,23,200,2,68,100,101,99,108,97,114,101,100,28,23,198,2,27,28,248,22, 77,248,22,148,5,23,200,2,248,22,147,5,248,22,80,248,22,148,5,23,201, -1,23,198,1,27,250,22,160,2,80,159,44,41,38,248,22,132,16,23,204,1, +1,23,198,1,27,250,22,160,2,80,159,44,41,38,248,22,133,16,23,204,1, 11,28,23,193,2,27,250,22,160,2,248,22,81,23,198,1,197,11,28,192,250, 22,158,2,248,22,81,199,197,195,12,12,12,251,211,197,198,199,10,32,67,88, 163,36,38,47,11,76,102,108,97,116,116,101,110,45,115,117,98,45,112,97,116, 104,222,33,70,32,68,88,163,36,40,54,11,2,32,222,33,69,28,248,22,87, -23,197,2,28,248,22,87,195,192,249,22,79,194,248,22,94,197,28,249,22,153, +23,197,2,28,248,22,87,195,192,249,22,79,194,248,22,94,197,28,249,22,154, 9,248,22,80,23,199,2,2,35,28,248,22,87,23,196,2,86,95,23,196,1, -23,195,1,250,22,184,9,2,22,6,37,37,116,111,111,32,109,97,110,121,32, +23,195,1,250,22,185,9,2,22,6,37,37,116,111,111,32,109,97,110,121,32, 34,46,46,34,115,32,105,110,32,115,117,98,109,111,100,117,108,101,32,112,97, -116,104,58,32,126,46,115,250,22,90,2,34,28,249,22,153,9,23,201,2,2, -36,198,28,248,22,183,14,199,198,249,22,89,28,248,22,64,201,2,4,2,37, +116,104,58,32,126,46,115,250,22,90,2,34,28,249,22,154,9,23,201,2,2, +36,198,28,248,22,184,14,199,198,249,22,89,28,248,22,64,201,2,4,2,37, 200,199,251,2,68,196,197,248,22,81,199,248,22,81,200,251,2,68,196,197,249, 22,79,248,22,80,202,200,248,22,81,200,251,2,68,196,197,9,197,27,249,22, -164,7,6,31,31,115,116,97,110,100,97,114,100,45,109,111,100,117,108,101,45, -110,97,109,101,45,114,101,115,111,108,118,101,114,58,32,196,28,193,250,22,186, -9,11,195,196,248,22,184,9,193,28,249,22,147,7,194,2,36,2,29,28,249, -22,147,7,194,2,35,62,117,112,192,32,73,88,163,8,36,37,50,11,67,115, -115,45,62,114,107,116,222,33,74,27,248,22,144,7,194,28,249,22,131,4,194, -39,28,249,22,147,7,6,3,3,46,115,115,249,22,163,7,197,249,22,183,3, -198,39,249,22,164,7,250,22,163,7,198,36,249,22,183,3,199,39,2,40,193, +165,7,6,31,31,115,116,97,110,100,97,114,100,45,109,111,100,117,108,101,45, +110,97,109,101,45,114,101,115,111,108,118,101,114,58,32,196,28,193,250,22,187, +9,11,195,196,248,22,185,9,193,28,249,22,148,7,194,2,36,2,29,28,249, +22,148,7,194,2,35,62,117,112,192,32,73,88,163,8,36,37,50,11,67,115, +115,45,62,114,107,116,222,33,74,27,248,22,145,7,194,28,249,22,131,4,194, +39,28,249,22,148,7,6,3,3,46,115,115,249,22,164,7,197,249,22,183,3, +198,39,249,22,165,7,250,22,164,7,198,36,249,22,183,3,199,39,2,40,193, 193,0,8,35,114,120,34,91,46,93,34,32,76,88,163,8,36,37,47,11,2, 32,222,33,77,28,248,22,87,23,194,2,9,250,22,90,6,4,4,10,32,32, -32,248,22,187,14,248,22,105,23,198,2,248,2,76,248,22,81,23,198,1,28, -249,22,153,9,248,22,81,23,200,2,23,197,1,28,249,22,151,9,248,22,80, -23,200,1,23,196,1,251,22,184,9,2,22,6,41,41,99,121,99,108,101,32, +32,248,22,188,14,248,22,105,23,198,2,248,2,76,248,22,81,23,198,1,28, +249,22,154,9,248,22,81,23,200,2,23,197,1,28,249,22,152,9,248,22,80, +23,200,1,23,196,1,251,22,185,9,2,22,6,41,41,99,121,99,108,101,32, 105,110,32,108,111,97,100,105,110,103,10,32,32,97,116,32,112,97,116,104,58, 32,126,97,10,32,32,112,97,116,104,115,58,126,97,23,200,1,249,22,1,22, -164,7,248,2,76,248,22,94,23,201,1,12,12,247,192,20,13,159,80,159,43, -49,38,249,22,79,249,22,79,248,22,132,16,247,22,158,13,23,201,1,23,195, +165,7,248,2,76,248,22,94,23,201,1,12,12,247,192,20,13,159,80,159,43, +49,38,249,22,79,249,22,79,248,22,133,16,247,22,159,13,23,201,1,23,195, 1,20,13,159,80,159,43,38,37,250,80,159,46,39,37,249,22,33,11,80,159, 48,38,37,22,188,4,23,198,2,249,247,22,171,5,23,200,1,27,248,22,67, -248,22,187,14,23,201,1,28,23,202,2,28,250,22,160,2,248,22,80,23,201, +248,22,188,14,23,201,1,28,23,202,2,28,250,22,160,2,248,22,80,23,201, 1,23,201,1,11,249,22,79,11,203,249,22,79,194,203,192,86,94,28,248,22, -156,5,23,196,2,12,28,23,197,2,250,22,186,9,11,6,15,15,98,97,100, -32,109,111,100,117,108,101,32,112,97,116,104,23,200,2,250,22,188,9,2,22, -2,33,23,198,2,28,28,248,22,77,23,196,2,249,22,151,9,248,22,80,23, +156,5,23,196,2,12,28,23,197,2,250,22,187,9,11,6,15,15,98,97,100, +32,109,111,100,117,108,101,32,112,97,116,104,23,200,2,250,22,189,9,2,22, +2,33,23,198,2,28,28,248,22,77,23,196,2,249,22,152,9,248,22,80,23, 198,2,2,4,11,248,22,147,5,248,22,104,196,28,28,248,22,77,23,196,2, -28,249,22,151,9,248,22,80,23,198,2,2,34,28,248,22,77,248,22,104,23, -197,2,249,22,151,9,248,22,108,23,198,2,2,4,11,11,11,86,97,23,198, +28,249,22,152,9,248,22,80,23,198,2,2,34,28,248,22,77,248,22,104,23, +197,2,249,22,152,9,248,22,108,23,198,2,2,4,11,11,11,86,97,23,198, 1,23,197,1,23,196,1,23,193,1,248,22,147,5,249,2,67,248,22,121,23, -199,2,248,22,106,23,199,1,28,28,248,22,77,23,196,2,28,249,22,151,9, -248,22,80,23,198,2,2,34,28,28,249,22,153,9,248,22,104,23,198,2,2, -36,10,249,22,153,9,248,22,104,23,198,2,2,35,28,23,196,2,27,248,22, +199,2,248,22,106,23,199,1,28,28,248,22,77,23,196,2,28,249,22,152,9, +248,22,80,23,198,2,2,34,28,28,249,22,154,9,248,22,104,23,198,2,2, +36,10,249,22,154,9,248,22,104,23,198,2,2,35,28,23,196,2,27,248,22, 148,5,23,198,2,28,248,22,64,193,10,28,248,22,77,193,248,22,64,248,22, 80,194,11,11,11,11,11,86,96,23,198,1,23,197,1,23,193,1,27,248,22, 148,5,23,198,1,248,22,147,5,249,2,67,28,248,22,77,23,197,2,248,22, -80,23,197,2,23,196,2,27,28,249,22,153,9,248,22,104,23,203,2,2,35, +80,23,197,2,23,196,2,27,28,249,22,154,9,248,22,104,23,203,2,2,35, 248,22,81,200,248,22,106,200,28,248,22,77,23,198,2,249,22,93,248,22,81, -199,194,192,28,28,248,22,77,23,196,2,249,22,151,9,248,22,80,23,198,2, +199,194,192,28,28,248,22,77,23,196,2,249,22,152,9,248,22,80,23,198,2, 2,38,11,86,94,248,80,159,38,8,27,39,193,253,213,200,201,202,203,11,80, -158,43,54,28,28,248,22,77,23,196,2,28,249,22,151,9,248,22,80,23,198, -2,2,34,28,248,22,77,248,22,104,23,197,2,249,22,151,9,248,22,108,23, +158,43,54,28,28,248,22,77,23,196,2,28,249,22,152,9,248,22,80,23,198, +2,2,34,28,248,22,77,248,22,104,23,197,2,249,22,152,9,248,22,108,23, 198,2,2,38,11,11,11,86,94,248,80,159,38,8,27,39,193,253,213,248,22, 104,201,201,202,203,248,22,106,201,80,158,43,54,86,94,23,193,1,27,88,163, 8,36,37,47,11,79,115,104,111,119,45,99,111,108,108,101,99,116,105,111,110, -45,101,114,114,223,5,33,71,27,28,248,22,77,23,198,2,28,249,22,151,9, -2,34,248,22,80,23,200,2,27,248,22,104,23,199,2,28,28,249,22,153,9, -23,195,2,2,36,10,249,22,153,9,23,195,2,2,35,86,94,23,193,1,28, +45,101,114,114,223,5,33,71,27,28,248,22,77,23,198,2,28,249,22,152,9, +2,34,248,22,80,23,200,2,27,248,22,104,23,199,2,28,28,249,22,154,9, +23,195,2,2,36,10,249,22,154,9,23,195,2,2,35,86,94,23,193,1,28, 23,199,2,27,248,22,148,5,23,201,2,28,248,22,77,193,248,22,80,193,192, -250,22,184,9,2,22,6,45,45,110,111,32,98,97,115,101,32,112,97,116,104, +250,22,185,9,2,22,6,45,45,110,111,32,98,97,115,101,32,112,97,116,104, 32,102,111,114,32,114,101,108,97,116,105,118,101,32,115,117,98,109,111,100,117, 108,101,32,112,97,116,104,58,32,126,46,115,23,201,2,192,23,197,2,23,197, -2,27,28,248,22,77,23,199,2,28,249,22,151,9,2,34,248,22,80,23,201, -2,27,28,28,28,249,22,153,9,248,22,104,23,202,2,2,36,10,249,22,153, +2,27,28,248,22,77,23,199,2,28,249,22,152,9,2,34,248,22,80,23,201, +2,27,28,28,28,249,22,154,9,248,22,104,23,202,2,2,36,10,249,22,154, 9,248,22,104,23,202,2,2,35,23,200,2,11,27,248,22,148,5,23,202,2, -27,28,249,22,153,9,248,22,104,23,204,2,2,35,248,22,81,23,202,1,248, +27,28,249,22,154,9,248,22,104,23,204,2,2,35,248,22,81,23,202,1,248, 22,106,23,202,1,28,248,22,77,23,195,2,249,2,67,248,22,80,23,197,2, 249,22,93,248,22,81,23,199,1,23,197,1,249,2,67,23,196,1,23,195,1, -249,2,67,2,36,28,249,22,153,9,248,22,104,23,204,2,2,35,248,22,81, +249,2,67,2,36,28,249,22,154,9,248,22,104,23,204,2,2,35,248,22,81, 23,202,1,248,22,106,23,202,1,28,248,22,77,193,248,22,81,193,11,11,11, 27,28,248,22,64,23,196,2,27,248,80,159,43,47,39,249,22,79,23,199,2, -247,22,161,15,28,23,193,2,192,86,94,23,193,1,90,159,38,11,89,161,38, +247,22,162,15,28,23,193,2,192,86,94,23,193,1,90,159,38,11,89,161,38, 36,11,249,80,159,46,53,39,248,22,70,23,201,2,11,27,28,248,22,87,23, -195,2,2,39,249,22,164,7,23,197,2,2,40,251,80,159,49,58,39,23,204, +195,2,2,39,249,22,165,7,23,197,2,2,40,251,80,159,49,58,39,23,204, 1,28,248,22,87,23,199,2,23,199,1,86,94,23,199,1,248,22,80,23,199, 2,28,248,22,87,23,199,2,86,94,23,198,1,9,248,22,81,23,199,1,23, -197,1,28,248,22,141,7,23,196,2,86,94,23,196,1,27,248,80,159,43,8, +197,1,28,248,22,142,7,23,196,2,86,94,23,196,1,27,248,80,159,43,8, 28,39,23,202,2,27,248,80,159,44,47,39,249,22,79,23,200,2,23,197,2, 28,23,193,2,192,86,94,23,193,1,90,159,38,11,89,161,38,36,11,249,80, -159,47,53,39,23,201,2,11,250,22,1,22,137,15,23,199,1,249,22,93,249, +159,47,53,39,23,201,2,11,250,22,1,22,138,15,23,199,1,249,22,93,249, 22,2,32,0,88,163,8,36,37,44,11,9,222,33,72,23,200,1,248,22,89, -248,2,73,23,201,1,28,248,22,183,14,23,196,2,86,94,23,196,1,248,80, -159,42,8,29,39,248,22,146,15,28,248,22,143,15,23,198,2,23,197,2,249, -22,144,15,23,199,2,248,80,159,46,8,28,39,23,205,2,28,249,22,151,9, +248,2,73,23,201,1,28,248,22,184,14,23,196,2,86,94,23,196,1,248,80, +159,42,8,29,39,248,22,147,15,28,248,22,144,15,23,198,2,23,197,2,249, +22,145,15,23,199,2,248,80,159,46,8,28,39,23,205,2,28,249,22,152,9, 248,22,80,23,198,2,2,27,27,248,80,159,43,47,39,249,22,79,23,199,2, -247,22,161,15,28,23,193,2,192,86,94,23,193,1,90,159,39,11,89,161,38, +247,22,162,15,28,23,193,2,192,86,94,23,193,1,90,159,39,11,89,161,38, 36,11,249,80,159,47,53,39,248,22,104,23,202,2,11,89,161,37,38,11,28, -248,22,87,248,22,106,23,201,2,28,248,22,87,23,194,2,249,22,175,15,2, +248,22,87,248,22,106,23,201,2,28,248,22,87,23,194,2,249,22,176,15,2, 75,23,196,2,11,10,27,28,23,196,2,248,2,73,23,196,2,28,248,22,87, -23,195,2,2,39,28,249,22,175,15,2,75,23,197,2,248,2,73,23,196,2, -249,22,164,7,23,197,2,2,40,27,28,23,197,1,86,94,23,196,1,249,22, +23,195,2,2,39,28,249,22,176,15,2,75,23,197,2,248,2,73,23,196,2, +249,22,165,7,23,197,2,2,40,27,28,23,197,1,86,94,23,196,1,249,22, 93,28,248,22,87,248,22,106,23,205,2,21,93,6,5,5,109,122,108,105,98, 249,22,1,22,93,249,22,2,80,159,53,8,30,39,248,22,106,23,208,2,23, 197,1,28,248,22,87,23,196,2,86,94,23,195,1,248,22,89,23,197,1,86, 94,23,196,1,23,195,1,251,80,159,51,58,39,23,206,1,248,22,80,23,198, -2,248,22,81,23,198,1,23,198,1,28,249,22,151,9,248,22,80,23,198,2, -2,37,248,80,159,42,8,29,39,248,22,146,15,249,22,144,15,248,22,148,15, +2,248,22,81,23,198,1,23,198,1,28,249,22,152,9,248,22,80,23,198,2, +2,37,248,80,159,42,8,29,39,248,22,147,15,249,22,145,15,248,22,149,15, 248,22,104,23,201,2,248,80,159,46,8,28,39,23,205,2,12,86,94,28,28, -248,22,183,14,23,194,2,10,248,22,166,8,23,194,2,86,94,23,201,1,12, -28,23,201,2,250,22,186,9,67,114,101,113,117,105,114,101,249,22,189,7,6, +248,22,184,14,23,194,2,10,248,22,167,8,23,194,2,86,94,23,201,1,12, +28,23,201,2,250,22,187,9,67,114,101,113,117,105,114,101,249,22,190,7,6, 17,17,98,97,100,32,109,111,100,117,108,101,32,112,97,116,104,126,97,28,23, 198,2,248,22,80,23,199,2,6,0,0,23,204,1,86,94,23,201,1,250,22, -188,9,2,22,2,33,23,198,2,27,28,248,22,166,8,23,195,2,249,22,171, -8,23,196,2,36,249,22,146,15,248,22,147,15,23,197,2,11,27,28,248,22, -166,8,23,196,2,249,22,171,8,23,197,2,37,248,80,159,44,59,39,23,195, -2,90,159,39,11,89,161,39,36,11,28,248,22,166,8,23,199,2,250,22,7, -2,41,249,22,171,8,23,203,2,38,2,41,248,22,140,15,23,198,2,86,95, -23,195,1,23,193,1,27,28,248,22,166,8,23,200,2,249,22,171,8,23,201, -2,39,249,80,159,49,57,39,23,197,2,5,0,27,28,248,22,166,8,23,201, -2,249,22,171,8,23,202,2,40,248,22,147,5,23,200,2,27,250,22,160,2, -80,159,52,41,38,248,22,132,16,247,22,158,13,11,27,28,23,194,2,23,194, +189,9,2,22,2,33,23,198,2,27,28,248,22,167,8,23,195,2,249,22,172, +8,23,196,2,36,249,22,147,15,248,22,148,15,23,197,2,11,27,28,248,22, +167,8,23,196,2,249,22,172,8,23,197,2,37,248,80,159,44,59,39,23,195, +2,90,159,39,11,89,161,39,36,11,28,248,22,167,8,23,199,2,250,22,7, +2,41,249,22,172,8,23,203,2,38,2,41,248,22,141,15,23,198,2,86,95, +23,195,1,23,193,1,27,28,248,22,167,8,23,200,2,249,22,172,8,23,201, +2,39,249,80,159,49,57,39,23,197,2,5,0,27,28,248,22,167,8,23,201, +2,249,22,172,8,23,202,2,40,248,22,147,5,23,200,2,27,250,22,160,2, +80,159,52,41,38,248,22,133,16,247,22,159,13,11,27,28,23,194,2,23,194, 1,86,94,23,194,1,27,249,22,79,247,22,140,2,247,22,140,2,86,94,250, -22,158,2,80,159,54,41,38,248,22,132,16,247,22,158,13,195,192,27,28,23, +22,158,2,80,159,54,41,38,248,22,133,16,247,22,159,13,195,192,27,28,23, 204,2,248,22,147,5,249,22,79,248,22,148,5,23,200,2,23,207,2,23,196, 2,86,95,28,23,212,1,27,250,22,160,2,248,22,80,23,199,2,196,11,28, 23,193,1,12,27,27,28,248,22,17,80,159,55,50,38,80,159,54,50,38,247, -22,19,251,22,33,11,80,159,58,49,38,9,23,197,1,27,248,22,132,16,247, -22,158,13,86,94,249,22,3,20,20,94,88,163,8,36,37,54,11,9,226,14, +22,19,251,22,33,11,80,159,58,49,38,9,23,197,1,27,248,22,133,16,247, +22,159,13,86,94,249,22,3,20,20,94,88,163,8,36,37,54,11,9,226,14, 13,2,3,33,78,23,195,1,23,196,2,248,28,248,22,17,80,159,56,50,38, 32,0,88,163,36,37,42,11,9,222,33,79,80,159,55,8,31,39,20,20,96, 88,163,36,36,56,8,140,128,9,230,19,15,13,12,8,7,5,2,33,80,23, -195,1,23,198,1,23,208,1,12,28,28,248,22,166,8,23,204,1,11,28,248, -22,141,7,23,206,2,10,28,248,22,64,23,206,2,10,28,248,22,77,23,206, -2,249,22,151,9,248,22,80,23,208,2,2,27,11,249,80,159,53,48,39,28, -248,22,141,7,23,208,2,249,22,79,23,209,1,248,80,159,56,8,28,39,23, -215,1,86,94,23,212,1,249,22,79,23,209,1,247,22,161,15,252,22,168,8, +195,1,23,198,1,23,208,1,12,28,28,248,22,167,8,23,204,1,11,28,248, +22,142,7,23,206,2,10,28,248,22,64,23,206,2,10,28,248,22,77,23,206, +2,249,22,152,9,248,22,80,23,208,2,2,27,11,249,80,159,53,48,39,28, +248,22,142,7,23,208,2,249,22,79,23,209,1,248,80,159,56,8,28,39,23, +215,1,86,94,23,212,1,249,22,79,23,209,1,247,22,162,15,252,22,169,8, 23,209,1,23,208,1,23,206,1,23,204,1,23,203,1,12,192,86,96,20,18, 159,11,80,158,36,54,248,80,159,37,8,26,37,249,22,33,11,80,159,39,56, 37,248,22,187,4,80,159,37,55,38,248,22,171,5,80,159,37,37,39,248,22, -152,14,80,159,37,44,39,20,18,159,11,80,158,36,54,248,80,159,37,8,26, +153,14,80,159,37,44,39,20,18,159,11,80,158,36,54,248,80,159,37,8,26, 37,249,22,33,11,80,159,39,56,37,20,18,159,11,80,158,36,54,248,80,159, 37,8,26,37,249,22,33,11,80,159,39,56,37,159,36,20,113,159,36,16,1, 11,16,0,20,26,144,9,2,1,2,1,29,11,11,11,9,9,11,11,11,10, @@ -910,14 +910,14 @@ 50,8,240,0,128,1,0,67,103,101,116,45,100,105,114,223,0,33,45,80,159, 36,8,28,39,20,15,16,2,88,164,8,34,37,45,8,240,0,0,20,0,1, 21,112,114,101,112,45,112,108,97,110,101,116,45,114,101,115,111,108,118,101,114, -33,37,224,1,0,33,46,80,159,36,8,27,39,20,15,16,2,248,22,163,8, +33,37,224,1,0,33,46,80,159,36,8,27,39,20,15,16,2,248,22,164,8, 69,115,111,45,115,117,102,102,105,120,80,159,36,36,37,20,15,16,2,88,163, 36,38,8,42,8,125,2,3,223,0,33,55,80,159,36,37,37,20,15,16,2, 32,0,88,163,8,36,41,52,11,2,10,222,33,56,80,159,36,43,37,20,15, 16,2,20,27,158,32,0,88,163,8,36,37,42,11,2,11,222,192,32,0,88, 163,8,36,37,42,11,2,11,222,192,80,159,36,44,37,20,15,16,2,247,22, 143,2,80,159,36,41,37,20,15,16,2,8,128,8,80,159,36,45,37,20,15, -16,2,249,22,167,8,8,128,8,11,80,159,36,46,37,20,15,16,2,88,163, +16,2,249,22,168,8,8,128,8,11,80,159,36,46,37,20,15,16,2,88,163, 8,36,37,50,8,128,16,2,14,223,0,33,57,80,159,36,47,37,20,15,16, 2,88,163,8,36,38,55,8,128,16,2,15,223,0,33,58,80,159,36,48,37, 20,15,16,2,247,22,75,80,159,36,49,37,20,15,16,2,248,22,18,74,109, @@ -937,7 +937,7 @@ EVAL_ONE_SIZED_STR((char *)expr, 7928); } { - SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,8,53,46,51,46,48,46,50,48,84,0,0,0,0,0,0,0,0,0, + SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,8,53,46,51,46,48,46,50,49,84,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,11,0,0,0,1,0,0,10,0,16, 0,29,0,44,0,58,0,78,0,90,0,104,0,118,0,170,0,0,0,98,1, 0,0,69,35,37,98,117,105,108,116,105,110,65,113,117,111,116,101,29,94,2, diff --git a/src/racket/src/mzmark_type.inc b/src/racket/src/mzmark_type.inc index 9ddfa83a9d..70b8c0ddd4 100644 --- a/src/racket/src/mzmark_type.inc +++ b/src/racket/src/mzmark_type.inc @@ -1565,6 +1565,7 @@ static int input_port_SIZE(void *p, struct NewGC *gc) { static int input_port_MARK(void *p, struct NewGC *gc) { Scheme_Input_Port *ip = (Scheme_Input_Port *)p; + gcMARK2(ip->p.position_redirect, gc); gcMARK2(ip->sub_type, gc); gcMARK2(ip->port_data, gc); gcMARK2(ip->name, gc); @@ -1591,6 +1592,7 @@ static int input_port_MARK(void *p, struct NewGC *gc) { static int input_port_FIXUP(void *p, struct NewGC *gc) { Scheme_Input_Port *ip = (Scheme_Input_Port *)p; + gcFIXUP2(ip->p.position_redirect, gc); gcFIXUP2(ip->sub_type, gc); gcFIXUP2(ip->port_data, gc); gcFIXUP2(ip->name, gc); @@ -1626,6 +1628,7 @@ static int output_port_SIZE(void *p, struct NewGC *gc) { static int output_port_MARK(void *p, struct NewGC *gc) { Scheme_Output_Port *op = (Scheme_Output_Port *)p; + gcMARK2(op->p.position_redirect, gc); gcMARK2(op->sub_type, gc); gcMARK2(op->port_data, gc); gcMARK2(op->name, gc); @@ -1643,6 +1646,7 @@ static int output_port_MARK(void *p, struct NewGC *gc) { static int output_port_FIXUP(void *p, struct NewGC *gc) { Scheme_Output_Port *op = (Scheme_Output_Port *)p; + gcFIXUP2(op->p.position_redirect, gc); gcFIXUP2(op->sub_type, gc); gcFIXUP2(op->port_data, gc); gcFIXUP2(op->name, gc); diff --git a/src/racket/src/mzmarksrc.c b/src/racket/src/mzmarksrc.c index b2b190be6a..3215999d21 100644 --- a/src/racket/src/mzmarksrc.c +++ b/src/racket/src/mzmarksrc.c @@ -599,6 +599,7 @@ input_port { mark: Scheme_Input_Port *ip = (Scheme_Input_Port *)p; + gcMARK2(ip->p.position_redirect, gc); gcMARK2(ip->sub_type, gc); gcMARK2(ip->port_data, gc); gcMARK2(ip->name, gc); @@ -626,6 +627,7 @@ output_port { mark: Scheme_Output_Port *op = (Scheme_Output_Port *)p; + gcMARK2(op->p.position_redirect, gc); gcMARK2(op->sub_type, gc); gcMARK2(op->port_data, gc); gcMARK2(op->name, gc); diff --git a/src/racket/src/port.c b/src/racket/src/port.c index 1976d809fc..a5cac57488 100644 --- a/src/racket/src/port.c +++ b/src/racket/src/port.c @@ -3842,8 +3842,8 @@ static void check_input_port_lock(Scheme_Port *ip) } } -intptr_t -scheme_tell (Scheme_Object *port) +static intptr_t +do_tell (Scheme_Object *port, int not_via_loc) { Scheme_Port *ip; intptr_t pos; @@ -3854,7 +3854,7 @@ scheme_tell (Scheme_Object *port) CHECK_IOPORT_CLOSED("get-file-position", ip); - if (!ip->count_lines || (ip->position < 0)) + if (not_via_loc || !ip->count_lines || (ip->position < 0)) pos = ip->position; else pos = ip->readpos; @@ -3862,6 +3862,12 @@ scheme_tell (Scheme_Object *port) return pos; } +intptr_t +scheme_tell (Scheme_Object *port) +{ + return do_tell(port, 0); +} + intptr_t scheme_tell_line (Scheme_Object *port) { @@ -3988,7 +3994,7 @@ scheme_tell_all (Scheme_Object *port, intptr_t *_line, intptr_t *_col, intptr_t line = scheme_tell_line(port); col = scheme_tell_column(port); - pos = scheme_tell(port); + pos = scheme_tell_can_redirect(port, 0); if (_line) *_line = line; if (_col) *_col = col; @@ -3996,6 +4002,40 @@ scheme_tell_all (Scheme_Object *port, intptr_t *_line, intptr_t *_col, intptr_t } } +intptr_t +scheme_tell_can_redirect (Scheme_Object *port, int not_via_loc) +{ + Scheme_Port *ip; + Scheme_Object *v; + + while (1) { + ip = scheme_port_record(port); + + if (ip->position_redirect) { + if (SCHEME_INPUT_PORTP(ip->position_redirect) + || SCHEME_OUTPUT_PORTP(ip->position_redirect)) { + SCHEME_USE_FUEL(1); + port = ip->position_redirect; + } else { + v = scheme_apply(ip->position_redirect, 0, NULL); + if (SCHEME_INTP(v) && (SCHEME_INT_VAL(v) >= 1)) + return SCHEME_INT_VAL(v) - 1; + else if (SCHEME_FALSEP(v) || (SCHEME_BIGNUMP(v) && SCHEME_BIGPOS(v))) + return -1; + else { + Scheme_Object *a[1]; + a[0] = v; + scheme_wrong_contract("file-position", "exact-positive-integer?", 0, -1, a); + return -1; + } + } + } else + break; + } + + return do_tell(port, not_via_loc); +} + void scheme_set_port_location(int argc, Scheme_Object **argv) { Scheme_Port *ip; @@ -5072,8 +5112,8 @@ static int win_seekable(int fd) } #endif -Scheme_Object * -scheme_file_position(int argc, Scheme_Object *argv[]) +static Scheme_Object * +do_file_position(const char *who, int argc, Scheme_Object *argv[], int can_false) { FILE *f; Scheme_Indexed_String *is; @@ -5084,7 +5124,7 @@ scheme_file_position(int argc, Scheme_Object *argv[]) int wis; if (!SCHEME_OUTPUT_PORTP(argv[0]) && !SCHEME_INPUT_PORTP(argv[0])) - scheme_wrong_contract("file-position", "port?", 0, argc, argv); + scheme_wrong_contract(who, "port?", 0, argc, argv); if (argc == 2) { if (!SCHEME_EOFP(argv[1])) { int ok = 0; @@ -5098,7 +5138,7 @@ scheme_file_position(int argc, Scheme_Object *argv[]) } if (!ok) - scheme_wrong_contract("file-position", "(or/c exact-nonnegative-integer? eof-object?)", 1, argc, argv); + scheme_wrong_contract(who, "(or/c exact-nonnegative-integer? eof-object?)", 1, argc, argv); } } @@ -5125,8 +5165,18 @@ scheme_file_position(int argc, Scheme_Object *argv[]) } else if (SAME_OBJ(op->sub_type, scheme_string_output_port_type)) { is = (Scheme_Indexed_String *)op->port_data; wis = 1; - } else if (argc < 2) - return scheme_make_integer(scheme_output_tell(argv[0])); + } else if (argc < 2) { + intptr_t pos; + pos = scheme_tell_can_redirect(argv[0], 1); + if (pos < 0) { + if (can_false) return scheme_false; + scheme_raise_exn(MZEXN_FAIL_FILESYSTEM, + "the port's current position is not known\n" + " port: %v", + op); + } else + return scheme_make_integer(pos); + } } else { Scheme_Input_Port *ip; @@ -5146,9 +5196,10 @@ scheme_file_position(int argc, Scheme_Object *argv[]) is = (Scheme_Indexed_String *)ip->port_data; else if (argc < 2) { intptr_t pos; - pos = ip->p.position; + pos = scheme_tell_can_redirect((Scheme_Object *)ip, 1); if (pos < 0) { - scheme_raise_exn(MZEXN_FAIL, + if (can_false) return scheme_false; + scheme_raise_exn(MZEXN_FAIL_FILESYSTEM, "the port's current position is not known\n" " port: %v", ip); @@ -5162,7 +5213,7 @@ scheme_file_position(int argc, Scheme_Object *argv[]) && !had_fd #endif && !is) - scheme_contract_error("file-position", + scheme_contract_error(who, "setting position allowed for file-stream and string ports only", "port", 1, argv[0], "position", 1, argv[1], @@ -5186,7 +5237,7 @@ scheme_file_position(int argc, Scheme_Object *argv[]) } if (nll < 0) { - scheme_contract_error("file-position", + scheme_contract_error(who, "new position is too large", "port", 1, argv[0], "position", 1, argv[1], @@ -5334,11 +5385,7 @@ scheme_file_position(int argc, Scheme_Object *argv[]) pll = BIG_OFF_T_IZE(lseek)(fd, 0, 1); # endif if (pll < 0) { - if (SCHEME_INPUT_PORTP(argv[0])) { - pll = scheme_tell(argv[0]); - } else { - pll = scheme_output_tell(argv[0]); - } + pll = do_tell(argv[0], 0); } else { if (SCHEME_INPUT_PORTP(argv[0])) { Scheme_Input_Port *ip; @@ -5373,6 +5420,18 @@ scheme_file_position(int argc, Scheme_Object *argv[]) } } +Scheme_Object * +scheme_file_position(int argc, Scheme_Object *argv[]) +{ + return do_file_position("file-position", argc, argv, 0); +} + +Scheme_Object * +scheme_file_position_star(int argc, Scheme_Object *argv[]) +{ + return do_file_position("file-position*", argc, argv, 1); +} + intptr_t scheme_set_file_position(Scheme_Object *port, intptr_t pos) { if (pos >= 0) { diff --git a/src/racket/src/portfun.c b/src/racket/src/portfun.c index 8d805f42f6..6873f4392a 100644 --- a/src/racket/src/portfun.c +++ b/src/racket/src/portfun.c @@ -314,6 +314,7 @@ scheme_init_port_fun(Scheme_Env *env) GLOBAL_NONCM_PRIM("port-print-handler", port_print_handler, 1, 2, env); GLOBAL_NONCM_PRIM("flush-output", flush_output, 0, 1, env); GLOBAL_NONCM_PRIM("file-position", scheme_file_position, 1, 2, env); + GLOBAL_NONCM_PRIM("file-position*", scheme_file_position_star, 1, 1, env); GLOBAL_NONCM_PRIM("file-stream-buffer-mode", scheme_file_buffer, 1, 2, env); GLOBAL_NONCM_PRIM("port-try-file-lock?", scheme_file_try_lock, 2, 2, env); GLOBAL_NONCM_PRIM("port-file-unlock", scheme_file_unlock, 1, 1, env); @@ -2270,12 +2271,16 @@ make_input_port(int argc, Scheme_Object *argv[]) scheme_check_proc_arity2("make-input-port", 0, 6, argc, argv, 1); /* location */ if (argc > 7) scheme_check_proc_arity("make-input-port", 0, 7, argc, argv); /* count-lines! */ - if (argc > 8) { /* buffer-mode */ + if (argc > 8) { /* position */ if (!((SCHEME_INTP(argv[8]) && SCHEME_INT_VAL(argv[8]) > 0) - || (SCHEME_BIGNUMP(argv[8]) && SCHEME_BIGPOS(argv[8])))) - scheme_wrong_contract("make-input-port", "exact-positive-integer?", 8, argc, argv); + || (SCHEME_BIGNUMP(argv[8]) && SCHEME_BIGPOS(argv[8])) + || SCHEME_FALSEP(argv[8]) + || scheme_check_proc_arity(NULL, 0, 8, argc, argv) + || SCHEME_INPUT_PORTP(argv[8]) + || SCHEME_OUTPUT_PORTP(argv[8]))) + scheme_wrong_contract("make-input-port", "(or/c exact-positive-integer? port? #f (-> (or/c exact-positive-integer? #f)))", 8, argc, argv); } - if (argc > 9) { + if (argc > 9) { /* buffer-mode */ if (SCHEME_TRUEP(argv[9]) && !scheme_check_proc_arity(NULL, 0, 9, argc, argv) && !scheme_check_proc_arity(NULL, 1, 9, argc, argv)) @@ -2362,8 +2367,12 @@ make_input_port(int argc, Scheme_Object *argv[]) if (argc > 8) { if (SCHEME_INTP(argv[8])) ip->p.position = (SCHEME_INT_VAL(argv[8]) - 1); - else + else if (SCHEME_FALSEP(argv[8]) || SCHEME_BIGNUMP(argv[8])) ip->p.position = -1; + else { + ip->p.position = 0; + ip->p.position_redirect = argv[8]; + } } if (uip->buffer_mode_proc) @@ -2411,8 +2420,12 @@ make_output_port (int argc, Scheme_Object *argv[]) scheme_check_proc_arity("make-output-port", 0, 8, argc, argv); /* count-lines! */ if (argc > 9) { if (!((SCHEME_INTP(argv[9]) && SCHEME_INT_VAL(argv[9]) > 0) - || (SCHEME_BIGNUMP(argv[9]) && SCHEME_BIGPOS(argv[9])))) - scheme_wrong_contract("make-output-port", "positive-exact-integer?", 9, argc, argv); + || (SCHEME_BIGNUMP(argv[9]) && SCHEME_BIGPOS(argv[9])) + || SCHEME_FALSEP(argv[9]) + || scheme_check_proc_arity(NULL, 0, 9, argc, argv) + || SCHEME_INPUT_PORTP(argv[9]) + || SCHEME_OUTPUT_PORTP(argv[9]))) + scheme_wrong_contract("make-output-port", "(or/c exact-positive-integer? port? #f (-> (or/c exact-positive-integer? #f)))", 9, argc, argv); } if (argc > 10) { /* buffer-mode */ if (SCHEME_TRUEP(argv[10]) @@ -2490,12 +2503,16 @@ make_output_port (int argc, Scheme_Object *argv[]) scheme_set_port_location_fun((Scheme_Port *)op, user_output_location); if (uop->count_lines_proc) scheme_set_port_count_lines_fun((Scheme_Port *)op, user_output_count_lines); - + if (argc > 9) { if (SCHEME_INTP(argv[9])) op->p.position = (SCHEME_INT_VAL(argv[9]) - 1); - else + else if (SCHEME_FALSEP(argv[9]) && !SCHEME_BIGNUMP(argv[9])) op->p.position = -1; + else { + op->p.position = 0; + op->p.position_redirect = argv[9]; + } } if (uop->buffer_mode_proc) diff --git a/src/racket/src/schemef.h b/src/racket/src/schemef.h index 85cbf777a4..72dd0ea2ee 100644 --- a/src/racket/src/schemef.h +++ b/src/racket/src/schemef.h @@ -822,6 +822,7 @@ MZ_EXTERN intptr_t scheme_get_char_string(const char *who, MZ_EXTERN intptr_t scheme_get_bytes(Scheme_Object *port, intptr_t size, char *buffer, int offset); MZ_EXTERN Scheme_Object *scheme_get_ready_special(Scheme_Object *port, Scheme_Object *stxsrc, int peek); MZ_EXTERN intptr_t scheme_tell(Scheme_Object *port); +MZ_EXTERN intptr_t scheme_tell_can_redirect(Scheme_Object *port, int not_via_loc); MZ_EXTERN intptr_t scheme_output_tell(Scheme_Object *port); MZ_EXTERN intptr_t scheme_tell_line(Scheme_Object *port); MZ_EXTERN intptr_t scheme_tell_column(Scheme_Object *port); diff --git a/src/racket/src/schemex.h b/src/racket/src/schemex.h index 54e07b6a1a..0bcb4562db 100644 --- a/src/racket/src/schemex.h +++ b/src/racket/src/schemex.h @@ -675,6 +675,7 @@ intptr_t (*scheme_get_char_string)(const char *who, intptr_t (*scheme_get_bytes)(Scheme_Object *port, intptr_t size, char *buffer, int offset); Scheme_Object *(*scheme_get_ready_special)(Scheme_Object *port, Scheme_Object *stxsrc, int peek); intptr_t (*scheme_tell)(Scheme_Object *port); +intptr_t (*scheme_tell_can_redirect)(Scheme_Object *port, int not_via_loc); intptr_t (*scheme_output_tell)(Scheme_Object *port); intptr_t (*scheme_tell_line)(Scheme_Object *port); intptr_t (*scheme_tell_column)(Scheme_Object *port); diff --git a/src/racket/src/schemex.inc b/src/racket/src/schemex.inc index a22c441c69..31a83a9d0d 100644 --- a/src/racket/src/schemex.inc +++ b/src/racket/src/schemex.inc @@ -481,6 +481,7 @@ scheme_extension_table->scheme_get_bytes = scheme_get_bytes; scheme_extension_table->scheme_get_ready_special = scheme_get_ready_special; scheme_extension_table->scheme_tell = scheme_tell; + scheme_extension_table->scheme_tell_can_redirect = scheme_tell_can_redirect; scheme_extension_table->scheme_output_tell = scheme_output_tell; scheme_extension_table->scheme_tell_line = scheme_tell_line; scheme_extension_table->scheme_tell_column = scheme_tell_column; diff --git a/src/racket/src/schemexm.h b/src/racket/src/schemexm.h index 6fdeeab2d5..22e240fe03 100644 --- a/src/racket/src/schemexm.h +++ b/src/racket/src/schemexm.h @@ -481,6 +481,7 @@ #define scheme_get_bytes (scheme_extension_table->scheme_get_bytes) #define scheme_get_ready_special (scheme_extension_table->scheme_get_ready_special) #define scheme_tell (scheme_extension_table->scheme_tell) +#define scheme_tell_can_redirect (scheme_extension_table->scheme_tell_can_redirect) #define scheme_output_tell (scheme_extension_table->scheme_output_tell) #define scheme_tell_line (scheme_extension_table->scheme_tell_line) #define scheme_tell_column (scheme_extension_table->scheme_tell_column) diff --git a/src/racket/src/schminc.h b/src/racket/src/schminc.h index 0546ec8a57..1c3bdc0445 100644 --- a/src/racket/src/schminc.h +++ b/src/racket/src/schminc.h @@ -14,7 +14,7 @@ #define USE_COMPILED_STARTUP 1 -#define EXPECTED_PRIM_COUNT 1071 +#define EXPECTED_PRIM_COUNT 1072 #define EXPECTED_UNSAFE_COUNT 79 #define EXPECTED_FLFXNUM_COUNT 69 #define EXPECTED_FUTURES_COUNT 15 diff --git a/src/racket/src/schpriv.h b/src/racket/src/schpriv.h index bf0ae39bd6..f53eae7613 100644 --- a/src/racket/src/schpriv.h +++ b/src/racket/src/schpriv.h @@ -3578,6 +3578,7 @@ Scheme_Object *scheme_do_open_input_file(char *name, int offset, int argc, Schem Scheme_Object *scheme_do_open_output_file(char *name, int offset, int argc, Scheme_Object *argv[], int and_read, int internal, char **err, int *eerrno); Scheme_Object *scheme_file_position(int argc, Scheme_Object *argv[]); +Scheme_Object *scheme_file_position_star(int argc, Scheme_Object *argv[]); Scheme_Object *scheme_file_buffer(int argc, Scheme_Object *argv[]); Scheme_Object *scheme_file_identity(int argc, Scheme_Object *argv[]); Scheme_Object *scheme_file_try_lock(int argc, Scheme_Object **argv); diff --git a/src/racket/src/schvers.h b/src/racket/src/schvers.h index 7e134cbfd4..3991d1f716 100644 --- a/src/racket/src/schvers.h +++ b/src/racket/src/schvers.h @@ -13,12 +13,12 @@ consistently.) */ -#define MZSCHEME_VERSION "5.3.0.20" +#define MZSCHEME_VERSION "5.3.0.21" #define MZSCHEME_VERSION_X 5 #define MZSCHEME_VERSION_Y 3 #define MZSCHEME_VERSION_Z 0 -#define MZSCHEME_VERSION_W 20 +#define MZSCHEME_VERSION_W 21 #define MZSCHEME_VERSION_MAJOR ((MZSCHEME_VERSION_X * 100) + MZSCHEME_VERSION_Y) #define MZSCHEME_VERSION_MINOR ((MZSCHEME_VERSION_Z * 1000) + MZSCHEME_VERSION_W)