switch printer to constructor+quote style

This commit is contained in:
Matthew Flatt 2010-05-06 10:33:42 -06:00
parent 6027eb9627
commit 43027a8d9b
23 changed files with 998 additions and 612 deletions

View File

@ -97,7 +97,7 @@
(let ([n (make-base-empty-namespace)]
[argv (if args (list->vector args) (vector))])
(parameterize ([current-command-line-arguments argv]
[print-as-quasiquote #f])
[print-as-expression #f])
(thread-wait
(thread
(lambda ()

View File

@ -221,7 +221,7 @@
(pretty-print-print-line))
(print-graph) (print-struct) (print-hash-table)
(and (not display?) (print-vector-length)) (print-box)
(and (not display?) as-qq? (print-as-quasiquote))
(and (not display?) as-qq? (print-as-expression))
(pretty-print-depth)
(lambda (o display?)
(size-hook o display? port)))
@ -488,14 +488,8 @@
(ormap loop
(vector->list (struct->vector obj)))]
[(hash? obj)
(let/ec esc
(hash-for-each
obj
(lambda (v k)
(when (or (loop v)
(loop k))
(esc #t))))
#f)])])
(for/or ([(k v) (in-hash obj)])
(or (loop v) (loop k)))])])
(hash-remove! table obj)
cycle)))))))
@ -548,6 +542,67 @@
(make-mark #f (box #f)))))))
(void)))))
(define (custom-print? obj)
(and (custom-print-as-constructor? obj)
(custom-print-as-constructor-accessor obj)))
(define escapes-table
(let* ([table (make-hasheq)]
[local-cycle (and found-cycle (make-hasheq))]
[escapes! (lambda (obj)
(hash-set! table obj #t)
#t)]
[orf (lambda (a b) (or a b))])
(and print-as-qq?
(let loop ([obj obj])
(if (and local-cycle (hash-ref local-cycle obj #f))
#f
(begin
(when local-cycle
(hash-set! local-cycle obj #t))
(begin0
(cond
[ #f]
[(vector? obj)
(let ([len (vector-length obj)])
(let vloop ([esc? #f][i 0])
(if (= i len)
(and esc?
(escapes! obj))
(vloop (or (loop (vector-ref obj i)) esc?)
(add1 i)))))]
[(pair? obj)
(and (orf (loop (car obj))
(loop (cdr obj)))
(escapes! obj))]
[(mpair? obj)
(loop (mcar obj))
(loop (mcdr obj))
;; always unquoted:
#t]
[(and (box? obj) print-box?)
(and (loop (unbox obj))
(escapes! obj))]
[(and (custom-write? obj)
(not (struct-type? obj)))
(and (or (loop (extract-sub-objects obj pport))
(custom-print? obj))
(escapes! obj))]
[(struct? obj)
(and (or (loop (struct->vector obj))
(not (prefab-struct-key obj)))
(escapes! obj))]
[(hash? obj)
(and (for/fold ([esc? #f]) ([(k v) (in-hash obj)])
(or (orf (loop v)
(loop k))
esc?))
(escapes! obj))]
[else #f])
(when local-cycle
(hash-remove! local-cycle obj)))))))
table))
(define cycle-counter 0)
(define found (if found-cycle
@ -615,8 +670,44 @@
(register-printing-port-like p pport)
(parameterize ([pretty-printing #t]
[pretty-print-columns (or width 'infinity)])
((custom-write-accessor obj) obj p (not display?))))))
((custom-write-accessor obj) obj p (or qd (not display?)))))))
;; ------------------------------------------------------------
(define (convert-pair obj)
(cond
[(list? obj) (cons (make-unquoted 'list)
;; reconstruct first pair in case it
;; starts a cycle:
(cons (car obj) (cdr obj)))]
[(and (pair? (cdr obj))
(not (and found
(hash-ref found (cdr obj) #f))))
(cons (make-unquoted 'list*)
(cons
(car obj)
(let loop ([obj (cdr obj)])
(cond
[(and found (hash-ref found obj #f)) (list obj)]
[(pair? obj) (cons (car obj) (loop (cdr obj)))]
[else (list obj)]))))]
[else (list (make-unquoted 'cons) (car obj) (cdr obj))]))
(define (convert-hash obj expr?)
(let ([l (hash-map obj (lambda (k v)
(if expr?
(list k v)
(cons k (make-hide v)))))])
(if expr?
(cons (make-unquoted
(if (hash-eq? obj)
'hasheq
(if (hash-eqv? obj)
'hasheqv
'hash)))
(apply append l))
l)))
;; ------------------------------------------------------------
;; wr: write on a single line
(define (wr* pport obj depth display? qd)
@ -637,47 +728,43 @@
(define (wr-lst l check? depth pair? car cdr open close qd)
(if (pair? l)
(check-expr-found
l pport check?
#f #f
(lambda ()
(if (and depth (zero? depth))
(begin
(out open)
(out "...")
(out close))
(begin
(out open)
(wr (car l) (dsub1 depth) qd)
(let loop ([l (cdr l)])
(check-expr-found
l pport (and check? (pair? l))
(lambda (s) (out " . ") (out s) (out close))
(lambda ()
(out " . ")
(wr-lst l check? (dsub1 depth) pair? car cdr open close qd)
(out close))
(lambda ()
(cond
[(pair? l)
(if (and (eq? (do-remap (car l)) 'unquote)
(not (equal? qd 1))
(pair? (cdr l))
(null? (cdr (cdr l))))
(begin
(out " . ,")
(wr (car (cdr l)) (dsub1 depth)
(reader-adjust-qd (car l) qd))
(out close))
(begin
(out " ")
(wr (car l) (dsub1 depth) qd)
(loop (cdr l))))]
[(null? l) (out close)]
[else
(out " . ")
(wr l (dsub1 depth) qd)
(out close)]))))))))
(if (and depth (zero? depth))
(begin
(out open)
(out "...")
(out close))
(begin
(out open)
(wr (car l) (dsub1 depth) qd)
(let loop ([l (cdr l)])
(check-expr-found
l pport (and check? (pair? l))
(lambda (s) (out " . ") (out s) (out close))
(lambda ()
(out " . ")
(wr-lst l check? (dsub1 depth) pair? car cdr open close qd)
(out close))
(lambda ()
(cond
[(pair? l)
(if (and (eq? (do-remap (car l)) 'unquote)
(not (equal? qd 1))
(pair? (cdr l))
(null? (cdr (cdr l))))
(begin
(out " . ,")
(wr (car (cdr l)) (dsub1 depth)
(reader-adjust-qd (car l) qd))
(out close))
(begin
(out " ")
(wr (car l) (dsub1 depth) qd)
(loop (cdr l))))]
[(null? l) (out close)]
[else
(out " . ")
(wr l (dsub1 depth) qd)
(out close)]))))))
(begin
(out open)
(out close))))
@ -694,34 +781,56 @@
=> (lambda (len)
(output-hooked pport obj len display?))]
[(pair? obj)
(let ([qd (to-quoted out qd "`")])
(wr-expr obj depth pair? car cdr pair-open pair-close qd))]
[(pair? obj)
(check-expr-found
obj pport #t
#f #f
(lambda ()
(let* ([qd (to-quoted out qd obj)]
[pair (if (and qd (zero? qd))
(convert-pair obj)
obj)])
(wr-expr pair depth pair? car cdr pair-open pair-close qd))))]
[(mpair? obj)
(let ([qd (to-quoted out qd "`")])
(wr-expr obj depth mpair? mcar mcdr mpair-open mpair-close qd))]
(check-expr-found
obj pport #t
#f #f
(lambda ()
(if (and qd (zero? qd))
(wr-expr (list (make-unquoted 'mcons) (mcar obj) (mcdr obj))
depth pair? car cdr pair-open pair-close qd)
(wr-expr obj depth mpair? mcar mcdr mpair-open mpair-close qd))))]
[(null? obj)
(let ([qd (to-quoted out qd "'")])
(let ([qd (to-quoted out qd obj)])
(wr-lst obj #f depth pair? car cdr "(" ")" qd))]
[(vector? obj)
(check-expr-found
obj pport #t
#f #f
(lambda ()
(let ([qd (to-quoted out qd "`")])
(out "#")
(when print-vec-length?
(out (number->string (vector-length obj))))
(wr-lst (vector->repeatless-list obj) #f depth pair? car cdr "(" ")" qd))))]
(let ([qd (to-quoted out qd obj)]
[vecl (vector->repeatless-list obj)])
(if (and qd (zero? qd))
(wr-lst (cons (make-unquoted 'vector) vecl)
#f depth pair? car cdr "(" ")" qd)
(begin
(out "#")
(when print-vec-length?
(out (number->string (vector-length obj))))
(wr-lst vecl #f depth pair? car cdr "(" ")" qd))))))]
[(and (box? obj)
print-box?)
(check-expr-found
obj pport #t
#f #f
(lambda ()
(let ([qd (to-quoted out qd "`")])
(out "#&")
(wr (unbox obj) (dsub1 depth) qd))))]
(let ([qd (to-quoted out qd obj)])
(if (and qd (zero? qd))
(wr-lst (list (make-unquoted 'box) (unbox obj))
#f depth pair? car cdr "(" ")" qd)
(begin
(out "#&")
(wr (unbox obj) (dsub1 depth) qd))))))]
[(and (custom-write? obj)
(not (struct-type? obj)))
(check-expr-found
@ -729,7 +838,10 @@
#f #f
(lambda ()
(parameterize ([pretty-print-columns 'infinity])
(write-custom wr* obj pport depth display? width qd))))]
(let ([qd (if (custom-print? obj)
qd
(to-quoted out qd obj))])
(write-custom wr* obj pport depth display? width qd)))))]
[(struct? obj)
(if (and print-struct?
(not (and depth
@ -741,13 +853,13 @@
(let* ([v (struct->vector obj struct-ellipses)]
[pf? (prefab?! obj v)])
(let ([qd (if pf?
(to-quoted out qd "`")
(to-unquoted out qd))])
(when (or (not qd) pf?)
(to-quoted out qd obj)
qd)])
(when (or (not qd) (positive? qd))
(out "#")
(when pf? (out "s")))
(wr-lst (let ([l (vector->list v)])
(if (and qd (not pf?))
(if (and qd (zero? qd))
(cons (make-unquoted (object-name obj))
(cdr l))
l))
@ -763,14 +875,15 @@
obj pport #t
#f #f
(lambda ()
(let ([qd (to-quoted out qd "`")])
(out (if (hash-eq? obj)
"#hasheq"
(if (hash-eqv? obj)
"#hasheqv"
"#hash")))
(wr-lst (hash-map obj (lambda (k v)
(cons k (make-hide v))))
(let* ([qd (to-quoted out qd obj)]
[expr? (and qd (zero? qd))])
(unless expr?
(out (if (hash-eq? obj)
"#hasheq"
(if (hash-eqv? obj)
"#hasheqv"
"#hash"))))
(wr-lst (convert-hash obj expr?)
#f depth
pair? car cdr "(" ")" qd))))
(parameterize ([print-hash-table #f])
@ -790,19 +903,13 @@
[(and (pretty-print-.-symbol-without-bars)
(eq? obj '|.|))
(out ".")]
[(and (equal? qd 1)
(or (eq? 'unquote obj)
(eq? 'unquote-splicing obj)))
(out ",'")
(orig-write obj pport)]
[(and qd (or (symbol? obj)
(keyword? obj)))
(unless (eq? obj struct-ellipses)
(to-quoted out qd "'"))
(to-quoted out qd obj))
(orig-write obj pport)]
[(unquoted? obj)
(let ([qd (to-unquoted out qd)])
(orig-write (unquoted-val obj) pport))]
(orig-write (unquoted-val obj) pport)]
[else
((if display? orig-display orig-write) obj pport)]))
(unless (hide? obj)
@ -878,38 +985,54 @@
(pre-print pport obj)
(cond
[(pair? obj)
(let ([qd (to-quoted out qd "`")])
(pp-pair obj extra depth
(let* ([qd (to-quoted out qd obj)]
[pair (if (and qd (zero? qd))
(convert-pair obj)
obj)])
(pp-pair pair extra depth
pair? car cdr pair-open pair-close
qd))]
[(mpair? obj)
(let ([qd (to-quoted out qd "`")])
(pp-pair obj extra depth
mpair? mcar mcdr mpair-open mpair-close
qd))]
(if (and qd (zero? qd))
(pp-pair (list (make-unquoted 'mcons) (mcar obj) (mcdr obj))
extra depth
pair? car cdr pair-open pair-close
qd)
(pp-pair obj extra depth
mpair? mcar mcdr mpair-open mpair-close
qd))]
[(vector? obj)
(let ([qd (to-quoted out qd "`")])
(out "#")
(when print-vec-length?
(out (number->string (vector-length obj))))
(pp-list (vector->repeatless-list obj) extra pp-expr #f depth
pair? car cdr pair-open pair-close
qd))]
(let ([qd (to-quoted out qd obj)]
[vecl (vector->repeatless-list obj)])
(if (and qd (zero? qd))
(pp-pair (cons (make-unquoted 'vector) vecl)
extra depth
pair? car cdr pair-open pair-close
qd)
(begin
(out "#")
(when print-vec-length?
(out (number->string (vector-length obj))))
(pp-list vecl extra pp-expr #f depth
pair? car cdr pair-open pair-close
qd))))]
[(and (custom-write? obj)
(not (struct-type? obj)))
(let ([qd (to-unquoted out qd)])
(let ([qd (if (custom-print? obj)
qd
(to-quoted out qd obj))])
(write-custom pp* obj pport depth display? width qd))]
[(struct? obj) ; print-struct is on if we got here
(let* ([v (struct->vector obj struct-ellipses)]
[pf? (prefab?! obj v)])
(let ([qd (if pf?
(to-quoted out qd "`")
(to-unquoted out qd))])
(when (or (not qd) pf?)
(to-quoted out qd obj)
qd)])
(when (or (not qd) (positive? qd))
(out "#")
(when pf? (out "s")))
(pp-list (let ([l (vector->list v)])
(if (and qd (not pf?))
(if (and qd (zero? qd))
(cons (make-unquoted (object-name obj))
(cdr l))
l))
@ -917,19 +1040,27 @@
pair? car cdr pair-open pair-close
qd)))]
[(hash? obj)
(let ([qd (to-quoted out qd "`")])
(out (if (hash-eq? obj)
"#hasheq"
(if (hash-eqv? obj)
"#hasheqv"
"#hash")))
(pp-list (hash-map obj cons) extra pp-expr #f depth
(let* ([qd (to-quoted out qd obj)]
[expr? (and qd (zero? qd))])
(unless expr?
(out (if (hash-eq? obj)
"#hasheq"
(if (hash-eqv? obj)
"#hasheqv"
"#hash"))))
(pp-list (convert-hash obj expr?) extra pp-expr #f depth
pair? car cdr pair-open pair-close
qd))]
[(and (box? obj) print-box?)
(let ([qd (to-quoted out qd "`")])
(out "#&")
(pr (unbox obj) extra pp-pair depth qd))])
(let ([qd (to-quoted out qd obj)])
(if (and qd (zero? qd))
(pp-pair (list (make-unquoted 'box) (unbox obj))
extra depth
pair? car cdr pair-open pair-close
qd)
(begin
(out "#&")
(pr (unbox obj) extra pp-pair depth qd))))])
(post-print pport obj)))))
;; Not possible to split obj across lines; so just write directly
(wr* pport obj depth display? qd))))
@ -953,7 +1084,10 @@
((pretty-print-remap-stylable) head))
(let ((proc (style head expr apair? acar acdr)))
(if proc
(let ([qd (to-quoted out qd "`")])
(let* ([qd (to-quoted out qd expr)]
[pair (if (and qd (zero? qd))
(cons (make-unquoted 'list) obj)
obj)])
(proc expr extra depth
apair? acar acdr open close
qd))
@ -1264,22 +1398,16 @@
(pr obj 0 pp-expr depth qd))
(define (to-quoted out qd str)
(define (to-quoted out qd obj)
(and qd
(if (zero? qd)
(begin
(out str)
(add1 qd))
(if (hash-ref escapes-table obj #f)
qd
(begin
(out "'")
(add1 qd)))
qd)))
(define (to-unquoted out qd)
(and qd
(if (zero? qd)
qd
(begin
(out ",")
(to-unquoted out (sub1 qd))))))
;; ------------------------------------------------------------
;; This is where generic-write's body expressions start

View File

@ -4,4 +4,4 @@
(define-values (configure)
(lambda (config)
(print-as-quasiquote #t))))
(print-as-expression #t))))

View File

@ -645,14 +645,14 @@
(let ([sp (open-output-string)])
(parameterize ([current-output-port sp]
[current-traced-metafunctions 'all]
[print-as-quasiquote #f])
[print-as-expression #f])
(term (f 1)))
(test (get-output-string sp) ">(f 1)\n<0\n"))
(let ([sp (open-output-string)])
(parameterize ([current-output-port sp]
[current-traced-metafunctions '(f)]
[print-as-quasiquote #f])
[print-as-expression #f])
(term (f 1)))
(test (get-output-string sp) ">(f 1)\n<0\n")))

View File

@ -4,4 +4,4 @@
(define-values (configure)
(lambda (config)
(print-as-quasiquote #f))))
(print-as-expression #f))))

View File

@ -124,7 +124,7 @@
(list
(hspace 2)
(elem #:style result-color
(to-element/no-color v #:qq? (print-as-quasiquote)))))))))
(to-element/no-color v #:qq? (print-as-expression)))))))))
val-list))))
(loop (cdr expr-paras)
(cdr val-list+outputs)
@ -320,7 +320,7 @@
(define (show-val v)
(elem #:style result-color
(to-element/no-color v #:qq? (print-as-quasiquote))))
(to-element/no-color v #:qq? (print-as-expression))))
(define (do-interaction-eval-show ev e)
(parameterize ([current-command-line-arguments #()])

View File

@ -11,7 +11,7 @@ using @scheme[read] on the output produces a value that is
printing of strings, byte strings, characters, and symbols changes to
render the character/byte content directly to the output port. The
printer's @scheme[print] mode is similar to @scheme[write], but it is
sensitive to the @scheme[print-as-quasiquote] parameter for printing
sensitive to the @scheme[print-as-expression] parameter for printing
values in a way that @scheme[read] plus @scheme[eval] on the output
can be @scheme[equal?] to the printed value.
@ -68,7 +68,7 @@ characters. That is, the display form of a symbol is the same as the
display form of @scheme[symbol->string] applied to the symbol.
Symbols @scheme[print] the same as they @scheme[write], unless
@scheme[print-as-quasiquote] is set to @scheme[#t] and the current
@scheme[print-as-expression] is set to @scheme[#t] and the current
@scheme[quasiquote] depth is @scheme[0]. In that case, the symbol's
@scheme[print]ed form is prefixed with @litchar{'}. If the current
@scheme[quasiquote] depth is @scheme[1], and if the symbol is
@ -146,9 +146,9 @@ including the tail as two elements of the enclosing list.
The printed form of a pair is the same in both @scheme[write] and
@scheme[display] modes, except as the printed form of the pair's
@scheme[car] and @scheme[cdr] vary with the mode. The @scheme[print]
form is also the same is @scheme[print-as-quasiquote] is @scheme[#f].
form is also the same is @scheme[print-as-expression] is @scheme[#f].
When @scheme[print-as-quasiquote] is @scheme[#t] and the current
When @scheme[print-as-expression] is @scheme[#t] and the current
@scheme[quasiquote] depth is @scheme[0], then the empty list prints as
@litchar{'()} and a pair's output is prefixed with @litchar{`}; the
pair's content is printed at @scheme[quasiquote] depth is
@ -211,7 +211,7 @@ decimal integer is printed after the @litchar{#}, and a repeated last
element is printed only once.
Vectors @scheme[print] the same as they @scheme[write], unless
@scheme[print-as-quasiquote] is set to @scheme[#t] and the current
@scheme[print-as-expression] is set to @scheme[#t] and the current
@scheme[quasiquote] depth is @scheme[0]. In that case, the vector's
@scheme[print]ed form is prefixed with @litchar{`}, and its content is
printed with @scheme[quasiquote] depth @scheme[1].
@ -230,7 +230,7 @@ for which the structure is an instance:
structure type key, then the printed form each field in the
structure, and then @litchar{)}.
In @scheme[print] mode when @scheme[print-as-quasiquote] is set
In @scheme[print] mode when @scheme[print-as-expression] is set
to @scheme[#t] and the current @scheme[quasiquote] depth is
@scheme[0], the structure's @scheme[print]ed form is prefixed
with @litchar{`} and its content is printed with
@ -245,9 +245,9 @@ for which the structure is an instance:
transparent, then the structure prints as the vector produced
by @scheme[struct->vector] in @scheme[display] mode, in
@scheme[write] mode, or in @scheme[print] mode when
@scheme[print-as-quasiquote] is set to @scheme[#f].
@scheme[print-as-expression] is set to @scheme[#f].
In @scheme[print] mode with @scheme[print-as-quasiquote] as
In @scheme[print] mode with @scheme[print-as-expression] as
@scheme[#t], then the printed form is prefixed with as many
@litchar{,}s as the current @scheme[quasiquote] depth. Instead
of printing as a vector, the structure content is printed as a
@ -278,7 +278,7 @@ additional space if the key--value pair is not the last to be printed.
After all key-value pairs, the printed form completes with
@litchar{)}.
In @scheme[print] mode when @scheme[print-as-quasiquote] is
In @scheme[print] mode when @scheme[print-as-expression] is
@scheme[#t] and the current quasiquote depth is @scheme[0], then the
printed form is prefixed with @litchar{`} and the hash table's content
is printed at @scheme[quasiquote] depth @scheme[1]. In the printed
@ -293,7 +293,7 @@ hash table prints (un@scheme[read]ably) as @litchar{#<hash>}.
When the @scheme[print-box] parameter is set to @scheme[#t],
a box prints as @litchar{#&} followed by the printed form of its content.
In @scheme[print] mode when @scheme[print-as-quasiquote] is
In @scheme[print] mode when @scheme[print-as-expression] is
@scheme[#t] and the current quasiquote depth is @scheme[0], then the
printed form is prefixed with @litchar{`} and the box's content
is printed at @scheme[quasiquote] depth @scheme[1].

View File

@ -44,7 +44,7 @@ proportional to the depth of the value being printed, due to the
initial cycle check.}
@defproc[(print [datum any/c][out output-port? (current-output-port)]
[qq-depth exact-nonnegative-integer? 0])
[quote-depth (or/c 0 1) 0])
void?]{
Writes @racket[datum] to @racket[out], normally the same way as
@ -53,10 +53,10 @@ Writes @racket[datum] to @racket[out], normally the same way as
the handler specified by @racket[global-port-print-handler] is called;
the default handler uses the default printer in @racket[write] mode.
The optional @racket[qq-depth] argument adjust printing when the
@racket[print-as-quasiquote] parameter is set to @racket[#t]. In that
case, @racket[qq-depth] specifies the starting @racket[quasiquote]
depth for printing @racket[datum].
The optional @racket[quote-depth] argument adjusts printing when the
@racket[print-as-expression] parameter is set to @racket[#t]. In that
case, @racket[quote-depth] specifies the starting quote depth for
printing @racket[datum].
The rationale for providing @racket[print] is that @racket[display]
and @racket[write] both have specific output conventions, and those
@ -209,7 +209,7 @@ with @racket[quote], @racket['quasiquote], @racket['unquote],
@racket['unsyntax], or @racket['unsyntax-splicing]; defaults to
@racket[#f]. See @secref["print-pairs"] for more information.}
@defboolparam[print-as-quasiquote on?]{
@defboolparam[print-as-expression on?]{
A parameter that controls printing in @racket[print] mode (as opposed
to @racket[write] or @racket[display]); defaults to @racket[#f]. See
@ -253,7 +253,7 @@ it is not @racket[#f], otherwise the path is left relative).}
[proc (any/c output-port? . -> . any)])
void?])]{}
@defproc*[([(port-print-handler [out output-port?]) ((any/c output-port?) (exact-nonnegative-integer?) . ->* . any)]
@defproc*[([(port-print-handler [out output-port?]) ((any/c output-port?) ((or/c 0 1)) . ->* . any)]
[(port-print-handler [out output-port?]
[proc (any/c output-port? . -> . any)])
void?])]{
@ -277,7 +277,7 @@ default print handler calls the global port print handler (the value
of the @racket[global-port-print-handler] parameter); the default
global port print handler is the same as the default write handler.}
@defproc*[([(global-port-print-handler) ((any/c output-port?) (exact-nonnegative-integer?) . ->* . any)]
@defproc*[([(global-port-print-handler) ((any/c output-port?) ((or/c 0 1)) . ->* . any)]
[(global-port-print-handler [proc (any/c output-port? . -> . any)]) void?])]{
A parameter that determines @deftech{global port print handler},

View File

@ -5,6 +5,7 @@
(load-relative "unicode.rktl")
(load-relative "rx.rktl")
(load-relative "read.rktl")
(load-relative "print.rktl")
(load-relative "macro.rktl")
(load-relative "syntax.rktl")
(load-relative "procs.rktl")

View File

@ -14,7 +14,7 @@
(require mzlib/pretty)
(print-as-quasiquote #f)
(print-as-expression #f)
(define (pprec-print pprec port write?)
(define (print-one n port)
@ -325,6 +325,6 @@
(test #t 'use-regression? use-regression?)
(print-as-quasiquote #t)
(print-as-expression #t)
(report-errs)

View File

@ -0,0 +1,162 @@
;; Test printing in as-expression mode
(load-relative "loadtest.rktl")
(Section 'printing)
(let ([ptest (lambda (s v)
(define (to-string v)
(format "~v" v))
(define (to-pretty-string v)
(pretty-format v))
(test (regexp-replace* #rx"\n *" s " ") to-string v)
(test s to-pretty-string v))])
(define-struct a (x y))
(define-struct b (x y) #:transparent)
(define-struct c (x y) #:prefab)
(define (custom-printer get-xy)
(lambda (v port mode)
(define-values (d-x d-y) (get-xy))
(define (recur v)
(case mode
[(#f) (display v port)]
[(#t) (write v port)]
[else (print v port mode)]))
(write-char #\< port)
(write mode port)
(write-char #\space port)
(recur (d-x v))
(write-char #\space port)
(recur (d-y v))
(write-char #\> port)))
(define-struct d (x y)
#:property prop:custom-write (custom-printer (lambda () (values d-x d-y))))
(define-struct e (x y)
#:property prop:custom-write (custom-printer (lambda () (values e-x e-y)))
#:property prop:custom-print-as-constructor #t)
(ptest "1" 1)
(ptest "1/2" 1/2)
(ptest "#f" #f)
(ptest "#\\x" #\x)
(ptest "'apple" 'apple)
(ptest "'|apple banana|" '|apple banana|)
(ptest "'#:apple" '#:apple)
(ptest "\"apple\"" "apple")
(ptest "#\"apple\"" #"apple")
(ptest "#rx\"apple\"" #rx"apple")
(ptest "#rx#\"apple\"" #rx#"apple")
(ptest "'()" '())
(ptest "#<procedure:add1>" add1)
(ptest "'#&1" (box 1))
(ptest "'(1 . 2)" (cons 1 2))
(ptest "'(1 2)" (list 1 2))
(ptest "'(1 2 . 3)" (list* 1 2 3))
(ptest "'#(1 2 3)" (vector 1 2 3))
(ptest "'#hash((1 . 2))" (hash 1 2))
(ptest "'#hash((1 . 2))" (make-hash (list (cons 1 2))))
(ptest "'#hasheq((1 . 2))" (hasheq 1 2))
(ptest "'#hasheq((1 . 2))" (make-hasheq (list (cons 1 2))))
(ptest "'#hasheqv((1 . 2))" (hasheqv 1 2))
(ptest "'#hasheqv((1 . 2))" (make-hasheqv (list (cons 1 2))))
(ptest "(mcons 1 2)" (mcons 1 2))
(ptest "#<a>" (a 1 2))
(ptest "(b 1 2)" (b 1 2))
(ptest "'#s(c 1 2)" (c 1 2))
(ptest "'<1 1 2>" (d 1 2))
(ptest "'<1 1 #<a>>" (d 1 (a 1 2)))
(ptest "<0 1 (b 1 2)>" (d 1 (b 1 2)))
(ptest "'#&#<a>" (box (a 1 2)))
(ptest "(box (b 1 2))" (box (b 1 2)))
(ptest "'#&#s(c 1 2)" (box (c 1 2)))
(ptest "'(#<a>)" (list (a 1 2)))
(ptest "(list (b 1 2))" (list (b 1 2)))
(ptest "'(#s(c 1 2))" (list (c 1 2)))
(ptest "'(<1 1 2>)" (list (d 1 2)))
(ptest "(list <0 1 2>)" (list (e 1 2)))
(ptest "'(0 . #<a>)" (cons 0 (a 1 2)))
(ptest "(cons 0 (b 1 2))" (cons 0 (b 1 2)))
(ptest "'(0 . #s(c 1 2))" (cons 0 (c 1 2)))
(ptest "'#(#<a>)" (vector (a 1 2)))
(ptest "(vector (b 1 2))" (vector (b 1 2)))
(ptest "'#(#s(c 1 2))" (vector (c 1 2)))
(ptest "'#hash((0 . #<a>))" (hash 0 (a 1 2)))
(ptest "(hash 0 (b 1 2))" (hash 0 (b 1 2)))
(ptest "'#hash((0 . #s(c 1 2)))" (hash 0 (c 1 2)))
(ptest "(mcons 0 #<a>)" (mcons 0 (a 1 2)))
(ptest "(mcons 0 (b 1 2))" (mcons 0 (b 1 2)))
(ptest "(mcons 0 '#s(c 1 2))" (mcons 0 (c 1 2)))
(ptest "(list '(1 2) #<a> (b 1 2))" (list '(1 2) (a 1 2) (b 1 2)))
(ptest "(list* '(1 2) #<a> (b 1 2))" (list* '(1 2) (a 1 2) (b 1 2)))
(ptest "(vector '(1 2) #<a> (b 1 2))" (vector '(1 2) (a 1 2) (b 1 2)))
(ptest "(hash '(1 2) (b 1 2))" (hash '(1 2) (b 1 2)))
(ptest "'(#<procedure:add1>)" (list add1))
(ptest "'#(#<procedure:add1>)" (vector add1))
(ptest "#0='(#0#)" (read (open-input-string "#0=(#0#)")))
(ptest "#0='(#0# #0#)" (read (open-input-string "#0=(#0# #0#)")))
(ptest "#0='(#0# . #0#)" (read (open-input-string "#0=(#0# . #0#)")))
(ptest "#0='(#0# #0# . #0#)" (read (open-input-string "#0=(#0# #0# . #0#)")))
(ptest "#0='#(#0# #0#)" (read (open-input-string "#0=#(#0# #0#)")))
(ptest "#0='#&#0#" (read (open-input-string "#0=#&#0#")))
(ptest "#0=(list (b 1 2) #0#)" (let ([v (make-placeholder #f)])
(placeholder-set! v (list (b 1 2) v))
(make-reader-graph v)))
(ptest "#0=(list* (b 1 2) 8 #0#)" (let ([v (make-placeholder #f)])
(placeholder-set! v (list* (b 1 2) 8 v))
(make-reader-graph v)))
(ptest "#0=(cons (b 1 2) #0#)" (let ([v (make-placeholder #f)])
(placeholder-set! v (cons (b 1 2) v))
(make-reader-graph v)))
(ptest "#0=(vector (b 1 2) #0#)" (let ([v (make-placeholder #f)])
(placeholder-set! v (vector (b 1 2) v))
(make-reader-graph v)))
(ptest "#0='#s(c 1 #0#)" (let ([v (make-placeholder #f)])
(placeholder-set! v (c 1 v))
(make-reader-graph v)))
(ptest "#0=(c (b 1 2) #0#)" (let ([v (make-placeholder #f)])
(placeholder-set! v (c (b 1 2) v))
(make-reader-graph v)))
(ptest "'(apple\n \"0000000000000000000000000000000000000000000000000000000000000000000000\")"
(list 'apple (make-string 70 #\0)))
(ptest "'#(apple\n \"0000000000000000000000000000000000000000000000000000000000000000000000\")"
(vector 'apple (make-string 70 #\0)))
(ptest "'(apple\n .\n \"0000000000000000000000000000000000000000000000000000000000000000000000\")"
(cons 'apple (make-string 70 #\0)))
(ptest "'#hash((apple\n .\n \"0000000000000000000000000000000000000000000000000000000000000000000000\"))"
(hash 'apple (make-string 70 #\0)))
(ptest "(list\n (b 1 2)\n \"00000000000000000000000000000000000000000000000000000000000000000\")"
(list (b 1 2) (make-string 65 #\0)))
(ptest "(cons\n (b 1 2)\n \"00000000000000000000000000000000000000000000000000000000000000000\")"
(cons (b 1 2) (make-string 65 #\0)))
(ptest "(vector\n (b 1 2)\n \"00000000000000000000000000000000000000000000000000000000000000000\")"
(vector (b 1 2) (make-string 65 #\0)))
(ptest "(mcons\n (b 1 2)\n \"00000000000000000000000000000000000000000000000000000000000000000\")"
(mcons (b 1 2) (make-string 65 #\0)))
(ptest "(hash\n (b 1 2)\n \"00000000000000000000000000000000000000000000000000000000000000000\")"
(hash (b 1 2) (make-string 65 #\0)))
(ptest "(box\n (b 1 \"00000000000000000000000000000000000000000000000000000000000000000000\"))"
(box (b 1 (make-string 68 #\0))))
(ptest "#0='(#0#\n \"iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii\"\n #0#)"
(read (open-input-string "#0=(#0# \"iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii\" #0#)")))
(void))
(report-errs)

View File

@ -840,13 +840,13 @@
(let ([t (make-tuple (list (box 1) 2 "a"))])
(set-box! (car (tuple-ref t 0)) t)
(write t))))
(test "ack: here: <10, 2, \"a\">" with-output-string
(test "ack: here: '<10, 2, \"a\">" with-output-string
(lambda ()
(with-handlers ([exn:fail? (lambda (exn)
(printf "~a" (exn-message exn)))])
(error 'ack "here: ~e" (make-tuple (list 10 2 "a"))))))
(test "ack: here: <100000..." with-output-string
(test "ack: here: '<10000..." with-output-string
(lambda ()
(parameterize ([error-print-width 10])
(with-handlers ([exn:fail? (lambda (exn)

View File

@ -1103,7 +1103,7 @@
(test 3 'non-top
(parameterize ([current-namespace ns])
(eval '(+ 1 2))))
(test '`(+ 1 2) 'repl-top
(test ''(+ 1 2) 'repl-top
(let ([s (open-output-bytes)])
(parameterize ([current-input-port (open-input-string "(+ 1 2)")]
[current-namespace ns]

View File

@ -1,44 +1,44 @@
{
SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,8,52,46,50,46,53,46,49,50,51,0,0,0,1,0,0,10,0,13,
0,22,0,29,0,33,0,46,0,53,0,57,0,62,0,65,0,70,0,75,0,
SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,8,52,46,50,46,53,46,49,52,51,0,0,0,1,0,0,10,0,13,
0,22,0,27,0,32,0,45,0,52,0,57,0,61,0,65,0,72,0,79,0,
82,0,88,0,102,0,116,0,119,0,125,0,129,0,131,0,142,0,144,0,158,
0,165,0,187,0,189,0,203,0,14,1,43,1,54,1,65,1,75,1,111,1,
144,1,177,1,236,1,46,2,124,2,190,2,195,2,215,2,106,3,126,3,177,
3,243,3,128,4,14,5,66,5,89,5,168,5,0,0,109,7,0,0,69,35,
37,109,105,110,45,115,116,120,29,11,11,68,104,101,114,101,45,115,116,120,66,
108,101,116,114,101,99,63,108,101,116,72,112,97,114,97,109,101,116,101,114,105,
122,101,66,100,101,102,105,110,101,63,97,110,100,64,108,101,116,42,62,111,114,
64,119,104,101,110,64,99,111,110,100,66,117,110,108,101,115,115,65,113,117,111,
37,109,105,110,45,115,116,120,29,11,11,68,104,101,114,101,45,115,116,120,64,
108,101,116,42,64,99,111,110,100,72,112,97,114,97,109,101,116,101,114,105,122,
101,66,108,101,116,114,101,99,64,119,104,101,110,63,108,101,116,63,97,110,100,
66,117,110,108,101,115,115,66,100,101,102,105,110,101,62,111,114,65,113,117,111,
116,101,29,94,2,14,68,35,37,107,101,114,110,101,108,11,29,94,2,14,68,
35,37,112,97,114,97,109,122,11,62,105,102,65,98,101,103,105,110,63,115,116,
120,61,115,70,108,101,116,45,118,97,108,117,101,115,61,120,73,108,101,116,114,
101,99,45,118,97,108,117,101,115,66,108,97,109,98,100,97,1,20,112,97,114,
97,109,101,116,101,114,105,122,97,116,105,111,110,45,107,101,121,61,118,73,100,
101,102,105,110,101,45,118,97,108,117,101,115,97,36,11,8,240,225,78,0,0,
95,159,2,16,36,36,159,2,15,36,36,159,2,15,36,36,16,20,2,5,2,
2,2,6,2,2,2,7,2,2,2,8,2,2,2,10,2,2,2,9,2,2,
2,4,2,2,2,11,2,2,2,12,2,2,2,13,2,2,97,37,11,8,240,
225,78,0,0,93,159,2,15,36,37,16,2,2,3,161,2,2,37,2,3,2,
2,2,3,96,11,11,8,240,225,78,0,0,16,0,96,38,11,8,240,225,78,
101,102,105,110,101,45,118,97,108,117,101,115,97,36,11,8,240,249,80,0,0,
95,159,2,16,36,36,159,2,15,36,36,159,2,15,36,36,16,20,2,4,2,
2,2,11,2,2,2,5,2,2,2,12,2,2,2,7,2,2,2,8,2,2,
2,9,2,2,2,10,2,2,2,6,2,2,2,13,2,2,97,37,11,8,240,
249,80,0,0,93,159,2,15,36,37,16,2,2,3,161,2,2,37,2,3,2,
2,2,3,96,11,11,8,240,249,80,0,0,16,0,96,38,11,8,240,249,80,
0,0,16,0,13,16,4,36,29,11,11,2,2,11,18,16,2,99,64,104,101,
114,101,8,32,8,31,8,30,8,29,8,28,93,8,224,232,78,0,0,95,9,
8,224,232,78,0,0,2,2,27,248,22,147,4,195,249,22,140,4,80,158,39,
114,101,8,32,8,31,8,30,8,29,8,28,93,8,224,0,81,0,0,95,9,
8,224,0,81,0,0,2,2,27,248,22,147,4,195,249,22,140,4,80,158,39,
36,251,22,81,2,17,248,22,96,199,12,249,22,71,2,18,248,22,98,201,27,
248,22,147,4,195,249,22,140,4,80,158,39,36,251,22,81,2,17,248,22,96,
199,249,22,71,2,18,248,22,98,201,12,27,248,22,73,248,22,147,4,196,28,
248,22,79,193,20,15,159,37,36,37,28,248,22,79,248,22,73,194,248,22,72,
193,249,22,140,4,80,158,39,36,251,22,81,2,17,248,22,72,199,249,22,71,
2,8,248,22,73,201,11,18,16,2,101,10,8,32,8,31,8,30,8,29,8,
28,16,4,11,11,2,19,3,1,8,101,110,118,49,50,54,53,50,16,4,11,
11,2,20,3,1,8,101,110,118,49,50,54,53,51,93,8,224,233,78,0,0,
95,9,8,224,233,78,0,0,2,2,27,248,22,73,248,22,147,4,196,28,248,
2,10,248,22,73,201,11,18,16,2,101,10,8,32,8,31,8,30,8,29,8,
28,16,4,11,11,2,19,3,1,8,101,110,118,49,50,55,52,54,16,4,11,
11,2,20,3,1,8,101,110,118,49,50,55,52,55,93,8,224,1,81,0,0,
95,9,8,224,1,81,0,0,2,2,27,248,22,73,248,22,147,4,196,28,248,
22,79,193,20,15,159,37,36,37,28,248,22,79,248,22,73,194,248,22,72,193,
249,22,140,4,80,158,39,36,250,22,81,2,21,248,22,81,249,22,81,248,22,
81,2,22,248,22,72,201,251,22,81,2,17,2,22,2,22,249,22,71,2,10,
81,2,22,248,22,72,201,251,22,81,2,17,2,22,2,22,249,22,71,2,13,
248,22,73,204,18,16,2,101,11,8,32,8,31,8,30,8,29,8,28,16,4,
11,11,2,19,3,1,8,101,110,118,49,50,54,53,53,16,4,11,11,2,20,
3,1,8,101,110,118,49,50,54,53,54,93,8,224,234,78,0,0,95,9,8,
224,234,78,0,0,2,2,248,22,147,4,193,27,248,22,147,4,194,249,22,71,
11,11,2,19,3,1,8,101,110,118,49,50,55,52,57,16,4,11,11,2,20,
3,1,8,101,110,118,49,50,55,53,48,93,8,224,2,81,0,0,95,9,8,
224,2,81,0,0,2,2,248,22,147,4,193,27,248,22,147,4,194,249,22,71,
248,22,81,248,22,72,196,248,22,73,195,27,248,22,73,248,22,147,4,23,197,
1,249,22,140,4,80,158,39,36,28,248,22,56,248,22,141,4,248,22,72,23,
198,2,27,249,22,2,32,0,89,162,8,44,37,43,9,222,33,40,248,22,147,
@ -52,7 +52,7 @@
44,37,47,9,222,33,43,248,22,147,4,248,22,72,201,248,22,73,198,27,248,
22,73,248,22,147,4,196,27,248,22,147,4,248,22,72,195,249,22,140,4,80,
158,40,36,28,248,22,79,195,250,22,82,2,21,9,248,22,73,199,250,22,81,
2,5,248,22,81,248,22,72,199,250,22,82,2,9,248,22,73,201,248,22,73,
2,9,248,22,81,248,22,72,199,250,22,82,2,4,248,22,73,201,248,22,73,
202,27,248,22,73,248,22,147,4,23,197,1,27,249,22,1,22,85,249,22,2,
22,147,4,248,22,147,4,248,22,72,199,249,22,140,4,80,158,40,36,251,22,
81,1,22,119,105,116,104,45,99,111,110,116,105,110,117,97,116,105,111,110,45,
@ -63,13 +63,13 @@
22,147,4,196,28,248,22,79,193,20,15,159,37,36,37,249,22,140,4,80,158,
39,36,27,248,22,147,4,248,22,72,197,28,249,22,181,8,62,61,62,248,22,
141,4,248,22,96,196,250,22,81,2,21,248,22,81,249,22,81,21,93,2,26,
248,22,72,199,250,22,82,2,12,249,22,81,2,26,249,22,81,248,22,105,203,
248,22,72,199,250,22,82,2,5,249,22,81,2,26,249,22,81,248,22,105,203,
2,26,248,22,73,202,251,22,81,2,17,28,249,22,181,8,248,22,141,4,248,
22,72,200,64,101,108,115,101,10,248,22,72,197,250,22,82,2,21,9,248,22,
73,200,249,22,71,2,12,248,22,73,202,100,8,32,8,31,8,30,8,29,8,
28,16,4,11,11,2,19,3,1,8,101,110,118,49,50,54,55,56,16,4,11,
11,2,20,3,1,8,101,110,118,49,50,54,55,57,93,8,224,235,78,0,0,
18,16,2,158,94,10,64,118,111,105,100,8,48,95,9,8,224,235,78,0,0,
73,200,249,22,71,2,5,248,22,73,202,100,8,32,8,31,8,30,8,29,8,
28,16,4,11,11,2,19,3,1,8,101,110,118,49,50,55,55,50,16,4,11,
11,2,20,3,1,8,101,110,118,49,50,55,55,51,93,8,224,3,81,0,0,
18,16,2,158,94,10,64,118,111,105,100,8,48,95,9,8,224,3,81,0,0,
2,2,27,248,22,73,248,22,147,4,196,249,22,140,4,80,158,39,36,28,248,
22,56,248,22,141,4,248,22,72,197,250,22,81,2,27,248,22,81,248,22,72,
199,248,22,96,198,27,248,22,141,4,248,22,72,197,250,22,81,2,27,248,22,
@ -81,25 +81,25 @@
11,11,11,11,11,16,10,2,4,2,5,2,6,2,7,2,8,2,9,2,10,
2,11,2,12,2,13,36,46,37,11,11,11,16,0,16,0,16,0,36,36,11,
11,11,11,16,0,16,0,16,0,36,36,16,11,16,5,2,3,20,15,159,36,
36,36,36,20,105,159,36,16,0,16,1,33,33,10,16,5,2,13,89,162,8,
36,36,36,20,105,159,36,16,0,16,1,33,33,10,16,5,2,11,89,162,8,
44,37,53,9,223,0,33,34,36,20,105,159,36,16,1,2,3,16,0,11,16,
5,2,11,89,162,8,44,37,53,9,223,0,33,35,36,20,105,159,36,16,1,
2,3,16,0,11,16,5,2,8,89,162,8,44,37,53,9,223,0,33,36,36,
20,105,159,36,16,1,2,3,16,1,33,37,11,16,5,2,10,89,162,8,44,
5,2,8,89,162,8,44,37,53,9,223,0,33,35,36,20,105,159,36,16,1,
2,3,16,0,11,16,5,2,10,89,162,8,44,37,53,9,223,0,33,36,36,
20,105,159,36,16,1,2,3,16,1,33,37,11,16,5,2,13,89,162,8,44,
37,56,9,223,0,33,38,36,20,105,159,36,16,1,2,3,16,1,33,39,11,
16,5,2,5,89,162,8,44,37,58,9,223,0,33,42,36,20,105,159,36,16,
1,2,3,16,0,11,16,5,2,4,89,162,8,44,37,53,9,223,0,33,44,
36,20,105,159,36,16,1,2,3,16,0,11,16,5,2,9,89,162,8,44,37,
16,5,2,9,89,162,8,44,37,58,9,223,0,33,42,36,20,105,159,36,16,
1,2,3,16,0,11,16,5,2,7,89,162,8,44,37,53,9,223,0,33,44,
36,20,105,159,36,16,1,2,3,16,0,11,16,5,2,4,89,162,8,44,37,
54,9,223,0,33,45,36,20,105,159,36,16,1,2,3,16,0,11,16,5,2,
6,89,162,8,44,37,55,9,223,0,33,46,36,20,105,159,36,16,1,2,3,
16,0,11,16,5,2,12,89,162,8,44,37,58,9,223,0,33,47,36,20,105,
159,36,16,1,2,3,16,1,33,49,11,16,5,2,7,89,162,8,44,37,54,
16,0,11,16,5,2,5,89,162,8,44,37,58,9,223,0,33,47,36,20,105,
159,36,16,1,2,3,16,1,33,49,11,16,5,2,12,89,162,8,44,37,54,
9,223,0,33,50,36,20,105,159,36,16,1,2,3,16,0,11,16,0,94,2,
15,2,16,93,2,15,9,9,36,0};
EVAL_ONE_SIZED_STR((char *)expr, 2025);
}
{
SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,8,52,46,50,46,53,46,49,50,65,0,0,0,1,0,0,8,0,21,
SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,8,52,46,50,46,53,46,49,52,65,0,0,0,1,0,0,8,0,21,
0,26,0,43,0,58,0,76,0,92,0,102,0,120,0,140,0,156,0,174,0,
205,0,234,0,0,1,14,1,20,1,34,1,39,1,49,1,57,1,85,1,117,
1,123,1,168,1,213,1,237,1,20,2,22,2,188,2,22,4,63,4,136,5,
@ -132,231 +132,231 @@
32,111,114,32,98,121,116,101,32,115,116,114,105,110,103,6,36,36,99,97,110,
110,111,116,32,97,100,100,32,97,32,115,117,102,102,105,120,32,116,111,32,97,
32,114,111,111,116,32,112,97,116,104,58,32,5,0,27,20,14,159,80,159,37,
51,38,250,80,159,40,52,38,249,22,27,11,80,159,42,51,38,22,150,13,10,
51,38,250,80,159,40,52,38,249,22,27,11,80,159,42,51,38,22,153,13,10,
248,22,173,5,23,196,2,28,248,22,170,6,23,194,2,12,87,94,248,22,187,
8,23,194,1,27,20,14,159,80,159,38,51,38,250,80,159,41,52,38,249,22,
27,11,80,159,43,51,38,22,150,13,10,248,22,173,5,23,197,2,28,248,22,
27,11,80,159,43,51,38,22,153,13,10,248,22,173,5,23,197,2,28,248,22,
170,6,23,194,2,12,87,94,248,22,187,8,23,194,1,27,20,14,159,80,159,
39,51,38,250,80,159,42,52,38,249,22,27,11,80,159,44,51,38,22,150,13,
39,51,38,250,80,159,42,52,38,249,22,27,11,80,159,44,51,38,22,153,13,
10,248,22,173,5,23,198,2,28,248,22,170,6,23,194,2,12,87,94,248,22,
187,8,23,194,1,248,80,159,40,54,37,197,28,248,22,79,23,195,2,9,27,
248,22,72,23,196,2,27,28,248,22,134,14,23,195,2,23,194,1,28,248,22,
133,14,23,195,2,249,22,135,14,23,196,1,250,80,158,43,49,248,22,150,14,
2,20,11,10,250,80,158,41,49,248,22,150,14,2,20,23,197,1,10,28,23,
193,2,249,22,71,248,22,137,14,249,22,135,14,23,198,1,247,22,151,14,27,
248,22,72,23,196,2,27,28,248,22,137,14,23,195,2,23,194,1,28,248,22,
136,14,23,195,2,249,22,138,14,23,196,1,250,80,158,43,49,248,22,153,14,
2,20,11,10,250,80,158,41,49,248,22,153,14,2,20,23,197,1,10,28,23,
193,2,249,22,71,248,22,140,14,249,22,138,14,23,198,1,247,22,154,14,27,
248,22,73,23,200,1,28,248,22,79,23,194,2,9,27,248,22,72,23,195,2,
27,28,248,22,134,14,23,195,2,23,194,1,28,248,22,133,14,23,195,2,249,
22,135,14,23,196,1,250,80,158,48,49,248,22,150,14,2,20,11,10,250,80,
158,46,49,248,22,150,14,2,20,23,197,1,10,28,23,193,2,249,22,71,248,
22,137,14,249,22,135,14,23,198,1,247,22,151,14,248,80,159,46,53,37,248,
27,28,248,22,137,14,23,195,2,23,194,1,28,248,22,136,14,23,195,2,249,
22,138,14,23,196,1,250,80,158,48,49,248,22,153,14,2,20,11,10,250,80,
158,46,49,248,22,153,14,2,20,23,197,1,10,28,23,193,2,249,22,71,248,
22,140,14,249,22,138,14,23,198,1,247,22,154,14,248,80,159,46,53,37,248,
22,73,23,199,1,87,94,23,193,1,248,80,159,44,53,37,248,22,73,23,197,
1,87,94,23,193,1,27,248,22,73,23,198,1,28,248,22,79,23,194,2,9,
27,248,22,72,23,195,2,27,28,248,22,134,14,23,195,2,23,194,1,28,248,
22,133,14,23,195,2,249,22,135,14,23,196,1,250,80,158,46,49,248,22,150,
14,2,20,11,10,250,80,158,44,49,248,22,150,14,2,20,23,197,1,10,28,
23,193,2,249,22,71,248,22,137,14,249,22,135,14,23,198,1,247,22,151,14,
27,248,22,72,23,195,2,27,28,248,22,137,14,23,195,2,23,194,1,28,248,
22,136,14,23,195,2,249,22,138,14,23,196,1,250,80,158,46,49,248,22,153,
14,2,20,11,10,250,80,158,44,49,248,22,153,14,2,20,23,197,1,10,28,
23,193,2,249,22,71,248,22,140,14,249,22,138,14,23,198,1,247,22,154,14,
248,80,159,44,53,37,248,22,73,23,199,1,248,80,159,42,53,37,248,22,73,
196,27,248,22,174,13,23,195,2,28,23,193,2,192,87,94,23,193,1,28,248,
22,175,6,23,195,2,27,248,22,132,14,195,28,192,192,248,22,133,14,195,11,
87,94,28,28,248,22,175,13,23,195,2,10,28,248,22,174,13,23,195,2,10,
28,248,22,175,6,23,195,2,28,248,22,132,14,23,195,2,10,248,22,133,14,
196,27,248,22,177,13,23,195,2,28,23,193,2,192,87,94,23,193,1,28,248,
22,175,6,23,195,2,27,248,22,135,14,195,28,192,192,248,22,136,14,195,11,
87,94,28,28,248,22,178,13,23,195,2,10,28,248,22,177,13,23,195,2,10,
28,248,22,175,6,23,195,2,28,248,22,135,14,23,195,2,10,248,22,136,14,
23,195,2,11,12,250,22,151,9,76,110,111,114,109,97,108,45,112,97,116,104,
45,99,97,115,101,6,42,42,112,97,116,104,32,40,102,111,114,32,97,110,121,
32,115,121,115,116,101,109,41,32,111,114,32,118,97,108,105,100,45,112,97,116,
104,32,115,116,114,105,110,103,23,197,2,28,28,248,22,175,13,23,195,2,249,
22,181,8,248,22,176,13,23,197,2,2,21,249,22,181,8,247,22,130,8,2,
21,27,28,248,22,175,6,23,196,2,23,195,2,248,22,184,7,248,22,179,13,
23,197,2,28,249,22,165,14,0,21,35,114,120,34,94,91,92,92,93,91,92,
104,32,115,116,114,105,110,103,23,197,2,28,28,248,22,178,13,23,195,2,249,
22,181,8,248,22,179,13,23,197,2,2,21,249,22,181,8,247,22,130,8,2,
21,27,28,248,22,175,6,23,196,2,23,195,2,248,22,184,7,248,22,182,13,
23,197,2,28,249,22,168,14,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,175,6,195,248,22,
182,13,195,194,27,248,22,150,7,23,195,1,249,22,183,13,248,22,187,7,250,
22,173,14,0,6,35,114,120,34,47,34,28,249,22,165,14,0,22,35,114,120,
185,13,195,194,27,248,22,150,7,23,195,1,249,22,186,13,248,22,187,7,250,
22,176,14,0,6,35,114,120,34,47,34,28,249,22,168,14,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,173,14,0,19,35,114,120,34,91,32,46,93,43,40,91,
2,23,199,1,250,22,176,14,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,21,28,248,22,175,6,194,248,22,182,13,194,193,87,94,28,28,248,22,174,
13,23,195,2,10,28,248,22,175,6,23,195,2,28,248,22,132,14,23,195,2,
10,248,22,133,14,23,195,2,11,12,250,22,151,9,23,196,2,2,22,23,197,
2,28,248,22,132,14,23,195,2,12,248,22,190,11,249,22,132,11,248,22,140,
2,21,28,248,22,175,6,194,248,22,185,13,194,193,87,94,28,28,248,22,177,
13,23,195,2,10,28,248,22,175,6,23,195,2,28,248,22,135,14,23,195,2,
10,248,22,136,14,23,195,2,11,12,250,22,151,9,23,196,2,2,22,23,197,
2,28,248,22,135,14,23,195,2,12,248,22,129,12,249,22,135,11,248,22,140,
7,250,22,159,7,2,23,23,200,1,23,201,1,247,22,23,87,94,28,28,248,
22,174,13,23,195,2,10,28,248,22,175,6,23,195,2,28,248,22,132,14,23,
195,2,10,248,22,133,14,23,195,2,11,12,250,22,151,9,23,196,2,2,22,
23,197,2,28,248,22,132,14,23,195,2,12,248,22,190,11,249,22,132,11,248,
22,177,13,23,195,2,10,28,248,22,175,6,23,195,2,28,248,22,135,14,23,
195,2,10,248,22,136,14,23,195,2,11,12,250,22,151,9,23,196,2,2,22,
23,197,2,28,248,22,135,14,23,195,2,12,248,22,129,12,249,22,135,11,248,
22,140,7,250,22,159,7,2,23,23,200,1,23,201,1,247,22,23,87,94,87,
94,28,28,248,22,174,13,23,195,2,10,28,248,22,175,6,23,195,2,28,248,
22,132,14,23,195,2,10,248,22,133,14,23,195,2,11,12,250,22,151,9,195,
2,22,23,197,2,28,248,22,132,14,23,195,2,12,248,22,190,11,249,22,132,
94,28,28,248,22,177,13,23,195,2,10,28,248,22,175,6,23,195,2,28,248,
22,135,14,23,195,2,10,248,22,136,14,23,195,2,11,12,250,22,151,9,195,
2,22,23,197,2,28,248,22,135,14,23,195,2,12,248,22,129,12,249,22,135,
11,248,22,140,7,250,22,159,7,2,23,199,23,201,1,247,22,23,249,22,3,
89,162,8,44,37,50,9,223,2,33,35,196,87,94,28,28,248,22,174,13,23,
194,2,10,28,248,22,175,6,23,194,2,28,248,22,132,14,23,194,2,10,248,
22,133,14,23,194,2,11,12,250,22,151,9,2,7,2,22,23,196,2,28,248,
22,132,14,23,194,2,12,248,22,190,11,249,22,132,11,248,22,140,7,250,22,
89,162,8,44,37,50,9,223,2,33,35,196,87,94,28,28,248,22,177,13,23,
194,2,10,28,248,22,175,6,23,194,2,28,248,22,135,14,23,194,2,10,248,
22,136,14,23,194,2,11,12,250,22,151,9,2,7,2,22,23,196,2,28,248,
22,135,14,23,194,2,12,248,22,129,12,249,22,135,11,248,22,140,7,250,22,
159,7,2,23,2,7,23,200,1,247,22,23,32,38,89,162,8,44,40,55,2,
24,222,33,39,28,248,22,79,23,197,2,87,94,23,196,1,248,22,190,11,249,
22,165,11,251,22,159,7,2,25,2,7,28,248,22,79,23,203,2,87,94,23,
202,1,23,201,1,250,22,1,22,128,14,23,204,1,23,205,1,23,200,1,247,
22,23,27,249,22,128,14,248,22,72,23,200,2,23,197,2,28,248,22,187,13,
23,194,2,27,250,22,1,22,128,14,23,197,1,199,28,248,22,187,13,193,192,
24,222,33,39,28,248,22,79,23,197,2,87,94,23,196,1,248,22,129,12,249,
22,168,11,251,22,159,7,2,25,2,7,28,248,22,79,23,203,2,87,94,23,
202,1,23,201,1,250,22,1,22,131,14,23,204,1,23,205,1,23,200,1,247,
22,23,27,249,22,131,14,248,22,72,23,200,2,23,197,2,28,248,22,190,13,
23,194,2,27,250,22,1,22,131,14,23,197,1,199,28,248,22,190,13,193,192,
251,2,38,198,199,200,248,22,73,202,251,2,38,197,198,199,248,22,73,201,87,
94,87,94,87,94,28,28,248,22,174,13,193,10,28,248,22,175,6,193,28,248,
22,132,14,193,10,248,22,133,14,193,11,12,250,22,151,9,2,7,2,22,195,
28,248,22,132,14,193,12,248,22,190,11,249,22,132,11,248,22,140,7,250,22,
94,87,94,87,94,28,28,248,22,177,13,193,10,28,248,22,175,6,193,28,248,
22,135,14,193,10,248,22,136,14,193,11,12,250,22,151,9,2,7,2,22,195,
28,248,22,135,14,193,12,248,22,129,12,249,22,135,11,248,22,140,7,250,22,
159,7,2,23,2,7,199,247,22,23,249,22,3,32,0,89,162,8,44,37,49,
9,222,33,37,195,27,247,22,152,14,251,2,38,196,197,198,196,32,41,89,162,
9,222,33,37,195,27,247,22,155,14,251,2,38,196,197,198,196,32,41,89,162,
44,42,59,2,24,222,33,42,28,248,22,79,23,199,2,87,94,23,198,1,248,
23,196,1,251,22,159,7,2,25,23,199,1,28,248,22,79,23,203,2,87,94,
23,202,1,23,201,1,250,22,1,22,128,14,23,204,1,23,205,1,23,198,1,
27,249,22,128,14,248,22,72,23,202,2,23,199,2,28,248,22,187,13,23,194,
2,27,250,22,1,22,128,14,23,197,1,23,202,2,28,248,22,187,13,23,194,
23,202,1,23,201,1,250,22,1,22,131,14,23,204,1,23,205,1,23,198,1,
27,249,22,131,14,248,22,72,23,202,2,23,199,2,28,248,22,190,13,23,194,
2,27,250,22,1,22,131,14,23,197,1,23,202,2,28,248,22,190,13,23,194,
2,192,87,94,23,193,1,27,248,22,73,23,202,1,28,248,22,79,23,194,2,
87,94,23,193,1,248,23,199,1,251,22,159,7,2,25,23,202,1,28,248,22,
79,23,206,2,87,94,23,205,1,23,204,1,250,22,1,22,128,14,23,207,1,
23,208,1,23,201,1,27,249,22,128,14,248,22,72,23,197,2,23,202,2,28,
248,22,187,13,23,194,2,27,250,22,1,22,128,14,23,197,1,204,28,248,22,
187,13,193,192,253,2,41,203,204,205,206,23,15,248,22,73,201,253,2,41,202,
79,23,206,2,87,94,23,205,1,23,204,1,250,22,1,22,131,14,23,207,1,
23,208,1,23,201,1,27,249,22,131,14,248,22,72,23,197,2,23,202,2,28,
248,22,190,13,23,194,2,27,250,22,1,22,131,14,23,197,1,204,28,248,22,
190,13,193,192,253,2,41,203,204,205,206,23,15,248,22,73,201,253,2,41,202,
203,204,205,206,248,22,73,200,87,94,23,193,1,27,248,22,73,23,201,1,28,
248,22,79,23,194,2,87,94,23,193,1,248,23,198,1,251,22,159,7,2,25,
23,201,1,28,248,22,79,23,205,2,87,94,23,204,1,23,203,1,250,22,1,
22,128,14,23,206,1,23,207,1,23,200,1,27,249,22,128,14,248,22,72,23,
197,2,23,201,2,28,248,22,187,13,23,194,2,27,250,22,1,22,128,14,23,
197,1,203,28,248,22,187,13,193,192,253,2,41,202,203,204,205,206,248,22,73,
201,253,2,41,201,202,203,204,205,248,22,73,200,27,247,22,152,14,253,2,41,
198,199,200,201,202,198,87,95,28,28,248,22,175,13,23,194,2,10,28,248,22,
174,13,23,194,2,10,28,248,22,175,6,23,194,2,28,248,22,132,14,23,194,
2,10,248,22,133,14,23,194,2,11,12,252,22,151,9,23,200,2,2,26,36,
22,131,14,23,206,1,23,207,1,23,200,1,27,249,22,131,14,248,22,72,23,
197,2,23,201,2,28,248,22,190,13,23,194,2,27,250,22,1,22,131,14,23,
197,1,203,28,248,22,190,13,193,192,253,2,41,202,203,204,205,206,248,22,73,
201,253,2,41,201,202,203,204,205,248,22,73,200,27,247,22,155,14,253,2,41,
198,199,200,201,202,198,87,95,28,28,248,22,178,13,23,194,2,10,28,248,22,
177,13,23,194,2,10,28,248,22,175,6,23,194,2,28,248,22,135,14,23,194,
2,10,248,22,136,14,23,194,2,11,12,252,22,151,9,23,200,2,2,26,36,
23,198,2,23,199,2,28,28,248,22,175,6,23,195,2,10,248,22,163,7,23,
195,2,87,94,23,194,1,12,252,22,151,9,23,200,2,2,27,37,23,198,2,
23,199,1,91,159,39,11,90,161,39,36,11,248,22,131,14,23,197,2,87,94,
23,199,1,91,159,39,11,90,161,39,36,11,248,22,134,14,23,197,2,87,94,
23,195,1,87,94,28,192,12,250,22,152,9,23,201,1,2,28,23,199,1,249,
22,7,194,195,91,159,38,11,90,161,38,36,11,87,95,28,28,248,22,175,13,
23,196,2,10,28,248,22,174,13,23,196,2,10,28,248,22,175,6,23,196,2,
28,248,22,132,14,23,196,2,10,248,22,133,14,23,196,2,11,12,252,22,151,
22,7,194,195,91,159,38,11,90,161,38,36,11,87,95,28,28,248,22,178,13,
23,196,2,10,28,248,22,177,13,23,196,2,10,28,248,22,175,6,23,196,2,
28,248,22,135,14,23,196,2,10,248,22,136,14,23,196,2,11,12,252,22,151,
9,2,10,2,26,36,23,200,2,23,201,2,28,28,248,22,175,6,23,197,2,
10,248,22,163,7,23,197,2,12,252,22,151,9,2,10,2,27,37,23,200,2,
23,201,2,91,159,39,11,90,161,39,36,11,248,22,131,14,23,199,2,87,94,
23,201,2,91,159,39,11,90,161,39,36,11,248,22,134,14,23,199,2,87,94,
23,195,1,87,94,28,192,12,250,22,152,9,2,10,2,28,23,201,2,249,22,
7,194,195,27,249,22,184,13,250,22,172,14,0,20,35,114,120,35,34,40,63,
58,91,46,93,91,94,46,93,42,124,41,36,34,248,22,180,13,23,201,1,28,
7,194,195,27,249,22,187,13,250,22,175,14,0,20,35,114,120,35,34,40,63,
58,91,46,93,91,94,46,93,42,124,41,36,34,248,22,183,13,23,201,1,28,
248,22,175,6,23,203,2,249,22,187,7,23,204,1,8,63,23,202,1,28,248,
22,175,13,23,199,2,248,22,176,13,23,199,1,87,94,23,198,1,247,22,177,
13,28,248,22,174,13,194,249,22,128,14,195,194,192,91,159,38,11,90,161,38,
36,11,87,95,28,28,248,22,175,13,23,196,2,10,28,248,22,174,13,23,196,
2,10,28,248,22,175,6,23,196,2,28,248,22,132,14,23,196,2,10,248,22,
133,14,23,196,2,11,12,252,22,151,9,2,11,2,26,36,23,200,2,23,201,
22,178,13,23,199,2,248,22,179,13,23,199,1,87,94,23,198,1,247,22,180,
13,28,248,22,177,13,194,249,22,131,14,195,194,192,91,159,38,11,90,161,38,
36,11,87,95,28,28,248,22,178,13,23,196,2,10,28,248,22,177,13,23,196,
2,10,28,248,22,175,6,23,196,2,28,248,22,135,14,23,196,2,10,248,22,
136,14,23,196,2,11,12,252,22,151,9,2,11,2,26,36,23,200,2,23,201,
2,28,28,248,22,175,6,23,197,2,10,248,22,163,7,23,197,2,12,252,22,
151,9,2,11,2,27,37,23,200,2,23,201,2,91,159,39,11,90,161,39,36,
11,248,22,131,14,23,199,2,87,94,23,195,1,87,94,28,192,12,250,22,152,
9,2,11,2,28,23,201,2,249,22,7,194,195,27,249,22,184,13,249,22,173,
7,250,22,173,14,0,9,35,114,120,35,34,91,46,93,34,248,22,180,13,23,
11,248,22,134,14,23,199,2,87,94,23,195,1,87,94,28,192,12,250,22,152,
9,2,11,2,28,23,201,2,249,22,7,194,195,27,249,22,187,13,249,22,173,
7,250,22,176,14,0,9,35,114,120,35,34,91,46,93,34,248,22,183,13,23,
203,1,6,1,1,95,28,248,22,175,6,23,202,2,249,22,187,7,23,203,1,
8,63,23,201,1,28,248,22,175,13,23,199,2,248,22,176,13,23,199,1,87,
94,23,198,1,247,22,177,13,28,248,22,174,13,194,249,22,128,14,195,194,192,
8,63,23,201,1,28,248,22,178,13,23,199,2,248,22,179,13,23,199,1,87,
94,23,198,1,247,22,180,13,28,248,22,177,13,194,249,22,131,14,195,194,192,
249,247,22,142,5,194,11,249,80,159,38,47,37,9,9,249,80,159,38,47,37,
195,9,27,247,22,154,14,249,80,158,39,48,28,23,195,2,27,248,22,128,8,
195,9,27,247,22,157,14,249,80,158,39,48,28,23,195,2,27,248,22,128,8,
6,11,11,80,76,84,67,79,76,76,69,67,84,83,28,192,192,6,0,0,6,
0,0,27,28,23,196,1,250,22,128,14,248,22,150,14,69,97,100,100,111,110,
0,0,27,28,23,196,1,250,22,131,14,248,22,153,14,69,97,100,100,111,110,
45,100,105,114,247,22,190,7,6,8,8,99,111,108,108,101,99,116,115,11,27,
248,80,159,42,53,37,250,22,85,23,203,1,248,22,81,248,22,150,14,72,99,
248,80,159,42,53,37,250,22,85,23,203,1,248,22,81,248,22,153,14,72,99,
111,108,108,101,99,116,115,45,100,105,114,23,204,1,28,193,249,22,71,195,194,
192,32,51,89,162,8,44,39,8,31,2,19,222,33,52,27,249,22,161,14,23,
192,32,51,89,162,8,44,39,8,31,2,19,222,33,52,27,249,22,164,14,23,
197,2,23,198,2,28,23,193,2,87,94,23,196,1,27,248,22,96,23,195,2,
27,27,248,22,105,23,197,1,27,249,22,161,14,23,201,2,23,196,2,28,23,
27,27,248,22,105,23,197,1,27,249,22,164,14,23,201,2,23,196,2,28,23,
193,2,87,94,23,194,1,27,248,22,96,23,195,2,27,27,248,22,105,23,197,
1,27,249,22,161,14,23,205,2,23,196,2,28,23,193,2,87,94,23,194,1,
27,248,22,96,23,195,2,27,27,248,22,105,23,197,1,27,249,22,161,14,23,
1,27,249,22,164,14,23,205,2,23,196,2,28,23,193,2,87,94,23,194,1,
27,248,22,96,23,195,2,27,27,248,22,105,23,197,1,27,249,22,164,14,23,
209,2,23,196,2,28,23,193,2,87,94,23,194,1,27,248,22,96,23,195,2,
27,27,248,22,105,23,197,1,27,249,22,161,14,23,213,2,23,196,2,28,23,
27,27,248,22,105,23,197,1,27,249,22,164,14,23,213,2,23,196,2,28,23,
193,2,87,94,23,194,1,27,248,22,96,23,195,2,27,250,2,51,23,215,2,
23,216,1,248,22,105,23,199,1,28,249,22,169,7,23,196,2,2,29,249,22,
85,23,214,2,194,249,22,71,248,22,183,13,23,197,1,194,87,95,23,211,1,
85,23,214,2,194,249,22,71,248,22,186,13,23,197,1,194,87,95,23,211,1,
23,193,1,28,249,22,169,7,23,196,2,2,29,249,22,85,23,212,2,9,249,
22,71,248,22,183,13,23,197,1,9,28,249,22,169,7,23,196,2,2,29,249,
22,85,23,210,2,194,249,22,71,248,22,183,13,23,197,1,194,87,94,23,193,
22,71,248,22,186,13,23,197,1,9,28,249,22,169,7,23,196,2,2,29,249,
22,85,23,210,2,194,249,22,71,248,22,186,13,23,197,1,194,87,94,23,193,
1,28,249,22,169,7,23,196,2,2,29,249,22,85,23,208,2,9,249,22,71,
248,22,183,13,23,197,1,9,28,249,22,169,7,23,196,2,2,29,249,22,85,
23,206,2,194,249,22,71,248,22,183,13,23,197,1,194,87,94,23,193,1,28,
248,22,186,13,23,197,1,9,28,249,22,169,7,23,196,2,2,29,249,22,85,
23,206,2,194,249,22,71,248,22,186,13,23,197,1,194,87,94,23,193,1,28,
249,22,169,7,23,196,2,2,29,249,22,85,23,204,2,9,249,22,71,248,22,
183,13,23,197,1,9,28,249,22,169,7,23,196,2,2,29,249,22,85,23,202,
2,194,249,22,71,248,22,183,13,23,197,1,194,87,94,23,193,1,28,249,22,
169,7,23,196,2,2,29,249,22,85,23,200,2,9,249,22,71,248,22,183,13,
186,13,23,197,1,9,28,249,22,169,7,23,196,2,2,29,249,22,85,23,202,
2,194,249,22,71,248,22,186,13,23,197,1,194,87,94,23,193,1,28,249,22,
169,7,23,196,2,2,29,249,22,85,23,200,2,9,249,22,71,248,22,186,13,
23,197,1,9,28,249,22,169,7,23,196,2,2,29,249,22,85,197,194,87,94,
23,196,1,249,22,71,248,22,183,13,23,197,1,194,87,94,23,193,1,28,249,
23,196,1,249,22,71,248,22,186,13,23,197,1,194,87,94,23,193,1,28,249,
22,169,7,23,198,2,2,29,249,22,85,195,9,87,94,23,194,1,249,22,71,
248,22,183,13,23,199,1,9,87,95,28,28,248,22,163,7,194,10,248,22,175,
248,22,186,13,23,199,1,9,87,95,28,28,248,22,163,7,194,10,248,22,175,
6,194,12,250,22,151,9,2,14,6,21,21,98,121,116,101,32,115,116,114,105,
110,103,32,111,114,32,115,116,114,105,110,103,196,28,28,248,22,80,195,249,22,
4,22,174,13,196,11,12,250,22,151,9,2,14,6,13,13,108,105,115,116,32,
4,22,177,13,196,11,12,250,22,151,9,2,14,6,13,13,108,105,115,116,32,
111,102,32,112,97,116,104,115,197,250,2,51,197,195,28,248,22,175,6,197,248,
22,186,7,197,196,32,54,89,162,8,44,39,53,70,102,111,117,110,100,45,101,
120,101,99,222,33,57,32,55,89,162,8,44,40,58,64,110,101,120,116,222,33,
56,27,248,22,136,14,23,196,2,28,249,22,183,8,23,195,2,23,197,1,11,
28,248,22,132,14,23,194,2,27,249,22,128,14,23,197,1,23,196,1,28,23,
197,2,91,159,39,11,90,161,39,36,11,248,22,131,14,23,197,2,87,95,23,
195,1,23,194,1,27,28,23,202,2,27,248,22,136,14,23,199,2,28,249,22,
183,8,23,195,2,23,200,2,11,28,248,22,132,14,23,194,2,250,2,54,23,
205,2,23,206,2,249,22,128,14,23,200,2,23,198,1,250,2,54,23,205,2,
56,27,248,22,139,14,23,196,2,28,249,22,183,8,23,195,2,23,197,1,11,
28,248,22,135,14,23,194,2,27,249,22,131,14,23,197,1,23,196,1,28,23,
197,2,91,159,39,11,90,161,39,36,11,248,22,134,14,23,197,2,87,95,23,
195,1,23,194,1,27,28,23,202,2,27,248,22,139,14,23,199,2,28,249,22,
183,8,23,195,2,23,200,2,11,28,248,22,135,14,23,194,2,250,2,54,23,
205,2,23,206,2,249,22,131,14,23,200,2,23,198,1,250,2,54,23,205,2,
23,206,2,23,196,1,11,28,23,193,2,192,87,94,23,193,1,27,28,248,22,
174,13,23,196,2,27,249,22,128,14,23,198,2,23,205,2,28,28,248,22,187,
13,193,10,248,22,186,13,193,192,11,11,28,23,193,2,192,87,94,23,193,1,
28,23,203,2,11,27,248,22,136,14,23,200,2,28,249,22,183,8,23,195,2,
23,201,1,11,28,248,22,132,14,23,194,2,250,2,54,23,206,1,23,207,1,
249,22,128,14,23,201,1,23,198,1,250,2,54,205,206,195,192,87,94,23,194,
1,28,23,196,2,91,159,39,11,90,161,39,36,11,248,22,131,14,23,197,2,
87,95,23,195,1,23,194,1,27,28,23,201,2,27,248,22,136,14,23,199,2,
28,249,22,183,8,23,195,2,23,200,2,11,28,248,22,132,14,23,194,2,250,
2,54,23,204,2,23,205,2,249,22,128,14,23,200,2,23,198,1,250,2,54,
177,13,23,196,2,27,249,22,131,14,23,198,2,23,205,2,28,28,248,22,190,
13,193,10,248,22,189,13,193,192,11,11,28,23,193,2,192,87,94,23,193,1,
28,23,203,2,11,27,248,22,139,14,23,200,2,28,249,22,183,8,23,195,2,
23,201,1,11,28,248,22,135,14,23,194,2,250,2,54,23,206,1,23,207,1,
249,22,131,14,23,201,1,23,198,1,250,2,54,205,206,195,192,87,94,23,194,
1,28,23,196,2,91,159,39,11,90,161,39,36,11,248,22,134,14,23,197,2,
87,95,23,195,1,23,194,1,27,28,23,201,2,27,248,22,139,14,23,199,2,
28,249,22,183,8,23,195,2,23,200,2,11,28,248,22,135,14,23,194,2,250,
2,54,23,204,2,23,205,2,249,22,131,14,23,200,2,23,198,1,250,2,54,
23,204,2,23,205,2,23,196,1,11,28,23,193,2,192,87,94,23,193,1,27,
28,248,22,174,13,23,196,2,27,249,22,128,14,23,198,2,23,204,2,28,28,
248,22,187,13,193,10,248,22,186,13,193,192,11,11,28,23,193,2,192,87,94,
23,193,1,28,23,202,2,11,27,248,22,136,14,23,200,2,28,249,22,183,8,
23,195,2,23,201,1,11,28,248,22,132,14,23,194,2,250,2,54,23,205,1,
23,206,1,249,22,128,14,23,201,1,23,198,1,250,2,54,204,205,195,192,28,
23,193,2,91,159,39,11,90,161,39,36,11,248,22,131,14,23,199,2,87,95,
28,248,22,177,13,23,196,2,27,249,22,131,14,23,198,2,23,204,2,28,28,
248,22,190,13,193,10,248,22,189,13,193,192,11,11,28,23,193,2,192,87,94,
23,193,1,28,23,202,2,11,27,248,22,139,14,23,200,2,28,249,22,183,8,
23,195,2,23,201,1,11,28,248,22,135,14,23,194,2,250,2,54,23,205,1,
23,206,1,249,22,131,14,23,201,1,23,198,1,250,2,54,204,205,195,192,28,
23,193,2,91,159,39,11,90,161,39,36,11,248,22,134,14,23,199,2,87,95,
23,195,1,23,194,1,27,28,23,198,2,251,2,55,23,198,2,23,203,2,23,
201,2,23,202,2,11,28,23,193,2,192,87,94,23,193,1,27,28,248,22,174,
13,195,27,249,22,128,14,197,200,28,28,248,22,187,13,193,10,248,22,186,13,
201,2,23,202,2,11,28,23,193,2,192,87,94,23,193,1,27,28,248,22,177,
13,195,27,249,22,131,14,197,200,28,28,248,22,190,13,193,10,248,22,189,13,
193,192,11,11,28,192,192,28,198,11,251,2,55,198,203,201,202,194,32,58,89,
162,8,44,40,8,31,2,19,222,33,59,28,248,22,79,23,197,2,11,27,248,
22,135,14,248,22,72,23,199,2,27,249,22,128,14,23,196,1,23,197,2,28,
248,22,186,13,23,194,2,250,2,54,198,199,195,87,94,23,193,1,27,248,22,
73,23,200,1,28,248,22,79,23,194,2,11,27,248,22,135,14,248,22,72,23,
196,2,27,249,22,128,14,23,196,1,23,200,2,28,248,22,186,13,23,194,2,
22,138,14,248,22,72,23,199,2,27,249,22,131,14,23,196,1,23,197,2,28,
248,22,189,13,23,194,2,250,2,54,198,199,195,87,94,23,193,1,27,248,22,
73,23,200,1,28,248,22,79,23,194,2,11,27,248,22,138,14,248,22,72,23,
196,2,27,249,22,131,14,23,196,1,23,200,2,28,248,22,189,13,23,194,2,
250,2,54,201,202,195,87,94,23,193,1,27,248,22,73,23,197,1,28,248,22,
79,23,194,2,11,27,248,22,135,14,248,22,72,23,196,2,27,249,22,128,14,
23,196,1,23,203,2,28,248,22,186,13,23,194,2,250,2,54,204,205,195,87,
79,23,194,2,11,27,248,22,138,14,248,22,72,23,196,2,27,249,22,131,14,
23,196,1,23,203,2,28,248,22,189,13,23,194,2,250,2,54,204,205,195,87,
94,23,193,1,27,248,22,73,23,197,1,28,248,22,79,23,194,2,11,27,248,
22,135,14,248,22,72,23,196,2,27,249,22,128,14,23,196,1,23,206,2,28,
248,22,186,13,23,194,2,250,2,54,23,15,23,16,195,87,94,23,193,1,27,
248,22,73,23,197,1,28,248,22,79,23,194,2,11,27,248,22,135,14,248,22,
72,23,196,2,27,249,22,128,14,23,196,1,23,209,2,28,248,22,186,13,23,
22,138,14,248,22,72,23,196,2,27,249,22,131,14,23,196,1,23,206,2,28,
248,22,189,13,23,194,2,250,2,54,23,15,23,16,195,87,94,23,193,1,27,
248,22,73,23,197,1,28,248,22,79,23,194,2,11,27,248,22,138,14,248,22,
72,23,196,2,27,249,22,131,14,23,196,1,23,209,2,28,248,22,189,13,23,
194,2,250,2,54,23,18,23,19,195,87,94,23,193,1,27,248,22,73,23,197,
1,28,248,22,79,23,194,2,11,27,248,22,135,14,248,22,72,195,27,249,22,
128,14,23,196,1,23,19,28,248,22,186,13,193,250,2,54,23,21,23,22,195,
251,2,58,23,21,23,22,23,23,248,22,73,199,87,95,28,28,248,22,174,13,
23,195,2,10,28,248,22,175,6,23,195,2,28,248,22,132,14,23,195,2,10,
248,22,133,14,23,195,2,11,12,250,22,151,9,2,15,6,25,25,112,97,116,
1,28,248,22,79,23,194,2,11,27,248,22,138,14,248,22,72,195,27,249,22,
131,14,23,196,1,23,19,28,248,22,189,13,193,250,2,54,23,21,23,22,195,
251,2,58,23,21,23,22,23,23,248,22,73,199,87,95,28,28,248,22,177,13,
23,195,2,10,28,248,22,175,6,23,195,2,28,248,22,135,14,23,195,2,10,
248,22,136,14,23,195,2,11,12,250,22,151,9,2,15,6,25,25,112,97,116,
104,32,111,114,32,115,116,114,105,110,103,32,40,115,97,110,115,32,110,117,108,
41,23,197,2,28,28,23,195,2,28,28,248,22,174,13,23,196,2,10,28,248,
22,175,6,23,196,2,28,248,22,132,14,23,196,2,10,248,22,133,14,23,196,
2,11,248,22,132,14,23,196,2,11,10,12,250,22,151,9,2,15,6,29,29,
41,23,197,2,28,28,23,195,2,28,28,248,22,177,13,23,196,2,10,28,248,
22,175,6,23,196,2,28,248,22,135,14,23,196,2,10,248,22,136,14,23,196,
2,11,248,22,135,14,23,196,2,11,10,12,250,22,151,9,2,15,6,29,29,
35,102,32,111,114,32,114,101,108,97,116,105,118,101,32,112,97,116,104,32,111,
114,32,115,116,114,105,110,103,23,198,2,28,28,248,22,132,14,23,195,2,91,
159,39,11,90,161,39,36,11,248,22,131,14,23,198,2,249,22,181,8,194,68,
114,32,115,116,114,105,110,103,23,198,2,28,28,248,22,135,14,23,195,2,91,
159,39,11,90,161,39,36,11,248,22,134,14,23,198,2,249,22,181,8,194,68,
114,101,108,97,116,105,118,101,11,27,248,22,128,8,6,4,4,80,65,84,72,
27,28,23,194,2,27,249,80,159,41,48,38,23,197,1,9,28,249,22,181,8,
247,22,130,8,2,21,249,22,71,248,22,183,13,5,1,46,194,192,87,94,23,
194,1,9,28,248,22,79,23,194,2,11,27,248,22,135,14,248,22,72,23,196,
2,27,249,22,128,14,23,196,1,23,200,2,28,248,22,186,13,23,194,2,250,
247,22,130,8,2,21,249,22,71,248,22,186,13,5,1,46,194,192,87,94,23,
194,1,9,28,248,22,79,23,194,2,11,27,248,22,138,14,248,22,72,23,196,
2,27,249,22,131,14,23,196,1,23,200,2,28,248,22,189,13,23,194,2,250,
2,54,201,202,195,87,94,23,193,1,27,248,22,73,23,197,1,28,248,22,79,
23,194,2,11,27,248,22,135,14,248,22,72,23,196,2,27,249,22,128,14,23,
196,1,23,203,2,28,248,22,186,13,23,194,2,250,2,54,204,205,195,87,94,
23,194,2,11,27,248,22,138,14,248,22,72,23,196,2,27,249,22,131,14,23,
196,1,23,203,2,28,248,22,189,13,23,194,2,250,2,54,204,205,195,87,94,
23,193,1,27,248,22,73,23,197,1,28,248,22,79,23,194,2,11,27,248,22,
135,14,248,22,72,195,27,249,22,128,14,23,196,1,205,28,248,22,186,13,193,
138,14,248,22,72,195,27,249,22,131,14,23,196,1,205,28,248,22,189,13,193,
250,2,54,23,15,23,16,195,251,2,58,23,15,23,16,23,17,248,22,73,199,
27,248,22,135,14,23,196,1,28,248,22,186,13,193,250,2,54,198,199,195,11,
27,248,22,138,14,23,196,1,28,248,22,189,13,193,250,2,54,198,199,195,11,
250,80,159,39,49,37,196,197,11,250,80,159,39,49,37,196,11,11,87,94,249,
22,166,6,247,22,138,5,195,248,22,128,6,249,22,184,3,36,249,22,168,3,
197,198,27,28,23,197,2,87,95,23,196,1,23,195,1,23,197,1,87,94,23,
197,1,27,248,22,150,14,2,20,27,249,80,159,41,49,37,23,196,1,11,27,
197,1,27,248,22,153,14,2,20,27,249,80,159,41,49,37,23,196,1,11,27,
27,248,22,187,3,23,200,1,28,192,192,36,27,27,248,22,187,3,23,202,1,
28,192,192,36,249,22,169,5,23,197,1,83,158,40,20,100,95,89,162,8,44,
36,48,9,224,3,2,33,63,23,195,1,23,196,1,27,248,22,154,5,23,195,
@ -388,7 +388,7 @@
222,33,47,80,159,36,46,37,83,158,36,16,2,83,158,39,20,99,96,2,13,
89,162,44,36,44,9,223,0,33,48,89,162,44,37,45,9,223,0,33,49,89,
162,44,38,55,9,223,0,33,50,80,159,36,47,37,83,158,36,16,2,27,248,
22,157,14,248,22,186,7,27,28,249,22,181,8,247,22,130,8,2,21,6,1,
22,160,14,248,22,186,7,27,28,249,22,181,8,247,22,130,8,2,21,6,1,
1,59,6,1,1,58,250,22,159,7,6,14,14,40,91,94,126,97,93,42,41,
126,97,40,46,42,41,23,196,2,23,196,1,89,162,8,44,38,48,2,14,223,
0,33,53,80,159,36,48,37,83,158,36,16,2,83,158,39,20,99,96,2,15,
@ -400,13 +400,13 @@
EVAL_ONE_SIZED_STR((char *)expr, 6246);
}
{
SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,8,52,46,50,46,53,46,49,50,9,0,0,0,1,0,0,10,0,16,
SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,8,52,46,50,46,53,46,49,52,9,0,0,0,1,0,0,10,0,16,
0,29,0,44,0,58,0,72,0,86,0,128,0,0,0,57,1,0,0,69,35,
37,98,117,105,108,116,105,110,65,113,117,111,116,101,29,94,2,2,67,35,37,
117,116,105,108,115,11,29,94,2,2,69,35,37,110,101,116,119,111,114,107,11,
29,94,2,2,68,35,37,112,97,114,97,109,122,11,29,94,2,2,68,35,37,
101,120,112,111,98,115,11,29,94,2,2,68,35,37,107,101,114,110,101,108,11,
97,36,11,8,240,103,79,0,0,98,159,2,3,36,36,159,2,4,36,36,159,
97,36,11,8,240,127,81,0,0,98,159,2,3,36,36,159,2,4,36,36,159,
2,5,36,36,159,2,6,36,36,159,2,7,36,36,159,2,7,36,36,16,0,
159,36,20,105,159,36,16,1,11,16,0,83,158,42,20,103,145,2,1,2,1,
29,11,11,11,11,11,18,96,11,44,44,44,36,80,158,36,36,20,105,159,36,
@ -420,7 +420,7 @@
EVAL_ONE_SIZED_STR((char *)expr, 353);
}
{
SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,8,52,46,50,46,53,46,49,50,74,0,0,0,1,0,0,7,0,18,
SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,8,52,46,50,46,53,46,49,52,74,0,0,0,1,0,0,7,0,18,
0,45,0,51,0,64,0,73,0,80,0,102,0,124,0,150,0,162,0,180,0,
200,0,212,0,228,0,251,0,7,1,38,1,45,1,50,1,55,1,60,1,65,
1,70,1,79,1,84,1,88,1,94,1,101,1,107,1,115,1,124,1,145,1,
@ -446,40 +446,40 @@
97,109,101,5,3,46,122,111,5,3,46,122,111,6,6,6,110,97,116,105,118,
101,64,108,111,111,112,63,108,105,98,6,3,3,46,115,115,6,4,4,46,114,
107,116,5,4,46,114,107,116,67,105,103,110,111,114,101,100,249,22,14,195,80,
159,38,46,38,250,22,128,14,23,197,1,23,199,1,249,80,159,43,39,38,23,
198,1,2,23,250,22,128,14,23,197,1,23,199,1,249,80,159,43,39,38,23,
198,1,2,24,252,22,128,14,23,199,1,23,201,1,2,25,247,22,131,8,249,
80,159,45,39,38,23,200,1,80,159,45,36,38,252,22,128,14,23,199,1,23,
159,38,46,38,250,22,131,14,23,197,1,23,199,1,249,80,159,43,39,38,23,
198,1,2,23,250,22,131,14,23,197,1,23,199,1,249,80,159,43,39,38,23,
198,1,2,24,252,22,131,14,23,199,1,23,201,1,2,25,247,22,131,8,249,
80,159,45,39,38,23,200,1,80,159,45,36,38,252,22,131,14,23,199,1,23,
201,1,2,25,247,22,131,8,249,80,159,45,39,38,23,200,1,80,159,45,36,
38,27,252,22,128,14,23,200,1,23,202,1,2,25,247,22,131,8,249,80,159,
46,39,38,23,201,1,80,159,46,36,38,27,250,22,145,14,196,11,32,0,89,
162,8,44,36,41,9,222,11,28,192,249,22,71,195,194,11,27,252,22,128,14,
38,27,252,22,131,14,23,200,1,23,202,1,2,25,247,22,131,8,249,80,159,
46,39,38,23,201,1,80,159,46,36,38,27,250,22,148,14,196,11,32,0,89,
162,8,44,36,41,9,222,11,28,192,249,22,71,195,194,11,27,252,22,131,14,
23,200,1,23,202,1,2,25,247,22,131,8,249,80,159,46,39,38,23,201,1,
80,159,46,36,38,27,250,22,145,14,196,11,32,0,89,162,8,44,36,41,9,
222,11,28,192,249,22,71,195,194,11,27,250,22,128,14,23,198,1,23,200,1,
249,80,159,44,39,38,23,199,1,2,23,27,250,22,145,14,196,11,32,0,89,
162,8,44,36,41,9,222,11,28,192,249,22,71,195,194,11,27,250,22,128,14,
23,198,1,23,200,1,249,80,159,44,39,38,23,199,1,2,24,27,250,22,145,
80,159,46,36,38,27,250,22,148,14,196,11,32,0,89,162,8,44,36,41,9,
222,11,28,192,249,22,71,195,194,11,27,250,22,131,14,23,198,1,23,200,1,
249,80,159,44,39,38,23,199,1,2,23,27,250,22,148,14,196,11,32,0,89,
162,8,44,36,41,9,222,11,28,192,249,22,71,195,194,11,27,250,22,131,14,
23,198,1,23,200,1,249,80,159,44,39,38,23,199,1,2,24,27,250,22,148,
14,196,11,32,0,89,162,8,44,36,41,9,222,11,28,192,249,22,71,195,194,
11,87,94,28,248,80,159,37,38,38,23,195,2,12,250,22,151,9,77,108,111,
97,100,47,117,115,101,45,99,111,109,112,105,108,101,100,6,25,25,112,97,116,
104,32,111,114,32,118,97,108,105,100,45,112,97,116,104,32,115,116,114,105,110,
103,23,197,2,91,159,46,11,90,161,37,36,11,28,248,22,134,14,23,205,2,
23,204,2,27,247,22,143,5,28,23,193,2,249,22,135,14,23,207,2,23,195,
1,23,205,2,90,161,39,37,11,248,22,131,14,23,205,1,87,94,23,196,1,
90,161,38,40,11,28,23,205,2,27,248,22,179,13,23,197,2,27,248,22,166,
103,23,197,2,91,159,46,11,90,161,37,36,11,28,248,22,137,14,23,205,2,
23,204,2,27,247,22,143,5,28,23,193,2,249,22,138,14,23,207,2,23,195,
1,23,205,2,90,161,39,37,11,248,22,134,14,23,205,1,87,94,23,196,1,
90,161,38,40,11,28,23,205,2,27,248,22,182,13,23,197,2,27,248,22,166,
7,23,195,2,28,28,249,22,180,3,23,195,2,40,249,22,169,7,5,4,46,
114,107,116,249,22,172,7,23,198,2,249,22,168,3,23,199,2,40,11,249,22,
7,23,199,2,248,22,183,13,249,22,173,7,250,22,172,7,23,202,1,36,249,
7,23,199,2,248,22,186,13,249,22,173,7,250,22,172,7,23,202,1,36,249,
22,168,3,23,203,1,40,5,3,46,115,115,249,22,7,23,199,2,11,249,22,
7,23,197,2,11,90,161,37,42,11,28,249,22,181,8,23,199,2,23,197,2,
23,193,2,249,22,128,14,23,196,2,23,199,2,90,161,37,43,11,28,23,198,
23,193,2,249,22,131,14,23,196,2,23,199,2,90,161,37,43,11,28,23,198,
2,28,249,22,181,8,23,200,2,23,197,1,23,193,1,87,94,23,193,1,249,
22,128,14,23,196,2,23,200,2,87,94,23,195,1,11,90,161,37,44,11,28,
22,131,14,23,196,2,23,200,2,87,94,23,195,1,11,90,161,37,44,11,28,
249,22,181,8,23,196,2,68,114,101,108,97,116,105,118,101,87,94,23,194,1,
2,22,23,194,1,90,161,37,45,11,247,22,153,14,27,27,250,22,145,14,23,
2,22,23,194,1,90,161,37,45,11,247,22,156,14,27,27,250,22,148,14,23,
204,2,11,32,0,89,162,8,44,36,41,9,222,11,28,192,249,22,71,23,203,
2,194,11,27,28,23,202,2,28,23,194,2,11,27,250,22,145,14,23,206,2,
2,194,11,27,28,23,202,2,28,23,194,2,11,27,250,22,148,14,23,206,2,
11,32,0,89,162,8,44,36,41,9,222,11,28,192,249,22,71,23,205,2,194,
11,11,27,28,23,195,2,23,195,2,23,194,2,27,89,162,44,37,50,62,122,
111,225,14,12,8,33,33,27,89,162,44,37,50,66,97,108,116,45,122,111,225,
@ -494,8 +494,8 @@
1,23,199,1,23,198,1,23,196,1,23,195,1,23,194,1,20,14,159,80,159,
56,40,38,250,80,159,59,41,38,249,22,27,11,80,159,8,25,40,38,22,167,
4,11,20,14,159,80,159,56,40,38,250,80,159,59,41,38,249,22,27,11,80,
159,8,25,40,38,22,143,5,28,248,22,174,13,23,215,2,23,214,1,87,94,
23,214,1,247,22,151,14,249,247,22,156,14,248,22,72,195,23,24,87,94,23,
159,8,25,40,38,22,143,5,28,248,22,177,13,23,215,2,23,214,1,87,94,
23,214,1,247,22,154,14,249,247,22,159,14,248,22,72,195,23,24,87,94,23,
193,1,27,28,23,195,2,28,23,197,1,27,249,22,5,89,162,8,44,37,53,
9,225,24,22,19,33,38,23,216,2,27,28,23,204,2,11,193,28,192,192,28,
193,28,203,28,249,22,180,3,248,22,73,196,248,22,73,206,193,11,11,11,11,
@ -503,8 +503,8 @@
23,208,1,23,201,1,23,200,1,23,199,1,23,196,1,23,195,1,20,14,159,
80,159,57,40,38,250,80,159,8,24,41,38,249,22,27,11,80,159,8,26,40,
38,22,167,4,23,214,1,20,14,159,80,159,57,40,38,250,80,159,8,24,41,
38,249,22,27,11,80,159,8,26,40,38,22,143,5,28,248,22,174,13,23,216,
2,23,215,1,87,94,23,215,1,247,22,151,14,249,247,22,156,14,248,22,72,
38,249,22,27,11,80,159,8,26,40,38,22,143,5,28,248,22,177,13,23,216,
2,23,215,1,87,94,23,215,1,247,22,154,14,249,247,22,159,14,248,22,72,
195,23,25,87,94,23,193,1,27,28,23,197,2,28,23,201,1,27,249,22,5,
83,158,40,20,100,94,89,162,8,44,37,51,9,225,25,23,19,33,39,23,212,
1,23,217,2,27,28,23,204,2,11,193,28,192,192,28,193,28,23,204,2,28,
@ -513,8 +513,8 @@
23,211,1,23,210,1,23,202,1,23,200,1,23,197,1,23,196,1,20,14,159,
80,159,58,40,38,250,80,159,8,25,41,38,249,22,27,11,80,159,8,27,40,
38,22,167,4,11,20,14,159,80,159,58,40,38,250,80,159,8,25,41,38,249,
22,27,11,80,159,8,27,40,38,22,143,5,28,248,22,174,13,23,217,2,23,
216,1,87,94,23,216,1,247,22,151,14,249,247,22,141,5,248,22,72,195,23,
22,27,11,80,159,8,27,40,38,22,143,5,28,248,22,177,13,23,217,2,23,
216,1,87,94,23,216,1,247,22,154,14,249,247,22,141,5,248,22,72,195,23,
26,87,94,23,193,1,27,28,23,197,1,28,23,201,1,27,249,22,5,83,158,
40,20,100,94,89,162,8,44,37,51,9,225,26,24,21,33,40,23,214,1,23,
218,1,27,28,23,205,2,11,193,28,192,192,28,193,28,204,28,249,22,180,3,
@ -522,21 +522,21 @@
11,87,94,23,201,1,11,28,23,193,2,87,95,23,212,1,23,198,1,20,14,
159,80,159,59,40,38,250,80,159,8,26,41,38,249,22,27,11,80,159,8,28,
40,38,22,167,4,23,216,1,20,14,159,80,159,59,40,38,250,80,159,8,26,
41,38,249,22,27,11,80,159,8,28,40,38,22,143,5,28,248,22,174,13,23,
218,2,23,217,1,87,94,23,217,1,247,22,151,14,249,247,22,141,5,248,22,
41,38,249,22,27,11,80,159,8,28,40,38,22,143,5,28,248,22,177,13,23,
218,2,23,217,1,87,94,23,217,1,247,22,154,14,249,247,22,141,5,248,22,
72,195,23,27,87,94,23,193,1,27,28,23,199,2,87,94,23,214,1,23,213,
1,87,94,23,213,1,23,214,1,20,14,159,80,159,8,24,40,38,250,80,159,
8,27,41,38,249,22,27,11,80,159,8,29,40,38,22,167,4,28,23,29,28,
23,202,1,11,195,87,94,23,202,1,11,20,14,159,80,159,8,24,40,38,250,
80,159,8,27,41,38,249,22,27,11,80,159,8,29,40,38,22,143,5,28,248,
22,174,13,23,219,2,23,218,1,87,94,23,218,1,247,22,151,14,249,247,22,
22,177,13,23,219,2,23,218,1,87,94,23,218,1,247,22,154,14,249,247,22,
141,5,194,23,28,0,17,35,114,120,34,94,40,46,42,63,41,47,40,46,42,
41,36,34,32,43,89,162,8,44,37,59,2,26,222,33,44,27,249,22,161,14,
41,36,34,32,43,89,162,8,44,37,59,2,26,222,33,44,27,249,22,164,14,
2,42,23,196,2,28,23,193,2,87,94,23,194,1,249,22,71,248,22,96,23,
196,2,27,248,22,105,23,197,1,27,249,22,161,14,2,42,23,196,2,28,23,
196,2,27,248,22,105,23,197,1,27,249,22,164,14,2,42,23,196,2,28,23,
193,2,87,94,23,194,1,249,22,71,248,22,96,23,196,2,27,248,22,105,23,
197,1,27,249,22,161,14,2,42,23,196,2,28,23,193,2,87,94,23,194,1,
249,22,71,248,22,96,23,196,2,27,248,22,105,23,197,1,27,249,22,161,14,
197,1,27,249,22,164,14,2,42,23,196,2,28,23,193,2,87,94,23,194,1,
249,22,71,248,22,96,23,196,2,27,248,22,105,23,197,1,27,249,22,164,14,
2,42,23,196,2,28,23,193,2,87,94,23,194,1,249,22,71,248,22,96,23,
196,2,248,2,43,248,22,105,23,197,1,248,22,81,194,248,22,81,194,248,22,
81,194,248,22,81,194,32,45,89,162,44,37,55,2,26,222,33,46,28,248,22,
@ -546,12 +546,12 @@
22,79,248,22,73,23,195,2,249,22,7,9,248,22,72,195,91,159,38,11,90,
161,38,36,11,248,2,45,248,22,73,196,249,22,7,249,22,71,248,22,72,199,
196,195,249,22,7,249,22,71,248,22,72,199,196,195,249,22,7,249,22,71,248,
22,72,199,196,195,27,27,249,22,161,14,2,42,23,197,2,28,23,193,2,87,
22,72,199,196,195,27,27,249,22,164,14,2,42,23,197,2,28,23,193,2,87,
94,23,195,1,249,22,71,248,22,96,23,196,2,27,248,22,105,23,197,1,27,
249,22,161,14,2,42,23,196,2,28,23,193,2,87,94,23,194,1,249,22,71,
248,22,96,23,196,2,27,248,22,105,23,197,1,27,249,22,161,14,2,42,23,
249,22,164,14,2,42,23,196,2,28,23,193,2,87,94,23,194,1,249,22,71,
248,22,96,23,196,2,27,248,22,105,23,197,1,27,249,22,164,14,2,42,23,
196,2,28,23,193,2,87,94,23,194,1,249,22,71,248,22,96,23,196,2,27,
248,22,105,23,197,1,27,249,22,161,14,2,42,23,196,2,28,23,193,2,87,
248,22,105,23,197,1,27,249,22,164,14,2,42,23,196,2,28,23,193,2,87,
94,23,194,1,249,22,71,248,22,96,23,196,2,248,2,43,248,22,105,23,197,
1,248,22,81,194,248,22,81,194,248,22,81,194,248,22,81,195,28,23,195,1,
192,28,248,22,79,248,22,73,23,195,2,249,22,7,9,248,22,72,195,91,159,
@ -563,20 +563,20 @@
249,22,71,248,22,72,199,196,195,87,95,28,248,22,185,4,195,12,250,22,151,
9,2,18,6,20,20,114,101,115,111,108,118,101,100,45,109,111,100,117,108,101,
45,112,97,116,104,197,28,24,193,2,248,24,194,1,195,87,94,23,193,1,12,
27,27,250,22,150,2,80,159,42,43,38,248,22,186,14,247,22,154,12,11,28,
27,27,250,22,150,2,80,159,42,43,38,248,22,189,14,247,22,157,12,11,28,
23,193,2,192,87,94,23,193,1,27,247,22,130,2,87,94,250,22,148,2,80,
159,43,43,38,248,22,186,14,247,22,154,12,195,192,250,22,148,2,195,198,66,
159,43,43,38,248,22,189,14,247,22,157,12,195,192,250,22,148,2,195,198,66,
97,116,116,97,99,104,251,211,197,198,199,10,28,192,250,22,150,9,11,196,195,
248,22,148,9,194,32,51,89,162,44,37,52,2,26,222,33,52,28,248,22,79,
248,22,73,23,195,2,249,22,7,9,248,22,72,195,91,159,38,11,90,161,38,
36,11,27,248,22,73,196,28,248,22,79,248,22,73,23,195,2,249,22,7,9,
248,22,72,195,91,159,38,11,90,161,38,36,11,248,2,51,248,22,73,196,249,
22,7,249,22,71,248,22,72,199,196,195,249,22,7,249,22,71,248,22,72,199,
196,195,32,53,89,162,8,44,37,55,2,26,222,33,54,27,249,22,161,14,2,
196,195,32,53,89,162,8,44,37,55,2,26,222,33,54,27,249,22,164,14,2,
42,23,196,2,28,23,193,2,87,94,23,194,1,249,22,71,248,22,96,23,196,
2,27,248,22,105,23,197,1,27,249,22,161,14,2,42,23,196,2,28,23,193,
2,27,248,22,105,23,197,1,27,249,22,164,14,2,42,23,196,2,28,23,193,
2,87,94,23,194,1,249,22,71,248,22,96,23,196,2,27,248,22,105,23,197,
1,27,249,22,161,14,2,42,23,196,2,28,23,193,2,87,94,23,194,1,249,
1,27,249,22,164,14,2,42,23,196,2,28,23,193,2,87,94,23,194,1,249,
22,71,248,22,96,23,196,2,248,2,53,248,22,105,23,197,1,248,22,81,194,
248,22,81,194,248,22,81,194,32,55,89,162,44,37,52,2,26,222,33,56,28,
248,22,79,248,22,73,23,195,2,249,22,7,9,248,22,72,195,91,159,38,11,
@ -584,10 +584,10 @@
22,7,9,248,22,72,195,91,159,38,11,90,161,38,36,11,248,2,55,248,22,
73,196,249,22,7,249,22,71,248,22,72,199,196,195,249,22,7,249,22,71,248,
22,72,199,196,195,32,57,89,162,8,44,37,55,2,26,222,33,58,27,249,22,
161,14,2,42,23,196,2,28,23,193,2,87,94,23,194,1,249,22,71,248,22,
96,23,196,2,27,248,22,105,23,197,1,27,249,22,161,14,2,42,23,196,2,
164,14,2,42,23,196,2,28,23,193,2,87,94,23,194,1,249,22,71,248,22,
96,23,196,2,27,248,22,105,23,197,1,27,249,22,164,14,2,42,23,196,2,
28,23,193,2,87,94,23,194,1,249,22,71,248,22,96,23,196,2,27,248,22,
105,23,197,1,27,249,22,161,14,2,42,23,196,2,28,23,193,2,87,94,23,
105,23,197,1,27,249,22,164,14,2,42,23,196,2,28,23,193,2,87,94,23,
194,1,249,22,71,248,22,96,23,196,2,248,2,57,248,22,105,23,197,1,248,
22,81,194,248,22,81,194,248,22,81,194,28,249,22,181,6,194,6,1,1,46,
2,22,28,249,22,181,6,194,6,2,2,46,46,62,117,112,192,0,11,35,114,
@ -597,16 +597,16 @@
249,22,7,9,248,22,72,195,91,159,38,11,90,161,38,36,11,248,2,61,248,
22,73,196,249,22,7,249,22,71,248,22,72,199,196,195,249,22,7,249,22,71,
248,22,72,199,196,195,32,63,89,162,8,44,37,55,2,26,222,33,64,27,249,
22,161,14,2,42,23,196,2,28,23,193,2,87,94,23,194,1,249,22,71,248,
22,96,23,196,2,27,248,22,105,23,197,1,27,249,22,161,14,2,42,23,196,
22,164,14,2,42,23,196,2,28,23,193,2,87,94,23,194,1,249,22,71,248,
22,96,23,196,2,27,248,22,105,23,197,1,27,249,22,164,14,2,42,23,196,
2,28,23,193,2,87,94,23,194,1,249,22,71,248,22,96,23,196,2,27,248,
22,105,23,197,1,27,249,22,161,14,2,42,23,196,2,28,23,193,2,87,94,
22,105,23,197,1,27,249,22,164,14,2,42,23,196,2,28,23,193,2,87,94,
23,194,1,249,22,71,248,22,96,23,196,2,248,2,63,248,22,105,23,197,1,
248,22,81,194,248,22,81,194,248,22,81,194,32,65,89,162,8,44,37,55,2,
26,222,33,66,27,249,22,161,14,2,42,23,196,2,28,23,193,2,87,94,23,
26,222,33,66,27,249,22,164,14,2,42,23,196,2,28,23,193,2,87,94,23,
194,1,249,22,71,248,22,96,23,196,2,27,248,22,105,23,197,1,27,249,22,
161,14,2,42,23,196,2,28,23,193,2,87,94,23,194,1,249,22,71,248,22,
96,23,196,2,27,248,22,105,23,197,1,27,249,22,161,14,2,42,23,196,2,
164,14,2,42,23,196,2,28,23,193,2,87,94,23,194,1,249,22,71,248,22,
96,23,196,2,27,248,22,105,23,197,1,27,249,22,164,14,2,42,23,196,2,
28,23,193,2,87,94,23,194,1,249,22,71,248,22,96,23,196,2,248,2,65,
248,22,105,23,197,1,248,22,81,194,248,22,81,194,248,22,81,194,27,248,2,
65,23,195,1,192,28,249,22,183,8,248,22,73,23,200,2,23,197,1,28,249,
@ -614,9 +614,9 @@
99,121,99,108,101,32,105,110,32,108,111,97,100,105,110,103,32,97,116,32,126,
101,58,32,126,101,23,200,1,249,22,2,22,73,248,22,86,249,22,71,23,206,
1,23,202,1,12,12,247,192,20,14,159,80,159,40,45,38,249,22,71,248,22,
186,14,247,22,154,12,23,197,1,20,14,159,80,159,40,40,38,250,80,159,43,
189,14,247,22,157,12,23,197,1,20,14,159,80,159,40,40,38,250,80,159,43,
41,38,249,22,27,11,80,159,45,40,38,22,166,4,23,196,1,249,247,22,142,
5,23,198,1,248,22,59,248,22,178,13,23,198,1,87,94,28,28,248,22,174,
5,23,198,1,248,22,59,248,22,181,13,23,198,1,87,94,28,28,248,22,177,
13,23,196,2,10,248,22,129,5,23,196,2,12,28,23,197,2,250,22,150,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,151,9,2,18,6,19,19,109,111,100,117,108,101,45,112,97,116,104,
@ -630,77 +630,77 @@
12,252,212,199,200,201,202,80,158,42,50,87,94,23,193,1,27,89,162,8,44,
37,46,79,115,104,111,119,45,99,111,108,108,101,99,116,105,111,110,45,101,114,
114,223,5,33,50,27,28,248,22,56,23,198,2,27,250,22,150,2,80,159,43,
44,38,249,22,71,23,203,2,247,22,152,14,11,28,23,193,2,192,87,94,23,
44,38,249,22,71,23,203,2,247,22,155,14,11,28,23,193,2,192,87,94,23,
193,1,91,159,38,11,90,161,38,36,11,27,248,22,62,23,202,2,248,2,51,
248,2,53,23,195,1,27,251,80,159,47,54,38,2,18,23,202,1,28,248,22,
79,23,199,2,23,199,2,248,22,72,23,199,2,28,248,22,79,23,199,2,9,
248,22,73,23,199,2,249,22,128,14,23,195,1,28,248,22,79,23,197,1,87,
248,22,73,23,199,2,249,22,131,14,23,195,1,28,248,22,79,23,197,1,87,
94,23,197,1,6,8,8,109,97,105,110,46,114,107,116,249,22,134,7,23,199,
1,6,4,4,46,114,107,116,28,248,22,175,6,23,198,2,87,94,23,194,1,
27,27,28,23,200,2,28,249,22,181,8,23,202,2,80,158,43,47,80,158,41,
48,27,248,22,187,4,23,202,2,28,248,22,174,13,23,194,2,91,159,39,11,
90,161,39,36,11,248,22,131,14,23,197,1,87,95,83,160,38,11,80,158,45,
48,27,248,22,187,4,23,202,2,28,248,22,177,13,23,194,2,91,159,39,11,
90,161,39,36,11,248,22,134,14,23,197,1,87,95,83,160,38,11,80,158,45,
47,23,204,2,83,160,38,11,80,158,45,48,192,192,11,11,28,23,193,2,192,
87,94,23,193,1,27,247,22,143,5,28,23,193,2,192,87,94,23,193,1,247,
22,151,14,27,250,22,150,2,80,159,44,44,38,249,22,71,23,204,2,23,199,
22,154,14,27,250,22,150,2,80,159,44,44,38,249,22,71,23,204,2,23,199,
2,11,28,23,193,2,192,87,94,23,193,1,91,159,38,11,90,161,38,36,11,
248,2,55,248,2,57,23,203,2,250,22,1,22,128,14,23,199,1,249,22,85,
248,2,55,248,2,57,23,203,2,250,22,1,22,131,14,23,199,1,249,22,85,
249,22,2,32,0,89,162,8,44,37,44,9,222,33,59,23,200,1,248,22,81,
27,248,22,178,6,23,202,2,28,249,22,180,3,194,39,28,249,22,181,6,2,
28,249,22,133,7,204,249,22,168,3,198,39,249,22,134,7,250,22,133,7,205,
36,249,22,168,3,199,39,2,29,200,200,28,248,22,174,13,23,198,2,87,94,
23,194,1,28,248,22,133,14,23,198,2,91,159,39,11,90,161,39,36,11,248,
22,131,14,23,201,2,87,95,23,195,1,23,193,1,28,249,22,161,14,2,60,
248,22,179,13,23,197,1,249,80,159,44,53,38,23,202,2,2,30,23,200,2,
36,249,22,168,3,199,39,2,29,200,200,28,248,22,177,13,23,198,2,87,94,
23,194,1,28,248,22,136,14,23,198,2,91,159,39,11,90,161,39,36,11,248,
22,134,14,23,201,2,87,95,23,195,1,23,193,1,28,249,22,164,14,2,60,
248,22,182,13,23,197,1,249,80,159,44,53,38,23,202,2,2,30,23,200,2,
248,22,81,6,26,26,32,40,97,32,112,97,116,104,32,109,117,115,116,32,98,
101,32,97,98,115,111,108,117,116,101,41,28,249,22,181,8,248,22,72,23,200,
2,2,27,27,250,22,150,2,80,159,43,44,38,249,22,71,23,203,2,247,22,
152,14,11,28,23,193,2,192,87,94,23,193,1,91,159,39,11,90,161,38,36,
155,14,11,28,23,193,2,192,87,94,23,193,1,91,159,39,11,90,161,38,36,
11,27,248,22,96,23,203,2,248,2,61,248,2,63,23,195,1,90,161,37,38,
11,28,248,22,79,248,22,98,23,203,2,28,248,22,79,23,194,2,249,22,165,
11,28,248,22,79,248,22,98,23,203,2,28,248,22,79,23,194,2,249,22,168,
14,0,8,35,114,120,34,91,46,93,34,23,196,2,11,10,27,27,28,23,197,
2,249,22,85,28,248,22,79,248,22,98,23,207,2,21,93,6,5,5,109,122,
108,105,98,249,22,1,22,85,249,22,2,32,0,89,162,8,44,37,44,9,222,
33,67,248,22,98,23,210,2,23,197,2,28,248,22,79,23,196,2,248,22,81,
23,197,2,23,195,2,251,80,159,49,54,38,2,18,23,204,1,248,22,72,23,
198,2,248,22,73,23,198,1,249,22,128,14,23,195,1,28,23,198,1,87,94,
198,2,248,22,73,23,198,1,249,22,131,14,23,195,1,28,23,198,1,87,94,
23,196,1,27,248,22,178,6,23,199,2,28,249,22,180,3,194,39,28,249,22,
181,6,2,28,249,22,133,7,201,249,22,168,3,198,39,249,22,134,7,250,22,
133,7,202,36,249,22,168,3,199,39,2,29,197,197,28,248,22,79,23,197,1,
87,94,23,197,1,6,8,8,109,97,105,110,46,114,107,116,28,249,22,165,14,
87,94,23,197,1,6,8,8,109,97,105,110,46,114,107,116,28,249,22,168,14,
0,8,35,114,120,34,91,46,93,34,23,199,2,27,248,22,178,6,23,199,2,
28,249,22,180,3,194,39,28,249,22,181,6,2,28,249,22,133,7,201,249,22,
168,3,198,39,249,22,134,7,250,22,133,7,202,36,249,22,168,3,199,39,2,
29,197,197,249,22,134,7,23,199,1,6,4,4,46,114,107,116,28,249,22,181,
8,248,22,72,23,200,2,64,102,105,108,101,27,249,22,135,14,248,22,139,14,
8,248,22,72,23,200,2,64,102,105,108,101,27,249,22,138,14,248,22,142,14,
248,22,96,23,202,2,27,28,23,202,2,28,249,22,181,8,23,204,2,80,158,
45,47,80,158,43,48,27,248,22,187,4,23,204,2,28,248,22,174,13,23,194,
2,91,159,39,11,90,161,39,36,11,248,22,131,14,23,197,1,87,95,83,160,
45,47,80,158,43,48,27,248,22,187,4,23,204,2,28,248,22,177,13,23,194,
2,91,159,39,11,90,161,39,36,11,248,22,134,14,23,197,1,87,95,83,160,
38,11,80,158,47,47,23,206,2,83,160,38,11,80,158,47,48,192,192,11,11,
28,23,193,2,192,87,94,23,193,1,27,247,22,143,5,28,23,193,2,192,87,
94,23,193,1,247,22,151,14,91,159,39,11,90,161,39,36,11,248,22,131,14,
23,197,2,87,95,23,195,1,23,193,1,28,249,22,161,14,2,60,248,22,179,
94,23,193,1,247,22,154,14,91,159,39,11,90,161,39,36,11,248,22,134,14,
23,197,2,87,95,23,195,1,23,193,1,28,249,22,164,14,2,60,248,22,182,
13,23,197,1,249,80,159,45,53,38,23,198,1,2,30,195,12,87,94,28,28,
248,22,174,13,23,194,2,10,248,22,133,8,23,194,2,87,94,23,199,1,12,
248,22,177,13,23,194,2,10,248,22,133,8,23,194,2,87,94,23,199,1,12,
28,23,199,2,250,22,150,9,67,114,101,113,117,105,114,101,249,22,159,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,72,23,199,2,6,0,0,23,202,1,87,94,23,199,1,250,22,
151,9,2,18,249,22,159,7,6,13,13,109,111,100,117,108,101,32,112,97,116,
104,126,97,28,23,198,2,248,22,72,23,199,2,6,0,0,23,200,2,27,28,
248,22,133,8,23,195,2,249,22,138,8,23,196,2,36,249,22,137,14,248,22,
138,14,23,197,2,11,27,28,248,22,133,8,23,196,2,249,22,138,8,23,197,
248,22,133,8,23,195,2,249,22,138,8,23,196,2,36,249,22,140,14,248,22,
141,14,23,197,2,11,27,28,248,22,133,8,23,196,2,249,22,138,8,23,197,
2,37,248,80,159,42,55,38,23,195,2,91,159,39,11,90,161,39,36,11,28,
248,22,133,8,23,199,2,250,22,7,2,31,249,22,138,8,23,203,2,38,2,
31,248,22,131,14,23,198,2,87,95,23,195,1,23,193,1,27,28,248,22,133,
31,248,22,134,14,23,198,2,87,95,23,195,1,23,193,1,27,28,248,22,133,
8,23,200,2,249,22,138,8,23,201,2,39,249,80,159,47,53,38,23,197,2,
5,0,27,28,248,22,133,8,23,201,2,249,22,138,8,23,202,2,40,248,22,
186,4,23,200,2,27,27,250,22,150,2,80,159,51,43,38,248,22,186,14,247,
22,154,12,11,28,23,193,2,192,87,94,23,193,1,27,247,22,130,2,87,94,
250,22,148,2,80,159,52,43,38,248,22,186,14,247,22,154,12,195,192,87,95,
186,4,23,200,2,27,27,250,22,150,2,80,159,51,43,38,248,22,189,14,247,
22,157,12,11,28,23,193,2,192,87,94,23,193,1,27,247,22,130,2,87,94,
250,22,148,2,80,159,52,43,38,248,22,189,14,247,22,157,12,195,192,87,95,
28,23,208,1,27,250,22,150,2,23,197,2,197,11,28,23,193,1,12,87,95,
27,27,28,248,22,17,80,159,51,46,38,80,159,50,46,38,247,22,19,250,22,
25,248,22,23,23,197,2,80,159,53,45,38,23,196,1,27,248,22,186,14,247,
22,154,12,249,22,3,83,158,40,20,100,94,89,162,8,44,37,55,9,226,12,
25,248,22,23,23,197,2,80,159,53,45,38,23,196,1,27,248,22,189,14,247,
22,157,12,249,22,3,83,158,40,20,100,94,89,162,8,44,37,55,9,226,12,
11,2,3,33,68,23,195,1,23,196,1,248,28,248,22,17,80,159,50,46,38,
32,0,89,162,44,37,42,9,222,33,69,80,159,49,59,37,89,162,44,36,51,
9,227,13,9,8,4,3,33,70,250,22,148,2,23,197,1,197,10,12,28,28,
@ -709,14 +709,14 @@
2,27,11,250,22,148,2,80,159,50,44,38,28,248,22,175,6,23,209,2,249,
22,71,23,210,1,27,28,23,212,2,28,249,22,181,8,23,214,2,80,158,55,
47,87,94,23,212,1,80,158,53,48,27,248,22,187,4,23,214,2,28,248,22,
174,13,23,194,2,91,159,39,11,90,161,39,36,11,248,22,131,14,23,197,1,
177,13,23,194,2,91,159,39,11,90,161,39,36,11,248,22,134,14,23,197,1,
87,95,83,160,38,11,80,158,57,47,23,23,83,160,38,11,80,158,57,48,192,
192,11,11,28,23,193,2,192,87,94,23,193,1,27,247,22,143,5,28,23,193,
2,192,87,94,23,193,1,247,22,151,14,249,22,71,23,210,1,247,22,152,14,
2,192,87,94,23,193,1,247,22,154,14,249,22,71,23,210,1,247,22,155,14,
252,22,135,8,23,208,1,23,207,1,23,205,1,23,203,1,201,12,193,87,96,
83,160,38,11,80,158,36,50,248,80,159,37,58,38,249,22,27,11,80,159,39,
52,38,248,22,165,4,80,159,37,51,38,248,22,142,5,80,159,37,37,37,248,
22,145,13,80,159,37,42,37,83,160,38,11,80,158,36,50,248,80,159,37,58,
22,148,13,80,159,37,42,37,83,160,38,11,80,158,36,50,248,80,159,37,58,
38,249,22,27,11,80,159,39,52,38,159,36,20,105,159,36,16,1,11,16,0,
83,158,42,20,103,145,2,1,2,1,29,11,11,11,11,11,10,38,80,158,36,
36,20,105,159,37,16,23,2,2,2,3,30,2,5,72,112,97,116,104,45,115,

View File

@ -3404,6 +3404,7 @@ static int place_async_channel_val_SIZE(void *p, struct NewGC *gc) {
static int place_async_channel_val_MARK(void *p, struct NewGC *gc) {
Scheme_Place_Async_Channel *pac = (Scheme_Place_Async_Channel *)p;
int i;
gcMARK2(pac->msgs, gc);
for (i = pac->size; i--; )
gcMARK2(pac->msgs[i], gc);
@ -3414,6 +3415,7 @@ static int place_async_channel_val_MARK(void *p, struct NewGC *gc) {
static int place_async_channel_val_FIXUP(void *p, struct NewGC *gc) {
Scheme_Place_Async_Channel *pac = (Scheme_Place_Async_Channel *)p;
int i;
gcFIXUP2(pac->msgs, gc);
for (i = pac->size; i--; )
gcFIXUP2(pac->msgs[i], gc);
@ -3834,6 +3836,7 @@ static int mark_print_params_MARK(void *p, struct NewGC *gc) {
gcMARK2(pp->print_port, gc);
gcMARK2(pp->print_buffer, gc);
gcMARK2(pp->depth_delta, gc);
gcMARK2(pp->uq_ht, gc);
return
gcBYTES_TO_WORDS(sizeof(PrintParams));
}
@ -3844,6 +3847,7 @@ static int mark_print_params_FIXUP(void *p, struct NewGC *gc) {
gcFIXUP2(pp->print_port, gc);
gcFIXUP2(pp->print_buffer, gc);
gcFIXUP2(pp->depth_delta, gc);
gcFIXUP2(pp->uq_ht, gc);
return
gcBYTES_TO_WORDS(sizeof(PrintParams));
}

View File

@ -1564,6 +1564,7 @@ mark_print_params {
gcMARK2(pp->print_port, gc);
gcMARK2(pp->print_buffer, gc);
gcMARK2(pp->depth_delta, gc);
gcMARK2(pp->uq_ht, gc);
size:
gcBYTES_TO_WORDS(sizeof(PrintParams));
}

View File

@ -3697,8 +3697,10 @@ static Scheme_Object *sch_default_global_port_print_handler(int argc, Scheme_Obj
{
if (!SCHEME_OUTPUT_PORTP(argv[1]))
scheme_wrong_type("default-global-port-print-handler", "output-port", 1, argc, argv);
if ((argc > 2) && !scheme_nonneg_exact_p(argv[2]))
scheme_wrong_type("default-global-port-print-handler", "non-negative exact integer",
if ((argc > 2)
&& !SAME_OBJ(argv[2], scheme_make_integer(0))
&& !SAME_OBJ(argv[2], scheme_make_integer(1)))
scheme_wrong_type("default-global-port-print-handler", "0 or 1",
2, argc, argv);
if (argc == 2) {
@ -3772,8 +3774,9 @@ display_write(char *name,
if (argc > 2) {
h = argv[2];
if (!scheme_nonneg_exact_p(h))
scheme_wrong_type(name, "non-negative exact integer", 2, argc, argv);
if (!SAME_OBJ(h, scheme_make_integer(0))
&& !SAME_OBJ(h, scheme_make_integer(1)))
scheme_wrong_type(name, "0 or 1", 2, argc, argv);
} else
h = scheme_make_integer(0);

View File

@ -95,6 +95,7 @@ typedef struct Scheme_Print_Params {
Scheme_Object *print_port;
mz_jmp_buf *print_escape;
Scheme_Object *depth_delta; /* for large qq depth */
Scheme_Hash_Table *uq_ht;
} PrintParams;
#ifdef MZ_PRECISE_GC
@ -475,8 +476,12 @@ static Scheme_Object *check_cycle_k(void)
#endif
static int check_cycles(Scheme_Object *obj, int for_write, Scheme_Hash_Table *ht, PrintParams *pp)
/* Results: 0x2 = cycle bit
0x1 = unquote bit */
{
Scheme_Type t;
Scheme_Object *val;
int res, res2;
#ifdef DO_STACK_CHECK
{
@ -507,17 +512,27 @@ static int check_cycles(Scheme_Object *obj, int for_write, Scheme_Hash_Table *ht
|| (pp->print_hash_table
&& (SAME_TYPE(t, scheme_hash_table_type)
|| SAME_TYPE(t, scheme_hash_tree_type)))) {
if (scheme_hash_get(ht, obj))
return 1;
scheme_hash_set(ht, obj, (Scheme_Object *)0x1);
val = scheme_hash_get(ht, obj);
if (val)
return SCHEME_INT_VAL(val);
scheme_hash_set(ht, obj, scheme_make_integer(0x2));
} else
return 0;
if (SCHEME_PAIRP(obj) || SCHEME_MUTABLE_PAIRP(obj)) {
if (check_cycles(SCHEME_CAR(obj), for_write, ht, pp))
return 1;
if (check_cycles(SCHEME_CDR(obj), for_write, ht, pp))
return 1;
if (SCHEME_PAIRP(obj)) {
res = check_cycles(SCHEME_CAR(obj), for_write, ht, pp);
if ((for_write < 3) && res)
return res;
res2 = check_cycles(SCHEME_CDR(obj), for_write, ht, pp);
res |= res2;
} else if (SCHEME_MUTABLE_PAIRP(obj)) {
res = check_cycles(SCHEME_CAR(obj), for_write, ht, pp);
if ((for_write < 3) && res)
return res;
res2 = check_cycles(SCHEME_CDR(obj), for_write, ht, pp);
res |= res2;
if (for_write >= 3)
res |= 0x1; /* always escape for qq printing */
} else if (SCHEME_CHAPERONE_BOXP(obj)) {
/* got here => printable */
Scheme_Object *v;
@ -525,8 +540,7 @@ static int check_cycles(Scheme_Object *obj, int for_write, Scheme_Hash_Table *ht
v = SCHEME_BOX_VAL(obj);
else
v = scheme_unbox(obj);
if (check_cycles(v, for_write, ht, pp))
return 1;
res = check_cycles(v, for_write, ht, pp);
} else if (SCHEME_CHAPERONE_VECTORP(obj)) {
int i, len;
Scheme_Object *v;
@ -535,29 +549,47 @@ static int check_cycles(Scheme_Object *obj, int for_write, Scheme_Hash_Table *ht
len = SCHEME_VEC_SIZE(obj);
else
len = SCHEME_VEC_SIZE(SCHEME_CHAPERONE_VAL(obj));
res = 0;
for (i = 0; i < len; i++) {
if (SCHEME_VECTORP(obj))
v = SCHEME_VEC_ELS(obj)[i];
else
v = scheme_chaperone_vector_ref(obj, i);
if (check_cycles(v, for_write, ht, pp)) {
return 1;
}
res2 = check_cycles(v, for_write, ht, pp);
res |= res2;
if ((for_write < 3) && res)
return res;
}
} else if (SAME_TYPE(t, scheme_structure_type)
|| SAME_TYPE(t, scheme_proc_struct_type)) {
if (scheme_is_writable_struct(obj)) {
if (check_cycles(writable_struct_subs(obj, for_write, pp), for_write, ht, pp))
return 1;
if (scheme_is_print_as_constructor_struct(obj)) {
/* Struct wants to be unquoted. */
if (pp->print_unreadable) {
res = check_cycles(writable_struct_subs(obj, for_write, pp), for_write, ht, pp);
if (for_write >= 3)
res |= 0x1;
} else
res = 0;
} else if (scheme_is_writable_struct(obj)) {
/* A "writeable" struct can be quoted or not. */
if (pp->print_unreadable)
res = check_cycles(writable_struct_subs(obj, for_write, pp), for_write, ht, pp);
else
res = 0;
} else {
/* got here => printable */
int i = SCHEME_STRUCT_NUM_SLOTS(obj);
if ((for_write >= 3) && !SCHEME_PREFABP(obj))
res = 0x1;
else
res = 0;
while (i--) {
if (scheme_inspector_sees_part(obj, pp->inspector, i)) {
if (check_cycles(((Scheme_Structure *)obj)->slots[i], for_write, ht, pp)) {
return 1;
}
res2 = check_cycles(((Scheme_Structure *)obj)->slots[i], for_write, ht, pp);
res |= res2;
if ((for_write < 3) && res)
return res;
}
}
}
@ -574,6 +606,7 @@ static int check_cycles(Scheme_Object *obj, int for_write, Scheme_Hash_Table *ht
keys = t->keys;
vals = t->vals;
res = 0;
for (i = 0; i < t->size; i++) {
if (vals[i]) {
key = keys[i];
@ -582,10 +615,14 @@ static int check_cycles(Scheme_Object *obj, int for_write, Scheme_Hash_Table *ht
else
val = vals[i];
if (val) {
if (check_cycles(key, for_write, ht, pp))
return 1;
if (check_cycles(val, for_write, ht, pp))
return 1;
res2 = check_cycles(key, for_write, ht, pp);
res |= res2;
if ((for_write < 3) && res)
return res;
res2 = check_cycles(val, for_write, ht, pp);
res |= res2;
if ((for_write < 3) && res)
return res;
}
}
}
@ -600,31 +637,42 @@ static int check_cycles(Scheme_Object *obj, int for_write, Scheme_Hash_Table *ht
else
t = (Scheme_Hash_Tree *)obj;
res = 0;
i = scheme_hash_tree_next(t, -1);
while (i != -1) {
scheme_hash_tree_index(t, i, &key, &val);
if (!SAME_OBJ((Scheme_Object *)t, obj))
val = scheme_chaperone_hash_traversal_get(obj, key);
if (check_cycles(key, for_write, ht, pp))
return 1;
if (check_cycles(val, for_write, ht, pp))
return 1;
res2 = check_cycles(key, for_write, ht, pp);
res |= res2;
if ((for_write < 3) && res)
return res;
res2 = check_cycles(val, for_write, ht, pp);
res |= res2;
if ((for_write < 3) && res)
return res;
i = scheme_hash_tree_next(t, i);
}
}
} else
res = 0;
scheme_hash_set(ht, obj, NULL);
scheme_hash_set(ht, obj, scheme_make_integer(res));
return 0;
return res;
}
/* The fast cycle-checker plays a dangerous game: it changes type
tags. No GCs can occur here, and no thread switches. If the fast
version takes to long, we back out to the general case. (We don't
even check for stack overflow, so keep the max limit low.) */
even check for stack overflow, so keep the max limit low.)
A 0 result means no cycles, a 1 result means cycles, and a -1 result
means "unknown" (i.e., try slow path). When write is >= 3 (implying
qq-based printing), then a 0 result also implies that no expression
escapes are needed. */
#if !defined(MZ_USE_PLACES)
static int check_cycles_fast(Scheme_Object *obj, PrintParams *pp, int *fast_checker_counter)
static int check_cycles_fast(Scheme_Object *obj, PrintParams *pp, int *fast_checker_counter, int write)
XFORM_SKIP_PROC
{
Scheme_Type t;
@ -637,15 +685,23 @@ static int check_cycles_fast(Scheme_Object *obj, PrintParams *pp, int *fast_chec
if ((*fast_checker_counter)-- < 0)
return -1;
if (SCHEME_PAIRP(obj) || SCHEME_MUTABLE_PAIRP(obj)) {
if (SCHEME_PAIRP(obj) || ((write < 3) && SCHEME_MUTABLE_PAIRP(obj))) {
obj->type = -t;
cycle = check_cycles_fast(SCHEME_CAR(obj), pp, fast_checker_counter);
cycle = check_cycles_fast(SCHEME_CAR(obj), pp, fast_checker_counter, write);
if (!cycle)
cycle = check_cycles_fast(SCHEME_CDR(obj), pp, fast_checker_counter);
cycle = check_cycles_fast(SCHEME_CDR(obj), pp, fast_checker_counter, write);
obj->type = t;
} else if (SCHEME_MUTABLE_PAIRP(obj)) {
if (write >= 3)
return -1;
obj->type = -t;
cycle = check_cycles_fast(SCHEME_CAR(obj), pp, fast_checker_counter, write);
if (!cycle)
cycle = check_cycles_fast(SCHEME_CDR(obj), pp, fast_checker_counter, write);
obj->type = t;
} else if (pp->print_box && SCHEME_BOXP(obj)) {
obj->type = -t;
cycle = check_cycles_fast(SCHEME_BOX_VAL(obj), pp, fast_checker_counter);
cycle = check_cycles_fast(SCHEME_BOX_VAL(obj), pp, fast_checker_counter, write);
obj->type = t;
} else if (SCHEME_VECTORP(obj)) {
int i, len;
@ -653,7 +709,7 @@ static int check_cycles_fast(Scheme_Object *obj, PrintParams *pp, int *fast_chec
obj->type = -t;
len = SCHEME_VEC_SIZE(obj);
for (i = 0; i < len; i++) {
cycle = check_cycles_fast(SCHEME_VEC_ELS(obj)[i], pp, fast_checker_counter);
cycle = check_cycles_fast(SCHEME_VEC_ELS(obj)[i], pp, fast_checker_counter, write);
if (cycle)
break;
}
@ -668,11 +724,14 @@ static int check_cycles_fast(Scheme_Object *obj, PrintParams *pp, int *fast_chec
cycle = -1;
} else if (pp->print_struct && PRINTABLE_STRUCT(obj, pp)) {
int i = SCHEME_STRUCT_NUM_SLOTS(obj);
if ((write >= 3) && !SCHEME_PREFABP(obj))
return -1;
obj->type = -t;
while (i--) {
if (scheme_inspector_sees_part(obj, pp->inspector, i)) {
cycle = check_cycles_fast(((Scheme_Structure *)obj)->slots[i], pp, fast_checker_counter);
cycle = check_cycles_fast(((Scheme_Structure *)obj)->slots[i], pp, fast_checker_counter, write);
if (cycle)
break;
}
@ -890,6 +949,7 @@ print_to_string(Scheme_Object *obj,
Scheme_Object *qq_depth)
{
Scheme_Hash_Table * volatile ht;
Scheme_Hash_Table *uq_ht;
Scheme_Object *v;
char *ca;
int cycles;
@ -994,19 +1054,22 @@ print_to_string(Scheme_Object *obj,
params.inspector = v;
}
if (params.print_graph)
uq_ht = NULL;
if (params.print_graph && (write < 3))
cycles = 1;
else {
#ifdef MZ_USE_PLACES
cycles = -1;
#else
int fast_checker_counter = 50;
cycles = check_cycles_fast(obj, (PrintParams *)&params, &fast_checker_counter);
cycles = check_cycles_fast(obj, (PrintParams *)&params, &fast_checker_counter, write);
#endif
if (cycles == -1) {
ht = scheme_make_hash_table(SCHEME_hash_ptr);
cycles = check_cycles(obj, write, ht, (PrintParams *)&params);
}
if ((cycles == -1) || (cycles && (write >= 3))) {
uq_ht = scheme_make_hash_table(SCHEME_hash_ptr);
cycles = check_cycles(obj, write, uq_ht, (PrintParams *)&params);
} else if (!cycles && params.print_graph)
cycles = 1;
}
if (cycles)
@ -1019,6 +1082,8 @@ print_to_string(Scheme_Object *obj,
else
params.print_escape = NULL;
params.uq_ht = uq_ht;
if ((maxl <= PRINT_MAXLEN_MIN)
|| !scheme_setjmp(escape))
print(obj, write, 0, ht, NULL, (PrintParams *)&params);
@ -1654,22 +1719,35 @@ static void always_scheme(PrintParams *pp, int reset)
}
}
static int to_quoted(PrintParams *pp, int notdisplay, const char *quote)
static int to_quoted(Scheme_Object *obj, PrintParams *pp, int notdisplay)
{
if (notdisplay == 3) {
print_utf8_string(pp, quote, 0, 1);
return notdisplay + 1;
if (!obj || !pp->uq_ht)
obj = scheme_make_integer(0);
else {
obj = scheme_hash_get(pp->uq_ht, obj);
if (!obj) obj = scheme_make_integer(0);
}
if (!(SCHEME_INT_VAL(obj) & 0x1)) {
print_utf8_string(pp, "'", 0, 1);
return notdisplay + 1;
} else
return notdisplay;
} else
return notdisplay;
}
static int to_unquoted(PrintParams *pp, int notdisplay)
static int is_graph_point(Scheme_Hash_Table *ht, Scheme_Object *obj)
{
while (notdisplay > 3) {
print_utf8_string(pp, ",", 0, 1);
--notdisplay;
}
return notdisplay;
if (ht) {
long v;
v = (long)scheme_hash_get(ht, obj);
if ((v == 0) || (v == 1))
return 0;
return 1;
} else
return 0;
}
static int
@ -1846,9 +1924,9 @@ print(Scheme_Object *obj, int notdisplay, int compact, Scheme_Hash_Table *ht,
|| SAME_OBJ(obj, unquote_splicing_symbol))
print_utf8_string(pp, ",'", 0, 2);
else
notdisplay = to_quoted(pp, notdisplay, "'");
notdisplay = to_quoted(NULL, pp, notdisplay);
} else
notdisplay = to_quoted(pp, notdisplay, "'");
notdisplay = to_quoted(NULL, pp, notdisplay);
}
if (is_kw)
@ -1976,7 +2054,7 @@ print(Scheme_Object *obj, int notdisplay, int compact, Scheme_Hash_Table *ht,
if (compact) {
print_compact(pp, CPT_NULL);
} else {
notdisplay = to_quoted(pp, notdisplay, "'");
notdisplay = to_quoted(NULL, pp, notdisplay);
if (pp->honu_mode)
print_utf8_string(pp, "null", 0, 4);
else
@ -1986,13 +2064,12 @@ print(Scheme_Object *obj, int notdisplay, int compact, Scheme_Hash_Table *ht,
}
else if (SCHEME_PAIRP(obj))
{
notdisplay = to_quoted(pp, notdisplay, "`");
notdisplay = to_quoted(obj, pp, notdisplay);
print_pair(obj, notdisplay, compact, ht, mt, pp, scheme_pair_type, !pp->print_pair_curly, 0);
closed = 1;
}
else if (SCHEME_MUTABLE_PAIRP(obj))
{
notdisplay = to_quoted(pp, notdisplay, "`");
if (compact || !pp->print_unreadable)
cannot_print(pp, notdisplay, obj, ht, compact);
print_pair(obj, notdisplay, compact, ht, mt, pp, scheme_mutable_pair_type, !pp->print_mpair_curly, 0);
@ -2000,7 +2077,7 @@ print(Scheme_Object *obj, int notdisplay, int compact, Scheme_Hash_Table *ht,
}
else if (SCHEME_CHAPERONE_VECTORP(obj))
{
notdisplay = to_quoted(pp, notdisplay, "`");
notdisplay = to_quoted(obj, pp, notdisplay);
print_vector(obj, notdisplay, compact, ht, mt, pp, 0);
closed = 1;
}
@ -2014,14 +2091,19 @@ print(Scheme_Object *obj, int notdisplay, int compact, Scheme_Hash_Table *ht,
print_compact(pp, CPT_BOX);
else {
always_scheme(pp, 1);
notdisplay = to_quoted(pp, notdisplay, "`");
print_utf8_string(pp, "#&", 0, 2);
notdisplay = to_quoted(obj, pp, notdisplay);
if (notdisplay == 3)
print_utf8_string(pp, "(box ", 0, 5);
else
print_utf8_string(pp, "#&", 0, 2);
}
if (SCHEME_BOXP(obj))
content = SCHEME_BOX_VAL(obj);
else
content = scheme_unbox(obj);
closed = print(content, notdisplay, compact, ht, mt, pp);
if (notdisplay == 3)
print_utf8_string(pp, ")", 0, 1);
}
}
else if ((compact || pp->print_hash_table)
@ -2048,8 +2130,11 @@ print(Scheme_Object *obj, int notdisplay, int compact, Scheme_Hash_Table *ht,
print_compact_number(pp, 0);
} else {
always_scheme(pp, 1);
notdisplay = to_quoted(pp, notdisplay, "`");
print_utf8_string(pp, "#hash", 0, 5);
notdisplay = to_quoted(obj, pp, notdisplay);
if (notdisplay == 3)
print_utf8_string(pp, "(hash ", 0, 6);
else
print_utf8_string(pp, "#hash", 0, 5);
if (SCHEME_HASHTP(obj)) {
if (!scheme_is_hash_table_equal(obj)) {
if (scheme_is_hash_table_eqv(obj))
@ -2065,7 +2150,8 @@ print(Scheme_Object *obj, int notdisplay, int compact, Scheme_Hash_Table *ht,
print_utf8_string(pp, "eq", 0, 2);
}
}
print_utf8_string(pp, "(", 0, 1);
if (notdisplay != 3)
print_utf8_string(pp, "(", 0, 1);
}
if (SCHEME_HASHTP(obj)) {
@ -2108,21 +2194,28 @@ print(Scheme_Object *obj, int notdisplay, int compact, Scheme_Hash_Table *ht,
if (!compact) {
if (did_one)
print_utf8_string(pp, " ", 0, 1);
print_utf8_string(pp, "(", 0, 1);
if (notdisplay != 3)
print_utf8_string(pp, "(", 0, 1);
}
print(key, notdisplay, compact, ht, mt, pp);
if (!compact)
print_utf8_string(pp, " . ", 0, 3);
if (!compact) {
if (notdisplay == 3)
print_utf8_string(pp, " ", 0, 1);
else
print_utf8_string(pp, " . ", 0, 3);
}
print(val, notdisplay, compact, ht, mt, pp);
if (!compact)
if (!compact && (notdisplay != 3))
print_utf8_string(pp, ")", 0, 1);
did_one++;
}
}
}
if (!compact)
if (!compact && (notdisplay != 3))
print_utf8_string(pp, ")", 0, 1);
if (notdisplay == 3)
print_utf8_string(pp, ")", 0, 1);
closed = 1;
}
@ -2167,6 +2260,8 @@ print(Scheme_Object *obj, int notdisplay, int compact, Scheme_Hash_Table *ht,
} else if (compact || !pp->print_unreadable) {
cannot_print(pp, notdisplay, obj, ht, compact);
} else if (scheme_is_writable_struct(obj)) {
if ((notdisplay == 3) && !scheme_is_print_as_constructor_struct(obj))
notdisplay = to_quoted(obj, pp, notdisplay);
custom_write_struct(obj, ht, mt, pp, notdisplay);
} else {
int pb;
@ -2177,16 +2272,15 @@ print(Scheme_Object *obj, int notdisplay, int compact, Scheme_Hash_Table *ht,
Scheme_Object *vec, *prefab;
prefab = ((Scheme_Structure *)obj)->stype->prefab_key;
vec = scheme_struct_to_vector(obj, (notdisplay >= 3) ? qq_ellipses : NULL, pp->inspector);
if ((notdisplay >= 3) && !prefab) {
notdisplay = to_unquoted(pp, notdisplay);
if (prefab)
notdisplay = to_quoted(obj, pp, notdisplay);
if (notdisplay == 3) {
vec = scheme_vector_to_list(vec);
vec = scheme_make_pair(scheme_object_name(obj), SCHEME_CDR(vec));
print_pair(vec, notdisplay, compact, ht, mt, pp, scheme_pair_type, !pp->print_pair_curly, 1);
} else {
if (prefab) {
if (prefab)
SCHEME_VEC_ELS(vec)[0] = SCHEME_CDR(prefab);
notdisplay = to_quoted(pp, notdisplay, "`");
}
print_vector(vec, notdisplay, compact, ht, mt, pp, !!prefab);
}
closed = 1;
@ -3191,74 +3285,6 @@ print_byte_string(const char *str, int delta, int len, int notdisplay, PrintPara
}
}
static int is_special_reader_form(PrintParams *pp, int notdisplay, Scheme_Object *p)
{
Scheme_Object *v;
if (notdisplay && pp->print_reader) {
v = SCHEME_CAR(p);
p = SCHEME_CDR(p);
if (!SCHEME_PAIRP(p)) return 0;
p = SCHEME_CDR(p);
if (!SCHEME_NULLP(p)) return 0;
if (SCHEME_SYMBOLP(v)) {
if (SAME_OBJ(v, quote_symbol)
|| SAME_OBJ(v, quasiquote_symbol)
|| (SAME_OBJ(v, unquote_symbol) && (notdisplay != 4))
|| (SAME_OBJ(v, unquote_splicing_symbol) && (notdisplay != 4))
|| SAME_OBJ(v, syntax_symbol)
|| SAME_OBJ(v, quasisyntax_symbol)
|| SAME_OBJ(v, unsyntax_symbol)
|| SAME_OBJ(v, unsyntax_splicing_symbol))
return 1;
}
}
return 0;
}
static int print_special_reader_form(Scheme_Object *v, PrintParams *pp, int notdisplay)
{
const char *str;
int len;
if (SAME_OBJ(v, quote_symbol)) {
str = "'";
len = 1;
} else if (SAME_OBJ(v, quasiquote_symbol)) {
str = "`";
len = 1;
notdisplay++;
} else if (SAME_OBJ(v, unquote_symbol)) {
str = ",";
len = 1;
--notdisplay;
} else if (SAME_OBJ(v, unquote_splicing_symbol)) {
str = ",@";
len = 2;
--notdisplay;
} else if (SAME_OBJ(v, syntax_symbol)) {
str = "#'";
len = 2;
} else if (SAME_OBJ(v, quasisyntax_symbol)) {
str = "#`";
len = 2;
} else if (SAME_OBJ(v, unsyntax_symbol)) {
str = "#,";
len = 2;
} else if (SAME_OBJ(v, unsyntax_splicing_symbol)) {
str = "#,@";
len = 3;
} else {
str = "???";
len = 3;
}
print_utf8_string(pp, str, 0, len);
return notdisplay;
}
static void
print_pair(Scheme_Object *pair, int notdisplay, int compact,
Scheme_Hash_Table *ht,
@ -3276,7 +3302,7 @@ print_pair(Scheme_Object *pair, int notdisplay, int compact,
pr = pair;
while (SAME_TYPE(SCHEME_TYPE(pr), pair_type)) {
if (ht)
if ((long)scheme_hash_get(ht, pr) != 1) {
if (is_graph_point(ht, pr)) {
c = -1;
break;
}
@ -3303,7 +3329,7 @@ print_pair(Scheme_Object *pair, int notdisplay, int compact,
cdr = SCHEME_CDR(pair);
while (SAME_TYPE(SCHEME_TYPE(cdr), pair_type)) {
if (ht) {
if ((long)scheme_hash_get(ht, cdr) != 1) {
if (is_graph_point(ht, cdr)) {
/* This needs a tag */
break;
}
@ -3330,7 +3356,7 @@ print_pair(Scheme_Object *pair, int notdisplay, int compact,
while (SAME_TYPE(SCHEME_TYPE(cdr), pair_type)) {
print_utf8_string(pp, ", ", 0, 2);
if (ht) {
if ((long)scheme_hash_get(ht, cdr) != 1) {
if (is_graph_point(ht, cdr)) {
/* This needs a tag */
(void)print(cdr, notdisplay, compact, ht, mt, pp);
break;
@ -3355,13 +3381,22 @@ print_pair(Scheme_Object *pair, int notdisplay, int compact,
if (!super_compact)
print_compact(pp, CPT_PAIR);
} else {
if (round_parens) {
if (!first_unquoted && is_special_reader_form(pp, notdisplay, pair)) {
notdisplay = print_special_reader_form(SCHEME_CAR(pair), pp, notdisplay);
(void)print(SCHEME_CADR(pair), notdisplay, compact, ht, mt, pp);
return;
} else
print_utf8_string(pp,"(", 0, 1);
if ((notdisplay == 3) && !first_unquoted) {
if (SAME_TYPE(pair_type, scheme_pair_type)) {
if (scheme_is_list(pair))
print_utf8_string(pp,"(list ", 0, 6);
else if (!SCHEME_PAIRP(SCHEME_CDR(pair))
|| is_graph_point(ht, SCHEME_CDR(pair)))
print_utf8_string(pp,"(cons ", 0, 6);
else
print_utf8_string(pp,"(list* ", 0, 7);
} else {
pair_type = -1;
print_utf8_string(pp,"(mcons ", 0, 7);
}
round_parens = 1;
} else if (round_parens) {
print_utf8_string(pp,"(", 0, 1);
} else
print_utf8_string(pp,"{", 0, 1);
}
@ -3369,13 +3404,16 @@ print_pair(Scheme_Object *pair, int notdisplay, int compact,
print(SCHEME_CAR(pair), (first_unquoted ? 1 : notdisplay), compact, ht, mt, pp);
cdr = SCHEME_CDR(pair);
while (SAME_TYPE(SCHEME_TYPE(cdr), pair_type)
&& !is_special_reader_form(pp, notdisplay, pair)) {
while (SAME_TYPE(SCHEME_TYPE(cdr), pair_type)) {
if (ht && !super_compact) {
if ((long)scheme_hash_get(ht, cdr) != 1) {
if (is_graph_point(ht, cdr)) {
/* This needs a tag */
if (!compact)
print_utf8_string(pp, " . ", 0, 3);
if (!compact) {
if (notdisplay == 3)
print_utf8_string(pp, " ", 0, 1);
else
print_utf8_string(pp, " . ", 0, 3);
}
(void)print(cdr, notdisplay, compact, ht, mt, pp);
if (!compact) {
if (round_parens)
@ -3395,8 +3433,12 @@ print_pair(Scheme_Object *pair, int notdisplay, int compact,
}
if (!SCHEME_NULLP(cdr)) {
if (!compact)
print_utf8_string(pp, " . ", 0, 3);
if (!compact) {
if (notdisplay == 3)
print_utf8_string(pp, " ", 0, 1);
else
print_utf8_string(pp, " . ", 0, 3);
}
print(cdr, notdisplay, compact, ht, mt, pp);
} else if (compact && (super_compact < 1))
print_compact(pp, CPT_NULL);
@ -3440,7 +3482,7 @@ print_vector(Scheme_Object *vec, int notdisplay, int compact,
if (as_prefab) {
print_utf8_string(pp, "#s(", 0, 3);
} else if (notdisplay && pp->print_vec_shorthand) {
} else if (notdisplay && pp->print_vec_shorthand && (notdisplay != 3)) {
if (size == 0) {
if (pp->honu_mode)
print_utf8_string(pp, "vectorN(0", 0, 7);
@ -3454,6 +3496,8 @@ print_vector(Scheme_Object *vec, int notdisplay, int compact,
}
} else if (pp->honu_mode)
print_utf8_string(pp, "vector(", 0, 7);
else if (notdisplay == 3)
print_utf8_string(pp, "(vector ", 0, 8);
else
print_utf8_string(pp, "#(", 0, 2);
}
@ -3597,7 +3641,8 @@ static Scheme_Object *accum_write(void *_b, int argc, Scheme_Object **argv)
static Scheme_Object *writable_struct_subs(Scheme_Object *s, int for_write, PrintParams *pp)
{
Scheme_Object *v, *o, *a[3], *b, *accum_proc;
Scheme_Object *v, *o, *a[3], *b;
Scheme_Object *d_accum_proc, *w_accum_proc, *p_accum_proc;
Scheme_Output_Port *op;
v = scheme_is_writable_struct(s);
@ -3608,14 +3653,22 @@ static Scheme_Object *writable_struct_subs(Scheme_Object *s, int for_write, Prin
op = (Scheme_Output_Port *)o;
b = scheme_box(scheme_null);
accum_proc = scheme_make_closed_prim_w_arity(accum_write,
d_accum_proc = scheme_make_closed_prim_w_arity(accum_write,
b,
"custom-write-recur-handler",
"custom-display-recur-handler",
2, 2);
w_accum_proc = scheme_make_closed_prim_w_arity(accum_write,
b,
"custom-write-recur-handler",
2, 2);
p_accum_proc = scheme_make_closed_prim_w_arity(accum_write,
b,
"custom-print-recur-handler",
2, 3);
op->display_handler = accum_proc;
op->write_handler = accum_proc;
op->print_handler = accum_proc;
op->display_handler = d_accum_proc;
op->write_handler = w_accum_proc;
op->print_handler = p_accum_proc;
a[0] = s;
a[1] = o;
@ -3651,7 +3704,7 @@ static Scheme_Object *custom_recur(int notdisplay, void *_vec, int argc, Scheme_
if (!SCHEME_OUTPORTP(argv[1])) {
scheme_wrong_type((notdisplay > 1)
? "print/recursive"
: (notdisplay ? "write/recusrive" : "display/recursive"),
: (notdisplay ? "write/recursive" : "display/recursive"),
"output-port", 1, argc, argv);
return NULL;
}

View File

@ -539,7 +539,7 @@ void scheme_init_read(Scheme_Env *env)
GLOBAL_PARAMETER("print-honu", print_honu, MZCONFIG_HONU_MODE, env);
GLOBAL_PARAMETER("print-syntax-width", print_syntax_width, MZCONFIG_PRINT_SYNTAX_WIDTH, env);
GLOBAL_PARAMETER("print-reader-abbreviations", print_reader, MZCONFIG_PRINT_READER, env);
GLOBAL_PARAMETER("print-as-quasiquote", print_as_qq, MZCONFIG_PRINT_AS_QQ, env);
GLOBAL_PARAMETER("print-as-expression", print_as_qq, MZCONFIG_PRINT_AS_QQ, env);
GLOBAL_PRIM_W_ARITY("make-readtable", make_readtable, 1, -1, env);
GLOBAL_FOLDING_PRIM("readtable?", readtable_p, 1, 1, 1, env);
@ -766,7 +766,7 @@ print_reader(int argc, Scheme_Object *argv[])
static Scheme_Object *
print_as_qq(int argc, Scheme_Object *argv[])
{
DO_CHAR_PARAM("print-as-quasiquote", MZCONFIG_PRINT_AS_QQ);
DO_CHAR_PARAM("print-as-expression", MZCONFIG_PRINT_AS_QQ);
}
static Scheme_Object *good_syntax_width(int c, Scheme_Object **argv)

View File

@ -11,9 +11,9 @@
EXPECTED_PRIM_COUNT to the new value, and then USE_COMPILED_STARTUP
can be set to 1 again. */
#define USE_COMPILED_STARTUP 0
#define USE_COMPILED_STARTUP 1
#define EXPECTED_PRIM_COUNT 992
#define EXPECTED_PRIM_COUNT 995
#define EXPECTED_UNSAFE_COUNT 65
#define EXPECTED_FLFXNUM_COUNT 53

View File

@ -719,6 +719,7 @@ Scheme_Object *scheme_proc_struct_name_source(Scheme_Object *a);
Scheme_Object *scheme_object_name(Scheme_Object *a);
Scheme_Object *scheme_is_writable_struct(Scheme_Object *s);
Scheme_Object *scheme_is_print_as_constructor_struct(Scheme_Object *s);
#define SCHEME_STRUCT_INSPECTOR(obj) (((Scheme_Structure *)obj)->stype->inspector)

View File

@ -13,12 +13,12 @@
consistently.)
*/
#define MZSCHEME_VERSION "4.2.5.13"
#define MZSCHEME_VERSION "4.2.5.14"
#define MZSCHEME_VERSION_X 4
#define MZSCHEME_VERSION_Y 2
#define MZSCHEME_VERSION_Z 5
#define MZSCHEME_VERSION_W 13
#define MZSCHEME_VERSION_W 14
#define MZSCHEME_VERSION_MAJOR ((MZSCHEME_VERSION_X * 100) + MZSCHEME_VERSION_Y)
#define MZSCHEME_VERSION_MINOR ((MZSCHEME_VERSION_Z * 1000) + MZSCHEME_VERSION_W)

View File

@ -40,6 +40,7 @@ READ_ONLY Scheme_Object *scheme_write_special_symbol;
READ_ONLY static Scheme_Object *location_struct;
READ_ONLY static Scheme_Object *write_property;
READ_ONLY static Scheme_Object *print_as_constructor_property;
READ_ONLY static Scheme_Object *evt_property;
READ_ONLY static Scheme_Object *proc_property;
READ_ONLY static Scheme_Object *rename_transformer_property;
@ -87,6 +88,7 @@ static Scheme_Object *chaperone_property_p(int argc, Scheme_Object *argv[]);
static Scheme_Object *check_evt_property_value_ok(int argc, Scheme_Object *argv[]);
static Scheme_Object *check_equal_property_value_ok(int argc, Scheme_Object *argv[]);
static Scheme_Object *check_write_property_value_ok(int argc, Scheme_Object *argv[]);
static Scheme_Object *check_print_as_constructor_property_value_ok(int argc, Scheme_Object *argv[]);
static Scheme_Object *check_input_port_property_value_ok(int argc, Scheme_Object *argv[]);
static Scheme_Object *check_output_port_property_value_ok(int argc, Scheme_Object *argv[]);
static Scheme_Object *check_rename_transformer_property_value_ok(int argc, Scheme_Object *argv[]);
@ -283,6 +285,22 @@ scheme_init_struct (Scheme_Env *env)
scheme_add_global_constant("custom-write?", pred, env);
scheme_add_global_constant("custom-write-accessor", access, env);
}
REGISTER_SO(print_as_constructor_property);
{
Scheme_Object *a[2], *pred, *access;
guard = scheme_make_prim_w_arity(check_print_as_constructor_property_value_ok,
"guard-for-prop:custom-print-as-constructor",
2, 2);
a[0] = scheme_intern_symbol("custom-print-as-constructor");
a[1] = guard;
print_as_constructor_property = make_struct_type_property_from_c(2, a, &pred, &access,
scheme_struct_property_type);
scheme_add_global_constant("prop:custom-print-as-constructor", print_as_constructor_property, env);
scheme_add_global_constant("custom-print-as-constructor?", pred, env);
scheme_add_global_constant("custom-print-as-constructor-accessor", access, env);
}
REGISTER_SO(evt_property);
{
@ -1463,11 +1481,26 @@ static Scheme_Object *check_write_property_value_ok(int argc, Scheme_Object *arg
return v;
}
static Scheme_Object *check_print_as_constructor_property_value_ok(int argc, Scheme_Object *argv[])
{
if (SCHEME_TRUEP(argv[0]))
return scheme_true;
else
return scheme_false;
}
Scheme_Object *scheme_is_writable_struct(Scheme_Object *s)
{
return scheme_struct_type_property_ref(write_property, s);
}
Scheme_Object *scheme_is_print_as_constructor_struct(Scheme_Object *s)
{
s = scheme_struct_type_property_ref(print_as_constructor_property, s);
if (!s || SCHEME_FALSEP(s)) return NULL;
return scheme_true;
}
/*========================================================================*/
/* rename and set! transformer properties */
/*========================================================================*/