diff --git a/pkgs/drracket-pkgs/drracket/pkg/gui/by-list.rkt b/pkgs/drracket-pkgs/drracket/pkg/gui/by-list.rkt index c88422ebff..ccabb5a126 100644 --- a/pkgs/drracket-pkgs/drracket/pkg/gui/by-list.rkt +++ b/pkgs/drracket-pkgs/drracket/pkg/gui/by-list.rkt @@ -234,7 +234,9 @@ (send install-button enable (and (pair? sels) (or (and all-installed? (not (for/or ([p (in-list sels)]) - (eq? 'link (car (pkg-info-orig-pkg (cdr p))))))) + (define kind (car (pkg-info-orig-pkg (cdr p)))) + (or (eq? 'link kind) + (eq? 'static-link kind))))) none-installed?))) (send install-button set-label (if all-installed? (string-constant install-pkg-update) @@ -462,6 +464,7 @@ (case (car (pkg-info-orig-pkg info)) [(catalog) ""] [(link) "="] + [(static-link) "="] [(url) "@"]))])) (for/list ([p list-pkgs]) (->label-string (db:pkg-name p))) (for/list ([p list-pkgs]) (->label-string (db:pkg-author p))) diff --git a/pkgs/racket-pkgs/racket-doc/pkg/scribblings/lib.scrbl b/pkgs/racket-pkgs/racket-doc/pkg/scribblings/lib.scrbl index c5844d5448..d04d64374c 100644 --- a/pkgs/racket-pkgs/racket-doc/pkg/scribblings/lib.scrbl +++ b/pkgs/racket-pkgs/racket-doc/pkg/scribblings/lib.scrbl @@ -70,7 +70,8 @@ catalogs}.} @defstruct[pkg-info ([orig-pkg (or/c (list/c 'catalog string?) (list/c 'url string?) - (list/c 'link string?))] + (list/c 'link string?) + (list/c 'static-link string?))] [checksum (or/c #f string?)] [auto? boolean?]) #:prefab]{ @@ -117,7 +118,8 @@ scope}.} @deftogether[( @defproc[(pkg-desc? [v any/c]) boolean?] @defproc[(pkg-desc [name string?] - [type (or/c #f 'file 'dir 'link 'file-url 'dir-url 'github 'name)] + [type (or/c #f 'file 'dir 'link 'static-link + 'file-url 'dir-url 'github 'name)] [checksum (or/c string? #f)] [auto? boolean?]) pkg-desc?] diff --git a/pkgs/racket-pkgs/racket-doc/pkg/scribblings/pkg.scrbl b/pkgs/racket-pkgs/racket-doc/pkg/scribblings/pkg.scrbl index 0247f1b241..8e783130fe 100644 --- a/pkgs/racket-pkgs/racket-doc/pkg/scribblings/pkg.scrbl +++ b/pkgs/racket-pkgs/racket-doc/pkg/scribblings/pkg.scrbl @@ -311,6 +311,13 @@ sub-sub-commands: definition in @filepath{info.rkt} is changed (i.e., he package must be removed and re-installed for the change to take effect).} + @item{@DFlag{static-link} --- Implies @DFlag{link}, and also indicates that subdirectories + of the given directory will not change for each given directory that implements a + @tech{multi-collection package}.} + + @item{@DFlag{skip-installed} --- Ignore any @nonterm{pkg-source} + whose name corresponds to an already-installed package.} + @item{@DFlag{scope} @nonterm{scope} --- Selects the @tech{package scope} for installation, where @nonterm{scope} is one of @itemlist[ @item{@exec{installation} --- Install packages for all users of a Racket installation, rather than user-specific.} @@ -925,12 +932,13 @@ requires reinstallation of all packages every version change.) @subsection{Where and how are packages installed?} -User-specific and Racket-version-specific packages are in @racket[(build-path -(find-system-path 'addon-dir) (version) "pkgs")], user-specific and -all-version packages are in @racket[(build-path (find-system-path -'addon-dir) "pkgs")], and installation-wide packages are in -@racket[(build-path (find-lib-dir) "pkgs")]. They are linked as -collection roots with @exec{raco link}. +User-specific and Racket-version-specific packages are in +@racket[(build-path (find-system-path 'addon-dir) (version) "pkgs")], +user-specific and all-version packages are in @racket[(build-path +(find-system-path 'addon-dir) "pkgs")], and installation-wide packages +are in @racket[(build-path (find-lib-dir) "pkgs")]. They are linked as +collections (for single-collection packages) collection roots (for +multi-collection packages) with @exec{raco link}. @subsection{How are user-specific and installation-wide @tech{package scopes} related for conflict checking?} diff --git a/pkgs/racket-pkgs/racket-doc/scribblings/raco/link.scrbl b/pkgs/racket-pkgs/racket-doc/scribblings/raco/link.scrbl index 808b78ab16..63b1884c8b 100644 --- a/pkgs/racket-pkgs/racket-doc/scribblings/raco/link.scrbl +++ b/pkgs/racket-pkgs/racket-doc/scribblings/raco/link.scrbl @@ -77,6 +77,11 @@ Full command-line options: that match a directory are removed. This flag is mutually exclusive with @Flag{n} and @DFlag{name}.} + @item{@Flag{D} or @DFlag{static-root} --- Like @Flag{d} or + @DFlag{root}, but each directory is assumed to have a constant + set of subdirectories (to improve the use of collection-search + caches) as long as the links file itself does not change.} + @item{@Flag{x} @nonterm{regexp} or @DFlag{version-regexp} @nonterm{regexp} --- Sets a version regexp that limits the link to use only by Racket versions (as reported by @@ -133,6 +138,7 @@ Full command-line options: [#:file file (or/c path-string? #f) #f] [#:name name (or/c string? #f) #f] [#:root? root? any/c #f] + [#:static-root? static-root? any/c #f] [#:version-regexp version-regexp (or/c regexp? #f) #f] [#:error error-proc (symbol? string? any/c ... . -> . any) error] [#:remove? remove? any/c #f] @@ -149,6 +155,10 @@ user-specific, all-version @tech[#:doc reference-doc]{collection links file} if @racket[shared?] is true, or the installation-wide @tech[#:doc reference-doc]{collection links file} otherwise. +The @racket[static-root?] flag value is ignored unless @racket[root?] +is true and @racket[remove?] is false, in which case each given +@racket[dir] is added as a static root if @racket[static-root?] is true. + The @racket[error-proc] argument is called to raise exceptions that would be fatal to the @exec{raco link} command. diff --git a/pkgs/racket-pkgs/racket-doc/scribblings/reference/collects.scrbl b/pkgs/racket-pkgs/racket-doc/scribblings/reference/collects.scrbl index f8d301956e..f1751e8c48 100644 --- a/pkgs/racket-pkgs/racket-doc/scribblings/reference/collects.scrbl +++ b/pkgs/racket-pkgs/racket-doc/scribblings/reference/collects.scrbl @@ -217,12 +217,16 @@ A @tech{collection links file} is @racket[read] with default reader parameter settings to obtain a list. Every element of the list must be a link specification with one of the forms @racket[(list _string _path)], @racket[(list _string _path _regexp)], @racket[(list 'root -_path)], or @racket[(list 'root _regexp)]. A @racket[_string] names a +_path)], @racket[(list 'root _path _regexp)], @racket[(list 'static-root +_path)], @racket[(list 'static-root _path _regexp)]. A @racket[_string] names a top-level @tech{collection}, in which case @racket[_path] is a path that can be used as the collection's path (directly, as opposed to a subdirectory of @racket[_path] named by @racket[_string]). A @racket['root] entry, in contrast, acts like an path in -@racket[(current-library-collection-paths)]. If @racket[_path] is a +@racket[(current-library-collection-paths)]. A +@racket['static-root] entry is like a @racket['root] entry, but +where the immediate content of the directory is assumed not to change unless the +@tech{collection links file} changes. If @racket[_path] is a relative path, it is relative to the directory containing the @tech{collection links file}. If @racket[_regexp] is specified in a link, then the link is used only if @racket[(regexp-match? _regexp diff --git a/racket/lib/collects/pkg/lib.rkt b/racket/lib/collects/pkg/lib.rkt index 1e0bb04c0d..84a310051c 100644 --- a/racket/lib/collects/pkg/lib.rkt +++ b/racket/lib/collects/pkg/lib.rkt @@ -613,7 +613,7 @@ (let () (match-define (pkg-info orig-pkg checksum _) info) (match orig-pkg - [`(link ,orig-pkg-dir) + [`(,(or 'link 'static-link) ,orig-pkg-dir) orig-pkg-dir] [_ (build-path (pkg-installed-dir) pkg-name)])))) @@ -662,7 +662,7 @@ (for/fold ([pkg #f] [subpath #f]) ([(k v) (in-hash (read-pkg-db/cached))] #:when (not pkg)) (match (pkg-info-orig-pkg v) - [`(link ,orig-pkg-dir) + [`(,(or 'link 'static-link) ,orig-pkg-dir) (define e (explode orig-pkg-dir)) (if (sub-path? <= p e) (values k (build-path* (list-tail p (length e)))) @@ -687,7 +687,7 @@ (define shared? (and user? (eq? (current-pkg-scope) 'shared))) (match orig-pkg - [`(link ,_) + [`(,(or 'link 'static-link) ,_) (links pkg-dir #:remove? #t #:user? user? @@ -1040,14 +1040,16 @@ (unless staged? (delete-directory/files pkg-dir))))] [(or (eq? type 'dir) - (eq? type 'link)) + (eq? type 'link) + (eq? type 'static-link)) (unless (directory-exists? pkg) (pkg-error "no such directory\n path: ~a" pkg)) (let ([pkg (directory-path-no-slash pkg)]) (cond - [(eq? type 'link) + [(or (eq? type 'link) + (eq? type 'static-link)) (install-info pkg-name - `(link ,(simple-form-path* pkg)) + `(,type ,(simple-form-path* pkg)) pkg #f #f (directory->module-paths pkg pkg-name metadata-ns))] @@ -1363,7 +1365,9 @@ (path? scope))) #:shared? (eq? 'shared scope) #:file (scope->links-file scope) - #:root? (not single-collect)) + #:root? (not single-collect) + #:static-root? (and (pair? orig-pkg) + (eq? 'static-link (car orig-pkg)))) (define this-pkg-info (if single-collect (sc-pkg-info orig-pkg checksum auto? single-collect) @@ -1503,13 +1507,13 @@ (match-define (pkg-info orig-pkg checksum _) (package-info pkg-name)) (define ty (first orig-pkg)) - (not (member ty '(link dir file)))) + (not (member ty '(link static-link dir file)))) (define ((update-package download-printf) pkg-name) (match-define (pkg-info orig-pkg checksum auto?) (package-info pkg-name)) (match orig-pkg - [`(link ,_) + [`(,(or 'link 'static-link) ,_) (pkg-error (~a "cannot update linked packages\n" " package name: ~a\n" " package source: ~a") @@ -2258,7 +2262,7 @@ (values (or/c #f string?) (or/c #f 'same path?)))] [pkg-desc (-> string? - (or/c #f 'file 'dir 'link 'file-url 'dir-url 'github 'name) + (or/c #f 'file 'dir 'link 'static-link 'file-url 'dir-url 'github 'name) (or/c string? #f) boolean? pkg-desc?)] diff --git a/racket/lib/collects/pkg/main.rkt b/racket/lib/collects/pkg/main.rkt index ef0b1fed6a..3c58117a03 100644 --- a/racket/lib/collects/pkg/main.rkt +++ b/racket/lib/collects/pkg/main.rkt @@ -74,7 +74,10 @@ " search-auto: like 'search-ask' but does not ask for permission to install")] [#:bool force () "Ignores conflicts"] [#:bool ignore-checksums () "Ignores checksums"] + #:once-any [#:bool link () ("Link a directory package source in place")] + [#:bool static-link () ("Link in place, promising collections do not change")] + #:once-each [#:bool skip-installed () ("Skip a if already installed")] #:once-any [(#:sym scope [installation user shared] #f) scope () @@ -107,7 +110,10 @@ #:ignore-checksums? ignore-checksums #:skip-installed? skip-installed (for/list ([p (in-list pkg-source)]) - (pkg-desc p (or (and link 'link) type) name #f)))))) + (define a-type (or (and link 'link) + (and static-link 'static-link) + type)) + (pkg-desc p a-type name #f)))))) (setup no-setup setup-collects jobs)))] [update "Update packages" diff --git a/racket/lib/collects/pkg/name.rkt b/racket/lib/collects/pkg/name.rkt index 996329fafb..30686c9d31 100644 --- a/racket/lib/collects/pkg/name.rkt +++ b/racket/lib/collects/pkg/name.rkt @@ -95,7 +95,9 @@ (define name (extract-archive-name name+ext)) (values name 'file)] [(if type - (or (eq? type 'dir) (eq? type 'link)) + (or (eq? type 'dir) + (eq? type 'link) + (eq? type 'static-link)) (path-string? s)) (define-values (base name dir?) (split-path s)) (define dir-name (and (path? name) (path->string name))) diff --git a/racket/lib/collects/setup/commands/link.rkt b/racket/lib/collects/setup/commands/link.rkt index 2d23ca1864..f48f4fe7e7 100644 --- a/racket/lib/collects/setup/commands/link.rkt +++ b/racket/lib/collects/setup/commands/link.rkt @@ -7,6 +7,7 @@ (define link-file (make-parameter #f)) (define link-name (make-parameter #f)) (define root-mode (make-parameter #f)) +(define static-root-mode (make-parameter #f)) (define link-version (make-parameter #f)) (define remove-mode (make-parameter #f)) (define repair-mode (make-parameter #f)) @@ -28,6 +29,9 @@ (link-name name)] [("-d" "--root") "Treat as a collection root" (root-mode #t)] + [("-D" "--static-root") "Treat as a static collection root" + (root-mode #t) + (static-root-mode #t)] #:once-each [("-x" "--version-regexp") regexp "Set the version pregexp" (with-handlers ([exn:fail:contract? (lambda (exn) @@ -74,6 +78,7 @@ (apply links dirs #:root? (root-mode) + #:static-root? (static-root-mode) #:user? user? #:shared? shared? #:file (link-file) diff --git a/racket/lib/collects/setup/link.rkt b/racket/lib/collects/setup/link.rkt index d4492951a0..14acbd22c1 100644 --- a/racket/lib/collects/setup/link.rkt +++ b/racket/lib/collects/setup/link.rkt @@ -12,6 +12,7 @@ #:version-regexp [version-regexp #f] #:shared? [shared? #f] #:root? [root? #f] + #:static-root? [static-root? #f] #:remove? [remove? #f] #:show? [show? #f] #:repair? [repair? #f] @@ -67,8 +68,9 @@ (content-error "entry is a not a 2- or 3-element list: " e)) #:when (or (or (string? (car e)) - (eq? 'root (car e))) - (content-error "entry's first element is not a string or 'root: " e)) + (eq? 'root (car e)) + (eq? 'static-root (car e))) + (content-error "entry's first element is not a string, 'root, or 'static-root: " e)) #:when (or (path-string? (cadr e)) (content-error "entry's second element is not a path string: " e)) @@ -115,7 +117,9 @@ (path->complete-path d)) #:more-than-root? #t))] [a-name (if root? - 'root + (if static-root? + 'static-root + 'root) (and d (or name (let-values ([(base name dir?) (split-path dp)]) @@ -136,7 +140,8 @@ (and name (not (equal? (car e) name))) (and root? - (not (eq? (car e) 'root))) + (not (or (eq? (car e) 'root) + (eq? (car e) 'static-root)))) (and version-regexp (pair? (cddr e)) (not (equal? (caddr e) version-regexp))))) @@ -181,7 +186,8 @@ (when show? (for ([e (in-list new-table)]) (printf " ~a~s path: ~s~a\n" - (if (eq? (car e) 'root) + (if (or (eq? (car e) 'root) + (eq? (car e) 'static-root)) "" "collection: ") (car e) @@ -197,7 +203,8 @@ (if root? ;; Return root paths: (for/list ([e (in-list new-table)] - #:when (eq? 'root (car e)) + #:when (or (eq? 'root (car e)) + (eq? 'static-root (car e))) #:when (or (null? (cddr e)) (regexp-match? (caddr e) (version)))) (simplify (cadr e))) diff --git a/racket/src/link-all.rkt b/racket/src/link-all.rkt index c2a384bac5..0f54387bc5 100644 --- a/racket/src/link-all.rkt +++ b/racket/src/link-all.rkt @@ -174,7 +174,7 @@ (define auto? (is-auto? name)) (printf "Adding ~a~a as ~a\n" name (if auto? "*" "") dir) (pkg-desc (path->string dir) - 'link + 'static-link #f auto?))))) diff --git a/racket/src/racket/src/cstartup.inc b/racket/src/racket/src/cstartup.inc index acbc56917d..526598b4be 100644 --- a/racket/src/racket/src/cstartup.inc +++ b/racket/src/racket/src/cstartup.inc @@ -16,12 +16,12 @@ 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,82,89,0,0,95,159,2,17,36,36,159,2,16,36,36,159,2,16,36, +8,240,107,89,0,0,95,159,2,17,36,36,159,2,16,36,36,159,2,16,36, 36,16,20,2,3,2,2,2,5,2,2,2,4,2,2,2,6,2,2,2,7, 2,2,2,8,2,2,2,9,2,2,2,10,2,2,2,11,2,2,2,12,2, -2,97,37,11,8,240,82,89,0,0,93,159,2,16,36,37,16,2,2,13,161, -2,2,37,2,13,2,2,2,13,96,38,11,8,240,82,89,0,0,16,0,96, -11,11,8,240,82,89,0,0,16,0,18,98,64,104,101,114,101,13,16,6,36, +2,97,37,11,8,240,107,89,0,0,93,159,2,16,36,37,16,2,2,13,161, +2,2,37,2,13,2,2,2,13,96,38,11,8,240,107,89,0,0,16,0,96, +11,11,8,240,107,89,0,0,16,0,18,98,64,104,101,114,101,13,16,6,36, 2,14,2,2,11,11,11,8,32,8,31,8,30,8,29,27,248,22,161,4,195, 249,22,154,4,80,158,39,36,251,22,89,2,18,248,22,101,199,12,249,22,79, 2,19,248,22,103,201,27,248,22,161,4,195,249,22,154,4,80,158,39,36,251, @@ -30,14 +30,14 @@ 248,22,81,194,248,22,135,18,193,249,22,154,4,80,158,39,36,251,22,89,2, 18,248,22,135,18,199,249,22,79,2,11,248,22,136,18,201,11,18,100,10,13, 16,6,36,2,14,2,2,11,11,11,8,32,8,31,8,30,8,29,16,4,11, -11,2,20,3,1,8,101,110,118,49,55,52,50,56,16,4,11,11,2,21,3, -1,8,101,110,118,49,55,52,50,57,27,248,22,81,248,22,161,4,196,28,248, +11,2,20,3,1,8,101,110,118,49,55,52,53,51,16,4,11,11,2,21,3, +1,8,101,110,118,49,55,52,53,52,27,248,22,81,248,22,161,4,196,28,248, 22,87,193,20,14,159,37,36,37,28,248,22,87,248,22,81,194,248,22,135,18, 193,249,22,154,4,80,158,39,36,250,22,89,2,22,248,22,89,249,22,89,248, 22,89,2,23,248,22,135,18,201,251,22,89,2,18,2,23,2,23,249,22,79, 2,6,248,22,136,18,204,18,100,11,13,16,6,36,2,14,2,2,11,11,11, 8,32,8,31,8,30,8,29,16,4,11,11,2,20,3,1,8,101,110,118,49, -55,52,51,49,16,4,11,11,2,21,3,1,8,101,110,118,49,55,52,51,50, +55,52,53,54,16,4,11,11,2,21,3,1,8,101,110,118,49,55,52,53,55, 248,22,161,4,193,27,248,22,161,4,194,249,22,79,248,22,89,248,22,80,196, 248,22,136,18,195,27,248,22,81,248,22,161,4,23,197,1,249,22,154,4,80, 158,39,36,28,248,22,64,248,22,155,4,248,22,80,23,198,2,27,249,22,2, @@ -68,8 +68,8 @@ 22,162,9,248,22,155,4,248,22,80,200,64,101,108,115,101,10,248,22,135,18, 197,250,22,90,2,22,9,248,22,136,18,200,249,22,79,2,5,248,22,81,202, 99,13,16,6,36,2,14,2,2,11,11,11,8,32,8,31,8,30,8,29,16, -4,11,11,2,20,3,1,8,101,110,118,49,55,52,53,52,16,4,11,11,2, -21,3,1,8,101,110,118,49,55,52,53,53,18,158,94,10,64,118,111,105,100, +4,11,11,2,20,3,1,8,101,110,118,49,55,52,55,57,16,4,11,11,2, +21,3,1,8,101,110,118,49,55,52,56,48,18,158,94,10,64,118,111,105,100, 8,48,27,248,22,81,248,22,161,4,196,249,22,154,4,80,158,39,36,28,248, 22,64,248,22,155,4,248,22,80,197,250,22,89,2,28,248,22,89,248,22,135, 18,199,248,22,101,198,27,248,22,155,4,248,22,135,18,197,250,22,89,2,28, @@ -101,824 +101,869 @@ } { SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,9,53,46,51,46,57,48,48,46,52,84,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,166,0,0,0,1,0,0,8,0, +0,0,0,0,0,0,0,0,0,0,0,0,175,0,0,0,1,0,0,8,0, 21,0,26,0,43,0,55,0,77,0,106,0,121,0,139,0,151,0,167,0,181, 0,203,0,219,0,236,0,253,0,15,1,34,1,53,1,69,1,75,1,84,1, 91,1,108,1,123,1,162,1,196,1,214,1,226,1,233,1,246,1,3,2,20, -2,32,2,56,2,88,2,106,2,125,2,145,2,161,2,179,2,210,2,224,2, -241,2,29,3,37,3,42,3,86,3,93,3,103,3,118,3,127,3,132,3,134, -3,158,3,179,3,189,3,202,3,213,3,222,3,232,3,245,3,251,3,40,4, -43,4,47,4,71,4,110,4,113,4,126,4,148,4,159,4,211,4,234,4,242, -4,10,5,31,5,244,5,18,6,155,9,178,9,195,9,143,11,246,11,4,12, -164,12,96,14,105,14,114,14,128,14,138,14,179,15,26,16,99,16,172,16,20, -17,49,17,120,17,1,18,72,18,26,19,177,19,226,19,67,21,171,21,233,21, -164,23,188,23,199,24,206,24,2,25,16,25,126,25,28,26,35,26,92,26,131, -26,249,26,214,27,18,28,25,28,149,28,168,28,65,29,81,29,95,31,141,31, -150,31,227,32,169,33,189,33,205,33,228,33,244,33,39,34,60,34,80,34,100, -34,157,34,136,37,199,38,102,39,118,39,14,42,143,44,158,44,48,46,242,46, -244,46,14,47,29,47,209,48,147,49,162,49,171,49,178,49,193,50,208,51,103, -54,215,54,73,55,87,57,37,58,69,58,199,58,0,0,149,65,0,0,67,35, -37,117,116,105,108,115,72,112,97,116,104,45,115,116,114,105,110,103,63,64,98, -115,98,115,76,110,111,114,109,97,108,45,99,97,115,101,45,112,97,116,104,71, -114,101,114,111,111,116,45,112,97,116,104,1,20,102,105,110,100,45,101,120,101, -99,117,116,97,98,108,101,45,112,97,116,104,1,27,112,97,116,104,45,108,105, -115,116,45,115,116,114,105,110,103,45,62,112,97,116,104,45,108,105,115,116,74, -45,99,104,101,99,107,45,114,101,108,112,97,116,104,77,45,99,104,101,99,107, -45,99,111,108,108,101,99,116,105,111,110,71,45,99,104,101,99,107,45,102,97, -105,108,75,99,111,108,108,101,99,116,105,111,110,45,112,97,116,104,73,102,105, -110,100,45,99,111,108,45,102,105,108,101,1,20,99,111,108,108,101,99,116,105, -111,110,45,102,105,108,101,45,112,97,116,104,75,117,115,101,114,45,108,105,110, -107,115,45,112,97,116,104,76,117,115,101,114,45,108,105,110,107,115,45,99,97, -99,104,101,76,117,115,101,114,45,108,105,110,107,115,45,115,116,97,109,112,77, -115,104,97,114,101,100,45,108,105,110,107,115,45,112,97,116,104,78,115,104,97, -114,101,100,45,108,105,110,107,115,45,99,97,99,104,101,78,115,104,97,114,101, -100,45,108,105,110,107,115,45,115,116,97,109,112,75,102,105,110,100,45,99,111, -110,102,105,103,45,100,105,114,65,113,117,111,116,101,68,35,37,112,97,114,97, -109,122,29,94,2,21,2,22,11,76,103,101,116,45,99,111,110,102,105,103,45, -116,97,98,108,101,74,99,111,101,114,99,101,45,116,111,45,112,97,116,104,1, -37,99,111,108,108,101,99,116,115,45,114,101,108,97,116,105,118,101,45,112,97, -116,104,45,62,99,111,109,112,108,101,116,101,45,112,97,116,104,1,32,101,120, -101,45,114,101,108,97,116,105,118,101,45,112,97,116,104,45,62,99,111,109,112, -108,101,116,101,45,112,97,116,104,77,97,100,100,45,99,111,110,102,105,103,45, -115,101,97,114,99,104,71,108,105,110,107,115,45,112,97,116,104,115,29,94,2, -21,2,22,11,72,108,105,110,107,115,45,99,97,99,104,101,115,72,108,105,110, -107,115,45,115,116,97,109,112,115,76,115,116,97,109,112,45,112,114,111,109,112, -116,45,116,97,103,71,102,105,108,101,45,62,115,116,97,109,112,1,22,103,101, -116,45,108,105,110,107,101,100,45,99,111,108,108,101,99,116,105,111,110,115,1, -30,110,111,114,109,97,108,105,122,101,45,99,111,108,108,101,99,116,105,111,110, -45,114,101,102,101,114,101,110,99,101,77,99,104,101,99,107,45,115,117,102,102, -105,120,45,99,97,108,108,78,112,97,116,104,45,97,100,106,117,115,116,45,115, -117,102,102,105,120,79,112,97,116,104,45,114,101,112,108,97,99,101,45,115,117, -102,102,105,120,75,112,97,116,104,45,97,100,100,45,115,117,102,102,105,120,77, -108,111,97,100,47,117,115,101,45,99,111,109,112,105,108,101,100,1,29,102,105, -110,100,45,108,105,98,114,97,114,121,45,99,111,108,108,101,99,116,105,111,110, -45,112,97,116,104,115,73,101,109,98,101,100,100,101,100,45,108,111,97,100,76, -110,111,114,109,97,108,45,112,97,116,104,45,99,97,115,101,6,41,41,40,111, -114,47,99,32,112,97,116,104,45,102,111,114,45,115,111,109,101,45,115,121,115, -116,101,109,63,32,112,97,116,104,45,115,116,114,105,110,103,63,41,67,119,105, -110,100,111,119,115,6,2,2,92,49,6,41,41,40,111,114,47,99,32,112,97, -116,104,45,115,116,114,105,110,103,63,32,112,97,116,104,45,102,111,114,45,115, -111,109,101,45,115,121,115,116,101,109,63,41,6,4,4,112,97,116,104,5,8, -92,92,63,92,82,69,76,92,6,12,12,112,97,116,104,45,115,116,114,105,110, -103,63,68,114,101,108,97,116,105,118,101,64,108,111,111,112,5,0,6,21,21, -105,110,118,97,108,105,100,32,114,101,108,97,116,105,118,101,32,112,97,116,104, -6,18,18,40,97,110,121,47,99,32,46,32,45,62,32,46,32,97,110,121,41, -69,97,100,100,111,110,45,100,105,114,6,10,10,108,105,110,107,115,46,114,107, -116,100,70,99,111,110,102,105,103,45,100,105,114,68,111,114,105,103,45,100,105, -114,69,101,120,101,99,45,102,105,108,101,72,99,111,108,108,101,99,116,115,45, -100,105,114,65,101,114,114,111,114,6,42,42,101,114,114,111,114,32,114,101,97, -100,105,110,103,32,99,111,108,108,101,99,116,105,111,110,32,108,105,110,107,115, -32,102,105,108,101,32,126,115,58,32,126,97,6,0,0,6,1,1,47,6,21, -21,40,111,114,47,99,32,115,116,114,105,110,103,63,32,98,121,116,101,115,63, -41,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,1, -95,5,11,80,76,84,67,79,76,76,69,67,84,83,1,20,99,111,108,108,101, -99,116,115,45,115,101,97,114,99,104,45,100,105,114,115,6,8,8,99,111,108, -108,101,99,116,115,27,248,22,153,15,23,195,2,28,23,193,2,192,86,94,23, -193,1,28,248,22,147,7,23,195,2,27,248,22,176,15,23,196,2,28,23,193, -2,192,86,94,23,193,1,248,22,177,15,23,196,1,11,0,21,35,114,120,34, -94,91,92,92,93,91,92,92,93,91,63,93,91,92,92,93,34,0,6,35,114, -120,34,47,34,0,22,35,114,120,34,91,47,92,92,93,91,46,32,93,43,91, -47,92,92,93,42,36,34,0,19,35,114,120,34,91,32,46,93,43,40,91,47, -92,92,93,42,41,36,34,86,94,28,28,248,22,154,15,23,195,2,10,28,248, +2,32,2,40,2,55,2,79,2,111,2,129,2,148,2,168,2,184,2,202,2, +233,2,247,2,8,3,52,3,60,3,65,3,109,3,116,3,126,3,141,3,150, +3,155,3,157,3,181,3,202,3,212,3,225,3,236,3,245,3,255,3,12,4, +18,4,63,4,68,4,80,4,83,4,87,4,111,4,150,4,153,4,166,4,188, +4,199,4,251,4,18,5,26,5,50,5,71,5,28,6,58,6,195,9,218,9, +235,9,183,11,30,12,44,12,204,12,136,14,145,14,154,14,168,14,178,14,219, +15,66,16,139,16,212,16,60,17,89,17,160,17,41,18,112,18,66,19,217,19, +10,20,107,21,211,21,17,22,204,23,228,23,239,24,246,24,42,25,55,25,45, +26,59,26,169,26,71,27,78,27,182,28,2,29,45,29,62,29,180,29,145,30, +205,30,212,30,92,31,146,31,165,31,115,32,131,32,207,34,254,34,7,35,84, +36,26,37,46,37,62,37,85,37,101,37,152,37,173,37,193,37,213,37,14,38, +249,40,56,42,215,42,231,42,127,45,0,48,15,48,161,49,99,50,101,50,127, +50,142,50,66,52,4,53,19,53,28,53,35,53,50,54,65,55,216,57,72,58, +186,58,200,60,150,61,182,61,56,62,0,0,56,69,0,0,67,35,37,117,116, +105,108,115,72,112,97,116,104,45,115,116,114,105,110,103,63,64,98,115,98,115, +76,110,111,114,109,97,108,45,99,97,115,101,45,112,97,116,104,71,114,101,114, +111,111,116,45,112,97,116,104,1,20,102,105,110,100,45,101,120,101,99,117,116, +97,98,108,101,45,112,97,116,104,1,27,112,97,116,104,45,108,105,115,116,45, +115,116,114,105,110,103,45,62,112,97,116,104,45,108,105,115,116,74,45,99,104, +101,99,107,45,114,101,108,112,97,116,104,77,45,99,104,101,99,107,45,99,111, +108,108,101,99,116,105,111,110,71,45,99,104,101,99,107,45,102,97,105,108,75, +99,111,108,108,101,99,116,105,111,110,45,112,97,116,104,73,102,105,110,100,45, +99,111,108,45,102,105,108,101,1,20,99,111,108,108,101,99,116,105,111,110,45, +102,105,108,101,45,112,97,116,104,75,117,115,101,114,45,108,105,110,107,115,45, +112,97,116,104,76,117,115,101,114,45,108,105,110,107,115,45,99,97,99,104,101, +76,117,115,101,114,45,108,105,110,107,115,45,115,116,97,109,112,77,115,104,97, +114,101,100,45,108,105,110,107,115,45,112,97,116,104,78,115,104,97,114,101,100, +45,108,105,110,107,115,45,99,97,99,104,101,78,115,104,97,114,101,100,45,108, +105,110,107,115,45,115,116,97,109,112,75,102,105,110,100,45,99,111,110,102,105, +103,45,100,105,114,65,113,117,111,116,101,68,35,37,112,97,114,97,109,122,29, +94,2,21,2,22,11,76,103,101,116,45,99,111,110,102,105,103,45,116,97,98, +108,101,74,99,111,101,114,99,101,45,116,111,45,112,97,116,104,1,37,99,111, +108,108,101,99,116,115,45,114,101,108,97,116,105,118,101,45,112,97,116,104,45, +62,99,111,109,112,108,101,116,101,45,112,97,116,104,1,32,101,120,101,45,114, +101,108,97,116,105,118,101,45,112,97,116,104,45,62,99,111,109,112,108,101,116, +101,45,112,97,116,104,77,97,100,100,45,99,111,110,102,105,103,45,115,101,97, +114,99,104,71,108,105,110,107,115,45,112,97,116,104,115,29,94,2,21,2,22, +11,72,108,105,110,107,115,45,99,97,99,104,101,115,72,108,105,110,107,115,45, +115,116,97,109,112,115,76,115,116,97,109,112,45,112,114,111,109,112,116,45,116, +97,103,71,102,105,108,101,45,62,115,116,97,109,112,67,115,116,97,109,112,61, +63,74,110,111,45,102,105,108,101,45,115,116,97,109,112,63,1,22,103,101,116, +45,108,105,110,107,101,100,45,99,111,108,108,101,99,116,105,111,110,115,1,30, +110,111,114,109,97,108,105,122,101,45,99,111,108,108,101,99,116,105,111,110,45, +114,101,102,101,114,101,110,99,101,77,99,104,101,99,107,45,115,117,102,102,105, +120,45,99,97,108,108,78,112,97,116,104,45,97,100,106,117,115,116,45,115,117, +102,102,105,120,79,112,97,116,104,45,114,101,112,108,97,99,101,45,115,117,102, +102,105,120,75,112,97,116,104,45,97,100,100,45,115,117,102,102,105,120,77,108, +111,97,100,47,117,115,101,45,99,111,109,112,105,108,101,100,1,29,102,105,110, +100,45,108,105,98,114,97,114,121,45,99,111,108,108,101,99,116,105,111,110,45, +112,97,116,104,115,73,101,109,98,101,100,100,101,100,45,108,111,97,100,76,110, +111,114,109,97,108,45,112,97,116,104,45,99,97,115,101,6,41,41,40,111,114, +47,99,32,112,97,116,104,45,102,111,114,45,115,111,109,101,45,115,121,115,116, +101,109,63,32,112,97,116,104,45,115,116,114,105,110,103,63,41,67,119,105,110, +100,111,119,115,6,2,2,92,49,6,41,41,40,111,114,47,99,32,112,97,116, +104,45,115,116,114,105,110,103,63,32,112,97,116,104,45,102,111,114,45,115,111, +109,101,45,115,121,115,116,101,109,63,41,6,4,4,112,97,116,104,5,8,92, +92,63,92,82,69,76,92,6,12,12,112,97,116,104,45,115,116,114,105,110,103, +63,68,114,101,108,97,116,105,118,101,64,108,111,111,112,5,0,6,21,21,105, +110,118,97,108,105,100,32,114,101,108,97,116,105,118,101,32,112,97,116,104,6, +18,18,40,97,110,121,47,99,32,46,32,45,62,32,46,32,97,110,121,41,69, +97,100,100,111,110,45,100,105,114,6,10,10,108,105,110,107,115,46,114,107,116, +100,70,99,111,110,102,105,103,45,100,105,114,68,111,114,105,103,45,100,105,114, +69,101,120,101,99,45,102,105,108,101,72,99,111,108,108,101,99,116,115,45,100, +105,114,65,101,114,114,111,114,6,42,42,101,114,114,111,114,32,114,101,97,100, +105,110,103,32,99,111,108,108,101,99,116,105,111,110,32,108,105,110,107,115,32, +102,105,108,101,32,126,115,58,32,126,97,64,114,111,111,116,71,115,116,97,116, +105,99,45,114,111,111,116,6,0,0,6,1,1,47,6,21,21,40,111,114,47, +99,32,115,116,114,105,110,103,63,32,98,121,116,101,115,63,41,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,1,95,5,11,80,76, +84,67,79,76,76,69,67,84,83,1,20,99,111,108,108,101,99,116,115,45,115, +101,97,114,99,104,45,100,105,114,115,6,8,8,99,111,108,108,101,99,116,115, +27,248,22,153,15,23,195,2,28,23,193,2,192,86,94,23,193,1,28,248,22, +147,7,23,195,2,27,248,22,176,15,23,196,2,28,23,193,2,192,86,94,23, +193,1,248,22,177,15,23,196,1,11,0,21,35,114,120,34,94,91,92,92,93, +91,92,92,93,91,63,93,91,92,92,93,34,0,6,35,114,120,34,47,34,0, +22,35,114,120,34,91,47,92,92,93,91,46,32,93,43,91,47,92,92,93,42, +36,34,0,19,35,114,120,34,91,32,46,93,43,40,91,47,92,92,93,42,41, +36,34,86,94,28,28,248,22,154,15,23,195,2,10,28,248,22,153,15,23,195, +2,10,28,248,22,147,7,23,195,2,28,248,22,176,15,23,195,2,10,248,22, +177,15,23,195,2,11,12,250,22,171,11,2,46,2,47,23,197,2,28,28,248, +22,154,15,23,195,2,249,22,162,9,248,22,155,15,23,197,2,2,48,249,22, +162,9,247,22,174,8,2,48,27,28,248,22,147,7,23,196,2,23,195,2,248, +22,159,8,248,22,158,15,23,197,2,28,249,22,148,16,2,78,23,195,2,86, +94,23,193,1,28,248,22,147,7,23,196,2,248,22,161,15,23,196,1,194,27, +248,22,186,7,23,195,1,249,22,162,15,248,22,162,8,250,22,156,16,2,79, +28,249,22,148,16,2,80,23,201,2,23,199,1,250,22,156,16,2,81,23,202, +1,2,49,80,159,44,37,38,2,48,28,248,22,147,7,23,195,2,248,22,161, +15,23,195,1,193,0,28,35,114,120,34,94,92,92,92,92,92,92,92,92,91, +63,93,92,92,92,92,85,78,67,92,92,92,92,34,86,95,28,28,28,248,22, +153,15,23,195,2,10,28,248,22,147,7,23,195,2,28,248,22,176,15,23,195, +2,10,248,22,177,15,23,195,2,11,10,248,22,154,15,23,195,2,12,252,22, +171,11,2,5,2,50,36,23,199,2,23,200,2,28,28,28,248,22,153,15,23, +196,2,10,28,248,22,147,7,23,196,2,28,248,22,176,15,23,196,2,10,248, +22,177,15,23,196,2,11,10,248,22,154,15,23,196,2,12,252,22,171,11,2, +5,2,50,37,23,199,2,23,200,2,27,28,248,22,154,15,23,196,2,248,22, +155,15,23,196,2,247,22,156,15,86,95,28,28,248,22,178,15,23,196,2,10, +249,22,162,9,247,22,156,15,23,195,2,12,253,22,173,11,2,5,6,54,54, +112,97,116,104,32,105,115,32,110,111,116,32,99,111,109,112,108,101,116,101,32, +97,110,100,32,110,111,116,32,116,104,101,32,112,108,97,116,102,111,114,109,39, +115,32,99,111,110,118,101,110,116,105,111,110,2,51,23,201,2,6,24,24,112, +108,97,116,102,111,114,109,32,99,111,110,118,101,110,116,105,111,110,32,116,121, +112,101,247,22,156,15,28,249,22,162,9,28,248,22,154,15,23,199,2,248,22, +155,15,23,199,2,247,22,156,15,23,195,2,12,253,22,173,11,2,5,6,37, +37,103,105,118,101,110,32,112,97,116,104,115,32,117,115,101,32,100,105,102,102, +101,114,101,110,116,32,99,111,110,118,101,110,116,105,111,110,115,2,51,23,201, +2,6,9,9,114,111,111,116,32,112,97,116,104,23,202,2,27,27,248,22,182, +15,28,248,22,178,15,23,199,2,23,198,1,248,22,179,15,23,199,1,86,94, +28,28,248,22,154,15,23,194,2,10,28,248,22,153,15,23,194,2,10,28,248, +22,147,7,23,194,2,28,248,22,176,15,23,194,2,10,248,22,177,15,23,194, +2,11,12,250,22,171,11,2,46,2,47,23,196,2,28,28,248,22,154,15,23, +194,2,249,22,162,9,248,22,155,15,23,196,2,2,48,249,22,162,9,247,22, +174,8,2,48,27,28,248,22,147,7,23,195,2,23,194,2,248,22,159,8,248, +22,158,15,23,196,2,28,249,22,148,16,2,78,23,195,2,86,94,23,193,1, +28,248,22,147,7,23,195,2,248,22,161,15,23,195,1,193,27,248,22,186,7, +23,195,1,249,22,162,15,248,22,162,8,250,22,156,16,2,79,28,249,22,148, +16,2,80,23,201,2,23,199,1,250,22,156,16,2,81,23,202,1,2,49,80, +159,47,37,38,2,48,28,248,22,147,7,23,194,2,248,22,161,15,23,194,1, +192,27,248,22,158,15,23,195,2,28,249,22,162,9,23,197,2,64,117,110,105, +120,28,249,22,144,8,23,195,1,5,1,47,86,95,23,195,1,23,194,1,28, +248,22,154,15,23,199,2,197,248,22,161,15,23,199,1,249,22,171,15,23,200, +1,249,22,162,15,249,22,147,8,248,22,158,15,23,201,1,37,23,199,1,28, +249,22,162,9,23,197,2,2,48,249,22,171,15,23,200,1,249,22,162,15,28, +249,22,148,16,0,27,35,114,120,34,94,92,92,92,92,92,92,92,92,91,63, +93,92,92,92,92,91,97,45,122,93,58,34,23,199,2,251,22,148,8,2,52, +250,22,147,8,23,204,2,40,41,5,1,92,249,22,147,8,23,203,1,42,28, +249,22,148,16,2,83,23,199,2,249,22,148,8,2,52,249,22,147,8,23,201, +1,40,28,249,22,148,16,2,83,23,199,2,249,22,148,8,2,52,249,22,147, +8,23,201,1,40,28,249,22,148,16,0,14,35,114,120,34,94,92,92,92,92, +92,92,92,92,34,23,199,2,249,22,148,8,5,4,85,78,67,92,249,22,147, +8,23,201,1,38,28,249,22,148,16,0,12,35,114,120,34,94,91,97,45,122, +93,58,34,23,199,2,249,22,148,8,250,22,147,8,23,202,2,36,37,249,22, +147,8,23,201,1,38,86,94,23,197,1,12,23,199,1,12,32,85,88,163,8, +36,39,53,11,70,102,111,117,110,100,45,101,120,101,99,222,33,88,32,86,88, +163,8,36,40,58,11,64,110,101,120,116,222,33,87,27,248,22,180,15,23,196, +2,28,249,22,164,9,23,195,2,23,197,1,11,28,248,22,176,15,23,194,2, +27,249,22,171,15,23,197,1,23,196,1,28,23,197,2,90,159,39,11,89,161, +39,36,11,248,22,174,15,23,197,2,86,95,23,195,1,23,194,1,27,28,23, +202,2,27,248,22,180,15,23,199,2,28,249,22,164,9,23,195,2,23,200,2, +11,28,248,22,176,15,23,194,2,250,2,85,23,205,2,23,206,2,249,22,171, +15,23,200,2,23,198,1,250,2,85,23,205,2,23,206,2,23,196,1,11,28, +23,193,2,192,86,94,23,193,1,27,28,248,22,153,15,23,196,2,27,249,22, +171,15,23,198,2,23,205,2,28,28,248,22,166,15,193,10,248,22,165,15,193, +192,11,11,28,23,193,2,192,86,94,23,193,1,28,23,203,2,11,27,248,22, +180,15,23,200,2,28,249,22,164,9,23,195,2,23,201,1,11,28,248,22,176, +15,23,194,2,250,2,85,23,206,1,23,207,1,249,22,171,15,23,201,1,23, +198,1,250,2,85,205,206,195,192,86,94,23,194,1,28,23,196,2,90,159,39, +11,89,161,39,36,11,248,22,174,15,23,197,2,86,95,23,195,1,23,194,1, +27,28,23,201,2,27,248,22,180,15,23,199,2,28,249,22,164,9,23,195,2, +23,200,2,11,28,248,22,176,15,23,194,2,250,2,85,23,204,2,23,205,2, +249,22,171,15,23,200,2,23,198,1,250,2,85,23,204,2,23,205,2,23,196, +1,11,28,23,193,2,192,86,94,23,193,1,27,28,248,22,153,15,23,196,2, +27,249,22,171,15,23,198,2,23,204,2,28,28,248,22,166,15,193,10,248,22, +165,15,193,192,11,11,28,23,193,2,192,86,94,23,193,1,28,23,202,2,11, +27,248,22,180,15,23,200,2,28,249,22,164,9,23,195,2,23,201,1,11,28, +248,22,176,15,23,194,2,250,2,85,23,205,1,23,206,1,249,22,171,15,23, +201,1,23,198,1,250,2,85,204,205,195,192,28,23,193,2,90,159,39,11,89, +161,39,36,11,248,22,174,15,23,199,2,86,95,23,195,1,23,194,1,27,28, +23,198,2,251,2,86,23,198,2,23,203,2,23,201,2,23,202,2,11,28,23, +193,2,192,86,94,23,193,1,27,28,248,22,153,15,195,27,249,22,171,15,197, +200,28,28,248,22,166,15,193,10,248,22,165,15,193,192,11,11,28,192,192,28, +198,11,251,2,86,198,203,201,202,194,32,89,88,163,8,36,40,58,11,2,55, +222,33,90,28,248,22,87,23,197,2,11,27,248,22,179,15,248,22,80,23,199, +2,27,249,22,171,15,23,196,1,23,197,2,28,248,22,165,15,23,194,2,250, +2,85,198,199,195,86,94,23,193,1,27,248,22,81,23,200,1,28,248,22,87, +23,194,2,11,27,248,22,179,15,248,22,80,23,196,2,27,249,22,171,15,23, +196,1,23,200,2,28,248,22,165,15,23,194,2,250,2,85,201,202,195,86,94, +23,193,1,27,248,22,81,23,197,1,28,248,22,87,23,194,2,11,27,248,22, +179,15,248,22,80,195,27,249,22,171,15,23,196,1,202,28,248,22,165,15,193, +250,2,85,204,205,195,251,2,89,204,205,206,248,22,81,199,86,95,28,28,248, 22,153,15,23,195,2,10,28,248,22,147,7,23,195,2,28,248,22,176,15,23, -195,2,10,248,22,177,15,23,195,2,11,12,250,22,171,11,2,44,2,45,23, -197,2,28,28,248,22,154,15,23,195,2,249,22,162,9,248,22,155,15,23,197, -2,2,46,249,22,162,9,247,22,174,8,2,46,27,28,248,22,147,7,23,196, -2,23,195,2,248,22,159,8,248,22,158,15,23,197,2,28,249,22,148,16,2, -74,23,195,2,86,94,23,193,1,28,248,22,147,7,23,196,2,248,22,161,15, -23,196,1,194,27,248,22,186,7,23,195,1,249,22,162,15,248,22,162,8,250, -22,156,16,2,75,28,249,22,148,16,2,76,23,201,2,23,199,1,250,22,156, -16,2,77,23,202,1,2,47,80,159,44,37,38,2,46,28,248,22,147,7,23, -195,2,248,22,161,15,23,195,1,193,0,28,35,114,120,34,94,92,92,92,92, -92,92,92,92,91,63,93,92,92,92,92,85,78,67,92,92,92,92,34,86,95, -28,28,28,248,22,153,15,23,195,2,10,28,248,22,147,7,23,195,2,28,248, -22,176,15,23,195,2,10,248,22,177,15,23,195,2,11,10,248,22,154,15,23, -195,2,12,252,22,171,11,2,5,2,48,36,23,199,2,23,200,2,28,28,28, -248,22,153,15,23,196,2,10,28,248,22,147,7,23,196,2,28,248,22,176,15, -23,196,2,10,248,22,177,15,23,196,2,11,10,248,22,154,15,23,196,2,12, -252,22,171,11,2,5,2,48,37,23,199,2,23,200,2,27,28,248,22,154,15, -23,196,2,248,22,155,15,23,196,2,247,22,156,15,86,95,28,28,248,22,178, -15,23,196,2,10,249,22,162,9,247,22,156,15,23,195,2,12,253,22,173,11, -2,5,6,54,54,112,97,116,104,32,105,115,32,110,111,116,32,99,111,109,112, -108,101,116,101,32,97,110,100,32,110,111,116,32,116,104,101,32,112,108,97,116, -102,111,114,109,39,115,32,99,111,110,118,101,110,116,105,111,110,2,49,23,201, -2,6,24,24,112,108,97,116,102,111,114,109,32,99,111,110,118,101,110,116,105, -111,110,32,116,121,112,101,247,22,156,15,28,249,22,162,9,28,248,22,154,15, -23,199,2,248,22,155,15,23,199,2,247,22,156,15,23,195,2,12,253,22,173, -11,2,5,6,37,37,103,105,118,101,110,32,112,97,116,104,115,32,117,115,101, -32,100,105,102,102,101,114,101,110,116,32,99,111,110,118,101,110,116,105,111,110, -115,2,49,23,201,2,6,9,9,114,111,111,116,32,112,97,116,104,23,202,2, -27,27,248,22,182,15,28,248,22,178,15,23,199,2,23,198,1,248,22,179,15, -23,199,1,86,94,28,28,248,22,154,15,23,194,2,10,28,248,22,153,15,23, -194,2,10,28,248,22,147,7,23,194,2,28,248,22,176,15,23,194,2,10,248, -22,177,15,23,194,2,11,12,250,22,171,11,2,44,2,45,23,196,2,28,28, -248,22,154,15,23,194,2,249,22,162,9,248,22,155,15,23,196,2,2,46,249, -22,162,9,247,22,174,8,2,46,27,28,248,22,147,7,23,195,2,23,194,2, -248,22,159,8,248,22,158,15,23,196,2,28,249,22,148,16,2,74,23,195,2, -86,94,23,193,1,28,248,22,147,7,23,195,2,248,22,161,15,23,195,1,193, -27,248,22,186,7,23,195,1,249,22,162,15,248,22,162,8,250,22,156,16,2, -75,28,249,22,148,16,2,76,23,201,2,23,199,1,250,22,156,16,2,77,23, -202,1,2,47,80,159,47,37,38,2,46,28,248,22,147,7,23,194,2,248,22, -161,15,23,194,1,192,27,248,22,158,15,23,195,2,28,249,22,162,9,23,197, -2,64,117,110,105,120,28,249,22,144,8,23,195,1,5,1,47,86,95,23,195, -1,23,194,1,28,248,22,154,15,23,199,2,197,248,22,161,15,23,199,1,249, -22,171,15,23,200,1,249,22,162,15,249,22,147,8,248,22,158,15,23,201,1, -37,23,199,1,28,249,22,162,9,23,197,2,2,46,249,22,171,15,23,200,1, -249,22,162,15,28,249,22,148,16,0,27,35,114,120,34,94,92,92,92,92,92, -92,92,92,91,63,93,92,92,92,92,91,97,45,122,93,58,34,23,199,2,251, -22,148,8,2,50,250,22,147,8,23,204,2,40,41,5,1,92,249,22,147,8, -23,203,1,42,28,249,22,148,16,2,79,23,199,2,249,22,148,8,2,50,249, -22,147,8,23,201,1,40,28,249,22,148,16,2,79,23,199,2,249,22,148,8, -2,50,249,22,147,8,23,201,1,40,28,249,22,148,16,0,14,35,114,120,34, -94,92,92,92,92,92,92,92,92,34,23,199,2,249,22,148,8,5,4,85,78, -67,92,249,22,147,8,23,201,1,38,28,249,22,148,16,0,12,35,114,120,34, -94,91,97,45,122,93,58,34,23,199,2,249,22,148,8,250,22,147,8,23,202, -2,36,37,249,22,147,8,23,201,1,38,86,94,23,197,1,12,23,199,1,12, -32,81,88,163,8,36,39,53,11,70,102,111,117,110,100,45,101,120,101,99,222, -33,84,32,82,88,163,8,36,40,58,11,64,110,101,120,116,222,33,83,27,248, -22,180,15,23,196,2,28,249,22,164,9,23,195,2,23,197,1,11,28,248,22, -176,15,23,194,2,27,249,22,171,15,23,197,1,23,196,1,28,23,197,2,90, -159,39,11,89,161,39,36,11,248,22,174,15,23,197,2,86,95,23,195,1,23, -194,1,27,28,23,202,2,27,248,22,180,15,23,199,2,28,249,22,164,9,23, -195,2,23,200,2,11,28,248,22,176,15,23,194,2,250,2,81,23,205,2,23, -206,2,249,22,171,15,23,200,2,23,198,1,250,2,81,23,205,2,23,206,2, -23,196,1,11,28,23,193,2,192,86,94,23,193,1,27,28,248,22,153,15,23, -196,2,27,249,22,171,15,23,198,2,23,205,2,28,28,248,22,166,15,193,10, -248,22,165,15,193,192,11,11,28,23,193,2,192,86,94,23,193,1,28,23,203, -2,11,27,248,22,180,15,23,200,2,28,249,22,164,9,23,195,2,23,201,1, -11,28,248,22,176,15,23,194,2,250,2,81,23,206,1,23,207,1,249,22,171, -15,23,201,1,23,198,1,250,2,81,205,206,195,192,86,94,23,194,1,28,23, -196,2,90,159,39,11,89,161,39,36,11,248,22,174,15,23,197,2,86,95,23, -195,1,23,194,1,27,28,23,201,2,27,248,22,180,15,23,199,2,28,249,22, -164,9,23,195,2,23,200,2,11,28,248,22,176,15,23,194,2,250,2,81,23, -204,2,23,205,2,249,22,171,15,23,200,2,23,198,1,250,2,81,23,204,2, -23,205,2,23,196,1,11,28,23,193,2,192,86,94,23,193,1,27,28,248,22, -153,15,23,196,2,27,249,22,171,15,23,198,2,23,204,2,28,28,248,22,166, -15,193,10,248,22,165,15,193,192,11,11,28,23,193,2,192,86,94,23,193,1, -28,23,202,2,11,27,248,22,180,15,23,200,2,28,249,22,164,9,23,195,2, -23,201,1,11,28,248,22,176,15,23,194,2,250,2,81,23,205,1,23,206,1, -249,22,171,15,23,201,1,23,198,1,250,2,81,204,205,195,192,28,23,193,2, -90,159,39,11,89,161,39,36,11,248,22,174,15,23,199,2,86,95,23,195,1, -23,194,1,27,28,23,198,2,251,2,82,23,198,2,23,203,2,23,201,2,23, -202,2,11,28,23,193,2,192,86,94,23,193,1,27,28,248,22,153,15,195,27, -249,22,171,15,197,200,28,28,248,22,166,15,193,10,248,22,165,15,193,192,11, -11,28,192,192,28,198,11,251,2,82,198,203,201,202,194,32,85,88,163,8,36, -40,58,11,2,53,222,33,86,28,248,22,87,23,197,2,11,27,248,22,179,15, -248,22,80,23,199,2,27,249,22,171,15,23,196,1,23,197,2,28,248,22,165, -15,23,194,2,250,2,81,198,199,195,86,94,23,193,1,27,248,22,81,23,200, +195,2,10,248,22,177,15,23,195,2,11,12,250,22,171,11,2,6,2,53,23, +197,2,28,28,23,195,2,28,28,248,22,153,15,23,196,2,10,28,248,22,147, +7,23,196,2,28,248,22,176,15,23,196,2,10,248,22,177,15,23,196,2,11, +248,22,176,15,23,196,2,11,10,12,250,22,171,11,2,6,6,45,45,40,111, +114,47,99,32,35,102,32,40,97,110,100,47,99,32,112,97,116,104,45,115,116, +114,105,110,103,63,32,114,101,108,97,116,105,118,101,45,112,97,116,104,63,41, +41,23,198,2,28,28,248,22,176,15,23,195,2,90,159,39,11,89,161,39,36, +11,248,22,174,15,23,198,2,249,22,162,9,194,2,54,11,27,249,22,169,8, +247,22,168,8,5,4,80,65,84,72,27,28,23,194,2,249,80,158,40,41,249, +22,159,8,23,198,1,7,63,9,86,94,23,194,1,9,27,28,249,22,162,9, +247,22,174,8,2,48,249,22,79,248,22,162,15,5,1,46,23,196,1,23,194, 1,28,248,22,87,23,194,2,11,27,248,22,179,15,248,22,80,23,196,2,27, -249,22,171,15,23,196,1,23,200,2,28,248,22,165,15,23,194,2,250,2,81, -201,202,195,86,94,23,193,1,27,248,22,81,23,197,1,28,248,22,87,23,194, -2,11,27,248,22,179,15,248,22,80,195,27,249,22,171,15,23,196,1,202,28, -248,22,165,15,193,250,2,81,204,205,195,251,2,85,204,205,206,248,22,81,199, -86,95,28,28,248,22,153,15,23,195,2,10,28,248,22,147,7,23,195,2,28, +249,22,171,15,23,196,1,23,201,2,28,248,22,165,15,23,194,2,250,2,85, +202,203,195,86,94,23,193,1,27,248,22,81,23,197,1,28,248,22,87,23,194, +2,11,27,248,22,179,15,248,22,80,23,196,2,27,249,22,171,15,23,196,1, +23,204,2,28,248,22,165,15,23,194,2,250,2,85,205,206,195,86,94,23,193, +1,27,248,22,81,23,197,1,28,248,22,87,23,194,2,11,27,248,22,179,15, +248,22,80,195,27,249,22,171,15,23,196,1,206,28,248,22,165,15,193,250,2, +85,23,16,23,17,195,251,2,89,23,16,23,17,23,18,248,22,81,199,27,248, +22,179,15,23,196,1,28,248,22,165,15,193,250,2,85,198,199,195,11,250,80, +159,39,40,39,196,197,11,250,80,159,39,40,39,196,11,11,32,94,88,163,8, +36,39,57,11,2,55,222,33,96,0,8,35,114,120,35,34,92,34,34,27,249, +22,144,16,23,197,2,23,198,2,28,23,193,2,86,94,23,196,1,27,248,22, +101,23,195,2,27,27,248,22,110,23,197,1,27,249,22,144,16,23,201,2,23, +196,2,28,23,193,2,86,94,23,194,1,27,248,22,101,23,195,2,27,250,2, +94,23,203,2,23,204,1,248,22,110,23,199,1,28,249,22,144,8,23,196,2, +2,56,249,22,93,23,202,2,194,249,22,79,248,22,162,15,28,249,22,162,9, +247,22,174,8,2,48,250,22,156,16,2,95,23,200,1,2,56,23,197,1,194, +86,95,23,199,1,23,193,1,28,249,22,144,8,23,196,2,2,56,249,22,93, +23,200,2,9,249,22,79,248,22,162,15,28,249,22,162,9,247,22,174,8,2, +48,250,22,156,16,2,95,23,200,1,2,56,23,197,1,9,28,249,22,144,8, +23,196,2,2,56,249,22,93,197,194,86,94,23,196,1,249,22,79,248,22,162, +15,28,249,22,162,9,247,22,174,8,2,48,250,22,156,16,2,95,23,200,1, +2,56,23,197,1,194,86,94,23,193,1,28,249,22,144,8,23,198,2,2,56, +249,22,93,195,9,86,94,23,194,1,249,22,79,248,22,162,15,28,249,22,162, +9,247,22,174,8,2,48,250,22,156,16,2,95,23,202,1,2,56,23,199,1, +9,86,95,28,28,248,22,136,8,194,10,248,22,147,7,194,12,250,22,171,11, +2,7,6,21,21,40,111,114,47,99,32,98,121,116,101,115,63,32,115,116,114, +105,110,103,63,41,196,28,28,248,22,88,195,249,22,4,22,153,15,196,11,12, +250,22,171,11,2,7,6,14,14,40,108,105,115,116,111,102,32,112,97,116,104, +63,41,197,250,2,94,197,195,28,248,22,147,7,197,248,22,161,8,197,196,86, +94,28,28,248,22,153,15,23,195,2,10,28,248,22,147,7,23,195,2,28,248, +22,176,15,23,195,2,10,248,22,177,15,23,195,2,11,12,250,22,171,11,23, +196,2,2,53,23,197,2,28,248,22,176,15,23,195,2,12,251,22,173,11,23, +197,1,2,57,2,51,23,198,1,86,94,28,28,248,22,153,15,23,195,2,10, +28,248,22,147,7,23,195,2,28,248,22,176,15,23,195,2,10,248,22,177,15, +23,195,2,11,12,250,22,171,11,23,196,2,2,53,23,197,2,28,248,22,176, +15,23,195,2,12,251,22,173,11,23,197,1,2,57,2,51,23,198,1,86,94, +86,94,28,28,248,22,153,15,23,195,2,10,28,248,22,147,7,23,195,2,28, 248,22,176,15,23,195,2,10,248,22,177,15,23,195,2,11,12,250,22,171,11, -2,6,2,51,23,197,2,28,28,23,195,2,28,28,248,22,153,15,23,196,2, -10,28,248,22,147,7,23,196,2,28,248,22,176,15,23,196,2,10,248,22,177, -15,23,196,2,11,248,22,176,15,23,196,2,11,10,12,250,22,171,11,2,6, -6,45,45,40,111,114,47,99,32,35,102,32,40,97,110,100,47,99,32,112,97, -116,104,45,115,116,114,105,110,103,63,32,114,101,108,97,116,105,118,101,45,112, -97,116,104,63,41,41,23,198,2,28,28,248,22,176,15,23,195,2,90,159,39, -11,89,161,39,36,11,248,22,174,15,23,198,2,249,22,162,9,194,2,52,11, -27,249,22,169,8,247,22,168,8,5,4,80,65,84,72,27,28,23,194,2,249, -80,158,40,41,249,22,159,8,23,198,1,7,63,9,86,94,23,194,1,9,27, -28,249,22,162,9,247,22,174,8,2,46,249,22,79,248,22,162,15,5,1,46, -23,196,1,23,194,1,28,248,22,87,23,194,2,11,27,248,22,179,15,248,22, -80,23,196,2,27,249,22,171,15,23,196,1,23,201,2,28,248,22,165,15,23, -194,2,250,2,81,202,203,195,86,94,23,193,1,27,248,22,81,23,197,1,28, -248,22,87,23,194,2,11,27,248,22,179,15,248,22,80,23,196,2,27,249,22, -171,15,23,196,1,23,204,2,28,248,22,165,15,23,194,2,250,2,81,205,206, -195,86,94,23,193,1,27,248,22,81,23,197,1,28,248,22,87,23,194,2,11, -27,248,22,179,15,248,22,80,195,27,249,22,171,15,23,196,1,206,28,248,22, -165,15,193,250,2,81,23,16,23,17,195,251,2,85,23,16,23,17,23,18,248, -22,81,199,27,248,22,179,15,23,196,1,28,248,22,165,15,193,250,2,81,198, -199,195,11,250,80,159,39,40,39,196,197,11,250,80,159,39,40,39,196,11,11, -32,90,88,163,8,36,39,57,11,2,53,222,33,92,0,8,35,114,120,35,34, -92,34,34,27,249,22,144,16,23,197,2,23,198,2,28,23,193,2,86,94,23, -196,1,27,248,22,101,23,195,2,27,27,248,22,110,23,197,1,27,249,22,144, -16,23,201,2,23,196,2,28,23,193,2,86,94,23,194,1,27,248,22,101,23, -195,2,27,250,2,90,23,203,2,23,204,1,248,22,110,23,199,1,28,249,22, -144,8,23,196,2,2,54,249,22,93,23,202,2,194,249,22,79,248,22,162,15, -28,249,22,162,9,247,22,174,8,2,46,250,22,156,16,2,91,23,200,1,2, -54,23,197,1,194,86,95,23,199,1,23,193,1,28,249,22,144,8,23,196,2, -2,54,249,22,93,23,200,2,9,249,22,79,248,22,162,15,28,249,22,162,9, -247,22,174,8,2,46,250,22,156,16,2,91,23,200,1,2,54,23,197,1,9, -28,249,22,144,8,23,196,2,2,54,249,22,93,197,194,86,94,23,196,1,249, -22,79,248,22,162,15,28,249,22,162,9,247,22,174,8,2,46,250,22,156,16, -2,91,23,200,1,2,54,23,197,1,194,86,94,23,193,1,28,249,22,144,8, -23,198,2,2,54,249,22,93,195,9,86,94,23,194,1,249,22,79,248,22,162, -15,28,249,22,162,9,247,22,174,8,2,46,250,22,156,16,2,91,23,202,1, -2,54,23,199,1,9,86,95,28,28,248,22,136,8,194,10,248,22,147,7,194, -12,250,22,171,11,2,7,6,21,21,40,111,114,47,99,32,98,121,116,101,115, -63,32,115,116,114,105,110,103,63,41,196,28,28,248,22,88,195,249,22,4,22, -153,15,196,11,12,250,22,171,11,2,7,6,14,14,40,108,105,115,116,111,102, -32,112,97,116,104,63,41,197,250,2,90,197,195,28,248,22,147,7,197,248,22, -161,8,197,196,86,94,28,28,248,22,153,15,23,195,2,10,28,248,22,147,7, -23,195,2,28,248,22,176,15,23,195,2,10,248,22,177,15,23,195,2,11,12, -250,22,171,11,23,196,2,2,51,23,197,2,28,248,22,176,15,23,195,2,12, -251,22,173,11,23,197,1,2,55,2,49,23,198,1,86,94,28,28,248,22,153, -15,23,195,2,10,28,248,22,147,7,23,195,2,28,248,22,176,15,23,195,2, -10,248,22,177,15,23,195,2,11,12,250,22,171,11,23,196,2,2,51,23,197, -2,28,248,22,176,15,23,195,2,12,251,22,173,11,23,197,1,2,55,2,49, -23,198,1,86,94,86,94,28,28,248,22,153,15,23,195,2,10,28,248,22,147, -7,23,195,2,28,248,22,176,15,23,195,2,10,248,22,177,15,23,195,2,11, -12,250,22,171,11,23,196,2,2,51,23,197,2,28,248,22,176,15,23,195,2, -86,94,23,194,1,12,251,22,173,11,23,197,2,2,55,2,49,23,198,1,249, -22,3,20,20,94,88,163,8,36,37,47,11,9,223,2,33,95,23,195,1,23, -197,1,28,28,248,22,0,23,195,2,249,22,50,23,196,2,37,11,12,250,22, -171,11,23,196,1,2,56,23,197,1,86,94,28,28,248,22,153,15,23,194,2, -10,28,248,22,147,7,23,194,2,28,248,22,176,15,23,194,2,10,248,22,177, -15,23,194,2,11,12,250,22,171,11,2,11,2,51,23,196,2,28,248,22,176, -15,23,194,2,12,251,22,173,11,2,11,2,55,2,49,23,197,1,86,95,86, -94,86,94,28,28,248,22,153,15,23,196,2,10,28,248,22,147,7,23,196,2, -28,248,22,176,15,23,196,2,10,248,22,177,15,23,196,2,11,12,250,22,171, -11,2,11,2,51,23,198,2,28,248,22,176,15,23,196,2,12,251,22,173,11, -2,11,2,55,2,49,23,199,2,249,22,3,32,0,88,163,8,36,37,46,11, -9,222,33,98,23,198,2,28,28,248,22,0,23,195,2,249,22,50,23,196,2, -37,11,12,250,22,171,11,2,11,2,56,23,197,2,251,80,158,40,46,23,198, -1,23,199,1,23,200,1,11,86,94,28,28,248,22,153,15,23,194,2,10,28, -248,22,147,7,23,194,2,28,248,22,176,15,23,194,2,10,248,22,177,15,23, -194,2,11,12,250,22,171,11,2,13,2,51,23,196,2,28,248,22,176,15,23, -194,2,12,251,22,173,11,2,13,2,55,2,49,23,197,1,86,96,86,94,28, -28,248,22,153,15,23,196,2,10,28,248,22,147,7,23,196,2,28,248,22,176, -15,23,196,2,10,248,22,177,15,23,196,2,11,12,250,22,171,11,2,13,2, -51,23,198,2,28,248,22,176,15,23,196,2,12,251,22,173,11,2,13,2,55, -2,49,23,199,2,86,94,86,94,28,28,248,22,153,15,23,197,2,10,28,248, -22,147,7,23,197,2,28,248,22,176,15,23,197,2,10,248,22,177,15,23,197, -2,11,12,250,22,171,11,2,13,2,51,23,199,2,28,248,22,176,15,23,197, -2,12,251,22,173,11,2,13,2,55,2,49,23,200,2,249,22,3,32,0,88, -163,8,36,37,46,11,9,222,33,100,23,199,2,28,28,248,22,0,23,195,2, -249,22,50,23,196,2,37,11,12,250,22,171,11,2,13,2,56,23,197,2,251, -80,158,40,46,23,198,1,23,200,1,23,201,1,23,199,1,27,248,22,130,16, -2,59,28,248,22,178,15,23,194,2,192,27,28,248,22,176,15,23,195,2,20, -13,159,80,159,38,55,37,250,80,159,41,56,37,249,22,33,11,80,159,43,55, -37,22,131,16,248,22,130,16,2,60,27,248,22,130,16,2,61,250,80,159,42, -40,39,23,196,1,23,198,2,11,11,28,23,193,2,192,86,94,23,193,1,27, -249,22,179,15,27,248,22,130,16,2,61,250,80,159,45,40,39,23,196,1,11, -11,248,22,130,16,2,60,90,159,39,11,89,161,39,36,11,248,22,174,15,23, -197,1,86,95,23,195,1,23,194,1,249,22,179,15,23,200,1,23,195,1,27, -249,22,171,15,23,196,1,6,11,11,99,111,110,102,105,103,46,114,107,116,100, -27,28,248,22,165,15,23,195,2,249,22,132,6,23,196,1,22,142,6,11,28, -192,192,21,17,1,0,28,248,22,147,7,23,195,2,27,248,22,161,15,23,196, -1,28,248,22,178,15,23,194,2,192,249,22,179,15,23,195,1,27,27,248,22, -130,16,2,62,28,248,22,178,15,23,194,2,192,28,248,22,177,15,23,194,2, -249,22,179,15,23,195,1,249,22,179,15,250,80,159,48,40,39,248,22,130,16, -2,61,11,10,248,22,130,16,2,60,250,80,159,44,40,39,248,22,130,16,2, -61,23,196,1,10,28,23,193,2,192,86,94,23,193,1,248,22,130,16,2,60, -28,248,22,136,8,23,195,2,27,248,22,162,15,23,196,1,28,248,22,178,15, -23,194,2,192,249,22,179,15,23,195,1,27,27,248,22,130,16,2,62,28,248, -22,178,15,23,194,2,192,28,248,22,177,15,23,194,2,249,22,179,15,23,195, -1,249,22,179,15,250,80,159,48,40,39,248,22,130,16,2,61,11,10,248,22, -130,16,2,60,250,80,159,44,40,39,248,22,130,16,2,61,23,196,1,10,28, -23,193,2,192,86,94,23,193,1,248,22,130,16,2,60,28,248,22,153,15,23, -195,2,28,248,22,178,15,23,195,2,193,249,22,179,15,23,196,1,27,27,248, -22,130,16,2,62,28,248,22,178,15,23,194,2,192,28,248,22,177,15,23,194, -2,249,22,179,15,23,195,1,249,22,179,15,250,80,159,47,40,39,248,22,130, -16,2,61,11,10,248,22,130,16,2,60,250,80,159,43,40,39,248,22,130,16, -2,61,23,196,1,10,28,23,193,2,192,86,94,23,193,1,248,22,130,16,2, -60,193,28,248,22,178,15,23,195,2,193,249,22,179,15,23,196,1,27,27,248, -22,130,16,2,62,28,248,22,178,15,23,194,2,192,28,248,22,177,15,23,194, -2,249,22,179,15,23,195,1,249,22,179,15,250,80,159,47,40,39,248,22,130, -16,2,61,11,10,248,22,130,16,2,60,250,80,159,43,40,39,248,22,130,16, -2,61,23,196,1,10,28,23,193,2,192,86,94,23,193,1,248,22,130,16,2, -60,28,248,22,178,15,23,195,2,193,28,248,22,177,15,23,195,2,249,22,179, -15,23,196,1,249,22,179,15,250,80,159,43,40,39,248,22,130,16,2,61,11, -10,248,22,130,16,2,60,250,80,159,39,40,39,248,22,130,16,2,61,196,10, -28,248,22,87,23,196,2,9,28,248,22,80,23,196,2,249,22,79,248,80,159, -39,58,39,248,22,135,18,23,199,2,27,248,22,136,18,23,199,1,28,248,22, -87,23,194,2,9,28,248,22,80,23,194,2,249,22,79,248,80,159,42,58,39, -248,22,135,18,23,197,2,27,248,22,136,18,23,197,1,28,248,22,87,23,194, -2,9,28,248,22,80,23,194,2,249,22,79,248,80,159,45,58,39,248,22,135, -18,23,197,2,249,80,159,46,8,42,39,23,204,1,248,22,136,18,23,198,1, -249,22,93,23,202,2,249,80,159,46,8,42,39,23,204,1,248,22,136,18,23, -198,1,249,22,93,23,199,2,27,248,22,136,18,23,197,1,28,248,22,87,23, -194,2,9,28,248,22,80,23,194,2,249,22,79,248,80,159,45,58,39,248,22, -135,18,23,197,2,249,80,159,46,8,42,39,23,204,1,248,22,136,18,23,198, -1,249,22,93,23,202,2,249,80,159,46,8,42,39,23,204,1,248,22,136,18, -23,198,1,249,22,93,23,196,2,27,248,22,136,18,23,199,1,28,248,22,87, -23,194,2,9,28,248,22,80,23,194,2,249,22,79,248,80,159,42,58,39,248, -22,135,18,23,197,2,27,248,22,136,18,23,197,1,28,248,22,87,23,194,2, -9,28,248,22,80,23,194,2,249,22,79,248,80,159,45,58,39,248,22,135,18, -23,197,2,249,80,159,46,8,42,39,23,204,1,248,22,136,18,23,198,1,249, -22,93,23,202,2,249,80,159,46,8,42,39,23,204,1,248,22,136,18,23,198, -1,249,22,93,23,199,2,27,248,22,136,18,23,197,1,28,248,22,87,23,194, -2,9,28,248,22,80,23,194,2,249,22,79,248,80,159,45,58,39,248,22,135, -18,23,197,2,249,80,159,46,8,42,39,23,204,1,248,22,136,18,23,198,1, -249,22,93,23,202,2,249,80,159,46,8,42,39,23,204,1,248,22,136,18,23, -198,1,27,250,22,157,2,23,198,1,23,199,1,11,28,192,249,80,159,39,8, -42,39,198,194,196,27,27,248,22,130,16,2,59,28,248,22,178,15,23,194,2, -192,27,28,248,22,176,15,23,195,2,20,13,159,80,159,39,55,37,250,80,159, -42,56,37,249,22,33,11,80,159,44,55,37,22,131,16,248,22,130,16,2,60, -27,248,22,130,16,2,61,250,80,159,43,40,39,23,196,1,23,198,2,11,11, -28,23,193,2,192,86,94,23,193,1,27,249,22,179,15,27,248,22,130,16,2, -61,250,80,159,46,40,39,23,196,1,11,11,248,22,130,16,2,60,90,159,39, -11,89,161,39,36,11,248,22,174,15,23,197,1,86,95,23,195,1,23,194,1, -249,22,179,15,23,200,1,23,195,1,27,248,80,159,39,57,39,23,195,1,27, -248,80,159,40,58,39,27,250,22,157,2,23,199,2,70,108,105,110,107,115,45, -102,105,108,101,11,28,23,193,2,192,86,94,23,193,1,249,22,171,15,27,250, -22,157,2,23,202,2,67,108,105,98,45,100,105,114,11,28,192,192,62,117,112, -2,58,248,22,185,8,250,80,159,43,8,25,39,23,198,1,78,108,105,110,107, -115,45,115,101,97,114,99,104,45,102,105,108,101,115,248,22,89,23,198,1,248, -22,161,13,23,194,1,249,22,16,80,159,38,8,30,38,28,248,22,181,12,23, -197,2,86,94,23,196,1,32,0,88,163,8,36,36,41,11,9,222,11,20,20, -94,88,163,8,36,36,43,11,9,223,3,33,110,23,196,1,32,112,88,163,8, -36,37,55,11,2,53,222,33,113,27,249,22,157,6,8,128,128,23,196,2,28, -248,22,142,7,23,194,2,9,249,22,79,23,195,1,27,249,22,157,6,8,128, -128,23,199,2,28,248,22,142,7,23,194,2,9,249,22,79,23,195,1,27,249, -22,157,6,8,128,128,23,202,2,28,248,22,142,7,23,194,2,9,249,22,79, -23,195,1,27,249,22,157,6,8,128,128,23,205,2,28,248,22,142,7,23,194, -2,9,249,22,79,23,195,1,248,2,112,23,206,1,27,249,22,157,6,8,128, -128,23,196,2,28,248,22,136,8,23,194,2,28,249,22,129,4,248,22,141,8, -23,196,2,8,128,128,249,22,1,22,148,8,249,22,79,23,197,1,27,249,22, -157,6,8,128,128,23,201,2,28,248,22,142,7,23,194,2,9,249,22,79,23, -195,1,27,249,22,157,6,8,128,128,23,204,2,28,248,22,142,7,23,194,2, -9,249,22,79,23,195,1,27,249,22,157,6,8,128,128,23,207,2,28,248,22, -142,7,23,194,2,9,249,22,79,23,195,1,27,249,22,157,6,8,128,128,23, -210,2,28,248,22,142,7,23,194,2,9,249,22,79,23,195,1,248,2,112,23, -211,1,192,192,248,22,191,5,23,194,1,20,13,159,80,159,37,8,32,37,80, -159,37,8,43,39,27,248,22,182,5,23,195,1,250,22,46,22,37,88,163,36, -36,8,24,11,9,223,3,33,114,20,20,94,88,163,36,36,43,11,9,223,3, -33,115,23,196,1,249,22,14,20,20,94,88,163,36,36,47,16,4,36,8,240, -0,64,0,0,8,129,32,36,9,224,2,3,33,116,23,196,1,80,159,38,8, -30,38,86,94,28,248,22,138,12,23,199,2,27,247,22,130,12,28,249,22,186, -11,23,195,2,2,63,251,22,190,11,23,197,1,2,63,250,22,131,8,2,64, -28,23,202,1,86,95,23,204,1,23,203,1,80,159,48,48,38,28,23,203,1, -86,94,23,204,1,80,159,48,51,38,249,22,182,8,80,159,50,8,26,38,23, -206,1,248,22,134,12,23,207,2,247,22,29,12,12,28,248,22,138,12,23,199, -2,86,94,23,198,1,248,23,194,1,247,22,137,2,197,86,95,28,248,22,138, -12,23,200,2,27,247,22,130,12,28,249,22,186,11,23,195,2,2,63,251,22, -190,11,23,197,1,2,63,250,22,131,8,2,64,28,23,203,2,80,159,49,48, -38,28,23,204,2,80,159,49,51,38,249,22,182,8,80,159,51,8,26,38,23, -207,2,248,22,134,12,23,208,2,247,22,29,12,12,28,23,193,2,28,23,195, -1,86,95,23,197,1,23,196,1,86,94,20,18,159,11,80,158,41,49,247,22, -137,2,20,18,159,11,80,158,41,50,23,193,1,28,23,196,1,86,94,23,197, -1,86,94,20,18,159,11,80,158,41,52,247,22,137,2,20,18,159,11,80,158, -41,53,23,193,1,86,94,250,22,183,8,80,159,44,8,28,38,23,200,2,247, -22,137,2,250,22,183,8,80,159,44,8,29,38,23,200,1,23,196,1,86,94, -23,195,1,12,28,248,22,138,12,23,200,2,86,94,23,199,1,248,23,195,1, -247,22,137,2,198,20,20,94,248,22,142,6,23,194,2,28,248,22,142,7,248, -22,142,6,23,195,1,12,248,22,167,11,6,30,30,101,120,112,101,99,116,101, -100,32,97,32,115,105,110,103,108,101,32,83,45,101,120,112,114,101,115,115,105, -111,110,248,22,191,5,23,194,1,28,248,22,88,23,194,2,28,28,249,22,189, -3,38,248,22,92,23,196,2,10,249,22,189,3,39,248,22,92,23,196,2,28, -28,248,22,147,7,248,22,80,23,195,2,10,249,22,162,9,64,114,111,111,116, -248,22,135,18,23,196,2,28,27,248,22,101,194,28,248,22,153,15,23,194,2, -10,28,248,22,147,7,23,194,2,28,248,22,176,15,23,194,2,10,248,22,177, -15,23,194,1,11,27,248,22,87,248,22,103,195,28,192,192,248,22,157,16,248, -22,110,195,11,11,11,11,250,22,155,2,23,197,1,23,198,1,249,22,79,23, -198,1,23,201,1,28,28,248,22,87,248,22,103,23,197,2,10,249,22,148,16, -248,22,110,23,198,2,247,22,165,8,27,248,22,181,15,249,22,179,15,248,22, -101,23,200,2,23,198,1,28,248,22,64,248,22,80,23,198,2,86,94,23,196, -1,86,94,28,250,22,157,2,23,197,2,11,11,12,250,22,155,2,23,197,2, -11,9,249,22,161,2,23,196,2,20,20,95,88,163,8,36,38,50,11,9,224, -3,2,33,123,23,195,1,23,196,1,27,248,22,67,248,22,135,18,23,199,1, -250,22,155,2,23,198,2,23,196,2,249,22,79,248,22,128,2,23,200,1,250, -22,157,2,23,203,1,23,201,1,9,12,250,22,155,2,23,196,1,23,197,1, -248,22,94,23,199,1,20,13,159,80,159,39,8,32,37,88,163,36,37,57,8, -240,0,144,0,4,9,227,3,2,1,0,4,33,118,27,28,23,194,2,80,159, -40,48,38,28,23,195,2,80,159,40,51,38,249,22,182,8,80,159,42,8,26, -38,23,198,2,27,248,80,159,42,8,31,39,23,195,2,28,249,22,164,9,23, -195,2,28,23,197,2,80,158,43,50,28,23,198,2,80,158,43,53,249,22,182, -8,80,159,45,8,29,38,23,201,2,86,96,23,199,1,23,194,1,23,193,1, -28,23,195,1,80,158,41,49,28,23,196,1,80,158,41,52,249,22,182,8,80, -159,43,8,28,38,23,199,1,20,13,159,80,159,41,8,32,37,20,20,94,88, -163,36,37,58,16,2,8,240,0,240,0,0,8,131,208,9,228,5,4,3,2, -6,0,33,119,23,199,1,20,13,159,80,159,41,55,37,26,29,80,159,8,34, -56,37,249,22,33,11,80,159,8,36,55,37,22,187,14,10,22,188,14,10,22, -189,14,10,22,128,15,10,22,191,14,10,22,129,15,10,22,190,14,10,22,130, -15,10,22,131,15,10,22,132,15,10,22,133,15,10,22,134,15,10,22,135,15, -11,22,185,14,11,27,249,22,182,5,23,197,2,66,98,105,110,97,114,121,27, -250,22,46,22,37,88,163,8,36,36,44,11,9,223,4,33,120,20,20,94,88, -163,36,36,43,11,9,223,4,33,121,23,197,1,86,94,28,28,248,22,88,23, -194,2,249,22,4,32,0,88,163,8,36,37,45,11,9,222,33,122,23,195,2, -11,12,248,22,167,11,6,18,18,105,108,108,45,102,111,114,109,101,100,32,99, -111,110,116,101,110,116,27,247,22,137,2,27,90,159,39,11,89,161,39,36,11, -248,22,174,15,23,202,1,192,86,96,249,22,3,20,20,94,88,163,8,36,37, -54,11,9,224,2,3,33,124,23,195,1,23,197,1,249,22,161,2,195,88,163, -8,36,38,48,11,9,223,3,33,125,28,23,199,1,86,94,20,18,159,11,80, -158,45,49,193,20,18,159,11,80,158,45,50,196,28,23,200,1,86,94,20,18, -159,11,80,158,45,52,193,20,18,159,11,80,158,45,53,196,86,94,250,22,183, -8,80,159,48,8,28,38,23,204,2,196,250,22,183,8,80,159,48,8,29,38, -23,204,1,23,200,1,193,248,22,8,20,20,96,88,163,8,32,37,8,43,16, -4,8,240,0,240,0,0,8,240,27,180,0,0,37,36,9,226,1,4,3,2, -33,126,23,195,1,23,196,1,23,197,1,0,7,35,114,120,34,47,43,34,28, -248,22,147,7,23,195,2,27,249,22,146,16,2,128,2,23,197,2,28,23,193, -2,28,249,22,189,3,248,22,100,23,196,2,248,22,179,3,248,22,150,7,23, -199,2,249,22,7,250,22,169,7,23,200,1,36,248,22,100,23,199,1,23,198, -1,249,22,7,250,22,169,7,23,200,2,36,248,22,100,23,199,2,249,22,79, -249,22,169,7,23,201,1,248,22,102,23,200,1,23,200,1,249,22,7,23,197, -1,23,198,1,90,159,39,11,89,161,39,36,11,248,22,174,15,23,198,1,86, -94,23,195,1,28,249,22,162,9,23,195,2,2,52,86,94,23,193,1,249,22, -7,23,196,1,23,200,1,27,249,22,79,23,197,1,23,201,1,28,248,22,147, -7,23,195,2,27,249,22,146,16,2,128,2,23,197,2,28,23,193,2,28,249, -22,189,3,248,22,100,23,196,2,248,22,179,3,248,22,150,7,23,199,2,249, -22,7,250,22,169,7,23,200,1,36,248,22,100,23,199,1,23,196,1,249,22, -7,250,22,169,7,23,200,2,36,248,22,100,23,199,2,249,22,79,249,22,169, -7,23,201,1,248,22,102,23,200,1,23,198,1,249,22,7,23,197,1,23,196, -1,90,159,39,11,89,161,39,36,11,248,22,174,15,23,198,1,86,94,23,195, -1,28,249,22,162,9,23,195,2,2,52,86,94,23,193,1,249,22,7,23,196, -1,23,198,1,249,80,159,45,8,34,39,194,249,22,79,197,199,28,249,22,129, -4,23,197,2,248,22,181,8,80,159,39,8,26,38,9,27,250,80,159,40,8, -33,39,11,11,23,199,2,250,22,93,250,22,157,2,23,199,2,23,201,2,9, -250,22,157,2,23,199,1,11,9,27,248,22,178,3,23,201,1,28,249,22,129, -4,23,195,2,248,22,181,8,80,159,44,8,26,38,9,27,250,80,159,45,8, -33,39,11,11,23,197,2,250,22,93,250,22,157,2,23,199,2,23,206,2,9, -250,22,157,2,23,199,1,11,9,27,248,22,178,3,23,199,1,28,249,22,129, -4,23,195,2,248,22,181,8,80,159,49,8,26,38,9,27,250,80,159,50,8, -33,39,11,11,23,197,2,250,22,93,250,22,157,2,23,199,2,23,211,2,9, -250,22,157,2,23,199,1,11,9,249,80,159,52,8,44,39,23,210,1,248,22, -178,3,23,200,1,32,131,2,88,163,36,43,8,31,11,65,99,108,111,111,112, -222,33,140,2,32,132,2,88,163,8,36,37,47,11,2,53,222,33,135,2,32, -133,2,88,163,36,37,43,11,69,116,111,45,115,116,114,105,110,103,222,33,134, -2,28,248,22,153,15,23,194,2,248,22,157,15,23,194,1,192,28,248,22,87, -248,22,81,23,195,2,248,22,89,248,2,133,2,248,22,135,18,23,196,1,250, -22,90,248,2,133,2,248,22,135,18,23,198,2,2,66,248,2,132,2,248,22, -136,18,23,198,1,250,22,131,8,6,7,7,10,32,126,97,32,126,97,6,1, -1,32,23,196,1,249,22,131,8,6,6,6,10,32,32,32,126,97,248,22,131, -2,23,196,1,32,138,2,88,163,36,38,48,11,66,102,105,108,116,101,114,222, -33,139,2,28,248,22,87,23,195,2,9,28,248,23,194,2,248,22,80,23,196, -2,249,22,79,248,22,135,18,23,197,2,249,2,138,2,23,197,1,248,22,136, -18,23,199,1,249,2,138,2,23,195,1,248,22,136,18,23,197,1,28,248,22, -87,23,199,2,86,94,23,198,1,28,23,199,2,86,97,23,196,1,23,195,1, -23,194,1,23,193,1,28,23,197,2,249,22,171,15,23,201,1,23,199,1,198, -27,28,248,22,87,23,197,2,2,65,249,22,1,22,170,7,248,2,132,2,23, -199,2,248,23,198,1,251,22,131,8,6,70,70,99,111,108,108,101,99,116,105, -111,110,32,110,111,116,32,102,111,117,110,100,10,32,32,99,111,108,108,101,99, -116,105,111,110,58,32,126,115,10,32,32,105,110,32,99,111,108,108,101,99,116, -105,111,110,32,100,105,114,101,99,116,111,114,105,101,115,58,126,97,126,97,28, -248,22,87,23,202,1,248,2,133,2,23,201,1,250,22,170,7,248,2,133,2, -23,204,1,2,66,23,201,2,249,22,1,22,170,7,249,22,2,32,0,88,163, -8,36,37,45,11,9,222,33,136,2,27,248,22,92,23,205,2,27,248,22,92, -247,22,133,16,28,249,22,190,3,249,22,181,3,23,198,2,23,197,2,41,23, -205,2,249,22,93,247,22,133,16,248,22,89,249,22,131,8,6,50,50,46,46, -46,32,91,126,97,32,97,100,100,105,116,105,111,110,97,108,32,108,105,110,107, -101,100,32,97,110,100,32,112,97,99,107,97,103,101,32,100,105,114,101,99,116, -111,114,105,101,115,93,249,22,181,3,23,201,1,23,200,1,28,249,22,5,22, -130,2,23,201,2,250,22,131,8,6,49,49,10,32,32,32,115,117,98,45,99, -111,108,108,101,99,116,105,111,110,58,32,126,115,10,32,32,105,110,32,112,97, -114,101,110,116,32,100,105,114,101,99,116,111,114,105,101,115,58,126,97,23,201, -1,249,22,1,22,170,7,249,22,2,32,0,88,163,8,36,37,45,11,9,222, -33,137,2,249,2,138,2,22,130,2,23,208,1,86,95,23,199,1,23,198,1, -2,65,27,248,22,80,23,200,2,27,28,248,22,153,15,23,195,2,249,22,171, -15,23,196,1,23,198,2,248,22,131,2,23,195,1,28,28,248,22,153,15,248, -22,80,23,202,2,248,22,166,15,23,194,2,10,27,250,22,1,22,171,15,23, -197,1,23,201,2,28,28,248,22,87,23,199,2,10,248,22,166,15,23,194,2, -28,23,200,2,28,28,248,22,165,15,249,22,171,15,23,196,2,23,203,2,10, -27,28,248,22,153,15,23,202,2,248,22,157,15,23,202,2,23,201,2,19,248, -22,150,7,23,195,2,27,28,249,22,129,4,23,196,4,40,28,249,22,153,7, -6,4,4,46,114,107,116,249,22,169,7,23,199,2,249,22,181,3,23,200,4, -40,249,22,170,7,250,22,169,7,23,200,1,36,249,22,181,3,23,201,4,40, -6,3,3,46,115,115,86,94,23,195,1,11,11,28,23,193,2,248,22,165,15, -249,22,171,15,23,199,2,23,196,1,11,2,86,99,23,202,1,23,201,1,23, -199,1,23,198,1,23,197,1,23,196,1,28,23,200,2,249,22,171,15,23,195, -1,23,202,1,192,254,2,131,2,202,203,204,205,206,248,22,81,23,16,28,23, -16,23,16,199,28,23,200,2,249,22,171,15,23,195,1,23,202,1,192,254,2, -131,2,202,203,204,205,206,248,22,81,23,16,23,16,254,2,131,2,201,202,203, -204,205,248,22,81,23,15,23,15,90,159,38,11,89,161,38,36,11,249,80,159, -40,8,34,39,23,199,1,23,200,1,27,248,22,67,28,248,22,153,15,195,248, -22,157,15,195,194,27,247,22,137,16,27,250,22,93,28,23,197,2,28,247,22, -136,16,249,22,93,27,250,80,159,50,8,33,39,10,11,36,249,22,93,250,22, -157,2,23,198,2,23,206,2,9,250,22,157,2,23,198,1,11,9,27,250,80, -159,50,8,33,39,11,10,36,249,22,93,250,22,157,2,23,198,2,23,206,2, -9,250,22,157,2,23,198,1,11,9,9,9,28,23,197,1,28,249,22,129,4, -36,248,22,181,8,80,159,47,8,26,38,86,94,23,198,1,9,27,250,80,159, -48,8,33,39,11,11,36,250,22,93,250,22,157,2,23,199,2,23,205,2,9, -250,22,157,2,23,199,1,11,9,28,249,22,129,4,37,248,22,181,8,80,159, -51,8,26,38,9,27,250,80,159,52,8,33,39,11,11,37,250,22,93,250,22, -157,2,23,199,2,23,209,2,9,250,22,157,2,23,199,1,11,9,28,249,22, -129,4,38,248,22,181,8,80,159,55,8,26,38,9,27,250,80,159,56,8,33, -39,11,11,38,250,22,93,250,22,157,2,23,199,2,23,213,2,9,250,22,157, -2,23,199,1,11,9,249,80,159,58,8,44,39,23,212,1,39,9,247,22,133, -16,254,2,131,2,199,202,203,205,23,16,199,11,86,95,28,28,248,22,154,15, -23,194,2,10,28,248,22,153,15,23,194,2,10,28,248,22,147,7,23,194,2, -28,248,22,176,15,23,194,2,10,248,22,177,15,23,194,2,11,12,252,22,171, -11,23,200,2,2,45,36,23,198,2,23,199,2,28,28,248,22,147,7,23,195, -2,10,248,22,136,8,23,195,2,86,94,23,194,1,12,252,22,171,11,23,200, -2,2,67,37,23,198,2,23,199,1,90,159,39,11,89,161,39,36,11,248,22, -174,15,23,197,2,86,94,23,195,1,86,94,28,23,193,2,86,95,23,198,1, -23,196,1,12,250,22,174,11,23,201,1,2,68,23,199,1,249,22,7,23,195, -1,23,196,1,32,143,2,88,163,36,42,8,24,11,2,53,222,33,144,2,28, -248,22,130,4,23,199,2,86,95,23,198,1,23,194,1,19,248,22,141,8,23, -195,2,19,248,22,141,8,23,196,2,249,22,163,15,251,22,148,8,250,22,147, -8,23,204,2,36,23,203,4,2,54,249,23,205,1,23,203,1,23,201,4,28, -248,22,147,7,23,206,2,249,22,162,8,23,207,1,8,63,23,205,1,28,248, -22,154,15,23,201,2,248,22,155,15,23,201,1,86,94,23,200,1,247,22,156, -15,2,2,27,248,22,179,3,23,200,1,28,249,22,162,9,8,46,249,22,142, -8,23,198,2,23,197,2,27,248,22,178,3,23,195,2,249,22,163,15,251,22, -148,8,250,22,147,8,23,204,2,36,23,203,1,23,202,1,249,23,205,1,23, -203,1,23,201,1,28,248,22,147,7,23,206,2,249,22,162,8,23,207,1,8, -63,23,205,1,28,248,22,154,15,23,201,2,248,22,155,15,23,201,1,86,94, -23,200,1,247,22,156,15,28,248,22,130,4,23,194,2,86,95,23,195,1,23, -193,1,19,248,22,141,8,23,196,2,19,248,22,141,8,23,197,2,249,22,163, -15,251,22,148,8,250,22,147,8,23,205,2,36,23,203,4,2,54,249,23,206, -1,23,204,1,23,201,4,28,248,22,147,7,23,207,2,249,22,162,8,23,208, -1,8,63,23,206,1,28,248,22,154,15,23,202,2,248,22,155,15,23,202,1, -86,94,23,201,1,247,22,156,15,2,2,27,248,22,179,3,23,195,1,28,249, -22,162,9,8,46,249,22,142,8,23,199,2,23,197,2,27,248,22,178,3,23, -195,2,249,22,163,15,251,22,148,8,250,22,147,8,23,205,2,36,23,203,1, -23,203,1,249,23,206,1,23,204,1,23,201,1,28,248,22,147,7,23,207,2, -249,22,162,8,23,208,1,8,63,23,206,1,28,248,22,154,15,23,202,2,248, -22,155,15,23,202,1,86,94,23,201,1,247,22,156,15,28,248,22,130,4,23, -194,2,86,95,23,196,1,23,193,1,19,248,22,141,8,23,197,2,19,248,22, -141,8,23,198,2,249,22,163,15,251,22,148,8,250,22,147,8,23,206,2,36, -23,203,4,2,54,249,23,207,1,23,205,1,23,201,4,28,248,22,147,7,23, -208,2,249,22,162,8,23,209,1,8,63,23,207,1,28,248,22,154,15,23,203, -2,248,22,155,15,23,203,1,86,94,23,202,1,247,22,156,15,2,2,27,248, -22,179,3,23,195,1,28,249,22,162,9,8,46,249,22,142,8,23,200,2,23, -197,2,27,248,22,178,3,23,195,2,249,22,163,15,251,22,148,8,250,22,147, -8,23,206,2,36,23,203,1,23,204,1,249,23,207,1,23,205,1,23,201,1, -28,248,22,147,7,23,208,2,249,22,162,8,23,209,1,8,63,23,207,1,28, -248,22,154,15,23,203,2,248,22,155,15,23,203,1,86,94,23,202,1,247,22, -156,15,253,2,143,2,201,202,203,204,205,198,90,159,38,11,89,161,38,36,11, -86,95,28,28,248,22,154,15,23,199,2,10,28,248,22,153,15,23,199,2,10, -28,248,22,147,7,23,199,2,28,248,22,176,15,23,199,2,10,248,22,177,15, -23,199,2,11,12,252,22,171,11,23,200,2,2,45,36,23,203,2,23,204,2, -28,28,248,22,147,7,23,200,2,10,248,22,136,8,23,200,2,12,252,22,171, -11,23,200,2,2,67,37,23,203,2,23,204,2,90,159,39,11,89,161,39,36, -11,248,22,174,15,23,202,2,86,94,23,195,1,86,94,28,192,12,250,22,174, -11,23,201,1,2,68,23,204,2,249,22,7,194,195,27,248,22,159,15,23,196, -1,27,19,248,22,141,8,23,196,2,28,248,22,130,4,23,194,4,86,94,23, -199,1,19,248,22,141,8,23,197,2,19,248,22,141,8,23,198,2,249,22,163, -15,251,22,148,8,250,22,147,8,23,206,2,36,23,203,4,2,54,249,23,210, -1,23,205,1,23,201,4,28,248,22,147,7,23,211,2,249,22,162,8,23,212, -1,8,63,23,210,1,28,248,22,154,15,23,206,2,248,22,155,15,23,206,1, -86,94,23,205,1,247,22,156,15,2,2,27,248,22,179,3,23,195,4,28,249, -22,162,9,8,46,249,22,142,8,23,200,2,23,197,2,27,248,22,178,3,23, -195,2,249,22,163,15,251,22,148,8,250,22,147,8,23,206,2,36,23,203,1, -23,207,1,249,23,210,1,23,205,1,23,201,1,28,248,22,147,7,23,211,2, -249,22,162,8,23,212,1,8,63,23,210,1,28,248,22,154,15,23,206,2,248, -22,155,15,23,206,1,86,94,23,205,1,247,22,156,15,28,248,22,130,4,23, -194,2,86,95,23,200,1,23,193,1,19,248,22,141,8,23,198,2,19,248,22, -141,8,23,199,2,249,22,163,15,251,22,148,8,250,22,147,8,23,207,2,36, -23,203,4,2,54,249,23,211,1,23,206,1,23,201,4,28,248,22,147,7,23, -212,2,249,22,162,8,23,213,1,8,63,23,211,1,28,248,22,154,15,23,207, -2,248,22,155,15,23,207,1,86,94,23,206,1,247,22,156,15,2,2,27,248, -22,179,3,23,195,1,28,249,22,162,9,8,46,249,22,142,8,23,201,2,23, -197,2,27,248,22,178,3,23,195,2,249,22,163,15,251,22,148,8,250,22,147, -8,23,207,2,36,23,203,1,23,208,1,249,23,211,1,23,206,1,23,201,1, -28,248,22,147,7,23,212,2,249,22,162,8,23,213,1,8,63,23,211,1,28, -248,22,154,15,23,207,2,248,22,155,15,23,207,1,86,94,23,206,1,247,22, -156,15,253,2,143,2,23,203,1,23,207,1,23,208,1,23,209,1,23,210,1, -23,199,1,2,28,248,22,153,15,23,196,2,249,22,171,15,23,197,1,23,195, -1,192,32,146,2,88,163,36,40,57,11,2,53,222,33,147,2,28,248,22,130, -4,23,197,2,86,94,23,196,1,19,248,22,141,8,23,195,2,35,248,22,141, -8,23,196,2,249,22,163,15,251,22,148,8,250,22,147,8,23,204,1,36,23, -203,4,2,54,2,54,28,248,22,147,7,23,204,2,249,22,162,8,23,205,1, -8,63,23,203,1,28,248,22,154,15,23,199,2,248,22,155,15,23,199,1,86, -94,23,198,1,247,22,156,15,2,27,248,22,179,3,23,198,1,28,249,22,162, -9,8,46,249,22,142,8,23,198,2,23,197,2,35,248,22,178,3,23,195,2, -249,22,163,15,251,22,148,8,250,22,147,8,23,204,1,36,23,203,1,2,54, -2,54,28,248,22,147,7,23,204,2,249,22,162,8,23,205,1,8,63,23,203, -1,28,248,22,154,15,23,199,2,248,22,155,15,23,199,1,86,94,23,198,1, -247,22,156,15,28,248,22,130,4,23,194,2,86,94,23,193,1,19,248,22,141, -8,23,196,2,35,248,22,141,8,23,197,2,249,22,163,15,251,22,148,8,250, -22,147,8,23,205,1,36,23,203,4,2,54,2,54,28,248,22,147,7,23,205, -2,249,22,162,8,23,206,1,8,63,23,204,1,28,248,22,154,15,23,200,2, -248,22,155,15,23,200,1,86,94,23,199,1,247,22,156,15,2,27,248,22,179, -3,23,195,1,28,249,22,162,9,8,46,249,22,142,8,23,199,2,23,197,2, -35,248,22,178,3,23,195,2,249,22,163,15,251,22,148,8,250,22,147,8,23, -205,1,36,23,203,1,2,54,2,54,28,248,22,147,7,23,205,2,249,22,162, -8,23,206,1,8,63,23,204,1,28,248,22,154,15,23,200,2,248,22,155,15, -23,200,1,86,94,23,199,1,247,22,156,15,251,2,146,2,198,199,200,196,90, -159,38,11,89,161,38,36,11,86,95,28,28,248,22,154,15,23,196,2,10,28, +23,196,2,2,53,23,197,2,28,248,22,176,15,23,195,2,86,94,23,194,1, +12,251,22,173,11,23,197,2,2,57,2,51,23,198,1,249,22,3,20,20,94, +88,163,8,36,37,47,11,9,223,2,33,99,23,195,1,23,197,1,28,28,248, +22,0,23,195,2,249,22,50,23,196,2,37,11,12,250,22,171,11,23,196,1, +2,58,23,197,1,86,94,28,28,248,22,153,15,23,194,2,10,28,248,22,147, +7,23,194,2,28,248,22,176,15,23,194,2,10,248,22,177,15,23,194,2,11, +12,250,22,171,11,2,11,2,53,23,196,2,28,248,22,176,15,23,194,2,12, +251,22,173,11,2,11,2,57,2,51,23,197,1,86,95,86,94,86,94,28,28, 248,22,153,15,23,196,2,10,28,248,22,147,7,23,196,2,28,248,22,176,15, -23,196,2,10,248,22,177,15,23,196,2,11,12,252,22,171,11,2,39,2,45, -36,23,200,2,23,201,2,28,28,248,22,147,7,23,197,2,10,248,22,136,8, -23,197,2,12,252,22,171,11,2,39,2,67,37,23,200,2,23,201,2,90,159, -39,11,89,161,39,36,11,248,22,174,15,23,199,2,86,94,23,195,1,86,94, -28,192,12,250,22,174,11,2,39,2,68,23,201,2,249,22,7,194,195,27,248, -22,159,15,23,196,1,27,251,2,146,2,23,198,2,23,201,1,23,202,1,248, -22,141,8,23,199,1,28,248,22,153,15,23,196,2,249,22,171,15,23,197,1, -23,195,1,192,2,54,252,80,158,41,8,36,2,39,2,54,32,0,88,163,8, -36,38,43,11,9,222,33,149,2,198,199,32,151,2,88,163,36,40,57,11,2, -53,222,33,152,2,28,248,22,130,4,23,197,2,86,94,23,196,1,19,248,22, -141,8,23,195,2,19,248,22,141,8,23,196,2,249,22,163,15,251,22,148,8, -250,22,147,8,23,204,2,36,23,203,4,2,54,249,22,147,8,23,203,1,23, -201,4,28,248,22,147,7,23,204,2,249,22,162,8,23,205,1,8,63,23,203, +23,196,2,10,248,22,177,15,23,196,2,11,12,250,22,171,11,2,11,2,53, +23,198,2,28,248,22,176,15,23,196,2,12,251,22,173,11,2,11,2,57,2, +51,23,199,2,249,22,3,32,0,88,163,8,36,37,46,11,9,222,33,102,23, +198,2,28,28,248,22,0,23,195,2,249,22,50,23,196,2,37,11,12,250,22, +171,11,2,11,2,58,23,197,2,251,80,158,40,46,23,198,1,23,199,1,23, +200,1,11,86,94,28,28,248,22,153,15,23,194,2,10,28,248,22,147,7,23, +194,2,28,248,22,176,15,23,194,2,10,248,22,177,15,23,194,2,11,12,250, +22,171,11,2,13,2,53,23,196,2,28,248,22,176,15,23,194,2,12,251,22, +173,11,2,13,2,57,2,51,23,197,1,86,96,86,94,28,28,248,22,153,15, +23,196,2,10,28,248,22,147,7,23,196,2,28,248,22,176,15,23,196,2,10, +248,22,177,15,23,196,2,11,12,250,22,171,11,2,13,2,53,23,198,2,28, +248,22,176,15,23,196,2,12,251,22,173,11,2,13,2,57,2,51,23,199,2, +86,94,86,94,28,28,248,22,153,15,23,197,2,10,28,248,22,147,7,23,197, +2,28,248,22,176,15,23,197,2,10,248,22,177,15,23,197,2,11,12,250,22, +171,11,2,13,2,53,23,199,2,28,248,22,176,15,23,197,2,12,251,22,173, +11,2,13,2,57,2,51,23,200,2,249,22,3,32,0,88,163,8,36,37,46, +11,9,222,33,104,23,199,2,28,28,248,22,0,23,195,2,249,22,50,23,196, +2,37,11,12,250,22,171,11,2,13,2,58,23,197,2,251,80,158,40,46,23, +198,1,23,200,1,23,201,1,23,199,1,27,248,22,130,16,2,61,28,248,22, +178,15,23,194,2,192,27,28,248,22,176,15,23,195,2,20,13,159,80,159,38, +55,37,250,80,159,41,56,37,249,22,33,11,80,159,43,55,37,22,131,16,248, +22,130,16,2,62,27,248,22,130,16,2,63,250,80,159,42,40,39,23,196,1, +23,198,2,11,11,28,23,193,2,192,86,94,23,193,1,27,249,22,179,15,27, +248,22,130,16,2,63,250,80,159,45,40,39,23,196,1,11,11,248,22,130,16, +2,62,90,159,39,11,89,161,39,36,11,248,22,174,15,23,197,1,86,95,23, +195,1,23,194,1,249,22,179,15,23,200,1,23,195,1,27,249,22,171,15,23, +196,1,6,11,11,99,111,110,102,105,103,46,114,107,116,100,27,28,248,22,165, +15,23,195,2,249,22,132,6,23,196,1,22,142,6,11,28,192,192,21,17,1, +0,28,248,22,147,7,23,195,2,27,248,22,161,15,23,196,1,28,248,22,178, +15,23,194,2,192,249,22,179,15,23,195,1,27,27,248,22,130,16,2,64,28, +248,22,178,15,23,194,2,192,28,248,22,177,15,23,194,2,249,22,179,15,23, +195,1,249,22,179,15,250,80,159,48,40,39,248,22,130,16,2,63,11,10,248, +22,130,16,2,62,250,80,159,44,40,39,248,22,130,16,2,63,23,196,1,10, +28,23,193,2,192,86,94,23,193,1,248,22,130,16,2,62,28,248,22,136,8, +23,195,2,27,248,22,162,15,23,196,1,28,248,22,178,15,23,194,2,192,249, +22,179,15,23,195,1,27,27,248,22,130,16,2,64,28,248,22,178,15,23,194, +2,192,28,248,22,177,15,23,194,2,249,22,179,15,23,195,1,249,22,179,15, +250,80,159,48,40,39,248,22,130,16,2,63,11,10,248,22,130,16,2,62,250, +80,159,44,40,39,248,22,130,16,2,63,23,196,1,10,28,23,193,2,192,86, +94,23,193,1,248,22,130,16,2,62,28,248,22,153,15,23,195,2,28,248,22, +178,15,23,195,2,193,249,22,179,15,23,196,1,27,27,248,22,130,16,2,64, +28,248,22,178,15,23,194,2,192,28,248,22,177,15,23,194,2,249,22,179,15, +23,195,1,249,22,179,15,250,80,159,47,40,39,248,22,130,16,2,63,11,10, +248,22,130,16,2,62,250,80,159,43,40,39,248,22,130,16,2,63,23,196,1, +10,28,23,193,2,192,86,94,23,193,1,248,22,130,16,2,62,193,28,248,22, +178,15,23,195,2,193,249,22,179,15,23,196,1,27,27,248,22,130,16,2,64, +28,248,22,178,15,23,194,2,192,28,248,22,177,15,23,194,2,249,22,179,15, +23,195,1,249,22,179,15,250,80,159,47,40,39,248,22,130,16,2,63,11,10, +248,22,130,16,2,62,250,80,159,43,40,39,248,22,130,16,2,63,23,196,1, +10,28,23,193,2,192,86,94,23,193,1,248,22,130,16,2,62,28,248,22,178, +15,23,195,2,193,28,248,22,177,15,23,195,2,249,22,179,15,23,196,1,249, +22,179,15,250,80,159,43,40,39,248,22,130,16,2,63,11,10,248,22,130,16, +2,62,250,80,159,39,40,39,248,22,130,16,2,63,196,10,28,248,22,87,23, +196,2,9,28,248,22,80,23,196,2,249,22,79,248,80,159,39,58,39,248,22, +135,18,23,199,2,27,248,22,136,18,23,199,1,28,248,22,87,23,194,2,9, +28,248,22,80,23,194,2,249,22,79,248,80,159,42,58,39,248,22,135,18,23, +197,2,27,248,22,136,18,23,197,1,28,248,22,87,23,194,2,9,28,248,22, +80,23,194,2,249,22,79,248,80,159,45,58,39,248,22,135,18,23,197,2,249, +80,159,46,8,44,39,23,204,1,248,22,136,18,23,198,1,249,22,93,23,202, +2,249,80,159,46,8,44,39,23,204,1,248,22,136,18,23,198,1,249,22,93, +23,199,2,27,248,22,136,18,23,197,1,28,248,22,87,23,194,2,9,28,248, +22,80,23,194,2,249,22,79,248,80,159,45,58,39,248,22,135,18,23,197,2, +249,80,159,46,8,44,39,23,204,1,248,22,136,18,23,198,1,249,22,93,23, +202,2,249,80,159,46,8,44,39,23,204,1,248,22,136,18,23,198,1,249,22, +93,23,196,2,27,248,22,136,18,23,199,1,28,248,22,87,23,194,2,9,28, +248,22,80,23,194,2,249,22,79,248,80,159,42,58,39,248,22,135,18,23,197, +2,27,248,22,136,18,23,197,1,28,248,22,87,23,194,2,9,28,248,22,80, +23,194,2,249,22,79,248,80,159,45,58,39,248,22,135,18,23,197,2,249,80, +159,46,8,44,39,23,204,1,248,22,136,18,23,198,1,249,22,93,23,202,2, +249,80,159,46,8,44,39,23,204,1,248,22,136,18,23,198,1,249,22,93,23, +199,2,27,248,22,136,18,23,197,1,28,248,22,87,23,194,2,9,28,248,22, +80,23,194,2,249,22,79,248,80,159,45,58,39,248,22,135,18,23,197,2,249, +80,159,46,8,44,39,23,204,1,248,22,136,18,23,198,1,249,22,93,23,202, +2,249,80,159,46,8,44,39,23,204,1,248,22,136,18,23,198,1,27,250,22, +157,2,23,198,1,23,199,1,11,28,192,249,80,159,39,8,44,39,198,194,196, +27,27,248,22,130,16,2,61,28,248,22,178,15,23,194,2,192,27,28,248,22, +176,15,23,195,2,20,13,159,80,159,39,55,37,250,80,159,42,56,37,249,22, +33,11,80,159,44,55,37,22,131,16,248,22,130,16,2,62,27,248,22,130,16, +2,63,250,80,159,43,40,39,23,196,1,23,198,2,11,11,28,23,193,2,192, +86,94,23,193,1,27,249,22,179,15,27,248,22,130,16,2,63,250,80,159,46, +40,39,23,196,1,11,11,248,22,130,16,2,62,90,159,39,11,89,161,39,36, +11,248,22,174,15,23,197,1,86,95,23,195,1,23,194,1,249,22,179,15,23, +200,1,23,195,1,27,248,80,159,39,57,39,23,195,1,27,248,80,159,40,58, +39,27,250,22,157,2,23,199,2,70,108,105,110,107,115,45,102,105,108,101,11, +28,23,193,2,192,86,94,23,193,1,249,22,171,15,27,250,22,157,2,23,202, +2,67,108,105,98,45,100,105,114,11,28,192,192,62,117,112,2,60,248,22,185, +8,250,80,159,43,8,25,39,23,198,1,78,108,105,110,107,115,45,115,101,97, +114,99,104,45,102,105,108,101,115,248,22,89,23,198,1,248,22,161,13,23,194, +1,249,22,16,80,159,38,8,30,38,28,248,22,181,12,23,197,2,86,94,23, +196,1,32,0,88,163,8,36,36,41,11,9,222,11,20,20,94,88,163,8,36, +36,43,11,9,223,3,33,114,23,196,1,32,116,88,163,36,37,56,11,2,55, +222,33,117,90,159,39,11,89,161,39,36,11,248,22,174,15,23,197,1,86,95, +23,195,1,23,194,1,28,248,22,153,15,23,194,2,28,248,22,166,15,23,194, +2,249,22,139,6,23,195,1,32,0,88,163,8,36,36,41,11,9,222,11,90, +159,39,11,89,161,39,36,11,248,22,174,15,23,197,1,86,95,23,195,1,23, +194,1,28,248,22,153,15,23,194,2,28,248,22,166,15,23,194,2,249,22,139, +6,23,195,1,32,0,88,163,8,36,36,41,11,9,222,11,90,159,39,11,89, +161,39,36,11,248,22,174,15,23,197,1,86,95,23,195,1,23,194,1,28,248, +22,153,15,23,194,2,28,248,22,166,15,23,194,2,249,22,139,6,23,195,1, +32,0,88,163,8,36,36,41,11,9,222,11,90,159,39,11,89,161,39,36,11, +248,22,174,15,23,197,1,86,95,23,195,1,23,194,1,28,248,22,153,15,23, +194,2,28,248,22,166,15,23,194,2,249,22,139,6,23,195,1,32,0,88,163, +8,36,36,41,11,9,222,11,248,2,116,23,194,1,11,11,11,11,32,118,88, +163,8,36,37,55,11,2,55,222,33,119,27,249,22,157,6,8,128,128,23,196, +2,28,248,22,142,7,23,194,2,9,249,22,79,23,195,1,27,249,22,157,6, +8,128,128,23,199,2,28,248,22,142,7,23,194,2,9,249,22,79,23,195,1, +27,249,22,157,6,8,128,128,23,202,2,28,248,22,142,7,23,194,2,9,249, +22,79,23,195,1,27,249,22,157,6,8,128,128,23,205,2,28,248,22,142,7, +23,194,2,9,249,22,79,23,195,1,248,2,118,23,206,1,27,249,22,157,6, +8,128,128,23,196,2,28,248,22,136,8,23,194,2,28,249,22,129,4,248,22, +141,8,23,196,2,8,128,128,249,22,1,22,148,8,249,22,79,23,197,1,27, +249,22,157,6,8,128,128,23,201,2,28,248,22,142,7,23,194,2,9,249,22, +79,23,195,1,27,249,22,157,6,8,128,128,23,204,2,28,248,22,142,7,23, +194,2,9,249,22,79,23,195,1,27,249,22,157,6,8,128,128,23,207,2,28, +248,22,142,7,23,194,2,9,249,22,79,23,195,1,27,249,22,157,6,8,128, +128,23,210,2,28,248,22,142,7,23,194,2,9,249,22,79,23,195,1,248,2, +118,23,211,1,192,192,248,22,191,5,23,194,1,20,13,159,80,159,37,8,32, +37,80,159,37,8,45,39,27,90,159,39,11,89,161,39,36,11,248,22,174,15, +23,198,2,86,95,23,195,1,23,194,1,28,248,22,153,15,23,194,2,28,248, +22,166,15,23,194,2,249,22,139,6,23,195,1,32,0,88,163,8,36,36,41, +11,9,222,11,90,159,39,11,89,161,39,36,11,248,22,174,15,23,197,1,86, +95,23,195,1,23,194,1,28,248,22,153,15,23,194,2,28,248,22,166,15,23, +194,2,249,22,139,6,23,195,1,32,0,88,163,8,36,36,41,11,9,222,11, +90,159,39,11,89,161,39,36,11,248,22,174,15,23,197,1,86,95,23,195,1, +23,194,1,28,248,22,153,15,23,194,2,28,248,22,166,15,23,194,2,249,22, +139,6,23,195,1,32,0,88,163,8,36,36,41,11,9,222,11,90,159,39,11, +89,161,39,36,11,248,22,174,15,23,197,1,86,95,23,195,1,23,194,1,28, +248,22,153,15,23,194,2,28,248,22,166,15,23,194,2,249,22,139,6,23,195, +1,32,0,88,163,8,36,36,41,11,9,222,11,248,2,116,23,194,1,11,11, +11,11,28,248,22,165,15,23,195,2,27,249,22,139,6,23,197,2,32,0,88, +163,8,36,36,41,11,9,222,11,86,94,28,23,194,2,248,22,141,6,23,195, +1,86,94,23,194,1,12,249,22,79,27,248,22,182,5,23,199,1,250,22,46, +22,37,88,163,36,36,8,24,11,9,223,3,33,120,20,20,94,88,163,36,36, +43,11,9,223,3,33,121,23,196,1,194,249,22,79,11,194,28,28,23,195,2, +28,248,22,81,23,196,2,248,22,160,9,249,22,156,14,36,248,22,136,18,23, +199,2,11,11,194,86,94,23,195,1,249,22,14,20,20,94,88,163,8,32,36, +58,16,4,36,8,240,0,64,0,0,8,129,128,36,9,224,2,3,33,122,23, +196,1,80,159,38,8,30,38,28,28,248,22,77,23,194,2,248,22,77,23,195, +2,11,249,22,164,9,248,22,135,18,23,196,1,248,22,135,18,23,197,1,249, +22,164,9,23,195,1,23,196,1,27,248,22,160,9,194,28,192,192,248,22,160, +9,248,22,80,195,86,94,28,248,22,138,12,23,199,2,27,247,22,130,12,28, +249,22,186,11,23,195,2,2,65,251,22,190,11,23,197,1,2,65,250,22,131, +8,2,66,28,23,202,1,86,95,23,204,1,23,203,1,80,159,48,48,38,28, +23,203,1,86,94,23,204,1,80,159,48,51,38,249,22,182,8,80,159,50,8, +26,38,23,206,1,248,22,134,12,23,207,2,247,22,29,12,12,28,248,22,138, +12,23,199,2,86,94,23,198,1,248,23,194,1,247,22,137,2,197,86,95,28, +248,22,138,12,23,200,2,27,247,22,130,12,28,249,22,186,11,23,195,2,2, +65,251,22,190,11,23,197,1,2,65,250,22,131,8,2,66,28,23,203,2,80, +159,49,48,38,28,23,204,2,80,159,49,51,38,249,22,182,8,80,159,51,8, +26,38,23,207,2,248,22,134,12,23,208,2,247,22,29,12,12,28,23,193,2, +28,23,195,1,86,95,23,197,1,23,196,1,86,94,20,18,159,11,80,158,41, +49,247,22,137,2,20,18,159,11,80,158,41,50,23,193,1,28,23,196,1,86, +94,23,197,1,86,94,20,18,159,11,80,158,41,52,247,22,137,2,20,18,159, +11,80,158,41,53,23,193,1,86,94,250,22,183,8,80,159,44,8,28,38,23, +200,2,247,22,137,2,250,22,183,8,80,159,44,8,29,38,23,200,1,23,196, +1,86,94,23,195,1,12,28,248,22,138,12,23,200,2,86,94,23,199,1,248, +23,195,1,247,22,137,2,198,20,20,94,248,22,142,6,23,194,2,28,248,22, +142,7,248,22,142,6,23,195,1,12,248,22,167,11,6,30,30,101,120,112,101, +99,116,101,100,32,97,32,115,105,110,103,108,101,32,83,45,101,120,112,114,101, +115,115,105,111,110,248,22,191,5,23,194,1,28,248,22,88,23,194,2,28,28, +249,22,189,3,38,248,22,92,23,196,2,10,249,22,189,3,39,248,22,92,23, +196,2,28,28,248,22,147,7,248,22,80,23,195,2,10,28,249,22,162,9,2, +67,248,22,135,18,23,196,2,10,249,22,162,9,2,68,248,22,135,18,23,196, +2,28,27,248,22,101,194,28,248,22,153,15,23,194,2,10,28,248,22,147,7, +23,194,2,28,248,22,176,15,23,194,2,10,248,22,177,15,23,194,1,11,27, +248,22,87,248,22,103,195,28,192,192,248,22,157,16,248,22,110,195,11,11,11, +11,28,248,22,166,15,249,22,171,15,23,196,2,23,198,2,27,248,22,67,248, +22,157,15,23,198,1,250,22,155,2,23,198,2,23,196,2,249,22,79,23,199, +1,250,22,157,2,23,203,1,23,201,1,9,12,250,22,155,2,23,197,1,23, +198,1,249,22,79,23,198,1,23,201,1,28,28,248,22,87,248,22,103,23,197, +2,10,249,22,148,16,248,22,110,23,198,2,247,22,165,8,27,248,22,181,15, +249,22,179,15,248,22,101,23,200,2,23,198,1,28,249,22,162,9,248,22,80, +23,199,2,2,68,86,94,23,196,1,249,22,3,20,20,94,88,163,8,36,37, +53,11,9,224,3,2,33,131,2,23,196,1,248,22,184,15,23,196,1,28,249, +22,162,9,248,22,135,18,23,199,2,2,67,86,94,23,196,1,86,94,28,250, +22,157,2,23,197,2,11,11,12,250,22,155,2,23,197,2,11,9,249,22,161, +2,23,196,2,20,20,95,88,163,8,36,38,50,11,9,224,3,2,33,132,2, +23,195,1,23,196,1,27,248,22,67,248,22,135,18,23,199,1,250,22,155,2, +23,198,2,23,196,2,249,22,79,248,22,128,2,23,200,1,250,22,157,2,23, +203,1,23,201,1,9,12,250,22,155,2,23,196,1,23,197,1,248,22,94,23, +199,1,20,13,159,80,159,39,8,32,37,88,163,36,37,57,8,240,0,144,0, +4,9,227,3,2,1,0,4,33,126,27,28,23,194,2,80,159,40,48,38,28, +23,195,2,80,159,40,51,38,249,22,182,8,80,159,42,8,26,38,23,198,2, +27,28,23,195,2,80,158,41,50,28,23,196,2,80,158,41,53,249,22,182,8, +80,159,43,8,29,38,23,199,2,27,249,80,159,44,8,31,39,23,197,2,23, +196,2,28,28,28,248,22,77,23,194,2,248,22,77,23,195,2,11,249,22,164, +9,248,22,135,18,23,196,2,248,22,135,18,23,197,1,249,22,164,9,23,195, +2,23,196,1,86,96,23,200,1,23,195,1,23,193,1,28,23,196,1,80,158, +42,49,28,23,197,1,80,158,42,52,249,22,182,8,80,159,44,8,28,38,23, +200,1,20,13,159,80,159,42,8,32,37,20,20,94,88,163,36,37,58,16,2, +8,240,0,240,0,0,8,131,208,9,228,6,5,4,3,7,0,33,127,23,200, +1,20,13,159,80,159,42,55,37,26,29,80,159,8,35,56,37,249,22,33,11, +80,159,8,37,55,37,22,187,14,10,22,188,14,10,22,189,14,10,22,128,15, +10,22,191,14,10,22,129,15,10,22,190,14,10,22,130,15,10,22,131,15,10, +22,132,15,10,22,133,15,10,22,134,15,10,22,135,15,11,22,185,14,11,27, +28,28,23,194,2,248,22,160,9,248,22,80,23,196,2,10,9,27,249,22,182, +5,23,199,2,66,98,105,110,97,114,121,250,22,46,22,37,88,163,8,36,36, +44,11,9,223,3,33,128,2,20,20,94,88,163,36,36,43,11,9,223,3,33, +129,2,23,196,1,86,94,28,28,248,22,88,23,194,2,249,22,4,32,0,88, +163,8,36,37,45,11,9,222,33,130,2,23,195,2,11,12,248,22,167,11,6, +18,18,105,108,108,45,102,111,114,109,101,100,32,99,111,110,116,101,110,116,27, +247,22,137,2,27,90,159,39,11,89,161,39,36,11,248,22,174,15,23,202,1, +192,86,96,249,22,3,20,20,94,88,163,8,36,37,54,11,9,224,2,3,33, +133,2,23,195,1,23,197,1,249,22,161,2,195,88,163,8,36,38,48,11,9, +223,3,33,134,2,28,23,199,1,86,94,20,18,159,11,80,158,45,49,193,20, +18,159,11,80,158,45,50,195,28,23,200,1,86,94,20,18,159,11,80,158,45, +52,193,20,18,159,11,80,158,45,53,195,86,94,250,22,183,8,80,159,48,8, +28,38,23,204,2,196,250,22,183,8,80,159,48,8,29,38,23,204,1,23,199, +1,193,248,22,9,20,20,96,88,163,8,32,37,8,44,16,4,8,240,0,240, +0,0,8,240,27,180,0,0,37,36,9,226,1,4,3,2,33,135,2,23,195, +1,23,196,1,23,197,1,0,7,35,114,120,34,47,43,34,28,248,22,147,7, +23,195,2,27,249,22,146,16,2,137,2,23,197,2,28,23,193,2,28,249,22, +189,3,248,22,100,23,196,2,248,22,179,3,248,22,150,7,23,199,2,249,22, +7,250,22,169,7,23,200,1,36,248,22,100,23,199,1,23,198,1,249,22,7, +250,22,169,7,23,200,2,36,248,22,100,23,199,2,249,22,79,249,22,169,7, +23,201,1,248,22,102,23,200,1,23,200,1,249,22,7,23,197,1,23,198,1, +90,159,39,11,89,161,39,36,11,248,22,174,15,23,198,1,86,94,23,195,1, +28,249,22,162,9,23,195,2,2,54,86,94,23,193,1,249,22,7,23,196,1, +23,200,1,27,249,22,79,23,197,1,23,201,1,28,248,22,147,7,23,195,2, +27,249,22,146,16,2,137,2,23,197,2,28,23,193,2,28,249,22,189,3,248, +22,100,23,196,2,248,22,179,3,248,22,150,7,23,199,2,249,22,7,250,22, +169,7,23,200,1,36,248,22,100,23,199,1,23,196,1,249,22,7,250,22,169, +7,23,200,2,36,248,22,100,23,199,2,249,22,79,249,22,169,7,23,201,1, +248,22,102,23,200,1,23,198,1,249,22,7,23,197,1,23,196,1,90,159,39, +11,89,161,39,36,11,248,22,174,15,23,198,1,86,94,23,195,1,28,249,22, +162,9,23,195,2,2,54,86,94,23,193,1,249,22,7,23,196,1,23,198,1, +249,80,159,45,8,36,39,194,249,22,79,197,199,28,249,22,129,4,23,197,2, +248,22,181,8,80,159,39,8,26,38,9,27,250,80,159,40,8,35,39,11,11, +23,199,2,250,22,93,250,22,157,2,23,199,2,23,201,2,9,250,22,157,2, +23,199,1,11,9,27,248,22,178,3,23,201,1,28,249,22,129,4,23,195,2, +248,22,181,8,80,159,44,8,26,38,9,27,250,80,159,45,8,35,39,11,11, +23,197,2,250,22,93,250,22,157,2,23,199,2,23,206,2,9,250,22,157,2, +23,199,1,11,9,27,248,22,178,3,23,199,1,28,249,22,129,4,23,195,2, +248,22,181,8,80,159,49,8,26,38,9,27,250,80,159,50,8,35,39,11,11, +23,197,2,250,22,93,250,22,157,2,23,199,2,23,211,2,9,250,22,157,2, +23,199,1,11,9,249,80,159,52,8,46,39,23,210,1,248,22,178,3,23,200, +1,32,140,2,88,163,36,43,8,31,11,65,99,108,111,111,112,222,33,149,2, +32,141,2,88,163,8,36,37,47,11,2,55,222,33,144,2,32,142,2,88,163, +36,37,43,11,69,116,111,45,115,116,114,105,110,103,222,33,143,2,28,248,22, +153,15,23,194,2,248,22,157,15,23,194,1,192,28,248,22,87,248,22,81,23, +195,2,248,22,89,248,2,142,2,248,22,135,18,23,196,1,250,22,90,248,2, +142,2,248,22,135,18,23,198,2,2,70,248,2,141,2,248,22,136,18,23,198, +1,250,22,131,8,6,7,7,10,32,126,97,32,126,97,6,1,1,32,23,196, +1,249,22,131,8,6,6,6,10,32,32,32,126,97,248,22,131,2,23,196,1, +32,147,2,88,163,36,38,48,11,66,102,105,108,116,101,114,222,33,148,2,28, +248,22,87,23,195,2,9,28,248,23,194,2,248,22,80,23,196,2,249,22,79, +248,22,135,18,23,197,2,249,2,147,2,23,197,1,248,22,136,18,23,199,1, +249,2,147,2,23,195,1,248,22,136,18,23,197,1,28,248,22,87,23,199,2, +86,94,23,198,1,28,23,199,2,86,97,23,196,1,23,195,1,23,194,1,23, +193,1,28,23,197,2,249,22,171,15,23,201,1,23,199,1,198,27,28,248,22, +87,23,197,2,2,69,249,22,1,22,170,7,248,2,141,2,23,199,2,248,23, +198,1,251,22,131,8,6,70,70,99,111,108,108,101,99,116,105,111,110,32,110, +111,116,32,102,111,117,110,100,10,32,32,99,111,108,108,101,99,116,105,111,110, +58,32,126,115,10,32,32,105,110,32,99,111,108,108,101,99,116,105,111,110,32, +100,105,114,101,99,116,111,114,105,101,115,58,126,97,126,97,28,248,22,87,23, +202,1,248,2,142,2,23,201,1,250,22,170,7,248,2,142,2,23,204,1,2, +70,23,201,2,249,22,1,22,170,7,249,22,2,32,0,88,163,8,36,37,45, +11,9,222,33,145,2,27,248,22,92,23,205,2,27,248,22,92,247,22,133,16, +28,249,22,190,3,249,22,181,3,23,198,2,23,197,2,41,23,205,2,249,22, +93,247,22,133,16,248,22,89,249,22,131,8,6,50,50,46,46,46,32,91,126, +97,32,97,100,100,105,116,105,111,110,97,108,32,108,105,110,107,101,100,32,97, +110,100,32,112,97,99,107,97,103,101,32,100,105,114,101,99,116,111,114,105,101, +115,93,249,22,181,3,23,201,1,23,200,1,28,249,22,5,22,130,2,23,201, +2,250,22,131,8,6,49,49,10,32,32,32,115,117,98,45,99,111,108,108,101, +99,116,105,111,110,58,32,126,115,10,32,32,105,110,32,112,97,114,101,110,116, +32,100,105,114,101,99,116,111,114,105,101,115,58,126,97,23,201,1,249,22,1, +22,170,7,249,22,2,32,0,88,163,8,36,37,45,11,9,222,33,146,2,249, +2,147,2,22,130,2,23,208,1,86,95,23,199,1,23,198,1,2,69,27,248, +22,80,23,200,2,27,28,248,22,153,15,23,195,2,249,22,171,15,23,196,1, +23,198,2,248,22,131,2,23,195,1,28,28,248,22,153,15,248,22,80,23,202, +2,248,22,166,15,23,194,2,10,27,250,22,1,22,171,15,23,197,1,23,201, +2,28,28,248,22,87,23,199,2,10,248,22,166,15,23,194,2,28,23,200,2, +28,28,248,22,165,15,249,22,171,15,23,196,2,23,203,2,10,27,28,248,22, +153,15,23,202,2,248,22,157,15,23,202,2,23,201,2,19,248,22,150,7,23, +195,2,27,28,249,22,129,4,23,196,4,40,28,249,22,153,7,6,4,4,46, +114,107,116,249,22,169,7,23,199,2,249,22,181,3,23,200,4,40,249,22,170, +7,250,22,169,7,23,200,1,36,249,22,181,3,23,201,4,40,6,3,3,46, +115,115,86,94,23,195,1,11,11,28,23,193,2,248,22,165,15,249,22,171,15, +23,199,2,23,196,1,11,2,86,99,23,202,1,23,201,1,23,199,1,23,198, +1,23,197,1,23,196,1,28,23,200,2,249,22,171,15,23,195,1,23,202,1, +192,254,2,140,2,202,203,204,205,206,248,22,81,23,16,28,23,16,23,16,199, +28,23,200,2,249,22,171,15,23,195,1,23,202,1,192,254,2,140,2,202,203, +204,205,206,248,22,81,23,16,23,16,254,2,140,2,201,202,203,204,205,248,22, +81,23,15,23,15,90,159,38,11,89,161,38,36,11,249,80,159,40,8,36,39, +23,199,1,23,200,1,27,248,22,67,28,248,22,153,15,195,248,22,157,15,195, +194,27,247,22,137,16,27,250,22,93,28,23,197,2,28,247,22,136,16,249,22, +93,27,250,80,159,50,8,35,39,10,11,36,249,22,93,250,22,157,2,23,198, +2,23,206,2,9,250,22,157,2,23,198,1,11,9,27,250,80,159,50,8,35, +39,11,10,36,249,22,93,250,22,157,2,23,198,2,23,206,2,9,250,22,157, +2,23,198,1,11,9,9,9,28,23,197,1,28,249,22,129,4,36,248,22,181, +8,80,159,47,8,26,38,86,94,23,198,1,9,27,250,80,159,48,8,35,39, +11,11,36,250,22,93,250,22,157,2,23,199,2,23,205,2,9,250,22,157,2, +23,199,1,11,9,28,249,22,129,4,37,248,22,181,8,80,159,51,8,26,38, +9,27,250,80,159,52,8,35,39,11,11,37,250,22,93,250,22,157,2,23,199, +2,23,209,2,9,250,22,157,2,23,199,1,11,9,28,249,22,129,4,38,248, +22,181,8,80,159,55,8,26,38,9,27,250,80,159,56,8,35,39,11,11,38, +250,22,93,250,22,157,2,23,199,2,23,213,2,9,250,22,157,2,23,199,1, +11,9,249,80,159,58,8,46,39,23,212,1,39,9,247,22,133,16,254,2,140, +2,199,202,203,205,23,16,199,11,86,95,28,28,248,22,154,15,23,194,2,10, +28,248,22,153,15,23,194,2,10,28,248,22,147,7,23,194,2,28,248,22,176, +15,23,194,2,10,248,22,177,15,23,194,2,11,12,252,22,171,11,23,200,2, +2,47,36,23,198,2,23,199,2,28,28,248,22,147,7,23,195,2,10,248,22, +136,8,23,195,2,86,94,23,194,1,12,252,22,171,11,23,200,2,2,71,37, +23,198,2,23,199,1,90,159,39,11,89,161,39,36,11,248,22,174,15,23,197, +2,86,94,23,195,1,86,94,28,23,193,2,86,95,23,198,1,23,196,1,12, +250,22,174,11,23,201,1,2,72,23,199,1,249,22,7,23,195,1,23,196,1, +32,152,2,88,163,36,42,8,24,11,2,55,222,33,153,2,28,248,22,130,4, +23,199,2,86,95,23,198,1,23,194,1,19,248,22,141,8,23,195,2,19,248, +22,141,8,23,196,2,249,22,163,15,251,22,148,8,250,22,147,8,23,204,2, +36,23,203,4,2,56,249,23,205,1,23,203,1,23,201,4,28,248,22,147,7, +23,206,2,249,22,162,8,23,207,1,8,63,23,205,1,28,248,22,154,15,23, +201,2,248,22,155,15,23,201,1,86,94,23,200,1,247,22,156,15,2,2,27, +248,22,179,3,23,200,1,28,249,22,162,9,8,46,249,22,142,8,23,198,2, +23,197,2,27,248,22,178,3,23,195,2,249,22,163,15,251,22,148,8,250,22, +147,8,23,204,2,36,23,203,1,23,202,1,249,23,205,1,23,203,1,23,201, +1,28,248,22,147,7,23,206,2,249,22,162,8,23,207,1,8,63,23,205,1, +28,248,22,154,15,23,201,2,248,22,155,15,23,201,1,86,94,23,200,1,247, +22,156,15,28,248,22,130,4,23,194,2,86,95,23,195,1,23,193,1,19,248, +22,141,8,23,196,2,19,248,22,141,8,23,197,2,249,22,163,15,251,22,148, +8,250,22,147,8,23,205,2,36,23,203,4,2,56,249,23,206,1,23,204,1, +23,201,4,28,248,22,147,7,23,207,2,249,22,162,8,23,208,1,8,63,23, +206,1,28,248,22,154,15,23,202,2,248,22,155,15,23,202,1,86,94,23,201, +1,247,22,156,15,2,2,27,248,22,179,3,23,195,1,28,249,22,162,9,8, +46,249,22,142,8,23,199,2,23,197,2,27,248,22,178,3,23,195,2,249,22, +163,15,251,22,148,8,250,22,147,8,23,205,2,36,23,203,1,23,203,1,249, +23,206,1,23,204,1,23,201,1,28,248,22,147,7,23,207,2,249,22,162,8, +23,208,1,8,63,23,206,1,28,248,22,154,15,23,202,2,248,22,155,15,23, +202,1,86,94,23,201,1,247,22,156,15,28,248,22,130,4,23,194,2,86,95, +23,196,1,23,193,1,19,248,22,141,8,23,197,2,19,248,22,141,8,23,198, +2,249,22,163,15,251,22,148,8,250,22,147,8,23,206,2,36,23,203,4,2, +56,249,23,207,1,23,205,1,23,201,4,28,248,22,147,7,23,208,2,249,22, +162,8,23,209,1,8,63,23,207,1,28,248,22,154,15,23,203,2,248,22,155, +15,23,203,1,86,94,23,202,1,247,22,156,15,2,2,27,248,22,179,3,23, +195,1,28,249,22,162,9,8,46,249,22,142,8,23,200,2,23,197,2,27,248, +22,178,3,23,195,2,249,22,163,15,251,22,148,8,250,22,147,8,23,206,2, +36,23,203,1,23,204,1,249,23,207,1,23,205,1,23,201,1,28,248,22,147, +7,23,208,2,249,22,162,8,23,209,1,8,63,23,207,1,28,248,22,154,15, +23,203,2,248,22,155,15,23,203,1,86,94,23,202,1,247,22,156,15,253,2, +152,2,201,202,203,204,205,198,90,159,38,11,89,161,38,36,11,86,95,28,28, +248,22,154,15,23,199,2,10,28,248,22,153,15,23,199,2,10,28,248,22,147, +7,23,199,2,28,248,22,176,15,23,199,2,10,248,22,177,15,23,199,2,11, +12,252,22,171,11,23,200,2,2,47,36,23,203,2,23,204,2,28,28,248,22, +147,7,23,200,2,10,248,22,136,8,23,200,2,12,252,22,171,11,23,200,2, +2,71,37,23,203,2,23,204,2,90,159,39,11,89,161,39,36,11,248,22,174, +15,23,202,2,86,94,23,195,1,86,94,28,192,12,250,22,174,11,23,201,1, +2,72,23,204,2,249,22,7,194,195,27,248,22,159,15,23,196,1,27,19,248, +22,141,8,23,196,2,28,248,22,130,4,23,194,4,86,94,23,199,1,19,248, +22,141,8,23,197,2,19,248,22,141,8,23,198,2,249,22,163,15,251,22,148, +8,250,22,147,8,23,206,2,36,23,203,4,2,56,249,23,210,1,23,205,1, +23,201,4,28,248,22,147,7,23,211,2,249,22,162,8,23,212,1,8,63,23, +210,1,28,248,22,154,15,23,206,2,248,22,155,15,23,206,1,86,94,23,205, +1,247,22,156,15,2,2,27,248,22,179,3,23,195,4,28,249,22,162,9,8, +46,249,22,142,8,23,200,2,23,197,2,27,248,22,178,3,23,195,2,249,22, +163,15,251,22,148,8,250,22,147,8,23,206,2,36,23,203,1,23,207,1,249, +23,210,1,23,205,1,23,201,1,28,248,22,147,7,23,211,2,249,22,162,8, +23,212,1,8,63,23,210,1,28,248,22,154,15,23,206,2,248,22,155,15,23, +206,1,86,94,23,205,1,247,22,156,15,28,248,22,130,4,23,194,2,86,95, +23,200,1,23,193,1,19,248,22,141,8,23,198,2,19,248,22,141,8,23,199, +2,249,22,163,15,251,22,148,8,250,22,147,8,23,207,2,36,23,203,4,2, +56,249,23,211,1,23,206,1,23,201,4,28,248,22,147,7,23,212,2,249,22, +162,8,23,213,1,8,63,23,211,1,28,248,22,154,15,23,207,2,248,22,155, +15,23,207,1,86,94,23,206,1,247,22,156,15,2,2,27,248,22,179,3,23, +195,1,28,249,22,162,9,8,46,249,22,142,8,23,201,2,23,197,2,27,248, +22,178,3,23,195,2,249,22,163,15,251,22,148,8,250,22,147,8,23,207,2, +36,23,203,1,23,208,1,249,23,211,1,23,206,1,23,201,1,28,248,22,147, +7,23,212,2,249,22,162,8,23,213,1,8,63,23,211,1,28,248,22,154,15, +23,207,2,248,22,155,15,23,207,1,86,94,23,206,1,247,22,156,15,253,2, +152,2,23,203,1,23,207,1,23,208,1,23,209,1,23,210,1,23,199,1,2, +28,248,22,153,15,23,196,2,249,22,171,15,23,197,1,23,195,1,192,32,155, +2,88,163,36,40,57,11,2,55,222,33,156,2,28,248,22,130,4,23,197,2, +86,94,23,196,1,19,248,22,141,8,23,195,2,35,248,22,141,8,23,196,2, +249,22,163,15,251,22,148,8,250,22,147,8,23,204,1,36,23,203,4,2,56, +2,56,28,248,22,147,7,23,204,2,249,22,162,8,23,205,1,8,63,23,203, 1,28,248,22,154,15,23,199,2,248,22,155,15,23,199,1,86,94,23,198,1, -247,22,156,15,2,2,27,248,22,179,3,23,198,1,28,249,22,162,9,8,46, -249,22,142,8,23,198,2,23,197,2,27,248,22,178,3,23,195,2,249,22,163, -15,251,22,148,8,250,22,147,8,23,204,2,36,23,203,1,2,69,249,22,147, -8,23,203,1,23,201,1,28,248,22,147,7,23,204,2,249,22,162,8,23,205, -1,8,63,23,203,1,28,248,22,154,15,23,199,2,248,22,155,15,23,199,1, -86,94,23,198,1,247,22,156,15,28,248,22,130,4,23,194,2,86,94,23,193, -1,19,248,22,141,8,23,196,2,19,248,22,141,8,23,197,2,249,22,163,15, -251,22,148,8,250,22,147,8,23,205,2,36,23,203,4,2,54,249,22,147,8, -23,204,1,23,201,4,28,248,22,147,7,23,205,2,249,22,162,8,23,206,1, +247,22,156,15,2,27,248,22,179,3,23,198,1,28,249,22,162,9,8,46,249, +22,142,8,23,198,2,23,197,2,35,248,22,178,3,23,195,2,249,22,163,15, +251,22,148,8,250,22,147,8,23,204,1,36,23,203,1,2,56,2,56,28,248, +22,147,7,23,204,2,249,22,162,8,23,205,1,8,63,23,203,1,28,248,22, +154,15,23,199,2,248,22,155,15,23,199,1,86,94,23,198,1,247,22,156,15, +28,248,22,130,4,23,194,2,86,94,23,193,1,19,248,22,141,8,23,196,2, +35,248,22,141,8,23,197,2,249,22,163,15,251,22,148,8,250,22,147,8,23, +205,1,36,23,203,4,2,56,2,56,28,248,22,147,7,23,205,2,249,22,162, +8,23,206,1,8,63,23,204,1,28,248,22,154,15,23,200,2,248,22,155,15, +23,200,1,86,94,23,199,1,247,22,156,15,2,27,248,22,179,3,23,195,1, +28,249,22,162,9,8,46,249,22,142,8,23,199,2,23,197,2,35,248,22,178, +3,23,195,2,249,22,163,15,251,22,148,8,250,22,147,8,23,205,1,36,23, +203,1,2,56,2,56,28,248,22,147,7,23,205,2,249,22,162,8,23,206,1, 8,63,23,204,1,28,248,22,154,15,23,200,2,248,22,155,15,23,200,1,86, -94,23,199,1,247,22,156,15,2,2,27,248,22,179,3,23,195,1,28,249,22, -162,9,8,46,249,22,142,8,23,199,2,23,197,2,27,248,22,178,3,23,195, -2,249,22,163,15,251,22,148,8,250,22,147,8,23,205,2,36,23,203,1,2, -69,249,22,147,8,23,204,1,23,201,1,28,248,22,147,7,23,205,2,249,22, -162,8,23,206,1,8,63,23,204,1,28,248,22,154,15,23,200,2,248,22,155, -15,23,200,1,86,94,23,199,1,247,22,156,15,251,2,151,2,198,199,200,196, -90,159,38,11,89,161,38,36,11,86,95,28,28,248,22,154,15,23,196,2,10, -28,248,22,153,15,23,196,2,10,28,248,22,147,7,23,196,2,28,248,22,176, -15,23,196,2,10,248,22,177,15,23,196,2,11,12,252,22,171,11,2,39,2, -45,36,23,200,2,23,201,2,28,28,248,22,147,7,23,197,2,10,248,22,136, -8,23,197,2,12,252,22,171,11,2,39,2,67,37,23,200,2,23,201,2,90, -159,39,11,89,161,39,36,11,248,22,174,15,23,199,2,86,94,23,195,1,86, -94,28,192,12,250,22,174,11,2,39,2,68,23,201,2,249,22,7,194,195,27, -248,22,159,15,23,196,1,27,251,2,151,2,23,198,2,23,201,1,23,202,1, -248,22,141,8,23,199,1,28,248,22,153,15,23,196,2,249,22,171,15,23,197, -1,23,195,1,192,252,80,158,41,8,36,2,39,2,69,22,147,8,198,199,249, -247,22,171,5,23,195,1,11,249,247,22,171,5,194,11,28,248,22,87,23,195, -2,9,27,27,248,22,80,23,197,2,28,248,22,178,15,23,194,2,192,28,248, -22,177,15,23,194,2,249,22,179,15,23,195,1,249,22,179,15,250,80,159,45, -40,39,248,22,130,16,2,61,11,10,248,22,130,16,2,60,250,80,159,41,40, -39,248,22,130,16,2,61,23,196,1,10,28,23,193,2,249,22,79,248,22,181, -15,249,22,179,15,23,198,1,247,22,131,16,27,248,22,81,23,199,1,28,248, -22,87,23,194,2,9,27,248,80,159,42,8,24,39,248,22,80,23,196,2,28, -23,193,2,249,22,79,248,22,181,15,249,22,179,15,23,198,1,247,22,131,16, -248,80,159,44,8,45,39,248,22,81,23,198,1,86,94,23,193,1,248,80,159, -42,8,45,39,248,22,81,23,196,1,86,94,23,193,1,27,248,22,81,23,197, -1,28,248,22,87,23,194,2,9,27,248,80,159,40,8,24,39,248,22,80,23, -196,2,28,23,193,2,249,22,79,248,22,181,15,249,22,179,15,23,198,1,247, -22,131,16,248,80,159,42,8,45,39,248,22,81,23,198,1,86,94,23,193,1, -248,80,159,40,8,45,39,248,22,81,23,196,1,28,248,22,87,23,195,2,9, -27,27,248,22,80,23,197,2,28,248,22,178,15,23,194,2,192,28,248,22,177, -15,23,194,2,249,22,179,15,23,195,1,249,22,179,15,250,80,159,45,40,39, -248,22,130,16,2,61,11,10,248,22,130,16,2,60,250,80,159,41,40,39,248, -22,130,16,2,61,23,196,1,10,28,23,193,2,249,22,79,248,22,181,15,249, -22,179,15,23,198,1,247,22,131,16,27,248,22,81,23,199,1,28,248,22,87, -23,194,2,9,27,248,80,159,42,8,24,39,248,22,80,23,196,2,28,23,193, -2,249,22,79,248,22,181,15,249,22,179,15,23,198,1,247,22,131,16,248,80, -159,44,8,46,39,248,22,81,23,198,1,86,94,23,193,1,248,80,159,42,8, -46,39,248,22,81,23,196,1,86,94,23,193,1,27,248,22,81,23,197,1,28, -248,22,87,23,194,2,9,27,248,80,159,40,8,24,39,248,22,80,23,196,2, -28,23,193,2,249,22,79,248,22,181,15,249,22,179,15,23,198,1,247,22,131, -16,248,80,159,42,8,46,39,248,22,81,23,198,1,86,94,23,193,1,248,80, -159,40,8,46,39,248,22,81,23,196,1,28,248,22,87,23,195,2,9,27,27, +94,23,199,1,247,22,156,15,251,2,155,2,198,199,200,196,90,159,38,11,89, +161,38,36,11,86,95,28,28,248,22,154,15,23,196,2,10,28,248,22,153,15, +23,196,2,10,28,248,22,147,7,23,196,2,28,248,22,176,15,23,196,2,10, +248,22,177,15,23,196,2,11,12,252,22,171,11,2,41,2,47,36,23,200,2, +23,201,2,28,28,248,22,147,7,23,197,2,10,248,22,136,8,23,197,2,12, +252,22,171,11,2,41,2,71,37,23,200,2,23,201,2,90,159,39,11,89,161, +39,36,11,248,22,174,15,23,199,2,86,94,23,195,1,86,94,28,192,12,250, +22,174,11,2,41,2,72,23,201,2,249,22,7,194,195,27,248,22,159,15,23, +196,1,27,251,2,155,2,23,198,2,23,201,1,23,202,1,248,22,141,8,23, +199,1,28,248,22,153,15,23,196,2,249,22,171,15,23,197,1,23,195,1,192, +2,56,252,80,158,41,8,38,2,41,2,56,32,0,88,163,8,36,38,43,11, +9,222,33,158,2,198,199,32,160,2,88,163,36,40,57,11,2,55,222,33,161, +2,28,248,22,130,4,23,197,2,86,94,23,196,1,19,248,22,141,8,23,195, +2,19,248,22,141,8,23,196,2,249,22,163,15,251,22,148,8,250,22,147,8, +23,204,2,36,23,203,4,2,56,249,22,147,8,23,203,1,23,201,4,28,248, +22,147,7,23,204,2,249,22,162,8,23,205,1,8,63,23,203,1,28,248,22, +154,15,23,199,2,248,22,155,15,23,199,1,86,94,23,198,1,247,22,156,15, +2,2,27,248,22,179,3,23,198,1,28,249,22,162,9,8,46,249,22,142,8, +23,198,2,23,197,2,27,248,22,178,3,23,195,2,249,22,163,15,251,22,148, +8,250,22,147,8,23,204,2,36,23,203,1,2,73,249,22,147,8,23,203,1, +23,201,1,28,248,22,147,7,23,204,2,249,22,162,8,23,205,1,8,63,23, +203,1,28,248,22,154,15,23,199,2,248,22,155,15,23,199,1,86,94,23,198, +1,247,22,156,15,28,248,22,130,4,23,194,2,86,94,23,193,1,19,248,22, +141,8,23,196,2,19,248,22,141,8,23,197,2,249,22,163,15,251,22,148,8, +250,22,147,8,23,205,2,36,23,203,4,2,56,249,22,147,8,23,204,1,23, +201,4,28,248,22,147,7,23,205,2,249,22,162,8,23,206,1,8,63,23,204, +1,28,248,22,154,15,23,200,2,248,22,155,15,23,200,1,86,94,23,199,1, +247,22,156,15,2,2,27,248,22,179,3,23,195,1,28,249,22,162,9,8,46, +249,22,142,8,23,199,2,23,197,2,27,248,22,178,3,23,195,2,249,22,163, +15,251,22,148,8,250,22,147,8,23,205,2,36,23,203,1,2,73,249,22,147, +8,23,204,1,23,201,1,28,248,22,147,7,23,205,2,249,22,162,8,23,206, +1,8,63,23,204,1,28,248,22,154,15,23,200,2,248,22,155,15,23,200,1, +86,94,23,199,1,247,22,156,15,251,2,160,2,198,199,200,196,90,159,38,11, +89,161,38,36,11,86,95,28,28,248,22,154,15,23,196,2,10,28,248,22,153, +15,23,196,2,10,28,248,22,147,7,23,196,2,28,248,22,176,15,23,196,2, +10,248,22,177,15,23,196,2,11,12,252,22,171,11,2,41,2,47,36,23,200, +2,23,201,2,28,28,248,22,147,7,23,197,2,10,248,22,136,8,23,197,2, +12,252,22,171,11,2,41,2,71,37,23,200,2,23,201,2,90,159,39,11,89, +161,39,36,11,248,22,174,15,23,199,2,86,94,23,195,1,86,94,28,192,12, +250,22,174,11,2,41,2,72,23,201,2,249,22,7,194,195,27,248,22,159,15, +23,196,1,27,251,2,160,2,23,198,2,23,201,1,23,202,1,248,22,141,8, +23,199,1,28,248,22,153,15,23,196,2,249,22,171,15,23,197,1,23,195,1, +192,252,80,158,41,8,38,2,41,2,73,22,147,8,198,199,249,247,22,171,5, +23,195,1,11,249,247,22,171,5,194,11,28,248,22,87,23,195,2,9,27,27, 248,22,80,23,197,2,28,248,22,178,15,23,194,2,192,28,248,22,177,15,23, 194,2,249,22,179,15,23,195,1,249,22,179,15,250,80,159,45,40,39,248,22, -130,16,2,61,11,10,248,22,130,16,2,60,250,80,159,41,40,39,248,22,130, -16,2,61,23,196,1,10,28,23,193,2,249,22,79,248,22,181,15,249,22,179, +130,16,2,63,11,10,248,22,130,16,2,62,250,80,159,41,40,39,248,22,130, +16,2,63,23,196,1,10,28,23,193,2,249,22,79,248,22,181,15,249,22,179, 15,23,198,1,247,22,131,16,27,248,22,81,23,199,1,28,248,22,87,23,194, -2,9,27,27,248,22,80,23,196,2,28,248,22,178,15,23,194,2,192,28,248, -22,177,15,23,194,2,249,22,179,15,23,195,1,249,22,179,15,250,80,159,49, -40,39,248,22,130,16,2,61,11,10,248,22,130,16,2,60,250,80,159,45,40, -39,248,22,130,16,2,61,23,196,1,10,28,23,193,2,249,22,79,248,22,181, -15,249,22,179,15,23,198,1,247,22,131,16,27,248,22,81,23,198,1,28,248, -22,87,23,194,2,9,27,248,80,159,46,8,24,39,248,22,80,23,196,2,28, -23,193,2,249,22,79,248,22,181,15,249,22,179,15,23,198,1,247,22,131,16, -248,80,159,48,8,47,39,248,22,81,23,198,1,86,94,23,193,1,248,80,159, -46,8,47,39,248,22,81,23,196,1,86,94,23,193,1,27,248,22,81,23,196, -1,28,248,22,87,23,194,2,9,27,248,80,159,44,8,24,39,248,22,80,23, -196,2,28,23,193,2,249,22,79,248,22,181,15,249,22,179,15,23,198,1,247, -22,131,16,248,80,159,46,8,47,39,248,22,81,23,198,1,86,94,23,193,1, -248,80,159,44,8,47,39,248,22,81,23,196,1,86,94,23,193,1,27,248,22, -81,23,197,1,28,248,22,87,23,194,2,9,27,27,248,22,80,23,196,2,28, -248,22,178,15,23,194,2,192,28,248,22,177,15,23,194,2,249,22,179,15,23, -195,1,249,22,179,15,250,80,159,47,40,39,248,22,130,16,2,61,11,10,248, -22,130,16,2,60,250,80,159,43,40,39,248,22,130,16,2,61,23,196,1,10, -28,23,193,2,249,22,79,248,22,181,15,249,22,179,15,23,198,1,247,22,131, -16,27,248,22,81,23,198,1,28,248,22,87,23,194,2,9,27,248,80,159,44, -8,24,39,248,22,80,23,196,2,28,23,193,2,249,22,79,248,22,181,15,249, -22,179,15,23,198,1,247,22,131,16,248,80,159,46,8,47,39,248,22,81,23, -198,1,86,94,23,193,1,248,80,159,44,8,47,39,248,22,81,23,196,1,86, -94,23,193,1,27,248,22,81,23,196,1,28,248,22,87,23,194,2,9,27,248, -80,159,42,8,24,39,248,22,80,23,196,2,28,23,193,2,249,22,79,248,22, -181,15,249,22,179,15,23,198,1,247,22,131,16,248,80,159,44,8,47,39,248, -22,81,23,198,1,86,94,23,193,1,248,80,159,42,8,47,39,248,22,81,23, -196,1,27,247,22,136,16,249,80,159,39,41,38,28,23,195,2,27,249,22,169, -8,247,22,168,8,2,70,28,192,249,22,159,8,194,7,63,2,65,2,65,250, -80,159,42,8,25,39,248,80,159,43,57,39,247,80,159,43,54,39,2,71,27, -28,23,199,1,250,22,171,15,248,22,130,16,2,57,247,22,165,8,2,72,11, -27,248,80,159,45,8,45,39,250,22,93,9,248,22,89,248,22,130,16,2,62, -9,28,193,249,22,79,195,194,192,27,247,22,136,16,249,80,159,39,41,38,28, -23,195,2,27,249,22,169,8,247,22,168,8,2,70,28,192,249,22,159,8,194, -7,63,2,65,2,65,250,80,159,42,8,25,39,248,80,159,43,57,39,247,80, -159,43,54,39,2,71,27,28,23,199,1,250,22,171,15,248,22,130,16,2,57, -247,22,165,8,2,72,11,27,248,80,159,45,8,46,39,250,22,93,23,206,1, -248,22,89,248,22,130,16,2,62,9,28,193,249,22,79,195,194,192,27,247,22, -136,16,249,80,159,39,41,38,28,23,195,2,27,249,22,169,8,247,22,168,8, -2,70,28,192,249,22,159,8,194,7,63,2,65,2,65,250,80,159,42,8,25, -39,248,80,159,43,57,39,27,248,22,130,16,2,59,28,248,22,178,15,23,194, -2,192,27,28,248,22,176,15,23,195,2,20,13,159,80,159,45,55,37,250,80, -159,48,56,37,249,22,33,11,80,159,50,55,37,22,131,16,248,22,130,16,2, -60,27,248,22,130,16,2,61,250,80,159,49,40,39,23,196,1,23,198,2,11, -11,28,23,193,2,192,86,94,23,193,1,27,249,22,179,15,27,248,22,130,16, -2,61,250,80,159,52,40,39,23,196,1,11,11,248,22,130,16,2,60,90,159, -39,11,89,161,39,36,11,248,22,174,15,23,197,1,86,95,23,195,1,23,194, -1,249,22,179,15,23,200,1,23,195,1,2,71,27,28,23,199,1,250,22,171, -15,248,22,130,16,2,57,247,22,165,8,2,72,11,27,27,250,22,93,23,206, -1,248,22,89,248,22,130,16,2,62,23,207,1,28,248,22,87,23,194,2,9, -27,27,248,22,80,23,196,2,28,248,22,178,15,23,194,2,192,28,248,22,177, -15,23,194,2,249,22,179,15,23,195,1,249,22,179,15,250,80,159,54,40,39, -248,22,130,16,2,61,11,10,248,22,130,16,2,60,250,80,159,50,40,39,248, -22,130,16,2,61,23,196,1,10,28,23,193,2,249,22,79,248,22,181,15,249, -22,179,15,23,198,1,247,22,131,16,27,248,22,81,23,198,1,28,248,22,87, -23,194,2,9,27,248,80,159,51,8,24,39,248,22,80,23,196,2,28,23,193, -2,249,22,79,248,22,181,15,249,22,179,15,23,198,1,247,22,131,16,248,80, -159,53,8,47,39,248,22,81,23,198,1,86,94,23,193,1,248,80,159,51,8, -47,39,248,22,81,23,196,1,86,94,23,193,1,27,248,22,81,23,196,1,28, -248,22,87,23,194,2,9,27,248,80,159,49,8,24,39,248,22,80,23,196,2, -28,23,193,2,249,22,79,248,22,181,15,249,22,179,15,23,198,1,247,22,131, -16,248,80,159,51,8,47,39,248,22,81,23,198,1,86,94,23,193,1,248,80, -159,49,8,47,39,248,22,81,23,196,1,28,193,249,22,79,195,194,192,27,20, -13,159,80,159,37,55,37,26,9,80,159,46,56,37,249,22,33,11,80,159,48, -55,37,22,191,14,10,22,134,15,10,22,135,15,10,22,136,15,10,248,22,142, -6,23,196,2,28,248,22,142,7,23,194,2,12,86,94,248,22,170,9,23,194, -1,27,20,13,159,80,159,38,55,37,26,9,80,159,47,56,37,249,22,33,11, -80,159,49,55,37,22,191,14,10,22,134,15,10,22,135,15,10,22,136,15,10, -248,22,142,6,23,197,2,28,248,22,142,7,23,194,2,12,86,94,248,22,170, -9,23,194,1,27,20,13,159,80,159,39,55,37,26,9,80,159,48,56,37,249, -22,33,11,80,159,50,55,37,22,191,14,10,22,134,15,10,22,135,15,10,22, -136,15,10,248,22,142,6,23,198,2,28,248,22,142,7,23,194,2,12,86,94, -248,22,170,9,23,194,1,248,80,159,40,8,48,39,197,86,94,249,22,133,7, -247,22,167,5,23,196,2,248,22,157,6,249,22,133,4,36,249,22,181,3,23, -198,1,23,199,1,27,28,23,197,2,86,95,23,196,1,23,195,1,23,197,1, -86,94,23,197,1,27,248,22,130,16,2,61,27,250,80,159,42,40,39,23,197, -1,11,11,27,248,22,136,4,23,199,1,27,28,23,194,2,23,194,1,86,94, -23,194,1,36,27,248,22,136,4,23,202,1,27,28,23,194,2,23,194,1,86, -94,23,194,1,36,249,22,134,6,23,199,1,20,20,95,88,163,8,36,36,48, -11,9,224,4,2,33,164,2,23,195,1,23,197,1,27,248,22,183,5,23,195, -1,248,80,159,39,8,48,39,193,159,36,20,114,159,36,16,1,11,16,0,20, -26,145,9,2,1,2,1,29,11,11,11,11,9,9,11,11,11,10,43,80,158, -36,36,20,114,159,43,16,42,2,2,2,3,2,4,2,5,2,6,2,7,2, -8,2,9,2,10,2,11,2,12,2,13,2,14,2,15,2,16,2,17,2,18, -2,19,2,20,30,2,23,1,20,112,97,114,97,109,101,116,101,114,105,122,97, -116,105,111,110,45,107,101,121,11,6,30,2,23,1,23,101,120,116,101,110,100, -45,112,97,114,97,109,101,116,101,114,105,122,97,116,105,111,110,11,3,2,24, -2,25,2,26,2,27,2,28,2,29,30,2,30,76,102,105,110,100,45,108,105, -110,107,115,45,112,97,116,104,33,11,4,2,31,2,32,2,33,2,34,30,2, -30,1,21,101,120,99,101,112,116,105,111,110,45,104,97,110,100,108,101,114,45, -107,101,121,11,2,2,35,2,36,2,37,2,38,2,39,2,40,2,41,2,42, -2,43,16,0,37,39,36,16,0,36,16,25,2,9,2,10,2,8,2,28,2, -3,2,37,2,25,2,26,2,27,2,34,2,20,2,24,2,35,2,31,2,29, -2,32,2,36,2,38,2,18,2,17,2,19,2,33,2,15,2,14,2,16,8, -25,11,11,11,16,13,2,13,2,11,2,43,2,12,2,6,2,42,2,41,2, -4,2,40,2,7,2,39,2,2,2,5,16,13,11,11,11,11,11,11,11,11, -11,11,11,11,11,16,13,2,13,2,11,2,43,2,12,2,6,2,42,2,41, -2,4,2,40,2,7,2,39,2,2,2,5,49,49,37,12,11,11,16,0,16, -0,16,0,36,36,11,12,11,11,16,0,16,0,16,0,36,36,16,45,20,15, -16,2,32,0,88,163,36,37,45,11,2,2,222,33,73,80,159,36,36,37,20, -15,16,2,249,22,149,7,7,92,7,92,80,159,36,37,37,20,15,16,2,88, -163,36,37,54,38,2,4,223,0,33,78,80,159,36,38,37,20,15,16,2,88, -163,36,38,58,38,2,5,223,0,33,80,80,159,36,39,37,20,15,16,2,20, -25,96,2,6,88,163,8,36,39,8,25,8,32,9,223,0,33,87,88,163,36, -38,47,52,9,223,0,33,88,88,163,36,37,46,52,9,223,0,33,89,80,159, -36,40,37,20,15,16,2,27,248,22,140,16,248,22,161,8,27,28,249,22,162, -9,247,22,174,8,2,46,6,1,1,59,6,1,1,58,250,22,131,8,6,14, -14,40,91,94,126,97,93,42,41,126,97,40,46,42,41,23,196,2,23,196,1, -88,163,8,36,38,48,11,2,7,223,0,33,93,80,159,36,41,37,20,15,16, -2,32,0,88,163,8,36,38,47,11,2,8,222,33,94,80,159,36,42,37,20, -15,16,2,32,0,88,163,8,36,39,48,11,2,9,222,33,96,80,159,36,43, -37,20,15,16,2,32,0,88,163,8,36,38,46,11,2,10,222,33,97,80,159, -36,44,37,20,15,16,2,88,163,45,39,49,8,128,16,2,11,223,0,33,99, -80,159,36,45,37,20,15,16,2,88,163,45,40,50,8,128,16,2,13,223,0, -33,101,80,159,36,47,37,20,15,16,2,250,22,171,15,248,22,130,16,2,57, -247,22,165,8,2,58,80,159,36,48,37,20,15,16,2,247,22,137,2,80,158, -36,49,20,15,16,2,11,80,158,36,50,20,15,16,2,249,22,171,15,248,22, -130,16,2,57,2,58,80,159,36,51,37,20,15,16,2,247,22,137,2,80,158, -36,52,20,15,16,2,11,80,158,36,53,20,15,16,2,88,163,36,36,51,8, -240,16,0,24,0,2,20,223,0,33,102,80,159,36,54,37,20,15,16,2,32, -0,88,163,8,36,37,46,11,2,24,222,33,103,80,159,36,57,37,20,15,16, -2,88,163,36,37,56,52,2,25,223,0,33,104,80,159,36,58,37,20,15,16, -2,88,163,36,37,55,52,2,26,223,0,33,105,80,159,36,59,37,20,15,16, -2,88,163,36,37,51,52,2,27,223,0,33,106,80,159,36,8,24,37,20,15, -16,2,88,163,8,36,38,55,16,4,36,8,64,8,128,16,36,2,53,223,0, -33,107,80,159,36,8,42,39,20,15,16,2,88,163,8,36,39,49,16,4,36, -36,8,128,16,36,2,28,223,0,33,108,80,159,36,8,25,37,20,15,16,2, -248,80,159,37,8,27,37,88,163,8,36,36,53,8,240,16,0,120,2,9,223, -1,33,109,80,159,36,8,26,37,20,15,16,2,249,22,178,8,248,22,181,8, -80,159,39,8,26,38,247,22,137,2,80,159,36,8,28,37,20,15,16,2,249, -22,178,8,248,22,181,8,80,159,39,8,26,38,11,80,159,36,8,29,37,20, -15,16,2,248,22,18,65,115,116,97,109,112,80,159,36,8,30,37,20,15,16, -2,88,163,36,37,46,16,2,36,8,240,0,64,0,0,9,223,0,33,111,80, -159,36,8,43,39,20,15,16,2,88,163,36,37,45,16,4,36,8,240,0,64, -0,0,8,129,32,36,2,34,223,0,33,117,80,159,36,8,31,37,20,15,16, -2,88,163,36,39,46,16,4,8,240,0,240,0,0,8,240,27,180,0,0,37, -36,2,35,223,0,33,127,80,159,36,8,33,37,20,15,16,2,88,163,36,38, -56,16,4,36,36,40,36,2,36,223,0,33,129,2,80,159,36,8,34,37,20, -15,16,2,88,163,8,36,38,8,25,16,4,36,8,128,16,8,130,64,36,2, -53,223,0,33,130,2,80,159,36,8,44,39,20,15,16,2,88,163,36,40,8, -33,16,4,36,8,128,16,8,134,64,36,2,12,223,0,33,141,2,80,159,36, -46,37,20,15,16,2,32,0,88,163,36,39,50,11,2,37,222,33,142,2,80, -159,36,8,35,37,20,15,16,2,32,0,88,163,36,41,8,27,11,2,38,222, -33,145,2,80,159,36,8,36,37,20,15,16,2,20,27,158,32,0,88,163,36, -38,52,11,2,39,222,33,148,2,88,163,36,38,49,16,4,36,36,52,36,2, -39,223,0,33,150,2,80,159,36,8,37,37,20,15,16,2,20,27,158,32,0, -88,163,36,38,52,11,2,40,222,33,153,2,88,163,36,38,49,16,4,36,36, -52,36,2,40,223,0,33,154,2,80,159,36,8,38,37,20,15,16,2,20,27, -158,32,0,88,163,36,37,44,11,2,41,222,33,155,2,32,0,88,163,36,37, -44,11,2,41,222,33,156,2,80,159,36,8,39,37,20,15,16,2,88,163,8, -36,37,53,16,4,52,8,128,4,8,128,128,36,2,53,223,0,33,157,2,80, -159,36,8,45,39,20,15,16,2,88,163,8,36,37,53,16,4,52,8,128,4, -8,240,0,64,0,0,36,2,53,223,0,33,158,2,80,159,36,8,46,39,20, -15,16,2,88,163,8,36,37,57,16,4,52,8,128,4,8,240,0,128,0,0, -36,2,53,223,0,33,159,2,80,159,36,8,47,39,20,15,16,2,20,25,96, -2,42,88,163,36,36,56,16,4,8,32,8,164,8,8,128,128,36,9,223,0, -33,160,2,88,163,36,37,57,16,4,8,32,8,164,8,8,240,0,64,0,0, -36,9,223,0,33,161,2,88,163,36,38,8,27,16,4,8,48,8,184,12,8, -240,0,128,0,0,36,9,223,0,33,162,2,80,159,36,8,40,37,20,15,16, -2,88,163,8,36,37,57,16,4,36,8,24,36,37,2,53,223,0,33,163,2, -80,159,36,8,48,39,20,15,16,2,88,163,8,36,39,54,16,4,52,36,36, -37,2,43,223,0,33,165,2,80,159,36,8,41,37,95,29,94,2,21,68,35, -37,107,101,114,110,101,108,11,29,94,2,21,69,35,37,109,105,110,45,115,116, -120,11,2,30,9,9,9,36,0}; - EVAL_ONE_SIZED_STR((char *)expr, 17165); +2,9,27,248,80,159,42,8,24,39,248,22,80,23,196,2,28,23,193,2,249, +22,79,248,22,181,15,249,22,179,15,23,198,1,247,22,131,16,248,80,159,44, +8,47,39,248,22,81,23,198,1,86,94,23,193,1,248,80,159,42,8,47,39, +248,22,81,23,196,1,86,94,23,193,1,27,248,22,81,23,197,1,28,248,22, +87,23,194,2,9,27,248,80,159,40,8,24,39,248,22,80,23,196,2,28,23, +193,2,249,22,79,248,22,181,15,249,22,179,15,23,198,1,247,22,131,16,248, +80,159,42,8,47,39,248,22,81,23,198,1,86,94,23,193,1,248,80,159,40, +8,47,39,248,22,81,23,196,1,28,248,22,87,23,195,2,9,27,27,248,22, +80,23,197,2,28,248,22,178,15,23,194,2,192,28,248,22,177,15,23,194,2, +249,22,179,15,23,195,1,249,22,179,15,250,80,159,45,40,39,248,22,130,16, +2,63,11,10,248,22,130,16,2,62,250,80,159,41,40,39,248,22,130,16,2, +63,23,196,1,10,28,23,193,2,249,22,79,248,22,181,15,249,22,179,15,23, +198,1,247,22,131,16,27,248,22,81,23,199,1,28,248,22,87,23,194,2,9, +27,248,80,159,42,8,24,39,248,22,80,23,196,2,28,23,193,2,249,22,79, +248,22,181,15,249,22,179,15,23,198,1,247,22,131,16,248,80,159,44,8,48, +39,248,22,81,23,198,1,86,94,23,193,1,248,80,159,42,8,48,39,248,22, +81,23,196,1,86,94,23,193,1,27,248,22,81,23,197,1,28,248,22,87,23, +194,2,9,27,248,80,159,40,8,24,39,248,22,80,23,196,2,28,23,193,2, +249,22,79,248,22,181,15,249,22,179,15,23,198,1,247,22,131,16,248,80,159, +42,8,48,39,248,22,81,23,198,1,86,94,23,193,1,248,80,159,40,8,48, +39,248,22,81,23,196,1,28,248,22,87,23,195,2,9,27,27,248,22,80,23, +197,2,28,248,22,178,15,23,194,2,192,28,248,22,177,15,23,194,2,249,22, +179,15,23,195,1,249,22,179,15,250,80,159,45,40,39,248,22,130,16,2,63, +11,10,248,22,130,16,2,62,250,80,159,41,40,39,248,22,130,16,2,63,23, +196,1,10,28,23,193,2,249,22,79,248,22,181,15,249,22,179,15,23,198,1, +247,22,131,16,27,248,22,81,23,199,1,28,248,22,87,23,194,2,9,27,27, +248,22,80,23,196,2,28,248,22,178,15,23,194,2,192,28,248,22,177,15,23, +194,2,249,22,179,15,23,195,1,249,22,179,15,250,80,159,49,40,39,248,22, +130,16,2,63,11,10,248,22,130,16,2,62,250,80,159,45,40,39,248,22,130, +16,2,63,23,196,1,10,28,23,193,2,249,22,79,248,22,181,15,249,22,179, +15,23,198,1,247,22,131,16,27,248,22,81,23,198,1,28,248,22,87,23,194, +2,9,27,248,80,159,46,8,24,39,248,22,80,23,196,2,28,23,193,2,249, +22,79,248,22,181,15,249,22,179,15,23,198,1,247,22,131,16,248,80,159,48, +8,49,39,248,22,81,23,198,1,86,94,23,193,1,248,80,159,46,8,49,39, +248,22,81,23,196,1,86,94,23,193,1,27,248,22,81,23,196,1,28,248,22, +87,23,194,2,9,27,248,80,159,44,8,24,39,248,22,80,23,196,2,28,23, +193,2,249,22,79,248,22,181,15,249,22,179,15,23,198,1,247,22,131,16,248, +80,159,46,8,49,39,248,22,81,23,198,1,86,94,23,193,1,248,80,159,44, +8,49,39,248,22,81,23,196,1,86,94,23,193,1,27,248,22,81,23,197,1, +28,248,22,87,23,194,2,9,27,27,248,22,80,23,196,2,28,248,22,178,15, +23,194,2,192,28,248,22,177,15,23,194,2,249,22,179,15,23,195,1,249,22, +179,15,250,80,159,47,40,39,248,22,130,16,2,63,11,10,248,22,130,16,2, +62,250,80,159,43,40,39,248,22,130,16,2,63,23,196,1,10,28,23,193,2, +249,22,79,248,22,181,15,249,22,179,15,23,198,1,247,22,131,16,27,248,22, +81,23,198,1,28,248,22,87,23,194,2,9,27,248,80,159,44,8,24,39,248, +22,80,23,196,2,28,23,193,2,249,22,79,248,22,181,15,249,22,179,15,23, +198,1,247,22,131,16,248,80,159,46,8,49,39,248,22,81,23,198,1,86,94, +23,193,1,248,80,159,44,8,49,39,248,22,81,23,196,1,86,94,23,193,1, +27,248,22,81,23,196,1,28,248,22,87,23,194,2,9,27,248,80,159,42,8, +24,39,248,22,80,23,196,2,28,23,193,2,249,22,79,248,22,181,15,249,22, +179,15,23,198,1,247,22,131,16,248,80,159,44,8,49,39,248,22,81,23,198, +1,86,94,23,193,1,248,80,159,42,8,49,39,248,22,81,23,196,1,27,247, +22,136,16,249,80,159,39,41,38,28,23,195,2,27,249,22,169,8,247,22,168, +8,2,74,28,192,249,22,159,8,194,7,63,2,69,2,69,250,80,159,42,8, +25,39,248,80,159,43,57,39,247,80,159,43,54,39,2,75,27,28,23,199,1, +250,22,171,15,248,22,130,16,2,59,247,22,165,8,2,76,11,27,248,80,159, +45,8,47,39,250,22,93,9,248,22,89,248,22,130,16,2,64,9,28,193,249, +22,79,195,194,192,27,247,22,136,16,249,80,159,39,41,38,28,23,195,2,27, +249,22,169,8,247,22,168,8,2,74,28,192,249,22,159,8,194,7,63,2,69, +2,69,250,80,159,42,8,25,39,248,80,159,43,57,39,247,80,159,43,54,39, +2,75,27,28,23,199,1,250,22,171,15,248,22,130,16,2,59,247,22,165,8, +2,76,11,27,248,80,159,45,8,48,39,250,22,93,23,206,1,248,22,89,248, +22,130,16,2,64,9,28,193,249,22,79,195,194,192,27,247,22,136,16,249,80, +159,39,41,38,28,23,195,2,27,249,22,169,8,247,22,168,8,2,74,28,192, +249,22,159,8,194,7,63,2,69,2,69,250,80,159,42,8,25,39,248,80,159, +43,57,39,27,248,22,130,16,2,61,28,248,22,178,15,23,194,2,192,27,28, +248,22,176,15,23,195,2,20,13,159,80,159,45,55,37,250,80,159,48,56,37, +249,22,33,11,80,159,50,55,37,22,131,16,248,22,130,16,2,62,27,248,22, +130,16,2,63,250,80,159,49,40,39,23,196,1,23,198,2,11,11,28,23,193, +2,192,86,94,23,193,1,27,249,22,179,15,27,248,22,130,16,2,63,250,80, +159,52,40,39,23,196,1,11,11,248,22,130,16,2,62,90,159,39,11,89,161, +39,36,11,248,22,174,15,23,197,1,86,95,23,195,1,23,194,1,249,22,179, +15,23,200,1,23,195,1,2,75,27,28,23,199,1,250,22,171,15,248,22,130, +16,2,59,247,22,165,8,2,76,11,27,27,250,22,93,23,206,1,248,22,89, +248,22,130,16,2,64,23,207,1,28,248,22,87,23,194,2,9,27,27,248,22, +80,23,196,2,28,248,22,178,15,23,194,2,192,28,248,22,177,15,23,194,2, +249,22,179,15,23,195,1,249,22,179,15,250,80,159,54,40,39,248,22,130,16, +2,63,11,10,248,22,130,16,2,62,250,80,159,50,40,39,248,22,130,16,2, +63,23,196,1,10,28,23,193,2,249,22,79,248,22,181,15,249,22,179,15,23, +198,1,247,22,131,16,27,248,22,81,23,198,1,28,248,22,87,23,194,2,9, +27,248,80,159,51,8,24,39,248,22,80,23,196,2,28,23,193,2,249,22,79, +248,22,181,15,249,22,179,15,23,198,1,247,22,131,16,248,80,159,53,8,49, +39,248,22,81,23,198,1,86,94,23,193,1,248,80,159,51,8,49,39,248,22, +81,23,196,1,86,94,23,193,1,27,248,22,81,23,196,1,28,248,22,87,23, +194,2,9,27,248,80,159,49,8,24,39,248,22,80,23,196,2,28,23,193,2, +249,22,79,248,22,181,15,249,22,179,15,23,198,1,247,22,131,16,248,80,159, +51,8,49,39,248,22,81,23,198,1,86,94,23,193,1,248,80,159,49,8,49, +39,248,22,81,23,196,1,28,193,249,22,79,195,194,192,27,20,13,159,80,159, +37,55,37,26,9,80,159,46,56,37,249,22,33,11,80,159,48,55,37,22,191, +14,10,22,134,15,10,22,135,15,10,22,136,15,10,248,22,142,6,23,196,2, +28,248,22,142,7,23,194,2,12,86,94,248,22,170,9,23,194,1,27,20,13, +159,80,159,38,55,37,26,9,80,159,47,56,37,249,22,33,11,80,159,49,55, +37,22,191,14,10,22,134,15,10,22,135,15,10,22,136,15,10,248,22,142,6, +23,197,2,28,248,22,142,7,23,194,2,12,86,94,248,22,170,9,23,194,1, +27,20,13,159,80,159,39,55,37,26,9,80,159,48,56,37,249,22,33,11,80, +159,50,55,37,22,191,14,10,22,134,15,10,22,135,15,10,22,136,15,10,248, +22,142,6,23,198,2,28,248,22,142,7,23,194,2,12,86,94,248,22,170,9, +23,194,1,248,80,159,40,8,50,39,197,86,94,249,22,133,7,247,22,167,5, +23,196,2,248,22,157,6,249,22,133,4,36,249,22,181,3,23,198,1,23,199, +1,27,28,23,197,2,86,95,23,196,1,23,195,1,23,197,1,86,94,23,197, +1,27,248,22,130,16,2,63,27,250,80,159,42,40,39,23,197,1,11,11,27, +248,22,136,4,23,199,1,27,28,23,194,2,23,194,1,86,94,23,194,1,36, +27,248,22,136,4,23,202,1,27,28,23,194,2,23,194,1,86,94,23,194,1, +36,249,22,134,6,23,199,1,20,20,95,88,163,8,36,36,48,11,9,224,4, +2,33,173,2,23,195,1,23,197,1,27,248,22,183,5,23,195,1,248,80,159, +39,8,50,39,193,159,36,20,114,159,36,16,1,11,16,0,20,26,145,9,2, +1,2,1,29,11,11,11,11,9,9,11,11,11,10,43,80,158,36,36,20,114, +159,43,16,44,2,2,2,3,2,4,2,5,2,6,2,7,2,8,2,9,2, +10,2,11,2,12,2,13,2,14,2,15,2,16,2,17,2,18,2,19,2,20, +30,2,23,1,20,112,97,114,97,109,101,116,101,114,105,122,97,116,105,111,110, +45,107,101,121,11,6,30,2,23,1,23,101,120,116,101,110,100,45,112,97,114, +97,109,101,116,101,114,105,122,97,116,105,111,110,11,3,2,24,2,25,2,26, +2,27,2,28,2,29,30,2,30,76,102,105,110,100,45,108,105,110,107,115,45, +112,97,116,104,33,11,4,2,31,2,32,2,33,2,34,30,2,30,1,21,101, +120,99,101,112,116,105,111,110,45,104,97,110,100,108,101,114,45,107,101,121,11, +2,2,35,2,36,2,37,2,38,2,39,2,40,2,41,2,42,2,43,2,44, +2,45,16,0,37,39,36,16,0,36,16,27,2,9,2,10,2,8,2,28,2, +3,2,39,2,25,2,26,2,27,2,34,2,20,2,24,2,37,2,31,2,29, +2,32,2,36,2,38,2,40,2,18,2,17,2,19,2,33,2,35,2,15,2, +14,2,16,8,27,11,11,11,16,13,2,13,2,11,2,45,2,12,2,6,2, +44,2,43,2,4,2,42,2,7,2,41,2,2,2,5,16,13,11,11,11,11, +11,11,11,11,11,11,11,11,11,16,13,2,13,2,11,2,45,2,12,2,6, +2,44,2,43,2,4,2,42,2,7,2,41,2,2,2,5,49,49,37,12,11, +11,16,0,16,0,16,0,36,36,11,12,11,11,16,0,16,0,16,0,36,36, +16,47,20,15,16,2,32,0,88,163,36,37,45,11,2,2,222,33,77,80,159, +36,36,37,20,15,16,2,249,22,149,7,7,92,7,92,80,159,36,37,37,20, +15,16,2,88,163,36,37,54,38,2,4,223,0,33,82,80,159,36,38,37,20, +15,16,2,88,163,36,38,58,38,2,5,223,0,33,84,80,159,36,39,37,20, +15,16,2,20,25,96,2,6,88,163,8,36,39,8,25,8,32,9,223,0,33, +91,88,163,36,38,47,52,9,223,0,33,92,88,163,36,37,46,52,9,223,0, +33,93,80,159,36,40,37,20,15,16,2,27,248,22,140,16,248,22,161,8,27, +28,249,22,162,9,247,22,174,8,2,48,6,1,1,59,6,1,1,58,250,22, +131,8,6,14,14,40,91,94,126,97,93,42,41,126,97,40,46,42,41,23,196, +2,23,196,1,88,163,8,36,38,48,11,2,7,223,0,33,97,80,159,36,41, +37,20,15,16,2,32,0,88,163,8,36,38,47,11,2,8,222,33,98,80,159, +36,42,37,20,15,16,2,32,0,88,163,8,36,39,48,11,2,9,222,33,100, +80,159,36,43,37,20,15,16,2,32,0,88,163,8,36,38,46,11,2,10,222, +33,101,80,159,36,44,37,20,15,16,2,88,163,45,39,49,8,128,16,2,11, +223,0,33,103,80,159,36,45,37,20,15,16,2,88,163,45,40,50,8,128,16, +2,13,223,0,33,105,80,159,36,47,37,20,15,16,2,250,22,171,15,248,22, +130,16,2,59,247,22,165,8,2,60,80,159,36,48,37,20,15,16,2,247,22, +137,2,80,158,36,49,20,15,16,2,11,80,158,36,50,20,15,16,2,249,22, +171,15,248,22,130,16,2,59,2,60,80,159,36,51,37,20,15,16,2,247,22, +137,2,80,158,36,52,20,15,16,2,11,80,158,36,53,20,15,16,2,88,163, +36,36,51,8,240,16,0,24,0,2,20,223,0,33,106,80,159,36,54,37,20, +15,16,2,32,0,88,163,8,36,37,46,11,2,24,222,33,107,80,159,36,57, +37,20,15,16,2,88,163,36,37,56,52,2,25,223,0,33,108,80,159,36,58, +37,20,15,16,2,88,163,36,37,55,52,2,26,223,0,33,109,80,159,36,59, +37,20,15,16,2,88,163,36,37,51,52,2,27,223,0,33,110,80,159,36,8, +24,37,20,15,16,2,88,163,8,36,38,55,16,4,36,8,64,8,128,64,36, +2,55,223,0,33,111,80,159,36,8,44,39,20,15,16,2,88,163,8,36,39, +49,16,4,36,36,8,128,64,36,2,28,223,0,33,112,80,159,36,8,25,37, +20,15,16,2,248,80,159,37,8,27,37,88,163,8,36,36,53,8,240,16,0, +120,2,9,223,1,33,113,80,159,36,8,26,37,20,15,16,2,249,22,178,8, +248,22,181,8,80,159,39,8,26,38,247,22,137,2,80,159,36,8,28,37,20, +15,16,2,249,22,178,8,248,22,181,8,80,159,39,8,26,38,11,80,159,36, +8,29,37,20,15,16,2,248,22,18,65,115,116,97,109,112,80,159,36,8,30, +37,20,15,16,2,88,163,36,37,46,16,2,36,8,240,0,64,0,0,9,223, +0,33,115,80,159,36,8,45,39,20,15,16,2,88,163,36,38,48,16,4,36, +8,240,0,64,0,0,8,129,128,36,2,34,223,0,33,123,80,159,36,8,31, +37,20,15,16,2,32,0,88,163,36,38,46,11,2,35,222,33,124,80,159,36, +8,33,37,20,15,16,2,32,0,88,163,8,36,37,45,11,2,36,222,33,125, +80,159,36,8,34,37,20,15,16,2,88,163,36,39,46,16,4,8,240,0,240, +0,0,8,240,27,180,0,0,37,36,2,37,223,0,33,136,2,80,159,36,8, +35,37,20,15,16,2,88,163,36,38,56,16,4,36,36,52,36,2,38,223,0, +33,138,2,80,159,36,8,36,37,20,15,16,2,88,163,8,36,38,8,25,16, +4,36,8,128,16,8,240,8,64,0,0,36,2,55,223,0,33,139,2,80,159, +36,8,46,39,20,15,16,2,88,163,36,40,8,33,16,4,36,8,128,16,8, +240,24,64,0,0,36,2,12,223,0,33,150,2,80,159,36,46,37,20,15,16, +2,32,0,88,163,36,39,50,11,2,39,222,33,151,2,80,159,36,8,37,37, +20,15,16,2,32,0,88,163,36,41,8,27,11,2,40,222,33,154,2,80,159, +36,8,38,37,20,15,16,2,20,27,158,32,0,88,163,36,38,52,11,2,41, +222,33,157,2,88,163,36,38,49,16,4,36,36,8,64,36,2,41,223,0,33, +159,2,80,159,36,8,39,37,20,15,16,2,20,27,158,32,0,88,163,36,38, +52,11,2,42,222,33,162,2,88,163,36,38,49,16,4,36,36,8,64,36,2, +42,223,0,33,163,2,80,159,36,8,40,37,20,15,16,2,20,27,158,32,0, +88,163,36,37,44,11,2,43,222,33,164,2,32,0,88,163,36,37,44,11,2, +43,222,33,165,2,80,159,36,8,41,37,20,15,16,2,88,163,8,36,37,53, +16,4,52,8,128,4,8,240,0,128,0,0,36,2,55,223,0,33,166,2,80, +159,36,8,47,39,20,15,16,2,88,163,8,36,37,53,16,4,52,8,128,4, +36,37,2,55,223,0,33,167,2,80,159,36,8,48,39,20,15,16,2,88,163, +8,36,37,57,16,4,52,8,128,4,36,38,2,55,223,0,33,168,2,80,159, +36,8,49,39,20,15,16,2,20,25,96,2,44,88,163,36,36,56,16,4,8, +32,8,164,8,8,240,0,128,0,0,36,9,223,0,33,169,2,88,163,36,37, +57,16,4,8,32,8,164,8,36,37,9,223,0,33,170,2,88,163,36,38,8, +27,16,4,8,48,8,184,12,36,38,9,223,0,33,171,2,80,159,36,8,42, +37,20,15,16,2,88,163,8,36,37,57,16,4,36,8,24,36,40,2,55,223, +0,33,172,2,80,159,36,8,50,39,20,15,16,2,88,163,8,36,39,54,16, +4,52,36,36,40,2,45,223,0,33,174,2,80,159,36,8,43,37,95,29,94, +2,21,68,35,37,107,101,114,110,101,108,11,29,94,2,21,69,35,37,109,105, +110,45,115,116,120,11,2,30,9,9,9,36,0}; + EVAL_ONE_SIZED_STR((char *)expr, 18114); } { SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,9,53,46,51,46,57,48,48,46,52,84,0,0,0,0,0,0,0,0, @@ -1442,7 +1487,7 @@ 2,2,74,35,37,112,108,97,99,101,45,115,116,114,117,99,116,11,29,94,2, 2,66,35,37,98,111,111,116,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, -198,91,0,0,100,159,2,3,36,36,159,2,4,36,36,159,2,5,36,36,159, +248,91,0,0,100,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,8,36,36,159,2,9,36,36,159,2, 9,36,36,16,0,159,36,20,114,159,36,16,1,11,16,0,20,26,145,9,2, 1,2,1,29,11,11,11,11,9,9,11,11,11,18,96,11,46,46,46,36,80, diff --git a/racket/src/racket/src/startup.inc b/racket/src/racket/src/startup.inc index 869d8bdce6..7a49dbacbf 100644 --- a/racket/src/racket/src/startup.inc +++ b/racket/src/racket/src/startup.inc @@ -424,7 +424,13 @@ "(define-values(links-stamps)(make-vector(vector-length links-paths) #f))" "(define-values(stamp-prompt-tag)(make-continuation-prompt-tag 'stamp))" "(define-values(file->stamp)" -"(lambda(path)" +"(lambda(path old-stamp)" +"(cond" +"((and old-stamp" +"(cdr old-stamp)" +"(not(sync/timeout 0(cdr old-stamp))))" +" old-stamp)" +"(else" "(call-with-continuation-prompt" "(lambda()" "(with-continuation-mark" @@ -435,6 +441,18 @@ "(if(exn:fail:filesystem? exn)" "(lambda() #f)" "(lambda()(raise exn)))))" +"(let((dir-evt" +"(let loop((path path))" +"(let-values(((base name dir?)(split-path path)))" +"(and(path? base)" +"(if(directory-exists? base)" +"(filesystem-change-evt base(lambda() #f))" +"(loop base)))))))" +"(if(not(file-exists? path))" +"(cons #f dir-evt)" +"(let((evt(filesystem-change-evt path(lambda() #f))))" +"(when dir-evt(filesystem-change-evt-cancel dir-evt))" +"(cons" "(let((p(open-input-file path)))" "(dynamic-wind" " void" @@ -452,8 +470,18 @@ " null" "(cons bstr(loop)))))))" " bstr)))" -"(lambda()(close-input-port p))))))" -" stamp-prompt-tag)))" +"(lambda()(close-input-port p))))" +" evt))))))" +" stamp-prompt-tag)))))" +"(define-values(stamp=?)" +"(lambda(a b)" +"(if(and(pair? a)(pair? b))" +"(equal?(car a)(car b))" +"(equal? a b))))" +"(define-values(no-file-stamp?)" +"(lambda(a)" +"(or(not a)" +"(not(car a)))))" "(define-values(get-linked-collections)" "(lambda(user? shared? ii)" "(call/ec(lambda(esc)" @@ -494,11 +522,12 @@ "(user? user-links-path)" "(shared? shared-links-path)" "(else(vector-ref links-paths ii))))" -"(ts(file->stamp a-links-path)))" -"(if(not(equal? ts(cond" +"(a-links-stamp(cond" "(user? user-links-stamp)" "(shared? shared-links-stamp)" -"(else(vector-ref links-stamps ii)))))" +"(else(vector-ref links-stamps ii))))" +"(ts(file->stamp a-links-path a-links-stamp)))" +"(if(not(stamp=? ts a-links-stamp))" "(with-continuation-mark" " exception-handler-key" "(make-handler ts)" @@ -516,7 +545,9 @@ "(read-accept-reader #t)" "(read-accept-lang #f)" "(current-readtable #f))" -"(let((v(let((p(open-input-file a-links-path 'binary)))" +"(let((v(if(no-file-stamp? ts)" +" null" +"(let((p(open-input-file a-links-path 'binary)))" "(dynamic-wind" " void" "(lambda() " @@ -524,14 +555,15 @@ "(read p)" "(unless(eof-object?(read p))" " (error \"expected a single S-expression\"))))" -"(lambda()(close-input-port p))))))" +"(lambda()(close-input-port p)))))))" "(unless(and(list? v)" "(andmap(lambda(p)" "(and(list? p)" "(or(= 2(length p))" "(= 3(length p)))" "(or(string?(car p))" -"(eq? 'root(car p)))" +"(eq? 'root(car p))" +"(eq? 'static-root(car p)))" "(path-string?(cadr p))" "(or(null?(cddr p))" "(regexp?(caddr p)))))" @@ -546,17 +578,25 @@ "(regexp-match?(caddr p)(version)))" "(let((dir(simplify-path" "(path->complete-path(cadr p) dir))))" -"(if(symbol?(car p))" -"(begin" +"(cond" +"((eq?(car p) 'static-root)" +"(for-each" +"(lambda(sub)" +"(when(directory-exists?(build-path dir sub))" +"(let((k(string->symbol(path->string sub))))" +"(hash-set! ht k(cons dir(hash-ref ht k null))))))" +"(directory-list dir)))" +"((eq?(car p) 'root)" "(unless(hash-ref ht #f #f)" "(hash-set! ht #f null))" "(hash-for-each" " ht" "(lambda(k v)" "(hash-set! ht k(cons dir v)))))" +"(else" "(let((s(string->symbol(car p))))" "(hash-set! ht s(cons(box dir)" -"(hash-ref ht s null))))))))" +"(hash-ref ht s null)))))))))" " v)" "(hash-for-each" " ht" diff --git a/racket/src/racket/src/startup.rktl b/racket/src/racket/src/startup.rktl index d0846d622d..4834f54239 100644 --- a/racket/src/racket/src/startup.rktl +++ b/racket/src/racket/src/startup.rktl @@ -505,42 +505,72 @@ (define-values (stamp-prompt-tag) (make-continuation-prompt-tag 'stamp)) (define-values (file->stamp) - (lambda (path) - ;; We'd prefer to do something lighter than read the file every time! - ;; Using just the file's modification date almost works, but 1-second - ;; granularity isn't fine enough. To do this right, probably Racket needs - ;; to provide more support from the OS's filesystem (along the lines of - ;; inotify, but the interface varies among platforms). - (call-with-continuation-prompt - (lambda () - (with-continuation-mark - exception-handler-key - (lambda (exn) - (abort-current-continuation - stamp-prompt-tag - (if (exn:fail:filesystem? exn) - (lambda () #f) - (lambda () (raise exn))))) - (let ([p (open-input-file path)]) - (dynamic-wind - void - (lambda () - (let ([bstr (read-bytes 8192 p)]) - (if (and (bytes? bstr) - ((bytes-length bstr) . >= . 8192)) - (apply - bytes-append - (cons - bstr - (let loop () - (let ([bstr (read-bytes 8192 p)]) - (if (eof-object? bstr) - null - (cons bstr (loop))))))) - bstr))) - (lambda () (close-input-port p)))))) - stamp-prompt-tag))) + (lambda (path old-stamp) + ;; Using just the file's modification date almost works as a stamp, + ;; but 1-second granularity isn't fine enough. A stamp is therefore + ;; the file content paired with a filesystem-change event (where + ;; supported), and the event lets us recycle the old stamp almost + ;; always. + (cond + [(and old-stamp + (cdr old-stamp) + (not (sync/timeout 0 (cdr old-stamp)))) + old-stamp] + [else + (call-with-continuation-prompt + (lambda () + (with-continuation-mark + exception-handler-key + (lambda (exn) + (abort-current-continuation + stamp-prompt-tag + (if (exn:fail:filesystem? exn) + (lambda () #f) + (lambda () (raise exn))))) + (let ([dir-evt + (let loop ([path path]) + (let-values ([(base name dir?) (split-path path)]) + (and (path? base) + (if (directory-exists? base) + (filesystem-change-evt base (lambda () #f)) + (loop base)))))]) + (if (not (file-exists? path)) + (cons #f dir-evt) + (let ([evt (filesystem-change-evt path (lambda () #f))]) + (when dir-evt (filesystem-change-evt-cancel dir-evt)) + (cons + (let ([p (open-input-file path)]) + (dynamic-wind + void + (lambda () + (let ([bstr (read-bytes 8192 p)]) + (if (and (bytes? bstr) + ((bytes-length bstr) . >= . 8192)) + (apply + bytes-append + (cons + bstr + (let loop () + (let ([bstr (read-bytes 8192 p)]) + (if (eof-object? bstr) + null + (cons bstr (loop))))))) + bstr))) + (lambda () (close-input-port p)))) + evt)))))) + stamp-prompt-tag)]))) + + (define-values (stamp=?) + (lambda (a b) + (if (and (pair? a) (pair? b)) + (equal? (car a) (car b)) + (equal? a b)))) + (define-values (no-file-stamp?) + (lambda (a) + (or (not a) + (not (car a))))) + (define-values (get-linked-collections) (lambda (user? shared? ii) (call/ec (lambda (esc) @@ -582,11 +612,12 @@ [user? user-links-path] [shared? shared-links-path] [else (vector-ref links-paths ii)])] - [ts (file->stamp a-links-path)]) - (if (not (equal? ts (cond + [a-links-stamp (cond [user? user-links-stamp] [shared? shared-links-stamp] - [else (vector-ref links-stamps ii)]))) + [else (vector-ref links-stamps ii)])] + [ts (file->stamp a-links-path a-links-stamp)]) + (if (not (stamp=? ts a-links-stamp)) (with-continuation-mark exception-handler-key (make-handler ts) @@ -604,22 +635,25 @@ [read-accept-reader #t] [read-accept-lang #f] [current-readtable #f]) - (let ([v (let ([p (open-input-file a-links-path 'binary)]) - (dynamic-wind - void - (lambda () - (begin0 - (read p) - (unless (eof-object? (read p)) - (error "expected a single S-expression")))) - (lambda () (close-input-port p))))]) + (let ([v (if (no-file-stamp? ts) + null + (let ([p (open-input-file a-links-path 'binary)]) + (dynamic-wind + void + (lambda () + (begin0 + (read p) + (unless (eof-object? (read p)) + (error "expected a single S-expression")))) + (lambda () (close-input-port p)))))]) (unless (and (list? v) (andmap (lambda (p) (and (list? p) (or (= 2 (length p)) (= 3 (length p))) (or (string? (car p)) - (eq? 'root (car p))) + (eq? 'root (car p)) + (eq? 'static-root (car p))) (path-string? (cadr p)) (or (null? (cddr p)) (regexp? (caddr p))))) @@ -634,21 +668,31 @@ (regexp-match? (caddr p) (version))) (let ([dir (simplify-path (path->complete-path (cadr p) dir))]) - (if (symbol? (car p)) - ;; add to every table element (to keep - ;; the choices in order); need a better - ;; data structure - (begin - (unless (hash-ref ht #f #f) - (hash-set! ht #f null)) - (hash-for-each - ht - (lambda (k v) - (hash-set! ht k (cons dir v))))) - ;; single collection: - (let ([s (string->symbol (car p))]) - (hash-set! ht s (cons (box dir) - (hash-ref ht s null)))))))) + (cond + [(eq? (car p) 'static-root) + ;; multi-collection, constant content: + (for-each + (lambda (sub) + (when (directory-exists? (build-path dir sub)) + (let ([k (string->symbol (path->string sub))]) + (hash-set! ht k (cons dir (hash-ref ht k null)))))) + (directory-list dir))] + [(eq? (car p) 'root) + ;; multi-collection, dynamic content: + ;; Add directory to the #f mapping, and also + ;; add to every existing table element (to keep + ;; the choices in order) + (unless (hash-ref ht #f #f) + (hash-set! ht #f null)) + (hash-for-each + ht + (lambda (k v) + (hash-set! ht k (cons dir v))))] + [else + ;; single collection: + (let ([s (string->symbol (car p))]) + (hash-set! ht s (cons (box dir) + (hash-ref ht s null))))])))) v) ;; reverse all lists: (hash-for-each